emacs-diffs
[Top][All Lists]
Advanced

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

emacs-29 c42970d7758: Handle last-coding-system-used in Tramp for all ba


From: Michael Albinus
Subject: emacs-29 c42970d7758: Handle last-coding-system-used in Tramp for all backends
Date: Sun, 13 Aug 2023 10:48:13 -0400 (EDT)

branch: emacs-29
commit c42970d7758c43a74ebd09ff506525d879d03708
Author: Michael Albinus <michael.albinus@gmx.de>
Commit: Michael Albinus <michael.albinus@gmx.de>

    Handle last-coding-system-used in Tramp for all backends
    
    * lisp/net/tramp.el (tramp-skeleton-write-region):
    Handle `last-coding-system-used'.
    (tramp-handle-write-region):
    * lisp/net/tramp-adb.el (tramp-adb-handle-write-region):
    * lisp/net/tramp-smb.el (tramp-smb-handle-write-region):
    * lisp/net/tramp-sshfs.el (tramp-sshfs-handle-write-region):
    Set `coding-system-used'.  (Bug#65022)
    
    * lisp/net/tramp-sh.el (tramp-sh-handle-write-region):
    Move `last-coding-system-used' handling to
    `tramp-skeleton-write-region'.
---
 lisp/net/tramp-adb.el   |  2 ++
 lisp/net/tramp-sh.el    | 23 +++++------------------
 lisp/net/tramp-smb.el   |  2 ++
 lisp/net/tramp-sshfs.el |  4 +++-
 lisp/net/tramp.el       | 38 +++++++++++++++++++++++++-------------
 5 files changed, 37 insertions(+), 32 deletions(-)

diff --git a/lisp/net/tramp-adb.el b/lisp/net/tramp-adb.el
index 58c93245335..f16c97a235c 100644
--- a/lisp/net/tramp-adb.el
+++ b/lisp/net/tramp-adb.el
@@ -552,6 +552,8 @@ Emacs dired can't find files."
          (set-file-modes tmpfile (logior (or (file-modes tmpfile) 0) #o0600)))
        (let (create-lockfiles)
           (write-region start end tmpfile append 'no-message))
+       ;; Now, `last-coding-system-used' has the right value.  Remember it.
+       (setq coding-system-used last-coding-system-used)
        (with-tramp-progress-reporter
            v 3 (format-message
                 "Moving tmp file `%s' to `%s'" tmpfile filename)
diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el
index 9895af92502..ffd910b41c4 100644
--- a/lisp/net/tramp-sh.el
+++ b/lisp/net/tramp-sh.el
@@ -3446,15 +3446,6 @@ implementation will be used."
 
        (let* ((modes (tramp-default-file-modes
                       filename (and (eq mustbenew 'excl) 'nofollow)))
-              ;; We use this to save the value of
-              ;; `last-coding-system-used' after writing the tmp
-              ;; file.  At the end of the function, we set
-              ;; `last-coding-system-used' to this saved value.  This
-              ;; way, any intermediary coding systems used while
-              ;; talking to the remote shell or suchlike won't hose
-              ;; this variable.  This approach was snarfed from
-              ;; ange-ftp.el.
-              coding-system-used
               ;; Write region into a tmp file.  This isn't really
               ;; needed if we use an encoding function, but currently
               ;; we use it always because this makes the logic
@@ -3484,11 +3475,11 @@ implementation will be used."
              ((error quit)
               (setq tramp-temp-buffer-file-name nil)
               (delete-file tmpfile)
-              (signal (car err) (cdr err))))
+              (signal (car err) (cdr err)))))
 
-           ;; Now, `last-coding-system-used' has the right value.
-           ;; Remember it.
-           (setq coding-system-used last-coding-system-used))
+         ;; Now, `last-coding-system-used' has the right value.
+         ;; Remember it.
+         (setq coding-system-used last-coding-system-used)
 
          ;; The permissions of the temporary file should be set.  If
          ;; FILENAME does not exist (eq modes nil) it has been
@@ -3618,11 +3609,7 @@ implementation will be used."
               v 'file-error
               (concat "Method `%s' should specify both encoding and "
                       "decoding command or an scp program")
-              method))))
-
-         ;; Make `last-coding-system-used' have the right value.
-         (when coding-system-used
-           (setq last-coding-system-used coding-system-used)))))))
+              method)))))))))
 
 (defvar tramp-vc-registered-file-names nil
   "List used to collect file names, which are checked during `vc-registered'.")
