From: Torsten Bögershausen Date: Wed, 24 May 2017 04:14:44 GMT Subject: Re: [PATCH v6 6/6] clean: teach clean -d to preserve ignored paths Message-ID: <517a9182-0366-d51a-b7e5-f9085df5b4f9@web.de> In-Reply-To: <20170523100937.8752-7-sxlijin@gmail.com> > diff --git a/builtin/clean.c b/builtin/clean.c > index d861f836a..937eb17b6 100644 > --- a/builtin/clean.c > +++ b/builtin/clean.c > @@ -857,6 +857,38 @@ static void interactive_main_loop(void) > } > } > > +static void correct_untracked_entries(struct dir_struct *dir) > +{ > + int src, dst, ign; > + > + for (src = dst = ign = 0; src < dir->nr; src++) { > + /* skip paths in ignored[] that cannot be inside entries[src] */ > + while (ign < dir->ignored_nr && > + 0 <= cmp_dir_entry(&dir->entries[src], &dir->ignored[ign])) > + ign++; > + > + if (ign < dir->ignored_nr && > + check_dir_entry_contains(dir->entries[src], dir->ignored[ign])) { > + /* entries[src] contains an ignored path, so we drop it */ > + free(dir->entries[src]); > + } else { > + struct dir_entry *ent = dir->entries[src++]; > + > + /* entries[src] does not contain an ignored path, so we keep it */ > + dir->entries[dst++] = ent; > + > + /* then discard paths in entries[] contained inside entries[src] */ > + while (src < dir->nr && > + check_dir_entry_contains(ent, dir->entries[src])) > + free(dir->entries[src++]); > + > + /* compensate for the outer loop's loop control */ > + src--; > + } > + } > + dir->nr = dst; > +} > + Looking what the function does, would drop_or_keep_untracked_entries() make more sense ?