Re: [PATCH v7 5/8] fetch: protect branches checked out in all worktrees

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Dec 1, 2021 at 5:16 PM Anders Kaseorg <andersk@xxxxxxx> wrote:
> Refuse to fetch into the currently checked out branch of any working
> tree, not just the current one.
> [...]
> Signed-off-by: Anders Kaseorg <andersk@xxxxxxx>
> ---
> diff --git a/builtin/fetch.c b/builtin/fetch.c
> @@ -868,16 +868,17 @@ static int update_local_ref(struct ref *ref,
> +       if (!update_head_ok &&
> +           (wt = find_shared_symref(worktrees, "HEAD", ref->name)) &&
> +           !wt->is_bare && !is_null_oid(&ref->old_oid)) {
>                 /*
>                  * If this is the head, and it's not okay to update
>                  * the head, and the old value of the head isn't empty...
>                  */
>                 format_display(display, '!', _("[rejected]"),
> -                              _("can't fetch in current branch"),
> +                              wt->is_current ?
> +                                      _("can't fetch in current branch") :
> +                                      _("checked out in another worktree"),
>                                remote, pretty_ref, summary_width);

Minor observation: The "checked out in another worktree" message would
be much more helpful if it mentioned the worktree itself...

> @@ -1385,19 +1388,18 @@ static int prune_refs(struct refspec *rs, struct ref *ref_map,
> -               if (ref_map->peer_ref && !strcmp(current_branch->refname,
> -                                       ref_map->peer_ref->name))
> -                       die(_("refusing to fetch into current branch %s "
> -                             "of non-bare repository"),
> -                           current_branch->refname);
> +               if (ref_map->peer_ref &&
> +                   (wt = find_shared_symref(worktrees, "HEAD",
> +                                            ref_map->peer_ref->name)) &&
> +                   !wt->is_bare)
> +                       die(_("refusing to fetch into branch '%s' "
> +                             "checked out at '%s'"),
> +                           ref_map->peer_ref->name, wt->path);

... much like this message has been updated to mention the worktree.

However, I didn't look to see how much work it would be to improve the
earlier message; such an improvement could always be done atop this
series later on by someone.



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux