now the retriever function is the installable method of dep object.

This commit is contained in:
Norayr Chilingarian 2020-06-14 19:49:06 +04:00
parent e6823cb373
commit db0a32e674
4 changed files with 22 additions and 9 deletions

View file

@ -31,8 +31,8 @@ all:
../src/vpkConf.Mod \
../src/vpkStorage.Mod \
../src/vpkSyncer.Mod \
../src/vpkRetriever.Mod \
../src/vpkdepTree.Mod \
../src/vpkJsonDepRetriever.Mod \
../src/vpkDot.Mod \
../src/vpkResolver.Mod \
../src/vpkInstaller.Mod \

View file

@ -1,8 +1,8 @@
MODULE vpkRetriever;
IMPORT StringList, strutils, vpkJsonParser, vpkStorage, vpkSettings;
MODULE vpkJsonDepRetriever;
IMPORT StringList, strutils, vpkJsonParser, vpkStorage, vpkSettings, vpkdepTree;
PROCEDURE getDeps*(VAR name: ARRAY OF CHAR): StringList.TStringList;
PROCEDURE getDeps*(VAR d: vpkdepTree.Tdep): StringList.TStringList;
VAR
jsonRecord, dependencies: vpkJsonParser.JsonTypePointer;
p: strutils.pstring;
@ -12,7 +12,7 @@ VAR
BEGIN
result := NIL;
p := NIL;
vpkStorage.json2pstring(name, p);
vpkStorage.json2pstring(d.name^, p);
IF p # NIL THEN
jsonRecord := vpkJsonParser.Create(p^);
b := jsonRecord.GetTerminal(jsonRecord, vpkSettings.pkgTypKey, pkgName);
@ -29,4 +29,4 @@ BEGIN
END getDeps;
END vpkRetriever.
END vpkJsonDepRetriever.

View file

@ -1,5 +1,5 @@
MODULE vpkResolver;
IMPORT Out, StringList, vpkdepTree, vpkRetriever;
IMPORT Out, StringList, vpkdepTree, vpkJsonDepRetriever;
TYPE
Tdep = vpkdepTree.Tdep;
@ -35,8 +35,8 @@ VAR
i: INTEGER;
BEGIN
met.Add(met, d);
depStrs := vpkRetriever.getDeps(d.name^);
IF d.RetrieveDeps = NIL THEN Out.String("dep retriever method not installed"); Out.Ln; HALT(1) END;
depStrs := d.RetrieveDeps(d);
IF depStrs # NIL THEN
NEW (deps, depStrs.Count);
i := 0;
@ -46,6 +46,7 @@ BEGIN
t := met.GetByName(met, e.obj(StringList.TString).str^);
IF t = NIL THEN
t := vpkdepTree.CreateDep(e.obj(StringList.TString).str^);
t.InstallRetriever(t, vpkJsonDepRetriever.getDeps);
END;
deps[i] := t;
IF ~treeContains(t, depTree) THEN
@ -75,6 +76,7 @@ BEGIN
depTree := vpkdepTree.Create();
met := vpkdepTree.Create(); (* for deps that we already met *)
dep := vpkdepTree.CreateDep(first);
dep.InstallRetriever(dep, vpkJsonDepRetriever.getDeps);
mkDepTree(dep, depTree, met);
RETURN depTree
END resolve;

View file

@ -23,12 +23,16 @@ TYPE
Count* : LONGINT;
END;
retriever- = PROCEDURE (VAR d: Tdep): StringList.TStringList;
TdepDesc* = RECORD
prev-, next-: Tdep;
name- : pstring;
deps- : Tdeps;
Create* : PROCEDURE (VAR name: ARRAY OF CHAR): Tdep;
AssignDeps* : PROCEDURE (VAR d: Tdep; VAR deps: Tdeps);
RetrieveDeps* : retriever;
InstallRetriever*: PROCEDURE(VAR d: Tdep; r: retriever);
END;
PROCEDURE AssignDeps*(VAR d: Tdep; VAR deps: Tdeps);
@ -36,6 +40,11 @@ BEGIN
d.deps := deps
END AssignDeps;
PROCEDURE InstallRetriever*(VAR d: Tdep; r: retriever);
BEGIN
d.RetrieveDeps := r
END InstallRetriever;
PROCEDURE CreateDep*(VAR name: ARRAY OF CHAR): Tdep;
VAR
dep: Tdep;
@ -44,6 +53,8 @@ BEGIN
NEW(dep.name, Strings.Length(name) + 1);
COPY(name, dep.name^);
dep.AssignDeps := AssignDeps;
dep.InstallRetriever := InstallRetriever;
dep.RetrieveDeps := NIL;
RETURN dep
END CreateDep;