aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2009-04-18 14:18:29 -0700
committerJunio C Hamano <gitster@pobox.com>2009-04-18 14:18:29 -0700
commitf3924858133dff1e94c992b689fa425a6d27d4fd (patch)
treef36c23d1e0f411e29f2b265e247977cedac01e71
parenteb8a1c4aed2728e1be1c5e39fb9e5a3f4b209fc4 (diff)
parentbef3894847118ab8c8668ddc90fa238ae9e05baa (diff)
downloadgit-f3924858133dff1e94c992b689fa425a6d27d4fd.tar.gz
git-f3924858133dff1e94c992b689fa425a6d27d4fd.tar.xz
Merge branch 'js/maint-submodule-checkout' into maint
* js/maint-submodule-checkout: Fix 'git checkout <submodule>' to update the index
-rw-r--r--builtin-checkout.c3
-rwxr-xr-xt/t2013-checkout-submodule.sh42
2 files changed, 42 insertions, 3 deletions
diff --git a/builtin-checkout.c b/builtin-checkout.c
index ed0f318c0..b121fe56d 100644
--- a/builtin-checkout.c
+++ b/builtin-checkout.c
@@ -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
index 000000000..fda3f0af7
--- /dev/null
+++ b/t/t2013-checkout-submodule.sh
@@ -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