From ba7e9579260e146d53d1fc039ff2035ff45fca75 Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Sat, 11 Oct 2025 14:37:04 +0200 Subject: [PATCH] Make cascaded archives working in tramp-archive.el work, again * lisp/net/tramp-archive.el (tramp-archive-file-name-handler): Move bindings of `tramp-methods' and `tramp-gvfs-methods' up. (tramp-archive-file-name-handler): Do not use `tramp-archive-run-real-handler' for testing existence of `archive'. (Bug#79582) * test/lisp/net/tramp-archive-tests.el (tramp-archive-test-file-archive-hexlified): Move down. (tramp-archive-test-cascaded-file-archive) (tramp-archive-test-cascaded-archive, tramp-archive-test-cascaded): New defvars. (tramp-archive--test-deftest-cascaded): New defmacro. (tramp-archive-test01-file-name-syntax) (tramp-archive-test05-expand-file-name): Adapt tests. (tramp-archive-test01-file-name-syntax-cascaded) (tramp-archive-test05-expand-file-name-cascaded) (tramp-archive-test06-directory-file-name-cascaded) (tramp-archive-test07-file-exists-p-cascaded) (tramp-archive-test08-file-local-copy-cascaded) (tramp-archive-test09-insert-file-contents-cascaded) (tramp-archive-test11-copy-file-cascaded) (tramp-archive-test15-copy-directory-cascaded) (tramp-archive-test16-directory-files-cascaded) (tramp-archive-test17-insert-directory-cascaded) (tramp-archive-test18-file-attributes-cascaded) (tramp-archive-test19-directory-files-and-attributes-cascaded) (tramp-archive-test20-file-modes-cascaded) (tramp-archive-test21-file-links-cascaded) (tramp-archive-test26-file-name-completion-cascaded) (tramp-archive-test40-make-nearby-temp-file-cascaded) (tramp-archive-test43-file-system-info-cascaded) (tramp-archive-test44-user-group-ids-cascaded): New tests. * test/lisp/net/tramp-archive-resources/outer.zip: New test file. --- lisp/net/tramp-archive.el | 11 +-- .../net/tramp-archive-resources/outer.zip | Bin 0 -> 444 bytes test/lisp/net/tramp-archive-tests.el | 91 +++++++++++++++--- 3 files changed, 85 insertions(+), 17 deletions(-) create mode 100644 test/lisp/net/tramp-archive-resources/outer.zip diff --git a/lisp/net/tramp-archive.el b/lisp/net/tramp-archive.el index 3de909911b4..a52b8be6e09 100644 --- a/lisp/net/tramp-archive.el +++ b/lisp/net/tramp-archive.el @@ -338,15 +338,16 @@ arguments to pass to the OPERATION." (tramp-register-file-name-handlers) (tramp-archive-run-real-handler operation args)) - (let* ((filename (apply #'tramp-archive-file-name-for-operation + (let* ((tramp-methods (cons `(,tramp-archive-method) tramp-methods)) + (tramp-gvfs-methods tramp-archive-all-gvfs-methods) + (filename (apply #'tramp-archive-file-name-for-operation operation args)) (archive (tramp-archive-file-name-archive filename))) ;; `filename' could be a quoted file name. Or the file ;; archive could be a directory, see Bug#30293. (if (or (null archive) - (not (tramp-archive-run-real-handler - #'file-exists-p (list archive))) + (not (file-exists-p archive)) (tramp-archive-run-real-handler #'file-directory-p (list archive))) (tramp-archive-run-real-handler operation args) @@ -358,9 +359,7 @@ arguments to pass to the OPERATION." (tramp-get-buffer (tramp-archive-dissect-file-name filename)) (setq default-directory (file-name-as-directory archive))) ;; Now run the handler. - (let ((tramp-methods (cons `(,tramp-archive-method) tramp-methods)) - (tramp-gvfs-methods tramp-archive-all-gvfs-methods) - ;; Set uid and gid. gvfsd-archive could do it, but it doesn't. + (let (;; Set uid and gid. gvfsd-archive could do it, but it doesn't. (tramp-unknown-id-integer (user-uid)) (tramp-unknown-id-string (user-login-name)) (fn (assoc operation tramp-archive-file-name-handler-alist))) diff --git a/test/lisp/net/tramp-archive-resources/outer.zip b/test/lisp/net/tramp-archive-resources/outer.zip new file mode 100644 index 0000000000000000000000000000000000000000..deda1013eb047b38dbe018005f6cd4e28f0f98c9 GIT binary patch literal 444 zcmWIWW@h1H0D;^|F+toNd+dZ585lsAi$R7VEk9qcB(X>@y(%<>lYx2O1?vQk+~*mk z72FJrEH9WD7{G*lHwQ1T7@qQT6zA?c#;xyJ3k~4&(AMiRR?^a!@4d9J zEb-_|i!FPvt$KUu`M;8yA9v&5$A_Hy`8>3=U#Q^n5A~nFcmG+-5_l_Q?W?Xo;lz_*r&%JT!f0)f*`_?0W_y72_^S}69`|tK(A47=`i?+2NuDV_y zayR+NpXsJ;Ki6wM`7`r>)P_s{@BUl;N^bhk`#<`B#*5DhzcuYq+vk9-7QgoY(w8g# zSAF`YJ?pu8m|6GE^ZNvI%wz~)U