git_find_installed.iss.inc 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. { Copyright 2019 Espressif Systems (Shanghai) PTE LTD
  2. SPDX-License-Identifier: Apache-2.0 }
  3. { ------------------------------ Find installed copies of Git ------------------------------ }
  4. var
  5. InstalledGitVersions: TStringList;
  6. InstalledGitDisplayNames: TStringList;
  7. InstalledGitExecutables: TStringList;
  8. procedure GitVersionAdd(Version, DisplayName, Executable: String);
  9. begin
  10. Log('Adding Git version=' + Version + ' name='+DisplayName+' executable='+Executable);
  11. InstalledGitVersions.Append(Version);
  12. InstalledGitDisplayNames.Append(DisplayName);
  13. InstalledGitExecutables.Append(Executable);
  14. end;
  15. function GetVersionOfGitExe(Path: String; var Version: String; var ErrStr: String): Boolean;
  16. var
  17. VersionOutputFile: String;
  18. Args: String;
  19. GitVersionAnsi: AnsiString;
  20. GitVersion: String;
  21. GitVersionPrefix: String;
  22. Err: Integer;
  23. begin
  24. VersionOutputFile := ExpandConstant('{tmp}\gitver.txt');
  25. DeleteFile(VersionOutputFile);
  26. Args := '/C "' + Path + '" --version >gitver.txt';
  27. Log('Running ' + Args);
  28. if not ShellExec('', 'cmd.exe', Args,
  29. ExpandConstant('{tmp}'), SW_HIDE, ewWaitUntilTerminated, Err) then
  30. begin
  31. ErrStr := 'Failed to get git version, error=' + IntToStr(err);
  32. Log(ErrStr);
  33. Result := False;
  34. exit;
  35. end;
  36. LoadStringFromFile(VersionOutputFile, GitVersionAnsi);
  37. GitVersion := Trim(String(GitVersionAnsi));
  38. GitVersionPrefix := 'git version ';
  39. if Pos(GitVersionPrefix, GitVersion) <> 1 then
  40. begin
  41. ErrStr := 'Unexpected git version format: ' + GitVersion;
  42. Log(ErrStr);
  43. Result := False;
  44. exit;
  45. end;
  46. Delete(GitVersion, 1, Length(GitVersionPrefix));
  47. Version := GitVersion;
  48. Result := True;
  49. end;
  50. procedure FindGitInPath();
  51. var
  52. Args: String;
  53. GitListFile: String;
  54. GitPaths: TArrayOfString;
  55. GitVersion: String;
  56. ErrStr: String;
  57. Err: Integer;
  58. i: Integer;
  59. begin
  60. GitListFile := ExpandConstant('{tmp}\gitlist.txt');
  61. Args := '/C where git.exe >"' + GitListFile + '"';
  62. if not ShellExec('', 'cmd.exe', Args,
  63. '', SW_HIDE, ewWaitUntilTerminated, Err) then
  64. begin
  65. Log('Failed to find git using "where", error='+IntToStr(Err));
  66. exit;
  67. end;
  68. LoadStringsFromFile(GitListFile, GitPaths);
  69. for i:= 0 to GetArrayLength(GitPaths) - 1 do
  70. begin
  71. Log('Git path: ' + GitPaths[i]);
  72. if not GetVersionOfGitExe(GitPaths[i], GitVersion, ErrStr) then
  73. continue;
  74. Log('Git version: ' + GitVersion);
  75. GitVersionAdd(GitVersion, GitVersion, GitPaths[i]);
  76. end;
  77. end;
  78. procedure FindInstalledGitVersions();
  79. begin
  80. InstalledGitVersions := TStringList.Create();
  81. InstalledGitDisplayNames := TStringList.Create();
  82. InstalledGitExecutables := TStringList.Create();
  83. FindGitInPath();
  84. end;