diff options
author | Nguyễn Thái Ngọc Duy <pclouds@gmail.com> | 2013-10-19 09:41:24 +0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2013-10-22 10:49:43 -0700 |
commit | c8556c6213cf6dca63f29f98ad9d074f6c5f8233 (patch) | |
tree | a8cfbe3faac1bf61fba78f1cfb07cf741d1559ad | |
parent | 625c3304e200f9bdc05626be1397311faa4962ba (diff) | |
download | git-c8556c6213cf6dca63f29f98ad9d074f6c5f8233.tar.gz |
Fix calling parse_pathspec with no paths nor PATHSPEC_PREFER_* flags
When parse_pathspec() is called with no paths, the behavior could be
either return no paths, or return one path that is cwd. Some commands
do the former, some the latter. parse_pathspec() itself does not make
either the default and requires the caller to specify either flag if
it may run into this situation.
I've grep'd through all parse_pathspec() call sites. Some pass
neither, but those are guaranteed never pass empty path to
parse_pathspec(). There are two call sites that may pass empty path
and are fixed with this patch.
[jc: added a test from Antoine's bug report]
Reported-by: Antoine Pelisse <apelisse@gmail.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | line-log.c | 3 | ||||
-rw-r--r-- | revision.c | 3 | ||||
-rwxr-xr-x | t/t4208-log-magic-pathspec.sh | 15 |
3 files changed, 19 insertions, 2 deletions
diff --git a/line-log.c b/line-log.c index 843a334bf0..b29f981cc7 100644 --- a/line-log.c +++ b/line-log.c @@ -747,7 +747,8 @@ void line_log_init(struct rev_info *rev, const char *prefix, struct string_list r = r->next; } paths[count] = NULL; - parse_pathspec(&rev->diffopt.pathspec, 0, 0, "", paths); + parse_pathspec(&rev->diffopt.pathspec, 0, + PATHSPEC_PREFER_FULL, "", paths); free(paths); } } diff --git a/revision.c b/revision.c index 001623a921..e04fdd0cb1 100644 --- a/revision.c +++ b/revision.c @@ -1372,7 +1372,8 @@ static void prepare_show_merge(struct rev_info *revs) i++; } free_pathspec(&revs->prune_data); - parse_pathspec(&revs->prune_data, PATHSPEC_ALL_MAGIC, 0, "", prune); + parse_pathspec(&revs->prune_data, PATHSPEC_ALL_MAGIC, + PATHSPEC_PREFER_FULL, "", prune); revs->limited = 1; } diff --git a/t/t4208-log-magic-pathspec.sh b/t/t4208-log-magic-pathspec.sh index 72300b5f24..d8f23f488e 100755 --- a/t/t4208-log-magic-pathspec.sh +++ b/t/t4208-log-magic-pathspec.sh @@ -46,4 +46,19 @@ test_expect_success 'git log HEAD -- :/' ' test_cmp expected actual ' +test_expect_success 'command line pathspec parsing for "git log"' ' + git reset --hard && + >a && + git add a && + git commit -m "add an empty a" --allow-empty && + echo 1 >a && + git commit -a -m "update a to 1" && + git checkout HEAD^ && + echo 2 >a && + git commit -a -m "update a to 2" && + test_must_fail git merge master && + git add a && + git log --merge -- a +' + test_done |