From: Sebastien Marie Subject: got ignore some .{cvs,git}ignore files To: gameoftrees@openbsd.org Date: Tue, 23 Jun 2020 08:59:23 +0200 Hi, I have a buggy behaviour (or an unexpected feature) with .cvsignore files. I slightly modified the regress for test_status_cvsignore to expose it. In the (modified) regress test, the files in worktree are (for what I want to expose): /.cvsignore /foo /epsilon/foo The .cvsignore contains "foo" as ignored. "/foo" and "/epsilon/foo" are unversionned. if `got status' is fine, running `got status epsilon' is wrong ("/epsilon/foo" is showed as unversionned instead being ignored). For what I see from the behaviour, in the first command, "/" directory is walked, so "/.cvsignore" is read (and "foo" pattern considered for ignorelist), whereas in the second command, the "/" directory is not walked so "/.cvsignore" isn't considered, resulting "/epsilon/foo" to be reported as unversionned. Regress run: $ cd regress/cmdline && make status ./status.sh test_status_basic ok test_status_subdir_no_mods ok test_status_subdir_no_mods2 ok test_status_obstructed ok test_status_shows_local_mods_after_update ok test_status_unversioned_subdirs ok test_status_ignores_symlink ok test_status_shows_no_mods_after_complete_merge ok test_status_shows_conflict ok test_status_empty_dir ok test_status_empty_dir_unversioned_file ok test_status_many_paths ok test_status_cvsignore --- /tmp/got-test-status_cvsignore-t9lqQcrr/stdout.expected Tue Jun 23 08:42:30 2020 +++ /tmp/got-test-status_cvsignore-t9lqQcrr/stdout Tue Jun 23 08:42:30 2020 @@ -1,4 +1,5 @@ ? .cvsignore ? epsilon/.cvsignore ? epsilon/boo +? epsilon/foo ? foop test failed; leaving test data in /tmp/got-test-status_cvsignore-t9lqQcrr test_status_gitignore ok Please note that it could be also exposed with got repository itself: $ cd got $ cat .gitignore **/obj $ got st M regress/cmdline/status.sh $ got st libexec/got-fetch-pack ? libexec/got-fetch-pack/obj/error.d ? libexec/got-fetch-pack/obj/error.o ? libexec/got-fetch-pack/obj/got-fetch-pack ? libexec/got-fetch-pack/obj/got-fetch-pack.d ? libexec/got-fetch-pack/obj/got-fetch-pack.o ? libexec/got-fetch-pack/obj/inflate.d ? libexec/got-fetch-pack/obj/inflate.o ? libexec/got-fetch-pack/obj/object_parse.d ? libexec/got-fetch-pack/obj/object_parse.o ? libexec/got-fetch-pack/obj/path.d ? libexec/got-fetch-pack/obj/path.o ? libexec/got-fetch-pack/obj/privsep.d ? libexec/got-fetch-pack/obj/privsep.o ? libexec/got-fetch-pack/obj/sha1.d ? libexec/got-fetch-pack/obj/sha1.o the "obj" directory is shown whereas present in .gitignore Thanks. -- Sebastien Marie diff c34ec41754978e41240e8aedd4e5d3a9e6362635 /home/semarie/repos/openbsd/got blob - 5abbce9475bb8bd2f1cbb3e33113883173026f03 file + regress/cmdline/status.sh --- regress/cmdline/status.sh +++ regress/cmdline/status.sh @@ -496,6 +496,7 @@ function test_status_cvsignore { echo "unversioned file" > $testroot/wt/foo echo "unversioned file" > $testroot/wt/foop + echo "unversioned file" > $testroot/wt/epsilon/foo echo "unversioned file" > $testroot/wt/epsilon/bar echo "unversioned file" > $testroot/wt/epsilon/boo echo "unversioned file" > $testroot/wt/epsilon/moo