]> git.eshelyaron.com Git - emacs.git/commitdiff
Still fixes for Tramp directory-files-*
authorMichael Albinus <michael.albinus@gmx.de>
Thu, 5 Nov 2020 16:36:04 +0000 (17:36 +0100)
committerMichael Albinus <michael.albinus@gmx.de>
Thu, 5 Nov 2020 16:36:04 +0000 (17:36 +0100)
* lisp/net/tramp.el (tramp-handle-directory-files):
* lisp/net/tramp-adb.el
(tramp-adb-handle-directory-files-and-attributes): Fix COUNT.

* lisp/net/tramp-crypt.el (tramp-crypt-handle-directory-files):
Implement COUNT.

* lisp/net/tramp-gvfs.el (tramp-gvfs-dbus-byte-array-to-string):
* lisp/net/tramp-integration.el (tramp-eshell-directory-change):
Use `nbutlast'.

* lisp/net/tramp-rclone.el (tramp-rclone-handle-delete-directory)
(tramp-rclone-handle-delete-file): Reorder cache flushing.
(tramp-rclone-handle-directory-files):
Use `tramp-compat-directory-files'.

* lisp/net/tramp-sh.el (tramp-sh-handle-directory-files-and-attributes):
Fix NOSORT and COUNT.

* lisp/net/tramp-smb.el (tramp-smb-handle-directory-files): Fix NOSORT.

* test/lisp/net/tramp-tests.el (tramp--test-share-p): New defun.
(tramp-test05-expand-file-name-relative): Use it.
(tramp-test16-directory-files)
(tramp-test19-directory-files-and-attributes): Strengthen test.
(tramp-test20-file-modes): Simplify check.

lisp/net/tramp-adb.el
lisp/net/tramp-crypt.el
lisp/net/tramp-gvfs.el
lisp/net/tramp-integration.el
lisp/net/tramp-rclone.el
lisp/net/tramp-sh.el
lisp/net/tramp-smb.el
lisp/net/tramp.el
test/lisp/net/tramp-tests.el

index 8ccbe412f2b15650526aa80255d9f2669e0f82c9..be83f670f7224ab44f360a3c28a2714b58721387 100644 (file)
@@ -350,8 +350,8 @@ ARGUMENTS to pass to the OPERATION."
                                                       match (car x)))
                                                  x))
                                  result)))
-             (when (natnump count)
-               (setq result (last result count)))
+            (when (and (natnump count) (> count 0))
+              (setq result (nbutlast result (- (length result) count))))
              result)))))))
 
 (defun tramp-adb-get-ls-command (vec)
index 286b60a48c27ebe179a9dc0d2288c14c056c79dc..4d34bbbeea694fa6d57b5d3e84ef8d7be958f6c3 100644 (file)
@@ -668,7 +668,8 @@ absolute file names."
     (let (tramp-crypt-enabled)
       (delete-file (tramp-crypt-encrypt-file-name filename)))))
 
-(defun tramp-crypt-handle-directory-files (directory &optional full match nosort)
+(defun tramp-crypt-handle-directory-files
+    (directory &optional full match nosort count)
   "Like `directory-files' for Tramp files."
   (unless (file-exists-p directory)
     (tramp-error
@@ -697,7 +698,11 @@ absolute file names."
                 (replace-regexp-in-string
                  (concat "^" (regexp-quote directory)) "" x))
               result)))
