Merge branch 'js/maint-submodule-checkout'
authorJunio C Hamano <gitster@pobox.com>
Wed, 8 Apr 2009 05:33:02 +0000 (22:33 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 8 Apr 2009 05:33:02 +0000 (22:33 -0700)
* js/maint-submodule-checkout:
Fix 'git checkout <submodule>' to update the index

builtin-checkout.c
t/t2013-checkout-submodule.sh [new file with mode: 0755]
index 33d1fecb6251b4922666255817addeb9f672fa29..2e4fe1a4533b852fa6bfda81dd594c6cf6fb5b8f 100644 (file)
@@ -53,9 +53,6 @@ static int update_some(const unsigned char *sha1, const char *base, int baselen,
        int len;
        struct cache_entry *ce;
 
-       if (S_ISGITLINK(mode))
-               return 0;
-
        if (S_ISDIR(mode))
                return READ_TREE_RECURSIVE;
 
diff --git a/t/t2013-checkout-submodule.sh b/t/t2013-checkout-submodule.sh
new file mode 100755 (executable)
index 0000000..fda3f0a
--- /dev/null
@@ -0,0 +1,42 @@
+#!/bin/sh
+
+test_description='checkout can handle submodules'
+
+. ./test-lib.sh
+
+test_expect_success 'setup' '
+       mkdir submodule &&
+       (cd submodule &&
+        git init &&
+        test_commit first) &&
+       git add submodule &&
+       test_tick &&
+       git commit -m superproject &&
+       (cd submodule &&
+        test_commit second) &&
+       git add submodule &&
+       test_tick &&
+       git commit -m updated.superproject
+'
+
+test_expect_success '"reset <submodule>" updates the index' '
+       git update-index --refresh &&
+       git diff-files --quiet &&
+       git diff-index --quiet --cached HEAD &&
+       test_must_fail git reset HEAD^ submodule &&
+       test_must_fail git diff-files --quiet &&
+       git reset submodule &&
+       git diff-files --quiet
+'
+
+test_expect_success '"checkout <submodule>" updates the index only' '
+       git update-index --refresh &&
+       git diff-files --quiet &&
+       git diff-index --quiet --cached HEAD &&
+       git checkout HEAD^ submodule &&
+       test_must_fail git diff-files --quiet &&
+       git checkout HEAD submodule &&
+       git diff-files --quiet
+'
+
+test_done