[PATCH v2 0/9] About the trailing slashes
- From
Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
- Date
- Jan 24, 2014, 13:40 UTC
- Message-ID
- <1390570836-20394-1-git-send-email-pclouds@gmail.com>
- In-Reply-To
- <1390483326-32258-1-git-send-email-pclouds@gmail.com>
So this is the reroll that makes
git diff HEAD submodule git diff HEAD submodule/
and
git diff HEAD HEAD^ submodule git diff HEAD HEAD^ submodule/
behave the same way. The main patches are 04/09 and 09/09. The rest is just refactoring and cleaning up.
While looking at this, I found a funny behavior of fill_directory.
$ git init
$ mkdir b
$ >b/c
$ >b/d
$ git status b
Untracked files:
b/
$ git status b/
Untracked files:
b/c b/dNotice how the trailing slash produces different untracked listing. This is because of common_prefix_len(). In the "b" case, common_prefix_len() returns empty prefix, so read_directory reads top directory, traverses through, reaches "b" and eventually calls treat_directory() on it, which results in "b/" in the output.
In the "b/" case, common_prefix_len() found the prefix "b", so read_directory() starts at "b" instead of b's parent. treat_directory() is never called on "b" itself, which results in "b/c" and "b/d".
I'm tempted to make it consistent, favoring "b/" output. But that involves extra lstat, or reordering the complex read_directory() code. This is probably very unusual case to pay attention to anyway.
Nguyễn Thái Ngọc Duy (9):
Convert some match_pathspec_depth() to ce_path_match()
Convert some match_pathspec_depth() to dir_path_match()
Rename match_pathspec_depth() to match_pathspec()
dir.c: prepare match_pathspec_item for taking more flags
match_pathspec: match pathspec "foo/" against directory "foo"
Pass directory indicator to match_pathspec_item()
clean: replace match_pathspec() with dir_path_match()
clean: use cache_name_is_other()
tree-walk.c: ignore trailing slash on submodule in
tree_entry_interesting()builtin/add.c | 3 +-- builtin/checkout.c | 3 +-- builtin/clean.c | 24 +++--------------------- builtin/commit.c | 2 +- builtin/grep.c | 6 ++---- builtin/ls-files.c | 9 ++++++--- builtin/ls-tree.c | 2 +- builtin/rm.c | 2 +- builtin/update-index.c | 3 ++- cache.h | 2 -- diff-lib.c | 5 +++-- dir.c | 40 ++++++++++++++++++++++++++-------------- dir.h | 24 +++++++++++++++++++++--- pathspec.c | 2 +- preload-index.c | 3 ++- read-cache.c | 8 +------- rerere.c | 4 ++-- resolve-undo.c | 2 +- revision.c | 3 ++- t/t4010-diff-pathspec.sh | 23 +++++++++++++++++++++++ t/t6131-pathspec-icase.sh | 6 +++--- tree-walk.c | 2 +- wt-status.c | 6 +++--- 23 files changed, 107 insertions(+), 77 deletions(-)
-- 1.8.5.2.240.g8478abd