All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mark Levedahl <mlevedahl@gmail.com>
To: Johannes Sixt <j6t@kdbg.org>
Cc: git@vger.kernel.org, Shroom Moo <egg_mushroomcow@foxmail.com>
Subject: Re: [PATCH v3 1/1] git-gui: handle missing worktree and separated gitdir
Date: Wed, 6 May 2026 07:27:59 -0400	[thread overview]
Message-ID: <f6c7c3d5-1d68-45b5-87a7-ae19b59270f4@gmail.com> (raw)
In-Reply-To: <ac115a8f-5dbc-4988-b8a5-c1647af1bb74@kdbg.org>



On 5/6/26 3:32 AM, Johannes Sixt wrote:
>> Whether being in a gitdir is ok, or a worktree required, is of fundamental importance and
>> is not explicitly checked now. This is my issue. (Whether the repo is bare, or embedded in
>> a worktree, is relevant only when automatically fixing a user error.)
> I don't quite follow what you a trying to say here.
I played a bit more:

A git repository (gitdir) can have config.bare true | false | not set
git rev-parse --is-bare-repository tells you that whatever gitdir is discovered from the
current directory has core.bare==true. This happens whether the call is from inside the
gitdir, or in the parent dir of a gitdir named '.git', or in a directory containing a
symlink or a gitfile link to the gitdir. This call never tells you what directory you are
actually in.

git rev-parse --is-inside-work-tree gives:
    true - the call is made from a directory that is suported/supportable as a worktree of
a gitdir.
    false - the call is made from inside a gitdir, or from a directory linked to a to a
gitdir with core.bare == true.
    and error is thrown if no gitdir is discovered.

I find --is-inside-work-tree a much better call to make early in setup. 
    true - full git-gui is ok, 
    false - blame/browser is ok (gitdir might have core.bare true)
    error - no gitdir found, the repository picker should be called.

So, the only need to test if the repo is marked bare is when looking for a possible
worktree when git-gui was started inside the gitdir, or started in a directory linked to
said gitdir, or GIT_DIR in the environment points to said gitdir: I consider all of this a
user (or configuration) error, and there are many possible causes to explore to give
useful feedback to the user.

But, there are many ways to code this. I started down a path of using
--is-inside-worktree, but in the end there are still a lot of corner cases to find.

