From 277e8aa9a563c24575f3660594dfdfc4275241ad Mon Sep 17 00:00:00 2001 From: Norayr Chilingarian Date: Tue, 18 Jan 2022 04:11:27 +0400 Subject: [PATCH] pushes to the 'deps' directory inside prefix. --- src/unix/vpkEnv.Mod | 35 +++++++++++++++++++++++------------ src/unix/vpkFiles.Mod | 29 +++++++++++++++++++++++++++++ src/vpkInstaller.Mod | 18 +++++++++++++++--- src/vpkSettings.Mod | 2 +- 4 files changed, 68 insertions(+), 16 deletions(-) diff --git a/src/unix/vpkEnv.Mod b/src/unix/vpkEnv.Mod index 26cf58d..e0a0f33 100644 --- a/src/unix/vpkEnv.Mod +++ b/src/unix/vpkEnv.Mod @@ -12,6 +12,16 @@ BEGIN END; END getHome; +PROCEDURE createIfNotThere*(VAR fileName: ARRAY OF CHAR); +BEGIN + IF ~vpkFiles.ExistsByName(fileName) THEN + IF ~vpkFiles.mkDir(fileName) THEN + Out.String("failed to create directory "); Out.String(fileName); Out.Ln; HALT(1); + END; + END; + +END createIfNotThere; + PROCEDURE mkConfDirPath(home: ARRAY OF CHAR; VAR path: ARRAY OF CHAR); BEGIN confDir := home; @@ -28,16 +38,27 @@ BEGIN Strings.Append("/", path); Strings.Append(vpkSettings.vpkPkgDir, path); Strings.Append("/", path); + createIfNotThere(path); + Strings.Append(vpkSettings.vpkDepDir, path); + Strings.Append("/", path); + createIfNotThere(path); Strings.Append(name, path); + createIfNotThere(path); + Strings.Append("/", path); END mkdefPkgDirPath; PROCEDURE mkPkgDirPath*(VAR name, path: ARRAY OF CHAR); BEGIN Strings.Append("/", path); + createIfNotThere(path); + Strings.Append(vpkSettings.vpkDepDir, path); + Strings.Append("/", path); + createIfNotThere(path); Strings.Append(name, path); + createIfNotThere(path); + Strings.Append("/", path); END mkPkgDirPath; - PROCEDURE setConfFileName; VAR home: ARRAY 128 OF CHAR; @@ -84,16 +105,6 @@ BEGIN Strings.Append(vpkSettings.vpkTreeDir, path); END getTreeDir; -PROCEDURE createIfNotThere*(VAR file: vpkFiles.fileInfo); -BEGIN - IF ~vpkFiles.Exists(file) THEN - IF ~vpkFiles.mkDir(file.name) THEN - Out.String("failed to create directory "); Out.String(file.name); Out.Ln; HALT(1); - END; - END; - -END createIfNotThere; - PROCEDURE checkEnv*; VAR file : vpkFiles.fileInfo; @@ -120,7 +131,7 @@ BEGIN Strings.Append('/', tmp); Strings.Append(vpkSettings.vpkTreeDir, tmp); file.name := tmp; - createIfNotThere(file); + createIfNotThere(file.name); END checkEnv; BEGIN diff --git a/src/unix/vpkFiles.Mod b/src/unix/vpkFiles.Mod index dcc5c29..1eedbf9 100644 --- a/src/unix/vpkFiles.Mod +++ b/src/unix/vpkFiles.Mod @@ -95,5 +95,34 @@ BEGIN END; END Exists; +PROCEDURE ExistsByName*(VAR fileName : ARRAY OF CHAR): BOOLEAN; +VAR + i : INTEGER; + st: Status; + fl: fileInfo; +BEGIN + fl.attr := {}; + COPY(fileName, fl.name); + i := stat(fl.name, st); + IF i < 0 THEN RETURN FALSE END; + IF i = 0 THEN (* file exists*) + i := isDir(st.mode); + IF i # 0 THEN fl.attr := fl.attr + {dir} END; + i := isChar(st.mode); + IF i # 0 THEN fl.attr := fl.attr + {char} END; + i := isBlock(st.mode); + IF i # 0 THEN fl.attr := fl.attr + {block} END; + i := isReg(st.mode); + IF i # 0 THEN fl.attr := fl.attr + {file} END; + i := isFIFO(st.mode); + IF i # 0 THEN fl.attr := fl.attr + {fifo} END; + i := isLnk(st.mode); + IF i # 0 THEN fl.attr := fl.attr + {symlink} END; + i := isSock(st.mode); + IF i # 0 THEN fl.attr := fl.attr + {socket} END; + RETURN TRUE + END; +END ExistsByName; + END vpkFiles. diff --git a/src/vpkInstaller.Mod b/src/vpkInstaller.Mod index e4b85bd..a346e49 100644 --- a/src/vpkInstaller.Mod +++ b/src/vpkInstaller.Mod @@ -43,12 +43,24 @@ BEGIN vpkJsonDepRetriever.getURIandType(dep, URI, typ); vpkSyncer.fetch(dep.name^, URI, typ, prefix); INC(i) - UNTIL i= depTree.Count; + UNTIL i = depTree.Count; END fetch; PROCEDURE build*(VAR package, prefix, tree: ARRAY OF CHAR); - +VAR + depTree: vpkdepTree.TdepTree; + dep: vpkdepTree.Tdep; + i: LONGINT; + URI: ARRAY 128 OF CHAR; + typ: ARRAY 16 OF CHAR; BEGIN - + depTree := resolve(package); + i := 0; + REPEAT + dep := vpkdepTree.Get(depTree, i); + vpkJsonDepRetriever.getURIandType(dep, URI, typ); + vpkSyncer.fetch(dep.name^, URI, typ, prefix); + INC(i); + UNTIL i = depTree.Count; END build; END vpkInstaller. diff --git a/src/vpkSettings.Mod b/src/vpkSettings.Mod index 531b902..91c6a42 100644 --- a/src/vpkSettings.Mod +++ b/src/vpkSettings.Mod @@ -5,6 +5,7 @@ CONST vpkConfFile* = "vipackConf.json"; vpkTreeDir* = "vipackTree"; vpkPkgDir* = "vpkLocal"; + vpkDepDir* = "deps"; graphName* = "deps.dot"; @@ -25,7 +26,6 @@ CONST packageFileName* = "VersionFile.json"; host* = "localhost"; port* = "80"; - installPath* = "dependencies"; http* = 0; https* = 1;