Reintegrate: sometimes a specific cherry-pick need to be carried forward

This is especially necessary when you reverted a premature merge to more stable integration branch while you do want to keep the topic cooking in more experimental integration branch.

Junio C Hamano committed Feb 13, 2009 at 16:56 UTC dc27452ae4adbb1df89166b6ac1dcaefd38a2e3f
1 file changed +29 -11
Reintegrate
+29 -11
@@ -10,25 +10,43 @@ echo '#!/bin/sh
10 while read branch eh
11 do
12 case "$eh" in
13 - "") git merge "$branch" || break ;;
14 - ?*) echo >&2 "Eh? $branch $eh"; break ;;
13 + "")
14 + echo >&2 "* $branch"
15 + git merge "$branch" || break ;;
16 + pick" "*)
17 + echo >&2 "* $eh"
18 + git cherry-pick "$branch" || break ;;
19 + *) echo >&2 "Eh? $branch $eh"; break ;;
20 esac
21 done <<EOF'
22
23 +show_merge () {
24 + branch=$(expr "$msg" : "$merge_msg") &&
25 + tip=$(git rev-parse --verify "refs/heads/$branch" 2>/dev/null) &&
26 + merged=$(git name-rev --refs="refs/heads/$branch" "$other" 2>/dev/null) &&
27 + merged=$(expr "$merged" : "$x40 \(.*\)") &&
28 + test "$merged" != undefined || {
29 + other=$(git log -1 --pretty='format:%s' $other) &&
30 + merged="$branch :rebased? $other"
31 + }
32 +}
33 +
34 +show_pick () {
35 + merged="$(git rev-parse --verify "$commit") pick $msg"
36 +}
37 +
38 git log --pretty=oneline --first-parent "$1" |
39 {
40 series=
41 while read commit msg
42 do
23 - other=$(git rev-parse --verify "$commit^2") &&
24 - branch=$(expr "$msg" : "$merge_msg") &&
25 - tip=$(git rev-parse --verify "refs/heads/$branch" 2>/dev/null) &&
26 - merged=$(git name-rev --refs="refs/heads/$branch" "$other" 2>/dev/null) &&
27 - merged=$(expr "$merged" : "$x40 \(.*\)") &&
28 - test "$merged" != undefined || {
29 - other=$(git log -1 --pretty='format:%s' $other) &&
30 - merged="$branch :rebased? $other"
31 - }
43 + if other=$(git rev-parse -q --verify "$commit^2")
44 + then
45 + show_merge
46 + else
47 + show_pick
48 + fi
49 +
50 if test -z "$series"
51 then
52 series="$merged"