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

Re: [PATCH v2 06/20] checkout: check_linked_checkout: improve "already checked out" aesthetic

From
Eric Sunshine <sunshine@sunshineco.com>
Date
Jul 17, 2015, 00:32 UTC
Message-ID
<CAPig+cRtCon=jaqbjZyHTvJ3cydiyAz+5OC=3x30VfAJniYYMQ@mail.gmail.com>
In-Reply-To
<xmqqy4ig3s3q.fsf@gitster.dls.corp.google.com>
On Thu, Jul 16, 2015 at 1:55 PM, Junio C Hamano <gitster@pobox.com> wrote:
Show 5 quoted lines
> How does this work with manually configured GIT_DIR environment, by
> the way?  I think GIT_DIR=/collection/of/repos/foo.git would be OK,
> as strbuf_strip_suffix() would hopefully leave it intact, but I am
> more interested in the general working of linked checkout feature,
> not just this error message.

I may be misunderstanding your question, but my answer is that strbuf_strip_suffix() is not applied to $GIT_DIR, but rather to the content of file $GIT_COMMON_DIR/worktrees/<tag>/gitdir, which is the path to the .git file in the linked worktree. That is, given:

    git worktree add ../foo HEAD

then the content of 'gitdir' is the absolute path of "../foo/.git", and strbuf_strip_suffix() operates on that value.

Show 13 quoted lines
> In the new world order with GIT_DIR and GIT_COMMON_DIR, does
> "$GIT_DIR" always have to be the same as "$GIT_WORK_TREE/.git"?  Do
> we need some sanity check if that is the case?  Perhaps: if you have
> $GIT_DIR set to $somewhere/.git/worktrees/$name, then
>
>  - $GIT_COMMON_DIR must match $somewhere/.git,
>
>  - $somewhere/.git/worktrees/$name/commondir must point at
>    $GIT_COMMON_DIR,
>
>  - $GIT_WORK_TREE/.git must match $GIT_DIR
>
> or something like that?

Duy is probably better suited to answer this, as he would likely have taken these issues into consideration when implementing the feature. (I've been poking through documentation and code for quite a while trying to answer this email but don't yet have a sufficient grasp to do it justice. I'm not even sure where such a sanity check would be placed.)

Show 7 quoted lines
>>       } else
>>               strbuf_addstr(&gitdir, get_git_common_dir());
>>       skip_prefix(branch, "refs/heads/", &branch);
>> +     strbuf_strip_suffix(&gitdir, "/.git");
>
> Sick people have '/.git' and run "git add etc/passwd"; do we want to
> consider such a use case?

I originally implemented this as stripping only ".git" since it felt natural for the result to have a trailing slash, however, when I looked back at your report[1], I saw that you suggested stripping "/.git", so I changed it to strip the slash as well. Given the above "sick" use-case, we may indeed want to strip only ".git".

[1]: http://article.gmane.org/gmane.comp.version-control.git/274001
>>       die(_("'%s' is already checked out at '%s'"), branch, gitdir.buf);
>>  done:
>>       strbuf_release(&path);
Previous: Junio C HamanoNext: Duy Nguyen
Message 9 of 25 in “rid git-checkout of too-intimate knowledge of new worktree”
  1. 00/20 rid git-checkout of too-intimate knowledge of new worktreeEric Sunshine, Jul 16, 2015
  2. 01/20 checkout: avoid resolving HEAD unnecessarilyEric Sunshine, Jul 16, 2015
  3. 02/20 checkout: name check_linked_checkouts() more meaningfullyEric Sunshine, Jul 16, 2015
  4. 03/20 checkout: improve die_if_checked_out() robustnessEric Sunshine, Jul 16, 2015
  5. 04/20 checkout: die_if_checked_out: simplify strbuf managementEric Sunshine, Jul 16, 2015
  6. 05/20 checkout: generalize die_if_checked_out() branch name argumentEric Sunshine, Jul 16, 2015
  7. 06/20 checkout: check_linked_checkout: improve "already checked out" aestheticEric Sunshine, Jul 16, 2015
  8. Junio C HamanoJul 16, 2015
  9. Eric SunshineJul 17, 2015
  10. Duy NguyenJul 17, 2015
  11. 07/20 checkout: check_linked_checkout: simplify symref parsingEric Sunshine, Jul 16, 2015
  12. 08/20 checkout: teach check_linked_checkout() about symbolic link HEADEric Sunshine, Jul 16, 2015
  13. 09/20 branch: publish die_if_checked_out()Eric Sunshine, Jul 16, 2015
  14. 10/20 worktree: simplify new branch (-b/-B) option checkingEric Sunshine, Jul 16, 2015
  15. 11/20 worktree: introduce options containerEric Sunshine, Jul 16, 2015
  16. 12/20 worktree: make --detach mutually exclusive with -b/-BEric Sunshine, Jul 16, 2015
  17. 13/20 worktree: make branch creation distinct from worktree populationEric Sunshine, Jul 16, 2015
  18. 14/20 worktree: elucidate environment variables intended for child processesEric Sunshine, Jul 16, 2015
  19. 15/20 worktree: add_worktree: construct worktree-population command locallyEric Sunshine, Jul 16, 2015
  20. 16/20 worktree: detect branch-name/detached and error conditions locallyEric Sunshine, Jul 16, 2015
  21. 17/20 worktree: make setup of new HEAD distinct from worktree populationEric Sunshine, Jul 16, 2015
  22. 18/20 worktree: avoid resolving HEAD unnecessarilyEric Sunshine, Jul 16, 2015
  23. 19/20 worktree: populate via "git reset --hard" rather than "git checkout"Eric Sunshine, Jul 16, 2015
  24. 20/20 checkout: drop intimate knowledge of newly created worktreeEric Sunshine, Jul 16, 2015
  25. Junio C HamanoJul 16, 2015

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.