Re: [PATCH 15/16] list-files: delete redundant cached entries
- From
Eric Sunshine <sunshine@sunshineco.com>
- Date
- Mar 10, 2015, 06:28 UTC
- Message-ID
- <CAPig+cS6F6aD_3fLfmBHx+4CxRRrAyLDM3C2HRE55a3S9mJs=A@mail.gmail.com>
- In-Reply-To
- <1425896314-10941-16-git-send-email-pclouds@gmail.com>
On Monday, March 9, 2015, Nguyễn Thái Ngọc Duy <pclouds@gmail.com> wrote:
Show 39 quoted lines
> When both --cached and one of -amdAMD is used together we may have two
> entries of the same path, e.g. " foo" and "MM foo". In this case it's
> pretty clear that "foo" must be tracked, no need to display " foo".
> The new function does that.
>
> Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
> ---
> diff --git a/builtin/list-files.c b/builtin/list-files.c
> index 74836f6..49fb820 100644
> --- a/builtin/list-files.c
> +++ b/builtin/list-files.c
> @@ -305,6 +308,34 @@ static void wt_status_populate(struct string_list *result,
> string_list_remove_duplicates(result, 0);
> }
>
> +static void delete_duplicate_cached_entries(struct string_list *result)
> +{
> + struct string_list_item *src, *dst;
> +
> + if (show_unmerged || !show_cached || !show_changed)
> + return;
> +
> + src = dst = result->items;
> + while (src + 1 < result->items + result->nr) {
> + const char *s0 = dst->string;
> + const char *s1 = src[1].string;
> +
> + if (s0[0] == ' ' && s0[1] == ' ' &&
> + !strcmp(s0 + 3, s1 + 3)) {
> + src++;
> + } else {
> + dst++;
> + src++;
> + }
> + if (src != dst)
> + *dst = *src;
> + }
> + if (src != dst)
> + *dst = *src;Do you want to take some action here (and just above) to ensure that the item being overwritten gets deleted properly rather than leaked?
> + result->nr = dst - result->items; > + > +} > +