diff --git a/makefile b/makefile index b604dbb..7dc6a42 100644 --- a/makefile +++ b/makefile @@ -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 \ diff --git a/src/vpkRetriever.Mod b/src/vpkJsonDepRetriever.Mod similarity index 79% rename from src/vpkRetriever.Mod rename to src/vpkJsonDepRetriever.Mod index d95efab..a427305 100644 --- a/src/vpkRetriever.Mod +++ b/src/vpkJsonDepRetriever.Mod @@ -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. diff --git a/src/vpkResolver.Mod b/src/vpkResolver.Mod index 9793865..adb8421 100644 --- a/src/vpkResolver.Mod +++ b/src/vpkResolver.Mod @@ -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; diff --git a/src/vpkdepTree.Mod b/src/vpkdepTree.Mod index 8d5c148..5e86a9d 100644 --- a/src/vpkdepTree.Mod +++ b/src/vpkdepTree.Mod @@ -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;