diff --git a/Makefile b/Makefile index 4b028a5f..0fd4be0c 100644 --- a/Makefile +++ b/Makefile @@ -46,6 +46,7 @@ help: .PHONY: test test: + @echo uname: '$(shell uname)' prove $(prove) $(test) test-all: test docker-tests diff --git a/lib/git-subrepo b/lib/git-subrepo index 546f061a..2776790e 100755 --- a/lib/git-subrepo +++ b/lib/git-subrepo @@ -574,7 +574,7 @@ subrepo:pull() { fi else o "Merge in changes from $refs_subrepo_fetch" - FAIL=false RUN git merge "$refs_subrepo_fetch" + FAIL=false RUN git merge --ff "$refs_subrepo_fetch" if ! OK; then say "The \"git merge\" command failed:" say diff --git a/test/00-git-config.t b/test/00-git-config.t new file mode 100644 index 00000000..23b85593 --- /dev/null +++ b/test/00-git-config.t @@ -0,0 +1,57 @@ +#!/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 --global pull.ff only + git config --global merge.ff only + 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/branch-rev-list-one-path.t b/test/branch-rev-list-one-path.t index afa49050..575ea8f1 100644 --- a/test/branch-rev-list-one-path.t +++ b/test/branch-rev-list-one-path.t @@ -19,7 +19,7 @@ subrepo-clone-bar-into-foo add-new-files bar/file3 add-new-files bar/file4 add-new-files bar/file5 - git merge master + git merge --ff master ) >& /dev/null || die test-exists "$OWNER/foo/bar/file1" "$OWNER/foo/bar/file2" "$OWNER/foo/bar/file3" "$OWNER/foo/bar/file4" "$OWNER/foo/bar/file5" diff --git a/test/branch-rev-list.t b/test/branch-rev-list.t index 243412cd..1f39df42 100644 --- a/test/branch-rev-list.t +++ b/test/branch-rev-list.t @@ -22,7 +22,7 @@ subrepo-clone-bar-into-foo add-new-files bar/file3 add-new-files bar/file4 add-new-files bar/file5 - git merge master + git merge --ff master ) >& /dev/null || die test-exists "$OWNER/foo/bar/file1" "$OWNER/foo/bar/file2" "$OWNER/foo/bar/file3" "$OWNER/foo/bar/file4" "$OWNER/foo/bar/file5" diff --git a/test/setup b/test/setup index a05f7ff6..7275c3ee 100644 --- a/test/setup +++ b/test/setup @@ -11,6 +11,13 @@ source "$PWD"/.rc # 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' ':' )