all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Philip Hudson <phil.hudson@iname.com>
To: 33477@debbugs.gnu.org
Subject: bug#33477: 24.4; Eshell history/lastdir file symlinks not followed
Date: Sat, 24 Nov 2018 00:16:14 +0000	[thread overview]
Message-ID: <CAJ1MqVGFLCkQUaMBArRpFwy4fDB=qo=_GVTNsYDJ_uBeEgvgCw@mail.gmail.com> (raw)
In-Reply-To: <CAJ1MqVFNDtayq6O_B_dEibp5fieBgYQedsB=ykHSqkZYKsTJng@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 1266 bytes --]

Expanding on bug #33460 (see below), predictably enough, the same
issue applies to eshell's "lastdir" file too.

The attached patch provides the same fix, again using function
`file-truename'. It supplants my previous patch, which should be
discarded. So I guess bug #33640 should be closed now.




In GNU Emacs 24.4.1 (x86_64-pc-linux-gnu, GTK+ Version 3.14.5)
of 2017-09-12 on hullmann, modified by Debian
Windowing system distributor `The X.Org Foundation', version 11.0.11604000
System Description: LMDE 2 Betsy

---------- Forwarded message ---------
From: Philip Hudson <phil.hudson@iname.com>
Date: Wed, 21 Nov 2018 at 23:09
Subject: 24.4; Eshell histfile symlinks not followed
To: <bug-gnu-emacs@gnu.org>


If the file named by the value of option `eshell-history-file-name' is
a symbolic link, then it will be replaced and overwritten instead. It
should be dereferenced (followed) first, and its target file should be
replaced and overwritten.

The attached patch uses function `file-truename' to fix this. The
patch was made using source cloned from git savannah HEAD today, which
I think is version 26.1.90, based on ChangeLog.3 in the cloned repo.





-- 
Phil Hudson                  http://hudson-it.ddns.net
Pretty Good Privacy (PGP) ID: 0x4E482F85

[-- Attachment #2: eshellResolveHistAndDirsFile.patch --]
[-- Type: text/x-patch, Size: 2441 bytes --]

diff --git a/lisp/eshell/em-dirs.el b/lisp/eshell/em-dirs.el
index b7d13ee..c16a5ac 100644
--- a/lisp/eshell/em-dirs.el
+++ b/lisp/eshell/em-dirs.el
@@ -552,15 +552,16 @@ in the minibuffer:
 
 (defun eshell-write-last-dir-ring ()
   "Write the buffer's `eshell-last-dir-ring' to a history file."
-  (let ((file eshell-last-dir-ring-file-name))
+  (let* ((file eshell-last-dir-ring-file-name)
+	 (resolved-file (file-truename file)))
     (cond
      ((or (null file)
 	  (equal file "")
 	  (null eshell-last-dir-ring)
 	  (ring-empty-p eshell-last-dir-ring))
       nil)
-     ((not (file-writable-p file))
-      (message "Cannot write last-dir-ring file %s" file))
+     ((not (file-writable-p resolved-file))
+      (message "Cannot write last-dir-ring file %s" resolved-file))
      (t
       (let* ((ring eshell-last-dir-ring)
 	     (index (ring-length ring)))
@@ -570,7 +571,7 @@ in the minibuffer:
 	    (insert (ring-ref ring index) ?\n))
 	  (insert (eshell/pwd) ?\n)
 	  (eshell-with-private-file-modes
-	   (write-region (point-min) (point-max) file nil
+	   (write-region (point-min) (point-max) resolved-file nil
 			 'no-message))))))))
 
 (provide 'em-dirs)
diff --git a/lisp/eshell/em-hist.el b/lisp/eshell/em-hist.el
index 62e2f57..f866dfd 100644
--- a/lisp/eshell/em-hist.el
+++ b/lisp/eshell/em-hist.el
@@ -466,15 +466,16 @@ lost if `eshell-history-ring' is not empty.  If
 Useful within process sentinels.
 
 See also `eshell-read-history'."
-  (let ((file (or filename eshell-history-file-name)))
+  (let* ((file (or filename eshell-history-file-name))
+	 (resolved-file (file-truename file)))
     (cond
      ((or (null file)
 	  (equal file "")
 	  (null eshell-history-ring)
 	  (ring-empty-p eshell-history-ring))
       nil)
-     ((not (file-writable-p file))
-      (message "Cannot write history file %s" file))
+     ((not (file-writable-p resolved-file))
+      (message "Cannot write history file %s" resolved-file))
      (t
       (let* ((ring eshell-history-ring)
 	     (index (ring-length ring)))
@@ -489,7 +490,7 @@ See also `eshell-read-history'."
               (insert (substring-no-properties (ring-ref ring index)) ?\n)
 	      (subst-char-in-region start (1- (point)) ?\n ?\177)))
 	  (eshell-with-private-file-modes
-	   (write-region (point-min) (point-max) file append
+	   (write-region (point-min) (point-max) resolved-file append
 			 'no-message))))))))
 
 (defun eshell-list-history ()

  reply	other threads:[~2018-11-24  0:16 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-21 23:09 bug#33460: 24.4; Eshell histfile symlinks not followed Philip Hudson
2018-11-24  0:16 ` Philip Hudson [this message]
2018-12-08  9:20   ` bug#33477: 24.4; Eshell history/lastdir file " Eli Zaretskii
2018-12-08  9:15 ` bug#33460: 24.4; Eshell histfile " Eli Zaretskii

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAJ1MqVGFLCkQUaMBArRpFwy4fDB=qo=_GVTNsYDJ_uBeEgvgCw@mail.gmail.com' \
    --to=phil.hudson@iname.com \
    --cc=33477@debbugs.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.