update-index --again: take optional pathspecs
authorJunio C Hamano <junkio@cox.net>
Sat, 6 May 2006 06:09:05 +0000 (23:09 -0700)
committerJunio C Hamano <junkio@cox.net>
Sat, 6 May 2006 06:11:29 +0000 (23:11 -0700)
When pathspecs are given, update-index --again further limits
the set of paths to be updated to those that match them.

Signed-off-by: Junio C Hamano <junkio@cox.net>
t/t2101-update-index-reupdate.sh
update-index.c

index 5c505c6..77aed8d 100755 (executable)
@@ -69,5 +69,14 @@ test_expect_success 'update-index --update from subdir' \
 100644 0f1ae1422c2bf43f117d3dbd715c988a9ed2103f 0      file2
 EOF'
 
-test_done
+test_expect_success 'update-index --update with pathspec' \
+       'echo very happy >file2 &&
+       cat file2 >dir1/file3 &&
+       git-update-index --again dir1/ &&
+       git-ls-files -s >current &&
+       cmp current - <<\EOF
+100644 594fb5bb1759d90998e2bf2a38261ae8e243c760 0      dir1/file3
+100644 0f1ae1422c2bf43f117d3dbd715c988a9ed2103f 0      file2
+EOF'
 
+test_done
index 5496d68..184b252 100644 (file)
@@ -610,6 +610,7 @@ static int do_reupdate(int ac, const char **av,
         */
        int pos;
        int has_head = 1;
+       char **pathspec = get_pathspec(prefix, av + 1);
 
        if (read_ref(git_path("HEAD"), head_sha1))
                /* If there is no HEAD, that means it is an initial
@@ -621,7 +622,8 @@ static int do_reupdate(int ac, const char **av,
                struct cache_entry *ce = active_cache[pos];
                struct cache_entry *old = NULL;
                int save_nr;
-               if (ce_stage(ce))
+
+               if (ce_stage(ce) || !ce_path_match(ce, pathspec))
                        continue;
                if (has_head)
                        old = read_one_ent(NULL, head_sha1,