X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=ls-tree.c;h=dae377d99585d4e6a176f85f0101d8ae29668f2f;hb=e4e79a217576d24ef4d73b620766f62b155bcd98;hp=a2a5eb0514ad6a0af942f1089f35fe9c45dd82ff;hpb=0f8f45cb4a7e664b396f73c25891da46b953b8b8;p=git.git diff --git a/ls-tree.c b/ls-tree.c index a2a5eb05..dae377d9 100644 --- a/ls-tree.c +++ b/ls-tree.c @@ -12,11 +12,12 @@ static int line_termination = '\n'; #define LS_RECURSIVE 1 #define LS_TREE_ONLY 2 #define LS_SHOW_TREES 4 +#define LS_NAME_ONLY 8 static int ls_options = 0; const char **pathspec; static const char ls_tree_usage[] = - "git-ls-tree [-d] [-r] [-t] [-z] [path...]"; + "git-ls-tree [-d] [-r] [-t] [-z] [--name-only] [--name-status] [path...]"; static int show_recursive(const char *base, int baselen, const char *pathname) { @@ -61,8 +62,11 @@ static int show_tree(unsigned char *sha1, const char *base, int baselen, const c } type = "tree"; } + else if (ls_options & LS_TREE_ONLY) + return 0; - printf("%06o %s %s\t", mode, type, sha1_to_hex(sha1)); + if (!(ls_options & LS_NAME_ONLY)) + printf("%06o %s %s\t", mode, type, sha1_to_hex(sha1)); write_name_quoted(base, baselen, pathname, line_termination, stdout); putchar(line_termination); return retval; @@ -90,11 +94,22 @@ int main(int argc, const char **argv) case 't': ls_options |= LS_SHOW_TREES; break; + case '-': + if (!strcmp(argv[1]+2, "name-only") || + !strcmp(argv[1]+2, "name-status")) { + ls_options |= LS_NAME_ONLY; + break; + } + /* otherwise fallthru */ default: usage(ls_tree_usage); } argc--; argv++; } + /* -d -r should imply -t, but -d by itself should not have to. */ + if ( (LS_TREE_ONLY|LS_RECURSIVE) == + ((LS_TREE_ONLY|LS_RECURSIVE) & ls_options)) + ls_options |= LS_SHOW_TREES; if (argc < 2) usage(ls_tree_usage);