Reintegrate: allow update/diff

Junio C Hamano committed Feb 23, 2010 at 17:22 UTC 3ec0851d85b201bd628c89d35f8b48f9c1e61e68
1 file changed +74 -25
Reintegrate
+74 -25
@@ -1,10 +1,17 @@
1 #!/bin/sh
2
3 -accept_rerere=t generate=no
3 +accept_rerere=t generate=no update= diff=
4 while case "$#,$1" in 0,*) break;; *,-*) ;; esac
5 do
6 case "$1" in
7 -n) accept_rerere= ;;
8 + -d) update=${2?"diff with what?"}
9 + diff=yes
10 + generate=yes
11 + shift ;;
12 + -u) update=${2?"update what?"}
13 + generate=yes
14 + shift ;;
15 *) generate=yes
16 break ;;
17 esac
@@ -34,9 +41,16 @@ no)
41 do
42 case "$eh" in
43 "")
44 + save=$(git rev-parse --verify HEAD)
45 +
46 echo >&2 "* $branch"
47 git merge "$branch" || accept_rerere || exit
39 - if git show-ref -q --verify "refs/merge-fix/$branch"
48 +
49 + this=$(git rev-parse --verify HEAD)
50 + if test "$this" = "$save"
51 + then
52 + :
53 + elif git show-ref -q --verify "refs/merge-fix/$branch"
54 then
55 git cherry-pick --no-commit "refs/merge-fix/$branch" &&
56 EDITOR=: git commit --amend -a
@@ -51,6 +65,14 @@ no)
65 exit
66 esac
67
68 +if test -n "$update" && test $# = 0
69 +then
70 + set x $(sed -n -e '2s/^# //p' <"$update") &&
71 + shift
72 +fi
73 +
74 +# Generation (or updating)
75 +
76 x40='[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]'
77 x40="$x40$x40$x40$x40$x40$x40$x40$x40"
78 LF='
@@ -84,29 +106,56 @@ show_pick () {
106 merged="$(git rev-parse --verify "$commit") pick $msg"
107 }
108
87 -echo '#!/bin/sh'
88 -echo "$0 <<\\EOF"
89 -
90 -git log --pretty=oneline --first-parent "$1" |
91 -{
92 - series=
93 - while read commit msg
94 - do
95 - if other=$(git rev-parse -q --verify "$commit^2")
96 - then
97 - show_merge
98 - else
99 - show_pick
100 - fi
109 +generate () {
110 + PROGRAM=$1
111 + shift
112 + echo '#!/bin/sh'
113 + echo "# $1"
114 + echo "$PROGRAM" '"$@" <<\EOF'
115 + git log --pretty=oneline --first-parent "$1" |
116 + {
117 + series=
118 + while read commit msg
119 + do
120 + if other=$(git rev-parse -q --verify "$commit^2")
121 + then
122 + show_merge
123 + else
124 + show_pick
125 + fi
126
102 - if test -z "$series"
103 - then
104 - series="$merged"
105 - else
106 - series="$merged$LF$series"
107 - fi
108 - done
109 - echo "$series"
127 + if test -z "$series"
128 + then
129 + series="$merged"
130 + else
131 + series="$merged$LF$series"
132 + fi
133 + done
134 + echo "$series"
135 + }
136 + echo EOF
137 }
138
112 -echo EOF
139 +if test -z "$update"
140 +then
141 + generate "$0" "$@"
142 +elif test -z "$diff"
143 +then
144 + generate "$0" "$@" | diff -u "$update" -
145 + if test $? = 0
146 + then
147 + echo >&2 "No changes."
148 + else
149 + echo >&2 -n "Update [Y/n]? "
150 + read yesno
151 + case "$yesno" in
152 + [Yy]*)
153 + generate "$0" "$@" |
154 + sed -e 's/ :rebased?.*//' >"$update" ;;
155 + *)
156 + echo >&2 "No update then." ;;
157 + esac
158 + fi
159 +else
160 + generate "$0" "$@" | diff -u "$update" -
161 +fi