mirror of
https://github.com/vishapoberon/vipak.git
synced 2026-04-06 04:52:26 +00:00
can be compiled, syncs tree. needs check for bugs.
This commit is contained in:
parent
7a741b509a
commit
163102bd19
15 changed files with 264 additions and 216 deletions
153
src/vpkConf.Mod
153
src/vpkConf.Mod
|
|
@ -1,105 +1,76 @@
|
|||
MODULE vpkConf;
|
||||
IMPORT Out, Files, Strings, Platform,
|
||||
vpkFsHelper, vpkSettings;
|
||||
vpkSettings, vpkEnv, vpkJsonParser;
|
||||
|
||||
VAR
|
||||
conf, confDir : ARRAY 256 OF CHAR;
|
||||
|
||||
PROCEDURE getHome(VAR path: ARRAY OF CHAR);
|
||||
BEGIN
|
||||
IF ~(Platform.getEnv("HOME", path)) THEN
|
||||
Out.String("HOME variable is not found"); Out.Ln;
|
||||
HALT(1);
|
||||
END;
|
||||
END getHome;
|
||||
CONST
|
||||
open = '{"';
|
||||
close = '"}';
|
||||
is = '": "';
|
||||
newkey = '", "';
|
||||
|
||||
PROCEDURE mkConfContent(VAR path: ARRAY OF CHAR);
|
||||
(* constructing the line like:
|
||||
{"path" : "https://github.com/vishaps/vipackTree"}, "type" : "git"}
|
||||
*)
|
||||
BEGIN
|
||||
Strings.Append('{"path" : "', path);
|
||||
Strings.Append(vpkSettings.treeURL, path);
|
||||
Strings.Append('"}, "type" : "git"}', path);
|
||||
COPY("", path);
|
||||
Strings.Append(open, path);
|
||||
Strings.Append(vpkSettings.confTreeKey, path);
|
||||
Strings.Append(is, path);
|
||||
Strings.Append(vpkSettings.defTreeVal, path);
|
||||
Strings.Append(newkey, path);
|
||||
Strings.Append(vpkSettings.confTypKey, path);
|
||||
Strings.Append(is, path);
|
||||
Strings.Append(vpkSettings.defTypVal, path);
|
||||
Strings.Append(close, path);
|
||||
END mkConfContent;
|
||||
|
||||
PROCEDURE makeFile(VAR confFilePath: ARRAY OF CHAR; VAR f: Files.File; VAR r: Files.Rider);
|
||||
BEGIN
|
||||
f := Files.New(confFilePath);
|
||||
Files.Set(r, f, 0);
|
||||
END makeFile;
|
||||
|
||||
PROCEDURE writeInFile(VAR f: Files.File; r: Files.Rider; VAR text : ARRAY OF CHAR);
|
||||
BEGIN
|
||||
Files.WriteBytes(r, text, Strings.Length(text));
|
||||
END writeInFile;
|
||||
|
||||
PROCEDURE closeFile(VAR f: Files.File);
|
||||
BEGIN
|
||||
Files.Register(f);
|
||||
Files.Close(f);
|
||||
END closeFile;
|
||||
|
||||
PROCEDURE mkConfDirPath(home: ARRAY OF CHAR; VAR path: ARRAY OF CHAR);
|
||||
BEGIN
|
||||
confDir := home;
|
||||
Strings.Append("/", path);
|
||||
Strings.Append(vpkSettings.vpkConfDir, path);
|
||||
END mkConfDirPath;
|
||||
|
||||
PROCEDURE setConfPath;
|
||||
PROCEDURE mkDefConfig*;
|
||||
VAR
|
||||
home: ARRAY 128 OF CHAR;
|
||||
content: ARRAY 96 OF CHAR;
|
||||
f: Files.File;
|
||||
r: Files.Rider;
|
||||
BEGIN
|
||||
getHome(home);
|
||||
mkConfDirPath(home, confDir);
|
||||
conf := confDir;
|
||||
Strings.Append("/", conf);
|
||||
Strings.Append(vpkSettings.vpkConfFile, conf);
|
||||
END setConfPath;
|
||||
|
||||
PROCEDURE getConfPath*(VAR path: ARRAY OF CHAR);
|
||||
BEGIN
|
||||
COPY(conf, path);
|
||||
END getConfPath;
|
||||
|
||||
PROCEDURE getConfDir*(VAR path: ARRAY OF CHAR);
|
||||
BEGIN
|
||||
COPY(confDir, path);
|
||||
END getConfDir;
|
||||
|
||||
PROCEDURE configure*;
|
||||
VAR
|
||||
content: ARRAY 256 OF CHAR;
|
||||
file : vpkFsHelper.fileInfo;
|
||||
fd: Files.File;
|
||||
rd: Files.Rider;
|
||||
BEGIN
|
||||
file.name := conf;
|
||||
IF ~vpkFsHelper.Exists(file) THEN
|
||||
(* Checking if ~/.vipack directory already exists *)
|
||||
file.name := confDir;
|
||||
IF ~vpkFsHelper.Exists(file) THEN (* exists!!! *)
|
||||
Out.String("Creating directory "); Out.String(confDir);Out.Ln;
|
||||
IF ~vpkFsHelper.mkDir(confDir) THEN
|
||||
Out.String("failed to create "); Out.String(confDir); Out.String(" directory"); Out.Ln;
|
||||
HALT(1);
|
||||
END;
|
||||
ELSE
|
||||
IF ~(vpkFsHelper.dir IN file.attr) THEN
|
||||
Out.String(confDir); Out.String(" exists, but is not a directory"); Out.Ln;
|
||||
HALT(1);
|
||||
END;
|
||||
END;
|
||||
(* create conf file *)
|
||||
Out.String("Creating the configuration file "); Out.String(conf);Out.Ln;
|
||||
content := "";
|
||||
makeFile(conf, fd, rd);
|
||||
vpkEnv.checkEnv;
|
||||
f := vpkEnv.getConfFile();
|
||||
Files.Set(r, f, 0);
|
||||
mkConfContent(content);
|
||||
writeInFile(fd, rd, content);
|
||||
closeFile(fd);
|
||||
ELSE
|
||||
Out.String("File already exists");Out.Ln;
|
||||
END;
|
||||
END configure;
|
||||
Files.WriteBytes(r, content, Strings.Length(content));
|
||||
Files.Register(f);
|
||||
Files.Close(f);
|
||||
END mkDefConfig;
|
||||
|
||||
PROCEDURE configured*(): BOOLEAN;
|
||||
BEGIN
|
||||
setConfPath;
|
||||
RETURN vpkEnv.checkConfig()
|
||||
END configured;
|
||||
|
||||
PROCEDURE getConfigTreeVal*(VAR tree: vpkSettings.tree);
|
||||
VAR
|
||||
f: Files.File; r: Files.Rider;
|
||||
dt: ARRAY 256 OF CHAR;
|
||||
i : INTEGER; ch: CHAR;
|
||||
jsonRecord : vpkJsonParser.JsonTypePointer;
|
||||
b: BOOLEAN;
|
||||
treeTyp: ARRAY 8 OF CHAR;
|
||||
BEGIN
|
||||
f := vpkEnv.getConfFile();
|
||||
Files.Set(r, f, 0);
|
||||
i := 0;
|
||||
WHILE ~ r.eof & (i < LEN(dt)) DO Files.Read(r, ch); dt[i] := ch; INC(i) END;
|
||||
Files.Close(f);
|
||||
jsonRecord := vpkJsonParser.Create(dt);
|
||||
b := vpkJsonParser.GetTerminal(jsonRecord, vpkSettings.confTreeKey, tree.url);
|
||||
IF ~b THEN Out.String("unable to read "); Out.String (vpkSettings.confTreeKey); Out.String(" from json"); Out.Ln; HALT(1); END;
|
||||
b := vpkJsonParser.GetTerminal(jsonRecord, vpkSettings.confTypKey, treeTyp);
|
||||
IF ~b THEN Out.String("unable to read "); Out.String (vpkSettings.confTypKey); Out.String(" from json"); Out.Ln; HALT(1); END;
|
||||
IF treeTyp = vpkSettings.confTypGitVal THEN
|
||||
tree.typ := vpkSettings.git;
|
||||
ELSIF treeTyp = vpkSettings.confTypHttpVal THEN
|
||||
tree.typ := vpkSettings.http
|
||||
ELSE
|
||||
tree.typ := vpkSettings.unkn;
|
||||
END;
|
||||
END getConfigTreeVal;
|
||||
|
||||
END vpkConf.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue