Re: [PATCH] git rev-parse: Fix --show-cdup inside symlinked directory
From: Petr Baudis <hidden>
Date: 2016-06-15 22:44:57
Hi, On Tue, Jul 15, 2008 at 04:19:30PM +0100, Johannes Schindelin wrote:
On Tue, 15 Jul 2008, Petr Baudis wrote:quoted
Consider the scenario when someone makes a symlink into a working tree subdirectory at an unrelated place, then attempts to work inside the symlinked directory. The scenario is a bit unwieldly, but most of the Git will handle it fine - except git rev-parse --show-cdup. That will output a sequence of ../ which will work wrong inside the symlink using shell cd builtin.Short version: do not use symlinks in the working directory, if you do not want to track the _symlink_. Long version: there are a lot of problems with that, and --show-cdup is the least of the problems. A checkout, for example, is able to kill the symlink and check out a fresh copy of the subdirectory. AFAICT this is a concious decision: If you want to track a symlink, track a symlink, but if you want to track a subdirectory, you will have to track a subdirectory, and it cannot be a symlink.
no, no, this is for the scenario other way around: you have a normal subdirectory in the working tree, and point a symlink _at_ it from $somewhere_else. Then you try to work in $somewhere_else/symlink.
quoted
This patch changes --show-cdup to always show absolute workdir path instead. I think this should hopefully cause no compatibility problems; the testsuite is passing fine, at least.See the thread where I proposed a change like this, back with the infamous worktree desaster, and Junio NACKed; or the thread where Linus rightfully insists that git_dir should be relative if possible, for performance reasons.
I see, [ref]. But noone was aware of this possible user case. Performance reasons sound reasonable, though I'm not really sure if for cdup in particular this ever matters. P.S.: Either way, there is a possible workaround to tell git about the working directory manually using git --work-tree=... that I missed to mention on IRC, Yves. -- Petr "Pasky" Baudis GNU, n. An animal of South Africa, which in its domesticated state resembles a horse, a buffalo and a stag. In its wild condition it is something like a thunderbolt, an earthquake and a cyclone. -- A. Pierce