From 344c0f0aa772005b9869f24b2efdb982c2d68642 Mon Sep 17 00:00:00 2001 From: Ruben Shekspir Date: Thu, 9 May 2019 22:43:15 +0400 Subject: [PATCH] Code is written, nothing works --- DependencyResolver.Mod | 65 +++++++++++++++++++++++++- JsonParser.Mod | 10 ++-- PackageFileParser.Mod | 16 +++---- PackageResolver.Mod | 32 +++++++++++++ PackegeResolver.Mod | 6 --- Settings.Mod | 6 +++ VersionFile.json | 32 ++++++------- httpServer/dep1/1.0.0/VersionFile.json | 15 ++++++ httpServer/dep2/1.0.0/VersionFile.json | 16 +++++++ makefile | 20 ++++++++ 10 files changed, 176 insertions(+), 42 deletions(-) create mode 100644 PackageResolver.Mod delete mode 100644 PackegeResolver.Mod create mode 100644 Settings.Mod create mode 100644 httpServer/dep1/1.0.0/VersionFile.json create mode 100644 httpServer/dep2/1.0.0/VersionFile.json diff --git a/DependencyResolver.Mod b/DependencyResolver.Mod index f03d9b2..2c86399 100644 --- a/DependencyResolver.Mod +++ b/DependencyResolver.Mod @@ -1,6 +1,67 @@ MODULE DependencyResolver; -IMPORT - JsonParser +IMPORT JsonParser, Settings, PackageResolver, Strings, Logger; + +CONST ArrayMaxNumber = 10000; + +VAR + moduleNames: ARRAY ArrayMaxNumber OF JsonParser.TString; + moduleJson: ARRAY ArrayMaxNumber OF JsonParser.TString; + moduleVersions: ARRAY ArrayMaxNumber OF JsonParser.TString; + j : LONGINT; + +PROCEDURE Resolve *(jsonString: ARRAY OF CHAR); +VAR + jsonRecord, dependencies: JsonParser.JsonTypePointer; + keyFound: BOOLEAN; + packageName, version, returnedJSON: ARRAY ArrayMaxNumber OF CHAR; + keys: ARRAY ArrayMaxNumber OF JsonParser.TString; + i, k : LONGINT; BEGIN + jsonRecord := JsonParser.Create(jsonString); + + keyFound := jsonRecord.GetTerminal(jsonRecord, "Package", packageName); + + IF keyFound THEN + Logger.Log("Parsing package by name"); + Logger.Log(packageName); + Logger.Log("------------------------"); + ELSE Logger.Log("Value for the Key is not found"); RETURN; END; + + dependencies := jsonRecord.GetNonTerminal(jsonRecord, "Dependencies"); + + dependencies.GetTerminalKeys(dependencies, keys); + + FOR i := 0 TO LEN(keys) - 1 DO + keyFound := dependencies.GetTerminal(dependencies, keys[i], version); + + IF ~keyFound THEN Logger.Log('ERROR while seatching key'); Logger.Log(keys[i]); END; + ASSERT(keyFound); + + PackageResolver.ResolveFile( + Settings.host, + Settings.port, + keys[i], + version, + Settings.packageFileName, + returnedJSON + ); + + keyFound := FALSE; + FOR k := 0 TO j - 1 DO + IF Strings.Match(moduleNames[k], keys[i]) THEN + keyFound := TRUE; + END; + END; + + IF ~keyFound THEN + COPY(keys[i], moduleNames[j]); + COPY(version, moduleVersions[j]); + COPY(returnedJSON, moduleJson[j]); + INC(j); + Resolve(returnedJSON); + END; + END; + +END Resolve; END DependencyResolver. \ No newline at end of file diff --git a/JsonParser.Mod b/JsonParser.Mod index 1178ac2..195cb84 100644 --- a/JsonParser.Mod +++ b/JsonParser.Mod @@ -1,7 +1,7 @@ MODULE JsonParser; IMPORT Logger, CharacterStack, Strings, Out, strutils; CONST - ArrayMaxNumber = 100; + ArrayMaxNumber = 10000; (* Const *) symbolBracketStart = "{"; symbolBracketEnd = "}"; @@ -9,7 +9,7 @@ CONST quote = "'"; coma = ","; TYPE - TString = ARRAY ArrayMaxNumber OF CHAR; + TString* = ARRAY ArrayMaxNumber OF CHAR; JsonTypePointer* = POINTER TO JsonType; @@ -18,7 +18,7 @@ TYPE GetNonTerminal* : PROCEDURE(self : JsonTypePointer; key : ARRAY OF CHAR): JsonTypePointer; HasKey* : PROCEDURE(self : JsonTypePointer; key : ARRAY OF CHAR): BOOLEAN; TypeOfTheKey* : PROCEDURE(self : JsonTypePointer; key : ARRAY OF CHAR; VAR returnValue : ARRAY OF CHAR); - GetTerminalKeys* : PROCEDURE(self : JsonTypePointer;VAR destination : ARRAY OF TString); + GetTerminalKeys* : PROCEDURE(self : JsonTypePointer; VAR destination : ARRAY OF TString); GetNoneTerminalKeys* : PROCEDURE(self : JsonTypePointer; VAR destination : ARRAY OF TString); TerminalKeys : ARRAY ArrayMaxNumber OF TString; @@ -244,7 +244,7 @@ BEGIN END Create; BEGIN - NEW(jsonRecord); + (* NEW(jsonRecord); jsonRecord := Create("{'foo': 'bar', 'test': 'test1', 'test2': {'sub': 'dub'}}"); keyFound := jsonRecord.GetTerminal(jsonRecord, "foo", testValue); @@ -259,5 +259,5 @@ BEGIN IF keyFound THEN Logger.Log('found KEY'); Logger.Log(testValue); - ELSE Logger.Log('Value for the Key is not found') END; + ELSE Logger.Log('Value for the Key is not found') END; *) END JsonParser. \ No newline at end of file diff --git a/PackageFileParser.Mod b/PackageFileParser.Mod index 84a5e75..05ff031 100644 --- a/PackageFileParser.Mod +++ b/PackageFileParser.Mod @@ -3,27 +3,23 @@ IMPORT JsonParser, FileManager, http, - Logger; + Logger, + DependencyResolver, + Settings; CONST MAXARRAYNUMBER = 1000000; PROCEDURE install*; VAR - fileData, buff, buff2: ARRAY MAXARRAYNUMBER OF CHAR; + jsonData: ARRAY MAXARRAYNUMBER OF CHAR; success: BOOLEAN; BEGIN Logger.Log("Starting install process"); - success := FileManager.Read("VersionFile.json", fileData); + success := FileManager.Read(Settings.packageFileName, jsonData); IF ~success THEN Logger.Log("Some ERROR occured while reading VERSIONFILE") END; ASSERT(success); - http.get("norayr.am", "/tmp/", "80", buff); - http.getClean(buff, buff2); - - success := FileManager.Write("index.html", buff2); - - IF ~success THEN Logger.Log("Some ERROR occured while writing to test gile") END; - ASSERT(success) + DependencyResolver.Resolve(jsonData); END install; BEGIN diff --git a/PackageResolver.Mod b/PackageResolver.Mod new file mode 100644 index 0000000..fe964a3 --- /dev/null +++ b/PackageResolver.Mod @@ -0,0 +1,32 @@ +MODULE PackageResolver; +IMPORT FileManager, http, Strings; + +CONST ArrayMaxNumber = 10000; + +PROCEDURE *Resolve(remoteURL, port, packageName, version : ARRAY OF CHAR); +BEGIN + +END Resolve; + +PROCEDURE ResolveFile *(host, port, packageName, version, fileName : ARRAY OF CHAR; VAR returnValue : ARRAY OF CHAR); +VAR + filePath: ARRAY ArrayMaxNumber OF CHAR; +BEGIN + filePath := ""; + Strings.Append("/", filePath); + Strings.Append(packageName, filePath); + Strings.Append("/", filePath); + Strings.Append(version, filePath); + Strings.Append("/", filePath); + Strings.Append(fileName, filePath); + + http.get(host, port, filePath, returnValue); + + (* TODO: introduce write to file functionality *) + (* FileManager.CreateDirectory(packageName); *) + (* FileManager.Write(packageName + fileName, returnValue); *) + +END ResolveFile; + + +END PackageResolver. \ No newline at end of file diff --git a/PackegeResolver.Mod b/PackegeResolver.Mod deleted file mode 100644 index 71f1670..0000000 --- a/PackegeResolver.Mod +++ /dev/null @@ -1,6 +0,0 @@ -MODULE PackegeResolver; -IMPORT - JsonParser -BEGIN - -END PackegeResolver. \ No newline at end of file diff --git a/Settings.Mod b/Settings.Mod new file mode 100644 index 0000000..9d93e03 --- /dev/null +++ b/Settings.Mod @@ -0,0 +1,6 @@ +MODULE Settings; +CONST + packageFileName* = "VersionFile.json"; + host* = "localhost"; + port* = "8000"; +END Settings. \ No newline at end of file diff --git a/VersionFile.json b/VersionFile.json index 78023f1..5c64886 100644 --- a/VersionFile.json +++ b/VersionFile.json @@ -1,24 +1,18 @@ { - "Package": "Package-name", - "Author": "Author Name", - "License":"License name", - "Version": "1.0.0", - "Remote": "http://vishap.oberon.com", - "Files": [ - "File1.Mod", - "File2.Mod", - "MakeFile" - ], - "Dependencies": { - "Package-2-name": "2.5.*", - "Package-3-name": "2.*", - "Package-4-name": "2.1.4" + 'Package': 'Package-name', + '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' }, - "Scripts": { - "build": "make build", - "test": "make test", - "run": "make run", - "compile": "make compile" + 'Dependencies': { + 'dep1': '1.0.0', + 'dep2': '1.0.0' } } \ No newline at end of file diff --git a/httpServer/dep1/1.0.0/VersionFile.json b/httpServer/dep1/1.0.0/VersionFile.json new file mode 100644 index 0000000..8defbaf --- /dev/null +++ b/httpServer/dep1/1.0.0/VersionFile.json @@ -0,0 +1,15 @@ +{ + 'Package': 'Package-name', + '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/httpServer/dep2/1.0.0/VersionFile.json b/httpServer/dep2/1.0.0/VersionFile.json new file mode 100644 index 0000000..c71cb5b --- /dev/null +++ b/httpServer/dep2/1.0.0/VersionFile.json @@ -0,0 +1,16 @@ +{ + 'Package': 'Package-name', + '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' + } +} diff --git a/makefile b/makefile index c6de8fe..b981014 100644 --- a/makefile +++ b/makefile @@ -10,13 +10,17 @@ copy-version-file-to-build-dir: all: http cd builds && \ $(VOC) -s \ + ../Settings.Mod \ ../time.Mod \ ../logger.Mod \ ../diaspora2hugo/src/lists/Sys.Mod \ ../diaspora2hugo/src/lists/List.Mod \ + ../diaspora2hugo/src/lists/strutils.Mod \ ../CharacterStack.Mod \ ../JsonParser.Mod \ ../FileManager.Mod \ + ../PackageResolver.Mod \ + ../DependencyResolver.Mod \ ../PackageFileParser.Mod \ ../opium.Mod -m @@ -36,3 +40,19 @@ http: clean ../netdb.Mod \ ../Internet.Mod \ ../http.Mod + +json: + cd builds && \ + $(VOC) -s \ + ../time.Mod \ + ../logger.Mod \ + ../diaspora2hugo/src/lists/Sys.Mod \ + ../diaspora2hugo/src/lists/List.Mod \ + ../diaspora2hugo/src/lists/strutils.Mod \ + ../CharacterStack.Mod \ + ../JsonParser.Mod + + +run-http-server: + cd httpServer && \ + python -m SimpleHTTPServer \ No newline at end of file