emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 0bda1803bb: Fix thinko in tramp-skeleton-write-region


From: Michael Albinus
Subject: master 0bda1803bb: Fix thinko in tramp-skeleton-write-region
Date: Fri, 6 May 2022 04:38:08 -0400 (EDT)

branch: master
commit 0bda1803bb83de41d4f1d55ee3e2437f2177c076
Author: Michael Albinus <michael.albinus@gmx.de>
Commit: Michael Albinus <michael.albinus@gmx.de>

    Fix thinko in tramp-skeleton-write-region
    
    * lisp/net/tramp.el (tramp-skeleton-write-region): Fix typos.
    Flush cache in time.  (Bug#55247)
    (tramp-handle-lock-file): Suppress messages in `write-region'.
---
 lisp/net/tramp.el | 73 ++++++++++++++++++++++++++-----------------------------
 1 file changed, 35 insertions(+), 38 deletions(-)

diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index b889f1f884..34f256147b 100644
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -3377,83 +3377,80 @@ BODY is the backend specific code."
   "Skeleton for `tramp-*-handle-write-region'.
 BODY is the backend specific code."
   (declare (indent 7) (debug t))
-  `(with-parsed-tramp-file-name (expand-file-name ,filename) nil
-     (setq ,filename (expand-file-name ,filename)
-          ,lockname (file-truename (or ,lockname ,filename)))
-     ;; Sometimes, there is another file name handler responsible for
-     ;; VISIT, for example `jka-compr-handler'.  We must respect this.
-     ;; See Bug#55166.
-     (let ((handler (and (stringp ,visit)
-                        (let ((inhibit-file-name-handlers
-                               (cons 'tramp-file-name-handler
-                                     inhibit-file-name-handlers))
-                              (inhibit-file-name-operation 'write-region))
-                          (find-file-name-handler ,visit 'write-region)))))
+  ;; Sometimes, there is another file name handler responsible for
+  ;; VISIT, for example `jka-compr-handler'.  We must respect this.
+  ;; See Bug#55166.
+  `(let* ((filename (expand-file-name ,filename))
+        (lockname (file-truename (or ,lockname filename)))
+        (handler (and (stringp ,visit)
+                      (let ((inhibit-file-name-handlers
+                             (cons 'tramp-file-name-handler
+                                   inhibit-file-name-handlers))
+                            (inhibit-file-name-operation 'write-region))
+                        (find-file-name-handler ,visit 'write-region)))))
+     (with-parsed-tramp-file-name filename nil
        (if handler
           (progn
             (tramp-message
              v 5 "Calling handler `%s' for visiting `%s'" handler ,visit)
             (funcall
              handler 'write-region
-             ,start ,end ,filename ,append ,visit ,lockname ,mustbenew))
+             ,start ,end filename ,append ,visit lockname ,mustbenew))
 
-        (when (and ,mustbenew (file-exists-p ,filename)
+        (when (and ,mustbenew (file-exists-p filename)
                    (or (eq ,mustbenew 'excl)
                        (not
                         (y-or-n-p
                          (format
-                          "File %s exists; overwrite anyway?" ,filename)))))
-          (tramp-error v 'file-already-exists ,filename))
+                          "File %s exists; overwrite anyway?" filename)))))
+          (tramp-error v 'file-already-exists filename))
 
-        (let ((file-locked (eq (file-locked-p ,lockname) t))
+        (let ((file-locked (eq (file-locked-p lockname) t))
               (uid (or (file-attribute-user-id
-                        (file-attributes ,filename 'integer))
+                        (file-attributes filename 'integer))
                        (tramp-get-remote-uid v 'integer)))
               (gid (or (file-attribute-group-id
-                        (file-attributes ,filename 'integer))
+                        (file-attributes filename 'integer))
                        (tramp-get-remote-gid v 'integer)))
               (curbuf (current-buffer)))
 
           ;; Lock file.
           (when (and (not (auto-save-file-name-p
-                           (file-name-nondirectory ,filename)))
-                     (file-remote-p ,lockname)
+                           (file-name-nondirectory filename)))
+                     (file-remote-p lockname)
                      (not file-locked))
             (setq file-locked t)
             ;; `lock-file' exists since Emacs 28.1.
-            (tramp-compat-funcall 'lock-file ,lockname))
+            (tramp-compat-funcall 'lock-file lockname))
 
           ;; The body.
           ,@body
 
+          ;; We must also flush the cache of the directory, because
+          ;; `file-attributes' reads the values from there.
+          (tramp-flush-file-properties v localname)
+
           ;; We must protect `last-coding-system-used', now we have
           ;; set it to its correct value.
-          (let (last-coding-system-used (need-chown t))
+          (let (last-coding-system-used)
             ;; Set file modification time.
             (when (or (eq ,visit t) (stringp ,visit))
-               (let ((file-attr (file-attributes ,filename 'integer)))
+              (when-let ((file-attr (file-attributes filename 'integer)))
                 (set-visited-file-modtime
                  ;; We must pass modtime explicitly, because FILENAME
                  ;; can be different from (buffer-file-name), f.e. if
                  ;; `file-precious-flag' is set.
                  (or (file-attribute-modification-time file-attr)
                      (current-time)))
-                (when (and (= (file-attribute-user-id file-attr) uid)
-                           (= (file-attribute-group-id file-attr) gid))
-                  (setq need-chown nil))))
-
-            ;; Set the ownership.
-            (when need-chown
-               (tramp-set-file-uid-gid ,filename uid gid)))
-
-          ;; We must also flush the cache of the directory, because
-          ;; `file-attributes' reads the values from there.
-          (tramp-flush-file-properties v localname)
+                ;; Set the ownership.
+                (unless (and (= (file-attribute-user-id file-attr) uid)
+                             (= (file-attribute-group-id file-attr) gid))
+                  (tramp-set-file-uid-gid filename uid gid)))))
 
           ;; Unlock file.
           (when file-locked
             ;; `unlock-file' exists since Emacs 28.1.
-            (tramp-compat-funcall 'unlock-file ,lockname))
+            (tramp-compat-funcall 'unlock-file lockname))
 
           ;; Sanity check.
           (unless (equal curbuf (current-buffer))
@@ -3463,7 +3460,7 @@ BODY is the backend specific code."
 
           (when (and (null noninteractive)
                      (or (eq ,visit t) (string-or-null-p ,visit)))
-            (tramp-message v 0 "Wrote %s" ,filename))
+            (tramp-message v 0 "Wrote %s" filename))
           (run-hooks 'tramp-handle-write-region-hook))))))
 
 (put #'tramp-skeleton-write-region 'tramp-suppress-trace t)
@@ -4366,7 +4363,7 @@ Do not set it manually, it is used buffer-local in 
`tramp-get-lock-pid'.")
              (make-symbolic-link info lockname 'ok-if-already-exists)
            (error
             (with-file-modes #o0644
-               (write-region info nil lockname)))))))))
+               (write-region info nil lockname nil 'no-message)))))))))
 
 (defun tramp-handle-make-lock-file-name (file)
   "Like `make-lock-file-name' for Tramp files."



reply via email to

[Prev in Thread] Current Thread [Next in Thread]