On Tue, Apr 17, 2018 at 5:48 AM, Junio C Hamano <gitster@xxxxxxxxx> wrote: > SZEDER Gábor <szeder.dev@xxxxxxxxx> writes: > >> Do any more new tests need FUNNYNAMES* prereq? > > Hmph, all of these look like they involve some funnynames ;-) Well, I can' create a directory with a '|' in its name on FAT32 (on Linux), so this needs FUNNYNAMES prereq, too. >> +test_expect_failure 'complete files - escaped characters on cmdline' ' >> + test_when_finished "rm -rf \"New|Dir\"" && >> + mkdir "New|Dir" && >> + >"New|Dir/New&File.c" && >> + >> + test_completion "git test-path-comp N" \ >> + "New|Dir" && # Bash will turn this into "New\|Dir/" >> + test_completion "git test-path-comp New\\|D" \ >> + "New|Dir" && >> + test_completion "git test-path-comp New\\|Dir/N" \ >> + "New|Dir/New&File.c" && # Bash will turn this into >> + # "New\|Dir/New\&File.c " >> + test_completion "git test-path-comp New\\|Dir/New\\&F" \ >> + "New|Dir/New&File.c" >> +' >> + >> +test_expect_failure 'complete files - quoted characters on cmdline' ' >> + test_when_finished "rm -r \"New(Dir\"" && > > This does not use -rf unlike the previous one? Noted. The lack of '-f' is leftover from early versions of these tests, when I had a hard time getting the quoting-escaping right. Without the '-f' 'rm' errored out when I messed up, and the error message helpfully contained the path it wasn't able to delete. >> + mkdir "New(Dir" && >> + >"New(Dir/New)File.c" && >> + >> + test_completion "git test-path-comp \"New(D" "New(Dir" && >> + test_completion "git test-path-comp \"New(Dir/New)F" \ >> + "New(Dir/New)File.c" >> +' > > OK. > >> +test_expect_failure 'complete files - UTF-8 in ls-files output' ' >> + test_when_finished "rm -r árvíztűrő" && >> + mkdir árvíztűrő && >> + >"árvíztűrő/Сайн яваарай" && >> + >> + test_completion "git test-path-comp á" "árvíztűrő" && >> + test_completion "git test-path-comp árvíztűrő/С" \ >> + "árvíztűrő/Сайн яваарай" >> +' >> + >> +if test_have_prereq !MINGW && >> + mkdir 'New\Dir' 2>/dev/null && >> + touch 'New\Dir/New"File.c' 2>/dev/null >> +then >> + test_set_prereq FUNNYNAMES_BS_DQ >> +else >> + say "Your filesystem does not allow \\ and \" in filenames." >> + rm -rf 'New\Dir' >> +fi >> +test_expect_failure FUNNYNAMES_BS_DQ \ >> + 'complete files - C-style escapes in ls-files output' ' >> + test_when_finished "rm -r \"New\\\\Dir\"" && >> + >> + test_completion "git test-path-comp N" "New\\Dir" && >> + test_completion "git test-path-comp New\\\\D" "New\\Dir" && >> + test_completion "git test-path-comp New\\\\Dir/N" \ >> + "New\\Dir/New\"File.c" && >> + test_completion "git test-path-comp New\\\\Dir/New\\\"F" \ >> + "New\\Dir/New\"File.c" >> +' >> + >> +if test_have_prereq !MINGW && >> + mkdir $'New\034Special\035Dir' 2>/dev/null && >> + touch $'New\034Special\035Dir/New\036Special\037File' 2>/dev/null > > The $'...' quote is bash-ism, but this is about testing bash > completion, so as long as we make sure non-bash shells won't touch > this part of the test, it is OK. > > Do we want to test a more common case of a filename that is two > words with SP in between, i.e. > > $ >'hello world' && git add hel<TAB> > > or is it known to work just fine without quoting/escaping (because > the funny we care about is output from ls-files and SP is not special > in its one-item-at-a-time-on-a-line output) and not worth checking? This particular case already works, even without this patch series. The problems start when you want to complete the filename after a space, e.g. 'hello\ w<TAB', as discussed in detail in patch 5. Actually, this was the first thing I tried to write a test for, but it didn't work out: inside the 'test_completion' helper function the space acts as separator, and the completion script then sees 'hello\' and 'w' as two separate words.