kopia lustrzana https://github.com/espressif/esp-idf
99 wiersze
2.6 KiB
PHP
99 wiersze
2.6 KiB
PHP
|
{ Copyright 2019 Espressif Systems (Shanghai) PTE LTD
|
||
|
SPDX-License-Identifier: Apache-2.0 }
|
||
|
|
||
|
{ ------------------------------ Find installed copies of Git ------------------------------ }
|
||
|
|
||
|
var
|
||
|
InstalledGitVersions: TStringList;
|
||
|
InstalledGitDisplayNames: TStringList;
|
||
|
InstalledGitExecutables: TStringList;
|
||
|
|
||
|
|
||
|
procedure GitVersionAdd(Version, DisplayName, Executable: String);
|
||
|
begin
|
||
|
Log('Adding Git version=' + Version + ' name='+DisplayName+' executable='+Executable);
|
||
|
InstalledGitVersions.Append(Version);
|
||
|
InstalledGitDisplayNames.Append(DisplayName);
|
||
|
InstalledGitExecutables.Append(Executable);
|
||
|
end;
|
||
|
|
||
|
function GetVersionOfGitExe(Path: String; var Version: String; var ErrStr: String): Boolean;
|
||
|
var
|
||
|
VersionOutputFile: String;
|
||
|
Args: String;
|
||
|
GitVersionAnsi: AnsiString;
|
||
|
GitVersion: String;
|
||
|
GitVersionPrefix: String;
|
||
|
Err: Integer;
|
||
|
begin
|
||
|
VersionOutputFile := ExpandConstant('{tmp}\gitver.txt');
|
||
|
|
||
|
DeleteFile(VersionOutputFile);
|
||
|
Args := '/C "' + Path + '" --version >gitver.txt';
|
||
|
Log('Running ' + Args);
|
||
|
if not ShellExec('', 'cmd.exe', Args,
|
||
|
ExpandConstant('{tmp}'), SW_HIDE, ewWaitUntilTerminated, Err) then
|
||
|
begin
|
||
|
ErrStr := 'Failed to get git version, error=' + IntToStr(err);
|
||
|
Log(ErrStr);
|
||
|
Result := False;
|
||
|
exit;
|
||
|
end;
|
||
|
|
||
|
LoadStringFromFile(VersionOutputFile, GitVersionAnsi);
|
||
|
GitVersion := Trim(String(GitVersionAnsi));
|
||
|
GitVersionPrefix := 'git version ';
|
||
|
if Pos(GitVersionPrefix, GitVersion) <> 1 then
|
||
|
begin
|
||
|
ErrStr := 'Unexpected git version format: ' + GitVersion;
|
||
|
Log(ErrStr);
|
||
|
Result := False;
|
||
|
exit;
|
||
|
end;
|
||
|
|
||
|
Delete(GitVersion, 1, Length(GitVersionPrefix));
|
||
|
Version := GitVersion;
|
||
|
Result := True;
|
||
|
end;
|
||
|
|
||
|
procedure FindGitInPath();
|
||
|
var
|
||
|
Args: String;
|
||
|
GitListFile: String;
|
||
|
GitPaths: TArrayOfString;
|
||
|
GitVersion: String;
|
||
|
ErrStr: String;
|
||
|
Err: Integer;
|
||
|
i: Integer;
|
||
|
begin
|
||
|
GitListFile := ExpandConstant('{tmp}\gitlist.txt');
|
||
|
Args := '/C where git.exe >"' + GitListFile + '"';
|
||
|
if not ShellExec('', 'cmd.exe', Args,
|
||
|
'', SW_HIDE, ewWaitUntilTerminated, Err) then
|
||
|
begin
|
||
|
Log('Failed to find git using "where", error='+IntToStr(Err));
|
||
|
exit;
|
||
|
end;
|
||
|
|
||
|
LoadStringsFromFile(GitListFile, GitPaths);
|
||
|
|
||
|
for i:= 0 to GetArrayLength(GitPaths) - 1 do
|
||
|
begin
|
||
|
Log('Git path: ' + GitPaths[i]);
|
||
|
if not GetVersionOfGitExe(GitPaths[i], GitVersion, ErrStr) then
|
||
|
continue;
|
||
|
|
||
|
Log('Git version: ' + GitVersion);
|
||
|
GitVersionAdd(GitVersion, GitVersion, GitPaths[i]);
|
||
|
end;
|
||
|
end;
|
||
|
|
||
|
procedure FindInstalledGitVersions();
|
||
|
begin
|
||
|
InstalledGitVersions := TStringList.Create();
|
||
|
InstalledGitDisplayNames := TStringList.Create();
|
||
|
InstalledGitExecutables := TStringList.Create();
|
||
|
|
||
|
FindGitInPath();
|
||
|
end;
|