1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
|
From: =?UTF-8?q?Samo=20Poga=C4=8Dnik?= <samo_pogacnik@t-2.net>
Date: Sat, 19 Oct 2024 19:07:43 +0200
Forwarded: https://github.com/ingydotnet/git-subrepo/pull/639
Subject: Define project-wide GIT setup for all tests
Local git config 'autocrlf' has been removed.
Run tests with fixed locale.
Disabling system/global git configs and setting default project-wide GIT
configuration for the duration of running tests. Temporary GIT
configuration is set inside git-subrepo project-top-dir.
Also, initialize own git repo, if project isn't a git clone and ensure
that the project is not in a GIT detached HEAD state.
---
Makefile | 2 +-
test/00-git-config.t | 55 ++++++++++++++++++++++++++++++++++++++++++++
test/setup | 17 +++++++-------
3 files changed, 65 insertions(+), 9 deletions(-)
create mode 100644 test/00-git-config.t
diff --git a/Makefile b/Makefile
index 8dd567f..7521bc6 100644
--- a/Makefile
+++ b/Makefile
@@ -110,7 +110,7 @@ compgen: force
$(SHARE)/zsh-completion/_git-subrepo
clean:
- rm -fr tmp test/tmp
+ rm -fr tmp test/tmp .gitconfig
define docker-make-test
docker run --rm \
diff --git a/test/00-git-config.t b/test/00-git-config.t
new file mode 100644
index 0000000..b121c26
--- /dev/null
+++ b/test/00-git-config.t
@@ -0,0 +1,55 @@
+#!/usr/bin/env bash
+
+set -e
+
+source test/setup
+
+use Test::More
+
+note "Define project-wide GIT setup for all tests"
+
+# Get git-subrepo project top directory
+PROJ_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )/.." && pwd )
+
+if [ -z "${PROJ_DIR}" ] || [ "${HOME}" != "${PROJ_DIR}" ]; then
+ is "${HOME}" "${PROJ_DIR}" \
+ "To define project-wide GIT setup for all tests: HOME '${HOME}' should equal PROJ_DIR '${PROJ_DIR}'"
+else
+
+ # Real GIT configuration for tests is set here:
+ rm -f "${PROJ_DIR}/.gitconfig"
+ git config --global user.email "you@example.com"
+ git config --global user.name "Your Name"
+ git config --global init.defaultBranch "master"
+ git config --global --add safe.directory "${PROJ_DIR}"
+ git config --global --add safe.directory "${PROJ_DIR}/.git"
+ git config --list
+
+ test-exists "${PROJ_DIR}/.gitconfig"
+
+ # Running tests depends on the whole project being git initialized.
+ # So, git initialize the project, if necessary.
+ if [ ! -d "${PROJ_DIR}/.git" ]; then
+ cd "${PROJ_DIR}"
+ git init .
+ git add .
+ git commit -a -m"Initial commit"
+ cd -
+ fi
+
+ test-exists "${PROJ_DIR}/.git/"
+
+ # Running tests depends on the whole project not being in a GIT detached HEAD state.
+ if ! git symbolic-ref --short --quiet HEAD &> /dev/null; then
+ git checkout -b test
+ fi
+
+ ok "$(
+ git symbolic-ref --short --quiet HEAD &> /dev/null
+ )" "Whole project is not in a GIT detached HEAD state"
+
+fi
+
+done_testing
+
+teardown
diff --git a/test/setup b/test/setup
index a05f7ff..ab945f3 100644
--- a/test/setup
+++ b/test/setup
@@ -1,18 +1,21 @@
#!/usr/bin/env bash
-# Set this locally for Windows:
-git config core.autocrlf input
-
set -e
-# Set the GIT_SUBREPO_ROOT for testing.
-source "$PWD"/.rc
+export LC_ALL=C.UTF-8
# Get the location of this script
SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
+# Disable any GIT configuration set outside this 'git-subrepo' project.
+# Real GIT configuration for tests is set through the first test
+# (00-git-config.t).
+export XDG_CONFIG_HOME=$PWD
+export HOME=$PWD
+export GIT_CONFIG_NOSYSTEM=1
+
BASHLIB=$(
- find "$PWD"/ -type d -name bin -o -type d -name lib | tr '\n' ':'
+ find "$PWD"/ -type d -name bin -o -type d -name lib | grep -v "\/\.pc\/" | tr '\n' ':'
)
export BASHLIB
@@ -46,7 +49,6 @@ clone-foo-and-bar() {
git clone "$UPSTREAM/foo" "$OWNER/foo"
(
cd "$OWNER/foo"
- git config core.autocrlf input
git config user.name "FooUser"
git config user.email "foo@foo"
)
@@ -54,7 +56,6 @@ clone-foo-and-bar() {
git clone "$UPSTREAM/bar" "$OWNER/bar"
(
cd "$OWNER/bar"
- git config core.autocrlf input
git config user.name "BarUser"
git config user.email "bar@bar"
)
|