mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 21:23:58 +01:00
0401993197
This differs from my old git-resquash.sh in that it uses the newer `git rebase --keep-base` if available
47 lines
1.3 KiB
Bash
Executable File
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
|