From 3ec0851d85b201bd628c89d35f8b48f9c1e61e68 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Tue, 23 Feb 2010 17:22:43 -0800 Subject: [PATCH] Reintegrate: allow update/diff --- Reintegrate | 99 +++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 74 insertions(+), 25 deletions(-) diff --git a/Reintegrate b/Reintegrate index 21da827f46..6a86314006 100755 --- a/Reintegrate +++ b/Reintegrate @@ -1,10 +1,17 @@ #!/bin/sh -accept_rerere=t generate=no +accept_rerere=t generate=no update= diff= while case "$#,$1" in 0,*) break;; *,-*) ;; esac do case "$1" in -n) accept_rerere= ;; + -d) update=${2?"diff with what?"} + diff=yes + generate=yes + shift ;; + -u) update=${2?"update what?"} + generate=yes + shift ;; *) generate=yes break ;; esac @@ -34,9 +41,16 @@ no) do case "$eh" in "") + save=$(git rev-parse --verify HEAD) + echo >&2 "* $branch" git merge "$branch" || accept_rerere || exit - if git show-ref -q --verify "refs/merge-fix/$branch" + + this=$(git rev-parse --verify HEAD) + if test "$this" = "$save" + then + : + elif git show-ref -q --verify "refs/merge-fix/$branch" then git cherry-pick --no-commit "refs/merge-fix/$branch" && EDITOR=: git commit --amend -a @@ -51,6 +65,14 @@ no) exit esac +if test -n "$update" && test $# = 0 +then + set x $(sed -n -e '2s/^# //p' <"$update") && + shift +fi + +# Generation (or updating) + 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=' @@ -84,29 +106,56 @@ show_pick () { merged="$(git rev-parse --verify "$commit") pick $msg" } -echo '#!/bin/sh' -echo "$0 <<\\EOF" +generate () { + PROGRAM=$1 + shift + echo '#!/bin/sh' + echo "# $1" + echo "$PROGRAM" '"$@" <<\EOF' + 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 -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" + if test -z "$series" + then + series="$merged" + else + series="$merged$LF$series" + fi + done + echo "$series" + } + echo EOF } -echo EOF +if test -z "$update" +then + generate "$0" "$@" +elif test -z "$diff" +then + generate "$0" "$@" | diff -u "$update" - + if test $? = 0 + then + echo >&2 "No changes." + else + echo >&2 -n "Update [Y/n]? " + read yesno + case "$yesno" in + [Yy]*) + generate "$0" "$@" | + sed -e 's/ :rebased?.*//' >"$update" ;; + *) + echo >&2 "No update then." ;; + esac + fi +else + generate "$0" "$@" | diff -u "$update" - +fi