[PATCH] git-tar-tree: do only basic tests in t/t5000-git-tar-tree.sh
[git.git] / diff-helper.c
index 4da2614..c9e287f 100644 (file)
@@ -6,6 +6,7 @@
 #include "diff.h"
 
 static const char *pickaxe = NULL;
+static int pickaxe_opts = 0;
 static int line_termination = '\n';
 static int inter_name_termination = '\t';
 
@@ -14,6 +15,7 @@ static const char *diff_helper_usage =
 
 int main(int ac, const char **av) {
        struct strbuf sb;
+       const char *garbage_flush_format;
 
        strbuf_init(&sb);
 
@@ -23,10 +25,14 @@ int main(int ac, const char **av) {
                else if (av[1][1] == 'S') {
                        pickaxe = av[1] + 2;
                }
+               else if (!strcmp(av[1], "--pickaxe-all"))
+                       pickaxe_opts = DIFF_PICKAXE_ALL;
                else
                        usage(diff_helper_usage);
                ac--; av++;
        }
+       garbage_flush_format = (line_termination == 0) ? "%s" : "%s\n";
+
        /* the remaining parameters are paths patterns */
 
        diff_setup(0);
@@ -74,17 +80,16 @@ int main(int ac, const char **av) {
                        if (!strchr("MCRNDU", status))
                                break;
                        two_paths = score = 0;
-                       if (status == 'R' || status == 'C') {
+                       if (status == 'R' || status == 'C')
                                two_paths = 1;
-                               sscanf(cp, "%d", &score);
-                               if (line_termination) {
-                                       cp = strchr(cp,
-                                                   inter_name_termination);
-                                       if (!cp)
-                                               break;
-                               }
-                       }
 
+                       /* pick up score if exists */
+                       if (sscanf(cp, "%d", &score) != 1)
+                               score = 0;
+                       cp = strchr(cp,
+                                   inter_name_termination);
+                       if (!cp)
+                               break;
                        if (*cp++ != inter_name_termination)
                                break;
 
@@ -126,17 +131,17 @@ int main(int ac, const char **av) {
                                          new_path);
                        continue;
                }
-               if (pickaxe)
-                       diffcore_pickaxe(pickaxe);
                if (1 < ac)
                        diffcore_pathspec(av + 1);
+               if (pickaxe)
+                       diffcore_pickaxe(pickaxe, pickaxe_opts);
                diff_flush(DIFF_FORMAT_PATCH, 0);
-               printf("%s\n", sb.buf);
+               printf(garbage_flush_format, sb.buf);
        }
-       if (pickaxe)
-               diffcore_pickaxe(pickaxe);
        if (1 < ac)
                diffcore_pathspec(av + 1);
+       if (pickaxe)
+               diffcore_pickaxe(pickaxe, pickaxe_opts);
        diff_flush(DIFF_FORMAT_PATCH, 0);
        return 0;
 }