diff options
Diffstat (limited to 'git-rebase-script')
-rwxr-xr-x | git-rebase-script | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/git-rebase-script b/git-rebase-script new file mode 100755 index 0000000000..7779813d11 --- /dev/null +++ b/git-rebase-script @@ -0,0 +1,56 @@ +#!/bin/sh +# +# Copyright (c) 2005 Junio C Hamano. +# + +. git-sh-setup-script || die "Not a git archive." + +usage="usage: $0 "'<upstream> [<head>] + +Uses output from git-cherry to rebase local commits to the new head of +upstream tree.' + +case "$#,$1" in +1,*..*) + upstream=$(expr "$1" : '\(.*\)\.\.') ours=$(expr "$1" : '.*\.\.\(.*\)$') + set x "$upstream" "$ours" + shift ;; +esac + +case "$#" in +1) upstream=`git-rev-parse --verify "$1"` && + ours=`git-rev-parse --verify HEAD` || exit + ;; +2) upstream=`git-rev-parse --verify "$1"` && + ours=`git-rev-parse --verify "$2"` || exit + ;; +*) echo >&2 "$usage"; exit 1 ;; +esac + +git-read-tree -m -u $ours $upstream && +echo "$upstream" >"$GIT_DIR/HEAD" || exit + +tmp=.rebase-tmp$$ +fail=$tmp-fail +trap "rm -rf $tmp-*" 0 1 2 3 15 + +>$fail + +git-cherry $upstream $ours | +while read sign commit +do + case "$sign" in + -) continue ;; + esac + S=`cat "$GIT_DIR/HEAD"` && + GIT_EXTERNAL_DIFF=git-apply-patch-script git-diff-tree -p $commit && + git-commit-script -C "$commit" || { + echo $commit >>$fail + git-read-tree --reset -u $S + } +done +if test -s $fail +then + echo Some commits could not be rebased, check by hand: + cat $fail +fi |