Created
October 25, 2019 14:15
-
-
Save radleta/548058a86a29edc6a102e6ea1e5a691f to your computer and use it in GitHub Desktop.
Git: Apply all the *.patch files to a git repo stopping when conflict exists
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -src is the source dirtory where the *.patch files exist | |
# -archive is the directory to move the *.patch files to once they have been applied | |
param([string]$src="", [string]$archive="") | |
# env to redirect git output | |
$env:GIT_REDIRECT_STDERR = '2>&1' | |
# check to ensure -src is provided | |
if ($src -eq "") | |
{ | |
Write-Error "-src must be provided." | |
exit 1 | |
} | |
# resolve -src to absolute path | |
$src = resolve-path $src | |
# ensure -src exists | |
if (![System.IO.Directory]::Exists($src)) { | |
Write-Error "-src must exist" | |
exit 1; | |
} | |
# ensure -archive is provided | |
if ($archive -eq "") | |
{ | |
Write-Error "-archive must be provided." | |
exit 1 | |
} | |
# resolve -archive to absolute path | |
$archive = resolve-path $archive | |
# ensure -archive exists | |
if (![System.IO.Directory]::Exists($archive)) { | |
Write-Error "-archive must exist" | |
exit 1 | |
} | |
# check to ensure git is clean | |
$statusOutput = git status --short | Out-String | |
if ($statusOutput -ne "") { | |
Write-Error "Git is dirty. Please clean up git directory before patching." | |
exit 1 | |
} | |
# remember how many we've done | |
$count = 0 | |
# iterate over all patch files | |
Get-ChildItem $src -Filter *.patch | Foreach-Object { | |
# remember how many we have | |
$count++ | |
# write something useful | |
Write-Host "Applying " + $_.FullName | |
# apply the file | |
git am -C10 --reject --ignore-space-change --ignore-whitespace ""$_.FullName"" | |
# remember the exit code from git | |
$gitExitCode = $LASTEXITCODE | |
# move the file to the archive since its been applied | |
mv $_.FullName ([io.path]::Combine($archive, $_.Name)) | |
# bail when the file causes issues | |
if ($gitExitCode -ne 0) { | |
Write-Error "error: Git Patch Failed for $($_.Name). Please resolve." | |
exit $LASTEXITCODE; | |
} | |
} | |
# something nice when no files exist | |
if ($count -eq 0) { | |
Write-Host "No patch files found in $($src)." | |
} | |
# exit with no error code | |
exit 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment