git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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

From
Eric Sunshine <sunshine@sunshineco.com>
Date
Dec 2, 2021, 02:51 UTC
Message-ID
<CAPig+cQudoq3QrF29W8p511s1rPtgZajtk1Rjm+N2SgoLY-Ltw@mail.gmail.com>
In-Reply-To
<20211201221547.1796213-6-andersk@mit.edu>
On Wed, Dec 1, 2021 at 5:16 PM Anders Kaseorg <andersk@mit.edu> wrote:
Show 20 quoted lines
> Refuse to fetch into the currently checked out branch of any working
> tree, not just the current one.
> [...]
> Signed-off-by: Anders Kaseorg <andersk@mit.edu>
> ---
> 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...

Show 13 quoted lines
> @@ -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.

Previous: Anders KaseorgNext: Anders Kaseorg
Message 13 of 20 in “protect branches checked out in all worktrees”
  1. 0/8 protect branches checked out in all worktreesAnders Kaseorg, Dec 1, 2021
  2. 1/8 fetch: lowercase error messagesAnders Kaseorg, Dec 1, 2021
  3. 3/8 branch: lowercase error messagesAnders Kaseorg, Dec 1, 2021
  4. 4/8 worktree: simplify find_shared_symref() memory ownership modelAnders Kaseorg, Dec 1, 2021
  5. Eric SunshineDec 1, 2021
  6. Anders KaseorgDec 1, 2021
  7. Eric SunshineDec 2, 2021
  8. Eric SunshineDec 2, 2021
  9. Anders KaseorgDec 2, 2021
  10. Eric SunshineDec 2, 2021
  11. 2/8 receive-pack: lowercase error messagesAnders Kaseorg, Dec 1, 2021
  12. 5/8 fetch: protect branches checked out in all worktreesAnders Kaseorg, Dec 1, 2021
  13. Eric SunshineDec 2, 2021
  14. Anders KaseorgDec 2, 2021
  15. 6/8 receive-pack: clean dead code from update_worktree()Anders Kaseorg, Dec 1, 2021
  16. 7/8 receive-pack: protect current branch for bare repository worktreeAnders Kaseorg, Dec 1, 2021
  17. 8/8 branch: protect branches checked out in all worktreesAnders Kaseorg, Dec 1, 2021
  18. Jiang XinDec 23, 2021
  19. Jiang XinJan 12, 2022
  20. Junio C HamanoJan 12, 2022

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.