[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#23050: package.el overwrites symlinks when saving
From: |
Bogolisk |
Subject: |
bug#23050: package.el overwrites symlinks when saving |
Date: |
Tue, 22 Mar 2016 16:51:50 +0000 (UTC) |
User-agent: |
Loom/3.14 (http://gmane.org/) |
Glenn Morris <rgm <at> gnu.org> writes:
>
> Glenn Morris wrote:
>
> > I see the relevant code binds file-precious-flag, so this is
> > http://debbugs.gnu.org/18125 .
>
> PS So package.el could avoid the issue by binding
> find-file-visit-truename, like cus-edit does (see bug#454).
>
>
The fix is for basic-save-buffer-2() to use buffer-file-truename when save-
by-rename.
--- files.old.el 2016-03-22 12:43:37.124790562 -0400
+++ files.new.el 2016-03-22 12:44:32.361602364 -0400
@@ -4840,29 +4840,29 @@
;; backup-buffer.
(defun basic-save-buffer-2 ()
(let (tempsetmodes setmodes)
- (if (not (file-writable-p buffer-file-name))
- (let ((dir (file-name-directory buffer-file-name)))
+ (if (not (file-writable-p buffer-file-truename))
+ (let ((dir (file-name-directory buffer-file-truename)))
(if (not (file-directory-p dir))
(if (file-exists-p dir)
(error "%s is not a directory" dir)
(error "%s: no such directory" dir))
- (if (not (file-exists-p buffer-file-name))
+ (if (not (file-exists-p buffer-file-truename))
(error "Directory %s write-protected" dir)
(if (yes-or-no-p
(format
"File %s is write-protected; try to save anyway? "
(file-name-nondirectory
- buffer-file-name)))
+ buffer-file-truename)))
(setq tempsetmodes t)
(error "Attempt to save to a file which you aren't allowed
to write"))))))
(or buffer-backed-up
(setq setmodes (backup-buffer)))
- (let* ((dir (file-name-directory buffer-file-name))
+ (let* ((dir (file-name-directory buffer-file-truename))
(dir-writable (file-writable-p dir)))
(if (or (and file-precious-flag dir-writable)
(and break-hardlink-on-save
- (file-exists-p buffer-file-name)
- (> (file-nlinks buffer-file-name) 1)
+ (file-exists-p buffer-file-truename)
+ (> (file-nlinks buffer-file-truename) 1)
(or dir-writable
(error (concat "Directory %s write-protected; "
"cannot break hardlink when saving")
@@ -4870,7 +4870,7 @@
;; Write temp name, then rename it.
;; This requires write access to the containing dir,
;; which is why we don't try it if we don't have that access.
- (let ((realname buffer-file-name)
+ (let ((realname buffer-file-truename)
tempname succeed
(umask (default-file-modes))
(old-modtime (visited-file-modtime)))
@@ -4911,13 +4911,13 @@
;; Since we have created an entirely new file,
;; make sure it gets the right permission bits set.
(setq setmodes (or setmodes
- (list (or (file-modes buffer-file-name)
+ (list (or (file-modes buffer-file-truename)
(logand ?\666 umask))
- (file-extended-attributes buffer-file-
name)
- buffer-file-name)))
+ (file-extended-attributes buffer-file-
truename)
+ buffer-file-truename)))
;; We succeeded in writing the temp file,
;; so rename it.
- (rename-file tempname buffer-file-name t))
+ (rename-file tempname buffer-file-truename t))
;; If file not writable, see if we can make it writable
;; temporarily while we write it.
;; But no need to do so if we have just backed it up