Patch all the hardcoded occurrences of '.gitmodules' and make the file
configurable via an environment variable.

This is only for demonstration purposes, the final patch to the test
suite could just use a fixed path for the custom gitmodules file,
matching the path passed in the wrapper script via the
'core.submodulesfile' option.

The rationale would be that testing with a custom gitmodules file covers
also the case of the default gitmodules file path.

Execute 'test-custom-gitmodules-file.sh' to check that the test pass
with either the default anda custom gitmodules file.
---
 test-custom-gitmodules-file.sh | 75 ++++++++++++++++++++++++++++++++++
 1 file changed, 75 insertions(+)
 create mode 100755 test-custom-gitmodules-file.sh

diff --git a/test-custom-gitmodules-file.sh b/test-custom-gitmodules-file.sh
new file mode 100755
index 000000000..d59b1e40d
--- /dev/null
+++ b/test-custom-gitmodules-file.sh
@@ -0,0 +1,75 @@
+#!/bin/sh
+#
+# This is a test script to demonstrate that the changes about
+# 'core.submodulesfile' do not cause regressions and even work as intended
+# when a custom gitmodules file is specified O_O.
+#
+# The script patches the hardcoded '.gitmodules' occurrences to be overridden
+# by an environment variable.
+#
+# Note that 'core.submodulesfile' affects no only the 'submodule' git command
+# but many other git commands that directly or or *indirecly* use the
+# submodules_file variable.
+#
+# In particular all the commands that use unpack_trees(), like 'am', 'clone',
+# etc. are affected.
+#
+# Anyways this is not a problem because the option is passed to all git
+# commands in the "./bin-wrappers/git" wrapper script.
+
+set -e
+
+if [ ! -e .patched_test_suite ];
+then
+
+  echo "Patching the test suite..."
+
+  find t/ -type f -name t7506-status-submodule.sh -exec sed -i \
+    -e "s/^cat \(.*\)\\\EOF/cat \1EOF/g" \
+    -e "s/\(.*\)\.gitmodules$/\1\${GITMODULES_FILE:-.gitmodules}/g" \
+    -e "s/^AA \.gitmodules$/AA \${GITMODULES_FILE:-.gitmodules}/g" \
+    {} \;
+
+  find t/ -type f -name t7508-status.sh -exec sed -i \
+    -e "s/touch \(.*\)\.gitmodules/touch 
\1\\\"\${GITMODULES_FILE:-.gitmodules}\\\"/g" \
+    -e "s/\t\.gitmodules$/\t\${GITMODULES_FILE:-.gitmodules}/g" \
+    {} \;
+
+  find t/ -type f -exec sed -i \
+    -e "s/git \(.*\)config \(.*\)-f ..\/\.gitmodules/git \1config \2-f 
..\/\'\"\${GITMODULES_FILE:-.gitmodules}\"\'/g" \
+    -e "s/git \(.*\)config \(.*\)-f \.gitmodules/git \1config \2-f 
\"\${GITMODULES_FILE:-.gitmodules}\"/g" \
+    -e "s/git \(.*\)config \(.*\)--file=\.gitmodules/git \1config 
\2--file=\"\${GITMODULES_FILE:-.gitmodules}\"/g" \
+    -e "s/git add \(.*\)\.gitmodules\(.*\)/git add 
\1\"\${GITMODULES_FILE:-.gitmodules}\"\2/g" \
+    -e "s/test_cmp expect \.gitmodules/test_cmp expect 
\"\${GITMODULES_FILE:-.gitmodules}\"/g" \
+    -e "s/cp .gitmodules pristine-\.gitmodules/cp 
\"\${GITMODULES_FILE:-.gitmodules}\" pristine-gitmodules/g" \
+    -e "s/cp pristine-\.gitmodules .gitmodules/cp pristine-gitmodules 
\"\${GITMODULES_FILE:-.gitmodules}\"/g" \
+    -e "s/cp \.gitmodules \.gitmodules.bak/cp 
\'\"\${GITMODULES_FILE:-.gitmodules}\"\' .gitmodules.bak/g" \
+    -e "s/test-tool submodule-config/test-tool submodule-config 
--submodules_file \'\"\${GITMODULES_FILE:-.gitmodules}\"\'/g" \
+    -e 
"s/\$sha1:\.gitmodules/\$sha1:\'\"\${GITMODULES_FILE:-.gitmodules}\"\'/g" \
+    -e "s/cat >\.gitmodules/cat >\"\${GITMODULES_FILE:-.gitmodules}\"/g" \
+    -e "s/sed \(.*\)<\.gitmodules/sed 
\1<\"\${GITMODULES_FILE:-.gitmodules}\"/g" \
+    -e "s/rm \(.*\)\.gitmodules/rm \1\"\${GITMODULES_FILE:-.gitmodules}\"/g" \
+    -e "s/echo \(.*\)\.gitmodules/echo 
\1\\\"\${GITMODULES_FILE:-.gitmodules}\\\"/g" \
+    -e 
"s/\t\(.*\)\.gitmodules$/\t\1\'\"\${GITMODULES_FILE:-.gitmodules}\"\'/g" \
+    -e 
"s/\t\(.*\)\.gitmodules:/\t\1\'\"\${GITMODULES_FILE:-.gitmodules}\"\':/g" \
+    -e "s/\t\(.*\)\.gitmodules 
\&\&$/\t\1\'\"\${GITMODULES_FILE:-.gitmodules}\"\' \&\&/g" \
+    -e "s/\t\(.*\)\.gitmodules) 
\&\&$/\t\1\'\"\${GITMODULES_FILE:-.gitmodules}\"\') \&\&/g" \
+    -e "s/repo\/\.gitmodules /repo\/\'\"\${GITMODULES_FILE:-.gitmodules}\"\' 
/g" \
+    -e "s/Submodule sm2 a5a65c9..280969a:/Submodule sm2 a5a65c9..\'\$(git -C 
sm2 rev-list -1 HEAD | cut -c1-7)\':/g" \
+    -e "s/diff --git a\/sm2\/\.gitmodules /diff --git 
a\/sm2\/\'\"\${GITMODULES_FILE:-.gitmodules}\"\' /g" \
+    -e "s/^M\([ ]\{1,2\}\)\.gitmodules$/M\1\${GITMODULES_FILE:-.gitmodules}/g" 
\
+    -e "s/^D\([ ]\{1,2\}\)\.gitmodules$/D\1\${GITMODULES_FILE:-.gitmodules}/g" 
\
+    {} \;
+
+    make clean
+    make
+    touch .patched_test_suite
+fi
+
+echo "Running the tests with the default gitmodules file..."
+make test
+
+echo "Running the tests with a custom gitmodules file..."
+GITMODULES_FILE=.gitmodules_custom make test
+
+echo "Done."
-- 
2.17.0

Reply via email to