[PATCH] ssh-push.c: Fix handling of ssh://host/path URLs
[git.git] / diff-cache.c
index e95fd70..13baaa3 100644 (file)
@@ -11,6 +11,7 @@ static const char *pickaxe = NULL;
 static int pickaxe_opts = 0;
 static int diff_break_opt = -1;
 static const char *orderfile = NULL;
+static const char *diff_filter = NULL;
 
 /* A file entry went away or appeared */
 static void show_file(const char *prefix, struct cache_entry *ce, unsigned char *sha1, unsigned int mode)
@@ -167,13 +168,14 @@ int main(int argc, const char **argv)
        void *tree;
        unsigned long size;
        int ret;
+       int allow_options = 1;
        int i;
 
        read_cache();
        for (i = 1; i < argc; i++) {
                const char *arg = argv[i];
 
-               if (*arg != '-') {
+               if (!allow_options || *arg != '-') {
                        if (tree_name) {
                                pathspec = argv + i;
                                break;
@@ -182,6 +184,10 @@ int main(int argc, const char **argv)
                        continue;
                }
                        
+               if (!strcmp(arg, "--")) {
+                       allow_options = 0;
+                       continue;
+               }
                if (!strcmp(arg, "-r")) {
                        /* We accept the -r flag just to look like git-diff-tree */
                        continue;
@@ -219,6 +225,10 @@ int main(int argc, const char **argv)
                        pickaxe = arg + 2;
                        continue;
                }
+               if (!strncmp(arg, "--diff-filter=", 14)) {
+                       diff_filter = arg + 14;
+                       continue;
+               }
                if (!strncmp(arg, "-O", 2)) {
                        orderfile = arg + 2;
                        continue;
@@ -258,7 +268,7 @@ int main(int argc, const char **argv)
                     detect_rename, diff_score_opt,
                     pickaxe, pickaxe_opts,
                     diff_break_opt,
-                    orderfile);
-       diff_flush(diff_output_format, 1);
+                    orderfile, diff_filter);
+       diff_flush(diff_output_format);
        return ret;
 }