Browse Source

Merge branch 'jc/submodule-anchor-git-dir' into maint

Having a submodule whose ".git" repository is somehow corrupt
caused a few commands that recurse into submodules loop forever.

* jc/submodule-anchor-git-dir:
  submodule: avoid auto-discovery in prepare_submodule_repo_env()
maint
Junio C Hamano 8 years ago
parent
commit
4c10c31137
  1. 1
      submodule.c
  2. 35
      t/t5526-fetch-submodules.sh

1
submodule.c

@ -1160,4 +1160,5 @@ void prepare_submodule_repo_env(struct argv_array *out) @@ -1160,4 +1160,5 @@ void prepare_submodule_repo_env(struct argv_array *out)
if (strcmp(*var, CONFIG_DATA_ENVIRONMENT))
argv_array_push(out, *var);
}
argv_array_push(out, "GIT_DIR=.git");
}

35
t/t5526-fetch-submodules.sh

@ -485,4 +485,39 @@ test_expect_success 'fetching submodules respects parallel settings' ' @@ -485,4 +485,39 @@ test_expect_success 'fetching submodules respects parallel settings' '
)
'

test_expect_success 'fetching submodule into a broken repository' '
# Prepare src and src/sub nested in it
git init src &&
(
cd src &&
git init sub &&
git -C sub commit --allow-empty -m "initial in sub" &&
git submodule add -- ./sub sub &&
git commit -m "initial in top"
) &&

# Clone the old-fashoned way
git clone src dst &&
git -C dst clone ../src/sub sub &&

# Make sure that old-fashoned layout is still supported
git -C dst status &&

# "diff" would find no change
git -C dst diff --exit-code &&

# Recursive-fetch works fine
git -C dst fetch --recurse-submodules &&

# Break the receiving submodule
rm -f dst/sub/.git/HEAD &&

# NOTE: without the fix the following tests will recurse forever!
# They should terminate with an error.

test_must_fail git -C dst status &&
test_must_fail git -C dst diff &&
test_must_fail git -C dst fetch --recurse-submodules
'

test_done

Loading…
Cancel
Save