diff --git a/GNUmakefile b/GNUmakefile index 20967a2..885600f 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -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 diff --git a/src/unix/vpkEnv.Mod b/src/unix/vpkEnv.Mod index afb871a..6d13b29 100644 --- a/src/unix/vpkEnv.Mod +++ b/src/unix/vpkEnv.Mod @@ -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 @@ -35,7 +35,7 @@ VAR BEGIN len := 9 + Strings.Length(depName) + Strings.Length(path0); (* 5 chars are ../, /, /, plus a couple of chars *) - NEW(p, len); + NEW(p, len); COPY("../", p^); Strings.Append(vpkSettings.vpkDepDir, p^); Strings.Append("/", p^); @@ -58,7 +58,7 @@ VAR ln : INTEGER; BEGIN ln := 3 + Strings.Length(prefix) + Strings.Length(vpkSettings.vpkBldDir); - NEW(builddir, ln); + NEW(builddir, ln); COPY(prefix, builddir^); createIfNotThere(builddir^); Strings.Append("/", builddir^); @@ -211,7 +211,7 @@ BEGIN HALT(1); END; END; - END; + END; tmp := confDir; Strings.Append('/', tmp); Strings.Append(vpkSettings.vpkTreeDir, tmp); diff --git a/src/vpkConf.Mod b/src/vpkConf.Mod index 88b10c3..946e9e5 100644 --- a/src/vpkConf.Mod +++ b/src/vpkConf.Mod @@ -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 diff --git a/src/vpkDot.Mod b/src/vpkDot.Mod index fb184ad..7d9796e 100644 --- a/src/vpkDot.Mod +++ b/src/vpkDot.Mod @@ -1,5 +1,5 @@ MODULE vpkDot; -IMPORT Strings, vpkdepTree, StringList; +IMPORT Out, Strings, vpkdepTree, StringList; CONST first = "digraph dependencies {"; @@ -19,11 +19,15 @@ BEGIN lst.AppendString(lst, line); i := 0; REPEAT + Out.String("entered repeat"); Out.Ln; dep := tree.Get(tree, i); IF dep # NIL THEN + Out.String("dep # nil"); Out.Ln; IF dep.deps # NIL THEN + Out.String("dep.deps # nil"); Out.Ln; j := 0; REPEAT + Out.String("othe repeat");Out.Ln; IF dep.deps[j]^.name # NIL THEN COPY("", line); Strings.Append(tab, line); @@ -31,9 +35,12 @@ BEGIN Strings.Append(arrow, line); Strings.Append(dep.deps[j]^.name^, line); lst.AppendString(lst, line); + Out.String("appends over"); Out.Ln; END; - INC(j) - UNTIL j = (LEN(dep.deps^) -1 ); + INC(j); + Out.String("j="); Out.Int(j,0); Out.Ln; + Out.String("len dep.deps"); Out.Int(LEN(dep.deps^), 0); Out.Ln; + UNTIL j = (LEN(dep.deps^)); END END; INC(i) diff --git a/src/vpkInstaller.Mod b/src/vpkInstaller.Mod index 85bc492..e56bbc0 100644 --- a/src/vpkInstaller.Mod +++ b/src/vpkInstaller.Mod @@ -14,7 +14,7 @@ BEGIN tree := vpkResolver.resolve(unit, vpkJsonDepRetriever.getDeps); Out.String(" done! (:"); Out.Ln; Out.Ln; lst := vpkDot.tree2dot(tree); - Out.String("dependency graph:"); Out.Ln; + Out.String("dependency graph:"); Out.Ln; Out.String("-----------------"); Out.Ln; StringList.DumpOut(lst); lst.Dump(lst, graphName); @@ -52,7 +52,7 @@ BEGIN i := 0; REPEAT dep := vpkdepTree.Get(depTree, i); - vpkJsonDepRetriever.getURIandType(dep, URI, typ, branch); + vpkJsonDepRetriever.getURIandType(dep, URI, typ, branch); vpkSyncer.fetch(dep.name^, URI, typ, prefix, branch); INC(i) UNTIL i = depTree.Count; @@ -71,13 +71,13 @@ VAR builddir, cmd, srcPath: StringList.pstring; res: INTEGER; BEGIN - IF prefix # "" THEN + IF prefix # "" THEN builddir := vpkEnv.mkBldDir(prefix) ELSE builddir := vpkEnv.mkdefBldDir(); END; depTree := resolve(package); - IF a THEN ask END; + IF a THEN ask END; i := 0; REPEAT dep := vpkdepTree.Get(depTree, i); @@ -100,7 +100,7 @@ BEGIN res := Platform.System(cmd^); IF res # 0 THEN Out.String("failed to run build command"); Out.Ln END; INC(j) - UNTIL j = keys.Count - 1; + UNTIL j = keys.Count; ELSE Out.String("no build info found for the package: "); Out.String(dep.name^); Out.Ln; END; diff --git a/src/vpkJsonDepRetriever.Mod b/src/vpkJsonDepRetriever.Mod index fa543b0..e1261bc 100644 --- a/src/vpkJsonDepRetriever.Mod +++ b/src/vpkJsonDepRetriever.Mod @@ -1,109 +1,228 @@ 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 + k := NIL; v := NIL; 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 + Out.String("COMMAND FOUND"); Out.Ln; + Out.String("FILE FOUND"); Out.Ln; + 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^); + ELSE + Out.String("command and file must be strings"); Out.Ln; + HALT(5); + 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; - p: strUtils.pstring; - k, v: StringList.pstring; - keys, values: StringList.TStringList; - i: LONGINT; + jsonstr, errstr: strUtils.pstring; + tree, singleValue, remoteValue, uriValue, typeValue, branchValue: Json.Value; + rootObj, someObj, remoteObj: Json.Obj; + err: ARRAY ErrmessSize OF CHAR; + b, fndRemSec: BOOLEAN; + key, val, u, t, br, remote: Json.jString; BEGIN + Out.String("ENTERED GET URI AND TYPE"); Out.Ln; strUtils.zeroStr(URI); strUtils.zeroStr(type); strUtils.zeroStr(branch); - p := NIL; - vpkStorage.json2pstring(d.name^, p); - IF p # NIL THEN - jsonRecord := vpkJsonParser.Create(p^); - remote := jsonRecord.GetNonTerminal(jsonRecord, vpkSettings.rmtType); - IF remote # NIL THEN - keys := NIL; values := NIL; - remote.GetTerminalKeys(remote, keys); - remote.GetTerminalValues(remote, values); - i := 0; - REPEAT - k := keys.GetString(keys, i); - v := values.GetString(values, i); - IF k^ = vpkSettings.rmtTypKey THEN COPY(v^, type) END; - IF k^ = vpkSettings.rmtTreeKey THEN COPY(v^, URI) END; - IF k^ = vpkSettings.rmtTreeBranchKey THEN COPY(v^, branch) END; - INC(i); - UNTIL i = keys.Count - 1; - ELSE - Out.String("malformed json: no 'Remote' section"); Out.Ln; - HALT(63); - END - ELSE - Out.String("no json file for "); Out.String(d.name^); Out.Ln; - Out.String("program is not expected to pass unexistent name, something is wrong in other module"); Out.Ln; - HALT(64); - 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 - jsonRecord, dependencies: vpkJsonParser.JsonTypePointer; - p: strUtils.pstring; - b: BOOLEAN; - pkgName : ARRAY 32 OF CHAR; -BEGIN - depstrlist := NIL; - p := NIL; - vpkStorage.json2pstring(d.name^, p); - IF p # NIL THEN - jsonRecord := vpkJsonParser.Create(p^); - b := jsonRecord.GetTerminal(jsonRecord, vpkSettings.pkgTypKey, pkgName); + jsonstr := NIL; + vpkStorage.json2pstring(d.name^, jsonstr); + IF jsonstr # NIL THEN + Out.String("JSONSTR # NIL"); Out.Ln; + NEW(errstr, ErrmessSize); + b := Json.Parse(tree, jsonstr^, err); IF b THEN - dependencies := NIL; - Out.String("searching dependencies for '"); Out.String(d.name^); Out.String("'... "); - dependencies := jsonRecord.GetNonTerminal(jsonRecord, vpkSettings.depTypKey); - IF dependencies # NIL THEN - Out.String("found!"); Out.Ln; - dependencies.GetTerminalKeys(dependencies, depstrlist); - StringList.list(depstrlist); - RETURN depstrlist.Count + Out.String("b IS TRUE"); Out.Ln; + IF tree IS Json.Obj THEN + Out.String("tree IS Json.Obj"); Out.Ln; + 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^); + fndRemSec := FALSE; + REPEAT + IF rootObj.name^ = remote^ THEN + fndRemSec := TRUE; + Out.String("REMOTE SECT FOUND"); Out.Ln; + END; + IF ~fndRemSec THEN rootObj := rootObj.next END + UNTIL (rootObj = NIL) OR fndRemSec; + Out.String("exited the loop"); + + IF fndRemSec THEN + WHILE rootObj # NIL DO + Out.String("entered while rootobj # nil"); Out.Ln; + Out.String("rootobj.name "); Out.String(rootObj.name^); Out.Ln; + remoteValue := rootObj.value; + IF remoteValue IS Json.Obj THEN + Out.String(" remotevalue is jsonobj"); Out.Ln; + singleValue := remoteValue(Json.Obj); + WHILE singleValue # NIL DO + IF singleValue IS Json.Obj THEN + Out.String("singlevalue is jsonobj"); Out.Ln; + someObj := singleValue(Json.Obj); + key := someObj.name; + Out.String("key is "); Out.String(key^); Out.Ln; + val := someObj.value(Json.Str).str; + Out.String("val is "); Out.String(val^); Out.Ln; + Out.Ln; + IF key^ = vpkSettings.rmtTypKey THEN COPY(val^, type) END; + IF key^ = vpkSettings.rmtTreeBranchKey THEN COPY(val^, branch) END; + IF key^ = vpkSettings.rmtTreeKey THEN COPY(val^, URI) END; + END; (* if singlevalue is json.obj *) + singleValue := someObj.next; + END (* while singlevalue # nil *) + END; (* if remotevalue is json.obj *) + rootObj := rootObj.next + END; (* while rootObj # NIL *) + ELSE + Out.String("Remote section not found."); Out.Ln; + END; ELSE - Out.String("...has no dependencies"); Out.Ln; - RETURN 0 - END + Out.String("JSON root is not an object."); Out.Ln; + END; ELSE - RETURN -2 (* json doesn't contain 'Package' key, malformed *) + Out.String("JSON parsing failed: "); Out.String(err); Out.Ln; END; ELSE - RETURN -1 (* no such json file found *) + Out.String("No JSON string provided."); Out.Ln; END; +END getURIandType; + +PROCEDURE getDeps*(VAR d: vpkdepTree.Tdep; VAR depstrlist: StringList.TStringList): LONGINT; +VAR + jsonstr, errstr: strUtils.pstring; + tree, depsValue, singleDep: Json.Value; + rootObj, depObj: Json.Obj; + depName, depVersion: Json.jString; + foundDepSection: BOOLEAN; +BEGIN + depstrlist := NIL; + jsonstr := NIL; + vpkStorage.json2pstring(d.name^, jsonstr); + IF jsonstr # NIL THEN + NEW(errstr, ErrmessSize); + IF Json.Parse(tree, jsonstr^, errstr^) THEN + IF tree IS Json.Obj THEN + rootObj := tree(Json.Obj); Out.String("entering first while"); Out.Ln; + (* searching for dependencies section *) + foundDepSection := FALSE; + REPEAT + IF rootObj.name^ = "Dependencies" THEN + foundDepSection := TRUE; + Out.String("dependency section found"); Out.Ln; + END; + IF ~foundDepSection THEN rootObj := rootObj.next END + UNTIL (rootObj = NIL) OR foundDepSection; + Out.String("exited the loop"); Out.Ln; + IF foundDepSection THEN + WHILE rootObj # NIL DO + Out.String("entered"); Out.Ln; + Out.String("rootobj.name "); Out.String(rootObj.name^); Out.Ln; + (*IF rootObj.name^ = "Dependencies" THEN Out.String("yes name deps");Out.Ln;*) + depsValue := rootObj.value; + IF depsValue IS Json.Obj THEN Out.String("depsvalue is jsonobj"); Out.Ln; + singleDep := depsValue(Json.Obj); + WHILE singleDep # NIL DO + IF singleDep IS Json.Obj THEN Out.String("singledep is json obj"); Out.Ln; + depObj := singleDep(Json.Obj); + depName := depObj.name; + Out.String("name "); Out.String(depName^); Out.Ln; + Out.String("assigning depVersion"); Out.Ln; + depVersion := depObj.value(Json.Str).str; + Out.String("version "); Out.String(depVersion^); Out.Ln; + Out.String("assigning depstrlist"); Out.Ln; + IF depstrlist = NIL THEN depstrlist := StringList.Create() END; + depstrlist.AppendString(depstrlist, depName^); + Out.String("lets find next"); Out.Ln; + singleDep := depObj.next; (* Move to the next dependency *) + END; + END; (* End of inner WHILE loop for dependencies *) + Out.String("returning "); Out.Int(depstrlist.Count, 0); Out.Ln; + RETURN depstrlist.Count; + END; (* End of IF depsValue IS Json.Obj *) + (*END;*) (* End of IF rootObj.name^ = "Dependencies" *) + rootObj := rootObj.next; (* Move to the next JSON object *) + END; (* End of WHILE rootObj # NIL loop *) + ELSE + Out.String("returnig 0"); Out.Ln; + RETURN 0; (* found no dependencies *) + END; + END; (* End of IF tree IS Json.Obj *) + ELSE + Out.String("JSON parsing failed: "); Out.String(errstr^); Out.Ln; + END; (* End of IF Json.Parse *) + ELSE + Out.String("dependency '"); Out.String(d.name^); Out.String("' not found."); Out.Ln; + RETURN -1; (* No such JSON file found *) + END; (* End of IF jsonstr # NIL *) + RETURN 0; END getDeps; - - - END vpkJsonDepRetriever. diff --git a/src/vpkResolver.Mod b/src/vpkResolver.Mod index 58e56f5..76044b5 100644 --- a/src/vpkResolver.Mod +++ b/src/vpkResolver.Mod @@ -58,7 +58,9 @@ VAR i: INTEGER; rtrvRes: LONGINT; BEGIN + Out.String("entered mkDepTree, d.name^ is "); Out.String(d.name^); Out.Ln; vpkdepTree.Add(met, d); + Out.String("EXITED vpkdepTree.Add"); Out.Ln; IF d.RetrieveDeps = NIL THEN Out.String("dep retriever method not installed"); Out.Ln; HALT(1) END; rtrvRes := d.RetrieveDeps(d, depStrs); IF rtrvRes = -1 THEN @@ -68,36 +70,48 @@ BEGIN Out.Ln; Out.String(d.name^); Out.String(".json malformed: no 'Package' section."); Out.Ln; HALT(62); END; - + Out.String("checking if depStrs in NIL"); Out.Ln; IF depStrs # NIL THEN + (*IF rtrvRes > 0 THEN*) + Out.String("no, continueing"); Out.Ln; NEW (deps, depStrs.Count); i := 0; REPEAT p := depStrs.GetString(depStrs, i); IF p # NIL THEN + Out.String("p#nil"); Out.Ln; t := NIL; t := met.GetByName(met, p^); IF t = NIL THEN + Out.String("t#nil"); Out.Ln; t := vpkdepTree.CreateDep(p^); t.InstallRetriever(t, rtvr); END; + IF t = NIL THEN Out.String("t=nil"); Out.Ln END; deps[i] := t; + Out.String("assigned t to deps[i]"); Out.Ln; IF ~treeContainsByName(t, depTree) THEN + Out.String("not tree contains by name is true "); Out.Ln; IF treeContainsByName(t, met) THEN - Out.Ln; Out.String("curcular dependency: "); + Out.Ln; Out.String("curcular dependency: "); Out.String(d.name^); Out.String(" requires "); Out.String(t.name^); Out.Ln; Out.String("unable to continue."); Out.Ln; HALT(60) ELSE + Out.String("entering mkdeptree recursively"); Out.Ln; mkDepTree(t, depTree, met); + Out.String("exited mkdeptryy recursively"); Out.Ln; END; END; END; - INC(i); - UNTIL i = depStrs.Count - 1; + INC(i); Out.String("i="); Out.Int(i, 0); Out.Ln; + Out.String("depstrscount="); Out.Int(depStrs.Count, 0); Out.Ln; + UNTIL i = depStrs.Count; d.AssignDeps(d, deps); END; + Out.String("addcopy"); Out.Ln; vpkdepTree.AddCopy(depTree, d); + Out.String("exited addcopy"); Out.Ln; END mkDepTree; PROCEDURE resolve*(first: ARRAY OF CHAR; r: vpkdepTree.retriever): TdepTree; @@ -106,12 +120,14 @@ VAR met: TdepTree; dep: Tdep; BEGIN + Out.String("first : "); Out.String(first); Out.Ln; rtvr := r; depTree := vpkdepTree.Create(); met := vpkdepTree.Create(); (* for deps that we already met *) dep := vpkdepTree.CreateDep(first); dep.InstallRetriever(dep, rtvr); mkDepTree(dep, depTree, met); + Out.String("exiting resolve()"); Out.Ln; RETURN depTree END resolve; diff --git a/src/vpkSettings.Mod b/src/vpkSettings.Mod index 335e439..31ce943 100644 --- a/src/vpkSettings.Mod +++ b/src/vpkSettings.Mod @@ -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. diff --git a/src/vpkStorage.Mod b/src/vpkStorage.Mod index f7abb87..697788e 100644 --- a/src/vpkStorage.Mod +++ b/src/vpkStorage.Mod @@ -7,17 +7,17 @@ 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; - i, j: LONGINT; + i, j: LONGINT; BEGIN returnString := NIL; f := Files.Old(fileName); - IF f # NIL THEN + IF f # NIL THEN Files.Set(r, f, 0); - i := Files.Length(f); + i := Files.Length(f); NEW(returnString, i); j := 0; REPEAT @@ -41,7 +41,7 @@ VAR BEGIN f := Files.New(fileName); - IF f = NIL THEN + IF f = NIL THEN vpkLogger.Log(fileName); vpkLogger.Log(" not found"); vpkLogger.Ln; @@ -67,7 +67,7 @@ BEGIN vpkEnv.getTreeDir(fi.name); Strings.Append("/", fi.name); Strings.Append(json, fi.name); - Strings.Append(".json", fi.name); + Strings.Append(".json", fi.name); IF vpkFiles.Exists(fi) THEN fileToString(fi.name, pstr); END