GNU bug report logs -
#27982
25.1.50; expand-file-name docstring on how to traverse the filesystem
Previous Next
Reported by: Nicolas Richard <youngfrog <at> members.fsf.org>
Date: Sun, 6 Aug 2017 11:39:01 UTC
Severity: minor
Found in version 25.1.50
Done: Nicolas Richard <youngfrog <at> members.fsf.org>
Bug is archived. No further changes may be made.
To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 27982 in the body.
You can then email your comments to 27982 AT debbugs.gnu.org in the normal way.
Toggle the display of automated, internal messages from the tracker.
Report forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#27982
; Package
emacs
.
(Sun, 06 Aug 2017 11:39:02 GMT)
Full text and
rfc822 format available.
Acknowledgement sent
to
Nicolas Richard <youngfrog <at> members.fsf.org>
:
New bug report received and forwarded. Copy sent to
bug-gnu-emacs <at> gnu.org
.
(Sun, 06 Aug 2017 11:39:02 GMT)
Full text and
rfc822 format available.
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
The docstring of expand-file-name suggest
(directory-file-name (file-name-directory dirname))
to traverse a directory
This looks wrong to me, e.g.
(list current-directory
(directory-file-name (file-name-directory current-directory)))
=> ("/home/youngfrog/" "/home/youngfrog")
I think it should be (file-name-directory (directory-file-name dirname))
instead. Then the example becomes:
(list current-directory
(file-name-directory (directory-file-name current-directory)))
=> ("/home/youngfrog/" "/home/")
Am I overlooking something ?
Is this patch ok to commit ?
In GNU Emacs 25.1.50.1 (x86_64-pc-linux-gnu)
of 2016-11-15 built on phie-fixe
Repository revision: f994c2046588b168c1a4a900879cdffaf9d02f01
Windowing system distributor 'The X.Org Foundation', version 11.0.11804000
System Description: Ubuntu 16.04.2 LTS
[0001-src-fileio.c-Fexpand_file_name-fix-suggestion-to-tra.patch (text/x-diff, inline)]
From 607e1445cfb1294c14af38cb4c39a93683e5671d Mon Sep 17 00:00:00 2001
From: Nicolas Richard <youngfrog <at> members.fsf.org>
Date: Sun, 6 Aug 2017 13:14:41 +0200
Subject: [PATCH] * src/fileio.c (Fexpand_file_name): fix suggestion to
traverse the filesystem
---
src/fileio.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/fileio.c b/src/fileio.c
index c3b2be7..28d619c 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -776,7 +776,7 @@ See also the function `substitute-in-file-name'.
For technical reasons, this function can return correct but
non-intuitive results for the root directory; for instance,
\(expand-file-name ".." "/") returns "/..". For this reason, use
-\(directory-file-name (file-name-directory dirname)) to traverse a
+\(file-name-directory (directory-file-name dirname)) to traverse a
filesystem tree, not (expand-file-name ".." dirname). */)
(Lisp_Object name, Lisp_Object default_directory)
{
--
2.7.4
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#27982
; Package
emacs
.
(Sun, 06 Aug 2017 16:55:01 GMT)
Full text and
rfc822 format available.
Message #8 received at 27982 <at> debbugs.gnu.org (full text, mbox):
> From: Nicolas Richard <youngfrog <at> members.fsf.org>
> Date: Sun, 06 Aug 2017 13:38:32 +0200
>
> The docstring of expand-file-name suggest
> (directory-file-name (file-name-directory dirname))
> to traverse a directory
No, it only suggests that as a more reliable alternative to
(expand-file-name ".." dirname)
> This looks wrong to me, e.g.
> (list current-directory
> (directory-file-name (file-name-directory current-directory)))
> => ("/home/youngfrog/" "/home/youngfrog")
This is not the use case against which the doc string tries to warn,
Thanks.
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#27982
; Package
emacs
.
(Wed, 23 Aug 2017 12:19:01 GMT)
Full text and
rfc822 format available.
Message #11 received at 27982 <at> debbugs.gnu.org (full text, mbox):
Hello,
Thanks for your comment.
Eli Zaretskii <eliz <at> gnu.org> writes:
>> From: Nicolas Richard <youngfrog <at> members.fsf.org>
>> Date: Sun, 06 Aug 2017 13:38:32 +0200
>>
>> The docstring of expand-file-name suggest
>> (directory-file-name (file-name-directory dirname))
>> to traverse a directory
>
> No, it only suggests that as a more reliable alternative to
>
> (expand-file-name ".." dirname)
If it's an alternative, shouldn't it have an equivalent effect, except
for cases where it's better? Or perhaps my english is lacking and I
misunderstand the suggestion completely.
Let me rephrase my example just to make sure I explained myself
correctly:
(let ((dirname current-directory))
(format "%s versus %s"
(directory-file-name (file-name-directory dirname))
(expand-file-name ".." dirname)))
=> "/home/youngfrog versus /home"
=> Effect is clearly different.
With my suggestion this would become:
(let ((dirname current-directory))
(format "%s versus %s"
(file-name-directory (directory-file-name dirname))
(expand-file-name ".." dirname)))
=> "/home/ versus /home"
=> Effect is somewhat similar
Nicolas.
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#27982
; Package
emacs
.
(Wed, 23 Aug 2017 17:52:02 GMT)
Full text and
rfc822 format available.
Message #14 received at 27982 <at> debbugs.gnu.org (full text, mbox):
> From: Nicolas Richard <youngfrog <at> members.fsf.org>
> Cc: 27982 <at> debbugs.gnu.org
> Date: Wed, 23 Aug 2017 14:18:24 +0200
>
> (let ((dirname current-directory))
> (format "%s versus %s"
> (directory-file-name (file-name-directory dirname))
> (expand-file-name ".." dirname)))
> => "/home/youngfrog versus /home"
> => Effect is clearly different.
Crystal ball says that current-directory (which you probably meant to
be default-directory instead) ends in a slash, in which case remove
it, and the 2 results will match.
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#27982
; Package
emacs
.
(Wed, 23 Aug 2017 19:20:01 GMT)
Full text and
rfc822 format available.
Message #17 received at 27982 <at> debbugs.gnu.org (full text, mbox):
Eli Zaretskii <eliz <at> gnu.org> writes:
> Crystal ball says that current-directory (which you probably meant to
> be default-directory instead) ends in a slash, in which case remove
> it, and the 2 results will match.
Your crystal ball is working fine. Sorry for leaving that detail out.
FWIW I have (defvaralias 'current-directory 'default-directory) because
I used to forget the name of the variable (and I still do, it seems).
Note however that default-directory ends in a slash when using "emacs
-Q" too.
Ok so now I'm saying that, with the suggestion in the docstring, output
will be different if "dirname" ends in a slash. IOW if it is a
"directory name" as opposed to "directory's file name".
(let ((dirname "/home/youngfrog/"))
(format "%s versus %s"
(directory-file-name (file-name-directory dirname))
(expand-file-name ".." dirname)))
=> output is different
(let ((dirname "/home/youngfrog"))
(format "%s versus %s"
(directory-file-name (file-name-directory dirname))
(expand-file-name ".." dirname)))
=> output the same
With the function calls swapped the output is always similar:
(let ((dirname "/home/youngfrog/"))
(format "%s versus %s"
(file-name-directory (directory-file-name dirname))
(expand-file-name ".." dirname)))
=> output is similar
(let ((dirname "/home/youngfrog"))
(format "%s versus %s"
(file-name-directory (directory-file-name dirname))
(expand-file-name ".." dirname)))
=> output is similar
Nicolas.
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#27982
; Package
emacs
.
(Thu, 24 Aug 2017 17:10:01 GMT)
Full text and
rfc822 format available.
Message #20 received at 27982 <at> debbugs.gnu.org (full text, mbox):
> From: Nicolas Richard <youngfrog <at> members.fsf.org>
> Cc: 27982 <at> debbugs.gnu.org
> Date: Wed, 23 Aug 2017 21:18:53 +0200
>
> Ok so now I'm saying that, with the suggestion in the docstring, output
> will be different if "dirname" ends in a slash.
Of course. directory-file-name and file-name-directory look at the
slashes, so having one more slash at the end changes everything.
There's nothing new here.
So where do we go from here, in the context of this bug report? What
would you propose to change, where, and why?
Thanks.
Reply sent
to
Nicolas Richard <youngfrog <at> members.fsf.org>
:
You have taken responsibility.
(Wed, 30 Aug 2017 15:45:02 GMT)
Full text and
rfc822 format available.
Notification sent
to
Nicolas Richard <youngfrog <at> members.fsf.org>
:
bug acknowledged by developer.
(Wed, 30 Aug 2017 15:45:02 GMT)
Full text and
rfc822 format available.
Message #25 received at 27982-done <at> debbugs.gnu.org (full text, mbox):
Hi Eli,
Thanks for your help but let me close this.
I initially thought it was "obviously wrong", but it is not. I think the
wording is slightly misleading (e.g. "dirname" vs "dir-as-file-name"),
but nothing important.
Nicolas.
Eli Zaretskii <eliz <at> gnu.org> writes:
>> From: Nicolas Richard <youngfrog <at> members.fsf.org>
>> Cc: 27982 <at> debbugs.gnu.org
>> Date: Wed, 23 Aug 2017 21:18:53 +0200
>>
>> Ok so now I'm saying that, with the suggestion in the docstring, output
>> will be different if "dirname" ends in a slash.
>
> Of course. directory-file-name and file-name-directory look at the
> slashes, so having one more slash at the end changes everything.
> There's nothing new here.
>
> So where do we go from here, in the context of this bug report? What
> would you propose to change, where, and why?
>
> Thanks.
--
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#27982
; Package
emacs
.
(Sat, 02 Sep 2017 10:00:02 GMT)
Full text and
rfc822 format available.
Message #28 received at 27982 <at> debbugs.gnu.org (full text, mbox):
> From: Nicolas Richard <youngfrog <at> members.fsf.org>
> Cc: 27982-done <at> debbugs.gnu.org
> Date: Wed, 30 Aug 2017 17:43:51 +0200
>
> Thanks for your help but let me close this.
>
> I initially thought it was "obviously wrong", but it is not. I think the
> wording is slightly misleading (e.g. "dirname" vs "dir-as-file-name"),
> but nothing important.
I added a note to the doc string to make sure the trailing-slash issue
is not overlooked.
Thanks.
bug archived.
Request was from
Debbugs Internal Request <help-debbugs <at> gnu.org>
to
internal_control <at> debbugs.gnu.org
.
(Sat, 30 Sep 2017 11:24:07 GMT)
Full text and
rfc822 format available.
This bug report was last modified 7 years and 266 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.