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
index dfdb73ed9f..0b56201d86 100755 --- a/Reintegrate +++ b/Reintegrate @@ -10,25 +10,43 @@ echo '#!/bin/sh while read branch eh do case "$eh" in - "") git merge "$branch" || break ;; - ?*) echo >&2 "Eh? $branch $eh"; break ;; + "") + 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 - other=$(git rev-parse --verify "$commit^2") && - 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" - } + if other=$(git rev-parse -q --verify "$commit^2") + then + show_merge + else + show_pick + fi + if test -z "$series" then series="$merged"