-      (if nosort result (sort result #'string<)))))
+      (unless nosort
+        (setq result (sort result #'string<)))
+      (when (and (natnump count) (> count 0))
+       (setq result (nbutlast result (- (length result) count))))
+      result)))
 
 (defun tramp-crypt-handle-file-attributes (filename &optional id-format)
   "Like `file-attributes' for Tramp files."
index 86fb45a43b755e24f1e7a4954b6e1e0e58da11d6..8f8e628ab9d9f1cc04358b95612d7b20a6429ff2 100644 (file)
@@ -876,7 +876,7 @@ Return nil for null BYTE-ARRAY."
                  byte-array (car byte-array))))
     (dbus-byte-array-to-string
      (if (and (consp byte-array) (zerop (car (last byte-array))))
-        (butlast byte-array) byte-array))))
+        (nbutlast byte-array) byte-array))))
 
 (defun tramp-gvfs-stringify-dbus-message (message)
   "Convert a D-Bus MESSAGE into readable UTF8 strings, used for traces."
index 7e4a9bf05e53b7d9914047a2336b437c0852e0ac..f712600072ea64ec3e0445b9101c483ebbfc8639 100644 (file)
@@ -132,7 +132,7 @@ been set up by `rfn-eshadow-setup-minibuffer'."
   ;; Use `path-separator' as it does eshell.
   (setq eshell-path-env
        (mapconcat
-        #'identity (butlast (tramp-compat-exec-path)) path-separator)))
+        #'identity (nbutlast (tramp-compat-exec-path)) path-separator)))
 
 (with-eval-after-load 'esh-util
   (add-hook 'eshell-mode-hook
index 1a7b0600d239c52b8972769fe46b0e6e96c7f04c..4790bb453d39752b985d0ee69b369280dab5abcc 100644 (file)
@@ -289,16 +289,16 @@ file names."
     (directory &optional recursive trash)
   "Like `delete-directory' for Tramp files."
   (with-parsed-tramp-file-name (expand-file-name directory) nil
-    (delete-directory (tramp-rclone-local-file-name directory) recursive trash)
     (tramp-flush-directory-properties v localname)
-    (tramp-rclone-flush-directory-cache v)))
+    (tramp-rclone-flush-directory-cache v)
+    (delete-directory (tramp-rclone-local-file-name directory) recursive trash)))
 
 (defun tramp-rclone-handle-delete-file (filename &optional trash)
   "Like `delete-file' for Tramp files."
   (with-parsed-tramp-file-name (expand-file-name filename) nil
+    (tramp-rclone-flush-directory-cache v)
     (delete-file (tramp-rclone-local-file-name filename) trash)
-    (tramp-flush-file-properties v localname)
-    (tramp-rclone-flush-directory-cache v)))
+    (tramp-flush-file-properties v localname)))
 
 (defun tramp-rclone-handle-directory-files
     (directory &optional full match nosort count)
@@ -311,8 +311,8 @@ file names."
     (setq directory (file-name-as-directory (expand-file-name directory)))
     (with-parsed-tramp-file-name directory nil
       (let ((result
-            (directory-files
-             (tramp-rclone-local-file-name directory) full match count)))
+            (tramp-compat-directory-files
+             (tramp-rclone-local-file-name directory) full match nosort count)))
        ;; Massage the result.
        (when full
          (let ((local (concat "^" (regexp-quote (tramp-rclone-mount-point v))))
index 655949a79b821f5795072ce1efefab144246f98f..51e15af2ef94a6ce0ac0ca10098700715fe3e30c 100644 (file)
@@ -1738,12 +1738,13 @@ ID-FORMAT valid values are `string' and `integer'."
            (setcar item (expand-file-name (car item) directory)))
          (push item result)))
 
-      (when (natnump count)
-        (setq result (last result count)))
+      (unless nosort
+       (setq result (sort result (lambda (x y) (string< (car x) (car y))))))
 
-      (or (if nosort
-             result
-           (sort result (lambda (x y) (string< (car x) (car y)))))
+      (when (and (natnump count) (> count 0))
+       (setq result (nbutlast result (- (length result) count))))
+
+      (or result
          ;; The scripts could fail, for example with huge file size.
          (tramp-handle-directory-files-and-attributes
           directory full match nosort id-format count)))))
index a0405085537c37f3db0ff6464aa02dce202bc8bb..0dd233aff09398ebfbe9994b5cf385cfbcbfd106 100644 (file)
@@ -704,6 +704,10 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored."
                    (mapcar (lambda (x) (when (string-match-p match x) x))
                            result))))
 