>>> But perhaps there is a simpler solution: Let's present an error if
>>> --show-toplevel fails except in the case where the startup directory is
>>> named '.git' (and is a valid Git repository) and is not bare (then the
>>> worktree is the parent). I insist in this exception, because this
>>> use-case was considered important in the past (87cd09f43e56 "git-gui:
>>> work from the .git dir", 2010-01-23).
>>>
>>> -- Hannes
>>>
>> This would not fix gitk's blame / browse from a gitdir, and I don't really see a one or
>> two line fix as being adequate.

As you mentioned elsewhere, the problem on browser/blame is that _gitworktree is empty
when no worktree is found, so GIT_WORK_TREE is exported to the environment as an empty
variable. This cause is in a commit from 12 years ago:

    3decb8e0ac ("git-gui: tolerate major version changes when comparing the git version",
2014-05-17)

Prior to that commit and if not using git v1.7.x, an alternate branch of code not using
git rev-parse was used for worktree discovery, and that code set _gitworktree = _gitdir
when in a gitdir. The alternate code was removed more recently as it was unreachable from
non-ancient git versions.

The fix is to set _gitworktree to _gitdir before exporting GIT_WORK_TREE, or to just not
export an empty GIT_WORK_TREE. Obviously, having GIT_WORK_TREE = GIT_DIR is asking for
trouble, but perhaps is ok as git-gui is running in a read-only mode for browse/blame. My
limited testing shows this works.


Mark


  reply	other threads:[~2026-05-06 11:28 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-04-21 16:28 [PATCH] git-gui: handle bare repo or missing worktree Shroom Moo
2026-04-29  6:58 ` Johannes Sixt
2026-04-29 17:32   ` [PATCH v2 1/1] git-gui: protect rev-parse --show-toplevel call Shroom Moo
2026-04-29 20:14     ` Mark Levedahl
2026-04-30 10:02     ` [PATCH v3 1/1] git-gui: handle missing worktree and separated gitdir Shroom Moo
2026-04-30 16:18       ` Mark Levedahl
2026-05-01 10:22         ` [PATCH v3 1/1] git-gui: handle missing worktree and separated Shroom Moo
2026-05-01 13:13         ` [PATCH v3 1/1] git-gui: handle missing worktree and separated gitdir Johannes Sixt
2026-05-01 16:42           ` Mark Levedahl
2026-05-02 21:51             ` Mark Levedahl
2026-05-03  8:53               ` Johannes Sixt
2026-05-04 15:13                 ` Mark Levedahl
2026-05-05  3:40                   ` Mark Levedahl
2026-05-06  7:32                   ` Johannes Sixt
2026-05-06 11:27                     ` Mark Levedahl [this message]
2026-05-06 12:57                       ` Johannes Sixt
2026-05-06 14:05                         ` Mark Levedahl
2026-05-07  5:09                           ` Mark Levedahl
2026-05-01 10:54       ` [PATCH v4 " Shroom Moo
2026-05-04 14:59         ` [PATCH v5 1/1] git-gui: restructure repository startup Shroom Moo
2026-05-06  7:15           ` Johannes Sixt
2026-05-06 20:27           ` [PATCH v6 0/3] git-gui: robustify startup and fix environment handling Shroom Moo
2026-05-09 13:37             ` [PATCH v7 " Shroom Moo
2026-05-14 14:28               ` Mark Levedahl
2026-05-14 14:33                 ` [PATCH v1 00/11] Improve git gui operation without a worktree Mark Levedahl
2026-05-14 14:33                   ` [PATCH v1 01/11] git-gui: allow specifying path '.' to the browser Mark Levedahl
2026-05-15 15:54                     ` Johannes Sixt
2026-05-14 14:33                   ` [PATCH v1 02/11] git-gui: refactor browser / blame argument parsing Mark Levedahl
2026-05-15 15:56                     ` Johannes Sixt
2026-05-14 14:33                   ` [PATCH v1 03/11] git-gui: guard set/unset of GIT_DIR and GIT_WORK_TREE Mark Levedahl
2026-05-15 15:58                     ` Johannes Sixt
2026-05-14 14:33                   ` [PATCH v1 04/11] git-gui: put choose_repository::pick in a proc Mark Levedahl
2026-05-15 11:00                     ` Aina Boot
2026-05-15 13:33                       ` Mark Levedahl
2026-05-15 15:59                     ` Johannes Sixt
2026-05-14 14:33                   ` [PATCH v1 05/11] git-gui: use --absolute-git-dir Mark Levedahl
2026-05-15 16:00                     ` Johannes Sixt
2026-05-14 14:33                   ` [PATCH v1 06/11] git gui: GIT_DIR / GIT_WORK_TREE make any discovery error fatal Mark Levedahl
2026-05-14 14:33                   ` [PATCH v1 07/11] git-gui: use rev-parse exclusively to find a repository Mark Levedahl
2026-05-15 16:06                     ` Johannes Sixt
2026-05-14 14:33                   ` [PATCH v1 08/11] git-gui: simplify [is_bare] to report if a worktree is known Mark Levedahl
2026-05-16  8:12                     ` Johannes Sixt
2026-05-14 14:33                   ` [PATCH v1 09/11] git-gui: support using repository parent dir as a worktree Mark Levedahl
2026-05-16  8:14                     ` Johannes Sixt
2026-05-14 14:33                   ` [PATCH v1 10/11] git-gui: improve worktree discovery Mark Levedahl
2026-05-16  8:16                     ` Johannes Sixt
2026-05-14 14:33                   ` [PATCH v1 11/11] git-gui: add gui and pick as explicit subcommands Mark Levedahl
2026-05-16  8:18                     ` Johannes Sixt
2026-05-16  8:28                   ` [PATCH v1 00/11] Improve git gui operation without a worktree Johannes Sixt
     [not found]             ` <20260509133756.1367-1-egg_mushroomcow@foxmail.com>
2026-05-09 13:37               ` [PATCH v7 1/3] git-gui: restructure repository startup Shroom Moo
2026-05-15  8:26                 ` Johannes Sixt
2026-05-09 13:37               ` [PATCH v7 2/3] git-gui: disable gitk visualization when no worktree available Shroom Moo
2026-05-15  8:28                 ` Johannes Sixt
2026-05-09 13:37               ` [PATCH v7 3/3] git-gui: handle GIT_DIR and GIT_WORK_TREE early Shroom Moo
2026-05-15  8:28                 ` Johannes Sixt
     [not found]           ` <20260506202751.3294-1-egg_mushroomcow@foxmail.com>
2026-05-06 20:27             ` [PATCH v6 1/3] git-gui: restructure repository startup Shroom Moo
2026-05-06 20:27             ` [PATCH v6 2/3] git-gui: disable gitk visualization when no worktree available Shroom Moo
2026-05-06 20:27             ` [PATCH v6 3/3] git-gui: handle GIT_DIR and GIT_WORK_TREE early Shroom Moo
2026-05-07 15:50               ` Mark Levedahl
2026-05-09  8:46                 ` Aina Boot
2026-05-09  9:55                   ` Shroom Moo
2026-04-29 18:28   ` [PATCH] git-gui: handle bare repo or missing worktree Shroom Moo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=f6c7c3d5-1d68-45b5-87a7-ae19b59270f4@gmail.com \
    --to=mlevedahl@gmail.com \
    --cc=egg_mushroomcow@foxmail.com \
    --cc=git@vger.kernel.org \
    --cc=j6t@kdbg.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.