]> git.ipfire.org Git - thirdparty/git.git/commitdiff
worktree: teach worktree_lock_reason() to gently handle main worktree
authorRafael Silva <rafaeloliveira.cs@gmail.com>
Tue, 19 Jan 2021 21:27:35 +0000 (22:27 +0100)
committerJunio C Hamano <gitster@pobox.com>
Sat, 30 Jan 2021 17:57:20 +0000 (09:57 -0800)
worktree_lock_reason() aborts with an assertion failure when called on
the main worktree since locking the main worktree is nonsensical. Not
only is this behavior undocumented, thus callers might not even be aware
that the call could potentially crash the program, but it also forces
clients to be extra careful:

    if (!is_main_worktree(wt) && worktree_locked_reason(...))
        ...

Since we know that locking makes no sense in the context of the main
worktree, we can simply return false for the main worktree, thus making
client code less complex by eliminating the need for the callers to have
inside knowledge about the implementation:

    if (worktree_lock_reason(...))
        ...

Helped-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Rafael Silva <rafaeloliveira.cs@gmail.com>
Reviewed-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/worktree.c
worktree.c

index dd886d5029843497397b336ba6bcfb454b34599e..df90a5acca8b2eefe4d968de43b9aef36585db96 100644 (file)
@@ -604,7 +604,7 @@ static void show_worktree(struct worktree *wt, int path_maxlen, int abbrev_len)
                        strbuf_addstr(&sb, "(error)");
        }
 
-       if (!is_main_worktree(wt) && worktree_lock_reason(wt))
+       if (worktree_lock_reason(wt))
                strbuf_addstr(&sb, " locked");
 
        printf("%s\n", sb.buf);
index fb3e286996d1e6102e7b008bd0fbff73e52552d0..e00858540ea45965f1570739caa4713a66a36105 100644 (file)
@@ -225,7 +225,8 @@ int is_main_worktree(const struct worktree *wt)
 
 const char *worktree_lock_reason(struct worktree *wt)
 {
-       assert(!is_main_worktree(wt));
+       if (is_main_worktree(wt))
+               return NULL;
 
        if (!wt->lock_reason_valid) {
                struct strbuf path = STRBUF_INIT;