diff --git a/lisp/net/tramp-smb.el b/lisp/net/tramp-smb.el
index c50bd5b387f..7249fa266ac 100644
--- a/lisp/net/tramp-smb.el
+++ b/lisp/net/tramp-smb.el
@@ -1628,6 +1628,8 @@ VEC or USER, or if there is no home directory, return 
nil."
       ;; `set-visited-file-modtime' ourselves later on.
       (let (create-lockfiles)
         (write-region start end tmpfile append 'no-message))
+      ;; Now, `last-coding-system-used' has the right value.  Remember it.
+      (setq coding-system-used last-coding-system-used)
 
       (with-tramp-progress-reporter
          v 3 (format "Moving tmp file %s to %s" tmpfile filename)
diff --git a/lisp/net/tramp-sshfs.el b/lisp/net/tramp-sshfs.el
index 0ec2a1e74b8..c638d32ec35 100644
--- a/lisp/net/tramp-sshfs.el
+++ b/lisp/net/tramp-sshfs.el
@@ -379,7 +379,9 @@ arguments to pass to the OPERATION."
   (tramp-skeleton-write-region start end filename append visit lockname 
mustbenew
     (let (create-lockfiles)
       (write-region
-       start end (tramp-fuse-local-file-name filename) append 'nomessage))))
+       start end (tramp-fuse-local-file-name filename) append 'nomessage))
+    ;; Now, `last-coding-system-used' has the right value.  Remember it.
+    (setq coding-system-used last-coding-system-used)))
 
 
 ;; File name conversions.
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index 9fa698293ce..caa6baabc31 100644
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -3719,14 +3719,22 @@ BODY is the backend specific code."
   ;; 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
-                             `(tramp-file-name-handler
-                               tramp-crypt-file-name-handler
-                               . inhibit-file-name-handlers))
-                            (inhibit-file-name-operation 'write-region))
-                        (find-file-name-handler ,visit 'write-region)))))
+         (lockname (file-truename (or ,lockname filename)))
+         (handler (and (stringp ,visit)
+                       (let ((inhibit-file-name-handlers
+                              `(tramp-file-name-handler
+                                tramp-crypt-file-name-handler
+                                . inhibit-file-name-handlers))
+                             (inhibit-file-name-operation 'write-region))
+                         (find-file-name-handler ,visit 'write-region))))
+         ;; We use this to save the value of
+         ;; `last-coding-system-used' after writing the tmp file.  At
+         ;; the end of the function, we set `last-coding-system-used'
+         ;; to this saved value.  This way, any intermediary coding
+         ;; systems used while talking to the remote shell or
+         ;; suchlike won't hose this variable.  This approach was
+         ;; snarfed from ange-ftp.el.
+         coding-system-used)
      (with-parsed-tramp-file-name filename nil
        (if handler
           (progn
@@ -3773,9 +3781,7 @@ BODY is the backend specific code."
           ;; likely that it is needed shortly after `write-region'.
           (tramp-set-file-property v localname "file-exists-p" t)
 
-          ;; 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 ((need-chown t))
             ;; Set file modification time.
             (when (or (eq ,visit t) (stringp ,visit))
               (when-let ((file-attr (file-attributes filename 'integer)))
@@ -3794,7 +3800,7 @@ BODY is the backend specific code."
                (tramp-set-file-uid-gid filename uid gid))
 
             ;; Set extended attributes.  We ignore possible errors,
-            ;; because ACL strings could be incompatible.
+            ;; because ACL strings or SELinux contexts could be incompatible.
             (when attributes
               (ignore-errors
                 (set-file-extended-attributes filename attributes)))
@@ -3813,7 +3819,11 @@ 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))
-            (run-hooks 'tramp-handle-write-region-hook)))))))
+            (run-hooks 'tramp-handle-write-region-hook))))
+
+       ;; Make `last-coding-system-used' have the right value.
+       (when coding-system-used
+        (setq last-coding-system-used coding-system-used)))))
 
 ;;; Common file name handler functions for different backends:
 
@@ -5420,6 +5430,8 @@ of."
       ;; `set-visited-file-modtime' ourselves later on.
       (let (create-lockfiles)
         (write-region start end tmpfile append 'no-message))
+      ;; Now, `last-coding-system-used' has the right value.  Remember it.
+      (setq coding-system-used last-coding-system-used)
       (condition-case nil
          (rename-file tmpfile filename 'ok-if-already-exists)
        (error



reply via email to

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