X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=show-files.c;h=afeb6356730e404320351022c29b6335bf366007;hb=d15aa4309cadae5c998c9ce1c45b7a104f3d80f5;hp=0ecb2bd62106a0fdd617ee4c5ba5b50bcda8acd6;hpb=aee461985f52857fa04999b2a988986dd8c84aba;p=git.git diff --git a/show-files.c b/show-files.c index 0ecb2bd6..afeb6356 100644 --- a/show-files.c +++ b/show-files.c @@ -6,7 +6,6 @@ * Copyright (C) Linus Torvalds, 2005 */ #include -#include #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();