From e896987c661b693bf30cf5a8594af118897e0b7e Mon Sep 17 00:00:00 2001 From: Ruben Shekspir Date: Sat, 11 May 2019 22:21:55 +0400 Subject: [PATCH] Hurray, it downloads --- FileManager.Mod | 18 +++++++++++++++++- PackageResolver.Mod | 17 ++++++++++++----- Settings.Mod | 2 ++ dependencies/dep1/VersionFile.json | 15 +++++++++++++++ dependencies/dep2/VersionFile.json | 16 ++++++++++++++++ 5 files changed, 62 insertions(+), 6 deletions(-) create mode 100644 dependencies/dep1/VersionFile.json create mode 100644 dependencies/dep2/VersionFile.json diff --git a/FileManager.Mod b/FileManager.Mod index 80f6ac2..8fc2f53 100644 --- a/FileManager.Mod +++ b/FileManager.Mod @@ -1,5 +1,5 @@ MODULE FileManager; -IMPORT Files, Out, Logger, Strings; +IMPORT Files, Out, Logger, Strings, Platform; PROCEDURE WriteString(VAR r : Files.Rider; str : ARRAY OF CHAR); BEGIN @@ -62,4 +62,20 @@ BEGIN RETURN TRUE; END Write; +PROCEDURE CreateDirectory*(name, path: ARRAY OF CHAR): BOOLEAN; +VAR + command, path0: ARRAY 100 OF CHAR; + errorCode: LONGINT; +BEGIN + COPY(path, path0); + COPY("mkdir -p ", command); + Strings.Append("/", path0); + Strings.Append(name, path0); + Strings.Append(path0, command); + errorCode := Platform.System(command); + + IF errorCode = 0 THEN RETURN TRUE + ELSE RETURN FALSE END; +END CreateDirectory; + END FileManager. \ No newline at end of file diff --git a/PackageResolver.Mod b/PackageResolver.Mod index 6f85015..f574778 100644 --- a/PackageResolver.Mod +++ b/PackageResolver.Mod @@ -1,5 +1,5 @@ MODULE PackageResolver; -IMPORT FileManager, http, Strings, Logger; +IMPORT FileManager, http, Strings, Logger, Settings; CONST ArrayMaxNumber = 10000; @@ -10,7 +10,8 @@ END Resolve; PROCEDURE ResolveFile *(host, port, packageName, version, fileName : ARRAY OF CHAR; VAR returnValue : ARRAY OF CHAR); VAR - filePath: ARRAY ArrayMaxNumber OF CHAR; + filePath, localPath: ARRAY ArrayMaxNumber OF CHAR; + isSuccessfull: BOOLEAN; BEGIN filePath := ""; Strings.Append("/", filePath); @@ -22,9 +23,15 @@ BEGIN http.get(host, port, filePath, returnValue); http.getClean(returnValue, returnValue); - (* TODO: introduce write to file functionality *) - (* FileManager.CreateDirectory(packageName); *) - (* FileManager.Write(packageName + fileName, returnValue); *) + isSuccessfull := FileManager.CreateDirectory(packageName, Settings.installPath); + + COPY(Settings.installPath, localPath); + Strings.Append("/", localPath); + Strings.Append(packageName, localPath); + Strings.Append("/", localPath); + Strings.Append(fileName, localPath); + + isSuccessfull := FileManager.Write(localPath, returnValue); END ResolveFile; diff --git a/Settings.Mod b/Settings.Mod index c277f16..a63c68f 100644 --- a/Settings.Mod +++ b/Settings.Mod @@ -3,4 +3,6 @@ CONST packageFileName* = "VersionFile.json"; host* = "localhost"; port* = "80"; + installPath* = "dependencies"; + END Settings. \ No newline at end of file diff --git a/dependencies/dep1/VersionFile.json b/dependencies/dep1/VersionFile.json new file mode 100644 index 0000000..e2281e4 --- /dev/null +++ b/dependencies/dep1/VersionFile.json @@ -0,0 +1,15 @@ +{ + 'Package': 'dep1', + 'Author': 'Author Name', + 'License':'License name', + 'Version': '1.0.0', + 'Remote': 'vishap.oberon.com', + 'Port': '80', + 'Files': { + '0': 'File1.Mod', + '1': 'File2.Mod', + '2': 'MakeFile' + }, + 'Dependencies': { + } +} diff --git a/dependencies/dep2/VersionFile.json b/dependencies/dep2/VersionFile.json new file mode 100644 index 0000000..d05261c --- /dev/null +++ b/dependencies/dep2/VersionFile.json @@ -0,0 +1,16 @@ +{ + 'Package': 'dep2', + 'Author': 'Author Name', + 'License':'License name', + 'Version': '1.0.0', + 'Remote': 'vishap.oberon.com', + 'Port': '80', + 'Files': { + '0': 'File1.Mod', + '1': 'File2.Mod', + '2': 'MakeFile' + }, + 'Dependencies': { + 'dep1': '1.0.0' + } +}