From: Ben Peart Date: Thu, 29 Nov 2018 14:09:46 GMT Subject: Re: [PATCH v1] teach git to support a virtual (partially populated) work directory Message-ID: <26e0b60c-c343-6ade-1e96-228c7d1b9418@gmail.com> In-Reply-To: <20181128133114.GF30222@szeder.dev> On 11/28/2018 8:31 AM, SZEDER Gábor wrote: > On Tue, Nov 27, 2018 at 02:50:57PM -0500, Ben Peart wrote: > >> diff --git a/t/t1092-virtualworkdir.sh b/t/t1092-virtualworkdir.sh >> new file mode 100755 >> index 0000000000..0cdfe9b362 >> --- /dev/null >> +++ b/t/t1092-virtualworkdir.sh >> @@ -0,0 +1,393 @@ >> +#!/bin/sh >> + >> +test_description='virtual work directory tests' >> + >> +. ./test-lib.sh >> + >> +# We need total control of the virtual work directory hook >> +sane_unset GIT_TEST_VIRTUALWORKDIR >> + >> +clean_repo () { >> + rm .git/index && >> + git -c core.virtualworkdir=false reset --hard HEAD && >> + git -c core.virtualworkdir=false clean -fd && >> + touch untracked.txt && > We would usually run '>untracked.txt' instead, sparing the external > process. > > A further nit is that a function called 'clean_repo' creates new > untracked files... Thanks, all good suggestions I've incorporated for the next iteration. > >> + touch dir1/untracked.txt && >> + touch dir2/untracked.txt >> +} >> + >> +test_expect_success 'setup' ' >> + mkdir -p .git/hooks/ && >> + cat > .gitignore <<-\EOF && > CodingGuidelines suggest no space between redirection operator and > filename. > >> + .gitignore >> + expect* >> + actual* >> + EOF >> + touch file1.txt && >> + touch file2.txt && >> + mkdir -p dir1 && >> + touch dir1/file1.txt && >> + touch dir1/file2.txt && >> + mkdir -p dir2 && >> + touch dir2/file1.txt && >> + touch dir2/file2.txt && >> + git add . && >> + git commit -m "initial" && >> + git config --local core.virtualworkdir true >> +' > >> +test_expect_success 'verify files not listed are ignored by git clean -f -x' ' >> + clean_repo && > I find it odd to clean the repo right after setting it up; but then > again, 'clean_repo' not only cleans, but also creates new files. > Perhaps rename it to 'reset_repo'? Dunno. > >> + write_script .git/hooks/virtual-work-dir <<-\EOF && >> + printf "untracked.txt\0" >> + printf "dir1/\0" >> + EOF >> + mkdir -p dir3 && >> + touch dir3/untracked.txt && >> + git clean -f -x && >> + test -f file1.txt && > Please use the 'test_path_is_file', ... > >> + test -f file2.txt && >> + test ! -f untracked.txt && > ... 'test_path_is_missing', and ... > >> + test -d dir1 && > ... 'test_path_is_dir' helpers, respectively, because they print > informative error messages on failure. > >> + test -f dir1/file1.txt && >> + test -f dir1/file2.txt && >> + test ! -f dir1/untracked.txt && >> + test -f dir2/file1.txt && >> + test -f dir2/file2.txt && >> + test -f dir2/untracked.txt && >> + test -d dir3 && >> + test -f dir3/untracked.txt >> +'