Johannes Sixt wrote: > Am 13.08.2010 00:40, schrieb Jonathan Nieder: >> Would this work? >> >> -- 8< -- >> Subject: t4135 (apply): filenames with tabs are not usable on NTFS [...] > No, it needs this squashed in Ah, makes sense. Here’s another rough patch. Patch is against jn/apply-filename-with-sp + ab/test. Not signed off because I am not sure about the licensing of expand.sed (and I would rather see some other fix instead). -- 8< -- Subject: t4135 (apply): tweaks for Windows Filenames with tabs are not usable on NTFS, so mimic the code setting up the FUNNYNAMES prerequisite from v1.3.0-rc1~67 (workaround fat/ntfs deficiences for t3600-rm.sh, 2006-03-03) and use it. The code is not shared in test-lib.sh to avoid wasting time on that check while running other tests. Backslashes is the path separator on Windows, so it cannot be used in filenames (see v1.6.3-rc0~93^2~6, t3700: Skip a test with backslashes in pathspec, 2009-03-13). Filenames starting with a quotation mark do not behave well in msys (see v1.7.0-rc0~94^2, t4030, t4031: work around bogus MSYS bash path conversion, 2010-01-01), so skip those tests on Windows. “expand” is not available in msysgit. Use a sed script by Greg Ubben to replace it. Reported-by: Johannes Sixt <j6t@xxxxxxxx> Helped-by: Johannes Sixt <j6t@xxxxxxxx> Not-signed-off-by: Jonathan Nieder <jrnieder@xxxxxxxxx> --- t/t4135-apply-weird-filenames.sh | 70 ++++++++++++++++++++++++++++++++------ 1 files changed, 59 insertions(+), 11 deletions(-) diff --git a/t/t4135-apply-weird-filenames.sh b/t/t4135-apply-weird-filenames.sh index f4c7e15..08f8fe2 100755 --- a/t/t4135-apply-weird-filenames.sh +++ b/t/t4135-apply-weird-filenames.sh @@ -10,7 +10,7 @@ test_expect_success 'setup: empty commit' ' git tag preimage ' -test_expect_success 'setup: clean-up functions' ' +test_expect_success 'setup: helper functions' ' reset_preimage() { git checkout -f preimage^0 && git read-tree -u --reset HEAD && @@ -20,6 +20,44 @@ test_expect_success 'setup: clean-up functions' ' reset_subdirs() { rm -fr a b && mkdir a b + } && + + cat <<-\EOF >expand.sed && + #! /bin/sed -f + # @(#)14apr89/31aug01 expand.sed by Greg Ubben + + / /!b + + # Change the text before a tab to + # text<MARKER>text<TAB><8 blanks><TAB> + # + s/\([^ ]*\) /\1Q& /g + + # Reduce the text between the marker and the tab to less + # than eight characters. We have to put in 8-(length MOD 8) + # blanks, and this effectively does the modulo operation. + :a + s/Q[^ ]\{8\}/Q/g + ta + + # The buffer is now: + # text<MARKER><(length MOD 8) characters><TAB><expansion><extra blanks><TAB> + # ----------------------------------------- + # Notice that the expansion is 8-(length MOD 8), so the + # underlined part is exactly nine characters. That is how + # we discard the extra blanks and the tabs. + # + s/\(Q.\{9\}\) * /\1/g + + # We have now: + # text<MARKER><(length MOD 8) characters><TAB><expansion> + # + # so we discard everything between the marker and the tab + # + s/Q[^ ]* //g + EOF + expand_tabs() { + sed -f "$TRASH_DIRECTORY/expand.sed" "$@" } ' @@ -34,17 +72,25 @@ test_expect_success 'setup: test prerequisites' ' if diff -pruN 1 2 then test_set_prereq FULLDIFF + fi && + + test_when_finished "rm -f \"tab embedded.txt\"" && + test_when_finished "rm -f '\''\"quoteembedded\".txt'\''" && + if touch -- "tab embedded.txt" '\''"quoteembedded".txt'\'' + then + test_set_prereq FUNNYNAMES fi ' try_filename() { desc=$1 postimage=$2 - exp1=${3:-success} - exp2=${4:-success} - exp3=${5:-success} + prereq=${3:-} + exp1=${4:-success} + exp2=${5:-success} + exp3=${6:-success} - test_expect_$exp1 "$desc, git-style file creation patch" " + test_expect_$exp1 $prereq "$desc, git-style file creation patch" " reset_preimage && echo postimage >'$postimage' && git add -N '$postimage' && @@ -57,7 +103,8 @@ try_filename() { test_cmp postimage.saved '$postimage' " - test_expect_$exp2 UNIDIFF "$desc, traditional patch" " + test_expect_$exp2 ${prereq:+$prereq,}UNIDIFF \ + "$desc, traditional patch" " reset_preimage && echo preimage >'$postimage.orig' && echo postimage >'$postimage' && @@ -70,7 +117,8 @@ try_filename() { test_cmp postimage.saved '$postimage' " - test_expect_$exp3 FULLDIFF "$desc, traditional file creation patch" " + test_expect_$exp3 ${prereq:+$prereq,}FULLDIFF \ + "$desc, traditional file creation patch" " reset_preimage && reset_subdirs && echo postimage >b/'$postimage' && @@ -86,16 +134,16 @@ try_filename() { try_filename 'plain' 'postimage.txt' try_filename 'with spaces' 'post image.txt' -try_filename 'with tab' 'post image.txt' -try_filename 'with backslash' 'post\image.txt' -try_filename 'with quote' '"postimage".txt' success failure success +try_filename 'with tab' 'post image.txt' FUNNYNAMES +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' ' reset_preimage && reset_subdirs && echo postimage >b/postimage.txt && ! diff -pruN a b >diff-plain.txt && - expand diff-plain.txt >damaged.diff && + expand_tabs diff-plain.txt >damaged.diff && mv postimage.txt postimage.saved && git apply -v damaged.diff && -- 1.7.2.1.544.ga752d.dirty -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html