GNU bug report logs - #27982
25.1.50; expand-file-name docstring on how to traverse the filesystem

Previous Next

Package: emacs;

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.

View this report as an mbox folder, status mbox, maintainer mbox


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):

From: Nicolas Richard <youngfrog <at> members.fsf.org>
To: bug-gnu-emacs <at> gnu.org
Subject: 25.1.50; expand-file-name docstring on how to traverse the filesystem
Date: Sun, 06 Aug 2017 13:38:32 +0200
[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: Eli Zaretskii <eliz <at> gnu.org>
To: Nicolas Richard <youngfrog <at> members.fsf.org>
Cc: 27982 <at> debbugs.gnu.org
Subject: Re: bug#27982: 25.1.50;
 expand-file-name docstring on how to traverse the filesystem
Date: Sun, 06 Aug 2017 19:53:57 +0300
> 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):

From: Nicolas Richard <youngfrog <at> members.fsf.org>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 27982 <at> debbugs.gnu.org
Subject: Re: bug#27982: 25.1.50;
 expand-file-name docstring on how to traverse the filesystem
Date: Wed, 23 Aug 2017 14:18:24 +0200
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: Eli Zaretskii <eliz <at> gnu.org>
To: Nicolas Richard <youngfrog <at> members.fsf.org>
Cc: 27982 <at> debbugs.gnu.org
Subject: Re: bug#27982: 25.1.50;
 expand-file-name docstring on how to traverse the filesystem
Date: Wed, 23 Aug 2017 20:50:29 +0300
> 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):

From: Nicolas Richard <youngfrog <at> members.fsf.org>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 27982 <at> debbugs.gnu.org
Subject: Re: bug#27982: 25.1.50;
 expand-file-name docstring on how to traverse the filesystem
Date: Wed, 23 Aug 2017 21:18:53 +0200
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: Eli Zaretskii <eliz <at> gnu.org>
To: Nicolas Richard <youngfrog <at> members.fsf.org>
Cc: 27982 <at> debbugs.gnu.org
Subject: Re: bug#27982: 25.1.50;
 expand-file-name docstring on how to traverse the filesystem
Date: Thu, 24 Aug 2017 20:08:49 +0300
> 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):

From: Nicolas Richard <youngfrog <at> members.fsf.org>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 27982-done <at> debbugs.gnu.org
Subject: Re: bug#27982: 25.1.50;
 expand-file-name docstring on how to traverse the filesystem
Date: Wed, 30 Aug 2017 17:43:51 +0200
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: Eli Zaretskii <eliz <at> gnu.org>
To: Nicolas Richard <youngfrog <at> members.fsf.org>
Cc: 27982 <at> debbugs.gnu.org
Subject: Re: bug#27982: 25.1.50;
 expand-file-name docstring on how to traverse the filesystem
Date: Sat, 02 Sep 2017 12:59:03 +0300
> 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.