diff: add option to show whole functions as context
[gitweb.git] / git-am.sh
index 65924246d0fae0fa514c815021e2dc3369a7ceb9..016b5056eb29fb24d06667c340ad372ed096d4dc 100755 (executable)
--- a/git-am.sh
+++ b/git-am.sh
@@ -22,6 +22,7 @@ whitespace=     pass it through git-apply
 ignore-space-change pass it through git-apply
 ignore-whitespace pass it through git-apply
 directory=      pass it through git-apply
+exclude=        pass it through git-apply
 C=              pass it through git-apply
 p=              pass it through git-apply
 patch-format=   format the patch(es) are in
@@ -89,11 +90,8 @@ safe_to_abort () {
        then
                return 0
        fi
-       (
-               gettext "You seem to have moved HEAD since the last 'am' failure.
-Not rewinding to ORIG_HEAD" &&
-               echo
-       ) >&2
+               gettextln "You seem to have moved HEAD since the last 'am' failure.
+Not rewinding to ORIG_HEAD" >&2
        return 1
 }
 
@@ -102,9 +100,9 @@ stop_here_user_resolve () {
            printf '%s\n' "$resolvemsg"
            stop_here $1
     fi
-    eval_gettext "When you have resolved this problem run \"\$cmdline --resolved\".
+    eval_gettextln "When you have resolved this problem run \"\$cmdline --resolved\".
 If you would prefer to skip this patch, instead run \"\$cmdline --skip\".
-To restore the original branch and stop patching run \"\$cmdline --abort\"."; echo
+To restore the original branch and stop patching run \"\$cmdline --abort\"."
 
     stop_here $1
 }
@@ -118,7 +116,7 @@ go_next () {
 
 cannot_fallback () {
        echo "$1"
-       gettext "Cannot fall back to three-way merge."; echo
+       gettextln "Cannot fall back to three-way merge."
        exit 1
 }
 
@@ -196,10 +194,15 @@ check_patch_format () {
                return 0
        fi
 
-       # otherwise, check the first few lines of the first patch to try
-       # to detect its format
+       # otherwise, check the first few non-blank lines of the first
+       # patch to try to detect its format
        {
-               read l1
+               # Start from first line containing non-whitespace
+               l1=
+               while test -z "$l1"
+               do
+                       read l1
+               done
                read l2
                read l3
                case "$l1" in
@@ -292,7 +295,7 @@ split_patches () {
                        perl -ne 'BEGIN { $subject = 0 }
                                if ($subject > 1) { print ; }
                                elsif (/^\s+$/) { next ; }
-                               elsif (/^Author:/) { print s/Author/From/ ; }
+                               elsif (/^Author:/) { s/Author/From/ ; print ;}
                                elsif (/^(From|Date)/) { print ; }
                                elsif ($subject) {
                                        $subject = 2 ;
@@ -309,7 +312,8 @@ split_patches () {
                msgnum=
                ;;
        *)
-               if test -n "$parse_patch" ; then
+               if test -n "$patch_format"
+               then
                        clean_abort "$(eval_gettext "Patch format \$patch_format is not supported.")"
                else
                        clean_abort "$(gettext "Patch format detection failed.")"
@@ -366,7 +370,7 @@ do
                ;;
        --resolvemsg)
                shift; resolvemsg=$1 ;;
-       --whitespace|--directory)
+       --whitespace|--directory|--exclude)
                git_apply_opt="$git_apply_opt $(sq "$1=$2")"; shift ;;
        -C|-p)
                git_apply_opt="$git_apply_opt $(sq "$1$2")"; shift ;;
@@ -613,9 +617,9 @@ do
                        go_next && continue
 
                test -s "$dotest/patch" || {
-                       eval_gettext "Patch is empty.  Was it split wrong?
+                       eval_gettextln "Patch is empty.  Was it split wrong?
 If you would prefer to skip this patch, instead run \"\$cmdline --skip\".
-To restore the original branch and stop patching run \"\$cmdline --abort\"."; echo
+To restore the original branch and stop patching run \"\$cmdline --abort\"."
                        stop_here $this
                }
                rm -f "$dotest/original-commit" "$dotest/author-script"
@@ -650,7 +654,7 @@ To restore the original branch and stop patching run \"\$cmdline --abort\"."; ec
 
        if test -z "$GIT_AUTHOR_EMAIL"
        then
-               gettext "Patch does not have a valid e-mail address."; echo
+               gettextln "Patch does not have a valid e-mail address."
                stop_here $this
        fi
 
@@ -701,7 +705,7 @@ To restore the original branch and stop patching run \"\$cmdline --abort\"."; ec
            action=again
            while test "$action" = again
            do
-               gettext "Commit Body is:"; echo
+               gettextln "Commit Body is:"
                echo "--------------------------"
                cat "$dotest/final-commit"
                echo "--------------------------"
@@ -765,16 +769,16 @@ To restore the original branch and stop patching run \"\$cmdline --abort\"."; ec
                # working tree.
                resolved=
                git diff-index --quiet --cached HEAD -- && {
-                       gettext "No changes - did you forget to use 'git add'?
+                       gettextln "No changes - did you forget to use 'git add'?
 If there is nothing left to stage, chances are that something else
-already introduced the same changes; you might want to skip this patch."; echo
+already introduced the same changes; you might want to skip this patch."
                        stop_here_user_resolve $this
                }
                unmerged=$(git ls-files -u)
                if test -n "$unmerged"
                then
-                       gettext "You still have unmerged paths in your index
-did you forget to use 'git add'?"; echo
+                       gettextln "You still have unmerged paths in your index
+did you forget to use 'git add'?"
                        stop_here_user_resolve $this
                fi
                apply_status=0
@@ -799,7 +803,7 @@ did you forget to use 'git add'?"; echo
        fi
        if test $apply_status != 0
        then
-               eval_gettext 'Patch failed at $msgnum $FIRSTLINE'; echo
+               eval_gettextln 'Patch failed at $msgnum $FIRSTLINE'
                stop_here_user_resolve $this
        fi