[PATCH] Simplify building of programs
[git.git] / show-files.c
index 9c396ec..b53ab10 100644 (file)
@@ -6,7 +6,6 @@
  * Copyright (C) Linus Torvalds, 2005
  */
 #include <dirent.h>
-#include <sys/param.h>
 
 #include "cache.h"
 
@@ -14,6 +13,9 @@ static int show_deleted = 0;
 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;
 static int nr_dir;
@@ -41,7 +43,7 @@ static void add_name(const char *pathname, int len)
  * handle them at all yet. Maybe that will change some day.
  *
  * Also, we currently ignore all names starting with a dot.
- * That likely will not change. 
+ * That likely will not change.
  */
 static void read_directory(const char *path, const char *base, int baselen)
 {
@@ -105,12 +107,23 @@ static void show_files(void)
        }
        if (show_others) {
                for (i = 0; i < nr_dir; i++)
-                       printf("%s\n", dir[i]);
+                       printf("%s%c", dir[i], line_terminator);
        }
-       if (show_cached) {
+       if (show_cached | show_stage) {
                for (i = 0; i < active_nr; i++) {
                        struct cache_entry *ce = active_cache[i];
-                       printf("%s\n", ce->name);
+                       if (show_unmerged && !ce_stage(ce))
+                               continue;
+                       if (!show_stage)
+                               printf("%s%c", ce->name, line_terminator);
+                       else
+                               printf(/* "%06o %s %d %10d %s%c", */
+                                      "%06o %s %d %s%c",
+                                      ntohl(ce->ce_mode),
+                                      sha1_to_hex(ce->sha1),
+                                      ce_stage(ce),
+                                      /* ntohl(ce->ce_size), */
+                                      ce->name, line_terminator); 
                }
        }
        if (show_deleted) {
@@ -119,7 +132,7 @@ static void show_files(void)
                        struct stat st;
                        if (!stat(ce->name, &st))
                                continue;
-                       printf("%s\n", ce->name);
+                       printf("%s%c", ce->name, line_terminator);
                }
        }
        if (show_ignored) {
@@ -134,6 +147,11 @@ int main(int argc, char **argv)
        for (i = 1; i < argc; i++) {
                char *arg = argv[i];
 
+               if (!strcmp(arg, "-z")) {
+                       line_terminator = 0;
+                       continue;
+               }
+
                if (!strcmp(arg, "--cached")) {
                        show_cached = 1;
                        continue;
@@ -150,12 +168,22 @@ int main(int argc, char **argv)
                        show_ignored = 1;
                        continue;
                }
+               if (!strcmp(arg, "--stage")) {
+                       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 (--[cached|deleted|others|ignoded])*");
+               usage("show-files [-z] (--[cached|deleted|others|ignored|stage])*");
        }
 
        /* With no flags, we default to showing the cached files */
-       if (!(show_cached | show_deleted | show_others | show_ignored))
+       if (!(show_stage | show_deleted | show_others | show_ignored | show_unmerged))
                show_cached = 1;
 
        read_cache();