Re: [PATCH v6 6/6] clean: teach clean -d to preserve ignored paths
- From
Torsten Bögershausen <tboegi@web.de>
- Date
- May 24, 2017, 04:14 UTC
- Message-ID
- <517a9182-0366-d51a-b7e5-f9085df5b4f9@web.de>
- In-Reply-To
- <20170523100937.8752-7-sxlijin@gmail.com>
Show 40 quoted lines
> 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 ?