Re: Unexpected "clean -Xd" behavior
Thank you very much for looking at this.
2012/1/19 "Nguyen Thai Ngoc Duy" <pclouds@gmail.com>:
Show 26 quoted lines
> 2012/1/19 Jonathan Nieder <jrnieder@gmail.com>:
>> Pete Harlan wrote:
>>
>>> When a directory contains nothing but an ignored subdirectory, that
>>> subdirectory does not get removed by "git clean -Xdf".
>>>
>>> For example, in a new directory:
>>>
>>> # git init
>>> Initialized empty Git repository in /tmp/foo/.git/
>>> # echo a/ >.gitignore
>>> # git add .gitignore
>>> # git commit -m "Initial commit"
>>> [master (root-commit) c3af24c] Initial commit
>>> Â 1 files changed, 1 insertions(+), 0 deletions(-)
>>> Â create mode 100644 .gitignore
>>> # mkdir -p foo/a
>>> # touch foo/a/junk.o
>>> # git status
>>> # On branch master
>>> nothing to commit (working directory clean)
>>> # git clean -Xdn  # <--- DOES NOT MENTION foo/a
>
> -X is to remove ignored files _only_ (DIR_SHOW_IGNORED flag). And
> "foo" is not ignored according to .gitignore, so it cuts short there
> and never gets to "foo/a". -x works.
But the presence of a tracked file in foo makes it not cut short there, so the logic seems a bit off. (If we're interested in removing ignored files only, then the ignored files (not a tracked file) should trigger us looking into foo. I don't know Git internals but I'm guessing it's not quite that simple.)
Show 10 quoted lines
> May be intentional, may be not
> (we hit a corner case). I don't know. Commit message b991625 might
> help:
>
> dir.c: Omit non-excluded directories with dir->show_ignored
>
> This makes "git-ls-files --others --directory --ignored" behave
> as documented and consequently also fixes "git-clean -d -X".
> Previously, git-clean would remove non-excluded directories
> even when using the -X option.
It can (and does) leave foo behind (because it's not ignored), but it would conform better to the -X documentation if the ignored files were removed.
BTW the above commit doesn't affect the behavior in this example.
If a fix isn't desirable then as Jonathan said updating the documentation makes sense. (And those of us using it as a poor man's "make clean" can just fix our Makefiles instead...)
Thanks,
--Pete