Re: [PATCH v2 17/21] Convert refresh_index to take struct pathspec

2013-01-11 Thread Nguyen Thai Ngoc Duy
On Fri, Jan 11, 2013 at 06:21:11PM +0700, Nguyễn Thái Ngọc Duy wrote:
> - for (i = 0; i < specs; i++) {
> + for (i = 0; i < pathspec->nr; i++) {
>   if (!seen[i])
> - die(_("pathspec '%s' did not match any files"), 
> pathspec[i]);
> + die(_("pathspec '%s' did not match any files"), 
> pathspec->raw[i]);
>   }

This needs the following fixup on top. I don't want to send another
reroll just a couple hours after I flooded git@vger. I did not plan to
work on the series this soon but somehow another problem got me back
here.

-- 8< --
diff --git a/builtin/add.c b/builtin/add.c
index 1235eb9..e1bcdb9 100644
--- a/builtin/add.c
+++ b/builtin/add.c
@@ -159,7 +159,8 @@ static void refresh(int verbose, const struct pathspec 
*pathspec)
  pathspec, seen, _("Unstaged changes after refreshing the 
index:"));
for (i = 0; i < pathspec->nr; i++) {
if (!seen[i])
-   die(_("pathspec '%s' did not match any files"), 
pathspec->raw[i]);
+   die(_("pathspec '%s' did not match any files"),
+   pathspec->items[i].match);
}
 free(seen);
 }
-- 8< --

and the baaad reason: pathspec->items[] are sorted because of 86e4ca6
(tree_entry_interesting(): fix depth limit with overlapping pathspecs
- 2010-12-15). But raw[] are _not_. So raw[i] does not correspond to
item[i].

Now seen[] array returned from match_pathspec() has the order
corresponding to raw[]. On the other hand match_pathspec_depth()
returns seen[] corresponds to items[]. This patch converts
match_pathspec() to match_pathspec_depth() so we need to use the
correct pathspec array.

I'll put these explanation in the next reroll. And don't worry about
this subtle difference. My next email kills match_pathspec() for good.
--
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


[PATCH v2 17/21] Convert refresh_index to take struct pathspec

2013-01-11 Thread Nguyễn Thái Ngọc Duy

Signed-off-by: Nguyễn Thái Ngọc Duy 
---
 builtin/add.c| 14 ++
 builtin/commit.c |  2 +-
 builtin/rm.c |  2 +-
 cache.h  |  2 +-
 read-cache.c |  5 +++--
 5 files changed, 12 insertions(+), 13 deletions(-)

diff --git a/builtin/add.c b/builtin/add.c
index c8592fe..4e2b603 100644
--- a/builtin/add.c
+++ b/builtin/add.c
@@ -153,19 +153,17 @@ static char *prune_directory(struct dir_struct *dir, 
const char **pathspec, int
return seen;
 }
 
-static void refresh(int verbose, const char **pathspec)
+static void refresh(int verbose, const struct pathspec *pathspec)
 {
char *seen;
-   int i, specs;
+   int i;
 
-   for (specs = 0; pathspec[specs];  specs++)
-   /* nothing */;
-   seen = xcalloc(specs, 1);
+   seen = xcalloc(pathspec->nr, 1);
refresh_index(&the_index, verbose ? REFRESH_IN_PORCELAIN : 
REFRESH_QUIET,
  pathspec, seen, _("Unstaged changes after refreshing the 
index:"));
-   for (i = 0; i < specs; i++) {
+   for (i = 0; i < pathspec->nr; i++) {
if (!seen[i])
-   die(_("pathspec '%s' did not match any files"), 
pathspec[i]);
+   die(_("pathspec '%s' did not match any files"), 
pathspec->raw[i]);
}
 free(seen);
 }
@@ -410,7 +408,7 @@ int cmd_add(int argc, const char **argv, const char *prefix)
}
 
if (refresh_only) {
-   refresh(verbose, pathspec.raw);
+   refresh(verbose, &pathspec);
goto finish;
}
 
diff --git a/builtin/commit.c b/builtin/commit.c
index 8777c19..2fe6054 100644
--- a/builtin/commit.c
+++ b/builtin/commit.c
@@ -1208,7 +1208,7 @@ int cmd_status(int argc, const char **argv, const char 
*prefix)
   prefix, argv);
 
read_cache_preload(&s.pathspec);
-   refresh_index(&the_index, REFRESH_QUIET|REFRESH_UNMERGED, 
s.pathspec.raw, NULL, NULL);
+   refresh_index(&the_index, REFRESH_QUIET|REFRESH_UNMERGED, &s.pathspec, 
NULL, NULL);
 
fd = hold_locked_index(&index_lock, 0);
if (0 <= fd)
diff --git a/builtin/rm.c b/builtin/rm.c
index d719d95..b5edde8 100644
--- a/builtin/rm.c
+++ b/builtin/rm.c
@@ -250,7 +250,7 @@ int cmd_rm(int argc, const char **argv, const char *prefix)
}
 
parse_pathspec(&pathspec, PATHSPEC_FROMTOP, 0, prefix, argv);
-   refresh_index(&the_index, REFRESH_QUIET, pathspec.raw, NULL, NULL);
+   refresh_index(&the_index, REFRESH_QUIET, &pathspec, NULL, NULL);
 
seen = NULL;
seen = xcalloc(pathspec.nr, 1);
diff --git a/cache.h b/cache.h
index 40eaa04..32298ba 100644
--- a/cache.h
+++ b/cache.h
@@ -515,7 +515,7 @@ extern void fill_stat_cache_info(struct cache_entry *ce, 
struct stat *st);
 #define REFRESH_IGNORE_MISSING 0x0008  /* ignore non-existent */
 #define REFRESH_IGNORE_SUBMODULES  0x0010  /* ignore submodules */
 #define REFRESH_IN_PORCELAIN   0x0020  /* user friendly output, not "needs 
update" */
-extern int refresh_index(struct index_state *, unsigned int flags, const char 
**pathspec, char *seen, const char *header_msg);
+extern int refresh_index(struct index_state *, unsigned int flags, const 
struct pathspec *pathspec, char *seen, const char *header_msg);
 
 struct lock_file {
struct lock_file *next;
diff --git a/read-cache.c b/read-cache.c
index fda78bc..dec2ba6 100644
--- a/read-cache.c
+++ b/read-cache.c
@@ -1093,7 +1093,8 @@ static void show_file(const char * fmt, const char * 
name, int in_porcelain,
printf(fmt, name);
 }
 
-int refresh_index(struct index_state *istate, unsigned int flags, const char 
**pathspec,
+int refresh_index(struct index_state *istate, unsigned int flags,
+ const struct pathspec *pathspec,
  char *seen, const char *header_msg)
 {
int i;
@@ -1128,7 +1129,7 @@ int refresh_index(struct index_state *istate, unsigned 
int flags, const char **p
continue;
 
if (pathspec &&
-   !match_pathspec(pathspec, ce->name, ce_namelen(ce), 0, 
seen))
+   !match_pathspec_depth(pathspec, ce->name, ce_namelen(ce), 
0, seen))
filtered = 1;
 
if (ce_stage(ce)) {
-- 
1.8.0.rc2.23.g1fb49df

--
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