Meta/RP: Replace patch series

Junio C Hamano committed Oct 30, 2007 at 01:30 UTC 5c031573a75b1228461c9e9a5d717d01849abb39
1 file changed +73
RP new
+73
@@ -0,0 +1,73 @@
1 +#!/bin/sh
2 +# Replace patch series
3 +
4 +usage="$0 branch [base-branch] <patchfile"
5 +
6 +if test -d .dotest
7 +then
8 + echo >&2 "still in the middle of rebase/am"
9 + exit 1
10 +fi
11 +
12 +case "$#,$1" in
13 +1,--continue)
14 + ;;
15 +*)
16 + rm -f .rp-state
17 + target_branch="$1"
18 + case $# in
19 + 1)
20 + base_branch=master
21 + ;;
22 + 2)
23 + base_branch=$(git-rev-parse --verify "$2") || exit
24 + ;;
25 + *)
26 + echo >&2 "$usage"
27 + exit 1
28 + ;;
29 + esac
30 +
31 + # find branch point
32 + branch_point=$(git merge-base "$base_branch" "$target_branch") || {
33 + echo >&2 "failed to compute the branch point"
34 + exit 1
35 + }
36 +
37 + # safety -- never rewind/replace what's merged to next
38 + in_branch=$(git rev-list $branch_point..$target_branch) &&
39 + not_in_next=$(git rev-list $branch_point..$target_branch ^next) &&
40 + test "z$in_branch" = "z$not_in_next" || {
41 + echo >&2 "should not be rewinding part of $target_branch that is already in next"
42 + exit 1
43 + }
44 +
45 + # detach the HEAD
46 + git checkout "$branch_point" || {
47 + echo >&2 "detaching the head at $branch_point"
48 + exit 1
49 + }
50 +
51 + {
52 + echo "target_branch=$target_branch"
53 + echo "branch_point=$branch_point"
54 + } >.rp-state
55 + # apply patches
56 + git am -3 -s -u || {
57 + echo >&2 "finish the am and say $0 --continue"
58 + exit 1
59 + }
60 + ;;
61 +esac
62 +
63 +branch_point=$(sed -ne 's/^branch_point=//p' .rp-state) &&
64 +target_branch=$(sed -ne 's/^target_branch=//p' .rp-state) || {
65 + echo >&2 "no replace-patch session"
66 + exit 1
67 +}
68 +rm -f .rp-state
69 +
70 +git branch -f "$target_branch" HEAD
71 +git checkout "$target_branch"
72 +git -p show-branch "$target_branch@{1}" "$target_branch"
73 +git diff --stat -p "$target_branch@{1}" "$target_branch"