mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-11-04 06:11:06 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			195 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			195 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
{ Copyright 2019-2021 Espressif Systems (Shanghai) CO LTD
 | 
						|
  SPDX-License-Identifier: Apache-2.0 }
 | 
						|
 | 
						|
{ ------------------------------ Page to select Git ------------------------------ }
 | 
						|
 | 
						|
#include "git_find_installed.iss.inc"
 | 
						|
 | 
						|
var
 | 
						|
  GitPage: TInputOptionWizardPage;
 | 
						|
  GitPath, GitExecutablePath, GitVersion: String;
 | 
						|
  GitUseExisting: Boolean;
 | 
						|
  GitSelectionInstallIndex: Integer;
 | 
						|
  GitSelectionCustomPathIndex: Integer;
 | 
						|
 | 
						|
function GetGitPath(Unused: String): String;
 | 
						|
begin
 | 
						|
  Result := GitPath;
 | 
						|
end;
 | 
						|
 | 
						|
function GitInstallRequired(): Boolean;
 | 
						|
begin
 | 
						|
  Result := not GitUseExisting;
 | 
						|
end;
 | 
						|
 | 
						|
function GitVersionSupported(Version: String): Boolean;
 | 
						|
var
 | 
						|
  Major, Minor: Integer;
 | 
						|
begin
 | 
						|
  Result := False;
 | 
						|
  if not VersionExtractMajorMinor(Version, Major, Minor) then
 | 
						|
  begin
 | 
						|
    Log('GitVersionSupported: Could not parse version=' + Version);
 | 
						|
    exit;
 | 
						|
  end;
 | 
						|
 | 
						|
  { Need at least git 2.12 for 'git clone --reference' to work with submodules }
 | 
						|
  if (Major = 2) and (Minor >= 12) then Result := True;
 | 
						|
  if (Major > 2) then Result := True;
 | 
						|
end;
 | 
						|
 | 
						|
procedure GitCustomPathUpdateEnabled();
 | 
						|
var
 | 
						|
  Enable: Boolean;
 | 
						|
begin
 | 
						|
  if GitPage.SelectedValueIndex = GitSelectionCustomPathIndex then
 | 
						|
    Enable := True;
 | 
						|
 | 
						|
  ChoicePageSetInputEnabled(GitPage, Enable);
 | 
						|
end;
 | 
						|
 | 
						|
procedure OnGitPagePrepare(Sender: TObject);
 | 
						|
var
 | 
						|
  Page: TInputOptionWizardPage;
 | 
						|
  FullName: String;
 | 
						|
  i, Index, FirstEnabledIndex: Integer;
 | 
						|
  OfferToInstall: Boolean;
 | 
						|
  VersionToInstall: String;
 | 
						|
  VersionSupported: Boolean;
 | 
						|
begin
 | 
						|
  Page := TInputOptionWizardPage(Sender);
 | 
						|
  Log('OnGitPagePrepare');
 | 
						|
  if Page.CheckListBox.Items.Count > 0 then
 | 
						|
    exit;
 | 
						|
 | 
						|
  FindInstalledGitVersions();
 | 
						|
 | 
						|
  VersionToInstall := '{#GitVersion}';
 | 
						|
  OfferToInstall := True;
 | 
						|
  FirstEnabledIndex := -1;
 | 
						|
 | 
						|
  for i := 0 to InstalledGitVersions.Count - 1 do
 | 
						|
  begin
 | 
						|
    VersionSupported := GitVersionSupported(InstalledGitVersions[i]);
 | 
						|
    FullName := InstalledGitDisplayNames.Strings[i];
 | 
						|
    if not VersionSupported then
 | 
						|
    begin
 | 
						|
      FullName := FullName + ' (unsupported)';
 | 
						|
    end;
 | 
						|
    FullName := FullName + #13#10 + InstalledGitExecutables.Strings[i];
 | 
						|
    Index := Page.Add(FullName);
 | 
						|
    if not VersionSupported then
 | 
						|
    begin
 | 
						|
      Page.CheckListBox.ItemEnabled[Index] := False;
 | 
						|
    end else begin
 | 
						|
      if FirstEnabledIndex < 0 then FirstEnabledIndex := Index;
 | 
						|
    end;
 | 
						|
    if InstalledGitVersions[i] = VersionToInstall then
 | 
						|
    begin
 | 
						|
      OfferToInstall := False;
 | 
						|
    end;
 | 
						|
  end;
 | 
						|
 | 
						|
  if OfferToInstall then
 | 
						|
  begin
 | 
						|
    Index := Page.Add('Install Git ' + VersionToInstall);
 | 
						|
    if FirstEnabledIndex < 0 then FirstEnabledIndex := Index;
 | 
						|
    GitSelectionInstallIndex := Index;
 | 
						|
  end;
 | 
						|
 | 
						|
  Index := Page.Add('Custom git.exe location');
 | 
						|
  if FirstEnabledIndex < 0 then FirstEnabledIndex := Index;
 | 
						|
  GitSelectionCustomPathIndex := Index;
 | 
						|
 | 
						|
  Page.SelectedValueIndex := FirstEnabledIndex;
 | 
						|
  GitCustomPathUpdateEnabled();
 | 
						|
