[PATCH] diff-tree-helper: do not report unmerged path outside specification.
[gitweb.git] / show-files.c
index 0ecb2bd62106a0fdd617ee4c5ba5b50bcda8acd6..afeb6356730e404320351022c29b6335bf366007 100644 (file)
@@ -6,7 +6,6 @@
  * Copyright (C) Linus Torvalds, 2005
  */
 #include <dirent.h>
-#include <sys/param.h>
 
 #include "cache.h"
 
@@ -15,6 +14,7 @@ static int show_cached = 0;
 static int show_others = 0;
 static int show_ignored = 0;
 static int show_stage = 0;
+static int show_unmerged = 0;
 static int line_terminator = '\n';
 
 static const char **dir;
@@ -30,9 +30,9 @@ static void add_name(const char *pathname, int len)
 
        if (nr_dir == dir_alloc) {
                dir_alloc = alloc_nr(dir_alloc);
-               dir = realloc(dir, dir_alloc*sizeof(char *));
+               dir = xrealloc(dir, dir_alloc*sizeof(char *));
        }
-       name = malloc(len + 1);
+       name = xmalloc(len + 1);
        memcpy(name, pathname, len + 1);
        dir[nr_dir++] = name;
 }
@@ -112,6 +112,8 @@ static void show_files(void)
        if (show_cached | show_stage) {
                for (i = 0; i < active_nr; i++) {
                        struct cache_entry *ce = active_cache[i];
+                       if (show_unmerged && !ce_stage(ce))
+                               continue;
                        if (!show_stage)
                                printf("%s%c", ce->name, line_terminator);
                        else
@@ -170,12 +172,18 @@ int main(int argc, char **argv)
                        show_stage = 1;
                        continue;
                }
+               if (!strcmp(arg, "--unmerged")) {
+                       // There's no point in showing unmerged unless you also show the stage information
+                       show_stage = 1;
+                       show_unmerged = 1;
+                       continue;
+               }
 
                usage("show-files [-z] (--[cached|deleted|others|ignored|stage])*");
        }
 
        /* With no flags, we default to showing the cached files */
-       if (!(show_stage | show_deleted | show_others | show_ignored))
+       if (!(show_stage | show_deleted | show_others | show_ignored | show_unmerged))
                show_cached = 1;
 
        read_cache();