mirror of https://gitlab.com/basile.b/dexed.git
fix #232 - Add a DUB option to fetch dependencies automatically
This commit is contained in:
parent
d3c495d605
commit
c76837816f
|
|
@ -67,6 +67,7 @@ type
|
||||||
fOther: string;
|
fOther: string;
|
||||||
fCompiler: DCompiler;
|
fCompiler: DCompiler;
|
||||||
fShowConsole: boolean;
|
fShowConsole: boolean;
|
||||||
|
fAutoFetch: boolean;
|
||||||
procedure setLinkMode(value: TDubLinkMode);
|
procedure setLinkMode(value: TDubLinkMode);
|
||||||
procedure setCompiler(value: DCompiler);
|
procedure setCompiler(value: DCompiler);
|
||||||
function getCompiler: DCompiler;
|
function getCompiler: DCompiler;
|
||||||
|
|
@ -81,6 +82,7 @@ type
|
||||||
property dependenciesCheck: TDubDependencyCheck read fDepCheck write fDepCheck;
|
property dependenciesCheck: TDubDependencyCheck read fDepCheck write fDepCheck;
|
||||||
property verbosity: TDubVerbosity read fVerbosity write fVerbosity default default;
|
property verbosity: TDubVerbosity read fVerbosity write fVerbosity default default;
|
||||||
property archOverride: TDubArchOverride read fArchOverride write fArchOverride default auto;
|
property archOverride: TDubArchOverride read fArchOverride write fArchOverride default auto;
|
||||||
|
property autoFetch: boolean read fAutoFetch write fAutoFetch default false;
|
||||||
public
|
public
|
||||||
procedure assign(source: TPersistent); override;
|
procedure assign(source: TPersistent); override;
|
||||||
procedure getOpts(options: TStrings);
|
procedure getOpts(options: TStrings);
|
||||||
|
|
@ -478,6 +480,7 @@ begin
|
||||||
compiler:=opts.compiler;
|
compiler:=opts.compiler;
|
||||||
verbosity:=opts.verbosity;
|
verbosity:=opts.verbosity;
|
||||||
archOverride:=opts.archOverride;
|
archOverride:=opts.archOverride;
|
||||||
|
autoFetch:=opts.autoFetch;
|
||||||
end
|
end
|
||||||
else inherited;
|
else inherited;
|
||||||
end;
|
end;
|
||||||
|
|
@ -1254,6 +1257,7 @@ begin
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEDubProject.updateImportPathsFromJson;
|
procedure TCEDubProject.updateImportPathsFromJson;
|
||||||
|
|
||||||
procedure addFrom(obj: TJSONObject);
|
procedure addFrom(obj: TJSONObject);
|
||||||
var
|
var
|
||||||
arr: TJSONArray;
|
arr: TJSONArray;
|
||||||
|
|
@ -1269,6 +1273,7 @@ procedure TCEDubProject.updateImportPathsFromJson;
|
||||||
fImportPaths.Add(expandFilenameEx(fBasePath, pth));
|
fImportPaths.Add(expandFilenameEx(fBasePath, pth));
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// note: dependencies are added as import to allow DCD completion
|
// note: dependencies are added as import to allow DCD completion
|
||||||
// see TCEDcdWrapper.projChanged()
|
// see TCEDcdWrapper.projChanged()
|
||||||
procedure addDepsFrom(obj: TJSONObject);
|
procedure addDepsFrom(obj: TJSONObject);
|
||||||
|
|
@ -1298,22 +1303,73 @@ procedure TCEDubProject.updateImportPathsFromJson;
|
||||||
begin
|
begin
|
||||||
n := deps.Names[i];
|
n := deps.Names[i];
|
||||||
s := z + n;
|
s := z + n;
|
||||||
|
|
||||||
|
// Try to fetch if not present at all
|
||||||
|
if not fLocalPackages.find(n, pck) and dubBuildOptions.autoFetch then
|
||||||
|
begin
|
||||||
|
with TProcess.Create(nil) do
|
||||||
|
try
|
||||||
|
Executable := exeFullName('dub' + exeExt);
|
||||||
|
Options := Options + [poUsePipes];
|
||||||
|
ShowWindow:= swoHIDE;
|
||||||
|
Parameters.Add('fetch');
|
||||||
|
Parameters.Add(n);
|
||||||
|
Execute;
|
||||||
|
if ExitStatus = 0 then
|
||||||
|
fLocalPackages.update();
|
||||||
|
finally
|
||||||
|
free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
if fLocalPackages.find(n, pck) then
|
if fLocalPackages.find(n, pck) then
|
||||||
begin
|
begin
|
||||||
|
|
||||||
j := deps.Items[i];
|
j := deps.Items[i];
|
||||||
if j.JSONType <> TJSONtype.jtString then
|
if j.JSONType <> TJSONtype.jtString then
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
//split version operator and version number
|
||||||
v := j.AsString;
|
v := j.AsString;
|
||||||
r.init(v);
|
r.init(v);
|
||||||
o := r.takeUntil(['0'..'9']).yield;
|
o := r.takeUntil(['0'..'9']).yield;
|
||||||
p := r.takeUntil(#0).yield;
|
p := r.takeUntil(#0).yield;
|
||||||
if p = 'master' then
|
if p = '*' then
|
||||||
|
begin
|
||||||
|
o := '>=';
|
||||||
|
p := '0.0.0';
|
||||||
|
end
|
||||||
|
else if p = 'master' then
|
||||||
q.init('v0.0.0-master')
|
q.init('v0.0.0-master')
|
||||||
else
|
else
|
||||||
q.init('v' + p);
|
q.init('v' + p);
|
||||||
|
|
||||||
|
// Finds a match for the version in the local packages list.
|
||||||
u := fLocalPackages.find(n, o, q, pck);
|
u := fLocalPackages.find(n, o, q, pck);
|
||||||
|
|
||||||
|
// Try to fetch the right version if no match
|
||||||
|
if not assigned(u) and dubBuildOptions.autoFetch then
|
||||||
|
begin
|
||||||
|
with TProcess.Create(nil) do
|
||||||
|
try
|
||||||
|
Executable := exeFullName('dub' + exeExt);
|
||||||
|
Options := Options + [poUsePipes];
|
||||||
|
ShowWindow:= swoHIDE;
|
||||||
|
Parameters.Add('fetch');
|
||||||
|
Parameters.Add(n);
|
||||||
|
Parameters.Add('--version=' + p);
|
||||||
|
Execute;
|
||||||
|
if ExitStatus = 0 then
|
||||||
|
begin
|
||||||
|
fLocalPackages.update();
|
||||||
|
u := fLocalPackages.find(n, o, q, pck);
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
// Set the imports, used in particular by DCD
|
||||||
if assigned(u) then
|
if assigned(u) then
|
||||||
begin
|
begin
|
||||||
p := s + '-' + u^.asString + DirectorySeparator + n + DirectorySeparator;
|
p := s + '-' + u^.asString + DirectorySeparator + n + DirectorySeparator;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue