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