GNU bug report logs -
#10472
`realpath --relative-to=<path> /` outputs inconsistent trailing slash
Previous Next
Reported by: Mike Frysinger <vapier <at> gentoo.org>
Date: Tue, 10 Jan 2012 20:17:02 UTC
Severity: normal
Done: Pádraig Brady <P <at> draigBrady.com>
Bug is archived. No further changes may be made.
Full log
Message #82 received at 10472 <at> debbugs.gnu.org (full text, mbox):
On 03/14/2012 09:53 AM, Eric Blake wrote:
> On 03/14/2012 03:12 AM, Pádraig Brady wrote:
>> On 03/14/2012 04:07 AM, Eric Blake wrote:
>>> On 03/13/2012 09:15 PM, Eric Blake wrote:
>>>>> Also doesn't path_prefix() need the same adjustment,
>>>>> so as to verify --relative-base in the same way?
>>>>
>>>> Yes, it looks like it.
>>>
>>> In fact, I found another bug, this time present also on Linux:
>>>
>>> $ realpath --relative-base=/ --relative-to=/ /
>>> /
>>
>> This may be a local issue?
>> $ src/realpath --relative-base=/ --relative-to=/ /
>> .
>
> Looks like I was testing after some of my modifications to realpath.c;
> I'm rebasing my tree to add the test before any of my realpath.c
> changes, so that I can then be avoiding regressions. But it still
> doesn't explain:
>
> $ src/realpath --relative-base=/ --relative-to=/ / /usr
> .
> /usr
Agreed. --relative-base=/ should essentially be a noop
> where I would expect 'usr', not '/usr', since /usr is indeed a child of /.
>
>>> $ realpath --relative-base=/usr/local --relative-to=/usr \
>>> /usr /usr/local/lib
>>> /usr
>>> /usr/local/lib
>>>
>>> when it should really output '/usr' (absolute, since it is not a child
>>> of /usr/local) and 'local/lib' (which is a file below /usr/local, and an
>>> output name relative to /usr).
>>
>> Well that was by design. I.E. --relative-base is a guard,
>> which if either --relative-to or the specified paths go higher,
>> an absolute name will be output.
>
> The documentation wasn't very clear on that point. Either we need to
> fix the documentation, or consider whether to make 'realpath' fail if
> --relative-base is not a prefix of --relative-to, or even add another
> option that allows the behavior I was expecting of making the two
> orthogonal (that is, where it really is an independent filter - if the
> path being canonicalized is a child of --relative-base, then output it
> relative to --relative-to; otherwise output absolute).
>
> Also, would it make sense to have --relative-base without --relative-to
> imply a --relative-to of the same directory? That is,
>
> realpath --relative-base=/usr /usr
I considered that, and now I'm not sure why I didn't do it.
Having both relative-to and relative-base being the same,
is the common use case for --relative-base.
cheers,
Pádraig.
This bug report was last modified 13 years and 75 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.