sh: add commit propagator tool

This commit is contained in:
Rodrigo Arias 2021-05-10 17:01:54 +02:00
parent 83921d1788
commit 776a6ca1e4
2 changed files with 65 additions and 0 deletions

View File

@ -35,5 +35,7 @@ in
mkdir -p $out/share/man/man1 mkdir -p $out/share/man/man1
cp garlic.1 $out/share/man/man1 cp garlic.1 $out/share/man/man1
cp garlic-git-table $out/bin cp garlic-git-table $out/bin
patchShebangs garlic-propagate-commit
cp garlic-propagate-commit $out/bin
''; '';
} }

View File

@ -0,0 +1,63 @@
#!/bin/bash -e
function printHelp()
{
>&2 echo "Usage: garlic-propagate-commit <COMMIT-ID>"
>&2 echo
cat >&2 <<EOF
This tool uses the given commit and adds it to each branch and then pushes them
to the remote repository. It is useful to propagate the same change to every
branch.
Ensure that you don't have changes in your working copy or the index without
adding to a commit.
Use with caution!
EOF
}
function branchContainsCommit()
{
if [[ `git branch $1 --contains $2 2>/dev/null | sed 's/^..//'` == $1 ]]; then
return 0
else
return 1
fi
}
if [ $# -lt 1 ]; then
printHelp
exit 1
fi
# Obtain all the tracked branches
branches=(`git branch | sed 's/^..//'`)
currentBranch=`git rev-parse --abbrev-ref HEAD`
# Make sure that the commit SHA exists
commit=$1
if branchContainsCommit $currentBranch $commit; then
echo "Commit $commit exists in current branch, proceeding..."
else
echo "Error: Commit $commit does not exist in the current branch"
exit 1
fi
# Distribute the commit for all tracked branches
for branch in ${branches[@]};
do
if [[ $branch != $currentBranch ]]; then
echo "Trying to add commit $commit to branch $branch"
if branchContainsCommit $branch $commit; then
echo "Branch $branch already contains commit $commit, skipping"
else
git checkout $branch
git cherry-pick $commit
git push
fi
fi
done
# Return to the original branch
git checkout $currentBranch