first version of git-drop-changeid

This commit is contained in:
Barak Michener 2020-11-25 21:45:38 -08:00
parent 45372524ee
commit f92cfe6c1f

56
git-drop-changeid Executable file
View file

@ -0,0 +1,56 @@
#!/bin/bash
# This script is meant to be run as a GIT_SEQUENCE_EDITOR
# when running `git rebase -i`. The idea being that it will
# cross-reference commit logs and history with the target branch and
# drop any changes, squashed or otherwise, that exist on that branch
FILE=${1}
# Find the branch we're rebasing onto
ONTO=$(awk '/^# Rebase/{ print $5 }' ${FILE})
# Create tempfile to rewrite the todo list
random=$( (whoami ; hostname ; date; cat $1) | git hash-object --stdin)
dest="$1.tmp.${random}"
trap 'rm -f "${dest}"' EXIT
# For each commit...
while read -r line; do
if [[ "$line" =~ ^#.* ]]; then
echo $line >> ${dest}
continue
fi
commit=$(echo -n $line | awk '{ print $2 }')
if [ -z "${commit}" ]; then
continue
fi
# ...see if there's a Change-Id in it....
changeid=$(git log --format=%B -n 1 ${commit} | awk '/Change-Id/{ print $2 }')
if [ -n "${changeid}" ]; then
# ...and match it against the history of the target branch
gitlog=$(git log --grep "${changeid}" ${ONTO})
if [ -n "${gitlog}" ] ; then
echo $line "# Has Change-Id ${changeid}" | sed 's/pick/drop/g' >> ${dest}
continue
fi
fi
echo $line >> ${dest}
done < ${FILE}
# Apply the changes from the tempfile
if ! mv "${dest}" "$1" ; then
echo "cannot mv ${dest} to $1"
exit 1
fi
# Proceed with the editor as per usual
REAL_EDITOR="$(git var GIT_EDITOR)"
if [ -n "$REAL_EDITOR" ]; then
$REAL_EDITOR "$@"
fi