| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- { 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;
|