git-rebase-scripton commit [PATCH] Make "git-ls-files" work in subdirectories (5be4efb)
   1#!/bin/sh
   2#
   3# Copyright (c) 2005 Junio C Hamano.
   4#
   5
   6. git-sh-setup-script || die "Not a git archive."
   7
   8usage="usage: $0 "'<upstream> [<head>]
   9
  10Uses output from git-cherry to rebase local commits to the new head of
  11upstream tree.'
  12
  13case "$#,$1" in
  141,*..*)
  15    upstream=$(expr "$1" : '\(.*\)\.\.') ours=$(expr "$1" : '.*\.\.\(.*\)$')
  16    set x "$upstream" "$ours"
  17    shift ;;
  18esac
  19
  20git-update-cache --refresh || exit
  21
  22case "$#" in
  231) ours_symbolic=HEAD ;;
  242) ours_symbolic="$2" ;;
  25*) die "$usage" ;;
  26esac
  27
  28upstream=`git-rev-parse --verify "$1"` &&
  29ours=`git-rev-parse --verify "$ours_symbolic"` || exit
  30different1=$(git-diff-cache --name-only --cached "$ours") &&
  31different2=$(git-diff-cache --name-only "$ours") &&
  32test "$different1$different2" = "" ||
  33die "Your working tree does not match $ours_symbolic."
  34
  35git-read-tree -m -u $ours $upstream &&
  36git-rev-parse --verify "$upstream^0" >"$GIT_DIR/HEAD" || exit
  37
  38tmp=.rebase-tmp$$
  39fail=$tmp-fail
  40trap "rm -rf $tmp-*" 0 1 2 3 15
  41
  42>$fail
  43
  44git-cherry $upstream $ours |
  45while read sign commit
  46do
  47        case "$sign" in
  48        -) continue ;;
  49        esac
  50        S=`cat "$GIT_DIR/HEAD"` &&
  51        GIT_EXTERNAL_DIFF=git-apply-patch-script git-diff-tree -p $commit &&
  52        git-commit-script -C "$commit" || {
  53                echo $commit >>$fail
  54                git-read-tree --reset -u $S
  55        }
  56done
  57if test -s $fail
  58then
  59        echo Some commits could not be rebased, check by hand:
  60        cat $fail
  61fi