refactoring to use sts-q's json module. compiles.

This commit is contained in:
Norayr Chilingarian 2024-01-31 07:57:23 +04:00
parent f303281641
commit bf32bf4a8f
6 changed files with 316 additions and 87 deletions

View file

@ -1,4 +1,4 @@
DEPEND = github.com/norayr/lists github.com/norayr/Internet github.com/norayr/opts github.com/norayr/skprLogger github.com/norayr/skprJson codeberg.org/sts-q/vishaps-ssqJson
DEPEND = github.com/norayr/dbg github.com/norayr/strutils github.com/norayr/Internet github.com/norayr/http github.com/norayr/lists github.com/norayr/opts github.com/norayr/skprLogger github.com/norayr/skprJson codeberg.org/sts-q/vishaps-ssqJson
VOC = /opt/voc/bin/voc
mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST)))
@ -19,28 +19,28 @@ all: get_deps build_deps buildThis
get_deps:
@for i in $(DEPEND); do \
if [ -d "$(DPS)/$${i}" ]; then \
cd "$(DPS)/$${i}"; \
git pull; \
cd - ; \
else \
mkdir -p "$(DPS)/$${i}"; \
cd "$(DPS)/$${i}"; \
cd .. ; \
git clone "https://$${i}"; \
cd - ; \
fi; \
if [ -d "$(DPS)/$${i}" ]; then \
cd "$(DPS)/$${i}"; \
git pull; \
cd - ; \
else \
mkdir -p "$(DPS)/$${i}"; \
cd "$(DPS)/$${i}"; \
cd .. ; \
git clone "https://$${i}"; \
cd - ; \
fi; \
done
build_deps:
mkdir -p $(BLD)
cd $(BLD); \
for i in $(DEPEND); do \
if [ -f "$(DPS)/$${i}/GNUmakefile" ]; then \
make -f "$(DPS)/$${i}/GNUmakefile" BUILD=$(BLD); \
else \
make -f "$(DPS)/$${i}/Makefile" BUILD=$(BLD); \
fi; \
if [ -f "$(DPS)/$${i}/GNUmakefile" ]; then \
make -f "$(DPS)/$${i}/GNUmakefile" BUILD=$(BLD); \
else \
make -f "$(DPS)/$${i}/Makefile" BUILD=$(BLD); \
fi; \
done
buildThis:
@ -48,13 +48,10 @@ buildThis:
cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/unix/vpkLinuxFiles.Mod
cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/unix/vpkTime.Mod
cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/vpkLogger.Mod
cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/vpkHttp.Mod
cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/unix/vpkEnv.Mod
cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/unix/vpkGit.Mod
cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/vpkCharacterStack.Mod
cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/vpkJsonParser.Mod
cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/vpkConf.Mod
cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/vpkStorage.Mod
cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/vpkConf.Mod
cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/vpkSyncer.Mod
cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/vpkdepTree.Mod
cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/vpkDot.Mod

View file

@ -2,8 +2,8 @@ MODULE vpkEnv;
IMPORT Files, Platform, Strings, Out, vpkSettings, vpkFiles, strTypes;
VAR
conf, confDir : ARRAY 256 OF CHAR;
pkgTreeDir: POINTER TO ARRAY OF CHAR;
conf-, confDir- : ARRAY 256 OF CHAR;
pkgTreeDir-: POINTER TO ARRAY OF CHAR;
PROCEDURE getHome*(VAR path: ARRAY OF CHAR);
BEGIN

View file

