resolver improved: handles no such json, malformed jsons.

This commit is contained in:
Norayr Chilingarian 2022-01-12 05:38:17 +04:00
parent 85bc6ea77a
commit f1c4ca6ec3
5 changed files with 30 additions and 22 deletions

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;