X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=show-files.c;h=afeb6356730e404320351022c29b6335bf366007;hb=d15aa4309cadae5c998c9ce1c45b7a104f3d80f5;hp=9f62e9700164e07bbbfdb7af7d1d3ba8f74ef7c7;hpb=31cedfb95e7dda1e43aead0107d32f90f85f2160;p=git.git diff --git a/show-files.c b/show-files.c index 9f62e970..afeb6356 100644 --- a/show-files.c +++ b/show-files.c @@ -6,7 +6,6 @@ * Copyright (C) Linus Torvalds, 2005 */ #include -#include #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; @@ -28,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; } @@ -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|ignored])*"); + 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();