diff --git a/.gitignore b/.gitignore index 21ddb39be..ca8808ab7 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,7 @@ /svnversion.bat /.codereview_upload_cookies /.gitconfig +/.git_bleeding_edge /.git_cl_description_backup /.last_codereview_email_address /.ssh diff --git a/bootstrap/win/git.template.bat b/bootstrap/win/git.template.bat new file mode 100644 index 000000000..d3b9cbcaa --- /dev/null +++ b/bootstrap/win/git.template.bat @@ -0,0 +1,5 @@ +@echo off +setlocal +if not defined EDITOR set EDITOR=notepad +set PATH=%~dp0GIT_BIN_DIR\cmd;%PATH% +"%~dp0GIT_BIN_DIR\GIT_PROGRAM" %* diff --git a/bootstrap/win/win_tools.bat b/bootstrap/win/win_tools.bat index 02a1b310b..55f85cef9 100644 --- a/bootstrap/win/win_tools.bat +++ b/bootstrap/win/win_tools.bat @@ -57,72 +57,114 @@ set ERRORLEVEL=1 goto :END :GIT_CHECK -if "%DEPOT_TOOLS_GIT_BLEEDING%" == "1" ( - set GIT_VERSION=1.9.5.chromium.6 -) else ( - set GIT_VERSION=1.9.5.chromium.6 -) + +:: See if we're on XP for /f "tokens=2 delims=[]" %%i in ('ver') do set VERSTR=%%i for /f "tokens=2,3 delims=. " %%i in ("%VERSTR%") do (set VERMAJOR=%%i & set VERMINOR=%%j) if %VERMAJOR% lss 5 set GIT_VERSION=%GIT_VERSION%-xp -if %VERMAJOR% equ 5 if %VERMINOR% lss 2 set GIT_VERSION=%GIT_VERSION%-xp +if %VERMAJOR% equ 5 if %VERMINOR% lss 2 set XP_SUFFIX=-xp + +:: Check to see if we're on a 32 or 64 bit system +reg Query "HKLM\Hardware\Description\System\CentralProcessor\0" | find /i "x86" > NUL && set OS_BITS=32 || set OS_BITS=64 + +if not exist "%WIN_TOOLS_ROOT_DIR%\.git_bleeding_edge" goto :GIT_OLD_FLOW +set GIT_PORTABLE_FLOW=1 +set GIT_VERSION=2.7.4-%OS_BITS% +set GIT_FETCH_URL=https://commondatastorage.googleapis.com/chrome-infra/PortableGit-%GIT_VERSION%-bit.7z.exe +set GIT_DOWNLOAD_PATH=%ZIP_DIR%\git.7z.exe +set GIT_BIN_DIR=git-%GIT_VERSION%_bin +set GIT_INST_DIR=%WIN_TOOLS_ROOT_DIR%\%GIT_BIN_DIR% +set GIT_EXE_PATH=%GIT_INST_DIR%\bin\git.exe +goto :GIT_CLEANUP + +:GIT_OLD_FLOW +set GIT_VERSION=1.9.5.chromium.6%XP_SUFFIX% +set GIT_BIN_DIR=git-%GIT_VERSION%_bin +set GIT_FETCH_URL=https://commondatastorage.googleapis.com/chrome-infra/%GIT_BIN_DIR%.zip +set GIT_DOWNLOAD_PATH=%ZIP_DIR%\git.zip +set GIT_INST_DIR=%WIN_TOOLS_ROOT_DIR%\%GIT_BIN_DIR% +set GIT_EXE_PATH=%GIT_INST_DIR%\cmd\git.cmd +:GIT_CLEANUP :: Clean up any release which doesn't match the one we want. for /d %%i in ("%WIN_TOOLS_ROOT_DIR%\git-*_bin") do ( if not "%%i" == "%WIN_TOOLS_ROOT_DIR%\git-%GIT_VERSION%_bin" ( + echo Cleaning old git installation %%i rmdir /s /q "%%i" ) ) -set GIT_BIN_DIR=git-%GIT_VERSION%_bin -set GIT_ZIP_FILE=%GIT_BIN_DIR%.zip -set GIT_ZIP_URL=https://commondatastorage.googleapis.com/chrome-infra/%GIT_ZIP_FILE% if "%WIN_TOOLS_FORCE%" == "1" goto :GIT_INSTALL -if exist "%WIN_TOOLS_ROOT_DIR%\%GIT_BIN_DIR%\cmd\git.cmd" ( - call "%WIN_TOOLS_ROOT_DIR%\%GIT_BIN_DIR%\cmd\git.cmd" --version 2>nul 1>nul + +if exist "%GIT_EXE_PATH%" ( + call "%GIT_EXE_PATH%" --version 2>nul 1>nul if errorlevel 1 goto :GIT_INSTALL rem Several git versions can live side-by-side; check the top-level rem batch script to make sure it points to the desired version. find "%GIT_BIN_DIR%" "%WIN_TOOLS_ROOT_DIR%\git.bat" 2>nul 1>nul - if errorlevel 1 goto :GIT_COPY_BATCH_FILES + if errorlevel 1 goto :GIT_MAKE_BATCH_FILES goto :SVN_CHECK ) goto :GIT_INSTALL - :GIT_INSTALL echo Installing git %GIT_VERSION% (avg 1-2 min download) ... +echo Detected: %OS_BITS% bits +if defined XP_SUFFIX echo ... Windows XP +if defined GIT_PORTABLE_FLOW echo ... Portable installation flow + :: git is not accessible; check it out and create 'proxy' files. -if exist "%ZIP_DIR%\git.zip" del "%ZIP_DIR%\git.zip" -echo Fetching from %GIT_ZIP_URL% -cscript //nologo //e:jscript "%~dp0get_file.js" %GIT_ZIP_URL% "%ZIP_DIR%\git.zip" +if exist "%GIT_DOWNLOAD_PATH%" del "%GIT_DOWNLOAD_PATH%" +echo Fetching from %GIT_FETCH_URL% +cscript //nologo //e:jscript "%~dp0get_file.js" %GIT_FETCH_URL% "%GIT_DOWNLOAD_PATH%" if errorlevel 1 goto :GIT_FAIL -:: Cleanup svn directory if it was existing. -if exist "%WIN_TOOLS_ROOT_DIR%\%GIT_BIN_DIR%\." rd /q /s "%WIN_TOOLS_ROOT_DIR%\%GIT_BIN_DIR%" -:: Will create %GIT_BIN_DIR%\... -cscript //nologo //e:jscript "%~dp0unzip.js" "%ZIP_DIR%\git.zip" "%WIN_TOOLS_ROOT_DIR%" -if errorlevel 1 goto :GIT_FAIL -if not exist "%WIN_TOOLS_ROOT_DIR%\%GIT_BIN_DIR%\." goto :GIT_FAIL -del "%ZIP_DIR%\git.zip" -goto :GIT_COPY_BATCH_FILES +:: Cleanup git directory if it already exists. +if exist "%GIT_INST_DIR%\." rd /q /s "%GIT_INST_DIR%" + +if defined GIT_PORTABLE_FLOW ( + rem run PortableGit self-extractor + rem -y : Be Quiet ("yes") + rem -sd1 : Self delete SFX archive + rem -InstallPath : Where to put the files + rem -Directory : Run the post-extract program with this current-working-directory + call "%GIT_DOWNLOAD_PATH%" -y -sd1 -InstallPath="%GIT_INST_DIR%" -Directory="%GIT_INST_DIR%" +) else ( + rem Will create %GIT_INST_DIR%\... + cscript //nologo //e:jscript "%~dp0unzip.js" "%GIT_DOWNLOAD_PATH%" "%WIN_TOOLS_ROOT_DIR%" +) +if errorlevel 1 goto :GIT_FAIL +del "%GIT_DOWNLOAD_PATH%" +if not exist "%GIT_INST_DIR%\." goto :GIT_FAIL -:GIT_COPY_BATCH_FILES +:GIT_MAKE_BATCH_FILES :: Create the batch files. -call copy /y "%WIN_TOOLS_ROOT_DIR%\%GIT_BIN_DIR%\git.bat" "%WIN_TOOLS_ROOT_DIR%\git.bat" 1>nul -call copy /y "%WIN_TOOLS_ROOT_DIR%\%GIT_BIN_DIR%\gitk.bat" "%WIN_TOOLS_ROOT_DIR%\gitk.bat" 1>nul -call copy /y "%WIN_TOOLS_ROOT_DIR%\%GIT_BIN_DIR%\ssh.bat" "%WIN_TOOLS_ROOT_DIR%\ssh.bat" 1>nul -call copy /y "%WIN_TOOLS_ROOT_DIR%\%GIT_BIN_DIR%\ssh-keygen.bat" "%WIN_TOOLS_ROOT_DIR%\ssh-keygen.bat" 1>nul +set GIT_TEMPL=%~dp0git.template.bat +set SED=%GIT_INST_DIR%\usr\bin\sed.exe +if defined GIT_PORTABLE_FLOW ( + rem turns out we just installed sed :) + call "%SED%" -e "s/GIT_BIN_DIR/%GIT_BIN_DIR%/" -e "s/GIT_PROGRAM/cmd\\\\git.exe/" < %GIT_TEMPL% > "%WIN_TOOLS_ROOT_DIR%\git.bat" + call "%SED%" -e "s/GIT_BIN_DIR/%GIT_BIN_DIR%/" -e "s/GIT_PROGRAM/cmd\\\\gitk.exe/" < %GIT_TEMPL% > "%WIN_TOOLS_ROOT_DIR%\gitk.bat" + call "%SED%" -e "s/GIT_BIN_DIR/%GIT_BIN_DIR%/" -e "s/GIT_PROGRAM/usr\\\\bin\\\\ssh.exe/" < %GIT_TEMPL% > "%WIN_TOOLS_ROOT_DIR%\ssh.bat" + call "%SED%" -e "s/GIT_BIN_DIR/%GIT_BIN_DIR%/" -e "s/GIT_PROGRAM/usr\\\\bin\\\\ssh-keygen.exe/" < %GIT_TEMPL% > "%WIN_TOOLS_ROOT_DIR%\ssh-keygen.bat" +) else ( + call copy /y "%WIN_TOOLS_ROOT_DIR%\%GIT_BIN_DIR%\git.bat" "%WIN_TOOLS_ROOT_DIR%\git.bat" 1>nul + call copy /y "%WIN_TOOLS_ROOT_DIR%\%GIT_BIN_DIR%\gitk.bat" "%WIN_TOOLS_ROOT_DIR%\gitk.bat" 1>nul + call copy /y "%WIN_TOOLS_ROOT_DIR%\%GIT_BIN_DIR%\ssh.bat" "%WIN_TOOLS_ROOT_DIR%\ssh.bat" 1>nul + call copy /y "%WIN_TOOLS_ROOT_DIR%\%GIT_BIN_DIR%\ssh-keygen.bat" "%WIN_TOOLS_ROOT_DIR%\ssh-keygen.bat" 1>nul +) :: Ensure autocrlf and filemode are set correctly. call "%WIN_TOOLS_ROOT_DIR%\git.bat" config --system core.autocrlf false call "%WIN_TOOLS_ROOT_DIR%\git.bat" config --system core.filemode false +call "%WIN_TOOLS_ROOT_DIR%\git.bat" config --system core.preloadindex true +call "%WIN_TOOLS_ROOT_DIR%\git.bat" config --system core.fscache true goto :SVN_CHECK :GIT_FAIL echo ... Failed to checkout git automatically. -echo You should get the "prebaked" version used at %GIT_ZIP_URL% +echo You should get the "prebaked" version used at %GIT_FETCH_URL% set ERRORLEVEL=1 goto :END