@ -1,6 +1,6 @@
MODULE vpkConf;
IMPORT Out, Files, Strings, Platform,
vpkSettings, vpkEnv, vpkJsonParser;
vpkSettings, vpkEnv, Json;
CONST
open = '{"';
@ -44,7 +44,7 @@ PROCEDURE configured*(): BOOLEAN;
BEGIN
RETURN vpkEnv.checkConfig()
END configured;
(*
PROCEDURE getConfigTreeVal*(VAR tree: vpkSettings.tree);
VAR
f: Files.File; r: Files.Rider;
@ -78,6 +78,74 @@ BEGIN
tree.typ := vpkSettings.unkn;
END;
END getConfigTreeVal;
*)
PROCEDURE getConfigTreeVal*(VAR tree: vpkSettings.tree);
CONST
defConfSize=512;
VAR
f: Files.File; r: Files.Rider;
jsonstr, errstr: Json.jString;
jsonTree, pathValue, typeValue, branchValue: Json.Value;
rootObj: Json.Obj;
Path, Type, Git, HTTP: Json.jString;
b: BOOLEAN;
i: INTEGER;
BEGIN
COPY("", tree.branch);
COPY("", tree.url);
f := vpkEnv.getConfFile();
Files.Set(r, f, 0);
NEW(jsonstr, defConfSize);
NEW(errstr, 4096); (* Adjust size as needed *)
i := 0;
REPEAT
Files.Read(r, jsonstr^[i]);
INC(i)
UNTIL r.eof OR (i>=LEN(jsonstr^));
Files.Close(f);
b := Json.Parse(jsonTree, jsonstr^, errstr^);
IF b THEN
IF jsonTree IS Json.Obj THEN
rootObj := jsonTree(Json.Obj);
NEW(Path, Strings.Length(vpkSettings.rmtTreeKey)+1);
COPY(vpkSettings.rmtTreeKey, Path^);
IF Json.ObjSelect(pathValue, rootObj, Path) THEN
IF pathValue IS Json.Str THEN
Out.String("aaa");
(*this crashes voc *)
(* tree.url := pathValue(Json.Str).str^;*)
COPY(pathValue(Json.Str).str^, tree.url);
END;
END;
NEW(Type, Strings.Length(vpkSettings.rmtTypKey)+1);
COPY(vpkSettings.rmtTypKey, Type^);
IF Json.ObjSelect(typeValue, rootObj, Type) THEN
IF typeValue IS Json.Str THEN
NEW(Git, Strings.Length(vpkSettings.rmtTypGitVal)+1);
NEW(HTTP, Strings.Length(vpkSettings.rmtTypHttpVal)+1);
IF typeValue(Json.Str).str^ = "git" THEN
tree.typ := vpkSettings.git;
ELSIF typeValue(Json.Str).str^ = "http" THEN
tree.typ := vpkSettings.http;
ELSE
tree.typ := vpkSettings.unkn;
END;
END;
END;
ELSE
Out.String("JSON root is not an object."); Out.Ln;
END;
ELSE
Out.String("JSON parsing failed: "); Out.String(errstr^); Out.Ln;
END;
END getConfigTreeVal;
PROCEDURE setTreeDir*(VAR a: ARRAY OF CHAR);
BEGIN

View file

