Fix fd leak in http-fetch
[git.git] / git-am.sh
index fd0772d..38841d9 100755 (executable)
--- a/git-am.sh
+++ b/git-am.sh
@@ -224,29 +224,33 @@ do
                git-stripspace < "$dotest/msg" > "$dotest/msg-clean"
                ;;
        esac
-       resume=
 
        GIT_AUTHOR_NAME="$(sed -n '/^Author/ s/Author: //p' "$dotest/info")"
        GIT_AUTHOR_EMAIL="$(sed -n '/^Email/ s/Email: //p' "$dotest/info")"
        GIT_AUTHOR_DATE="$(sed -n '/^Date/ s/Date: //p' "$dotest/info")"
-       SUBJECT="$(sed -n '/^Subject/ s/Subject: //p' "$dotest/info")"
        export GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL GIT_AUTHOR_DATE
 
+       SUBJECT="$(sed -n '/^Subject/ s/Subject: //p' "$dotest/info")"
        case "$keep_subject" in -k)  SUBJECT="[PATCH] $SUBJECT" ;; esac
-       if test '' != "$SIGNOFF"
-       then
+
+       case "$resume" in
+       '')
+           if test '' != "$SIGNOFF"
+           then
                LAST_SIGNED_OFF_BY=`
-                       sed -ne '/^Signed-off-by: /p' "$dotest/msg-clean" |
-                       tail -n 1
+                   sed -ne '/^Signed-off-by: /p' \
+                   "$dotest/msg-clean" |
+                   tail -n 1
                `
-               ADD_SIGNOFF=$(test "$LAST_SIGNED_OFF_BY" = "$SIGNOFF" || {
+               ADD_SIGNOFF=`
+                   test "$LAST_SIGNED_OFF_BY" = "$SIGNOFF" || {
                    test '' = "$LAST_SIGNED_OFF_BY" && echo
                    echo "$SIGNOFF"
-               })
-       else
+               }`
+           else
                ADD_SIGNOFF=
-       fi
-       {
+           fi
+           {
                echo "$SUBJECT"
                if test -s "$dotest/msg-clean"
                then
@@ -257,8 +261,11 @@ do
                then
                        echo "$ADD_SIGNOFF"
                fi
-       } >"$dotest/final-commit"
+           } >"$dotest/final-commit"
+           ;;
+       esac
 
+       resume=
        if test "$interactive" = t
        then
            test -t 0 ||
@@ -270,14 +277,17 @@ do
                echo "--------------------------"
                cat "$dotest/final-commit"
                echo "--------------------------"
-               echo -n "Apply? [y]es/[n]o/[e]dit/[a]ccept all "
+               echo -n "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all "
                read reply
                case "$reply" in
-               y*|Y*) action=yes ;;
-               a*|A*) action=yes interactive= ;;
-               n*|N*) action=skip ;;
-               e*|E*) "${VISUAL:-${EDITOR:-vi}}" "$dotest/final-commit"
+               [yY]*) action=yes ;;
+               [aA]*) action=yes interactive= ;;
+               [nN]*) action=skip ;;
+               [eE]*) "${VISUAL:-${EDITOR:-vi}}" "$dotest/final-commit"
                       action=again ;;
+               [vV]*) action=again
+                      LESS=-S ${PAGER:-less} "$dotest/patch" ;;
+               *)     action=again ;;
                esac
            done
        else