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

Re: [PATCH 3/8] Clean up work-tree handling

From
Junio C Hamano <gitster@pobox.com>
Date
Jul 28, 2007, 11:15 UTC
Message-ID
<7vd4ycsrrt.fsf@assigned-by-dhcp.cox.net>
In-Reply-To
<Pine.LNX.4.64.0707280956510.14781@racer.site>
Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
Show 14 quoted lines
>> Now, I think it is fair to say that if your worktree is somewhere 
>> totally unrelated to your cwd, no amount of going up will take you to 
>> the top.  IOW, you have to come down after going up some levels.  In 
>> such a case, it is easier to code the implementation of --show-cdup to 
>> give an absolute path.
>> 
>> But in that case you are not even in the working tree to begin
>> with, aren't you?  Does git need to support that?
>
> I'd say yes.
>
> It is utterly _inconvenient_ to have to cd to the working tree when you 
> just want to check the status, for example.  And git already knows about 
> the work-tree!

That is a bit different issue. In such a case, I would agree it would still be sensible for "git diff" to show the whole tree diff, for example. In other words, my "does git need to support that" is not about "even when the location of a worktree is known, operations that require a work tree should fail when invoked from outside of it".

Think about what the sensible thing to do is for "git diff ." Within a work tree, it instructs git to behave as if the user issued the command from the toplevel with prefix as the argument. And scripts that want to mimick that behaviour would use --show-prefix to obtain the prefix string, and --show-cdup to obtain how to move to the toplevel.

Outside of a work tree, I think the only two semi-sensible behaviours exist. Either tell the user that we cannot understand what "." should mean in that context and error out (IOW, "Not inside a work tree"), or assume that the user meant "from the top". So in such a case, if we do not want to error out to make things more "convenient", one possibility would be:

 * give empty as prefix;
 * give absolute or cwd relative path to the work tree for cdup
   (it would not be a sequence of ../ anyway in this case).

I think this is in line with the traditional behaviour when GIT_DIR is explicitly given. We assume the cwd is the toplevel, and return empty prefix and empty cdup.

Having said that, I am not convinced that "assume toplevel outside of a work tree" is a win for the end users. If the command errors out with a message telling the user that relative path does not make sense from outside a work tree, the user would understand. If the command does not error out but always works relative to the toplevel without explanation, it might confuse the user more until the he realizes "assume toplevel outside of a work tree" is the rule that is applying to his case.

Previous: Johannes SchindelinNext: Johannes Schindelin
Message 15 of 30 in “work-tree cleanups”
  1. 0/8 work-tree cleanupsJohannes Schindelin, Jul 27, 2007
  2. 1/8 Add is_absolute_path() and make_absolute_path()Johannes Schindelin, Jul 27, 2007
  3. Junio C HamanoJul 27, 2007
  4. Johannes SchindelinJul 28, 2007
  5. 2/8 Add functions get_relative_cwd() and is_inside_dir()Johannes Schindelin, Jul 27, 2007
  6. Junio C HamanoJul 27, 2007
  7. Johannes SchindelinJul 28, 2007
  8. 3/8 Clean up work-tree handlingJohannes Schindelin, Jul 27, 2007
  9. Junio C HamanoJul 27, 2007
  10. Johannes SchindelinJul 28, 2007
  11. Junio C HamanoJul 28, 2007
  12. Johannes SchindelinJul 28, 2007
  13. Junio C HamanoJul 28, 2007
  14. Johannes SchindelinJul 28, 2007
  15. Junio C HamanoJul 28, 2007
  16. Johannes SchindelinJul 28, 2007
  17. Johannes SchindelinJul 29, 2007
  18. Junio C HamanoJul 29, 2007
  19. Johannes SchindelinJul 29, 2007
  20. 4/8 Add set_git_dir() functionJohannes Schindelin, Jul 27, 2007
  21. 5/8 work-trees are allowed inside a git-dirJohannes Schindelin, Jul 27, 2007
  22. Junio C HamanoJul 27, 2007
  23. Johannes SchindelinJul 28, 2007
  24. Junio C HamanoJul 28, 2007
  25. Johannes SchindelinJul 28, 2007
  26. 6/8 init: use get_git_work_tree() instead of rolling our ownJohannes Schindelin, Jul 27, 2007
  27. 7/8 Make t1501 a little saner, and fix itJohannes Schindelin, Jul 27, 2007
  28. 8/8 Fix t1500 for sane work-tree behaviorJohannes Schindelin, Jul 27, 2007
  29. Junio C HamanoJul 27, 2007
  30. Johannes SchindelinJul 28, 2007

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.