now deps are downloaded to prefix/domain/depname instead of prefix/depname.

also build process changed accordingly.
This commit is contained in:
Norayr Chilingarian 2024-02-03 03:30:13 +04:00
parent f09791be6c
commit a9263c62aa
3 changed files with 54 additions and 14 deletions

View file

@ -28,17 +28,19 @@ BEGIN
END createIfNotThere;
PROCEDURE getSrcRelPath*(VAR depName, path0: ARRAY OF CHAR): strTypes.pstring;
PROCEDURE getSrcRelPath*(VAR depName, domain, path0: ARRAY OF CHAR): strTypes.pstring;
VAR
p: strTypes.pstring;
len: INTEGER;
BEGIN
len := 9 + Strings.Length(depName) + Strings.Length(path0);
len := 12 + Strings.Length(depName) + Strings.Length(path0) + Strings.Length(domain);
(* 5 chars are ../, /, /, plus a couple of chars *)
NEW(p, len);
COPY("../", p^);
Strings.Append(vpkSettings.vpkDepDir, p^);
Strings.Append("/", p^);
Strings.Append(domain, p^);
Strings.Append("/", p^);
Strings.Append(depName, p^);
Strings.Append("/", p^);
Strings.Append(path0, p^);
@ -87,7 +89,7 @@ BEGIN
RETURN builddir
END mkdefBldDir;
PROCEDURE mkdefPkgDirPath*(VAR name, path: ARRAY OF CHAR);
PROCEDURE mkdefPkgDirPath*(VAR domain, name, path: ARRAY OF CHAR);
VAR
home: ARRAY 128 OF CHAR;
BEGIN
@ -100,18 +102,24 @@ BEGIN
Strings.Append(vpkSettings.vpkDepDir, path);
createIfNotThere(path);
Strings.Append("/", path);
Strings.Append(domain, path);
createIfNotThere(path);
Strings.Append("/", path);
Strings.Append(name, path);
createIfNotThere(path);
Strings.Append("/", path);
END mkdefPkgDirPath;
PROCEDURE mkPkgDirPath*(VAR name, path: ARRAY OF CHAR);
PROCEDURE mkPkgDirPath*(VAR domain, name, path: ARRAY OF CHAR);
BEGIN
Strings.Append("/", path);
createIfNotThere(path);
Strings.Append(vpkSettings.vpkDepDir, path);
Strings.Append("/", path);
createIfNotThere(path);
Strings.Append(domain, path);
createIfNotThere(path);
Strings.Append("/", path);
Strings.Append(name, path);
createIfNotThere(path);
Strings.Append("/", path);

View file

@ -39,12 +39,40 @@ BEGIN
IF ch # 'y' THEN Out.Ln; Out.String('quitting'); Out.Ln; HALT(0); END
END ask;
PROCEDURE extractDomainFromUrl(VAR url: ARRAY OF CHAR; VAR domain: ARRAY OF CHAR);
VAR
start, i, j: INTEGER;
BEGIN
start := 0;
(* Skip protocol to find the start of the domain *)
WHILE (start < LEN(url) - 1) & (url[start] # 0X) & ((url[start] # ':') OR (url[start+1] # '/')) DO
INC(start);
END;
(* Skip the "://" part to actually reach the start of the domain *)
INC(start, 3); (* Assuming we stopped at ':', so we skip "://" *)
i := start;
(* Now 'start' is at the beginning of the domain, find the end of the domain *)
WHILE (i < LEN(url)) & (url[i] # 0X) & (url[i] # '/') DO
INC(i);
END;
(* Copy domain from url *)
j := 0;
WHILE (start < i) & (j < LEN(domain) - 1) DO
domain[j] := url[start];
INC(j); INC(start);
END;
domain[j] := 0X; (* Ensure the domain string is null-terminated *)
END extractDomainFromUrl;
PROCEDURE fetch*(VAR package, prefix, pkgTree: ARRAY OF CHAR; a: BOOLEAN);
VAR
depTree: vpkdepTree.TdepTree;
dep: vpkdepTree.Tdep;
i: LONGINT;
URI, branch: ARRAY 128 OF CHAR;
URI, branch, domain: ARRAY 128 OF CHAR;
typ: ARRAY 16 OF CHAR;
BEGIN
depTree := resolve(package);
@ -53,7 +81,8 @@ BEGIN
REPEAT
dep := vpkdepTree.Get(depTree, i);
vpkJsonDepRetriever.getURIandType(dep, URI, typ, branch);
vpkSyncer.fetch(dep.name^, URI, typ, prefix, branch);
extractDomainFromUrl(URI, domain);
vpkSyncer.fetch(dep.name^, URI, domain, typ, prefix, branch);
INC(i)
UNTIL i = depTree.Count;
END fetch;
@ -63,7 +92,7 @@ VAR
depTree: vpkdepTree.TdepTree;
dep: vpkdepTree.Tdep;
i, j: LONGINT;
URI, branch: ARRAY 128 OF CHAR;
URI, branch, domain: ARRAY 128 OF CHAR;
typ: ARRAY 16 OF CHAR;
keys, values: StringList.TStringList;
k, v: StringList.pstring;
@ -82,7 +111,8 @@ BEGIN
REPEAT
dep := vpkdepTree.Get(depTree, i);
vpkJsonDepRetriever.getURIandType(dep, URI, typ, branch);
vpkSyncer.fetch(dep.name^, URI, typ, prefix, branch);
extractDomainFromUrl(URI, domain);
vpkSyncer.fetch(dep.name^, URI, domain, typ, prefix, branch);
b := FALSE;
b := vpkJsonDepRetriever.getBuildInfo(dep, keys, values);
IF b THEN
@ -90,7 +120,7 @@ BEGIN
REPEAT
k := keys.GetString(keys, j);
v := values.GetString(values, j);
srcPath := vpkEnv.getSrcRelPath(dep.name^, v^);
srcPath := vpkEnv.getSrcRelPath(dep.name^, domain, v^);
cmd := vpkEnv.mkCmd(k^, srcPath^);
Out.String(cmd^); Out.Ln;
res := Platform.Chdir(builddir^);
@ -107,4 +137,5 @@ BEGIN
INC(i);
UNTIL i = depTree.Count;
END build;
END vpkInstaller.

View file

@ -1,5 +1,6 @@
MODULE vpkSyncer;
IMPORT Strings, Out,
strUtils,
vpkSettings, vpkEnv, vpkConf, vpkGit;
PROCEDURE mkTreePath(VAR path: ARRAY OF CHAR);
@ -22,15 +23,15 @@ BEGIN
END;
END sync;
PROCEDURE fetch*(name, url, typ, dst, branch: ARRAY OF CHAR);
PROCEDURE fetch*(name, url, dmn, typ, dst, branch: ARRAY OF CHAR);
BEGIN
IF dst = "" THEN
vpkEnv.mkdefPkgDirPath(name, dst);
vpkEnv.mkdefPkgDirPath(dmn, name, dst);
ELSE
vpkEnv.mkPkgDirPath(name, dst);
vpkEnv.mkPkgDirPath(dmn, name, dst);
END;
IF typ = vpkSettings.rmtTypGitVal THEN
(* dst is changed by mkdefPkgDirPath and mkPkgdirPath *)
IF typ = vpkSettings.rmtTypGitVal THEN
vpkGit.fetchRepo(url, dst, branch);
ELSE
Out.String("TODO: not a git url"); Out.Ln