@ -1,33 +1,75 @@
MODULE vpkJsonDepRetriever;
IMPORT Out, StringList, strUtils, vpkJsonParser, vpkStorage, vpkSettings, vpkdepTree;
IMPORT Strings, Out,
StringList, strUtils, Json, vpkStorage, vpkSettings, vpkdepTree;
CONST
ErrmessSize = 4096;
PROCEDURE getBuildInfo*(VAR d: vpkdepTree.Tdep; VAR k, v: StringList.TStringList): BOOLEAN;
VAR
p: strUtils.pstring;
jsonRecord, build : vpkJsonParser.JsonTypePointer;
keys, values: StringList.TStringList;
jsonstr, errstr: strUtils.pstring;
tree, buildValue, command, file: Json.Value;
rootObj, buildStep: Json.Obj;
buildArray: Json.Arr;
cm, fl, bl: Json.jString;
b: BOOLEAN;
BEGIN
b := FALSE;
p := NIL;
vpkStorage.json2pstring(d.name^, p);
IF p # NIL THEN
jsonRecord := vpkJsonParser.Create(p^);
build := jsonRecord.GetNonTerminal(jsonRecord, vpkSettings.bldType);
IF build # NIL THEN
keys := NIL; values := NIL;
jsonstr := NIL;
vpkStorage.json2pstring(d.name^, jsonstr);
IF jsonstr # NIL THEN
NEW(errstr, ErrmessSize);
b := Json.Parse(tree, jsonstr^, errstr^);
(*build := jsonRecord.GetNonTerminal(jsonRecord, vpkSettings.bldType);*)
IF b THEN
(*keys := NIL; values := NIL;
build.GetTerminalKeys(build, keys);
build.GetTerminalValues(build, values);
k := keys; v := values;
RETURN TRUE
k := keys; v := values;*)
IF tree IS Json.Obj THEN
rootObj := tree(Json.Obj);
NEW(bl, Strings.Length(vpkSettings.bldType)+1); (* +1 for 0X *)
COPY(vpkSettings.bldType, bl^);
IF Json.ObjSelect(buildValue, rootObj, bl) THEN
IF buildValue IS Json.Arr THEN
buildArray := buildValue(Json.Arr);
WHILE buildArray # NIL DO
buildStep := buildArray.value(Json.Obj);
NEW(cm, Strings.Length(vpkSettings.bldCommand)+1); (* +1 for 0X *)
NEW(fl, Strings.Length(vpkSettings.bldFile)+1); (* +1 for 0X *)
COPY(vpkSettings.bldCommand, cm^);
COPY(vpkSettings.bldFile, fl^);
Out.String("cm^ is"); Out.String(cm^); Out.Ln;
Out.String("fl^ is"); Out.String(fl^); Out.Ln;
IF Json.ObjSelect(command, buildStep, cm) &
Json.ObjSelect(file, buildStep, fl) THEN
IF (command IS Json.Str) & (file IS Json.Str) THEN
Out.String("Command: "); Out.String(command(Json.Str).str^);
Out.String(", File: "); Out.String(file(Json.Str).str^); Out.Ln;
IF k = NIL THEN k := StringList.Create() END;
IF v = NIL THEN v := StringList.Create() END;
k.AppendString(k, command(Json.Str).str^);
v.AppendString(v, file(Json.Str).str^);
END;
END;
buildArray := buildArray.next;
END;
ELSE
Out.String("Build section is not an array."); Out.Ln;
END;
ELSE
Out.String("Build section not found."); Out.Ln;
END;
ELSE
Out.String("JSON root is not an object."); Out.Ln;
END;
ELSE
RETURN FALSE
END
ELSE
RETURN FALSE
Out.String("JSON parsing failed: "); Out.String(errstr^); Out.Ln;
END;
END;
RETURN b;
END getBuildInfo;
(*
PROCEDURE getURIandType*(VAR d: vpkdepTree.Tdep; VAR URI: ARRAY OF CHAR; VAR type: ARRAY OF CHAR; VAR branch: ARRAY OF CHAR);
VAR
jsonRecord, remote: vpkJsonParser.JsonTypePointer;
@ -67,7 +109,69 @@ BEGIN
HALT(64);
END
END getURIandType;
*)
PROCEDURE getURIandType*(VAR d: vpkdepTree.Tdep; VAR URI: ARRAY OF CHAR; VAR type: ARRAY OF CHAR; VAR branch: ARRAY OF CHAR);
VAR
jsonstr, errstr: strUtils.pstring;
tree, remoteValue, uriValue, typeValue, branchValue: Json.Value;
rootObj, remoteObj: Json.Obj;
err: ARRAY ErrmessSize OF CHAR;
b: BOOLEAN;
u, t, br, remote: Json.jString;
BEGIN
strUtils.zeroStr(URI);
strUtils.zeroStr(type);
strUtils.zeroStr(branch);
jsonstr := NIL;
vpkStorage.json2pstring(d.name^, jsonstr);
IF jsonstr # NIL THEN
NEW(errstr, ErrmessSize);
b := Json.Parse(tree, jsonstr^, err);
IF b THEN
IF tree IS Json.Obj THEN
rootObj := tree(Json.Obj);
NEW(u, Strings.Length(vpkSettings.rmtTreeKey) + 1); COPY(vpkSettings.rmtTreeKey, u^);
NEW(t, Strings.Length(vpkSettings.rmtTypKey) + 1); COPY(vpkSettings.rmtTypKey, t^);
NEW(br, Strings.Length(vpkSettings.rmtTreeBranchKey) + 1); COPY(vpkSettings.rmtTreeBranchKey, br^);
NEW(remote, Strings.Length(vpkSettings.rmtType)+1);
COPY(vpkSettings.rmtType, remote^);
IF Json.ObjSelect(remoteValue, rootObj, remote) THEN
IF remoteValue IS Json.Obj THEN
remoteObj := remoteValue(Json.Obj);
IF Json.ObjSelect(uriValue, remoteObj, u) THEN
IF uriValue IS Json.Str THEN
COPY(uriValue(Json.Str).str^, URI);
END;
END;
IF Json.ObjSelect(typeValue, remoteObj, t) THEN
IF typeValue IS Json.Str THEN
COPY(typeValue(Json.Str).str^, type);
END;
END;
IF Json.ObjSelect(branchValue, remoteObj, br) THEN
IF branchValue IS Json.Str THEN
COPY(branchValue(Json.Str).str^, branch);
END;
END;
ELSE
Out.String("Remote section is not an object."); Out.Ln;
END;
ELSE
Out.String("Remote section not found."); Out.Ln;
END;
ELSE
Out.String("JSON root is not an object."); Out.Ln;
END;
ELSE
Out.String("JSON parsing failed: "); Out.String(err); Out.Ln;
END;
ELSE
Out.String("No JSON string provided."); Out.Ln;
END;
END getURIandType;
(*
(* returns -1 if no such dependency found, otherwise returns length of depstr string list *)
PROCEDURE getDeps*(VAR d: vpkdepTree.Tdep; VAR depstrlist: StringList.TStringList): LONGINT;
VAR
@ -102,6 +206,54 @@ BEGIN
RETURN -1 (* no such json file found *)
END;
END getDeps;
*)
PROCEDURE getDeps*(VAR d: vpkdepTree.Tdep; VAR depstrlist: StringList.TStringList): LONGINT;
VAR
jsonstr, errstr: strUtils.pstring;
tree, depsValue, dep: Json.Value;
rootObj: Json.Obj;
depName: Json.jString;
b: BOOLEAN;
BEGIN
depstrlist := NIL;
jsonstr := NIL;
vpkStorage.json2pstring(d.name^, jsonstr);
IF jsonstr # NIL THEN
NEW(errstr, ErrmessSize);
b := Json.Parse(tree, jsonstr^, errstr^);
IF b THEN
IF tree IS Json.Obj THEN
rootObj := tree(Json.Obj);
NEW(depName, Strings.Length(vpkSettings.depTypKey) + 1);
COPY(vpkSettings.depTypKey, depName^);
IF Json.ObjSelect(depsValue, rootObj, depName) THEN
IF depsValue IS Json.Obj THEN
dep := depsValue(Json.Obj).value;
WHILE dep # NIL DO
IF dep IS Json.Obj THEN
depstrlist.AppendString(depstrlist, dep(Json.Obj).name^);
END;
dep := dep(Json.Obj).next;
END;
RETURN depstrlist.Count;
ELSE
Out.String("Dependencies section is not an object."); Out.Ln;
END;
ELSE
Out.String("Dependencies section not found."); Out.Ln;
END;
ELSE
Out.String("JSON root is not an object."); Out.Ln;
END;
ELSE
Out.String("JSON parsing failed: "); Out.String(errstr^); Out.Ln;
END;
ELSE
RETURN -1; (* no such json file found *)
END;
RETURN 0;
END getDeps;

