mirror of https://gitlab.com/basile.b/dexed.git
dub package cache, use a single static registry and prevent too much update at startup
This commit is contained in:
parent
68151b063e
commit
35a0544849
|
@ -40,16 +40,14 @@ type
|
||||||
|
|
||||||
TDubLocalPackages = class
|
TDubLocalPackages = class
|
||||||
strict private
|
strict private
|
||||||
fRoot: string;
|
class var fLocalPackages: array of TDubLocalPackage;
|
||||||
fLocalPackages: array of TDubLocalPackage;
|
class var fDoneFirstUpdate: boolean;
|
||||||
public
|
public
|
||||||
destructor destroy; override;
|
class procedure deinit;
|
||||||
procedure update;
|
class procedure update;
|
||||||
function find(const name: string; out package: PDubLocalPackage): boolean; overload;
|
class function find(const name: string; out package: PDubLocalPackage): boolean; overload;
|
||||||
function find(const name, op: string; constref opVer: TSemVer;
|
class function find(const name, op: string; constref opVer: TSemVer;
|
||||||
out package: PDubLocalPackage): PSemver; overload;
|
out package: PDubLocalPackage): PSemver; overload;
|
||||||
function fetch(constref version: TSemVer): PDubLocalPackage;
|
|
||||||
function getPackageePath(package: PDubLocalPackage): string;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
(**
|
(**
|
||||||
|
@ -131,7 +129,6 @@ type
|
||||||
fSaveAsUtf8: boolean;
|
fSaveAsUtf8: boolean;
|
||||||
fCompiled: boolean;
|
fCompiled: boolean;
|
||||||
fMsgs: ICEMessagesDisplay;
|
fMsgs: ICEMessagesDisplay;
|
||||||
fLocalPackages: TDubLocalPackages;
|
|
||||||
fNextTerminatedCommand: TDubCommand;
|
fNextTerminatedCommand: TDubCommand;
|
||||||
fAsProjectItf: ICECommonProject;
|
fAsProjectItf: ICECommonProject;
|
||||||
procedure doModified;
|
procedure doModified;
|
||||||
|
@ -210,6 +207,7 @@ type
|
||||||
var
|
var
|
||||||
DubCompiler: DCompiler = dmd;
|
DubCompiler: DCompiler = dmd;
|
||||||
DubCompilerFilename: string = 'dmd';
|
DubCompilerFilename: string = 'dmd';
|
||||||
|
Lfm: ICELifetimeManager = nil;
|
||||||
|
|
||||||
const
|
const
|
||||||
DubSdlWarning = 'this feature is deactivated in DUB projects with the SDL format';
|
DubSdlWarning = 'this feature is deactivated in DUB projects with the SDL format';
|
||||||
|
@ -361,7 +359,7 @@ begin
|
||||||
exit(fVersions.Items[i]);
|
exit(fVersions.Items[i]);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
destructor TDubLocalPackages.destroy;
|
class procedure TDubLocalPackages.deinit;
|
||||||
var
|
var
|
||||||
i: integer;
|
i: integer;
|
||||||
begin
|
begin
|
||||||
|
@ -370,7 +368,7 @@ begin
|
||||||
inherited;
|
inherited;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TDubLocalPackages.update;
|
class procedure TDubLocalPackages.update;
|
||||||
var
|
var
|
||||||
p: TStringList;
|
p: TStringList;
|
||||||
r: TStringList;
|
r: TStringList;
|
||||||
|
@ -382,17 +380,31 @@ var
|
||||||
k: integer;
|
k: integer;
|
||||||
d: PDubLocalPackage = nil;
|
d: PDubLocalPackage = nil;
|
||||||
h: TStringRange = (ptr: nil; pos: 0; len: 0);
|
h: TStringRange = (ptr: nil; pos: 0; len: 0);
|
||||||
|
x: string;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
|
||||||
|
if not assigned(Lfm) then
|
||||||
|
Lfm := getLifeTimeManager;
|
||||||
|
if not assigned(Lfm) or not (Lfm.getLifetimeStatus = lfsLoaded) then
|
||||||
|
begin
|
||||||
|
if fDoneFirstUpdate then
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
fDoneFirstUpdate := true;
|
||||||
|
|
||||||
|
for i := 0 to high(fLocalPackages) do
|
||||||
|
fLocalPackages[i].Free;
|
||||||
setLength(fLocalPackages, 0);
|
setLength(fLocalPackages, 0);
|
||||||
r := TStringList.Create;
|
r := TStringList.Create;
|
||||||
getPackagesLocations(r);
|
getPackagesLocations(r);
|
||||||
|
|
||||||
try for k := 0 to r.Count -1 do
|
try for k := 0 to r.Count -1 do
|
||||||
begin
|
begin
|
||||||
fRoot := r[k];
|
x := r[k];
|
||||||
p := TStringList.Create;
|
p := TStringList.Create;
|
||||||
try
|
try
|
||||||
listFolders(p, fRoot);
|
listFolders(p, x);
|
||||||
for i := 0 to p.Count-1 do
|
for i := 0 to p.Count-1 do
|
||||||
begin
|
begin
|
||||||
j := 0;
|
j := 0;
|
||||||
|
@ -436,7 +448,7 @@ begin
|
||||||
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TDubLocalPackages.find(const name: string; out package: PDubLocalPackage): boolean;
|
class function TDubLocalPackages.find(const name: string; out package: PDubLocalPackage): boolean;
|
||||||
var
|
var
|
||||||
i: integer;
|
i: integer;
|
||||||
begin
|
begin
|
||||||
|
@ -451,7 +463,7 @@ begin
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TDubLocalPackages.find(const name, op: string; constref opVer: TSemVer;
|
class function TDubLocalPackages.find(const name, op: string; constref opVer: TSemVer;
|
||||||
out package: PDubLocalPackage): PSemVer;
|
out package: PDubLocalPackage): PSemVer;
|
||||||
var
|
var
|
||||||
hi: TSemVer;
|
hi: TSemVer;
|
||||||
|
@ -498,16 +510,6 @@ begin
|
||||||
result := package^.highest;
|
result := package^.highest;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TDubLocalPackages.fetch(constref version: TSemVer): PDubLocalPackage;
|
|
||||||
begin
|
|
||||||
result := nil;
|
|
||||||
end;
|
|
||||||
|
|
||||||
function TDubLocalPackages.getPackageePath(package: PDubLocalPackage): string;
|
|
||||||
begin
|
|
||||||
result := fRoot + package^.Name;
|
|
||||||
end;
|
|
||||||
{$ENDREGION}
|
{$ENDREGION}
|
||||||
|
|
||||||
{$REGION Options ---------------------------------------------------------------}
|
{$REGION Options ---------------------------------------------------------------}
|
||||||
|
@ -664,8 +666,7 @@ begin
|
||||||
doModified;
|
doModified;
|
||||||
fModified:=false;
|
fModified:=false;
|
||||||
|
|
||||||
fLocalPackages := TDubLocalPackages.Create;
|
TDubLocalPackages.update;
|
||||||
fLocalPackages.update;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
destructor TCEDubProject.destroy;
|
destructor TCEDubProject.destroy;
|
||||||
|
@ -679,7 +680,6 @@ begin
|
||||||
fConfigs.Free;
|
fConfigs.Free;
|
||||||
fSrcs.Free;
|
fSrcs.Free;
|
||||||
fImportPaths.Free;
|
fImportPaths.Free;
|
||||||
fLocalPackages.Free;
|
|
||||||
inherited;
|
inherited;
|
||||||
end;
|
end;
|
||||||
{$ENDREGION --------------------------------------------------------------------}
|
{$ENDREGION --------------------------------------------------------------------}
|
||||||
|
@ -1389,7 +1389,7 @@ procedure TCEDubProject.updateImportPathsFromJson;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// Try to fetch if not present at all
|
// Try to fetch if not present at all
|
||||||
if not fLocalPackages.find(n, pck) and dubBuildOptions.autoFetch then
|
if not TDubLocalPackages.find(n, pck) and dubBuildOptions.autoFetch then
|
||||||
begin
|
begin
|
||||||
with TProcess.Create(nil) do
|
with TProcess.Create(nil) do
|
||||||
try
|
try
|
||||||
|
@ -1400,13 +1400,13 @@ procedure TCEDubProject.updateImportPathsFromJson;
|
||||||
Parameters.Add(n);
|
Parameters.Add(n);
|
||||||
Execute;
|
Execute;
|
||||||
if ExitStatus = 0 then
|
if ExitStatus = 0 then
|
||||||
fLocalPackages.update();
|
TDubLocalPackages.update();
|
||||||
finally
|
finally
|
||||||
free;
|
free;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
if fLocalPackages.find(n, pck) then
|
if TDubLocalPackages.find(n, pck) then
|
||||||
begin
|
begin
|
||||||
|
|
||||||
j := deps.Items[i];
|
j := deps.Items[i];
|
||||||
|
@ -1429,7 +1429,7 @@ procedure TCEDubProject.updateImportPathsFromJson;
|
||||||
q.init('v' + p);
|
q.init('v' + p);
|
||||||
|
|
||||||
// Finds a match for the version in the local packages list.
|
// Finds a match for the version in the local packages list.
|
||||||
u := fLocalPackages.find(n, o, q, pck);
|
u := TDubLocalPackages.find(n, o, q, pck);
|
||||||
|
|
||||||
// Try to fetch the right version if no match
|
// Try to fetch the right version if no match
|
||||||
if not assigned(u) and dubBuildOptions.autoFetch then
|
if not assigned(u) and dubBuildOptions.autoFetch then
|
||||||
|
@ -1445,8 +1445,8 @@ procedure TCEDubProject.updateImportPathsFromJson;
|
||||||
Execute;
|
Execute;
|
||||||
if ExitStatus = 0 then
|
if ExitStatus = 0 then
|
||||||
begin
|
begin
|
||||||
fLocalPackages.update();
|
TDubLocalPackages.update();
|
||||||
u := fLocalPackages.find(n, o, q, pck);
|
u := TDubLocalPackages.find(n, o, q, pck);
|
||||||
end;
|
end;
|
||||||
finally
|
finally
|
||||||
free;
|
free;
|
||||||
|
@ -1694,5 +1694,6 @@ initialization
|
||||||
dubBuildOptions:= TCEDubBuildOptions.create(nil);
|
dubBuildOptions:= TCEDubBuildOptions.create(nil);
|
||||||
finalization
|
finalization
|
||||||
dubBuildOptions.free;
|
dubBuildOptions.free;
|
||||||
|
TDubLocalPackages.deinit;
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue