git-applypatch.shon commit Makefile entry for git-svnimport contained a small typo. (f005dba)
   1#!/bin/sh
   2##
   3## applypatch takes four file arguments, and uses those to
   4## apply the unpacked patch (surprise surprise) that they
   5## represent to the current tree.
   6##
   7## The arguments are:
   8##      $1 - file with commit message
   9##      $2 - file with the actual patch
  10##      $3 - "info" file with Author, email and subject
  11##      $4 - optional file containing signoff to add
  12##
  13. git-sh-setup || die "Not a git archive."
  14
  15final=.dotest/final-commit
  16##
  17## If this file exists, we ask before applying
  18##
  19query_apply=.dotest/.query_apply
  20
  21## We do not munge the first line of the commit message too much
  22## if this file exists.
  23keep_subject=.dotest/.keep_subject
  24
  25
  26MSGFILE=$1
  27PATCHFILE=$2
  28INFO=$3
  29SIGNOFF=$4
  30EDIT=${VISUAL:-${EDITOR:-vi}}
  31
  32export GIT_AUTHOR_NAME="$(sed -n '/^Author/ s/Author: //p' "$INFO")"
  33export GIT_AUTHOR_EMAIL="$(sed -n '/^Email/ s/Email: //p' "$INFO")"
  34export GIT_AUTHOR_DATE="$(sed -n '/^Date/ s/Date: //p' "$INFO")"
  35export SUBJECT="$(sed -n '/^Subject/ s/Subject: //p' "$INFO")"
  36
  37if test '' != "$SIGNOFF"
  38then
  39        if test -f "$SIGNOFF"
  40        then
  41                SIGNOFF=`cat "$SIGNOFF"` || exit
  42        elif case "$SIGNOFF" in yes | true | me | please) : ;; *) false ;; esac
  43        then
  44                SIGNOFF=`git-var GIT_COMMITTER_IDENT | sed -e '
  45                                s/>.*/>/
  46                                s/^/Signed-off-by: /'
  47                `
  48        else
  49                SIGNOFF=
  50        fi
  51        if test '' != "$SIGNOFF"
  52        then
  53                LAST_SIGNED_OFF_BY=`
  54                        sed -ne '/^Signed-off-by: /p' "$MSGFILE" |
  55                        tail -n 1
  56                `
  57                test "$LAST_SIGNED_OFF_BY" = "$SIGNOFF" || {
  58                    test '' = "$LAST_SIGNED_OFF_BY" && echo
  59                    echo "$SIGNOFF"
  60                } >>"$MSGFILE"
  61        fi
  62fi
  63
  64patch_header=
  65test -f "$keep_subject" || patch_header='[PATCH] '
  66
  67{
  68        echo "$patch_header$SUBJECT"
  69        if test -s "$MSGFILE"
  70        then
  71                echo
  72                cat "$MSGFILE"
  73        fi
  74} >"$final"
  75
  76interactive=yes
  77test -f "$query_apply" || interactive=no
  78
  79while [ "$interactive" = yes ]; do
  80        echo "Commit Body is:"
  81        echo "--------------------------"
  82        cat "$final"
  83        echo "--------------------------"
  84        echo -n "Apply? [y]es/[n]o/[e]dit/[a]ccept all "
  85        read reply
  86        case "$reply" in
  87                y|Y) interactive=no;;
  88                n|N) exit 2;;   # special value to tell dotest to keep going
  89                e|E) "$EDIT" "$final";;
  90                a|A) rm -f "$query_apply"
  91                     interactive=no ;;
  92        esac
  93done
  94
  95if test -x "$GIT_DIR"/hooks/applypatch-msg
  96then
  97        "$GIT_DIR"/hooks/applypatch-msg "$final" || exit
  98fi
  99
 100echo
 101echo Applying "'$SUBJECT'"
 102echo
 103
 104git-apply --index "$PATCHFILE" || {
 105        # Here if we know which revision the patch applies to,
 106        # we create a temporary working tree and index, apply the
 107        # patch, and attempt 3-way merge with the resulting tree.
 108        exit 1
 109}
 110
 111if test -x "$GIT_DIR"/hooks/pre-applypatch
 112then
 113        "$GIT_DIR"/hooks/pre-applypatch || exit
 114fi
 115
 116tree=$(git-write-tree) || exit 1
 117echo Wrote tree $tree
 118parent=$(git-rev-parse --verify HEAD) &&
 119commit=$(git-commit-tree $tree -p $parent <"$final") || exit 1
 120echo Committed: $commit
 121git-update-ref HEAD $commit $parent || exit
 122
 123if test -x "$GIT_DIR"/hooks/post-applypatch
 124then
 125        "$GIT_DIR"/hooks/post-applypatch
 126fi