Re: git-ls-tree: add "-t" option to always show the tree entries
- From
Linus Torvalds <torvalds@osdl.org>
- Date
- Dec 2, 2005, 23:11 UTC
- Message-ID
- <Pine.LNX.4.64.0512021459380.3099@g5.osdl.org>
- In-Reply-To
- <loom.20051202T231110-711@post.gmane.org>
On Fri, 2 Dec 2005, Junio C Hamano wrote:
> > This brings up another issue. When git-ls-tree works from subdirectory, > do we want to see repository-relative paths, or cwd relative paths? > Currently we do the latter.
Umm, I'd not say that we do the latter, but yeah, that's broken. We actually do _filter_ based on the cwd, but then we show the whole path, which makes no sense.
Something like this?
Linus
---
diff --git a/ls-tree.c b/ls-tree.c index dae377d..09dc34d 100644 --- a/ls-tree.c +++ b/ls-tree.c @@ -14,6 +14,7 @@ static int line_termination = '\n'; #define LS_SHOW_TREES 4 #define LS_NAME_ONLY 8 static int ls_options = 0; +static int skip_chars = 0; const char **pathspec; static const char ls_tree_usage[] = @@ -65,6 +66,12 @@ static int show_tree(unsigned char *sha1 else if (ls_options & LS_TREE_ONLY) return 0; + /* Normalize to cwd */ + if (baselen < skip_chars) + return retval; + base += skip_chars; + baselen -= skip_chars; + 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); @@ -116,6 +123,9 @@ int main(int argc, const char **argv) if (get_sha1(argv[1], sha1) < 0) usage(ls_tree_usage); + + if (prefix) + skip_chars = strlen(prefix); pathspec = get_pathspec(prefix, argv + 2); buf = read_object_with_reference(sha1, "tree", &size, NULL); if (!buf)