end;
 | 
						|
 | 
						|
procedure OnGitSelectionChange(Sender: TObject);
 | 
						|
var
 | 
						|
  Page: TInputOptionWizardPage;
 | 
						|
begin
 | 
						|
  Page := TInputOptionWizardPage(Sender);
 | 
						|
  Log('OnGitSelectionChange index=' + IntToStr(Page.SelectedValueIndex));
 | 
						|
  GitCustomPathUpdateEnabled();
 | 
						|
end;
 | 
						|
 | 
						|
function OnGitPageValidate(Sender: TWizardPage): Boolean;
 | 
						|
var
 | 
						|
  Page: TInputOptionWizardPage;
 | 
						|
  Version, ErrStr: String;
 | 
						|
begin
 | 
						|
  Page := TInputOptionWizardPage(Sender);
 | 
						|
  Log('OnGitPageValidate index=' + IntToStr(Page.SelectedValueIndex));
 | 
						|
  if Page.SelectedValueIndex = GitSelectionInstallIndex then
 | 
						|
  begin
 | 
						|
    GitUseExisting := False;
 | 
						|
    GitExecutablePath := '';
 | 
						|
    GitPath := '';
 | 
						|
    GitVersion := '{#GitVersion}';
 | 
						|
    Result := True;
 | 
						|
  end else if Page.SelectedValueIndex = GitSelectionCustomPathIndex then
 | 
						|
  begin
 | 
						|
    GitPath := ChoicePageGetInputText(Page);
 | 
						|
    GitExecutablePath := GitPath + '\git.exe';
 | 
						|
    if not FileExists(GitExecutablePath) then
 | 
						|
    begin
 | 
						|
      MsgBox('Can not find git.exe in ' + GitPath, mbError, MB_OK);
 | 
						|
      Result := False;
 | 
						|
      exit;
 | 
						|
    end;
 | 
						|
 | 
						|
    if not GetVersionOfGitExe(GitExecutablePath, Version, ErrStr) then
 | 
						|
    begin
 | 
						|
      MsgBox('Can not determine version of git.exe.' + #13#10
 | 
						|
             + 'Please check that this copy of git works from cmd.exe.', mbError, MB_OK);
 | 
						|
      Result := False;
 | 
						|
      exit;
 | 
						|
    end;
 | 
						|
    Log('Version of ' + GitExecutablePath + ' is ' + Version);
 | 
						|
    if not GitVersionSupported(Version) then
 | 
						|
    begin
 | 
						|
      MsgBox('Selected git version (' + Version + ') is not supported.', mbError, MB_OK);
 | 
						|
      Result := False;
 | 
						|
      exit;
 | 
						|
    end;
 | 
						|
    Log('Version of git is supported');
 | 
						|
    GitUseExisting := True;
 | 
						|
    GitVersion := Version;
 | 
						|
  end else begin
 | 
						|
    GitUseExisting := True;
 | 
						|
    GitExecutablePath := InstalledGitExecutables[Page.SelectedValueIndex];
 | 
						|
    GitPath := ExtractFilePath(GitExecutablePath);
 | 
						|
    GitVersion := InstalledGitVersions[Page.SelectedValueIndex];
 | 
						|
    Result := True;
 | 
						|
  end;
 | 
						|
end;
 | 
						|
 | 
						|
procedure GitExecutablePathUpdateAfterInstall();
 | 
						|
var
 | 
						|
  GitInstallPath: String;
 | 
						|
begin
 | 
						|
  GitInstallPath := GetInstallPath('SOFTWARE\GitForWindows', 'InstallPath');
 | 
						|
  if GitInstallPath = '' then
 | 
						|
  begin
 | 
						|
    Log('Failed to find Git install path');
 | 
						|
    exit;
 | 
						|
  end;
 | 
						|
  GitPath := GitInstallPath + '\cmd';
 | 
						|
  GitExecutablePath := GitPath + '\git.exe';
 | 
						|
end;
 | 
						|
 | 
						|
<event('InitializeWizard')>
 | 
						|
procedure CreateGitPage();
 | 
						|
begin
 | 
						|
  GitPage := ChoicePageCreate(
 | 
						|
    wpLicense,
 | 
						|
    'Git choice', 'Please choose Git version',
 | 
						|
    'Available Git versions',
 | 
						|
    'Enter custom location of git.exe',
 | 
						|
    True,
 | 
						|
    @OnGitPagePrepare,
 | 
						|
    @OnGitSelectionChange,
 | 
						|
    @OnGitPageValidate);
 | 
						|
end;
 |