sh: add commit propagator tool
This commit is contained in:
parent
83921d1788
commit
776a6ca1e4
@ -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
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
|
63
garlic/sh/garlic-propagate-commit
Executable file
63
garlic/sh/garlic-propagate-commit
Executable 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
|
Loading…
Reference in New Issue
Block a user