[PATCH 12/45] parse_pathspec: support prefixing original patterns

2013-06-09 Thread Nguyễn Thái Ngọc Duy
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 pclo...@gmail.com
---
 pathspec.c | 12 +++-
 pathspec.h |  1 +
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/pathspec.c b/pathspec.c
index 9aaec36..ba0a41d 100644
--- a/pathspec.c
+++ b/pathspec.c
@@ -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 put 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) 
diff --git a/pathspec.h b/pathspec.h
index b631514..3ca6636 100644
--- a/pathspec.h
+++ b/pathspec.h
@@ -43,6 +43,7 @@ struct pathspec {
  * safer than _SLASH_CHEAP and also more expensive.
  */
 #define PATHSPEC_STRIP_SUBMODULE_SLASH_EXPENSIVE (15)
+#define PATHSPEC_PREFIX_ORIGIN (16)
 
 extern int init_pathspec(struct pathspec *, const char **);
 extern void parse_pathspec(struct pathspec *pathspec,
-- 
1.8.2.83.gc99314b

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 12/45] parse_pathspec: support prefixing original patterns

2013-06-09 Thread Eric Sunshine
On Sun, Jun 9, 2013 at 2:25 AM, Nguyễn Thái Ngọc Duy pclo...@gmail.com wrote:
 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 pclo...@gmail.com
 ---
 diff --git a/pathspec.c b/pathspec.c
 index 9aaec36..ba0a41d 100644
 --- a/pathspec.c
 +++ b/pathspec.c
 @@ -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 put to

s/put/assign/ perhaps?

 +* 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) 
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html