+    ;; Sort them if necessary.
+    (unless nosort
+      (setq result (sort result #'string-lessp)))
+
     ;; Return count number of results.
     (when (and (natnump count) (> count 0))
       (setq result (nbutlast result (- (length result) count))))
@@ -714,8 +718,7 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored."
            (mapcar
             (lambda (x) (format "%s/%s" (directory-file-name directory) x))
             result)))
-    ;; Sort them if necessary.
-    (unless nosort (setq result (sort result #'string-lessp)))
+
     result))
 
 (defun tramp-smb-handle-expand-file-name (name &optional dir)
index 1859e84375883973d993af207917371979d0e62a..55f652fa9a6f8d602826e42f547f48703c231dd4 100644 (file)
@@ -3134,8 +3134,8 @@ User is always nil."
                result)))
       (unless nosort
         (setq result (sort result #'string<)))
-      (when (natnump count)
-        (setq result (last result count)))
+      (when (and (natnump count) (> count 0))
+       (setq result (nbutlast result (- (length result) count))))
       result)))
 
 (defun tramp-handle-directory-files-and-attributes
index 2670723ecdc7318f4c5e5d4304d09c40329261d0..7b83a8deebd347bcd329e91945d6e57b06d0c3c3 100644 (file)
@@ -2169,6 +2169,8 @@ is greater than 10.
   (skip-unless (tramp--test-enabled))
   ;; The bugs are fixed in Emacs 28.1.
   (skip-unless (tramp--test-emacs28-p))
+  ;; Methods with a share do not expand "/path/..".
+  (skip-unless (not (tramp--test-share-p)))
 
   (should
    (string-equal
@@ -2931,10 +2933,10 @@ This tests also `file-directory-p' and `file-accessible-directory-p'."
            (when (tramp--test-emacs28-p)
              (with-no-warnings
                (should
-                (= 1 (length
-                      (directory-files
-                       tmp-name1 nil directory-files-no-dot-files-regexp
-                       nil 1)))))))
+                (equal
+                 (directory-files
+                  tmp-name1 nil directory-files-no-dot-files-regexp nil 1)
+                 '("bla"))))))
 
        ;; Cleanup.
        (ignore-errors (delete-directory tmp-name1 'recursive))))))
@@ -3457,8 +3459,9 @@ They might differ only in time attributes or directory size."
            ;; Check the COUNT arg.  It exists since Emacs 28.
            (when (tramp--test-emacs28-p)
              (with-no-warnings
-               (should (= 1 (length (directory-files-and-attributes
-                                     tmp-name2 nil "\\`b" nil nil 1)))))))
+               (setq attr (directory-files-and-attributes
+                           tmp-name2 nil "\\`b" nil nil 1))
+               (should (equal (mapcar #'car attr) '("bar"))))))
 
        ;; Cleanup.
        (ignore-errors (delete-directory tmp-name1 'recursive))))))
@@ -3470,10 +3473,7 @@ This tests also `file-executable-p', `file-writable-p' and `set-file-modes'."
   (skip-unless
    (or (tramp--test-sh-p) (tramp--test-sudoedit-p)
        ;; Not all tramp-gvfs.el methods support changing the file mode.
-       (and
-       (tramp--test-gvfs-p)
-       (string-match-p
-        "ftp" (file-remote-p tramp-test-temporary-file-directory 'method)))))
+       (tramp--test-gvfs-p "afp") (tramp--test-gvfs-p "ftp")))
 
   (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
     (let ((tmp-name1 (tramp--test-make-temp-name nil quoted))
@@ -5705,6 +5705,13 @@ This does not support special file names."
   (tramp-sh-file-name-handler-p
    (tramp-dissect-file-name tramp-test-temporary-file-directory)))
 
+(defun tramp--test-share-p ()
+  "Check, whether the method needs a share."
+  (and (tramp--test-gvfs-p)
+       (string-match-p
+       "^\\(afp\\|davs?\\|smb\\)$"
+       (file-remote-p tramp-test-temporary-file-directory 'method))))
+
 (defun tramp--test-sudoedit-p ()
   "Check, whether the sudoedit method is used."
   (tramp-sudoedit-file-name-p tramp-test-temporary-file-directory))