tor/scripts/git/git-resquash.sh
Nick Mathewson 0401993197 Add git-resquash.sh to repository
This differs from my old git-resquash.sh in that it uses the newer
`git rebase --keep-base` if available
2020-07-17 12:24:01 -04:00

47 lines
1.3 KiB
Bash
Executable File

#!/bin/sh
#
# Provides a convenient alias for "git rebase -i --autosquash --keep-root"
# on gits that have it, and a replacement on gits that don't.
set -e
PARENT="$1"
if test "x$PARENT" = "x"; then
echo "You must specify the parent branch."
exit 1
fi
# Can we use git rebase --keep-base? Detect the git version to find out.
GITVER=$(git version)
if test "$(echo "$GITVER"|cut -d ' ' -f 1-2)" = "git version"; then
# --keep-base was added in git 2.24. Detect if we have that version.
GITVER=$(echo "$GITVER" | cut -d ' ' -f 3)
major=$(echo "$GITVER" | cut -d . -f 1)
minor=$(echo "$GITVER" | cut -d . -f 2)
if test "$major" -lt 2; then
USE_KEEP_BASE=0
elif test "$major" -eq 2 && test "$minor" -lt 24; then
USE_KEEP_BASE=0
else
USE_KEEP_BASE=1
fi
else
# This isn't a git that reports its version in a way recognize; assume that
# --keep-base will work
USE_KEEP_BASE=1
fi
if test "x$USE_KEEP_BASE" = "x1" ; then
exec git rebase -i --autosquash --keep-base "${PARENT}"
else
REV=$(git log --reverse --format='%H' "${PARENT}..HEAD" | head -1)
if test "x${REV}" = "x"; then
echo "No changes here since ${PARENT}"
exit 1
fi
exec git rebase -i --autosquash "${REV}^"
fi