diff options
author | Johannes Schindelin <johannes.schindelin@gmx.de> | 2009-02-07 14:43:03 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2009-02-07 12:49:50 -0800 |
commit | f3670a5749d704fe1edee4201f9b23adbf0bf967 (patch) | |
tree | f18cd7bcb5e39a69ec4baedf496a544bdf109f19 /builtin-ls-files.c | |
parent | 621f1b4bcf40f1469fc59202248df35619e33c82 (diff) | |
download | git-f3670a5749d704fe1edee4201f9b23adbf0bf967.tar.gz git-f3670a5749d704fe1edee4201f9b23adbf0bf967.tar.xz |
Let ls-files strip trailing slashes in submodules' paths
Tab completion makes it easy to add a trailing slash to a submodule path.
As it is completely clear what the user actually wanted to say, be nice
and strip that slash at the end.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin-ls-files.c')
-rw-r--r-- | builtin-ls-files.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/builtin-ls-files.c b/builtin-ls-files.c index 343403129..9dec282fb 100644 --- a/builtin-ls-files.c +++ b/builtin-ls-files.c @@ -262,6 +262,21 @@ static const char *verify_pathspec(const char *prefix) return max ? xmemdupz(prev, max) : NULL; } +static void strip_trailing_slash_from_submodules(void) +{ + const char **p; + + for (p = pathspec; *p != NULL; p++) { + int len = strlen(*p), pos; + + if (len < 1 || (*p)[len - 1] != '/') + continue; + pos = cache_name_pos(*p, len - 1); + if (pos >= 0 && S_ISGITLINK(active_cache[pos]->ce_mode)) + *p = xstrndup(*p, len - 1); + } +} + /* * Read the tree specified with --with-tree option * (typically, HEAD) into stage #1 and then @@ -510,6 +525,11 @@ int cmd_ls_files(int argc, const char **argv, const char *prefix) pathspec = get_pathspec(prefix, argv + i); + /* be nice with submodule patsh ending in a slash */ + read_cache(); + if (pathspec) + strip_trailing_slash_from_submodules(); + /* Verify that the pathspec matches the prefix */ if (pathspec) prefix = verify_pathspec(prefix); @@ -533,7 +553,6 @@ int cmd_ls_files(int argc, const char **argv, const char *prefix) show_killed | show_modified)) show_cached = 1; - read_cache(); if (prefix) prune_cache(prefix); if (with_tree) { |