]> git.eshelyaron.com Git - emacs.git/commitdiff
Improve Tramp's write-region
authorMichael Albinus <michael.albinus@gmx.de>
Thu, 12 May 2022 07:03:45 +0000 (09:03 +0200)
committerMichael Albinus <michael.albinus@gmx.de>
Thu, 12 May 2022 07:03:45 +0000 (09:03 +0200)
* lisp/net/tramp-sudoedit.el (tramp-sudoedit-file-name-handler-alist):
Use `tramp-handle-write-region'.
(tramp-sudoedit-handle-write-region): Remove.

* lisp/net/tramp.el (tramp-skeleton-write-region):
Set extended attributes.

lisp/net/tramp-sudoedit.el
lisp/net/tramp.el

index fb885ebd054645b75b44b418b59b35c368c2058c..420a593644ff3e0358c0adb2b01936db44440193 100644 (file)
@@ -147,7 +147,7 @@ See `tramp-actions-before-shell' for more info.")
     (unlock-file . tramp-handle-unlock-file)
     (vc-registered . ignore)
     (verify-visited-file-modtime . tramp-handle-verify-visited-file-modtime)
-    (write-region . tramp-sudoedit-handle-write-region))
+    (write-region . tramp-handle-write-region))
   "Alist of handler functions for Tramp SUDOEDIT method.")
 
 ;; It must be a `defsubst' in order to push the whole code into
@@ -739,38 +739,6 @@ ID-FORMAT valid values are `string' and `integer'."
               (or gid (tramp-get-remote-gid v 'integer)))
        (tramp-unquote-file-local-name filename))))
 
-(defun tramp-sudoedit-handle-write-region
-  (start end filename &optional append visit lockname mustbenew)
-  "Like `write-region' for Tramp files."
-  (setq filename (expand-file-name filename))
-  (with-parsed-tramp-file-name filename nil
-    (let* ((uid (or (file-attribute-user-id (file-attributes filename 'integer))
-                   (tramp-get-remote-uid v 'integer)))
-          (gid (or (file-attribute-group-id (file-attributes filename 'integer))
-                   (tramp-get-remote-gid v 'integer)))
-          (flag (and (eq mustbenew 'excl) 'nofollow))
-          (modes (tramp-default-file-modes filename flag))
-          (attributes (file-extended-attributes filename)))
-      (prog1
-         (tramp-handle-write-region
-          start end filename append visit lockname mustbenew)
-
-       ;; Set the ownership, modes and extended attributes.  This is
-       ;; not performed in `tramp-handle-write-region'.
-       (unless (and (= (file-attribute-user-id
-                        (file-attributes filename 'integer))
-                       uid)
-                     (= (file-attribute-group-id
-                        (file-attributes filename 'integer))
-                       gid))
-          (tramp-set-file-uid-gid filename uid gid))
-       (tramp-compat-set-file-modes filename modes flag)
-       ;; We ignore possible errors, because ACL strings could be
-       ;; incompatible.
-       (when attributes
-         (ignore-errors
-           (set-file-extended-attributes filename attributes)))))))
-
 \f
 ;; Internal functions.
 
index b26346443dae26d15ee017be72f43db919fc61db..b06147599c16aa9015aa8216c6a2c8e58898c7c4 100644 (file)
@@ -3415,6 +3415,7 @@ BODY is the backend specific code."
               (gid (or (file-attribute-group-id
                         (file-attributes filename 'integer))
                        (tramp-get-remote-gid v 'integer)))
+              (attributes (file-extended-attributes filename))
               (curbuf (current-buffer)))
 
           ;; Lock file.
@@ -3453,6 +3454,12 @@ BODY is the backend specific code."
              (when need-chown
                (tramp-set-file-uid-gid filename uid gid)))
 
+          ;; Set extended attributes.  We ignore possible errors,
+          ;; because ACL strings could be incompatible.
+          (when attributes
+            (ignore-errors
+              (set-file-extended-attributes filename attributes)))
+
           ;; Unlock file.
           (when file-locked
             ;; `unlock-file' exists since Emacs 28.1.