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

Re: [PATCH] rev-parse: Fix shell scripts whose cwd is a symlink into a git work-dir

From
Marcel M. Cary <marcel@oak.homeunix.org>
Date
Nov 25, 2008, 05:17 UTC
Message-ID
<492B8A64.7070309@oak.homeunix.org>
In-Reply-To
<m31vx3l94x.fsf@localhost.localdomain>
Show 10 quoted lines
> But that is contrary to the _name_ of option. It is --show-cdup, as
> in "show cd up". And I think your change will break a few scripts.
> 
> I think you should use "git rev-parse --work-tree" for full path
> to working directory:
> 
>     --show-cdup
>         When the command is invoked from a subdirectory, show the path
>         of the top-level directory relative to the current directory
>         (typically a sequence of "../", or an empty string).
Jakub,

Yes, I agree, there is a risk in breaking scripts that rely on the "../" format. That's the "substantial change" I was alluding. Here's how I arrived at that choice. I considered these fixes:

(a) add some shell code to cd_to_toplevel to find the canonical pwd and
    interpret --show-cdup output from there
(b) make a new option (--work-tree would be a good name) to print the
    canonical work tree path, and leave --show-cdup as it is.  Then
    change cd_to_toplevel and/or git pull to use the new option
(c) change --show-cdup to print the canonical work tree path, even
    though it's not entirely consistent with the name of the option

The main reason I avoided (a), even though that "cd" is what violated my expecations, is because I didn't want to have to re-implement code to check whether each path component is a symlink. (Now I see that "cd `/bin/pwd` might be a more concise fix.)

The reason I avoided (b) is because, to make all of git work for me, I expected to have to change several calling scripts. (Now that I look, I see only three calls to --show-cdup in the git codebase to change.) Even so, third-party scripts that I might want to use in the future would not immediately be changed.

Option (c) keeps the change small and isolated and makes it effective everywhere. The documentation, while perhaps in need of update given my patch, doesn't promise to always return zero or more "../". Also, there's a branch branch of the --show-cdup code (that I can't seem to exercise) that the result of get_git_work_tree(), which might not be zero or more "../".

Would you suggest pursuing option (a)? I wonder whether there are languages other than shell that might suffer from the same problem of keeping an internal PWD variable of some sort, or perhaps there are shell scripts out there that call --show-cdup directly instead of calling cd_to_toplevel.

Do you think it would be less likely to break existing scripts if I restrict the (c) behavior to when getenv("PWD") doesn't match the starting getcwd()? (I'm not sure yet whether that's a reliable way to detect the symlink scenario, but it seems to work with bash.)

Marcel
Previous: Andreas EricssonNext: Johannes Sixt
Message 9 of 27 in “fixing git pull from symlinked directory”
  1. 0/2 fixing git pull from symlinked directoryMarcel M. Cary, Nov 15, 2008
  2. 1/2 Add failing test for "git pull" in symlinked directoryMarcel M. Cary, Nov 15, 2008
  3. 2/2 Support shell scripts that run from symlinks into a git working dirMarcel M. Cary, Nov 15, 2008
  4. rev-parse: Fix shell scripts whose cwd is a symlink into a git work-dirMarcel M. Cary, Nov 22, 2008
  5. Jakub NarebskiNov 22, 2008
  6. Andreas EricssonNov 23, 2008
  7. Marcel M. CaryNov 25, 2008
  8. Andreas EricssonNov 25, 2008
  9. Marcel M. CaryNov 25, 2008
  10. Johannes SixtNov 25, 2008
  11. Marcel M. CaryNov 25, 2008
  12. Johannes SixtNov 25, 2008
  13. Junio C HamanoNov 25, 2008
  14. git-sh-setup: Fix scripts whose PWD is a symlink into a git work-dirMarcel M. Cary, Dec 3, 2008
  15. Junio C HamanoDec 3, 2008
  16. git-sh-setup: Fix scripts whose PWD is a symlink into a git work-dirMarcel M. Cary, Dec 10, 2008
  17. Junio C HamanoDec 10, 2008
  18. git-sh-setup: Fix scripts whose PWD is a symlink into a git work-dirMarcel M. Cary, Dec 13, 2008
  19. Junio C HamanoDec 14, 2008
  20. git-sh-setup: Fix scripts whose PWD is a symlink into a git work-dirMarcel M. Cary, Dec 15, 2008
  21. Marcel M. CaryDec 15, 2008
  22. git-sh-setup: Use "cd" option, not /bin/pwd, for symlinked work treeMarcel M. Cary, Feb 7, 2009
  23. Johannes SchindelinFeb 7, 2009
  24. Marcel M. CaryFeb 8, 2009
  25. Johannes SchindelinFeb 8, 2009
  26. Marcel M. CaryFeb 11, 2009
  27. Jeff KingFeb 11, 2009

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.