You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.1 KiB
60 lines
1.1 KiB
#!/bin/sh |
|
|
|
merge_msg="Merge branch '\(.*\)'" |
|
x40='[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]' |
|
x40="$x40$x40$x40$x40$x40$x40$x40$x40" |
|
LF=' |
|
' |
|
|
|
echo '#!/bin/sh |
|
while read branch eh |
|
do |
|
case "$eh" in |
|
"") |
|
echo >&2 "* $branch" |
|
git merge "$branch" || break ;; |
|
pick" "*) |
|
echo >&2 "* $eh" |
|
git cherry-pick "$branch" || break ;; |
|
*) echo >&2 "Eh? $branch $eh"; break ;; |
|
esac |
|
done <<EOF' |
|
|
|
show_merge () { |
|
branch=$(expr "$msg" : "$merge_msg") && |
|
tip=$(git rev-parse --verify "refs/heads/$branch" 2>/dev/null) && |
|
merged=$(git name-rev --refs="refs/heads/$branch" "$other" 2>/dev/null) && |
|
merged=$(expr "$merged" : "$x40 \(.*\)") && |
|
test "$merged" != undefined || { |
|
other=$(git log -1 --pretty='format:%s' $other) && |
|
merged="$branch :rebased? $other" |
|
} |
|
} |
|
|
|
show_pick () { |
|
merged="$(git rev-parse --verify "$commit") pick $msg" |
|
} |
|
|
|
git log --pretty=oneline --first-parent "$1" | |
|
{ |
|
series= |
|
while read commit msg |
|
do |
|
if other=$(git rev-parse -q --verify "$commit^2") |
|
then |
|
show_merge |
|
else |
|
show_pick |
|
fi |
|
|
|
if test -z "$series" |
|
then |
|
series="$merged" |
|
else |
|
series="$merged$LF$series" |
|
fi |
|
done |
|
echo "$series" |
|
} |
|
|
|
echo 'EOF'
|
|
|