diff --git a/src/vpkInstaller.Mod b/src/vpkInstaller.Mod index 97d6fc7..d219d61 100644 --- a/src/vpkInstaller.Mod +++ b/src/vpkInstaller.Mod @@ -8,9 +8,9 @@ VAR dep: vpkdepTree.Tdep; i : LONGINT; BEGIN - Out.String("resolving dependencies..."); + Out.Ln; Out.String("resolving dependencies..."); Out.Ln; tree := vpkResolver.resolve(unit, vpkJsonDepRetriever.getDeps); - Out.String(" done!"); Out.Ln; + Out.String(" done! (:"); Out.Ln; Out.Ln; lst := vpkDot.tree2dot(tree); Out.String("dependency graph:"); Out.Ln; Out.String("-----------------"); Out.Ln; diff --git a/src/vpkJsonDepRetriever.Mod b/src/vpkJsonDepRetriever.Mod index a427305..50e5d6e 100644 --- a/src/vpkJsonDepRetriever.Mod +++ b/src/vpkJsonDepRetriever.Mod @@ -1,16 +1,15 @@ MODULE vpkJsonDepRetriever; -IMPORT StringList, strutils, vpkJsonParser, vpkStorage, vpkSettings, vpkdepTree; +IMPORT Out, StringList, strutils, vpkJsonParser, vpkStorage, vpkSettings, vpkdepTree; - -PROCEDURE getDeps*(VAR d: vpkdepTree.Tdep): StringList.TStringList; +(* 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; - result: StringList.TStringList; pkgName : ARRAY 32 OF CHAR; BEGIN - result := NIL; + depstrlist := NIL; p := NIL; vpkStorage.json2pstring(d.name^, p); IF p # NIL THEN @@ -18,14 +17,22 @@ BEGIN b := jsonRecord.GetTerminal(jsonRecord, vpkSettings.pkgTypKey, pkgName); 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 - dependencies.GetTerminalKeys(dependencies, result); - RETURN result + Out.String("found!"); Out.Ln; + dependencies.GetTerminalKeys(dependencies, depstrlist); + RETURN depstrlist.Count + ELSE + Out.String("...has no dependencies"); Out.Ln; + RETURN 0 END - END + ELSE + RETURN -2 (* json doesn't contain 'type' key, malformed *) + END; + ELSE + RETURN -1 (* no such json file found *) END; - RETURN result END getDeps; diff --git a/src/vpkJsonParser.Mod b/src/vpkJsonParser.Mod index 4724a25..7f9c528 100644 --- a/src/vpkJsonParser.Mod +++ b/src/vpkJsonParser.Mod @@ -1,5 +1,5 @@ MODULE vpkJsonParser; -IMPORT vpkLogger, vpkCharacterStack, Strings, Out, strutils, vpkSettings, StringList; +IMPORT vpkLogger, vpkCharacterStack, Strings, strutils, vpkSettings, StringList; CONST ArrayMaxNumber = 30; ArrayMaxNumberChar = 2000; diff --git a/src/vpkResolver.Mod b/src/vpkResolver.Mod index d885389..56d4a29 100644 --- a/src/vpkResolver.Mod +++ b/src/vpkResolver.Mod @@ -36,12 +36,19 @@ VAR deps: Tdeps; p: pstr; i: INTEGER; + rtrvRes: LONGINT; BEGIN - (*met.Add(met, d);*) + met.Add(met, d); IF d.RetrieveDeps = NIL THEN Out.String("dep retriever method not installed"); Out.Ln; HALT(1) END; - depStrs := d.RetrieveDeps(d); + rtrvRes := d.RetrieveDeps(d, depStrs); + IF rtrvRes = -1 THEN + Out.Ln; Out.String("package named "); Out.String(d.name^); Out.String(" not found in the tree"); Out.Ln; HALT(61); + END; + IF rtrvRes = -2 THEN + Out.Ln; Out.String(d.name^); Out.String(".json malformed"); Out.Ln + END; + IF depStrs # NIL THEN - met.Add(met, d); NEW (deps, depStrs.Count); i := 0; REPEAT @@ -67,12 +74,6 @@ BEGIN INC(i) UNTIL i = depStrs.Count - 1; d.AssignDeps(d, deps); - ELSE - IF met.Empty(met) THEN - Out.Ln; - Out.String("package "); Out.String(d.name^); Out.String(" not found in the tree"); Out.Ln; - HALT(61) - END; END; depTree.Add(depTree, d); END mkDepTree; diff --git a/src/vpkdepTree.Mod b/src/vpkdepTree.Mod index 623bc0c..8bbb1bd 100644 --- a/src/vpkdepTree.Mod +++ b/src/vpkdepTree.Mod @@ -23,7 +23,7 @@ TYPE Count* : LONGINT; END; - retriever- = PROCEDURE (VAR d: Tdep): StringList.TStringList; + retriever- = PROCEDURE (VAR d: Tdep; VAR strlist: StringList.TStringList): LONGINT; TdepDesc* = RECORD prev-, next-: Tdep;