Added a comment
This commit is contained in:
parent
4288f7576a
commit
683f527b3b
1 changed files with 41 additions and 0 deletions
|
@ -0,0 +1,41 @@
|
|||
[[!comment format=mdwn
|
||||
username="kyle"
|
||||
avatar="http://cdn.libravatar.org/avatar/7d6e85cde1422ad60607c87fa87c63f3"
|
||||
subject="comment 3"
|
||||
date="2020-08-06T20:58:17Z"
|
||||
content="""
|
||||
> Really, the shell is the only thing that knows cd has been used with a symlink,
|
||||
> the real cwd is what getCurrentDirectory returns, same as getcwd(3).
|
||||
|
||||
Doh, indeed. Thanks.
|
||||
|
||||
> But how does it know where inside working tree part begins when
|
||||
> there are symlinks involved? Probably I'm missing something simple
|
||||
> which git does to deal with this.
|
||||
|
||||
It looks like git handles this in `setup.c:abspath_part_inside_repo`.
|
||||
That function takes the absolute, unresolved path that was given as an
|
||||
argument (`/tmp/gx-link-Wxqnzo8/alink/repo/f0`, to continue with the
|
||||
original example). Then it compares that to the working tree path
|
||||
(`/tmp/gx-link-Wxqnzo8/a/repo`).
|
||||
|
||||
If the path doesn't already have the working tree as a prefix, the
|
||||
core logic seems to be:
|
||||
|
||||
* Take the realpath of the leftmost directory in the received path
|
||||
(`/tmp`).
|
||||
|
||||
* If that fully matches the path for the working tree, chop those
|
||||
leading components off of the received path, returning what
|
||||
remains.
|
||||
|
||||
* If not, tack on the next directory component
|
||||
(`/tmp/gx-link-Wxqnzo8/`) and repeat.
|
||||
|
||||
For this specific case, that'd go until
|
||||
`/tmp/gx-link-Wxqnzo8/alink/repo/`, whose realpath would match the
|
||||
working tree, and then return `f0`.
|
||||
|
||||
That of course may not be worth the overhead.
|
||||
|
||||
"""]]
|
Loading…
Reference in a new issue