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, 05:18 UTC
Message-ID
<7vlkd1umwf.fsf@assigned-by-dhcp.cox.net>
In-Reply-To
<Pine.LNX.4.64.0707280152120.14781@racer.site>
Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
Show 6 quoted lines
>> Well, one of the conditions to accept the worktree stuff was not
>> to break anybody who never ever uses worktree.  So if we can
>> keep the UP-ness of cdup, it would be much better.
>
> One could record if the work tree was changed from the default one, and 
> do the old thing in that case.

This really should not be something you have to bend over with special code to support. One thing I think people's scripts expect is that cdup is what the name suggests, "how much do I go *up* in order to go to the top of the working tree", and if the answer is "nothing", they can tell that they are already at the top of the tree.

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? What should "prefix = setup_git_dir()" do and return, in order to come up with the string to prepend to paths relative to the current directory the users give us? I would say if your cwd is not inside your working tree, then --show-cdup and --show-prefix should error out, saying "Not in the working tree". These options are about translating paths relative to your cwd to relative to the top of the working tree, so if you are outside a working tree, they do not make much sense.

Also I think the implementation of --show-prefix needs to work in terms of relative relationship between cwd and the top already, so I am not sure where your aversion of keeping the current cdup behaviour is coming from.

I was hoping that --show-cdup is rarely used, but unfortunately cd_to_toplevel() in git-sh-setup.sh is not even the only in-tree user of --show-cdup; it checks if it is empty to avoid chdir() unnecessarily. There are others:

 - emacs/git.el uses it as part of expand-file-name, so I think
   giving an absolute path back is Ok.
 - contrib/fast-import/git-p4 gives it to os.chdir() after
   checking if the length is positive; this should be Ok
   although it would involve an unnecessary chdir() if the
   process is already at the top with this change.
 - contrib/p4import/git-p4import.py: the same story as git-p4.
 - git-svn.perl: the same story as above.
Previous: Johannes SchindelinNext: Johannes Schindelin
Message 13 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.