View file

@ -1,41 +1,22 @@
MODULE vpkSettings;
IMPORT Platform, Out;
CONST
vpkConfDir* = ".vipack";
vpkConfFile* = "vipackConf.json";
vpkTreeDir* = "vipackTree";
vpkPkgDir* = "vpkLocal";
vpkDepDir* = "deps";
vpkBldDir* = "build";
graphName* = "deps.dot";
rmtType* = "Remote";
rmtTypKey* = "type";
rmtTypGitVal* = "git";
rmtTypHttpVal* = "http";
rmtTypHttpsVal* = "https";
rmtTypGemiVal* = "gemini";
rmtTreeKey* = "path";
rmtTreeBranchKey* = "branch";
bldType* = "Build";
defTreeVal* = "https://github.com/vishaps/vipackTree";
(*defTreeVal* = "git@github.com:vishaps/vipackTree";*)
confTreeVal* = defTreeVal;
defTypVal* = rmtTypGitVal;
pkgTypKey* = "Package";
depTypKey* = "Dependencies";
packageFileName* = "VersionFile.json";
host* = "localhost";
port* = "80";
http* = 0;
https* = 1;
gemini* = 2;
git* = 3;
unkn* = -1;
unkn* = -1;
VAR
vpkConfDir-, vpkConfFile-, vpkTreeDir-, vpkPkgDir-, vpkDepDir-, vpkBldDir-,
graphName-,
rmtType-, rmtTypKey-, rmtTypGitVal-, rmtTypHttpVal-, rmtTypHttpsVal-,
rmtTypGemiVal-, rmtTreeKey-, rmtTreeBranchKey-,
bldType-, bldCommand-, bldFile-,
defTreeVal-, confTreeVal-,
defTypVal-, pkgTypKey-, depTypKey-, packageFileName-,
host-, port-: ARRAY 128 OF CHAR;
TYPE
tree* = RECORD
url* : ARRAY 128 OF CHAR;
@ -43,6 +24,37 @@ TYPE
branch*: ARRAY 128 OF CHAR;
END;
BEGIN
vpkConfDir := ".vipack";
vpkConfFile := "vipackConf.json";
vpkTreeDir := "vipackTree";
vpkPkgDir := "vpkLocal";
vpkDepDir := "deps";
vpkBldDir := "build";
graphName := "deps.dot";
rmtType := "Remote";
rmtTypKey := "type";
rmtTypGitVal := "git";
rmtTypHttpVal := "http";
rmtTypHttpsVal := "https";
rmtTypGemiVal := "gemini";
rmtTreeKey := "path";
rmtTreeBranchKey := "branch";
bldType := "Build";
bldCommand := "command";
bldFile := "file";
defTreeVal := "https://github.com/vishaps/vipackTree";
(*defTreeVal := "git@github.com:vishaps/vipackTree";*)
confTreeVal := defTreeVal;
defTypVal := rmtTypGitVal;
pkgTypKey := "Package";
depTypKey := "Dependencies";
packageFileName := "VersionFile.json";
host := "localhost";
port := "80";
END vpkSettings.

View file

@ -7,7 +7,7 @@ BEGIN
Files.WriteBytes(r, str, Strings.Length(str));
END WriteString;
PROCEDURE fileToString*(VAR fileName: ARRAY OF CHAR; VAR returnString: strUtils.pstring);
PROCEDURE fileToString*(fileName: ARRAY OF CHAR; VAR returnString: strUtils.pstring);
VAR
f: Files.File;
r: Files.Rider;