From 5ca6b7bb47bddacac61e837d7692e1e8f5b24188 Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Wed, 23 Mar 2016 11:55:00 +0100 Subject: [PATCH 1/4] config --show-origin: report paths with forward slashes On Windows, the backslash is the native directory separator, but all supported Windows versions also accept the forward slash in most circumstances. Our tests expect forward slashes. Relative paths are generated by Git using forward slashes. So let's try to be consistent and use forward slashes in the $HOME part of the paths reported by `git config --show-origin`, too. Signed-off-by: Johannes Schindelin Signed-off-by: Junio C Hamano --- compat/mingw.h | 6 ++++++ path.c | 3 +++ 2 files changed, 9 insertions(+) diff --git a/compat/mingw.h b/compat/mingw.h index 8c5bf5076..c00869463 100644 --- a/compat/mingw.h +++ b/compat/mingw.h @@ -396,6 +396,12 @@ static inline char *mingw_find_last_dir_sep(const char *path) ret = (char *)path; return ret; } +static inline void convert_slashes(char *path) +{ + for (; *path; path++) + if (*path == '\\') + *path = '/'; +} #define find_last_dir_sep mingw_find_last_dir_sep int mingw_offset_1st_component(const char *path); #define offset_1st_component mingw_offset_1st_component diff --git a/path.c b/path.c index 8b7e16812..969b494d7 100644 --- a/path.c +++ b/path.c @@ -584,6 +584,9 @@ char *expand_user_path(const char *path) if (!home) goto return_null; strbuf_addstr(&user_path, home); +#ifdef GIT_WINDOWS_NATIVE + convert_slashes(user_path.buf); +#endif } else { struct passwd *pw = getpw_str(username, username_len); if (!pw) From 2ec20212c56575dc5e6875f36fa68b6b4a8edd70 Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Wed, 23 Mar 2016 11:55:07 +0100 Subject: [PATCH 2/4] t1300-repo-config: make it resilient to being run via 'sh -x' One way to diagnose broken regression tests is to run the test script using 'sh -x t... -i -v' to find out which call actually demonstrates the symptom. Hence it is pretty counterproductive if the test script behaves differently when being run via 'sh -x', in particular when using test_cmp or test_i18ncmp on redirected stderr. A more recent way "sh tXXXX -i -v -x" has the same issue. So let's use test_i18ngrep (as suggested by Jonathan Nieder) instead of test_cmp/test_i18ncmp to verify that stderr looks as expected. Signed-off-by: Johannes Schindelin Signed-off-by: Junio C Hamano --- t/t1300-repo-config.sh | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/t/t1300-repo-config.sh b/t/t1300-repo-config.sh index 8867ce10f..dca27a388 100755 --- a/t/t1300-repo-config.sh +++ b/t/t1300-repo-config.sh @@ -699,17 +699,13 @@ test_expect_success 'invalid unit' ' echo 1auto >expect && git config aninvalid.unit >actual && test_cmp expect actual && - cat >expect <<-\EOF && - fatal: bad numeric config value '\''1auto'\'' for '\''aninvalid.unit'\'' in file .git/config: invalid unit - EOF test_must_fail git config --int --get aninvalid.unit 2>actual && - test_i18ncmp expect actual + test_i18ngrep "bad numeric config value .1auto. for .aninvalid.unit. in file .git/config: invalid unit" actual ' test_expect_success 'invalid stdin config' ' - echo "fatal: bad config line 1 in standard input " >expect && echo "[broken" | test_must_fail git config --list --file - >output 2>&1 && - test_cmp expect output + test_i18ngrep "bad config line 1 in standard input" output ' cat > expect << EOF From 45bf32971c067a542024a1b5f47fc26237baa713 Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Wed, 23 Mar 2016 11:55:13 +0100 Subject: [PATCH 3/4] t1300: fix the new --show-origin tests on Windows On Windows, we have that funny situation where the test script can refer to POSIX paths because it runs in a shell that uses a POSIX emulation layer ("MSYS2 runtime"). Yet, git.exe does *not* understand POSIX paths at all but only pure Windows paths. So let's just convert the POSIX paths to Windows paths before passing them on to Git, using `pwd` (which is already modified on Windows to output Windows paths). While fixing the new tests on Windows, we also have to exclude the tests that want to write a file with a name that is illegal on Windows (unfortunately, there is more than one test trying to make use of that file). Signed-off-by: Johannes Schindelin Signed-off-by: Junio C Hamano --- t/t1300-repo-config.sh | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/t/t1300-repo-config.sh b/t/t1300-repo-config.sh index dca27a388..6767da87c 100755 --- a/t/t1300-repo-config.sh +++ b/t/t1300-repo-config.sh @@ -1205,6 +1205,9 @@ test_expect_success POSIXPERM,PERL 'preserves existing permissions' ' "die q(badrename) if ((stat(q(.git/config)))[2] & 07777) != 0600" ' +! test_have_prereq MINGW || +HOME="$(pwd)" # convert to Windows path + test_expect_success 'set up --show-origin tests' ' INCLUDE_DIR="$HOME/include" && mkdir -p "$INCLUDE_DIR" && @@ -1304,7 +1307,7 @@ test_expect_success 'set up custom config file' ' EOF ' -test_expect_success '--show-origin escape special file name characters' ' +test_expect_success !MINGW '--show-origin escape special file name characters' ' cat >expect <<-\EOF && file:"file\" (dq) and spaces.conf" user.custom=true EOF @@ -1333,7 +1336,7 @@ test_expect_success '--show-origin stdin with file include' ' test_cmp expect output ' -test_expect_success '--show-origin blob' ' +test_expect_success !MINGW '--show-origin blob' ' cat >expect <<-\EOF && blob:a9d9f9e555b5c6f07cbe09d3f06fe3df11e09c08 user.custom=true EOF @@ -1342,7 +1345,7 @@ test_expect_success '--show-origin blob' ' test_cmp expect output ' -test_expect_success '--show-origin blob ref' ' +test_expect_success !MINGW '--show-origin blob ref' ' cat >expect <<-\EOF && blob:"master:file\" (dq) and spaces.conf" user.custom=true EOF From 8257d3b458f0b64516f4aee66a9b2b2df30744e1 Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Wed, 23 Mar 2016 11:55:20 +0100 Subject: [PATCH 4/4] mingw: skip some tests in t9115 due to file name issues MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit These two tests wanted to write file names which are incompatible with Windows' file naming rules (even if they pass using Cygwin due to Cygwin's magic path mangling). While at it, skip the same tests also on MacOSX/HFS, as pointed out by Torsten Bögershausen. Signed-off-by: Johannes Schindelin Signed-off-by: Torsten Bögershausen Reviewed-by: Jonathan Nieder Signed-off-by: Junio C Hamano --- t/t9115-git-svn-dcommit-funky-renames.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/t/t9115-git-svn-dcommit-funky-renames.sh b/t/t9115-git-svn-dcommit-funky-renames.sh index 0990f8d23..a87d3d3fc 100755 --- a/t/t9115-git-svn-dcommit-funky-renames.sh +++ b/t/t9115-git-svn-dcommit-funky-renames.sh @@ -93,7 +93,7 @@ test_expect_success 'git svn rebase works inside a fresh-cloned repository' ' # > to special UNICODE characters in the range 0xf000 to 0xf0ff (the # > "Private use area") when creating or accessing files. prepare_a_utf8_locale -test_expect_success UTF8 'svn.pathnameencoding=cp932 new file on dcommit' ' +test_expect_success UTF8,!MINGW,!UTF8_NFD_TO_NFC 'svn.pathnameencoding=cp932 new file on dcommit' ' LC_ALL=$a_utf8_locale && export LC_ALL && neq=$(printf "\201\202") && @@ -105,7 +105,7 @@ test_expect_success UTF8 'svn.pathnameencoding=cp932 new file on dcommit' ' ' # See the comment on the above test for setting of LC_ALL. -test_expect_success 'svn.pathnameencoding=cp932 rename on dcommit' ' +test_expect_success !MINGW,!UTF8_NFD_TO_NFC 'svn.pathnameencoding=cp932 rename on dcommit' ' LC_ALL=$a_utf8_locale && export LC_ALL && inf=$(printf "\201\207") &&