X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=ls-tree.c;h=cf4223f4bfd63f047d8f9d3bed3ee5fbeaeef3c4;hb=9cc2527cd2943c82cf448dccec564869b0a762e6;hp=d9f15e349cb833401eea38d21fb050b10f9678d4;hpb=4ae22d96fe9248dac4f26b1fc91154ba5e879799;p=git.git diff --git a/ls-tree.c b/ls-tree.c index d9f15e34..cf4223f4 100644 --- a/ls-tree.c +++ b/ls-tree.c @@ -157,9 +157,11 @@ static int show_entry(struct tree_entry_list *e, int level, char *pathbuf) int err = 0; if (e != &root_entry) { + int pathlen = strlen(pathbuf); printf("%06o %s %s ", e->mode, entry_type(e), entry_hex(e)); - write_name_quoted(pathbuf, e->name, line_termination, stdout); + write_name_quoted(pathbuf, pathlen, e->name, + line_termination, stdout); putchar(line_termination); } @@ -204,7 +206,7 @@ static int list_one(const char *path) return err; } -static int list(char **path) +static int list(const char **path) { int i; int err = 0; @@ -216,11 +218,16 @@ static int list(char **path) static const char ls_tree_usage[] = "git-ls-tree [-d] [-r] [-z] [path...]"; -int main(int argc, char **argv) +int main(int argc, const char **argv) { - static char *path0[] = { "", NULL }; - char **path; + static const char *path0[] = { "", NULL }; + const char **path; unsigned char sha1[20]; + int nongit = 0; + const char *prefix = setup_git_directory_gently(&nongit); + + if (prefix) + path0[0] = prefix; while (1 < argc && argv[1][0] == '-') { switch (argv[1][1]) { @@ -244,7 +251,11 @@ int main(int argc, char **argv) if (get_sha1(argv[1], sha1) < 0) usage(ls_tree_usage); - path = (argc == 2) ? path0 : (argv + 2); + if (argc == 2) + path = path0; + else + path = get_pathspec(prefix, argv + 2); + prepare_root(sha1); if (list(path) < 0) die("list failed");