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

Re: [PATCH] refs: unify parse_worktree_ref() and ref_type()

From
Junio C Hamano <gitster@pobox.com>
Date
Sep 13, 2022, 15:43 UTC
Message-ID
<xmqqillrb7qs.fsf@gitster.g>
In-Reply-To
<xmqq35cwcpws.fsf@gitster.g>
Junio C Hamano <gitster@pobox.com> writes:
Show 34 quoted lines
> Junio C Hamano <gitster@pobox.com> writes:
>
>> Otherwise we fall through with worktree_ref that we have stripped
>> main-worktree/ prefix, which means the original input
>>
>> 	main-worktree/worktrees/foo/blah
>>
>> is now 
>>
>> 	worktrees/foo/blah
>>
>> and the next skip_prefix() will see that it begins with "worktrees/".
>> Of course, if the initial input were
>>
>> 	worktrees/foo/blah
>>
>> then we wouldn't have skipped main-worktree/ prefix from it, and go
>> to the next skip_prefix().  So from here on, we cannot tell which
>> case the original input was.
>>
>> But that is OK.  Asking "give me the ref 'blah' in the worktree 'foo'"
>> in the current worktree should yield the same answer to the question
>> "give me the ref 'blah' in the worktree 'foo', as if I asked you to
>> do so in the main worktree".
>
> This makes me wonder...
>
> I wonder if it makes the resulting code clearer to go fully
> recursive, unlike the posted code that says "if a recursive call
> says it is for current, that means it is for main worktree, and
> otherwise pretend as if the input did not have the prefix".
>
> That is, something like
> ...

The above may be a wrong suggestion, as it was solely guided by my reading of the posted code that looked as if it wanted to support something like "main-worktree/worktrees/foo/refs/heads/main". If that wasn't the intention, and we only want to support

  1. a ref spelled in the traditional way before multiple worktree feature,
  2. 1., with "main-worktree/" prefixed, or
  3. 1., with "worktrees/<worktreename>/" prefixed

then a better approach would be to have a small helper parse_local_worktree_ref() and make the primary one into something like

parse_worktree_ref()
{
        if (begins with "main-worktree/") {	
		strip main-worktree/ prefix;
		switch (parse_local_worktree_ref(input minus prefix)) {
		... the same switch to turn "ours" into "main's" ...
		... but we probably want to special case if we are ...
		... the main worktree ...
		}
	}
	else if (begins with "worktrees/") {
		strip worktrees/ prefix and learn worktree name;
		switch (parse_local_worktree_ref(input minus prefix)) {
		... the same switch to turn "ours" into "theirs" ...
		... but we probably want to special case if we are ...
		... the worktree in question ...
		}
	}
	return parse_local_worktree_ref(input);
}

and have parse_local_worktree_ref() handle psuedorefs, per-worktree-refs.

Previous: Junio C HamanoNext: Han-Wen Nienhuys
Message 4 of 9 in “refs: unify parse_worktree_ref() and ref_type()”
  1. refs: unify parse_worktree_ref() and ref_type()Han-Wen Nienhuys via GitGitGadget, Sep 12, 2022
  2. Junio C HamanoSep 12, 2022
  3. Junio C HamanoSep 12, 2022
  4. Junio C HamanoSep 13, 2022
  5. Han-Wen NienhuysSep 19, 2022
  6. Junio C HamanoSep 19, 2022
  7. Han-Wen NienhuysSep 20, 2022
  8. Junio C HamanoSep 21, 2022
  9. refs: unify parse_worktree_ref() and ref_type()Han-Wen Nienhuys via GitGitGadget, Sep 19, 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.