Skip to content

Commit

Permalink
parse_pathspec: support prefixing original patterns
Browse files Browse the repository at this point in the history
This makes 'original' suitable for passing to an external command
because all pathspec magic is left in place, provided that the
external command understands pathspec. The prefixing is needed because
we usually launch a subcommand at worktree's top directory and the
subcommand can no longer calculate the prefix itself.

This slightly affects the original purpose of 'original'
(i.e. reporting). We should report without prefixing. So only turn
this flag on when you know you are about to pass the result straight
away to an external command.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Nguyễn Thái Ngọc Duy authored and Junio C Hamano committed Jul 15, 2013
1 parent 8745024 commit dad2586
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 1 deletion.
12 changes: 11 additions & 1 deletion pathspec.c
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,17 @@ static unsigned prefix_pathspec(struct pathspec_item *item,
else
match = prefix_path(prefix, prefixlen, copyfrom);
*raw = item->match = match;
item->original = elt;
/*
* Prefix the pathspec (keep all magic) and assign to
* original. Useful for passing to another command.
*/
if (flags & PATHSPEC_PREFIX_ORIGIN) {
struct strbuf sb = STRBUF_INIT;
strbuf_add(&sb, elt, copyfrom - elt);
strbuf_addstr(&sb, match);
item->original = strbuf_detach(&sb, NULL);
} else
item->original = elt;
item->len = strlen(item->match);

if ((flags & PATHSPEC_STRIP_SUBMODULE_SLASH_CHEAP) &&
Expand Down
1 change: 1 addition & 0 deletions pathspec.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ struct pathspec {
* safer than _SLASH_CHEAP and also more expensive.
*/
#define PATHSPEC_STRIP_SUBMODULE_SLASH_EXPENSIVE (1<<5)
#define PATHSPEC_PREFIX_ORIGIN (1<<6)

extern int init_pathspec(struct pathspec *, const char **);
extern void parse_pathspec(struct pathspec *pathspec,
Expand Down

0 comments on commit dad2586

Please sign in to comment.