refresh-index: fix bitmask assignment
authorJunio C Hamano <gitster@pobox.com>
Sun, 20 Jul 2008 06:25:00 +0000 (23:25 -0700)
committerJunio C Hamano <gitster@pobox.com>
Sun, 20 Jul 2008 07:00:46 +0000 (00:00 -0700)
5fdeacb (Teach update-index about --ignore-submodules, 2008-05-14) added a
new refresh option flag but did not assign a unique bit for it correctly,
and broke "update-index --ignore-missing".

This fixes it.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
cache.h
t/t2103-update-index-ignore-missing.sh [new file with mode: 0755]

diff --git a/cache.h b/cache.h
index ca382d4..9735b66 100644 (file)
--- a/cache.h
+++ b/cache.h
@@ -396,7 +396,7 @@ extern void fill_stat_cache_info(struct cache_entry *ce, struct stat *st);
 #define REFRESH_UNMERGED       0x0002  /* allow unmerged */
 #define REFRESH_QUIET          0x0004  /* be quiet about it */
 #define REFRESH_IGNORE_MISSING 0x0008  /* ignore non-existent */
 #define REFRESH_UNMERGED       0x0002  /* allow unmerged */
 #define REFRESH_QUIET          0x0004  /* be quiet about it */
 #define REFRESH_IGNORE_MISSING 0x0008  /* ignore non-existent */
-#define REFRESH_IGNORE_SUBMODULES      0x0008  /* ignore submodules */
+#define REFRESH_IGNORE_SUBMODULES      0x0010  /* ignore submodules */
 extern int refresh_index(struct index_state *, unsigned int flags, const char **pathspec, char *seen);
 
 struct lock_file {
 extern int refresh_index(struct index_state *, unsigned int flags, const char **pathspec, char *seen);
 
 struct lock_file {
diff --git a/t/t2103-update-index-ignore-missing.sh b/t/t2103-update-index-ignore-missing.sh
new file mode 100755 (executable)
index 0000000..332694e
--- /dev/null
@@ -0,0 +1,89 @@
+#!/bin/sh
+
+test_description='update-index with options'
+
+. ./test-lib.sh
+
+test_expect_success basics '
+       >one &&
+       >two &&
+       >three &&
+
+       # need --add when adding
+       test_must_fail git update-index one &&
+       test -z "$(git ls-files)" &&
+       git update-index --add one &&
+       test zone = "z$(git ls-files)" &&
+
+       # update-index is atomic
+       echo 1 >one &&
+       test_must_fail git update-index one two &&
+       echo "M one" >expect &&
+       git diff-files --name-status >actual &&
+       test_cmp expect actual &&
+
+       git update-index --add one two three &&
+       for i in one three two; do echo $i; done >expect &&
+       git ls-files >actual &&
+       test_cmp expect actual &&
+
+       test_tick &&
+       (
+               test_create_repo xyzzy &&
+               cd xyzzy &&
+               >file &&
+               git add file
+               git commit -m "sub initial"
+       ) &&
+       git add xyzzy &&
+
+       test_tick &&
+       git commit -m initial &&
+       git tag initial
+'
+
+test_expect_success '--ignore-missing --refresh' '
+       git reset --hard initial &&
+       echo 2 >one &&
+       test_must_fail git update-index --refresh &&
+       echo 1 >one &&
+       git update-index --refresh &&
+       rm -f two &&
+       test_must_fail git update-index --refresh &&
+       git update-index --ignore-missing --refresh
+
+'
+
+test_expect_success '--unmerged --refresh' '
+       git reset --hard initial &&
+       info=$(git ls-files -s one | sed -e "s/ 0       / 1     /") &&
+       git rm --cached one &&
+       echo "$info" | git update-index --index-info &&
+       test_must_fail git update-index --refresh &&
+       git update-index --unmerged --refresh &&
+       echo 2 >two &&
+       test_must_fail git update-index --unmerged --refresh >actual &&
+       grep two actual &&
+       ! grep one actual &&
+       ! grep three actual
+'
+
+test_expect_success '--ignore-submodules --refresh (1)' '
+       git reset --hard initial &&
+       rm -f two &&
+       test_must_fail git update-index --ignore-submodules --refresh
+'
+
+test_expect_success '--ignore-submodules --refresh (2)' '
+       git reset --hard initial &&
+       test_tick &&
+       (
+               cd xyzzy &&
+               git commit -m "sub second" --allow-empty
+       ) &&
+       test_must_fail git update-index --refresh &&
+       test_must_fail git update-index --ignore-missing --refresh &&
+       git update-index --ignore-submodules --refresh
+'
+
+test_done