114 lines
1.7 KiB
Bash
Executable File
114 lines
1.7 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
afresh () {
|
|
URL="${1?URL}"
|
|
shift
|
|
if test $# != 0
|
|
then
|
|
branch="$1"
|
|
shift
|
|
fi
|
|
if test $# = 1
|
|
then
|
|
git checkout --detach "$1"
|
|
shift
|
|
elif git symbolic-ref -q HEAD
|
|
then
|
|
echo >&2 "HEAD not detached"
|
|
exit 1
|
|
fi
|
|
|
|
if test $# != 0
|
|
then
|
|
echo >&2 "$0 URL topic-name [base]"
|
|
exit 1
|
|
fi
|
|
|
|
b4 am -o- -t "$URL" |
|
|
tee ./+b4am.mbx |
|
|
git am -s3 && rm -f ./+b4am.mbx
|
|
status=$?
|
|
|
|
if test $status = 0 && test -n "$branch"
|
|
then
|
|
git checkout -b "$branch"
|
|
fi
|
|
exit $?
|
|
}
|
|
|
|
redo_or_afresh () {
|
|
if git show-ref --quiet --verify "refs/heads/$1"
|
|
then
|
|
git checkout "$1" || exit
|
|
return
|
|
else
|
|
afresh "$@"
|
|
return
|
|
fi
|
|
}
|
|
|
|
force=
|
|
while case "$#" in 0) break;; esac
|
|
do
|
|
case "$1" in
|
|
-f | --force)
|
|
force=--force ;;
|
|
-*)
|
|
echo >&2 "$0: unknown option '$1'"
|
|
exit 1 ;;
|
|
*)
|
|
break ;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
case $# in
|
|
0) : happy ;;
|
|
1|2|3) redo_or_afresh "$@" ;;
|
|
*) echo >&2 "$0: extra arguments" ;;
|
|
esac
|
|
|
|
above_master=$(git rev-list --first-parent master.. | wc -l)
|
|
above_next=$(git rev-list --first-parent next.. | wc -l)
|
|
if test "$above_master" != "$above_next"
|
|
then
|
|
if test "$force" = "--force"
|
|
then
|
|
echo >&2 warning: some patches are already in next
|
|
else
|
|
echo >&2 fatal: some patches are already in next
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
MID=
|
|
OLD=$(git rev-parse HEAD)
|
|
git detach ${force+--force} || exit
|
|
git rev-list HEAD..$OLD |
|
|
while read commit
|
|
do
|
|
git notes --ref=amlog show $commit
|
|
done |
|
|
sed -n -e '/^Message-Id: /{
|
|
s///p
|
|
q
|
|
}' |
|
|
xargs -n1 b4 am -o- -T |
|
|
tee ./+b4am.mbx |
|
|
git am -s3 && rm -f ./+b4am.mbx || exit $?
|
|
|
|
git range-diff --notes=amlog --crea=999 @{-1}...
|
|
echo -n >&2 "Update [y/n]? "
|
|
while read yesno
|
|
do
|
|
case "$yesno" in
|
|
[Yy]*)
|
|
git co -B @{-1}
|
|
exit 0
|
|
;;
|
|
[Nn]*)
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|