Code

git-apply --verbose
authorJunio C Hamano <junkio@cox.net>
Fri, 18 Aug 2006 10:14:48 +0000 (03:14 -0700)
committerJunio C Hamano <junkio@cox.net>
Fri, 18 Aug 2006 10:14:48 +0000 (03:14 -0700)
Signed-off-by: Junio C Hamano <junkio@cox.net>
builtin-apply.c
t/t4117-apply-reject.sh

index 668be9ce65caf4e284070f4a92a32e6b194fa284..42253e6a72379b49c1d562542245e176cba9c98a 100644 (file)
@@ -39,12 +39,13 @@ static int check;
 static int apply = 1;
 static int apply_in_reverse;
 static int apply_with_reject;
+static int apply_verbosely;
 static int no_add;
 static int show_index_info;
 static int line_termination = '\n';
 static unsigned long p_context = -1;
 static const char apply_usage[] =
-"git-apply [--stat] [--numstat] [--summary] [--check] [--index] [--cached] [--apply] [--no-add] [--index-info] [--allow-binary-replacement] [--reverse] [--reject] [-z] [-pNUM] [-CNUM] [--whitespace=<nowarn|warn|error|error-all|strip>] <patch>...";
+"git-apply [--stat] [--numstat] [--summary] [--check] [--index] [--cached] [--apply] [--no-add] [--index-info] [--allow-binary-replacement] [--reverse] [--reject] [--verbose] [-z] [-pNUM] [-CNUM] [--whitespace=<nowarn|warn|error|error-all|strip>] <patch>...";
 
 static enum whitespace_eol {
        nowarn_whitespace,
@@ -153,6 +154,24 @@ struct patch {
        struct patch *next;
 };
 
+static void say_patch_name(FILE *output, const char *pre, struct patch *patch, const char *post)
+{
+       fputs(pre, output);
+       if (patch->old_name && patch->new_name &&
+           strcmp(patch->old_name, patch->new_name)) {
+               write_name_quoted(NULL, 0, patch->old_name, 1, output);
+               fputs(" => ", output);
+               write_name_quoted(NULL, 0, patch->new_name, 1, output);
+       }
+       else {
+               const char *n = patch->new_name;
+               if (!n)
+                       n = patch->old_name;
+               write_name_quoted(NULL, 0, n, 1, output);
+       }
+       fputs(post, output);
+}
+
 #define CHUNKSIZE (8192)
 #define SLOP (16)
 
@@ -1928,6 +1947,9 @@ static int check_patch_list(struct patch *patch)
        int error = 0;
 
        for (prev_patch = NULL; patch ; patch = patch->next) {
+               if (apply_verbosely)
+                       say_patch_name(stderr,
+                                      "Checking patch ", patch, "...\n");
                error |= check_patch(patch, prev_patch);
                prev_patch = patch;
        }
@@ -2253,8 +2275,12 @@ static int write_out_one_reject(struct patch *patch)
                cnt++;
        }
 
-       if (!cnt)
+       if (!cnt) {
+               if (apply_verbosely)
+                       say_patch_name(stderr,
+                                      "Applied patch ", patch, " cleanly.\n");
                return 0;
+       }
 
        /* This should not happen, because a removal patch that leaves
         * contents are marked "rejected" at the patch level.
@@ -2262,6 +2288,10 @@ static int write_out_one_reject(struct patch *patch)
        if (!patch->new_name)
                die("internal error");
 
+       /* Say this even without --verbose */
+       say_patch_name(stderr, "Applying patch ", patch, " with");
+       fprintf(stderr, " %d rejects...\n", cnt);
+
        cnt = strlen(patch->new_name);
        if (ARRAY_SIZE(namebuf) <= cnt + 5) {
                cnt = ARRAY_SIZE(namebuf) - 5;
@@ -2530,6 +2560,10 @@ int cmd_apply(int argc, const char **argv, const char *prefix)
                        apply = apply_with_reject = 1;
                        continue;
                }
+               if (!strcmp(arg, "--verbose")) {
+                       apply_verbosely = 1;
+                       continue;
+               }
                if (!strcmp(arg, "--inaccurate-eof")) {
                        inaccurate_eof = 1;
                        continue;
index 1cf9a2e7a7a0fe4cea4b68ab4792ac26b3247bb5..b4de075a3e5df86fe399f9133f7437c4a8d8e26d 100755 (executable)
@@ -57,6 +57,17 @@ test_expect_success 'apply without --reject should fail' '
        diff -u file1 saved.file1
 '
 
+test_expect_success 'apply without --reject should fail' '
+
+       if git apply --verbose patch.1
+       then
+               echo "Eh? Why?"
+               exit 1
+       fi
+
+       diff -u file1 saved.file1
+'
+
 test_expect_success 'apply with --reject should fail but update the file' '
 
        cat saved.file1 >file1 &&
@@ -106,4 +117,41 @@ test_expect_success 'apply with --reject should fail but update the file' '
 
 '
 
+test_expect_success 'the same test with --verbose' '
+
+       cat saved.file1 >file1 &&
+       rm -f file1.rej file2.rej file2 &&
+
+       if git apply --reject --verbose patch.2 >rejects
+       then
+               echo "succeeds with --reject?"
+               exit 1
+       fi
+
+       test -f file1 && {
+               echo "file1 still exists?"
+               exit 1
+       }
+       diff -u file2 expected &&
+
+       cat file2.rej &&
+
+       if test -f file1.rej
+       then
+               echo "file2 should not have been touched"
+               exit 1
+       fi
+
+'
+
+test_expect_success 'apply cleanly with --verbose' '
+
+       git cat-file -p HEAD:file1 >file1 &&
+       rm -f file?.rej file2 &&
+
+       git apply --verbose patch.1 &&
+
+       diff -u file1 clean
+'
+
 test_done