Subject: Re: jn/apply-filename-with-sp (Re: What's cooking in git.git (Aug 2010, #02; Wed, 11))

From: Johannes Sixt <[email-masked]>
Date: Fri, 13 Aug 2010 23:44:50 +0200

Am 13.08.2010 00:40, schrieb Jonathan Nieder:
> Johannes Sixt wrote:
>> Am 8/12/2010 1:35, schrieb Junio C Hamano:
>
>>> * jn/apply-filename-with-sp (2010-07-23) 4 commits
>>>   - apply: Handle traditional patches with space in filename
>>>   - t4135 (apply): use expand instead of pr for portability
>>>   - tests: Test how well "git apply" copes with weird filenames
>>>   - apply: Split quoted filename handling into new function
>>>
>>> Looked Ok.  Will merge to 'next'.
>>
>> The test cases that work with files with tabs must have a prerequisite;
>> see t3600-rm.sh.
>
> Would this work?
>
> -- 8<  --
> Subject: t4135 (apply): filenames with tabs are not usable on NTFS
>
> Move the code setting up the FUNNYNAMES prerequisite from
> v1.3.0-rc1~67 (workaround fat/ntfs deficiences for t3600-rm.sh,
> 2006-03-03) to test-lib and use it.
>
> Reported-by: Johannes Sixt<[email-masked]>
> Signed-off-by: Jonathan Nieder<[email-masked]>

No, it needs this squashed in (warning, whitespace damaged), except that 
the prerequisite EXPAND is nowhere defined - it is only a hint for you(?) 
that we need something else there because we don't have expand on Windows.

I don't know why the test with quotes fails. It must be a bug in MSYS 
bash, because the file system does not have any problems with quotes in 
file names.

diff --git a/t/t4135-apply-weird-filenames.sh 
b/t/t4135-apply-weird-filenames.sh
index 5c7165e..6730a30 100755
--- a/t/t4135-apply-weird-filenames.sh
+++ b/t/t4135-apply-weird-filenames.sh
@@ -88,10 +88,10 @@ try_filename() {
  try_filename 'plain'            'postimage.txt'
  try_filename 'with spaces'      'post image.txt'
  try_filename 'with tab'         'post	image.txt' FUNNYNAMES
-try_filename 'with backslash'   'post\image.txt'
-try_filename 'with quote'       '"postimage".txt' '' success failure success
+try_filename 'with backslash'   'post\image.txt' BSLASHPSPEC
+try_filename 'with quote'       '"postimage".txt' FUNNYNAMES success 
failure success

-test_expect_success FULLDIFF 'whitespace-damaged traditional patch' '
+test_expect_success EXPAND,FULLDIFF 'whitespace-damaged traditional patch' '
  	reset_preimage &&
  	reset_subdirs &&
  	echo postimage >b/postimage.txt &&
diff --git a/t/test-lib.sh b/t/test-lib.sh
index 1e5640b..d50e787 100644
--- a/t/test-lib.sh
+++ b/t/test-lib.sh
@@ -963,8 +963,8 @@ test -z "$NO_GETTEXT" && test_set_prereq GETTEXT
  f1='newline
  embedded'
  if
-	>"$f1" 2>/dev/null &&
-	>'tab	embedded' 2>/dev/null
+	{ >"$f1"; } 2>/dev/null &&
+	{ >'tab	embedded'; } 2>/dev/null
  then
  	test_set_prereq FUNNYNAMES
  fi

Without the braces in this check the error message is still printed. I 
didn't test whether just writing 2>/dev/null first would suppress it as well.

BTW, I would prefer to keep the test in t3600 and t4135, that it doesn't 
happen for every other test script unnecessarily.

-- Hannes