BUG: PATHSPEC_PREFER_CWD requires arguments

2 messages, 2 authors, 2016-06-15 · open the first message on its own page

BUG: PATHSPEC_PREFER_CWD requires arguments

From: Antoine Pelisse <hidden>
Date: 2016-06-15 22:59:02

Hello,

I ran into the following bug today: "BUG: PATHSPEC_PREFER_CWD requires
arguments". It's not that bad because I'm trying to run `git log
--merge` on an already resolved conflict. Still, I don't think I
should hit a "BUG:" :-)

Here is a script to reproduce:
git init .
a
git add a
git commit -m"create a"
git branch other
echo "1" >a
git commit -m"add 1" a
git checkout other
echo "2" >a
git commit -m"add 2" a
git merge master
git add a
git log --merge -- a
# Fails with "fatal: BUG: PATHSPEC_PREFER_CWD requires arguments"

Here is what GDB gives me when I break on die():
Breakpoint 1, die (err=0x57e3a8 "BUG: PATHSPEC_PREFER_CWD requires
arguments") at usage.c:97
97              if (die_is_recursing()) {
(gdb) bt
#0  die (err=0x57e3a8 "BUG: PATHSPEC_PREFER_CWD requires arguments")
at usage.c:97
#1  0x00000000004ea58a in parse_pathspec (pathspec=0x7fffffffc288,
magic_mask=31, flags=0, prefix=0x580dad "", argv=0x0) at
pathspec.c:377
#2  0x00000000005097b4 in prepare_show_merge (revs=0x7fffffffc240) at
revision.c:1375
#3  0x000000000050c32e in setup_revisions (argc=2,
argv=0x7fffffffcb08, revs=0x7fffffffc240, opt=0x7fffffffc220) at
revision.c:2147
#4  0x0000000000446efc in cmd_log_init_finish (argc=4,
argv=0x7fffffffcb08, prefix=0x0, rev=0x7fffffffc240,
opt=0x7fffffffc220)
    at builtin/log.c:147
#5  0x000000000044716a in cmd_log_init (argc=4, argv=0x7fffffffcb08,
prefix=0x0, rev=0x7fffffffc240, opt=0x7fffffffc220) at
builtin/log.c:203
#6  0x0000000000448349 in cmd_log (argc=4, argv=0x7fffffffcb08,
prefix=0x0) at builtin/log.c:635
#7  0x000000000040584a in run_builtin (p=0x7bdb30, argc=4,
argv=0x7fffffffcb08) at git.c:314
#8  0x00000000004059d5 in handle_internal_command (argc=4,
argv=0x7fffffffcb08) at git.c:478
#9  0x0000000000405b88 in main (argc=4, av=0x7fffffffcb08) at git.c:575

And here is what bisect found:
commit 9a0872744315da67db3c81eb9270751e31fcc8f5
Author: Nguyễn Thái Ngọc Duy [off-list ref]
Date:   Sun Jul 14 15:35:59 2013 +0700

    remove init_pathspec() in favor of parse_pathspec()

    While at there, move free_pathspec() to pathspec.c

    Signed-off-by: Nguyễn Thái Ngọc Duy [off-list ref]
    Signed-off-by: Junio C Hamano [off-list ref]

Thanks,
Antoine

[PATCH] Fix calling parse_pathspec with no paths nor PATHSPEC_PREFER_* flags

From: Nguyễn Thái Ngọc Duy <hidden>
Date: 2016-06-15 22:59:02

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.

Reported-by: Antoine Pelisse <redacted>
Signed-off-by: Nguyễn Thái Ngọc Duy <redacted>
---
 line-log.c | 3 ++-
 revision.c | 3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/line-log.c b/line-log.c
index 8b6e497..717638b 100644
--- a/line-log.c
+++ b/line-log.c
@@ -760,7 +760,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 0173e01..dd994e9 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;
 }
 
-- 
1.8.2.83.gc99314b
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help