Samuel Lijin <sxlijin@xxxxxxxxx> writes: > There is an implicit assumption that a directory containing only > untracked and ignored paths should itself be considered untracked. This > makes sense in use cases where we're asking if a directory should be > added to the git database, but not when we're asking if a directory can > be safely removed from the working tree; as a result, clean -d would > assume that an "untracked" directory containing ignored paths could be > deleted, even though doing so would also remove the ignored paths. > > To get around this, we teach clean -d to collect ignored paths and skip > an untracked directory if it contained an ignored path, instead just > removing the untracked contents thereof. To achieve this, cmd_clean() > has to collect all untracked contents of untracked directories, in > addition to all ignored paths, to determine which untracked dirs must be > skipped (because they contain ignored paths) and which ones should *not* > be skipped. > > For this purpose, correct_untracked_entries() is introduced to prune a > given dir_struct of untracked entries containing ignored paths and those > untracked entries encompassed by the untracked entries which are not > pruned away. > > A memory leak is also fixed in cmd_clean(). > > This also fixes the known breakage in t7300, since clean -d now skips > untracked directories containing ignored paths. Nicely explained. Will replace the previous 6/6 and my squash on top that were queued on 'pu'. Thanks.