mirror of
https://github.com/vishapoberon/vipak.git
synced 2026-04-05 20:42:26 +00:00
resolver improved: handles no such json, malformed jsons.
This commit is contained in:
parent
85bc6ea77a
commit
f1c4ca6ec3
5 changed files with 30 additions and 22 deletions
|
|
@ -8,9 +8,9 @@ VAR
|
||||||
dep: vpkdepTree.Tdep;
|
dep: vpkdepTree.Tdep;
|
||||||
i : LONGINT;
|
i : LONGINT;
|
||||||
BEGIN
|
BEGIN
|
||||||
Out.String("resolving dependencies...");
|
Out.Ln; Out.String("resolving dependencies..."); Out.Ln;
|
||||||
tree := vpkResolver.resolve(unit, vpkJsonDepRetriever.getDeps);
|
tree := vpkResolver.resolve(unit, vpkJsonDepRetriever.getDeps);
|
||||||
Out.String(" done!"); Out.Ln;
|
Out.String(" done! (:"); Out.Ln; Out.Ln;
|
||||||
lst := vpkDot.tree2dot(tree);
|
lst := vpkDot.tree2dot(tree);
|
||||||
Out.String("dependency graph:"); Out.Ln;
|
Out.String("dependency graph:"); Out.Ln;
|
||||||
Out.String("-----------------"); Out.Ln;
|
Out.String("-----------------"); Out.Ln;
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,15 @@
|
||||||
MODULE vpkJsonDepRetriever;
|
MODULE vpkJsonDepRetriever;
|
||||||
IMPORT StringList, strutils, vpkJsonParser, vpkStorage, vpkSettings, vpkdepTree;
|
IMPORT Out, StringList, strutils, vpkJsonParser, vpkStorage, vpkSettings, vpkdepTree;
|
||||||
|
|
||||||
|
(* returns -1 if no such dependency found, otherwise returns length of depstr string list *)
|
||||||
PROCEDURE getDeps*(VAR d: vpkdepTree.Tdep): StringList.TStringList;
|
PROCEDURE getDeps*(VAR d: vpkdepTree.Tdep; VAR depstrlist: StringList.TStringList): LONGINT;
|
||||||
VAR
|
VAR
|
||||||
jsonRecord, dependencies: vpkJsonParser.JsonTypePointer;
|
jsonRecord, dependencies: vpkJsonParser.JsonTypePointer;
|
||||||
p: strutils.pstring;
|
p: strutils.pstring;
|
||||||
b: BOOLEAN;
|
b: BOOLEAN;
|
||||||
result: StringList.TStringList;
|
|
||||||
pkgName : ARRAY 32 OF CHAR;
|
pkgName : ARRAY 32 OF CHAR;
|
||||||
BEGIN
|
BEGIN
|
||||||
result := NIL;
|
depstrlist := NIL;
|
||||||
p := NIL;
|
p := NIL;
|
||||||
vpkStorage.json2pstring(d.name^, p);
|
vpkStorage.json2pstring(d.name^, p);
|
||||||
IF p # NIL THEN
|
IF p # NIL THEN
|
||||||
|
|
@ -18,14 +17,22 @@ BEGIN
|
||||||
b := jsonRecord.GetTerminal(jsonRecord, vpkSettings.pkgTypKey, pkgName);
|
b := jsonRecord.GetTerminal(jsonRecord, vpkSettings.pkgTypKey, pkgName);
|
||||||
IF b THEN
|
IF b THEN
|
||||||
dependencies := NIL;
|
dependencies := NIL;
|
||||||
|
Out.String("searching dependencies for '"); Out.String(d.name^); Out.String("'... ");
|
||||||
dependencies := jsonRecord.GetNonTerminal(jsonRecord, vpkSettings.depTypKey);
|
dependencies := jsonRecord.GetNonTerminal(jsonRecord, vpkSettings.depTypKey);
|
||||||
IF dependencies # NIL THEN
|
IF dependencies # NIL THEN
|
||||||
dependencies.GetTerminalKeys(dependencies, result);
|
Out.String("found!"); Out.Ln;
|
||||||
RETURN result
|
dependencies.GetTerminalKeys(dependencies, depstrlist);
|
||||||
|
RETURN depstrlist.Count
|
||||||
|
ELSE
|
||||||
|
Out.String("...has no dependencies"); Out.Ln;
|
||||||
|
RETURN 0
|
||||||
END
|
END
|
||||||
END
|
ELSE
|
||||||
|
RETURN -2 (* json doesn't contain 'type' key, malformed *)
|
||||||
|
END;
|
||||||
|
ELSE
|
||||||
|
RETURN -1 (* no such json file found *)
|
||||||
END;
|
END;
|
||||||
RETURN result
|
|
||||||
END getDeps;
|
END getDeps;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
MODULE vpkJsonParser;
|
MODULE vpkJsonParser;
|
||||||
IMPORT vpkLogger, vpkCharacterStack, Strings, Out, strutils, vpkSettings, StringList;
|
IMPORT vpkLogger, vpkCharacterStack, Strings, strutils, vpkSettings, StringList;
|
||||||
CONST
|
CONST
|
||||||
ArrayMaxNumber = 30;
|
ArrayMaxNumber = 30;
|
||||||
ArrayMaxNumberChar = 2000;
|
ArrayMaxNumberChar = 2000;
|
||||||
|
|
|
||||||
|
|
@ -36,12 +36,19 @@ VAR
|
||||||
deps: Tdeps;
|
deps: Tdeps;
|
||||||
p: pstr;
|
p: pstr;
|
||||||
i: INTEGER;
|
i: INTEGER;
|
||||||
|
rtrvRes: LONGINT;
|
||||||
BEGIN
|
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;
|
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
|
IF depStrs # NIL THEN
|
||||||
met.Add(met, d);
|
|
||||||
NEW (deps, depStrs.Count);
|
NEW (deps, depStrs.Count);
|
||||||
i := 0;
|
i := 0;
|
||||||
REPEAT
|
REPEAT
|
||||||
|
|
@ -67,12 +74,6 @@ BEGIN
|
||||||
INC(i)
|
INC(i)
|
||||||
UNTIL i = depStrs.Count - 1;
|
UNTIL i = depStrs.Count - 1;
|
||||||
d.AssignDeps(d, deps);
|
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;
|
END;
|
||||||
depTree.Add(depTree, d);
|
depTree.Add(depTree, d);
|
||||||
END mkDepTree;
|
END mkDepTree;
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ TYPE
|
||||||
Count* : LONGINT;
|
Count* : LONGINT;
|
||||||
END;
|
END;
|
||||||
|
|
||||||
retriever- = PROCEDURE (VAR d: Tdep): StringList.TStringList;
|
retriever- = PROCEDURE (VAR d: Tdep; VAR strlist: StringList.TStringList): LONGINT;
|
||||||
|
|
||||||
TdepDesc* = RECORD
|
TdepDesc* = RECORD
|
||||||
prev-, next-: Tdep;
|
prev-, next-: Tdep;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue