emacs/test/lisp/net/tramp-tests.el

6042 lines
222 KiB
EmacsLisp
Raw Normal View History

;;; tramp-tests.el --- Tests of remote file access -*- lexical-binding:t -*-
2013-11-05 15:46:57 +01:00
;; Copyright (C) 2013-2019 Free Software Foundation, Inc.
2013-11-05 15:46:57 +01:00
;; Author: Michael Albinus <michael.albinus@gmx.de>
;; This program is free software: you can redistribute it and/or
;; modify it under the terms of the GNU General Public License as
;; published by the Free Software Foundation, either version 3 of the
;; License, or (at your option) any later version.
;;
;; This program is distributed in the hope that it will be useful, but
;; WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;; General Public License for more details.
;;
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see `https://www.gnu.org/licenses/'.
2013-11-05 15:46:57 +01:00
;;; Commentary:
;; Some of the tests require access to a remote host files. Since
;; this could be problematic, a mock-up connection method "mock" is
;; used. Emulating a remote connection, it simply calls "sh -i".
;; Tramp's file name handlers still run, so this test is sufficient
;; except for connection establishing.
;; If you want to test a real Tramp connection, set
;; $REMOTE_TEMPORARY_FILE_DIRECTORY to a suitable value in order to
;; overwrite the default value. If you want to skip tests accessing a
;; remote host, set this environment variable to "/dev/null" or
;; whatever is appropriate on your system.
2013-11-05 15:46:57 +01:00
;; For slow remote connections, `tramp-test43-asynchronous-requests'
;; might be too heavy. Setting $REMOTE_PARALLEL_PROCESSES to a proper
;; value less than 10 could help.
;; A whole test run can be performed calling the command `tramp-test-all'.
2013-11-05 15:46:57 +01:00
;;; Code:
(require 'cl-lib)
(require 'dired)
2013-11-05 15:46:57 +01:00
(require 'ert)
(require 'ert-x)
2013-11-05 15:46:57 +01:00
(require 'tramp)
(require 'vc)
(require 'vc-bzr)
(require 'vc-git)
(require 'vc-hg)
(declare-function tramp-find-executable "tramp-sh")
(declare-function tramp-get-remote-path "tramp-sh")
(declare-function tramp-get-remote-perl "tramp-sh")
(declare-function tramp-get-remote-stat "tramp-sh")
(declare-function tramp-list-tramp-buffers "tramp-cmds")
(declare-function tramp-method-out-of-band-p "tramp-sh")
(declare-function tramp-smb-get-localname "tramp-smb")
Improve Tramp's caching * lisp/net/tramp.el (tramp-handle-add-name-to-file) (tramp-handle-write-region): * lisp/net/tramp-adb.el (tramp-adb-handle-make-directory) (tramp-adb-handle-delete-directory) (tramp-adb-handle-delete-file, tramp-adb-handle-write-region) (tramp-adb-handle-set-file-modes) (tramp-adb-handle-set-file-times, tramp-adb-handle-copy-file) (tramp-adb-handle-rename-file): * lisp/net/tramp-gvfs.el (tramp-gvfs-do-copy-or-rename-file) (tramp-gvfs-handle-delete-directory) (tramp-gvfs-handle-delete-file) (tramp-gvfs-handle-make-directory) (tramp-gvfs-handle-set-file-modes) (tramp-gvfs-handle-set-file-times, tramp-gvfs-set-file-uid-gid): * lisp/net/tramp-rclone.el (tramp-rclone-do-copy-or-rename-file) (tramp-rclone-handle-delete-directory) (tramp-rclone-handle-delete-file): * lisp/net/tramp-sh.el (tramp-sh-handle-make-symbolic-link) (tramp-sh-handle-set-file-modes, tramp-sh-handle-set-file-times) (tramp-sh-handle-add-name-to-file) (tramp-sh-handle-copy-directory, tramp-do-copy-or-rename-file) (tramp-sh-handle-delete-directory, tramp-sh-handle-delete-file) (tramp-sh-handle-write-region): * lisp/net/tramp-smb.el (tramp-smb-handle-add-name-to-file) (tramp-smb-handle-copy-directory, tramp-smb-handle-copy-file) (tramp-smb-handle-delete-directory) (tramp-smb-handle-delete-file) (tramp-smb-handle-make-directory-internal) (tramp-smb-handle-make-symbolic-link) (tramp-smb-handle-rename-file, tramp-smb-handle-write-region): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-handle-add-name-to-file) (tramp-sudoedit-do-copy-or-rename-file) (tramp-sudoedit-handle-delete-directory) (tramp-sudoedit-handle-delete-file) (tramp-sudoedit-handle-set-file-modes) (tramp-sudoedit-handle-set-file-times) (tramp-sudoedit-handle-make-symbolic-link): Do not flush all file properties of upper directory. * lisp/net/tramp-cache.el (tramp-flush-file-upper-properties): New defun. (tramp-flush-file-properties, tramp-flush-directory-properties): Use it. * test/lisp/net/tramp-tests.el (tramp-time-diff): Declare. (tramp--test-file-attributes-equal-p): Handle also modification and status change time.
2019-08-05 13:09:26 +02:00
(declare-function tramp-time-diff "tramp")
(defvar auto-save-file-name-transforms)
Reduce autoloaded objects in Tramp * lisp/net/tramp-adb.el (tramp-adb-program) (tramp-adb-connect-if-not-connected, tramp-adb-prompt): Remove autoload cookie. * lisp/net/tramp-cache.el (tramp-connection-properties) (tramp-persistency-file-name): Remove autoload cookie. * lisp/net/tramp-ftp.el (tramp-ftp-enable-ange-ftp): Use `tramp-autoload' cookie. * lisp/net/tramp-gvfs.el (tramp-gvfs-zeroconf-domain): Remove autoload cookie. * lisp/net/tramp-rclone.el (tramp-rclone-program): Remove autoload cookie. (tramp-set-completion-function): Use `tramp--with-startup'. * lisp/net/tramp-sh.el (tramp-inline-compress-start-size) (tramp-copy-size-limit, tramp-histfile-override) (tramp-use-ssh-controlmaster-options, tramp-remote-path) (tramp-remote-process-environment, tramp-sh-extra-args): Remove autoload cookie. (tramp-stat-marker, tramp-stat-quoted-marker): Move to tramp.el. * lisp/net/tramp-smb.el (tramp-smb-program) (tramp-smb-acl-program, tramp-smb-conf) (tramp-smb-winexe-program, tramp-smb-winexe-shell-command) (tramp-smb-winexe-shell-command-switch): Remove autoload cookie. * lisp/net/tramp-sudoedit.el (server, tramp-sh): Do not require. * lisp/net/tramp.el (tramp--startup-hook): Define. (tramp-stat-marker, tramp-stat-quoted-marker): New defconsts, taken from tramp-sh.el. * test/lisp/net/tramp-archive-tests.el (tramp-copy-size-limit) (tramp-persistency-file-name): Declare. * test/lisp/net/tramp-tests.el (tramp-connection-properties) (tramp-display-escape-sequence-regexp) (tramp-inline-compress-start-size, tramp-remote-path): Declare.
2018-12-17 11:50:06 +01:00
(defvar tramp-connection-properties)
(defvar tramp-copy-size-limit)
Reduce autoloaded objects in Tramp * lisp/net/tramp-adb.el (tramp-adb-program) (tramp-adb-connect-if-not-connected, tramp-adb-prompt): Remove autoload cookie. * lisp/net/tramp-cache.el (tramp-connection-properties) (tramp-persistency-file-name): Remove autoload cookie. * lisp/net/tramp-ftp.el (tramp-ftp-enable-ange-ftp): Use `tramp-autoload' cookie. * lisp/net/tramp-gvfs.el (tramp-gvfs-zeroconf-domain): Remove autoload cookie. * lisp/net/tramp-rclone.el (tramp-rclone-program): Remove autoload cookie. (tramp-set-completion-function): Use `tramp--with-startup'. * lisp/net/tramp-sh.el (tramp-inline-compress-start-size) (tramp-copy-size-limit, tramp-histfile-override) (tramp-use-ssh-controlmaster-options, tramp-remote-path) (tramp-remote-process-environment, tramp-sh-extra-args): Remove autoload cookie. (tramp-stat-marker, tramp-stat-quoted-marker): Move to tramp.el. * lisp/net/tramp-smb.el (tramp-smb-program) (tramp-smb-acl-program, tramp-smb-conf) (tramp-smb-winexe-program, tramp-smb-winexe-shell-command) (tramp-smb-winexe-shell-command-switch): Remove autoload cookie. * lisp/net/tramp-sudoedit.el (server, tramp-sh): Do not require. * lisp/net/tramp.el (tramp--startup-hook): Define. (tramp-stat-marker, tramp-stat-quoted-marker): New defconsts, taken from tramp-sh.el. * test/lisp/net/tramp-archive-tests.el (tramp-copy-size-limit) (tramp-persistency-file-name): Declare. * test/lisp/net/tramp-tests.el (tramp-connection-properties) (tramp-display-escape-sequence-regexp) (tramp-inline-compress-start-size, tramp-remote-path): Declare.
2018-12-17 11:50:06 +01:00
(defvar tramp-display-escape-sequence-regexp)
(defvar tramp-inline-compress-start-size)
(defvar tramp-persistency-file-name)
Reduce autoloaded objects in Tramp * lisp/net/tramp-adb.el (tramp-adb-program) (tramp-adb-connect-if-not-connected, tramp-adb-prompt): Remove autoload cookie. * lisp/net/tramp-cache.el (tramp-connection-properties) (tramp-persistency-file-name): Remove autoload cookie. * lisp/net/tramp-ftp.el (tramp-ftp-enable-ange-ftp): Use `tramp-autoload' cookie. * lisp/net/tramp-gvfs.el (tramp-gvfs-zeroconf-domain): Remove autoload cookie. * lisp/net/tramp-rclone.el (tramp-rclone-program): Remove autoload cookie. (tramp-set-completion-function): Use `tramp--with-startup'. * lisp/net/tramp-sh.el (tramp-inline-compress-start-size) (tramp-copy-size-limit, tramp-histfile-override) (tramp-use-ssh-controlmaster-options, tramp-remote-path) (tramp-remote-process-environment, tramp-sh-extra-args): Remove autoload cookie. (tramp-stat-marker, tramp-stat-quoted-marker): Move to tramp.el. * lisp/net/tramp-smb.el (tramp-smb-program) (tramp-smb-acl-program, tramp-smb-conf) (tramp-smb-winexe-program, tramp-smb-winexe-shell-command) (tramp-smb-winexe-shell-command-switch): Remove autoload cookie. * lisp/net/tramp-sudoedit.el (server, tramp-sh): Do not require. * lisp/net/tramp.el (tramp--startup-hook): Define. (tramp-stat-marker, tramp-stat-quoted-marker): New defconsts, taken from tramp-sh.el. * test/lisp/net/tramp-archive-tests.el (tramp-copy-size-limit) (tramp-persistency-file-name): Declare. * test/lisp/net/tramp-tests.el (tramp-connection-properties) (tramp-display-escape-sequence-regexp) (tramp-inline-compress-start-size, tramp-remote-path): Declare.
2018-12-17 11:50:06 +01:00
(defvar tramp-remote-path)
(defvar tramp-remote-process-environment)
Add new Tramp connection method "owncloud" * doc/misc/tramp.texi (all): Use @acronym{GNOME} thoroughly. (Using GNOME Online Accounts based methods): Rename from "Using Google Drive". Add `owncloud'. (GVFS based methods): Add `owncloud'. * etc/NEWS: Add Tramp connection method "owncloud". * lisp/net/tramp-gvfs.el (tramp-gvfs-methods): Add "owncloud". Remove goa methods if not supported. (tramp-goa-methods, tramp-goa-service, tramp-goa-path) (tramp-goa-path-accounts, tramp-goa-interface-documents) (tramp-goa-interface-printers, tramp-goa-interface-files) (tramp-goa-interface-contacts, tramp-goa-interface-calendar) (tramp-goa-interface-oauth2based) (tramp-goa-interface-account, tramp-goa-identity-regexp) (tramp-goa-interface-mail, tramp-goa-interface-chat) (tramp-goa-interface-photos, tramp-goa-path-manager) (tramp-goa-interface-documents) (tramp-gvfs-owncloud-default-prefix) (tramp-gvfs-owncloud-default-prefix-regexp): New defconst. (tramp-goa-name): New defstruct. (tramp-gvfs-stringify-dbus-message): Handle all consp messages. (tramp-dbus-function, tramp-gvfs-get-remote-prefix) (tramp-get-goa-accounts): New defun. (with-tramp-dbus-call-method): Use it. (with-tramp-dbus-get-all-properties): New defmacro. (tramp-gvfs-url-file-name) (tramp-gvfs-handler-mounted-unmounted) (tramp-gvfs-connection-mounted-p, tramp-gvfs-mount-spec): Map between "owncloud" and "davs". (tramp-gvfs-maybe-open-connection): Set "vector" connection property. * test/lisp/net/tramp-tests.el (tramp-gvfs-handler-askquestion): Suppress run in tests. (tramp--test-owncloud-p): New defun. (tramp-test11-copy-file, tramp-test12-rename-file): Use it.
2018-01-05 21:04:39 +01:00
;; Beautify batch mode.
(when noninteractive
;; Suppress nasty messages.
(fset #'shell-command-sentinel #'ignore)
Add new Tramp connection method "owncloud" * doc/misc/tramp.texi (all): Use @acronym{GNOME} thoroughly. (Using GNOME Online Accounts based methods): Rename from "Using Google Drive". Add `owncloud'. (GVFS based methods): Add `owncloud'. * etc/NEWS: Add Tramp connection method "owncloud". * lisp/net/tramp-gvfs.el (tramp-gvfs-methods): Add "owncloud". Remove goa methods if not supported. (tramp-goa-methods, tramp-goa-service, tramp-goa-path) (tramp-goa-path-accounts, tramp-goa-interface-documents) (tramp-goa-interface-printers, tramp-goa-interface-files) (tramp-goa-interface-contacts, tramp-goa-interface-calendar) (tramp-goa-interface-oauth2based) (tramp-goa-interface-account, tramp-goa-identity-regexp) (tramp-goa-interface-mail, tramp-goa-interface-chat) (tramp-goa-interface-photos, tramp-goa-path-manager) (tramp-goa-interface-documents) (tramp-gvfs-owncloud-default-prefix) (tramp-gvfs-owncloud-default-prefix-regexp): New defconst. (tramp-goa-name): New defstruct. (tramp-gvfs-stringify-dbus-message): Handle all consp messages. (tramp-dbus-function, tramp-gvfs-get-remote-prefix) (tramp-get-goa-accounts): New defun. (with-tramp-dbus-call-method): Use it. (with-tramp-dbus-get-all-properties): New defmacro. (tramp-gvfs-url-file-name) (tramp-gvfs-handler-mounted-unmounted) (tramp-gvfs-connection-mounted-p, tramp-gvfs-mount-spec): Map between "owncloud" and "davs". (tramp-gvfs-maybe-open-connection): Set "vector" connection property. * test/lisp/net/tramp-tests.el (tramp-gvfs-handler-askquestion): Suppress run in tests. (tramp--test-owncloud-p): New defun. (tramp-test11-copy-file, tramp-test12-rename-file): Use it.
2018-01-05 21:04:39 +01:00
;; We do not want to be interrupted.
(eval-after-load 'tramp-gvfs
'(fset 'tramp-gvfs-handler-askquestion
(lambda (_message _choices) '(t nil 0)))))
2013-11-05 15:46:57 +01:00
;; There is no default value on w32 systems, which could work out of the box.
(defconst tramp-test-temporary-file-directory
(cond
((getenv "REMOTE_TEMPORARY_FILE_DIRECTORY"))
((eq system-type 'windows-nt) null-device)
(t (add-to-list
'tramp-methods
'("mock"
(tramp-login-program "sh")
(tramp-login-args (("-i")))
(tramp-remote-shell "/bin/sh")
(tramp-remote-shell-args ("-c"))
(tramp-connection-timeout 10)))
(add-to-list
'tramp-default-host-alist
`("\\`mock\\'" nil ,(system-name)))
;; Emacs' Makefile sets $HOME to a nonexistent value. Needed in
;; batch mode only, therefore.
(unless (and (null noninteractive) (file-directory-p "~/"))
(setenv "HOME" temporary-file-directory))
(format "/mock::%s" temporary-file-directory)))
2013-11-05 15:46:57 +01:00
"Temporary directory for Tramp tests.")
(setq auth-source-save-behavior nil
password-cache-expiry nil
remote-file-name-inhibit-cache nil
tramp-cache-read-persistent-data t ;; For auth-sources.
tramp-copy-size-limit nil
tramp-message-show-message nil
tramp-persistency-file-name nil
tramp-verbose 0)
;; This should happen on hydra only.
(when (getenv "EMACS_HYDRA_CI")
(add-to-list 'tramp-remote-path 'tramp-own-remote-path))
2013-11-05 15:46:57 +01:00
(defvar tramp--test-enabled-checked nil
"Cached result of `tramp--test-enabled'.
If the function did run, the value is a cons cell, the `cdr'
being the result.")
(defun tramp--test-enabled ()
"Whether remote file access is enabled."
(unless (consp tramp--test-enabled-checked)
(setq
tramp--test-enabled-checked
(cons
t (ignore-errors
(and
(file-remote-p tramp-test-temporary-file-directory)
(file-directory-p tramp-test-temporary-file-directory)
(file-writable-p tramp-test-temporary-file-directory))))))
(when (cdr tramp--test-enabled-checked)
;; Cleanup connection.
(ignore-errors
(tramp-cleanup-connection
(tramp-dissect-file-name tramp-test-temporary-file-directory)
nil 'keep-password)))
2013-11-05 15:46:57 +01:00
;; Return result.
(cdr tramp--test-enabled-checked))
(defsubst tramp--test-expensive-test ()
"Whether expensive tests are run."
(ert-select-tests
(ert--stats-selector ert--current-run-stats)
(list (make-ert-test :name (ert-test-name (ert-running-test))
:body nil :tags '(:expensive-test)))))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(defun tramp--test-make-temp-name (&optional local quoted)
"Return a temporary file name for test.
If LOCAL is non-nil, a local file name is returned.
If QUOTED is non-nil, the local part of the file name is quoted.
The temporary file is not created."
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(funcall
(if quoted #'tramp-compat-file-name-quote #'identity)
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(expand-file-name
(make-temp-name "tramp-test")
(if local temporary-file-directory tramp-test-temporary-file-directory))))
2013-11-05 15:46:57 +01:00
;; Don't print messages in nested `tramp--test-instrument-test-case' calls.
(defvar tramp--test-instrument-test-case-p nil
"Whether `tramp--test-instrument-test-case' run.
This shall used dynamically bound only.")
(defmacro tramp--test-instrument-test-case (verbose &rest body)
"Run BODY with `tramp-verbose' equal VERBOSE.
Print the content of the Tramp connection and debug buffers, if
`tramp-verbose' is greater than 3. `should-error' is not handled
properly. BODY shall not contain a timeout."
(declare (indent 1) (debug (natnump body)))
`(let ((tramp-verbose (max (or ,verbose 0) (or tramp-verbose 0)))
(tramp-message-show-message t)
Sync with Tramp repository * doc/misc/tramp.texi (Configuration): Note, that Tramp must be required prior changing its configuration. (Connection caching, Predefined connection information) (Remote shell setup): Fix typos. (Predefined connection information): Describe, how to overwrite parameters of `tramp-methods'. (Remote programs, Remote processes, Traces and Profiles): Simplify example. (Remote programs): Remove superfluous comment. * doc/misc/trampver.texi: Update release number. * lisp/net/tramp-cache.el (tramp-connection-properties): Adapt docstring. * lisp/net/tramp-gvfs.el (tramp-gvfs-do-copy-or-rename-file): New defun. (tramp-gvfs-handle-copy-file, tramp-gvfs-handle-rename-file): Use it. (tramp-gvfs-handle-make-directory): Reimplement PARENTS handling, "gvfs-mkdir -p ..." does not work robust. (tramp-gvfs-maybe-open-connection): Adapt `tramp-get-method-parameter' call. * lisp/net/tramp-sh.el (tramp-methods): Add `tramp-remote-shell-login' parameter where it fits. (tramp-get-remote-path): Use it. (tramp-make-copy-program-file-name): Fix quoting for "psftp" method. (all): Adapt `tramp-get-method-parameter' calls. * lisp/net/tramp.el (tramp-methods): Adapt docstring. (tramp-get-method-parameter): Replace argument METHOD by VEC. Check also for hits in `tramp-connection-properties'. Adapt docstring. (tramp-get-remote-tmpdir): Cache only the local name of tmpdir. (all): Adapt `tramp-get-method-parameter' calls. * lisp/net/trampver.el Update release number. * test/automated/tramp-tests.el (tramp--instrument-test-case): Add "^make-symbolic-link not supported$" to `debug-ignored-errors'. (tramp-test13-make-directory, tramp--test-adb-p) (tramp--test-smb-or-windows-nt-p): Simplify. (tramp--test-ftp-p, tramp--test-gvfs-p): New defuns. (tramp--test-special-characters): Fix docstring. Add gvfs and ftp tests. (tramp--test-utf8): Fix docstring.
2015-07-21 14:59:18 +02:00
(debug-ignored-errors
(append
'("^make-symbolic-link not supported$"
"^error with add-name-to-file")
debug-ignored-errors))
inhibit-message)
(unwind-protect
(let ((tramp--test-instrument-test-case-p t)) ,@body)
;; Unwind forms.
(when (and (null tramp--test-instrument-test-case-p) (> tramp-verbose 3))
Stronger check for Tramp method * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-rclone.el (tramp-rclone-maybe-open-connection): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-maybe-open-connection): Use `tramp-get-connection-name'. * lisp/net/tramp-sh.el (tramp-sh-handle-make-symbolic-link): * lisp/net/tramp-smb.el (tramp-smb-handle-make-symbolic-link): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-handle-make-symbolic-link): Don't check remote TARGET. * lisp/net/tramp.el (tramp-dissect-file-name): Check for proper method. (tramp-file-name-for-operation): Take only 2nd argument into account for file name handler. (tramp-file-name-handler): Suppress checks for `file-remote-p'. * test/lisp/net/tramp-archive-tests.el (tramp-archive-test02-file-name-dissect): Suppress check for wrong method. * test/lisp/net/tramp-tests.el (tramp--test-instrument-test-case): Dump *all* Tramp buffers. (tramp-test02-file-name-dissect) (tramp-test02-file-name-dissect-simplified) (tramp-test02-file-name-dissect-separate): Check also wrong method. (tramp-test03-file-name-defaults): Check, that the respective Tramp package is loaded. (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name) (tramp-test06-directory-file-name, tramp-test44-auto-load): Suppress check for wrong method. (tramp-test30-make-process): Remove instrumentation code. (tramp-test31-interrupt-process, tramp-test36-vc-registered): Guarantee that connection is established prior starting process.
2019-06-04 12:51:45 +02:00
(dolist (buf (tramp-list-tramp-buffers))
(with-current-buffer buf
(message ";; %s\n%s" buf (buffer-string))))))))
(defsubst tramp--test-message (fmt-string &rest arguments)
"Emit a message into ERT *Messages*."
(tramp--test-instrument-test-case 0
(apply
#'tramp-message
(tramp-dissect-file-name tramp-test-temporary-file-directory) 0
fmt-string arguments)))
(defsubst tramp--test-backtrace ()
"Dump a backtrace into ERT *Messages*."
(tramp--test-instrument-test-case 10
(tramp-backtrace
(tramp-dissect-file-name tramp-test-temporary-file-directory))))
(defmacro tramp--test-print-duration (message &rest body)
"Run BODY and print a message with duration, prompted by MESSAGE."
(declare (indent 1) (debug (stringp body)))
`(let ((start (current-time)))
(unwind-protect
(progn ,@body)
(tramp--test-message
"%s %f sec"
,message (float-time (time-subtract (current-time) start))))))
2013-11-05 15:46:57 +01:00
(ert-deftest tramp-test00-availability ()
"Test availability of Tramp functions."
:expected-result (if (tramp--test-enabled) :passed :failed)
(tramp--test-message
"Remote directory: `%s'" tramp-test-temporary-file-directory)
2013-11-05 15:46:57 +01:00
(should (ignore-errors
(and
(file-remote-p tramp-test-temporary-file-directory)
(file-directory-p tramp-test-temporary-file-directory)
(file-writable-p tramp-test-temporary-file-directory)))))
(ert-deftest tramp-test01-file-name-syntax ()
"Check remote file name syntax."
;; Simple cases.
(should (tramp-tramp-file-p "/method::"))
(should (tramp-tramp-file-p "/method:host:"))
(should (tramp-tramp-file-p "/method:user@:"))
(should (tramp-tramp-file-p "/method:user@host:"))
(should (tramp-tramp-file-p "/method:user@email@host:"))
;; Using a port.
(should (tramp-tramp-file-p "/method:host#1234:"))
(should (tramp-tramp-file-p "/method:user@host#1234:"))
;; Using an IPv4 address.
(should (tramp-tramp-file-p "/method:1.2.3.4:"))
(should (tramp-tramp-file-p "/method:user@1.2.3.4:"))
;; Using an IPv6 address.
(should (tramp-tramp-file-p "/method:[::1]:"))
(should (tramp-tramp-file-p "/method:user@[::1]:"))
;; Using an IPv4 mapped IPv6 address.
(should (tramp-tramp-file-p "/method:[::ffff:1.2.3.4]:"))
(should (tramp-tramp-file-p "/method:user@[::ffff:1.2.3.4]:"))
2013-11-05 15:46:57 +01:00
;; Local file name part.
(should (tramp-tramp-file-p "/method:::"))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(should (tramp-tramp-file-p "/method::/:"))
2013-11-05 15:46:57 +01:00
(should (tramp-tramp-file-p "/method::/path/to/file"))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(should (tramp-tramp-file-p "/method::/:/path/to/file"))
2013-11-05 15:46:57 +01:00
(should (tramp-tramp-file-p "/method::file"))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(should (tramp-tramp-file-p "/method::/:file"))
2013-11-05 15:46:57 +01:00
;; Multihop.
(should (tramp-tramp-file-p "/method1:|method2::"))
(should (tramp-tramp-file-p "/method1:host1|method2:host2:"))
(should (tramp-tramp-file-p "/method1:user1@host1|method2:user2@host2:"))
(should (tramp-tramp-file-p
"/method1:user1@host1|method2:user2@host2|method3:user3@host3:"))
;; No strings.
(should-not (tramp-tramp-file-p nil))
(should-not (tramp-tramp-file-p 'symbol))
;; No newline or linefeed.
(should-not (tramp-tramp-file-p "/method::file\nname"))
(should-not (tramp-tramp-file-p "/method::file\rname"))
Require method in remote file name syntax * lisp/minibuffer.el (completion--nth-completion): Do not bind `non-essential'. * lisp/net/tramp-adb.el (tramp-adb-maybe-open-connection): * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-sh.el (tramp-maybe-open-connection): * lisp/net/tramp-smb.el (tramp-smb-maybe-open-connection): Do not call `tramp-check-proper-method-and-host'. * lisp/net/tramp-sh.el (tramp-ssh-controlmaster-options): Better traces. (tramp-maybe-open-connection): Do not use argument for ´tramp-completion-mode-p'. * lisp/net/tramp.el (tramp-default-method-marker): New defconst. (tramp-prefix-format, tramp-postfix-method-format) (tramp-prefix-ipv6-format, tramp-postfix-ipv6-format) (tramp-prefix-port-format, tramp-postfix-host-format) (tramp-file-name-regexp, tramp-completion-file-name-regexp): Use `eq' instead of `eqal'. (tramp-method-regexp, tramp-domain-regexp) (tramp-remote-file-name-spec-regexp) (tramp-file-name-regexp-unified) (tramp-completion-file-name-regexp-unified) (tramp-completion-file-name-regexp-separate): Adapt regexp. (tramp-completion-file-name-handler-alist) (tramp-run-real-handler): Autoload them. (tramp-find-method): Handle `tramp-default-method-marker'. (tramp-check-proper-method-and-host) (tramp-completion-run-real-handler): Remove them. (tramp-error-with-buffer, tramp-connectable-p): Do not use argument for ´tramp-completion-mode-p'. (tramp-find-foreign-file-name-handler): Remove COMPLETION argument. Do not apply heuristic for completion. (tramp-file-name-handler): Do not modify `non-essential'. (tramp-completion-file-name-handler): Change implementation. (tramp-autoload-file-name-handler) (tramp-completion-handle-file-name-all-completions): Call `tramp-run-real-handler'. (tramp-completion-mode-p): Do not autoload. Remove argument. Do not apply heuristic for completion. (tramp-completion-dissect-file-name): Simplify implementation. (tramp-handle-file-name-as-directory): Call `tramp-connectable-p'. * test/lisp/net/tramp-tests.el (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test03-file-name-defaults) (tramp-test06-directory-file-name): Adapt to the new syntax. (tramp-test11-copy-file, tramp-test12-rename-file) (tramp--test-check-files): Deactivate temporarily tests with quoted file names. (tramp-test16-directory-files, tramp-test17-insert-directory): Adapt tests. (tramp-test24-file-name-completion): Do not check for completion mode. (tramp-test31-make-auto-save-file-name): Deactivate temporarily two tests.
2017-03-13 18:05:59 +01:00
;; Ange-ftp syntax.
(should-not (tramp-tramp-file-p "/host:"))
(should-not (tramp-tramp-file-p "/user@host:"))
(should-not (tramp-tramp-file-p "/1.2.3.4:"))
(should-not (tramp-tramp-file-p "/[]:"))
(should-not (tramp-tramp-file-p "/[::1]:"))
(should-not (tramp-tramp-file-p "/[::ffff:1.2.3.4]:"))
Require method in remote file name syntax * lisp/minibuffer.el (completion--nth-completion): Do not bind `non-essential'. * lisp/net/tramp-adb.el (tramp-adb-maybe-open-connection): * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-sh.el (tramp-maybe-open-connection): * lisp/net/tramp-smb.el (tramp-smb-maybe-open-connection): Do not call `tramp-check-proper-method-and-host'. * lisp/net/tramp-sh.el (tramp-ssh-controlmaster-options): Better traces. (tramp-maybe-open-connection): Do not use argument for ´tramp-completion-mode-p'. * lisp/net/tramp.el (tramp-default-method-marker): New defconst. (tramp-prefix-format, tramp-postfix-method-format) (tramp-prefix-ipv6-format, tramp-postfix-ipv6-format) (tramp-prefix-port-format, tramp-postfix-host-format) (tramp-file-name-regexp, tramp-completion-file-name-regexp): Use `eq' instead of `eqal'. (tramp-method-regexp, tramp-domain-regexp) (tramp-remote-file-name-spec-regexp) (tramp-file-name-regexp-unified) (tramp-completion-file-name-regexp-unified) (tramp-completion-file-name-regexp-separate): Adapt regexp. (tramp-completion-file-name-handler-alist) (tramp-run-real-handler): Autoload them. (tramp-find-method): Handle `tramp-default-method-marker'. (tramp-check-proper-method-and-host) (tramp-completion-run-real-handler): Remove them. (tramp-error-with-buffer, tramp-connectable-p): Do not use argument for ´tramp-completion-mode-p'. (tramp-find-foreign-file-name-handler): Remove COMPLETION argument. Do not apply heuristic for completion. (tramp-file-name-handler): Do not modify `non-essential'. (tramp-completion-file-name-handler): Change implementation. (tramp-autoload-file-name-handler) (tramp-completion-handle-file-name-all-completions): Call `tramp-run-real-handler'. (tramp-completion-mode-p): Do not autoload. Remove argument. Do not apply heuristic for completion. (tramp-completion-dissect-file-name): Simplify implementation. (tramp-handle-file-name-as-directory): Call `tramp-connectable-p'. * test/lisp/net/tramp-tests.el (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test03-file-name-defaults) (tramp-test06-directory-file-name): Adapt to the new syntax. (tramp-test11-copy-file, tramp-test12-rename-file) (tramp--test-check-files): Deactivate temporarily tests with quoted file names. (tramp-test16-directory-files, tramp-test17-insert-directory): Adapt tests. (tramp-test24-file-name-completion): Do not check for completion mode. (tramp-test31-make-auto-save-file-name): Deactivate temporarily two tests.
2017-03-13 18:05:59 +01:00
(should-not (tramp-tramp-file-p "/host:/:"))
(should-not (tramp-tramp-file-p "/host1|host2:"))
(should-not (tramp-tramp-file-p "/user1@host1|user2@host2:"))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; Quote with "/:" suppresses file name handlers.
2013-11-05 15:46:57 +01:00
(should-not (tramp-tramp-file-p "/::"))
(should-not (tramp-tramp-file-p "/:@:"))
(should-not (tramp-tramp-file-p "/:[]:"))
;; When `tramp-mode' is nil, Tramp is not activated.
(let (tramp-mode)
(should-not (tramp-tramp-file-p "/method:user@host:")))
;; `tramp-ignored-file-name-regexp' suppresses Tramp.
(let ((tramp-ignored-file-name-regexp "^/method:user@host:"))
(should-not (tramp-tramp-file-p "/method:user@host:")))
Require method in remote file name syntax * lisp/minibuffer.el (completion--nth-completion): Do not bind `non-essential'. * lisp/net/tramp-adb.el (tramp-adb-maybe-open-connection): * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-sh.el (tramp-maybe-open-connection): * lisp/net/tramp-smb.el (tramp-smb-maybe-open-connection): Do not call `tramp-check-proper-method-and-host'. * lisp/net/tramp-sh.el (tramp-ssh-controlmaster-options): Better traces. (tramp-maybe-open-connection): Do not use argument for ´tramp-completion-mode-p'. * lisp/net/tramp.el (tramp-default-method-marker): New defconst. (tramp-prefix-format, tramp-postfix-method-format) (tramp-prefix-ipv6-format, tramp-postfix-ipv6-format) (tramp-prefix-port-format, tramp-postfix-host-format) (tramp-file-name-regexp, tramp-completion-file-name-regexp): Use `eq' instead of `eqal'. (tramp-method-regexp, tramp-domain-regexp) (tramp-remote-file-name-spec-regexp) (tramp-file-name-regexp-unified) (tramp-completion-file-name-regexp-unified) (tramp-completion-file-name-regexp-separate): Adapt regexp. (tramp-completion-file-name-handler-alist) (tramp-run-real-handler): Autoload them. (tramp-find-method): Handle `tramp-default-method-marker'. (tramp-check-proper-method-and-host) (tramp-completion-run-real-handler): Remove them. (tramp-error-with-buffer, tramp-connectable-p): Do not use argument for ´tramp-completion-mode-p'. (tramp-find-foreign-file-name-handler): Remove COMPLETION argument. Do not apply heuristic for completion. (tramp-file-name-handler): Do not modify `non-essential'. (tramp-completion-file-name-handler): Change implementation. (tramp-autoload-file-name-handler) (tramp-completion-handle-file-name-all-completions): Call `tramp-run-real-handler'. (tramp-completion-mode-p): Do not autoload. Remove argument. Do not apply heuristic for completion. (tramp-completion-dissect-file-name): Simplify implementation. (tramp-handle-file-name-as-directory): Call `tramp-connectable-p'. * test/lisp/net/tramp-tests.el (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test03-file-name-defaults) (tramp-test06-directory-file-name): Adapt to the new syntax. (tramp-test11-copy-file, tramp-test12-rename-file) (tramp--test-check-files): Deactivate temporarily tests with quoted file names. (tramp-test16-directory-files, tramp-test17-insert-directory): Adapt tests. (tramp-test24-file-name-completion): Do not check for completion mode. (tramp-test31-make-auto-save-file-name): Deactivate temporarily two tests.
2017-03-13 18:05:59 +01:00
;; Methods shall be at least two characters on MS Windows, except
;; the default method.
(let ((system-type 'windows-nt))
(should-not (tramp-tramp-file-p "/c:/path/to/file"))
Require method in remote file name syntax * lisp/minibuffer.el (completion--nth-completion): Do not bind `non-essential'. * lisp/net/tramp-adb.el (tramp-adb-maybe-open-connection): * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-sh.el (tramp-maybe-open-connection): * lisp/net/tramp-smb.el (tramp-smb-maybe-open-connection): Do not call `tramp-check-proper-method-and-host'. * lisp/net/tramp-sh.el (tramp-ssh-controlmaster-options): Better traces. (tramp-maybe-open-connection): Do not use argument for ´tramp-completion-mode-p'. * lisp/net/tramp.el (tramp-default-method-marker): New defconst. (tramp-prefix-format, tramp-postfix-method-format) (tramp-prefix-ipv6-format, tramp-postfix-ipv6-format) (tramp-prefix-port-format, tramp-postfix-host-format) (tramp-file-name-regexp, tramp-completion-file-name-regexp): Use `eq' instead of `eqal'. (tramp-method-regexp, tramp-domain-regexp) (tramp-remote-file-name-spec-regexp) (tramp-file-name-regexp-unified) (tramp-completion-file-name-regexp-unified) (tramp-completion-file-name-regexp-separate): Adapt regexp. (tramp-completion-file-name-handler-alist) (tramp-run-real-handler): Autoload them. (tramp-find-method): Handle `tramp-default-method-marker'. (tramp-check-proper-method-and-host) (tramp-completion-run-real-handler): Remove them. (tramp-error-with-buffer, tramp-connectable-p): Do not use argument for ´tramp-completion-mode-p'. (tramp-find-foreign-file-name-handler): Remove COMPLETION argument. Do not apply heuristic for completion. (tramp-file-name-handler): Do not modify `non-essential'. (tramp-completion-file-name-handler): Change implementation. (tramp-autoload-file-name-handler) (tramp-completion-handle-file-name-all-completions): Call `tramp-run-real-handler'. (tramp-completion-mode-p): Do not autoload. Remove argument. Do not apply heuristic for completion. (tramp-completion-dissect-file-name): Simplify implementation. (tramp-handle-file-name-as-directory): Call `tramp-connectable-p'. * test/lisp/net/tramp-tests.el (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test03-file-name-defaults) (tramp-test06-directory-file-name): Adapt to the new syntax. (tramp-test11-copy-file, tramp-test12-rename-file) (tramp--test-check-files): Deactivate temporarily tests with quoted file names. (tramp-test16-directory-files, tramp-test17-insert-directory): Adapt tests. (tramp-test24-file-name-completion): Do not check for completion mode. (tramp-test31-make-auto-save-file-name): Deactivate temporarily two tests.
2017-03-13 18:05:59 +01:00
(should-not (tramp-tramp-file-p "/c::/path/to/file"))
(should (tramp-tramp-file-p "/-::/path/to/file")))
(let ((system-type 'gnu/linux))
Require method in remote file name syntax * lisp/minibuffer.el (completion--nth-completion): Do not bind `non-essential'. * lisp/net/tramp-adb.el (tramp-adb-maybe-open-connection): * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-sh.el (tramp-maybe-open-connection): * lisp/net/tramp-smb.el (tramp-smb-maybe-open-connection): Do not call `tramp-check-proper-method-and-host'. * lisp/net/tramp-sh.el (tramp-ssh-controlmaster-options): Better traces. (tramp-maybe-open-connection): Do not use argument for ´tramp-completion-mode-p'. * lisp/net/tramp.el (tramp-default-method-marker): New defconst. (tramp-prefix-format, tramp-postfix-method-format) (tramp-prefix-ipv6-format, tramp-postfix-ipv6-format) (tramp-prefix-port-format, tramp-postfix-host-format) (tramp-file-name-regexp, tramp-completion-file-name-regexp): Use `eq' instead of `eqal'. (tramp-method-regexp, tramp-domain-regexp) (tramp-remote-file-name-spec-regexp) (tramp-file-name-regexp-unified) (tramp-completion-file-name-regexp-unified) (tramp-completion-file-name-regexp-separate): Adapt regexp. (tramp-completion-file-name-handler-alist) (tramp-run-real-handler): Autoload them. (tramp-find-method): Handle `tramp-default-method-marker'. (tramp-check-proper-method-and-host) (tramp-completion-run-real-handler): Remove them. (tramp-error-with-buffer, tramp-connectable-p): Do not use argument for ´tramp-completion-mode-p'. (tramp-find-foreign-file-name-handler): Remove COMPLETION argument. Do not apply heuristic for completion. (tramp-file-name-handler): Do not modify `non-essential'. (tramp-completion-file-name-handler): Change implementation. (tramp-autoload-file-name-handler) (tramp-completion-handle-file-name-all-completions): Call `tramp-run-real-handler'. (tramp-completion-mode-p): Do not autoload. Remove argument. Do not apply heuristic for completion. (tramp-completion-dissect-file-name): Simplify implementation. (tramp-handle-file-name-as-directory): Call `tramp-connectable-p'. * test/lisp/net/tramp-tests.el (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test03-file-name-defaults) (tramp-test06-directory-file-name): Adapt to the new syntax. (tramp-test11-copy-file, tramp-test12-rename-file) (tramp--test-check-files): Deactivate temporarily tests with quoted file names. (tramp-test16-directory-files, tramp-test17-insert-directory): Adapt tests. (tramp-test24-file-name-completion): Do not check for completion mode. (tramp-test31-make-auto-save-file-name): Deactivate temporarily two tests.
2017-03-13 18:05:59 +01:00
(should (tramp-tramp-file-p "/-:h:/path/to/file"))
(should (tramp-tramp-file-p "/m::/path/to/file"))))
2013-11-05 15:46:57 +01:00
(ert-deftest tramp-test01-file-name-syntax-simplified ()
"Check simplified file name syntax."
:tags '(:expensive-test)
(let ((syntax tramp-syntax))
(unwind-protect
(progn
(tramp-change-syntax 'simplified)
;; Simple cases.
(should (tramp-tramp-file-p "/host:"))
(should (tramp-tramp-file-p "/user@:"))
(should (tramp-tramp-file-p "/user@host:"))
(should (tramp-tramp-file-p "/user@email@host:"))
;; Using a port.
(should (tramp-tramp-file-p "/host#1234:"))
(should (tramp-tramp-file-p "/user@host#1234:"))
;; Using an IPv4 address.
(should (tramp-tramp-file-p "/1.2.3.4:"))
(should (tramp-tramp-file-p "/user@1.2.3.4:"))
;; Using an IPv6 address.
(should (tramp-tramp-file-p "/[::1]:"))
(should (tramp-tramp-file-p "/user@[::1]:"))
;; Using an IPv4 mapped IPv6 address.
(should (tramp-tramp-file-p "/[::ffff:1.2.3.4]:"))
(should (tramp-tramp-file-p "/user@[::ffff:1.2.3.4]:"))
;; Local file name part.
(should (tramp-tramp-file-p "/host::"))
(should (tramp-tramp-file-p "/host:/:"))
(should (tramp-tramp-file-p "/host:/path/to/file"))
(should (tramp-tramp-file-p "/host:/:/path/to/file"))
(should (tramp-tramp-file-p "/host:file"))
(should (tramp-tramp-file-p "/host:/:file"))
;; Multihop.
(should (tramp-tramp-file-p "/host1|host2:"))
(should (tramp-tramp-file-p "/user1@host1|user2@host2:"))
(should (tramp-tramp-file-p "/user1@host1|user2@host2|user3@host3:"))
;; No strings.
(should-not (tramp-tramp-file-p nil))
(should-not (tramp-tramp-file-p 'symbol))
;; Quote with "/:" suppresses file name handlers.
(should-not (tramp-tramp-file-p "/::"))
(should-not (tramp-tramp-file-p "/:@:"))
(should-not (tramp-tramp-file-p "/:[]:")))
;; Exit.
(tramp-change-syntax syntax))))
(ert-deftest tramp-test01-file-name-syntax-separate ()
"Check separate file name syntax."
:tags '(:expensive-test)
(let ((syntax tramp-syntax))
(unwind-protect
(progn
(tramp-change-syntax 'separate)
;; Simple cases.
(should (tramp-tramp-file-p "/[method/]"))
(should (tramp-tramp-file-p "/[method/host]"))
(should (tramp-tramp-file-p "/[method/user@]"))
(should (tramp-tramp-file-p "/[method/user@host]"))
(should (tramp-tramp-file-p "/[method/user@email@host]"))
;; Using a port.
(should (tramp-tramp-file-p "/[method/host#1234]"))
(should (tramp-tramp-file-p "/[method/user@host#1234]"))
;; Using an IPv4 address.
(should (tramp-tramp-file-p "/[method/1.2.3.4]"))
(should (tramp-tramp-file-p "/[method/user@1.2.3.4]"))
;; Using an IPv6 address.
(should (tramp-tramp-file-p "/[method/::1]"))
(should (tramp-tramp-file-p "/[method/user@::1]"))
;; Using an IPv4 mapped IPv6 address.
(should (tramp-tramp-file-p "/[method/::ffff:1.2.3.4]"))
(should (tramp-tramp-file-p "/[method/user@::ffff:1.2.3.4]"))
;; Local file name part.
(should (tramp-tramp-file-p "/[method/]"))
(should (tramp-tramp-file-p "/[method/]/:"))
(should (tramp-tramp-file-p "/[method/]/path/to/file"))
(should (tramp-tramp-file-p "/[method/]/:/path/to/file"))
(should (tramp-tramp-file-p "/[method/]file"))
(should (tramp-tramp-file-p "/[method/]/:file"))
;; Multihop.
(should (tramp-tramp-file-p "/[method1/|method2/]"))
(should (tramp-tramp-file-p "/[method1/host1|method2/host2]"))
(should
(tramp-tramp-file-p
"/[method1/user1@host1|method2/user2@host2]"))
(should
(tramp-tramp-file-p
"/[method1/user1@host1|method2/user2@host2|method3/user3@host3]"))
;; No strings.
(should-not (tramp-tramp-file-p nil))
(should-not (tramp-tramp-file-p 'symbol))
;; Ange-ftp syntax.
(should-not (tramp-tramp-file-p "/host:"))
(should-not (tramp-tramp-file-p "/user@host:"))
(should-not (tramp-tramp-file-p "/1.2.3.4:"))
(should-not (tramp-tramp-file-p "/host:/:"))
(should-not (tramp-tramp-file-p "/host1|host2:"))
(should-not (tramp-tramp-file-p "/user1@host1|user2@host2:"))
;; Quote with "/:" suppresses file name handlers.
(should-not (tramp-tramp-file-p "/:[]")))
;; Exit.
(tramp-change-syntax syntax))))
2013-11-05 15:46:57 +01:00
(ert-deftest tramp-test02-file-name-dissect ()
"Check remote file name components."
(let ((tramp-default-method "default-method")
(tramp-default-user "default-user")
(tramp-default-host "default-host")
tramp-default-method-alist
tramp-default-user-alist
tramp-default-host-alist
Stronger check for Tramp method * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-rclone.el (tramp-rclone-maybe-open-connection): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-maybe-open-connection): Use `tramp-get-connection-name'. * lisp/net/tramp-sh.el (tramp-sh-handle-make-symbolic-link): * lisp/net/tramp-smb.el (tramp-smb-handle-make-symbolic-link): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-handle-make-symbolic-link): Don't check remote TARGET. * lisp/net/tramp.el (tramp-dissect-file-name): Check for proper method. (tramp-file-name-for-operation): Take only 2nd argument into account for file name handler. (tramp-file-name-handler): Suppress checks for `file-remote-p'. * test/lisp/net/tramp-archive-tests.el (tramp-archive-test02-file-name-dissect): Suppress check for wrong method. * test/lisp/net/tramp-tests.el (tramp--test-instrument-test-case): Dump *all* Tramp buffers. (tramp-test02-file-name-dissect) (tramp-test02-file-name-dissect-simplified) (tramp-test02-file-name-dissect-separate): Check also wrong method. (tramp-test03-file-name-defaults): Check, that the respective Tramp package is loaded. (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name) (tramp-test06-directory-file-name, tramp-test44-auto-load): Suppress check for wrong method. (tramp-test30-make-process): Remove instrumentation code. (tramp-test31-interrupt-process, tramp-test36-vc-registered): Guarantee that connection is established prior starting process.
2019-06-04 12:51:45 +02:00
;; Suppress method name check.
(non-essential t)
;; Suppress check for multihops.
(tramp-cache-data (make-hash-table :test #'equal))
(tramp-connection-properties '((nil "login-program" t))))
Stronger check for Tramp method * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-rclone.el (tramp-rclone-maybe-open-connection): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-maybe-open-connection): Use `tramp-get-connection-name'. * lisp/net/tramp-sh.el (tramp-sh-handle-make-symbolic-link): * lisp/net/tramp-smb.el (tramp-smb-handle-make-symbolic-link): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-handle-make-symbolic-link): Don't check remote TARGET. * lisp/net/tramp.el (tramp-dissect-file-name): Check for proper method. (tramp-file-name-for-operation): Take only 2nd argument into account for file name handler. (tramp-file-name-handler): Suppress checks for `file-remote-p'. * test/lisp/net/tramp-archive-tests.el (tramp-archive-test02-file-name-dissect): Suppress check for wrong method. * test/lisp/net/tramp-tests.el (tramp--test-instrument-test-case): Dump *all* Tramp buffers. (tramp-test02-file-name-dissect) (tramp-test02-file-name-dissect-simplified) (tramp-test02-file-name-dissect-separate): Check also wrong method. (tramp-test03-file-name-defaults): Check, that the respective Tramp package is loaded. (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name) (tramp-test06-directory-file-name, tramp-test44-auto-load): Suppress check for wrong method. (tramp-test30-make-process): Remove instrumentation code. (tramp-test31-interrupt-process, tramp-test36-vc-registered): Guarantee that connection is established prior starting process.
2019-06-04 12:51:45 +02:00
;; An unknown method shall raise an error.
(let (non-essential)
(should-error
(expand-file-name "/method:user@host:")
:type 'user-error))
2013-11-05 15:46:57 +01:00
;; Expand `tramp-default-user' and `tramp-default-host'.
(should (string-equal
(file-remote-p "/method::")
(format "/%s:%s@%s:" "method" "default-user" "default-host")))
(should (string-equal (file-remote-p "/method::" 'method) "method"))
(should (string-equal (file-remote-p "/method::" 'user) "default-user"))
(should (string-equal (file-remote-p "/method::" 'host) "default-host"))
(should (string-equal (file-remote-p "/method::" 'localname) ""))
(should (string-equal (file-remote-p "/method::" 'hop) nil))
2013-11-05 15:46:57 +01:00
;; Expand `tramp-default-method' and `tramp-default-user'.
(should (string-equal
Require method in remote file name syntax * lisp/minibuffer.el (completion--nth-completion): Do not bind `non-essential'. * lisp/net/tramp-adb.el (tramp-adb-maybe-open-connection): * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-sh.el (tramp-maybe-open-connection): * lisp/net/tramp-smb.el (tramp-smb-maybe-open-connection): Do not call `tramp-check-proper-method-and-host'. * lisp/net/tramp-sh.el (tramp-ssh-controlmaster-options): Better traces. (tramp-maybe-open-connection): Do not use argument for ´tramp-completion-mode-p'. * lisp/net/tramp.el (tramp-default-method-marker): New defconst. (tramp-prefix-format, tramp-postfix-method-format) (tramp-prefix-ipv6-format, tramp-postfix-ipv6-format) (tramp-prefix-port-format, tramp-postfix-host-format) (tramp-file-name-regexp, tramp-completion-file-name-regexp): Use `eq' instead of `eqal'. (tramp-method-regexp, tramp-domain-regexp) (tramp-remote-file-name-spec-regexp) (tramp-file-name-regexp-unified) (tramp-completion-file-name-regexp-unified) (tramp-completion-file-name-regexp-separate): Adapt regexp. (tramp-completion-file-name-handler-alist) (tramp-run-real-handler): Autoload them. (tramp-find-method): Handle `tramp-default-method-marker'. (tramp-check-proper-method-and-host) (tramp-completion-run-real-handler): Remove them. (tramp-error-with-buffer, tramp-connectable-p): Do not use argument for ´tramp-completion-mode-p'. (tramp-find-foreign-file-name-handler): Remove COMPLETION argument. Do not apply heuristic for completion. (tramp-file-name-handler): Do not modify `non-essential'. (tramp-completion-file-name-handler): Change implementation. (tramp-autoload-file-name-handler) (tramp-completion-handle-file-name-all-completions): Call `tramp-run-real-handler'. (tramp-completion-mode-p): Do not autoload. Remove argument. Do not apply heuristic for completion. (tramp-completion-dissect-file-name): Simplify implementation. (tramp-handle-file-name-as-directory): Call `tramp-connectable-p'. * test/lisp/net/tramp-tests.el (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test03-file-name-defaults) (tramp-test06-directory-file-name): Adapt to the new syntax. (tramp-test11-copy-file, tramp-test12-rename-file) (tramp--test-check-files): Deactivate temporarily tests with quoted file names. (tramp-test16-directory-files, tramp-test17-insert-directory): Adapt tests. (tramp-test24-file-name-completion): Do not check for completion mode. (tramp-test31-make-auto-save-file-name): Deactivate temporarily two tests.
2017-03-13 18:05:59 +01:00
(file-remote-p "/-:host:")
2013-11-05 15:46:57 +01:00
(format "/%s:%s@%s:" "default-method" "default-user" "host")))
Require method in remote file name syntax * lisp/minibuffer.el (completion--nth-completion): Do not bind `non-essential'. * lisp/net/tramp-adb.el (tramp-adb-maybe-open-connection): * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-sh.el (tramp-maybe-open-connection): * lisp/net/tramp-smb.el (tramp-smb-maybe-open-connection): Do not call `tramp-check-proper-method-and-host'. * lisp/net/tramp-sh.el (tramp-ssh-controlmaster-options): Better traces. (tramp-maybe-open-connection): Do not use argument for ´tramp-completion-mode-p'. * lisp/net/tramp.el (tramp-default-method-marker): New defconst. (tramp-prefix-format, tramp-postfix-method-format) (tramp-prefix-ipv6-format, tramp-postfix-ipv6-format) (tramp-prefix-port-format, tramp-postfix-host-format) (tramp-file-name-regexp, tramp-completion-file-name-regexp): Use `eq' instead of `eqal'. (tramp-method-regexp, tramp-domain-regexp) (tramp-remote-file-name-spec-regexp) (tramp-file-name-regexp-unified) (tramp-completion-file-name-regexp-unified) (tramp-completion-file-name-regexp-separate): Adapt regexp. (tramp-completion-file-name-handler-alist) (tramp-run-real-handler): Autoload them. (tramp-find-method): Handle `tramp-default-method-marker'. (tramp-check-proper-method-and-host) (tramp-completion-run-real-handler): Remove them. (tramp-error-with-buffer, tramp-connectable-p): Do not use argument for ´tramp-completion-mode-p'. (tramp-find-foreign-file-name-handler): Remove COMPLETION argument. Do not apply heuristic for completion. (tramp-file-name-handler): Do not modify `non-essential'. (tramp-completion-file-name-handler): Change implementation. (tramp-autoload-file-name-handler) (tramp-completion-handle-file-name-all-completions): Call `tramp-run-real-handler'. (tramp-completion-mode-p): Do not autoload. Remove argument. Do not apply heuristic for completion. (tramp-completion-dissect-file-name): Simplify implementation. (tramp-handle-file-name-as-directory): Call `tramp-connectable-p'. * test/lisp/net/tramp-tests.el (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test03-file-name-defaults) (tramp-test06-directory-file-name): Adapt to the new syntax. (tramp-test11-copy-file, tramp-test12-rename-file) (tramp--test-check-files): Deactivate temporarily tests with quoted file names. (tramp-test16-directory-files, tramp-test17-insert-directory): Adapt tests. (tramp-test24-file-name-completion): Do not check for completion mode. (tramp-test31-make-auto-save-file-name): Deactivate temporarily two tests.
2017-03-13 18:05:59 +01:00
(should (string-equal (file-remote-p "/-:host:" 'method) "default-method"))
(should (string-equal (file-remote-p "/-:host:" 'user) "default-user"))
(should (string-equal (file-remote-p "/-:host:" 'host) "host"))
(should (string-equal (file-remote-p "/-:host:" 'localname) ""))
(should (string-equal (file-remote-p "/-:host:" 'hop) nil))
2013-11-05 15:46:57 +01:00
;; Expand `tramp-default-method' and `tramp-default-host'.
(should (string-equal
Require method in remote file name syntax * lisp/minibuffer.el (completion--nth-completion): Do not bind `non-essential'. * lisp/net/tramp-adb.el (tramp-adb-maybe-open-connection): * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-sh.el (tramp-maybe-open-connection): * lisp/net/tramp-smb.el (tramp-smb-maybe-open-connection): Do not call `tramp-check-proper-method-and-host'. * lisp/net/tramp-sh.el (tramp-ssh-controlmaster-options): Better traces. (tramp-maybe-open-connection): Do not use argument for ´tramp-completion-mode-p'. * lisp/net/tramp.el (tramp-default-method-marker): New defconst. (tramp-prefix-format, tramp-postfix-method-format) (tramp-prefix-ipv6-format, tramp-postfix-ipv6-format) (tramp-prefix-port-format, tramp-postfix-host-format) (tramp-file-name-regexp, tramp-completion-file-name-regexp): Use `eq' instead of `eqal'. (tramp-method-regexp, tramp-domain-regexp) (tramp-remote-file-name-spec-regexp) (tramp-file-name-regexp-unified) (tramp-completion-file-name-regexp-unified) (tramp-completion-file-name-regexp-separate): Adapt regexp. (tramp-completion-file-name-handler-alist) (tramp-run-real-handler): Autoload them. (tramp-find-method): Handle `tramp-default-method-marker'. (tramp-check-proper-method-and-host) (tramp-completion-run-real-handler): Remove them. (tramp-error-with-buffer, tramp-connectable-p): Do not use argument for ´tramp-completion-mode-p'. (tramp-find-foreign-file-name-handler): Remove COMPLETION argument. Do not apply heuristic for completion. (tramp-file-name-handler): Do not modify `non-essential'. (tramp-completion-file-name-handler): Change implementation. (tramp-autoload-file-name-handler) (tramp-completion-handle-file-name-all-completions): Call `tramp-run-real-handler'. (tramp-completion-mode-p): Do not autoload. Remove argument. Do not apply heuristic for completion. (tramp-completion-dissect-file-name): Simplify implementation. (tramp-handle-file-name-as-directory): Call `tramp-connectable-p'. * test/lisp/net/tramp-tests.el (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test03-file-name-defaults) (tramp-test06-directory-file-name): Adapt to the new syntax. (tramp-test11-copy-file, tramp-test12-rename-file) (tramp--test-check-files): Deactivate temporarily tests with quoted file names. (tramp-test16-directory-files, tramp-test17-insert-directory): Adapt tests. (tramp-test24-file-name-completion): Do not check for completion mode. (tramp-test31-make-auto-save-file-name): Deactivate temporarily two tests.
2017-03-13 18:05:59 +01:00
(file-remote-p "/-:user@:")
(format "/%s:%s@%s:" "default-method" "user" "default-host")))
(should (string-equal (file-remote-p "/-:user@:" 'method) "default-method"))
(should (string-equal (file-remote-p "/-:user@:" 'user) "user"))
(should (string-equal (file-remote-p "/-:user@:" 'host) "default-host"))
(should (string-equal (file-remote-p "/-:user@:" 'localname) ""))
(should (string-equal (file-remote-p "/-:user@:" 'hop) nil))
2013-11-05 15:46:57 +01:00
;; Expand `tramp-default-method'.
(should (string-equal
Require method in remote file name syntax * lisp/minibuffer.el (completion--nth-completion): Do not bind `non-essential'. * lisp/net/tramp-adb.el (tramp-adb-maybe-open-connection): * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-sh.el (tramp-maybe-open-connection): * lisp/net/tramp-smb.el (tramp-smb-maybe-open-connection): Do not call `tramp-check-proper-method-and-host'. * lisp/net/tramp-sh.el (tramp-ssh-controlmaster-options): Better traces. (tramp-maybe-open-connection): Do not use argument for ´tramp-completion-mode-p'. * lisp/net/tramp.el (tramp-default-method-marker): New defconst. (tramp-prefix-format, tramp-postfix-method-format) (tramp-prefix-ipv6-format, tramp-postfix-ipv6-format) (tramp-prefix-port-format, tramp-postfix-host-format) (tramp-file-name-regexp, tramp-completion-file-name-regexp): Use `eq' instead of `eqal'. (tramp-method-regexp, tramp-domain-regexp) (tramp-remote-file-name-spec-regexp) (tramp-file-name-regexp-unified) (tramp-completion-file-name-regexp-unified) (tramp-completion-file-name-regexp-separate): Adapt regexp. (tramp-completion-file-name-handler-alist) (tramp-run-real-handler): Autoload them. (tramp-find-method): Handle `tramp-default-method-marker'. (tramp-check-proper-method-and-host) (tramp-completion-run-real-handler): Remove them. (tramp-error-with-buffer, tramp-connectable-p): Do not use argument for ´tramp-completion-mode-p'. (tramp-find-foreign-file-name-handler): Remove COMPLETION argument. Do not apply heuristic for completion. (tramp-file-name-handler): Do not modify `non-essential'. (tramp-completion-file-name-handler): Change implementation. (tramp-autoload-file-name-handler) (tramp-completion-handle-file-name-all-completions): Call `tramp-run-real-handler'. (tramp-completion-mode-p): Do not autoload. Remove argument. Do not apply heuristic for completion. (tramp-completion-dissect-file-name): Simplify implementation. (tramp-handle-file-name-as-directory): Call `tramp-connectable-p'. * test/lisp/net/tramp-tests.el (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test03-file-name-defaults) (tramp-test06-directory-file-name): Adapt to the new syntax. (tramp-test11-copy-file, tramp-test12-rename-file) (tramp--test-check-files): Deactivate temporarily tests with quoted file names. (tramp-test16-directory-files, tramp-test17-insert-directory): Adapt tests. (tramp-test24-file-name-completion): Do not check for completion mode. (tramp-test31-make-auto-save-file-name): Deactivate temporarily two tests.
2017-03-13 18:05:59 +01:00
(file-remote-p "/-:user@host:")
2013-11-05 15:46:57 +01:00
(format "/%s:%s@%s:" "default-method" "user" "host")))
(should (string-equal
Require method in remote file name syntax * lisp/minibuffer.el (completion--nth-completion): Do not bind `non-essential'. * lisp/net/tramp-adb.el (tramp-adb-maybe-open-connection): * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-sh.el (tramp-maybe-open-connection): * lisp/net/tramp-smb.el (tramp-smb-maybe-open-connection): Do not call `tramp-check-proper-method-and-host'. * lisp/net/tramp-sh.el (tramp-ssh-controlmaster-options): Better traces. (tramp-maybe-open-connection): Do not use argument for ´tramp-completion-mode-p'. * lisp/net/tramp.el (tramp-default-method-marker): New defconst. (tramp-prefix-format, tramp-postfix-method-format) (tramp-prefix-ipv6-format, tramp-postfix-ipv6-format) (tramp-prefix-port-format, tramp-postfix-host-format) (tramp-file-name-regexp, tramp-completion-file-name-regexp): Use `eq' instead of `eqal'. (tramp-method-regexp, tramp-domain-regexp) (tramp-remote-file-name-spec-regexp) (tramp-file-name-regexp-unified) (tramp-completion-file-name-regexp-unified) (tramp-completion-file-name-regexp-separate): Adapt regexp. (tramp-completion-file-name-handler-alist) (tramp-run-real-handler): Autoload them. (tramp-find-method): Handle `tramp-default-method-marker'. (tramp-check-proper-method-and-host) (tramp-completion-run-real-handler): Remove them. (tramp-error-with-buffer, tramp-connectable-p): Do not use argument for ´tramp-completion-mode-p'. (tramp-find-foreign-file-name-handler): Remove COMPLETION argument. Do not apply heuristic for completion. (tramp-file-name-handler): Do not modify `non-essential'. (tramp-completion-file-name-handler): Change implementation. (tramp-autoload-file-name-handler) (tramp-completion-handle-file-name-all-completions): Call `tramp-run-real-handler'. (tramp-completion-mode-p): Do not autoload. Remove argument. Do not apply heuristic for completion. (tramp-completion-dissect-file-name): Simplify implementation. (tramp-handle-file-name-as-directory): Call `tramp-connectable-p'. * test/lisp/net/tramp-tests.el (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test03-file-name-defaults) (tramp-test06-directory-file-name): Adapt to the new syntax. (tramp-test11-copy-file, tramp-test12-rename-file) (tramp--test-check-files): Deactivate temporarily tests with quoted file names. (tramp-test16-directory-files, tramp-test17-insert-directory): Adapt tests. (tramp-test24-file-name-completion): Do not check for completion mode. (tramp-test31-make-auto-save-file-name): Deactivate temporarily two tests.
2017-03-13 18:05:59 +01:00
(file-remote-p "/-:user@host:" 'method) "default-method"))
(should (string-equal (file-remote-p "/-:user@host:" 'user) "user"))
(should (string-equal (file-remote-p "/-:user@host:" 'host) "host"))
(should (string-equal (file-remote-p "/-:user@host:" 'localname) ""))
(should (string-equal (file-remote-p "/-:user@host:" 'hop) nil))
2013-11-05 15:46:57 +01:00
;; Expand `tramp-default-user'.
(should (string-equal
(file-remote-p "/method:host:")
(format "/%s:%s@%s:" "method" "default-user" "host")))
(should (string-equal (file-remote-p "/method:host:" 'method) "method"))
(should (string-equal (file-remote-p "/method:host:" 'user) "default-user"))
(should (string-equal (file-remote-p "/method:host:" 'host) "host"))
(should (string-equal (file-remote-p "/method:host:" 'localname) ""))
(should (string-equal (file-remote-p "/method:host:" 'hop) nil))
2013-11-05 15:46:57 +01:00
;; Expand `tramp-default-host'.
(should (string-equal
(file-remote-p "/method:user@:")
(format "/%s:%s@%s:" "method" "user" "default-host")))
(should (string-equal (file-remote-p "/method:user@:" 'method) "method"))
(should (string-equal (file-remote-p "/method:user@:" 'user) "user"))
(should (string-equal (file-remote-p "/method:user@:" 'host)
"default-host"))
(should (string-equal (file-remote-p "/method:user@:" 'localname) ""))
(should (string-equal (file-remote-p "/method:user@:" 'hop) nil))
2013-11-05 15:46:57 +01:00
;; No expansion.
(should (string-equal
(file-remote-p "/method:user@host:")
(format "/%s:%s@%s:" "method" "user" "host")))
(should (string-equal
(file-remote-p "/method:user@host:" 'method) "method"))
(should (string-equal (file-remote-p "/method:user@host:" 'user) "user"))
(should (string-equal (file-remote-p "/method:user@host:" 'host) "host"))
(should (string-equal (file-remote-p "/method:user@host:" 'localname) ""))
(should (string-equal (file-remote-p "/method:user@host:" 'hop) nil))
2013-11-05 15:46:57 +01:00
;; No expansion.
(should (string-equal
(file-remote-p "/method:user@email@host:")
(format "/%s:%s@%s:" "method" "user@email" "host")))
(should (string-equal
(file-remote-p "/method:user@email@host:" 'method) "method"))
(should (string-equal
(file-remote-p "/method:user@email@host:" 'user) "user@email"))
(should (string-equal
(file-remote-p "/method:user@email@host:" 'host) "host"))
(should (string-equal
(file-remote-p "/method:user@email@host:" 'localname) ""))
(should (string-equal
(file-remote-p "/method:user@email@host:" 'hop) nil))
2013-11-05 15:46:57 +01:00
;; Expand `tramp-default-method' and `tramp-default-user'.
(should (string-equal
Require method in remote file name syntax * lisp/minibuffer.el (completion--nth-completion): Do not bind `non-essential'. * lisp/net/tramp-adb.el (tramp-adb-maybe-open-connection): * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-sh.el (tramp-maybe-open-connection): * lisp/net/tramp-smb.el (tramp-smb-maybe-open-connection): Do not call `tramp-check-proper-method-and-host'. * lisp/net/tramp-sh.el (tramp-ssh-controlmaster-options): Better traces. (tramp-maybe-open-connection): Do not use argument for ´tramp-completion-mode-p'. * lisp/net/tramp.el (tramp-default-method-marker): New defconst. (tramp-prefix-format, tramp-postfix-method-format) (tramp-prefix-ipv6-format, tramp-postfix-ipv6-format) (tramp-prefix-port-format, tramp-postfix-host-format) (tramp-file-name-regexp, tramp-completion-file-name-regexp): Use `eq' instead of `eqal'. (tramp-method-regexp, tramp-domain-regexp) (tramp-remote-file-name-spec-regexp) (tramp-file-name-regexp-unified) (tramp-completion-file-name-regexp-unified) (tramp-completion-file-name-regexp-separate): Adapt regexp. (tramp-completion-file-name-handler-alist) (tramp-run-real-handler): Autoload them. (tramp-find-method): Handle `tramp-default-method-marker'. (tramp-check-proper-method-and-host) (tramp-completion-run-real-handler): Remove them. (tramp-error-with-buffer, tramp-connectable-p): Do not use argument for ´tramp-completion-mode-p'. (tramp-find-foreign-file-name-handler): Remove COMPLETION argument. Do not apply heuristic for completion. (tramp-file-name-handler): Do not modify `non-essential'. (tramp-completion-file-name-handler): Change implementation. (tramp-autoload-file-name-handler) (tramp-completion-handle-file-name-all-completions): Call `tramp-run-real-handler'. (tramp-completion-mode-p): Do not autoload. Remove argument. Do not apply heuristic for completion. (tramp-completion-dissect-file-name): Simplify implementation. (tramp-handle-file-name-as-directory): Call `tramp-connectable-p'. * test/lisp/net/tramp-tests.el (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test03-file-name-defaults) (tramp-test06-directory-file-name): Adapt to the new syntax. (tramp-test11-copy-file, tramp-test12-rename-file) (tramp--test-check-files): Deactivate temporarily tests with quoted file names. (tramp-test16-directory-files, tramp-test17-insert-directory): Adapt tests. (tramp-test24-file-name-completion): Do not check for completion mode. (tramp-test31-make-auto-save-file-name): Deactivate temporarily two tests.
2017-03-13 18:05:59 +01:00
(file-remote-p "/-:host#1234:")
2013-11-05 15:46:57 +01:00
(format "/%s:%s@%s:" "default-method" "default-user" "host#1234")))
(should (string-equal
Require method in remote file name syntax * lisp/minibuffer.el (completion--nth-completion): Do not bind `non-essential'. * lisp/net/tramp-adb.el (tramp-adb-maybe-open-connection): * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-sh.el (tramp-maybe-open-connection): * lisp/net/tramp-smb.el (tramp-smb-maybe-open-connection): Do not call `tramp-check-proper-method-and-host'. * lisp/net/tramp-sh.el (tramp-ssh-controlmaster-options): Better traces. (tramp-maybe-open-connection): Do not use argument for ´tramp-completion-mode-p'. * lisp/net/tramp.el (tramp-default-method-marker): New defconst. (tramp-prefix-format, tramp-postfix-method-format) (tramp-prefix-ipv6-format, tramp-postfix-ipv6-format) (tramp-prefix-port-format, tramp-postfix-host-format) (tramp-file-name-regexp, tramp-completion-file-name-regexp): Use `eq' instead of `eqal'. (tramp-method-regexp, tramp-domain-regexp) (tramp-remote-file-name-spec-regexp) (tramp-file-name-regexp-unified) (tramp-completion-file-name-regexp-unified) (tramp-completion-file-name-regexp-separate): Adapt regexp. (tramp-completion-file-name-handler-alist) (tramp-run-real-handler): Autoload them. (tramp-find-method): Handle `tramp-default-method-marker'. (tramp-check-proper-method-and-host) (tramp-completion-run-real-handler): Remove them. (tramp-error-with-buffer, tramp-connectable-p): Do not use argument for ´tramp-completion-mode-p'. (tramp-find-foreign-file-name-handler): Remove COMPLETION argument. Do not apply heuristic for completion. (tramp-file-name-handler): Do not modify `non-essential'. (tramp-completion-file-name-handler): Change implementation. (tramp-autoload-file-name-handler) (tramp-completion-handle-file-name-all-completions): Call `tramp-run-real-handler'. (tramp-completion-mode-p): Do not autoload. Remove argument. Do not apply heuristic for completion. (tramp-completion-dissect-file-name): Simplify implementation. (tramp-handle-file-name-as-directory): Call `tramp-connectable-p'. * test/lisp/net/tramp-tests.el (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test03-file-name-defaults) (tramp-test06-directory-file-name): Adapt to the new syntax. (tramp-test11-copy-file, tramp-test12-rename-file) (tramp--test-check-files): Deactivate temporarily tests with quoted file names. (tramp-test16-directory-files, tramp-test17-insert-directory): Adapt tests. (tramp-test24-file-name-completion): Do not check for completion mode. (tramp-test31-make-auto-save-file-name): Deactivate temporarily two tests.
2017-03-13 18:05:59 +01:00
(file-remote-p "/-:host#1234:" 'method) "default-method"))
(should (string-equal (file-remote-p "/-:host#1234:" 'user) "default-user"))
(should (string-equal (file-remote-p "/-:host#1234:" 'host) "host#1234"))
(should (string-equal (file-remote-p "/-:host#1234:" 'localname) ""))
(should (string-equal (file-remote-p "/-:host#1234:" 'hop) nil))
2013-11-05 15:46:57 +01:00
;; Expand `tramp-default-method'.
(should (string-equal
Require method in remote file name syntax * lisp/minibuffer.el (completion--nth-completion): Do not bind `non-essential'. * lisp/net/tramp-adb.el (tramp-adb-maybe-open-connection): * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-sh.el (tramp-maybe-open-connection): * lisp/net/tramp-smb.el (tramp-smb-maybe-open-connection): Do not call `tramp-check-proper-method-and-host'. * lisp/net/tramp-sh.el (tramp-ssh-controlmaster-options): Better traces. (tramp-maybe-open-connection): Do not use argument for ´tramp-completion-mode-p'. * lisp/net/tramp.el (tramp-default-method-marker): New defconst. (tramp-prefix-format, tramp-postfix-method-format) (tramp-prefix-ipv6-format, tramp-postfix-ipv6-format) (tramp-prefix-port-format, tramp-postfix-host-format) (tramp-file-name-regexp, tramp-completion-file-name-regexp): Use `eq' instead of `eqal'. (tramp-method-regexp, tramp-domain-regexp) (tramp-remote-file-name-spec-regexp) (tramp-file-name-regexp-unified) (tramp-completion-file-name-regexp-unified) (tramp-completion-file-name-regexp-separate): Adapt regexp. (tramp-completion-file-name-handler-alist) (tramp-run-real-handler): Autoload them. (tramp-find-method): Handle `tramp-default-method-marker'. (tramp-check-proper-method-and-host) (tramp-completion-run-real-handler): Remove them. (tramp-error-with-buffer, tramp-connectable-p): Do not use argument for ´tramp-completion-mode-p'. (tramp-find-foreign-file-name-handler): Remove COMPLETION argument. Do not apply heuristic for completion. (tramp-file-name-handler): Do not modify `non-essential'. (tramp-completion-file-name-handler): Change implementation. (tramp-autoload-file-name-handler) (tramp-completion-handle-file-name-all-completions): Call `tramp-run-real-handler'. (tramp-completion-mode-p): Do not autoload. Remove argument. Do not apply heuristic for completion. (tramp-completion-dissect-file-name): Simplify implementation. (tramp-handle-file-name-as-directory): Call `tramp-connectable-p'. * test/lisp/net/tramp-tests.el (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test03-file-name-defaults) (tramp-test06-directory-file-name): Adapt to the new syntax. (tramp-test11-copy-file, tramp-test12-rename-file) (tramp--test-check-files): Deactivate temporarily tests with quoted file names. (tramp-test16-directory-files, tramp-test17-insert-directory): Adapt tests. (tramp-test24-file-name-completion): Do not check for completion mode. (tramp-test31-make-auto-save-file-name): Deactivate temporarily two tests.
2017-03-13 18:05:59 +01:00
(file-remote-p "/-:user@host#1234:")
2013-11-05 15:46:57 +01:00
(format "/%s:%s@%s:" "default-method" "user" "host#1234")))
(should (string-equal
Require method in remote file name syntax * lisp/minibuffer.el (completion--nth-completion): Do not bind `non-essential'. * lisp/net/tramp-adb.el (tramp-adb-maybe-open-connection): * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-sh.el (tramp-maybe-open-connection): * lisp/net/tramp-smb.el (tramp-smb-maybe-open-connection): Do not call `tramp-check-proper-method-and-host'. * lisp/net/tramp-sh.el (tramp-ssh-controlmaster-options): Better traces. (tramp-maybe-open-connection): Do not use argument for ´tramp-completion-mode-p'. * lisp/net/tramp.el (tramp-default-method-marker): New defconst. (tramp-prefix-format, tramp-postfix-method-format) (tramp-prefix-ipv6-format, tramp-postfix-ipv6-format) (tramp-prefix-port-format, tramp-postfix-host-format) (tramp-file-name-regexp, tramp-completion-file-name-regexp): Use `eq' instead of `eqal'. (tramp-method-regexp, tramp-domain-regexp) (tramp-remote-file-name-spec-regexp) (tramp-file-name-regexp-unified) (tramp-completion-file-name-regexp-unified) (tramp-completion-file-name-regexp-separate): Adapt regexp. (tramp-completion-file-name-handler-alist) (tramp-run-real-handler): Autoload them. (tramp-find-method): Handle `tramp-default-method-marker'. (tramp-check-proper-method-and-host) (tramp-completion-run-real-handler): Remove them. (tramp-error-with-buffer, tramp-connectable-p): Do not use argument for ´tramp-completion-mode-p'. (tramp-find-foreign-file-name-handler): Remove COMPLETION argument. Do not apply heuristic for completion. (tramp-file-name-handler): Do not modify `non-essential'. (tramp-completion-file-name-handler): Change implementation. (tramp-autoload-file-name-handler) (tramp-completion-handle-file-name-all-completions): Call `tramp-run-real-handler'. (tramp-completion-mode-p): Do not autoload. Remove argument. Do not apply heuristic for completion. (tramp-completion-dissect-file-name): Simplify implementation. (tramp-handle-file-name-as-directory): Call `tramp-connectable-p'. * test/lisp/net/tramp-tests.el (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test03-file-name-defaults) (tramp-test06-directory-file-name): Adapt to the new syntax. (tramp-test11-copy-file, tramp-test12-rename-file) (tramp--test-check-files): Deactivate temporarily tests with quoted file names. (tramp-test16-directory-files, tramp-test17-insert-directory): Adapt tests. (tramp-test24-file-name-completion): Do not check for completion mode. (tramp-test31-make-auto-save-file-name): Deactivate temporarily two tests.
2017-03-13 18:05:59 +01:00
(file-remote-p "/-:user@host#1234:" 'method) "default-method"))
(should (string-equal (file-remote-p "/-:user@host#1234:" 'user) "user"))
Stronger check for Tramp method * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-rclone.el (tramp-rclone-maybe-open-connection): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-maybe-open-connection): Use `tramp-get-connection-name'. * lisp/net/tramp-sh.el (tramp-sh-handle-make-symbolic-link): * lisp/net/tramp-smb.el (tramp-smb-handle-make-symbolic-link): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-handle-make-symbolic-link): Don't check remote TARGET. * lisp/net/tramp.el (tramp-dissect-file-name): Check for proper method. (tramp-file-name-for-operation): Take only 2nd argument into account for file name handler. (tramp-file-name-handler): Suppress checks for `file-remote-p'. * test/lisp/net/tramp-archive-tests.el (tramp-archive-test02-file-name-dissect): Suppress check for wrong method. * test/lisp/net/tramp-tests.el (tramp--test-instrument-test-case): Dump *all* Tramp buffers. (tramp-test02-file-name-dissect) (tramp-test02-file-name-dissect-simplified) (tramp-test02-file-name-dissect-separate): Check also wrong method. (tramp-test03-file-name-defaults): Check, that the respective Tramp package is loaded. (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name) (tramp-test06-directory-file-name, tramp-test44-auto-load): Suppress check for wrong method. (tramp-test30-make-process): Remove instrumentation code. (tramp-test31-interrupt-process, tramp-test36-vc-registered): Guarantee that connection is established prior starting process.
2019-06-04 12:51:45 +02:00
(should (string-equal
(file-remote-p "/-:user@host#1234:" 'host) "host#1234"))
Require method in remote file name syntax * lisp/minibuffer.el (completion--nth-completion): Do not bind `non-essential'. * lisp/net/tramp-adb.el (tramp-adb-maybe-open-connection): * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-sh.el (tramp-maybe-open-connection): * lisp/net/tramp-smb.el (tramp-smb-maybe-open-connection): Do not call `tramp-check-proper-method-and-host'. * lisp/net/tramp-sh.el (tramp-ssh-controlmaster-options): Better traces. (tramp-maybe-open-connection): Do not use argument for ´tramp-completion-mode-p'. * lisp/net/tramp.el (tramp-default-method-marker): New defconst. (tramp-prefix-format, tramp-postfix-method-format) (tramp-prefix-ipv6-format, tramp-postfix-ipv6-format) (tramp-prefix-port-format, tramp-postfix-host-format) (tramp-file-name-regexp, tramp-completion-file-name-regexp): Use `eq' instead of `eqal'. (tramp-method-regexp, tramp-domain-regexp) (tramp-remote-file-name-spec-regexp) (tramp-file-name-regexp-unified) (tramp-completion-file-name-regexp-unified) (tramp-completion-file-name-regexp-separate): Adapt regexp. (tramp-completion-file-name-handler-alist) (tramp-run-real-handler): Autoload them. (tramp-find-method): Handle `tramp-default-method-marker'. (tramp-check-proper-method-and-host) (tramp-completion-run-real-handler): Remove them. (tramp-error-with-buffer, tramp-connectable-p): Do not use argument for ´tramp-completion-mode-p'. (tramp-find-foreign-file-name-handler): Remove COMPLETION argument. Do not apply heuristic for completion. (tramp-file-name-handler): Do not modify `non-essential'. (tramp-completion-file-name-handler): Change implementation. (tramp-autoload-file-name-handler) (tramp-completion-handle-file-name-all-completions): Call `tramp-run-real-handler'. (tramp-completion-mode-p): Do not autoload. Remove argument. Do not apply heuristic for completion. (tramp-completion-dissect-file-name): Simplify implementation. (tramp-handle-file-name-as-directory): Call `tramp-connectable-p'. * test/lisp/net/tramp-tests.el (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test03-file-name-defaults) (tramp-test06-directory-file-name): Adapt to the new syntax. (tramp-test11-copy-file, tramp-test12-rename-file) (tramp--test-check-files): Deactivate temporarily tests with quoted file names. (tramp-test16-directory-files, tramp-test17-insert-directory): Adapt tests. (tramp-test24-file-name-completion): Do not check for completion mode. (tramp-test31-make-auto-save-file-name): Deactivate temporarily two tests.
2017-03-13 18:05:59 +01:00
(should (string-equal (file-remote-p "/-:user@host#1234:" 'localname) ""))
(should (string-equal (file-remote-p "/-:user@host#1234:" 'hop) nil))
2013-11-05 15:46:57 +01:00
;; Expand `tramp-default-user'.
(should (string-equal
(file-remote-p "/method:host#1234:")
(format "/%s:%s@%s:" "method" "default-user" "host#1234")))
(should (string-equal
(file-remote-p "/method:host#1234:" 'method) "method"))
(should (string-equal
(file-remote-p "/method:host#1234:" 'user) "default-user"))
(should (string-equal
(file-remote-p "/method:host#1234:" 'host) "host#1234"))
(should (string-equal (file-remote-p "/method:host#1234:" 'localname) ""))
(should (string-equal (file-remote-p "/method:host#1234:" 'hop) nil))
2013-11-05 15:46:57 +01:00
;; No expansion.
(should (string-equal
(file-remote-p "/method:user@host#1234:")
(format "/%s:%s@%s:" "method" "user" "host#1234")))
(should (string-equal
(file-remote-p "/method:user@host#1234:" 'method) "method"))
(should (string-equal
(file-remote-p "/method:user@host#1234:" 'user) "user"))
(should (string-equal
(file-remote-p "/method:user@host#1234:" 'host) "host#1234"))
(should (string-equal
(file-remote-p "/method:user@host#1234:" 'localname) ""))
(should (string-equal
(file-remote-p "/method:user@host#1234:" 'hop) nil))
2013-11-05 15:46:57 +01:00
;; Expand `tramp-default-method' and `tramp-default-user'.
(should (string-equal
Require method in remote file name syntax * lisp/minibuffer.el (completion--nth-completion): Do not bind `non-essential'. * lisp/net/tramp-adb.el (tramp-adb-maybe-open-connection): * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-sh.el (tramp-maybe-open-connection): * lisp/net/tramp-smb.el (tramp-smb-maybe-open-connection): Do not call `tramp-check-proper-method-and-host'. * lisp/net/tramp-sh.el (tramp-ssh-controlmaster-options): Better traces. (tramp-maybe-open-connection): Do not use argument for ´tramp-completion-mode-p'. * lisp/net/tramp.el (tramp-default-method-marker): New defconst. (tramp-prefix-format, tramp-postfix-method-format) (tramp-prefix-ipv6-format, tramp-postfix-ipv6-format) (tramp-prefix-port-format, tramp-postfix-host-format) (tramp-file-name-regexp, tramp-completion-file-name-regexp): Use `eq' instead of `eqal'. (tramp-method-regexp, tramp-domain-regexp) (tramp-remote-file-name-spec-regexp) (tramp-file-name-regexp-unified) (tramp-completion-file-name-regexp-unified) (tramp-completion-file-name-regexp-separate): Adapt regexp. (tramp-completion-file-name-handler-alist) (tramp-run-real-handler): Autoload them. (tramp-find-method): Handle `tramp-default-method-marker'. (tramp-check-proper-method-and-host) (tramp-completion-run-real-handler): Remove them. (tramp-error-with-buffer, tramp-connectable-p): Do not use argument for ´tramp-completion-mode-p'. (tramp-find-foreign-file-name-handler): Remove COMPLETION argument. Do not apply heuristic for completion. (tramp-file-name-handler): Do not modify `non-essential'. (tramp-completion-file-name-handler): Change implementation. (tramp-autoload-file-name-handler) (tramp-completion-handle-file-name-all-completions): Call `tramp-run-real-handler'. (tramp-completion-mode-p): Do not autoload. Remove argument. Do not apply heuristic for completion. (tramp-completion-dissect-file-name): Simplify implementation. (tramp-handle-file-name-as-directory): Call `tramp-connectable-p'. * test/lisp/net/tramp-tests.el (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test03-file-name-defaults) (tramp-test06-directory-file-name): Adapt to the new syntax. (tramp-test11-copy-file, tramp-test12-rename-file) (tramp--test-check-files): Deactivate temporarily tests with quoted file names. (tramp-test16-directory-files, tramp-test17-insert-directory): Adapt tests. (tramp-test24-file-name-completion): Do not check for completion mode. (tramp-test31-make-auto-save-file-name): Deactivate temporarily two tests.
2017-03-13 18:05:59 +01:00
(file-remote-p "/-:1.2.3.4:")
2013-11-05 15:46:57 +01:00
(format "/%s:%s@%s:" "default-method" "default-user" "1.2.3.4")))
Stronger check for Tramp method * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-rclone.el (tramp-rclone-maybe-open-connection): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-maybe-open-connection): Use `tramp-get-connection-name'. * lisp/net/tramp-sh.el (tramp-sh-handle-make-symbolic-link): * lisp/net/tramp-smb.el (tramp-smb-handle-make-symbolic-link): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-handle-make-symbolic-link): Don't check remote TARGET. * lisp/net/tramp.el (tramp-dissect-file-name): Check for proper method. (tramp-file-name-for-operation): Take only 2nd argument into account for file name handler. (tramp-file-name-handler): Suppress checks for `file-remote-p'. * test/lisp/net/tramp-archive-tests.el (tramp-archive-test02-file-name-dissect): Suppress check for wrong method. * test/lisp/net/tramp-tests.el (tramp--test-instrument-test-case): Dump *all* Tramp buffers. (tramp-test02-file-name-dissect) (tramp-test02-file-name-dissect-simplified) (tramp-test02-file-name-dissect-separate): Check also wrong method. (tramp-test03-file-name-defaults): Check, that the respective Tramp package is loaded. (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name) (tramp-test06-directory-file-name, tramp-test44-auto-load): Suppress check for wrong method. (tramp-test30-make-process): Remove instrumentation code. (tramp-test31-interrupt-process, tramp-test36-vc-registered): Guarantee that connection is established prior starting process.
2019-06-04 12:51:45 +02:00
(should (string-equal
(file-remote-p "/-:1.2.3.4:" 'method) "default-method"))
Require method in remote file name syntax * lisp/minibuffer.el (completion--nth-completion): Do not bind `non-essential'. * lisp/net/tramp-adb.el (tramp-adb-maybe-open-connection): * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-sh.el (tramp-maybe-open-connection): * lisp/net/tramp-smb.el (tramp-smb-maybe-open-connection): Do not call `tramp-check-proper-method-and-host'. * lisp/net/tramp-sh.el (tramp-ssh-controlmaster-options): Better traces. (tramp-maybe-open-connection): Do not use argument for ´tramp-completion-mode-p'. * lisp/net/tramp.el (tramp-default-method-marker): New defconst. (tramp-prefix-format, tramp-postfix-method-format) (tramp-prefix-ipv6-format, tramp-postfix-ipv6-format) (tramp-prefix-port-format, tramp-postfix-host-format) (tramp-file-name-regexp, tramp-completion-file-name-regexp): Use `eq' instead of `eqal'. (tramp-method-regexp, tramp-domain-regexp) (tramp-remote-file-name-spec-regexp) (tramp-file-name-regexp-unified) (tramp-completion-file-name-regexp-unified) (tramp-completion-file-name-regexp-separate): Adapt regexp. (tramp-completion-file-name-handler-alist) (tramp-run-real-handler): Autoload them. (tramp-find-method): Handle `tramp-default-method-marker'. (tramp-check-proper-method-and-host) (tramp-completion-run-real-handler): Remove them. (tramp-error-with-buffer, tramp-connectable-p): Do not use argument for ´tramp-completion-mode-p'. (tramp-find-foreign-file-name-handler): Remove COMPLETION argument. Do not apply heuristic for completion. (tramp-file-name-handler): Do not modify `non-essential'. (tramp-completion-file-name-handler): Change implementation. (tramp-autoload-file-name-handler) (tramp-completion-handle-file-name-all-completions): Call `tramp-run-real-handler'. (tramp-completion-mode-p): Do not autoload. Remove argument. Do not apply heuristic for completion. (tramp-completion-dissect-file-name): Simplify implementation. (tramp-handle-file-name-as-directory): Call `tramp-connectable-p'. * test/lisp/net/tramp-tests.el (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test03-file-name-defaults) (tramp-test06-directory-file-name): Adapt to the new syntax. (tramp-test11-copy-file, tramp-test12-rename-file) (tramp--test-check-files): Deactivate temporarily tests with quoted file names. (tramp-test16-directory-files, tramp-test17-insert-directory): Adapt tests. (tramp-test24-file-name-completion): Do not check for completion mode. (tramp-test31-make-auto-save-file-name): Deactivate temporarily two tests.
2017-03-13 18:05:59 +01:00
(should (string-equal (file-remote-p "/-:1.2.3.4:" 'user) "default-user"))
(should (string-equal (file-remote-p "/-:1.2.3.4:" 'host) "1.2.3.4"))
(should (string-equal (file-remote-p "/-:1.2.3.4:" 'localname) ""))
(should (string-equal (file-remote-p "/-:1.2.3.4:" 'hop) nil))
2013-11-05 15:46:57 +01:00
;; Expand `tramp-default-method'.
(should (string-equal
Require method in remote file name syntax * lisp/minibuffer.el (completion--nth-completion): Do not bind `non-essential'. * lisp/net/tramp-adb.el (tramp-adb-maybe-open-connection): * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-sh.el (tramp-maybe-open-connection): * lisp/net/tramp-smb.el (tramp-smb-maybe-open-connection): Do not call `tramp-check-proper-method-and-host'. * lisp/net/tramp-sh.el (tramp-ssh-controlmaster-options): Better traces. (tramp-maybe-open-connection): Do not use argument for ´tramp-completion-mode-p'. * lisp/net/tramp.el (tramp-default-method-marker): New defconst. (tramp-prefix-format, tramp-postfix-method-format) (tramp-prefix-ipv6-format, tramp-postfix-ipv6-format) (tramp-prefix-port-format, tramp-postfix-host-format) (tramp-file-name-regexp, tramp-completion-file-name-regexp): Use `eq' instead of `eqal'. (tramp-method-regexp, tramp-domain-regexp) (tramp-remote-file-name-spec-regexp) (tramp-file-name-regexp-unified) (tramp-completion-file-name-regexp-unified) (tramp-completion-file-name-regexp-separate): Adapt regexp. (tramp-completion-file-name-handler-alist) (tramp-run-real-handler): Autoload them. (tramp-find-method): Handle `tramp-default-method-marker'. (tramp-check-proper-method-and-host) (tramp-completion-run-real-handler): Remove them. (tramp-error-with-buffer, tramp-connectable-p): Do not use argument for ´tramp-completion-mode-p'. (tramp-find-foreign-file-name-handler): Remove COMPLETION argument. Do not apply heuristic for completion. (tramp-file-name-handler): Do not modify `non-essential'. (tramp-completion-file-name-handler): Change implementation. (tramp-autoload-file-name-handler) (tramp-completion-handle-file-name-all-completions): Call `tramp-run-real-handler'. (tramp-completion-mode-p): Do not autoload. Remove argument. Do not apply heuristic for completion. (tramp-completion-dissect-file-name): Simplify implementation. (tramp-handle-file-name-as-directory): Call `tramp-connectable-p'. * test/lisp/net/tramp-tests.el (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test03-file-name-defaults) (tramp-test06-directory-file-name): Adapt to the new syntax. (tramp-test11-copy-file, tramp-test12-rename-file) (tramp--test-check-files): Deactivate temporarily tests with quoted file names. (tramp-test16-directory-files, tramp-test17-insert-directory): Adapt tests. (tramp-test24-file-name-completion): Do not check for completion mode. (tramp-test31-make-auto-save-file-name): Deactivate temporarily two tests.
2017-03-13 18:05:59 +01:00
(file-remote-p "/-:user@1.2.3.4:")
2013-11-05 15:46:57 +01:00
(format "/%s:%s@%s:" "default-method" "user" "1.2.3.4")))
(should (string-equal
Require method in remote file name syntax * lisp/minibuffer.el (completion--nth-completion): Do not bind `non-essential'. * lisp/net/tramp-adb.el (tramp-adb-maybe-open-connection): * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-sh.el (tramp-maybe-open-connection): * lisp/net/tramp-smb.el (tramp-smb-maybe-open-connection): Do not call `tramp-check-proper-method-and-host'. * lisp/net/tramp-sh.el (tramp-ssh-controlmaster-options): Better traces. (tramp-maybe-open-connection): Do not use argument for ´tramp-completion-mode-p'. * lisp/net/tramp.el (tramp-default-method-marker): New defconst. (tramp-prefix-format, tramp-postfix-method-format) (tramp-prefix-ipv6-format, tramp-postfix-ipv6-format) (tramp-prefix-port-format, tramp-postfix-host-format) (tramp-file-name-regexp, tramp-completion-file-name-regexp): Use `eq' instead of `eqal'. (tramp-method-regexp, tramp-domain-regexp) (tramp-remote-file-name-spec-regexp) (tramp-file-name-regexp-unified) (tramp-completion-file-name-regexp-unified) (tramp-completion-file-name-regexp-separate): Adapt regexp. (tramp-completion-file-name-handler-alist) (tramp-run-real-handler): Autoload them. (tramp-find-method): Handle `tramp-default-method-marker'. (tramp-check-proper-method-and-host) (tramp-completion-run-real-handler): Remove them. (tramp-error-with-buffer, tramp-connectable-p): Do not use argument for ´tramp-completion-mode-p'. (tramp-find-foreign-file-name-handler): Remove COMPLETION argument. Do not apply heuristic for completion. (tramp-file-name-handler): Do not modify `non-essential'. (tramp-completion-file-name-handler): Change implementation. (tramp-autoload-file-name-handler) (tramp-completion-handle-file-name-all-completions): Call `tramp-run-real-handler'. (tramp-completion-mode-p): Do not autoload. Remove argument. Do not apply heuristic for completion. (tramp-completion-dissect-file-name): Simplify implementation. (tramp-handle-file-name-as-directory): Call `tramp-connectable-p'. * test/lisp/net/tramp-tests.el (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test03-file-name-defaults) (tramp-test06-directory-file-name): Adapt to the new syntax. (tramp-test11-copy-file, tramp-test12-rename-file) (tramp--test-check-files): Deactivate temporarily tests with quoted file names. (tramp-test16-directory-files, tramp-test17-insert-directory): Adapt tests. (tramp-test24-file-name-completion): Do not check for completion mode. (tramp-test31-make-auto-save-file-name): Deactivate temporarily two tests.
2017-03-13 18:05:59 +01:00
(file-remote-p "/-:user@1.2.3.4:" 'method) "default-method"))
(should (string-equal (file-remote-p "/-:user@1.2.3.4:" 'user) "user"))
(should (string-equal (file-remote-p "/-:user@1.2.3.4:" 'host) "1.2.3.4"))
(should (string-equal (file-remote-p "/-:user@1.2.3.4:" 'localname) ""))
(should (string-equal (file-remote-p "/-:user@1.2.3.4:" 'hop) nil))
2013-11-05 15:46:57 +01:00
;; Expand `tramp-default-user'.
(should (string-equal
(file-remote-p "/method:1.2.3.4:")
(format "/%s:%s@%s:" "method" "default-user" "1.2.3.4")))
(should (string-equal (file-remote-p "/method:1.2.3.4:" 'method) "method"))
(should (string-equal
(file-remote-p "/method:1.2.3.4:" 'user) "default-user"))
(should (string-equal (file-remote-p "/method:1.2.3.4:" 'host) "1.2.3.4"))
(should (string-equal (file-remote-p "/method:1.2.3.4:" 'localname) ""))
(should (string-equal (file-remote-p "/method:1.2.3.4:" 'hop) nil))
2013-11-05 15:46:57 +01:00
;; No expansion.
(should (string-equal
(file-remote-p "/method:user@1.2.3.4:")
(format "/%s:%s@%s:" "method" "user" "1.2.3.4")))
(should (string-equal
(file-remote-p "/method:user@1.2.3.4:" 'method) "method"))
(should (string-equal (file-remote-p "/method:user@1.2.3.4:" 'user) "user"))
(should (string-equal
(file-remote-p "/method:user@1.2.3.4:" 'host) "1.2.3.4"))
(should (string-equal
(file-remote-p "/method:user@1.2.3.4:" 'localname) ""))
(should (string-equal
(file-remote-p "/method:user@1.2.3.4:" 'hop) nil))
2013-11-05 15:46:57 +01:00
;; Expand `tramp-default-method', `tramp-default-user' and
;; `tramp-default-host'.
(should (string-equal
Require method in remote file name syntax * lisp/minibuffer.el (completion--nth-completion): Do not bind `non-essential'. * lisp/net/tramp-adb.el (tramp-adb-maybe-open-connection): * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-sh.el (tramp-maybe-open-connection): * lisp/net/tramp-smb.el (tramp-smb-maybe-open-connection): Do not call `tramp-check-proper-method-and-host'. * lisp/net/tramp-sh.el (tramp-ssh-controlmaster-options): Better traces. (tramp-maybe-open-connection): Do not use argument for ´tramp-completion-mode-p'. * lisp/net/tramp.el (tramp-default-method-marker): New defconst. (tramp-prefix-format, tramp-postfix-method-format) (tramp-prefix-ipv6-format, tramp-postfix-ipv6-format) (tramp-prefix-port-format, tramp-postfix-host-format) (tramp-file-name-regexp, tramp-completion-file-name-regexp): Use `eq' instead of `eqal'. (tramp-method-regexp, tramp-domain-regexp) (tramp-remote-file-name-spec-regexp) (tramp-file-name-regexp-unified) (tramp-completion-file-name-regexp-unified) (tramp-completion-file-name-regexp-separate): Adapt regexp. (tramp-completion-file-name-handler-alist) (tramp-run-real-handler): Autoload them. (tramp-find-method): Handle `tramp-default-method-marker'. (tramp-check-proper-method-and-host) (tramp-completion-run-real-handler): Remove them. (tramp-error-with-buffer, tramp-connectable-p): Do not use argument for ´tramp-completion-mode-p'. (tramp-find-foreign-file-name-handler): Remove COMPLETION argument. Do not apply heuristic for completion. (tramp-file-name-handler): Do not modify `non-essential'. (tramp-completion-file-name-handler): Change implementation. (tramp-autoload-file-name-handler) (tramp-completion-handle-file-name-all-completions): Call `tramp-run-real-handler'. (tramp-completion-mode-p): Do not autoload. Remove argument. Do not apply heuristic for completion. (tramp-completion-dissect-file-name): Simplify implementation. (tramp-handle-file-name-as-directory): Call `tramp-connectable-p'. * test/lisp/net/tramp-tests.el (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test03-file-name-defaults) (tramp-test06-directory-file-name): Adapt to the new syntax. (tramp-test11-copy-file, tramp-test12-rename-file) (tramp--test-check-files): Deactivate temporarily tests with quoted file names. (tramp-test16-directory-files, tramp-test17-insert-directory): Adapt tests. (tramp-test24-file-name-completion): Do not check for completion mode. (tramp-test31-make-auto-save-file-name): Deactivate temporarily two tests.
2017-03-13 18:05:59 +01:00
(file-remote-p "/-:[]:")
(format
"/%s:%s@%s:" "default-method" "default-user" "default-host")))
Require method in remote file name syntax * lisp/minibuffer.el (completion--nth-completion): Do not bind `non-essential'. * lisp/net/tramp-adb.el (tramp-adb-maybe-open-connection): * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-sh.el (tramp-maybe-open-connection): * lisp/net/tramp-smb.el (tramp-smb-maybe-open-connection): Do not call `tramp-check-proper-method-and-host'. * lisp/net/tramp-sh.el (tramp-ssh-controlmaster-options): Better traces. (tramp-maybe-open-connection): Do not use argument for ´tramp-completion-mode-p'. * lisp/net/tramp.el (tramp-default-method-marker): New defconst. (tramp-prefix-format, tramp-postfix-method-format) (tramp-prefix-ipv6-format, tramp-postfix-ipv6-format) (tramp-prefix-port-format, tramp-postfix-host-format) (tramp-file-name-regexp, tramp-completion-file-name-regexp): Use `eq' instead of `eqal'. (tramp-method-regexp, tramp-domain-regexp) (tramp-remote-file-name-spec-regexp) (tramp-file-name-regexp-unified) (tramp-completion-file-name-regexp-unified) (tramp-completion-file-name-regexp-separate): Adapt regexp. (tramp-completion-file-name-handler-alist) (tramp-run-real-handler): Autoload them. (tramp-find-method): Handle `tramp-default-method-marker'. (tramp-check-proper-method-and-host) (tramp-completion-run-real-handler): Remove them. (tramp-error-with-buffer, tramp-connectable-p): Do not use argument for ´tramp-completion-mode-p'. (tramp-find-foreign-file-name-handler): Remove COMPLETION argument. Do not apply heuristic for completion. (tramp-file-name-handler): Do not modify `non-essential'. (tramp-completion-file-name-handler): Change implementation. (tramp-autoload-file-name-handler) (tramp-completion-handle-file-name-all-completions): Call `tramp-run-real-handler'. (tramp-completion-mode-p): Do not autoload. Remove argument. Do not apply heuristic for completion. (tramp-completion-dissect-file-name): Simplify implementation. (tramp-handle-file-name-as-directory): Call `tramp-connectable-p'. * test/lisp/net/tramp-tests.el (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test03-file-name-defaults) (tramp-test06-directory-file-name): Adapt to the new syntax. (tramp-test11-copy-file, tramp-test12-rename-file) (tramp--test-check-files): Deactivate temporarily tests with quoted file names. (tramp-test16-directory-files, tramp-test17-insert-directory): Adapt tests. (tramp-test24-file-name-completion): Do not check for completion mode. (tramp-test31-make-auto-save-file-name): Deactivate temporarily two tests.
2017-03-13 18:05:59 +01:00
(should (string-equal (file-remote-p "/-:[]:" 'method) "default-method"))
(should (string-equal (file-remote-p "/-:[]:" 'user) "default-user"))
(should (string-equal (file-remote-p "/-:[]:" 'host) "default-host"))
(should (string-equal (file-remote-p "/-:[]:" 'localname) ""))
(should (string-equal (file-remote-p "/-:[]:" 'hop) nil))
;; Expand `tramp-default-method' and `tramp-default-user'.
(let ((tramp-default-host "::1"))
(should (string-equal
Require method in remote file name syntax * lisp/minibuffer.el (completion--nth-completion): Do not bind `non-essential'. * lisp/net/tramp-adb.el (tramp-adb-maybe-open-connection): * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-sh.el (tramp-maybe-open-connection): * lisp/net/tramp-smb.el (tramp-smb-maybe-open-connection): Do not call `tramp-check-proper-method-and-host'. * lisp/net/tramp-sh.el (tramp-ssh-controlmaster-options): Better traces. (tramp-maybe-open-connection): Do not use argument for ´tramp-completion-mode-p'. * lisp/net/tramp.el (tramp-default-method-marker): New defconst. (tramp-prefix-format, tramp-postfix-method-format) (tramp-prefix-ipv6-format, tramp-postfix-ipv6-format) (tramp-prefix-port-format, tramp-postfix-host-format) (tramp-file-name-regexp, tramp-completion-file-name-regexp): Use `eq' instead of `eqal'. (tramp-method-regexp, tramp-domain-regexp) (tramp-remote-file-name-spec-regexp) (tramp-file-name-regexp-unified) (tramp-completion-file-name-regexp-unified) (tramp-completion-file-name-regexp-separate): Adapt regexp. (tramp-completion-file-name-handler-alist) (tramp-run-real-handler): Autoload them. (tramp-find-method): Handle `tramp-default-method-marker'. (tramp-check-proper-method-and-host) (tramp-completion-run-real-handler): Remove them. (tramp-error-with-buffer, tramp-connectable-p): Do not use argument for ´tramp-completion-mode-p'. (tramp-find-foreign-file-name-handler): Remove COMPLETION argument. Do not apply heuristic for completion. (tramp-file-name-handler): Do not modify `non-essential'. (tramp-completion-file-name-handler): Change implementation. (tramp-autoload-file-name-handler) (tramp-completion-handle-file-name-all-completions): Call `tramp-run-real-handler'. (tramp-completion-mode-p): Do not autoload. Remove argument. Do not apply heuristic for completion. (tramp-completion-dissect-file-name): Simplify implementation. (tramp-handle-file-name-as-directory): Call `tramp-connectable-p'. * test/lisp/net/tramp-tests.el (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test03-file-name-defaults) (tramp-test06-directory-file-name): Adapt to the new syntax. (tramp-test11-copy-file, tramp-test12-rename-file) (tramp--test-check-files): Deactivate temporarily tests with quoted file names. (tramp-test16-directory-files, tramp-test17-insert-directory): Adapt tests. (tramp-test24-file-name-completion): Do not check for completion mode. (tramp-test31-make-auto-save-file-name): Deactivate temporarily two tests.
2017-03-13 18:05:59 +01:00
(file-remote-p "/-:[]:")
(format "/%s:%s@%s:" "default-method" "default-user" "[::1]")))
Require method in remote file name syntax * lisp/minibuffer.el (completion--nth-completion): Do not bind `non-essential'. * lisp/net/tramp-adb.el (tramp-adb-maybe-open-connection): * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-sh.el (tramp-maybe-open-connection): * lisp/net/tramp-smb.el (tramp-smb-maybe-open-connection): Do not call `tramp-check-proper-method-and-host'. * lisp/net/tramp-sh.el (tramp-ssh-controlmaster-options): Better traces. (tramp-maybe-open-connection): Do not use argument for ´tramp-completion-mode-p'. * lisp/net/tramp.el (tramp-default-method-marker): New defconst. (tramp-prefix-format, tramp-postfix-method-format) (tramp-prefix-ipv6-format, tramp-postfix-ipv6-format) (tramp-prefix-port-format, tramp-postfix-host-format) (tramp-file-name-regexp, tramp-completion-file-name-regexp): Use `eq' instead of `eqal'. (tramp-method-regexp, tramp-domain-regexp) (tramp-remote-file-name-spec-regexp) (tramp-file-name-regexp-unified) (tramp-completion-file-name-regexp-unified) (tramp-completion-file-name-regexp-separate): Adapt regexp. (tramp-completion-file-name-handler-alist) (tramp-run-real-handler): Autoload them. (tramp-find-method): Handle `tramp-default-method-marker'. (tramp-check-proper-method-and-host) (tramp-completion-run-real-handler): Remove them. (tramp-error-with-buffer, tramp-connectable-p): Do not use argument for ´tramp-completion-mode-p'. (tramp-find-foreign-file-name-handler): Remove COMPLETION argument. Do not apply heuristic for completion. (tramp-file-name-handler): Do not modify `non-essential'. (tramp-completion-file-name-handler): Change implementation. (tramp-autoload-file-name-handler) (tramp-completion-handle-file-name-all-completions): Call `tramp-run-real-handler'. (tramp-completion-mode-p): Do not autoload. Remove argument. Do not apply heuristic for completion. (tramp-completion-dissect-file-name): Simplify implementation. (tramp-handle-file-name-as-directory): Call `tramp-connectable-p'. * test/lisp/net/tramp-tests.el (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test03-file-name-defaults) (tramp-test06-directory-file-name): Adapt to the new syntax. (tramp-test11-copy-file, tramp-test12-rename-file) (tramp--test-check-files): Deactivate temporarily tests with quoted file names. (tramp-test16-directory-files, tramp-test17-insert-directory): Adapt tests. (tramp-test24-file-name-completion): Do not check for completion mode. (tramp-test31-make-auto-save-file-name): Deactivate temporarily two tests.
2017-03-13 18:05:59 +01:00
(should (string-equal (file-remote-p "/-:[]:" 'method) "default-method"))
(should (string-equal (file-remote-p "/-:[]:" 'user) "default-user"))
(should (string-equal (file-remote-p "/-:[]:" 'host) "::1"))
(should (string-equal (file-remote-p "/-:[]:" 'localname) ""))
(should (string-equal (file-remote-p "/-:[]:" 'hop) nil)))
2013-11-05 15:46:57 +01:00
;; Expand `tramp-default-method' and `tramp-default-user'.
(should (string-equal
Require method in remote file name syntax * lisp/minibuffer.el (completion--nth-completion): Do not bind `non-essential'. * lisp/net/tramp-adb.el (tramp-adb-maybe-open-connection): * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-sh.el (tramp-maybe-open-connection): * lisp/net/tramp-smb.el (tramp-smb-maybe-open-connection): Do not call `tramp-check-proper-method-and-host'. * lisp/net/tramp-sh.el (tramp-ssh-controlmaster-options): Better traces. (tramp-maybe-open-connection): Do not use argument for ´tramp-completion-mode-p'. * lisp/net/tramp.el (tramp-default-method-marker): New defconst. (tramp-prefix-format, tramp-postfix-method-format) (tramp-prefix-ipv6-format, tramp-postfix-ipv6-format) (tramp-prefix-port-format, tramp-postfix-host-format) (tramp-file-name-regexp, tramp-completion-file-name-regexp): Use `eq' instead of `eqal'. (tramp-method-regexp, tramp-domain-regexp) (tramp-remote-file-name-spec-regexp) (tramp-file-name-regexp-unified) (tramp-completion-file-name-regexp-unified) (tramp-completion-file-name-regexp-separate): Adapt regexp. (tramp-completion-file-name-handler-alist) (tramp-run-real-handler): Autoload them. (tramp-find-method): Handle `tramp-default-method-marker'. (tramp-check-proper-method-and-host) (tramp-completion-run-real-handler): Remove them. (tramp-error-with-buffer, tramp-connectable-p): Do not use argument for ´tramp-completion-mode-p'. (tramp-find-foreign-file-name-handler): Remove COMPLETION argument. Do not apply heuristic for completion. (tramp-file-name-handler): Do not modify `non-essential'. (tramp-completion-file-name-handler): Change implementation. (tramp-autoload-file-name-handler) (tramp-completion-handle-file-name-all-completions): Call `tramp-run-real-handler'. (tramp-completion-mode-p): Do not autoload. Remove argument. Do not apply heuristic for completion. (tramp-completion-dissect-file-name): Simplify implementation. (tramp-handle-file-name-as-directory): Call `tramp-connectable-p'. * test/lisp/net/tramp-tests.el (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test03-file-name-defaults) (tramp-test06-directory-file-name): Adapt to the new syntax. (tramp-test11-copy-file, tramp-test12-rename-file) (tramp--test-check-files): Deactivate temporarily tests with quoted file names. (tramp-test16-directory-files, tramp-test17-insert-directory): Adapt tests. (tramp-test24-file-name-completion): Do not check for completion mode. (tramp-test31-make-auto-save-file-name): Deactivate temporarily two tests.
2017-03-13 18:05:59 +01:00
(file-remote-p "/-:[::1]:")
2013-11-05 15:46:57 +01:00
(format "/%s:%s@%s:" "default-method" "default-user" "[::1]")))
Require method in remote file name syntax * lisp/minibuffer.el (completion--nth-completion): Do not bind `non-essential'. * lisp/net/tramp-adb.el (tramp-adb-maybe-open-connection): * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-sh.el (tramp-maybe-open-connection): * lisp/net/tramp-smb.el (tramp-smb-maybe-open-connection): Do not call `tramp-check-proper-method-and-host'. * lisp/net/tramp-sh.el (tramp-ssh-controlmaster-options): Better traces. (tramp-maybe-open-connection): Do not use argument for ´tramp-completion-mode-p'. * lisp/net/tramp.el (tramp-default-method-marker): New defconst. (tramp-prefix-format, tramp-postfix-method-format) (tramp-prefix-ipv6-format, tramp-postfix-ipv6-format) (tramp-prefix-port-format, tramp-postfix-host-format) (tramp-file-name-regexp, tramp-completion-file-name-regexp): Use `eq' instead of `eqal'. (tramp-method-regexp, tramp-domain-regexp) (tramp-remote-file-name-spec-regexp) (tramp-file-name-regexp-unified) (tramp-completion-file-name-regexp-unified) (tramp-completion-file-name-regexp-separate): Adapt regexp. (tramp-completion-file-name-handler-alist) (tramp-run-real-handler): Autoload them. (tramp-find-method): Handle `tramp-default-method-marker'. (tramp-check-proper-method-and-host) (tramp-completion-run-real-handler): Remove them. (tramp-error-with-buffer, tramp-connectable-p): Do not use argument for ´tramp-completion-mode-p'. (tramp-find-foreign-file-name-handler): Remove COMPLETION argument. Do not apply heuristic for completion. (tramp-file-name-handler): Do not modify `non-essential'. (tramp-completion-file-name-handler): Change implementation. (tramp-autoload-file-name-handler) (tramp-completion-handle-file-name-all-completions): Call `tramp-run-real-handler'. (tramp-completion-mode-p): Do not autoload. Remove argument. Do not apply heuristic for completion. (tramp-completion-dissect-file-name): Simplify implementation. (tramp-handle-file-name-as-directory): Call `tramp-connectable-p'. * test/lisp/net/tramp-tests.el (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test03-file-name-defaults) (tramp-test06-directory-file-name): Adapt to the new syntax. (tramp-test11-copy-file, tramp-test12-rename-file) (tramp--test-check-files): Deactivate temporarily tests with quoted file names. (tramp-test16-directory-files, tramp-test17-insert-directory): Adapt tests. (tramp-test24-file-name-completion): Do not check for completion mode. (tramp-test31-make-auto-save-file-name): Deactivate temporarily two tests.
2017-03-13 18:05:59 +01:00
(should (string-equal (file-remote-p "/-:[::1]:" 'method) "default-method"))
(should (string-equal (file-remote-p "/-:[::1]:" 'user) "default-user"))
(should (string-equal (file-remote-p "/-:[::1]:" 'host) "::1"))
(should (string-equal (file-remote-p "/-:[::1]:" 'localname) ""))
(should (string-equal (file-remote-p "/-:[::1]:" 'hop) nil))
2013-11-05 15:46:57 +01:00
;; Expand `tramp-default-method'.
(should (string-equal
Require method in remote file name syntax * lisp/minibuffer.el (completion--nth-completion): Do not bind `non-essential'. * lisp/net/tramp-adb.el (tramp-adb-maybe-open-connection): * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-sh.el (tramp-maybe-open-connection): * lisp/net/tramp-smb.el (tramp-smb-maybe-open-connection): Do not call `tramp-check-proper-method-and-host'. * lisp/net/tramp-sh.el (tramp-ssh-controlmaster-options): Better traces. (tramp-maybe-open-connection): Do not use argument for ´tramp-completion-mode-p'. * lisp/net/tramp.el (tramp-default-method-marker): New defconst. (tramp-prefix-format, tramp-postfix-method-format) (tramp-prefix-ipv6-format, tramp-postfix-ipv6-format) (tramp-prefix-port-format, tramp-postfix-host-format) (tramp-file-name-regexp, tramp-completion-file-name-regexp): Use `eq' instead of `eqal'. (tramp-method-regexp, tramp-domain-regexp) (tramp-remote-file-name-spec-regexp) (tramp-file-name-regexp-unified) (tramp-completion-file-name-regexp-unified) (tramp-completion-file-name-regexp-separate): Adapt regexp. (tramp-completion-file-name-handler-alist) (tramp-run-real-handler): Autoload them. (tramp-find-method): Handle `tramp-default-method-marker'. (tramp-check-proper-method-and-host) (tramp-completion-run-real-handler): Remove them. (tramp-error-with-buffer, tramp-connectable-p): Do not use argument for ´tramp-completion-mode-p'. (tramp-find-foreign-file-name-handler): Remove COMPLETION argument. Do not apply heuristic for completion. (tramp-file-name-handler): Do not modify `non-essential'. (tramp-completion-file-name-handler): Change implementation. (tramp-autoload-file-name-handler) (tramp-completion-handle-file-name-all-completions): Call `tramp-run-real-handler'. (tramp-completion-mode-p): Do not autoload. Remove argument. Do not apply heuristic for completion. (tramp-completion-dissect-file-name): Simplify implementation. (tramp-handle-file-name-as-directory): Call `tramp-connectable-p'. * test/lisp/net/tramp-tests.el (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test03-file-name-defaults) (tramp-test06-directory-file-name): Adapt to the new syntax. (tramp-test11-copy-file, tramp-test12-rename-file) (tramp--test-check-files): Deactivate temporarily tests with quoted file names. (tramp-test16-directory-files, tramp-test17-insert-directory): Adapt tests. (tramp-test24-file-name-completion): Do not check for completion mode. (tramp-test31-make-auto-save-file-name): Deactivate temporarily two tests.
2017-03-13 18:05:59 +01:00
(file-remote-p "/-:user@[::1]:")
2013-11-05 15:46:57 +01:00
(format "/%s:%s@%s:" "default-method" "user" "[::1]")))
(should (string-equal
Require method in remote file name syntax * lisp/minibuffer.el (completion--nth-completion): Do not bind `non-essential'. * lisp/net/tramp-adb.el (tramp-adb-maybe-open-connection): * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-sh.el (tramp-maybe-open-connection): * lisp/net/tramp-smb.el (tramp-smb-maybe-open-connection): Do not call `tramp-check-proper-method-and-host'. * lisp/net/tramp-sh.el (tramp-ssh-controlmaster-options): Better traces. (tramp-maybe-open-connection): Do not use argument for ´tramp-completion-mode-p'. * lisp/net/tramp.el (tramp-default-method-marker): New defconst. (tramp-prefix-format, tramp-postfix-method-format) (tramp-prefix-ipv6-format, tramp-postfix-ipv6-format) (tramp-prefix-port-format, tramp-postfix-host-format) (tramp-file-name-regexp, tramp-completion-file-name-regexp): Use `eq' instead of `eqal'. (tramp-method-regexp, tramp-domain-regexp) (tramp-remote-file-name-spec-regexp) (tramp-file-name-regexp-unified) (tramp-completion-file-name-regexp-unified) (tramp-completion-file-name-regexp-separate): Adapt regexp. (tramp-completion-file-name-handler-alist) (tramp-run-real-handler): Autoload them. (tramp-find-method): Handle `tramp-default-method-marker'. (tramp-check-proper-method-and-host) (tramp-completion-run-real-handler): Remove them. (tramp-error-with-buffer, tramp-connectable-p): Do not use argument for ´tramp-completion-mode-p'. (tramp-find-foreign-file-name-handler): Remove COMPLETION argument. Do not apply heuristic for completion. (tramp-file-name-handler): Do not modify `non-essential'. (tramp-completion-file-name-handler): Change implementation. (tramp-autoload-file-name-handler) (tramp-completion-handle-file-name-all-completions): Call `tramp-run-real-handler'. (tramp-completion-mode-p): Do not autoload. Remove argument. Do not apply heuristic for completion. (tramp-completion-dissect-file-name): Simplify implementation. (tramp-handle-file-name-as-directory): Call `tramp-connectable-p'. * test/lisp/net/tramp-tests.el (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test03-file-name-defaults) (tramp-test06-directory-file-name): Adapt to the new syntax. (tramp-test11-copy-file, tramp-test12-rename-file) (tramp--test-check-files): Deactivate temporarily tests with quoted file names. (tramp-test16-directory-files, tramp-test17-insert-directory): Adapt tests. (tramp-test24-file-name-completion): Do not check for completion mode. (tramp-test31-make-auto-save-file-name): Deactivate temporarily two tests.
2017-03-13 18:05:59 +01:00
(file-remote-p "/-:user@[::1]:" 'method) "default-method"))
(should (string-equal (file-remote-p "/-:user@[::1]:" 'user) "user"))
(should (string-equal (file-remote-p "/-:user@[::1]:" 'host) "::1"))
(should (string-equal (file-remote-p "/-:user@[::1]:" 'localname) ""))
(should (string-equal (file-remote-p "/-:user@[::1]:" 'hop) nil))
2013-11-05 15:46:57 +01:00
;; Expand `tramp-default-user'.
(should (string-equal
(file-remote-p "/method:[::1]:")
(format "/%s:%s@%s:" "method" "default-user" "[::1]")))
(should (string-equal (file-remote-p "/method:[::1]:" 'method) "method"))
(should (string-equal
(file-remote-p "/method:[::1]:" 'user) "default-user"))
(should (string-equal (file-remote-p "/method:[::1]:" 'host) "::1"))
(should (string-equal (file-remote-p "/method:[::1]:" 'localname) ""))
(should (string-equal (file-remote-p "/method:[::1]:" 'hop) nil))
2013-11-05 15:46:57 +01:00
;; No expansion.
(should (string-equal
(file-remote-p "/method:user@[::1]:")
(format "/%s:%s@%s:" "method" "user" "[::1]")))
(should (string-equal
(file-remote-p "/method:user@[::1]:" 'method) "method"))
(should (string-equal (file-remote-p "/method:user@[::1]:" 'user) "user"))
(should (string-equal (file-remote-p "/method:user@[::1]:" 'host) "::1"))
(should (string-equal
(file-remote-p "/method:user@[::1]:" 'localname) ""))
(should (string-equal (file-remote-p "/method:user@[::1]:" 'hop) nil))
2013-11-05 15:46:57 +01:00
;; Local file name part.
Require method in remote file name syntax * lisp/minibuffer.el (completion--nth-completion): Do not bind `non-essential'. * lisp/net/tramp-adb.el (tramp-adb-maybe-open-connection): * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-sh.el (tramp-maybe-open-connection): * lisp/net/tramp-smb.el (tramp-smb-maybe-open-connection): Do not call `tramp-check-proper-method-and-host'. * lisp/net/tramp-sh.el (tramp-ssh-controlmaster-options): Better traces. (tramp-maybe-open-connection): Do not use argument for ´tramp-completion-mode-p'. * lisp/net/tramp.el (tramp-default-method-marker): New defconst. (tramp-prefix-format, tramp-postfix-method-format) (tramp-prefix-ipv6-format, tramp-postfix-ipv6-format) (tramp-prefix-port-format, tramp-postfix-host-format) (tramp-file-name-regexp, tramp-completion-file-name-regexp): Use `eq' instead of `eqal'. (tramp-method-regexp, tramp-domain-regexp) (tramp-remote-file-name-spec-regexp) (tramp-file-name-regexp-unified) (tramp-completion-file-name-regexp-unified) (tramp-completion-file-name-regexp-separate): Adapt regexp. (tramp-completion-file-name-handler-alist) (tramp-run-real-handler): Autoload them. (tramp-find-method): Handle `tramp-default-method-marker'. (tramp-check-proper-method-and-host) (tramp-completion-run-real-handler): Remove them. (tramp-error-with-buffer, tramp-connectable-p): Do not use argument for ´tramp-completion-mode-p'. (tramp-find-foreign-file-name-handler): Remove COMPLETION argument. Do not apply heuristic for completion. (tramp-file-name-handler): Do not modify `non-essential'. (tramp-completion-file-name-handler): Change implementation. (tramp-autoload-file-name-handler) (tramp-completion-handle-file-name-all-completions): Call `tramp-run-real-handler'. (tramp-completion-mode-p): Do not autoload. Remove argument. Do not apply heuristic for completion. (tramp-completion-dissect-file-name): Simplify implementation. (tramp-handle-file-name-as-directory): Call `tramp-connectable-p'. * test/lisp/net/tramp-tests.el (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test03-file-name-defaults) (tramp-test06-directory-file-name): Adapt to the new syntax. (tramp-test11-copy-file, tramp-test12-rename-file) (tramp--test-check-files): Deactivate temporarily tests with quoted file names. (tramp-test16-directory-files, tramp-test17-insert-directory): Adapt tests. (tramp-test24-file-name-completion): Do not check for completion mode. (tramp-test31-make-auto-save-file-name): Deactivate temporarily two tests.
2017-03-13 18:05:59 +01:00
(should (string-equal (file-remote-p "/-:host:/:" 'localname) "/:"))
2013-11-05 15:46:57 +01:00
(should (string-equal (file-remote-p "/method:::" 'localname) ":"))
(should (string-equal (file-remote-p "/method:: " 'localname) " "))
(should (string-equal (file-remote-p "/method::file" 'localname) "file"))
(should (string-equal
(file-remote-p "/method::/path/to/file" 'localname)
"/path/to/file"))
;; Multihop.
(should
(string-equal
(file-remote-p "/method1:user1@host1|method2:user2@host2:/path/to/file")
(format "/%s:%s@%s|%s:%s@%s:"
"method1" "user1" "host1" "method2" "user2" "host2")))
2013-11-05 15:46:57 +01:00
(should
(string-equal
(file-remote-p
"/method1:user1@host1|method2:user2@host2:/path/to/file" 'method)
"method2"))
(should
(string-equal
(file-remote-p
"/method1:user1@host1|method2:user2@host2:/path/to/file" 'user)
"user2"))
(should
(string-equal
(file-remote-p
"/method1:user1@host1|method2:user2@host2:/path/to/file" 'host)
"host2"))
(should
(string-equal
(file-remote-p
"/method1:user1@host1|method2:user2@host2:/path/to/file" 'localname)
"/path/to/file"))
(should
(string-equal
(file-remote-p
"/method1:user1@host1|method2:user2@host2:/path/to/file" 'hop)
(format "%s:%s@%s|"
"method1" "user1" "host1")))
2013-11-05 15:46:57 +01:00
(should
(string-equal
(file-remote-p
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(concat
"/method1:user1@host1"
"|method2:user2@host2"
"|method3:user3@host3:/path/to/file"))
(format "/%s:%s@%s|%s:%s@%s|%s:%s@%s:"
"method1" "user1" "host1"
"method2" "user2" "host2"
"method3" "user3" "host3")))
2013-11-05 15:46:57 +01:00
(should
(string-equal
(file-remote-p
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(concat
"/method1:user1@host1"
"|method2:user2@host2"
"|method3:user3@host3:/path/to/file")
2013-11-05 15:46:57 +01:00
'method)
"method3"))
(should
(string-equal
(file-remote-p
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(concat
"/method1:user1@host1"
"|method2:user2@host2"
"|method3:user3@host3:/path/to/file")
2013-11-05 15:46:57 +01:00
'user)
"user3"))
(should
(string-equal
(file-remote-p
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(concat
"/method1:user1@host1"
"|method2:user2@host2"
"|method3:user3@host3:/path/to/file")
2013-11-05 15:46:57 +01:00
'host)
"host3"))
(should
(string-equal
(file-remote-p
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(concat
"/method1:user1@host1"
"|method2:user2@host2"
"|method3:user3@host3:/path/to/file")
2013-11-05 15:46:57 +01:00
'localname)
"/path/to/file"))
(should
(string-equal
(file-remote-p
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(concat
"/method1:user1@host1"
"|method2:user2@host2"
"|method3:user3@host3:/path/to/file")
'hop)
(format "%s:%s@%s|%s:%s@%s|"
"method1" "user1" "host1" "method2" "user2" "host2")))
;; Expand `tramp-default-method-alist'.
(add-to-list 'tramp-default-method-alist '("host1" "user1" "method1"))
(add-to-list 'tramp-default-method-alist '("host2" "user2" "method2"))
(add-to-list 'tramp-default-method-alist '("host3" "user3" "method3"))
(should
(string-equal
(file-remote-p
(concat
"/-:user1@host1"
"|-:user2@host2"
"|-:user3@host3:/path/to/file"))
(format "/%s:%s@%s|%s:%s@%s|%s:%s@%s:"
"method1" "user1" "host1"
"method2" "user2" "host2"
"method3" "user3" "host3")))
;; Expand `tramp-default-user-alist'.
(add-to-list 'tramp-default-user-alist '("method1" "host1" "user1"))
(add-to-list 'tramp-default-user-alist '("method2" "host2" "user2"))
(add-to-list 'tramp-default-user-alist '("method3" "host3" "user3"))
(should
(string-equal
(file-remote-p
(concat
"/method1:host1"
"|method2:host2"
"|method3:host3:/path/to/file"))
(format "/%s:%s@%s|%s:%s@%s|%s:%s@%s:"
"method1" "user1" "host1"
"method2" "user2" "host2"
"method3" "user3" "host3")))
;; Expand `tramp-default-host-alist'.
(add-to-list 'tramp-default-host-alist '("method1" "user1" "host1"))
(add-to-list 'tramp-default-host-alist '("method2" "user2" "host2"))
(add-to-list 'tramp-default-host-alist '("method3" "user3" "host3"))
(should
(string-equal
(file-remote-p
(concat
"/method1:user1@"
"|method2:user2@"
"|method3:user3@:/path/to/file"))
(format "/%s:%s@%s|%s:%s@%s|%s:%s@%s:"
"method1" "user1" "host1"
"method2" "user2" "host2"
"method3" "user3" "host3")))
;; Ad-hoc user name and host name expansion.
(setq tramp-default-method-alist nil
tramp-default-user-alist nil
tramp-default-host-alist nil)
(should
(string-equal
(file-remote-p
(concat
"/method1:user1@host1"
"|method2:user2@"
"|method3:user3@:/path/to/file"))
(format "/%s:%s@%s|%s:%s@%s|%s:%s@%s:"
"method1" "user1" "host1"
"method2" "user2" "host1"
"method3" "user3" "host1")))
(should
(string-equal
(file-remote-p
(concat
"/method1:%u@%h"
"|method2:user2@host2"
"|method3:%u@%h"
"|method4:user4%domain4@host4#1234:/path/to/file"))
(format "/%s:%s@%s|%s:%s@%s|%s:%s@%s|%s:%s@%s:"
"method1" "user2" "host2"
"method2" "user2" "host2"
"method3" "user4" "host4"
"method4" "user4%domain4" "host4#1234")))))
2013-11-05 15:46:57 +01:00
(ert-deftest tramp-test02-file-name-dissect-simplified ()
"Check simplified file name components."
:tags '(:expensive-test)
(let ((tramp-default-method "default-method")
(tramp-default-user "default-user")
(tramp-default-host "default-host")
tramp-default-user-alist
tramp-default-host-alist
Stronger check for Tramp method * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-rclone.el (tramp-rclone-maybe-open-connection): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-maybe-open-connection): Use `tramp-get-connection-name'. * lisp/net/tramp-sh.el (tramp-sh-handle-make-symbolic-link): * lisp/net/tramp-smb.el (tramp-smb-handle-make-symbolic-link): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-handle-make-symbolic-link): Don't check remote TARGET. * lisp/net/tramp.el (tramp-dissect-file-name): Check for proper method. (tramp-file-name-for-operation): Take only 2nd argument into account for file name handler. (tramp-file-name-handler): Suppress checks for `file-remote-p'. * test/lisp/net/tramp-archive-tests.el (tramp-archive-test02-file-name-dissect): Suppress check for wrong method. * test/lisp/net/tramp-tests.el (tramp--test-instrument-test-case): Dump *all* Tramp buffers. (tramp-test02-file-name-dissect) (tramp-test02-file-name-dissect-simplified) (tramp-test02-file-name-dissect-separate): Check also wrong method. (tramp-test03-file-name-defaults): Check, that the respective Tramp package is loaded. (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name) (tramp-test06-directory-file-name, tramp-test44-auto-load): Suppress check for wrong method. (tramp-test30-make-process): Remove instrumentation code. (tramp-test31-interrupt-process, tramp-test36-vc-registered): Guarantee that connection is established prior starting process.
2019-06-04 12:51:45 +02:00
;; Suppress method name check.
(non-essential t)
;; Suppress check for multihops.
(tramp-cache-data (make-hash-table :test #'equal))
(tramp-connection-properties '((nil "login-program" t)))
(syntax tramp-syntax))
(unwind-protect
(progn
(tramp-change-syntax 'simplified)
Stronger check for Tramp method * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-rclone.el (tramp-rclone-maybe-open-connection): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-maybe-open-connection): Use `tramp-get-connection-name'. * lisp/net/tramp-sh.el (tramp-sh-handle-make-symbolic-link): * lisp/net/tramp-smb.el (tramp-smb-handle-make-symbolic-link): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-handle-make-symbolic-link): Don't check remote TARGET. * lisp/net/tramp.el (tramp-dissect-file-name): Check for proper method. (tramp-file-name-for-operation): Take only 2nd argument into account for file name handler. (tramp-file-name-handler): Suppress checks for `file-remote-p'. * test/lisp/net/tramp-archive-tests.el (tramp-archive-test02-file-name-dissect): Suppress check for wrong method. * test/lisp/net/tramp-tests.el (tramp--test-instrument-test-case): Dump *all* Tramp buffers. (tramp-test02-file-name-dissect) (tramp-test02-file-name-dissect-simplified) (tramp-test02-file-name-dissect-separate): Check also wrong method. (tramp-test03-file-name-defaults): Check, that the respective Tramp package is loaded. (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name) (tramp-test06-directory-file-name, tramp-test44-auto-load): Suppress check for wrong method. (tramp-test30-make-process): Remove instrumentation code. (tramp-test31-interrupt-process, tramp-test36-vc-registered): Guarantee that connection is established prior starting process.
2019-06-04 12:51:45 +02:00
;; An unknown default method shall raise an error.
(let (non-essential)
(should-error
(expand-file-name "/user@host:")
:type 'user-error))
;; Expand `tramp-default-method' and `tramp-default-user'.
(should (string-equal
(file-remote-p "/host:")
(format "/%s@%s:" "default-user" "host")))
(should (string-equal
(file-remote-p "/host:" 'method) "default-method"))
(should (string-equal (file-remote-p "/host:" 'user) "default-user"))
(should (string-equal (file-remote-p "/host:" 'host) "host"))
(should (string-equal (file-remote-p "/host:" 'localname) ""))
(should (string-equal (file-remote-p "/host:" 'hop) nil))
;; Expand `tramp-default-method' and `tramp-default-host'.
(should (string-equal
(file-remote-p "/user@:")
(format "/%s@%s:" "user" "default-host")))
(should (string-equal
(file-remote-p "/user@:" 'method) "default-method"))
(should (string-equal (file-remote-p "/user@:" 'user) "user"))
(should (string-equal (file-remote-p "/user@:" 'host) "default-host"))
(should (string-equal (file-remote-p "/user@:" 'localname) ""))
(should (string-equal (file-remote-p "/user@:" 'hop) nil))
;; Expand `tramp-default-method'.
(should (string-equal
(file-remote-p "/user@host:")
(format "/%s@%s:" "user" "host")))
(should (string-equal
(file-remote-p "/user@host:" 'method) "default-method"))
(should (string-equal (file-remote-p "/user@host:" 'user) "user"))
(should (string-equal (file-remote-p "/user@host:" 'host) "host"))
(should (string-equal (file-remote-p "/user@host:" 'localname) ""))
(should (string-equal (file-remote-p "/user@host:" 'hop) nil))
;; No expansion.
(should (string-equal
(file-remote-p "/user@email@host:")
(format "/%s@%s:" "user@email" "host")))
(should (string-equal
(file-remote-p
"/user@email@host:" 'method) "default-method"))
(should (string-equal
(file-remote-p "/user@email@host:" 'user) "user@email"))
(should (string-equal
(file-remote-p "/user@email@host:" 'host) "host"))
(should (string-equal
(file-remote-p "/user@email@host:" 'localname) ""))
(should (string-equal
(file-remote-p "/user@email@host:" 'hop) nil))
;; Expand `tramp-default-method' and `tramp-default-user'.
(should (string-equal
(file-remote-p "/host#1234:")
(format "/%s@%s:" "default-user" "host#1234")))
(should (string-equal
(file-remote-p "/host#1234:" 'method) "default-method"))
(should (string-equal
(file-remote-p "/host#1234:" 'user) "default-user"))
(should (string-equal
(file-remote-p "/host#1234:" 'host) "host#1234"))
(should (string-equal (file-remote-p "/host#1234:" 'localname) ""))
(should (string-equal (file-remote-p "/host#1234:" 'hop) nil))
;; Expand `tramp-default-method'.
(should (string-equal
(file-remote-p "/user@host#1234:")
(format "/%s@%s:" "user" "host#1234")))
(should (string-equal
(file-remote-p "/user@host#1234:" 'method) "default-method"))
(should (string-equal
(file-remote-p "/user@host#1234:" 'user) "user"))
(should (string-equal
(file-remote-p "/user@host#1234:" 'host) "host#1234"))
(should (string-equal
(file-remote-p "/user@host#1234:" 'localname) ""))
(should (string-equal (file-remote-p "/user@host#1234:" 'hop) nil))
;; Expand `tramp-default-method' and `tramp-default-user'.
(should (string-equal
(file-remote-p "/1.2.3.4:")
(format "/%s@%s:" "default-user" "1.2.3.4")))
(should (string-equal
(file-remote-p "/1.2.3.4:" 'method) "default-method"))
(should (string-equal
(file-remote-p "/1.2.3.4:" 'user) "default-user"))
(should (string-equal (file-remote-p "/1.2.3.4:" 'host) "1.2.3.4"))
(should (string-equal (file-remote-p "/1.2.3.4:" 'localname) ""))
(should (string-equal (file-remote-p "/1.2.3.4:" 'hop) nil))
;; Expand `tramp-default-method'.
(should (string-equal
(file-remote-p "/user@1.2.3.4:")
(format "/%s@%s:" "user" "1.2.3.4")))
(should (string-equal
(file-remote-p "/user@1.2.3.4:" 'method) "default-method"))
(should (string-equal (file-remote-p "/user@1.2.3.4:" 'user) "user"))
(should (string-equal
(file-remote-p "/user@1.2.3.4:" 'host) "1.2.3.4"))
(should (string-equal (file-remote-p "/user@1.2.3.4:" 'localname) ""))
(should (string-equal (file-remote-p "/user@1.2.3.4:" 'hop) nil))
;; Expand `tramp-default-method', `tramp-default-user' and
;; `tramp-default-host'.
(should (string-equal
(file-remote-p "/[]:")
(format
"/%s@%s:" "default-user" "default-host")))
(should (string-equal
(file-remote-p "/[]:" 'method) "default-method"))
(should (string-equal (file-remote-p "/[]:" 'user) "default-user"))
(should (string-equal (file-remote-p "/[]:" 'host) "default-host"))
(should (string-equal (file-remote-p "/[]:" 'localname) ""))
(should (string-equal (file-remote-p "/[]:" 'hop) nil))
;; Expand `tramp-default-method' and `tramp-default-user'.
(let ((tramp-default-host "::1"))
(should (string-equal
(file-remote-p "/[]:")
(format "/%s@%s:" "default-user" "[::1]")))
(should (string-equal
(file-remote-p "/[]:" 'method) "default-method"))
(should (string-equal (file-remote-p "/[]:" 'user) "default-user"))
(should (string-equal (file-remote-p "/[]:" 'host) "::1"))
(should (string-equal (file-remote-p "/[]:" 'localname) ""))
(should (string-equal (file-remote-p "/[]:" 'hop) nil)))
;; Expand `tramp-default-method' and `tramp-default-user'.
(should (string-equal
(file-remote-p "/[::1]:")
(format "/%s@%s:" "default-user" "[::1]")))
(should (string-equal
(file-remote-p "/[::1]:" 'method) "default-method"))
(should (string-equal (file-remote-p "/[::1]:" 'user) "default-user"))
(should (string-equal (file-remote-p "/[::1]:" 'host) "::1"))
(should (string-equal (file-remote-p "/[::1]:" 'localname) ""))
(should (string-equal (file-remote-p "/[::1]:" 'hop) nil))
;; Expand `tramp-default-method'.
(should (string-equal
(file-remote-p "/user@[::1]:")
(format "/%s@%s:" "user" "[::1]")))
(should (string-equal
(file-remote-p "/user@[::1]:" 'method) "default-method"))
(should (string-equal (file-remote-p "/user@[::1]:" 'user) "user"))
(should (string-equal (file-remote-p "/user@[::1]:" 'host) "::1"))
(should (string-equal (file-remote-p "/user@[::1]:" 'localname) ""))
(should (string-equal (file-remote-p "/user@[::1]:" 'hop) nil))
;; Local file name part.
(should (string-equal (file-remote-p "/host:/:" 'localname) "/:"))
(should (string-equal (file-remote-p "/host::" 'localname) ":"))
(should (string-equal (file-remote-p "/host: " 'localname) " "))
(should (string-equal (file-remote-p "/host:file" 'localname) "file"))
(should (string-equal
(file-remote-p "/host:/path/to/file" 'localname)
"/path/to/file"))
;; Multihop.
(should
(string-equal
(file-remote-p "/user1@host1|user2@host2:/path/to/file")
(format "/%s@%s|%s@%s:" "user1" "host1" "user2" "host2")))
(should
(string-equal
(file-remote-p
"/user1@host1|user2@host2:/path/to/file" 'method)
"default-method"))
(should
(string-equal
(file-remote-p
"/user1@host1|user2@host2:/path/to/file" 'user)
"user2"))
(should
(string-equal
(file-remote-p
"/user1@host1|user2@host2:/path/to/file" 'host)
"host2"))
(should
(string-equal
(file-remote-p
"/user1@host1|user2@host2:/path/to/file" 'localname)
"/path/to/file"))
(should
(string-equal
(file-remote-p
"/user1@host1|user2@host2:/path/to/file" 'hop)
(format "%s@%s|" "user1" "host1")))
(should
(string-equal
(file-remote-p
(concat
"/user1@host1"
"|user2@host2"
"|user3@host3:/path/to/file"))
(format "/%s@%s|%s@%s|%s@%s:"
"user1" "host1"
"user2" "host2"
"user3" "host3")))
(should
(string-equal
(file-remote-p
(concat
"/user1@host1"
"|user2@host2"
"|user3@host3:/path/to/file")
'method)
"default-method"))
(should
(string-equal
(file-remote-p
(concat
"/user1@host1"
"|user2@host2"
"|user3@host3:/path/to/file")
'user)
"user3"))
(should
(string-equal
(file-remote-p
(concat
"/user1@host1"
"|user2@host2"
"|user3@host3:/path/to/file")
'host)
"host3"))
(should
(string-equal
(file-remote-p
(concat
"/user1@host1"
"|user2@host2"
"|user3@host3:/path/to/file")
'localname)
"/path/to/file"))
(should
(string-equal
(file-remote-p
(concat
"/user1@host1"
"|user2@host2"
"|user3@host3:/path/to/file")
'hop)
(format "%s@%s|%s@%s|"
"user1" "host1" "user2" "host2")))
;; Expand `tramp-default-user-alist'.
(add-to-list 'tramp-default-user-alist '(nil "host1" "user1"))
(add-to-list 'tramp-default-user-alist '(nil "host2" "user2"))
(add-to-list 'tramp-default-user-alist '(nil "host3" "user3"))
(should
(string-equal
(file-remote-p
(concat
"/host1"
"|host2"
"|host3:/path/to/file"))
(format "/%s@%s|%s@%s|%s@%s:"
"user1" "host1"
"user2" "host2"
"user3" "host3")))
;; Expand `tramp-default-host-alist'.
(add-to-list 'tramp-default-host-alist '(nil "user1" "host1"))
(add-to-list 'tramp-default-host-alist '(nil "user2" "host2"))
(add-to-list 'tramp-default-host-alist '(nil "user3" "host3"))
(should
(string-equal
(file-remote-p
(concat
"/user1@"
"|user2@"
"|user3@:/path/to/file"))
(format "/%s@%s|%s@%s|%s@%s:"
"user1" "host1"
"user2" "host2"
"user3" "host3")))
;; Ad-hoc user name and host name expansion.
(setq tramp-default-user-alist nil
tramp-default-host-alist nil)
(should
(string-equal
(file-remote-p
(concat
"/user1@host1"
"|user2@"
"|user3@:/path/to/file"))
(format "/%s@%s|%s@%s|%s@%s:"
"user1" "host1"
"user2" "host1"
"user3" "host1")))
(should
(string-equal
(file-remote-p
(concat
"/%u@%h"
"|user2@host2"
"|%u@%h"
"|user4%domain4@host4#1234:/path/to/file"))
(format "/%s@%s|%s@%s|%s@%s|%s@%s:"
"user2" "host2"
"user2" "host2"
"user4" "host4"
"user4%domain4" "host4#1234"))))
;; Exit.
(tramp-change-syntax syntax))))
(ert-deftest tramp-test02-file-name-dissect-separate ()
"Check separate file name components."
:tags '(:expensive-test)
(let ((tramp-default-method "default-method")
(tramp-default-user "default-user")
(tramp-default-host "default-host")
tramp-default-method-alist
tramp-default-user-alist
tramp-default-host-alist
Stronger check for Tramp method * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-rclone.el (tramp-rclone-maybe-open-connection): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-maybe-open-connection): Use `tramp-get-connection-name'. * lisp/net/tramp-sh.el (tramp-sh-handle-make-symbolic-link): * lisp/net/tramp-smb.el (tramp-smb-handle-make-symbolic-link): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-handle-make-symbolic-link): Don't check remote TARGET. * lisp/net/tramp.el (tramp-dissect-file-name): Check for proper method. (tramp-file-name-for-operation): Take only 2nd argument into account for file name handler. (tramp-file-name-handler): Suppress checks for `file-remote-p'. * test/lisp/net/tramp-archive-tests.el (tramp-archive-test02-file-name-dissect): Suppress check for wrong method. * test/lisp/net/tramp-tests.el (tramp--test-instrument-test-case): Dump *all* Tramp buffers. (tramp-test02-file-name-dissect) (tramp-test02-file-name-dissect-simplified) (tramp-test02-file-name-dissect-separate): Check also wrong method. (tramp-test03-file-name-defaults): Check, that the respective Tramp package is loaded. (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name) (tramp-test06-directory-file-name, tramp-test44-auto-load): Suppress check for wrong method. (tramp-test30-make-process): Remove instrumentation code. (tramp-test31-interrupt-process, tramp-test36-vc-registered): Guarantee that connection is established prior starting process.
2019-06-04 12:51:45 +02:00
;; Suppress method name check.
(non-essential t)
;; Suppress check for multihops.
(tramp-cache-data (make-hash-table :test #'equal))
(tramp-connection-properties '((nil "login-program" t)))
(syntax tramp-syntax))
(unwind-protect
(progn
(tramp-change-syntax 'separate)
Stronger check for Tramp method * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-rclone.el (tramp-rclone-maybe-open-connection): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-maybe-open-connection): Use `tramp-get-connection-name'. * lisp/net/tramp-sh.el (tramp-sh-handle-make-symbolic-link): * lisp/net/tramp-smb.el (tramp-smb-handle-make-symbolic-link): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-handle-make-symbolic-link): Don't check remote TARGET. * lisp/net/tramp.el (tramp-dissect-file-name): Check for proper method. (tramp-file-name-for-operation): Take only 2nd argument into account for file name handler. (tramp-file-name-handler): Suppress checks for `file-remote-p'. * test/lisp/net/tramp-archive-tests.el (tramp-archive-test02-file-name-dissect): Suppress check for wrong method. * test/lisp/net/tramp-tests.el (tramp--test-instrument-test-case): Dump *all* Tramp buffers. (tramp-test02-file-name-dissect) (tramp-test02-file-name-dissect-simplified) (tramp-test02-file-name-dissect-separate): Check also wrong method. (tramp-test03-file-name-defaults): Check, that the respective Tramp package is loaded. (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name) (tramp-test06-directory-file-name, tramp-test44-auto-load): Suppress check for wrong method. (tramp-test30-make-process): Remove instrumentation code. (tramp-test31-interrupt-process, tramp-test36-vc-registered): Guarantee that connection is established prior starting process.
2019-06-04 12:51:45 +02:00
;; An unknown method shall raise an error.
(let (non-essential)
(should-error
(expand-file-name "/[method/user@host]")
:type 'user-error))
;; Expand `tramp-default-user' and `tramp-default-host'.
(should (string-equal
(file-remote-p "/[method/]")
(format
"/[%s/%s@%s]" "method" "default-user" "default-host")))
(should (string-equal (file-remote-p "/[method/]" 'method) "method"))
(should (string-equal
(file-remote-p "/[method/]" 'user) "default-user"))
(should (string-equal
(file-remote-p "/[method/]" 'host) "default-host"))
(should (string-equal (file-remote-p "/[method/]" 'localname) ""))
(should (string-equal (file-remote-p "/[method/]" 'hop) nil))
;; Expand `tramp-default-method' and `tramp-default-user'.
(should (string-equal
(file-remote-p "/[/host]")
(format
"/[%s/%s@%s]" "default-method" "default-user" "host")))
(should (string-equal
(file-remote-p "/[/host]" 'method) "default-method"))
(should (string-equal
(file-remote-p "/[/host]" 'user) "default-user"))
(should (string-equal (file-remote-p "/[/host]" 'host) "host"))
(should (string-equal (file-remote-p "/[/host]" 'localname) ""))
(should (string-equal (file-remote-p "/[/host]" 'hop) nil))
;; Expand `tramp-default-method' and `tramp-default-host'.
(should (string-equal
(file-remote-p "/[/user@]")
(format
"/[%s/%s@%s]" "default-method" "user" "default-host")))
(should (string-equal
(file-remote-p "/[/user@]" 'method) "default-method"))
(should (string-equal (file-remote-p "/[/user@]" 'user) "user"))
(should (string-equal
(file-remote-p "/[/user@]" 'host) "default-host"))
(should (string-equal (file-remote-p "/[/user@]" 'localname) ""))
(should (string-equal (file-remote-p "/[/user@]" 'hop) nil))
;; Expand `tramp-default-method'.
(should (string-equal
(file-remote-p "/[/user@host]")
(format "/[%s/%s@%s]" "default-method" "user" "host")))
(should (string-equal
(file-remote-p "/[/user@host]" 'method) "default-method"))
(should (string-equal (file-remote-p "/[/user@host]" 'user) "user"))
(should (string-equal (file-remote-p "/[/user@host]" 'host) "host"))
(should (string-equal (file-remote-p "/[/user@host]" 'localname) ""))
(should (string-equal (file-remote-p "/[/user@host]" 'hop) nil))
;; Expand `tramp-default-method' and `tramp-default-user'.
(should (string-equal
(file-remote-p "/[-/host]")
(format
"/[%s/%s@%s]" "default-method" "default-user" "host")))
(should (string-equal
(file-remote-p "/[-/host]" 'method) "default-method"))
(should (string-equal
(file-remote-p "/[-/host]" 'user) "default-user"))
(should (string-equal (file-remote-p "/[-/host]" 'host) "host"))
(should (string-equal (file-remote-p "/[-/host]" 'localname) ""))
(should (string-equal (file-remote-p "/[-/host]" 'hop) nil))
;; Expand `tramp-default-method' and `tramp-default-host'.
(should (string-equal
(file-remote-p "/[-/user@]")
(format
"/[%s/%s@%s]" "default-method" "user" "default-host")))
(should (string-equal
(file-remote-p "/[-/user@]" 'method) "default-method"))
(should (string-equal (file-remote-p "/[-/user@]" 'user) "user"))
(should (string-equal
(file-remote-p "/[-/user@]" 'host) "default-host"))
(should (string-equal (file-remote-p "/[-/user@]" 'localname) ""))
(should (string-equal (file-remote-p "/[-/user@]" 'hop) nil))
;; Expand `tramp-default-method'.
(should (string-equal
(file-remote-p "/[-/user@host]")
(format "/[%s/%s@%s]" "default-method" "user" "host")))
(should (string-equal
(file-remote-p "/[-/user@host]" 'method) "default-method"))
(should (string-equal (file-remote-p "/[-/user@host]" 'user) "user"))
(should (string-equal (file-remote-p "/[-/user@host]" 'host) "host"))
(should (string-equal (file-remote-p "/[-/user@host]" 'localname) ""))
(should (string-equal (file-remote-p "/[-/user@host]" 'hop) nil))
;; Expand `tramp-default-user'.
(should (string-equal
(file-remote-p "/[method/host]")
(format "/[%s/%s@%s]" "method" "default-user" "host")))
(should (string-equal
(file-remote-p "/[method/host]" 'method) "method"))
(should (string-equal
(file-remote-p "/[method/host]" 'user) "default-user"))
(should (string-equal (file-remote-p "/[method/host]" 'host) "host"))
(should (string-equal (file-remote-p "/[method/host]" 'localname) ""))
(should (string-equal (file-remote-p "/[method/host]" 'hop) nil))
;; Expand `tramp-default-host'.
(should (string-equal
(file-remote-p "/[method/user@]")
(format "/[%s/%s@%s]" "method" "user" "default-host")))
(should (string-equal
(file-remote-p "/[method/user@]" 'method) "method"))
(should (string-equal (file-remote-p "/[method/user@]" 'user) "user"))
(should (string-equal
(file-remote-p "/[method/user@]" 'host) "default-host"))
(should (string-equal
(file-remote-p "/[method/user@]" 'localname) ""))
(should (string-equal (file-remote-p "/[method/user@]" 'hop) nil))
;; No expansion.
(should (string-equal
(file-remote-p "/[method/user@host]")
(format "/[%s/%s@%s]" "method" "user" "host")))
(should (string-equal
(file-remote-p "/[method/user@host]" 'method) "method"))
(should (string-equal
(file-remote-p "/[method/user@host]" 'user) "user"))
(should (string-equal
(file-remote-p "/[method/user@host]" 'host) "host"))
(should (string-equal
(file-remote-p "/[method/user@host]" 'localname) ""))
(should (string-equal
(file-remote-p "/[method/user@host]" 'hop) nil))
;; No expansion.
(should (string-equal
(file-remote-p "/[method/user@email@host]")
(format "/[%s/%s@%s]" "method" "user@email" "host")))
(should (string-equal
(file-remote-p
"/[method/user@email@host]" 'method) "method"))
(should (string-equal
(file-remote-p
"/[method/user@email@host]" 'user) "user@email"))
(should (string-equal
(file-remote-p "/[method/user@email@host]" 'host) "host"))
(should (string-equal
(file-remote-p "/[method/user@email@host]" 'localname) ""))
(should (string-equal
(file-remote-p "/[method/user@email@host]" 'hop) nil))
;; Expand `tramp-default-method' and `tramp-default-user'.
(should (string-equal
(file-remote-p "/[/host#1234]")
(format
"/[%s/%s@%s]" "default-method" "default-user" "host#1234")))
(should (string-equal
(file-remote-p "/[/host#1234]" 'method) "default-method"))
(should (string-equal
(file-remote-p "/[/host#1234]" 'user) "default-user"))
(should (string-equal
(file-remote-p "/[/host#1234]" 'host) "host#1234"))
(should (string-equal (file-remote-p "/[/host#1234]" 'localname) ""))
(should (string-equal (file-remote-p "/[/host#1234]" 'hop) nil))
;; Expand `tramp-default-method'.
(should (string-equal
(file-remote-p "/[/user@host#1234]")
(format "/[%s/%s@%s]" "default-method" "user" "host#1234")))
(should (string-equal
(file-remote-p
"/[/user@host#1234]" 'method) "default-method"))
(should (string-equal
(file-remote-p
"/[/user@host#1234]" 'user) "user"))
(should (string-equal
(file-remote-p "/[/user@host#1234]" 'host) "host#1234"))
(should (string-equal
(file-remote-p "/[/user@host#1234]" 'localname) ""))
(should (string-equal (file-remote-p "/[/user@host#1234]" 'hop) nil))
;; Expand `tramp-default-method' and `tramp-default-user'.
(should (string-equal
(file-remote-p "/[-/host#1234]")
(format
"/[%s/%s@%s]" "default-method" "default-user" "host#1234")))
(should (string-equal
(file-remote-p "/[-/host#1234]" 'method) "default-method"))
(should (string-equal
(file-remote-p "/[-/host#1234]" 'user) "default-user"))
(should (string-equal
(file-remote-p "/[-/host#1234]" 'host) "host#1234"))
(should (string-equal (file-remote-p "/[-/host#1234]" 'localname) ""))
(should (string-equal (file-remote-p "/[-/host#1234]" 'hop) nil))
;; Expand `tramp-default-method'.
(should (string-equal
(file-remote-p "/[-/user@host#1234]")
(format "/[%s/%s@%s]" "default-method" "user" "host#1234")))
(should (string-equal
(file-remote-p
"/[-/user@host#1234]" 'method) "default-method"))
(should (string-equal
(file-remote-p
"/[-/user@host#1234]" 'user) "user"))
(should (string-equal
(file-remote-p "/[-/user@host#1234]" 'host) "host#1234"))
(should (string-equal
(file-remote-p "/[-/user@host#1234]" 'localname) ""))
(should (string-equal (file-remote-p "/[-/user@host#1234]" 'hop) nil))
;; Expand `tramp-default-user'.
(should (string-equal
(file-remote-p "/[method/host#1234]")
(format "/[%s/%s@%s]" "method" "default-user" "host#1234")))
(should (string-equal
(file-remote-p "/[method/host#1234]" 'method) "method"))
(should (string-equal
(file-remote-p "/[method/host#1234]" 'user) "default-user"))
(should (string-equal
(file-remote-p "/[method/host#1234]" 'host) "host#1234"))
(should (string-equal
(file-remote-p "/[method/host#1234]" 'localname) ""))
(should (string-equal (file-remote-p "/[method/host#1234]" 'hop) nil))
;; No expansion.
(should (string-equal
(file-remote-p "/[method/user@host#1234]")
(format "/[%s/%s@%s]" "method" "user" "host#1234")))
(should (string-equal
(file-remote-p "/[method/user@host#1234]" 'method) "method"))
(should (string-equal
(file-remote-p "/[method/user@host#1234]" 'user) "user"))
(should (string-equal
(file-remote-p
"/[method/user@host#1234]" 'host) "host#1234"))
(should (string-equal
(file-remote-p "/[method/user@host#1234]" 'localname) ""))
(should (string-equal
(file-remote-p "/[method/user@host#1234]" 'hop) nil))
;; Expand `tramp-default-method' and `tramp-default-user'.
(should (string-equal
(file-remote-p "/[/1.2.3.4]")
(format
"/[%s/%s@%s]" "default-method" "default-user" "1.2.3.4")))
(should (string-equal
(file-remote-p "/[/1.2.3.4]" 'method) "default-method"))
(should (string-equal
(file-remote-p "/[/1.2.3.4]" 'user) "default-user"))
(should (string-equal
(file-remote-p "/[/1.2.3.4]" 'host) "1.2.3.4"))
(should (string-equal (file-remote-p "/[/1.2.3.4]" 'localname) ""))
(should (string-equal (file-remote-p "/[/1.2.3.4]" 'hop) nil))
;; Expand `tramp-default-method'.
(should (string-equal
(file-remote-p "/[/user@1.2.3.4]")
(format "/[%s/%s@%s]" "default-method" "user" "1.2.3.4")))
(should (string-equal
(file-remote-p
"/[/user@1.2.3.4]" 'method) "default-method"))
(should (string-equal
(file-remote-p "/[/user@1.2.3.4]" 'user) "user"))
(should (string-equal
(file-remote-p "/[/user@1.2.3.4]" 'host) "1.2.3.4"))
(should (string-equal
(file-remote-p "/[/user@1.2.3.4]" 'localname) ""))
(should (string-equal (file-remote-p "/[/user@1.2.3.4]" 'hop) nil))
;; Expand `tramp-default-method' and `tramp-default-user'.
(should (string-equal
(file-remote-p "/[-/1.2.3.4]")
(format
"/[%s/%s@%s]" "default-method" "default-user" "1.2.3.4")))
(should (string-equal
(file-remote-p "/[-/1.2.3.4]" 'method) "default-method"))
(should (string-equal
(file-remote-p "/[-/1.2.3.4]" 'user) "default-user"))
(should (string-equal
(file-remote-p "/[-/1.2.3.4]" 'host) "1.2.3.4"))
(should (string-equal (file-remote-p "/[-/1.2.3.4]" 'localname) ""))
(should (string-equal (file-remote-p "/[-/1.2.3.4]" 'hop) nil))
;; Expand `tramp-default-method'.
(should (string-equal
(file-remote-p "/[-/user@1.2.3.4]")
(format "/[%s/%s@%s]" "default-method" "user" "1.2.3.4")))
(should (string-equal
(file-remote-p
"/[-/user@1.2.3.4]" 'method) "default-method"))
(should (string-equal
(file-remote-p "/[-/user@1.2.3.4]" 'user) "user"))
(should (string-equal
(file-remote-p "/[-/user@1.2.3.4]" 'host) "1.2.3.4"))
(should (string-equal
(file-remote-p "/[-/user@1.2.3.4]" 'localname) ""))
(should (string-equal (file-remote-p "/[-/user@1.2.3.4]" 'hop) nil))
;; Expand `tramp-default-user'.
(should (string-equal
(file-remote-p "/[method/1.2.3.4]")
(format "/[%s/%s@%s]" "method" "default-user" "1.2.3.4")))
(should (string-equal
(file-remote-p "/[method/1.2.3.4]" 'method) "method"))
(should (string-equal
(file-remote-p "/[method/1.2.3.4]" 'user) "default-user"))
(should (string-equal
(file-remote-p "/[method/1.2.3.4]" 'host) "1.2.3.4"))
(should (string-equal
(file-remote-p "/[method/1.2.3.4]" 'localname) ""))
(should (string-equal (file-remote-p "/[method/1.2.3.4]" 'hop) nil))
;; No expansion.
(should (string-equal
(file-remote-p "/[method/user@1.2.3.4]")
(format "/[%s/%s@%s]" "method" "user" "1.2.3.4")))
(should (string-equal
(file-remote-p "/[method/user@1.2.3.4]" 'method) "method"))
(should (string-equal
(file-remote-p "/[method/user@1.2.3.4]" 'user) "user"))
(should (string-equal
(file-remote-p "/[method/user@1.2.3.4]" 'host) "1.2.3.4"))
(should (string-equal
(file-remote-p "/[method/user@1.2.3.4]" 'localname) ""))
(should (string-equal
(file-remote-p "/[method/user@1.2.3.4]" 'hop) nil))
;; Expand `tramp-default-method', `tramp-default-user' and
;; `tramp-default-host'.
(should (string-equal
(file-remote-p "/[/]")
(format
"/[%s/%s@%s]"
"default-method" "default-user" "default-host")))
(should (string-equal
(file-remote-p "/[/]" 'method) "default-method"))
(should (string-equal (file-remote-p "/[/]" 'user) "default-user"))
(should (string-equal (file-remote-p "/[/]" 'host) "default-host"))
(should (string-equal (file-remote-p "/[/]" 'localname) ""))
(should (string-equal (file-remote-p "/[/]" 'hop) nil))
;; Expand `tramp-default-method' and `tramp-default-user'.
(let ((tramp-default-host "::1"))
(should (string-equal
(file-remote-p "/[/]")
(format
"/[%s/%s@%s]"
"default-method" "default-user" "::1")))
(should (string-equal
(file-remote-p "/[/]" 'method) "default-method"))
(should (string-equal (file-remote-p "/[/]" 'user) "default-user"))
(should (string-equal (file-remote-p "/[/]" 'host) "::1"))
(should (string-equal (file-remote-p "/[/]" 'localname) ""))
(should (string-equal (file-remote-p "/[/]" 'hop) nil)))
;; Expand `tramp-default-method' and `tramp-default-user'.
(should (string-equal
(file-remote-p "/[/::1]")
(format
"/[%s/%s@%s]" "default-method" "default-user" "::1")))
(should (string-equal
(file-remote-p "/[/::1]" 'method) "default-method"))
(should (string-equal
(file-remote-p "/[/::1]" 'user) "default-user"))
(should (string-equal (file-remote-p "/[/::1]" 'host) "::1"))
(should (string-equal (file-remote-p "/[/::1]" 'localname) ""))
(should (string-equal (file-remote-p "/[/::1]" 'hop) nil))
;; Expand `tramp-default-method'.
(should (string-equal
(file-remote-p "/[/user@::1]")
(format "/[%s/%s@%s]" "default-method" "user" "::1")))
(should (string-equal
(file-remote-p "/[/user@::1]" 'method) "default-method"))
(should (string-equal (file-remote-p "/[/user@::1]" 'user) "user"))
(should (string-equal (file-remote-p "/[/user@::1]" 'host) "::1"))
(should (string-equal (file-remote-p "/[/user@::1]" 'localname) ""))
(should (string-equal (file-remote-p "/[/user@::1]" 'hop) nil))
;; Expand `tramp-default-method', `tramp-default-user' and
;; `tramp-default-host'.
(should (string-equal
(file-remote-p "/[-/]")
(format
"/[%s/%s@%s]"
"default-method" "default-user" "default-host")))
(should (string-equal
(file-remote-p "/[-/]" 'method) "default-method"))
(should (string-equal (file-remote-p "/[-/]" 'user) "default-user"))
(should (string-equal (file-remote-p "/[-/]" 'host) "default-host"))
(should (string-equal (file-remote-p "/[-/]" 'localname) ""))
(should (string-equal (file-remote-p "/[-/]" 'hop) nil))
;; Expand `tramp-default-method' and `tramp-default-user'.
(let ((tramp-default-host "::1"))
(should (string-equal
(file-remote-p "/[-/]")
(format
"/[%s/%s@%s]"
"default-method" "default-user" "::1")))
(should (string-equal
(file-remote-p "/[-/]" 'method) "default-method"))
(should (string-equal (file-remote-p "/[-/]" 'user) "default-user"))
(should (string-equal (file-remote-p "/[-/]" 'host) "::1"))
(should (string-equal (file-remote-p "/[-/]" 'localname) ""))
(should (string-equal (file-remote-p "/[-/]" 'hop) nil)))
;; Expand `tramp-default-method' and `tramp-default-user'.
(should (string-equal
(file-remote-p "/[-/::1]")
(format
"/[%s/%s@%s]" "default-method" "default-user" "::1")))
(should (string-equal
(file-remote-p "/[-/::1]" 'method) "default-method"))
(should (string-equal
(file-remote-p "/[-/::1]" 'user) "default-user"))
(should (string-equal (file-remote-p "/[-/::1]" 'host) "::1"))
(should (string-equal (file-remote-p "/[-/::1]" 'localname) ""))
(should (string-equal (file-remote-p "/[-/::1]" 'hop) nil))
;; Expand `tramp-default-method'.
(should (string-equal
(file-remote-p "/[-/user@::1]")
(format "/[%s/%s@%s]" "default-method" "user" "::1")))
(should (string-equal
(file-remote-p "/[-/user@::1]" 'method) "default-method"))
(should (string-equal (file-remote-p "/[-/user@::1]" 'user) "user"))
(should (string-equal (file-remote-p "/[-/user@::1]" 'host) "::1"))
(should (string-equal (file-remote-p "/[-/user@::1]" 'localname) ""))
(should (string-equal (file-remote-p "/[-/user@::1]" 'hop) nil))
;; Expand `tramp-default-user'.
(should (string-equal
(file-remote-p "/[method/::1]")
(format "/[%s/%s@%s]" "method" "default-user" "::1")))
(should (string-equal
(file-remote-p "/[method/::1]" 'method) "method"))
(should (string-equal
(file-remote-p "/[method/::1]" 'user) "default-user"))
(should (string-equal (file-remote-p "/[method/::1]" 'host) "::1"))
(should (string-equal (file-remote-p "/[method/::1]" 'localname) ""))
(should (string-equal (file-remote-p "/[method/::1]" 'hop) nil))
;; No expansion.
(should (string-equal
(file-remote-p "/[method/user@::1]")
(format "/[%s/%s@%s]" "method" "user" "::1")))
(should (string-equal
(file-remote-p "/[method/user@::1]" 'method) "method"))
(should (string-equal
(file-remote-p "/[method/user@::1]" 'user) "user"))
(should (string-equal
(file-remote-p "/[method/user@::1]" 'host) "::1"))
(should (string-equal
(file-remote-p "/[method/user@::1]" 'localname) ""))
(should (string-equal (file-remote-p "/[method/user@::1]" 'hop) nil))
;; Local file name part.
(should (string-equal (file-remote-p "/[/host]/:" 'localname) "/:"))
(should (string-equal (file-remote-p "/[-/host]/:" 'localname) "/:"))
(should (string-equal (file-remote-p "/[method/]:" 'localname) ":"))
(should (string-equal (file-remote-p "/[method/] " 'localname) " "))
(should (string-equal
(file-remote-p "/[method/]file" 'localname) "file"))
(should (string-equal
(file-remote-p "/[method/]/path/to/file" 'localname)
"/path/to/file"))
;; Multihop.
(should
(string-equal
(file-remote-p
"/[method1/user1@host1|method2/user2@host2]/path/to/file")
(format "/[%s/%s@%s|%s/%s@%s]"
"method1" "user1" "host1" "method2" "user2" "host2")))
(should
(string-equal
(file-remote-p
"/[method1/user1@host1|method2/user2@host2]/path/to/file" 'method)
"method2"))
(should
(string-equal
(file-remote-p
"/[method1/user1@host1|method2/user2@host2]/path/to/file" 'user)
"user2"))
(should
(string-equal
(file-remote-p
"/[method1/user1@host1|method2/user2@host2]/path/to/file" 'host)
"host2"))
(should
(string-equal
(file-remote-p
"/[method1/user1@host1|method2/user2@host2]/path/to/file"
'localname)
"/path/to/file"))
(should
(string-equal
(file-remote-p
"/[method1/user1@host1|method2/user2@host2]/path/to/file" 'hop)
(format "%s/%s@%s|"
"method1" "user1" "host1")))
(should
(string-equal
(file-remote-p
(concat
"/[method1/user1@host1"
"|method2/user2@host2"
"|method3/user3@host3]/path/to/file"))
(format "/[%s/%s@%s|%s/%s@%s|%s/%s@%s]"
"method1" "user1" "host1"
"method2" "user2" "host2"
"method3" "user3" "host3")))
(should
(string-equal
(file-remote-p
(concat
"/[method1/user1@host1"
"|method2/user2@host2"
"|method3/user3@host3]/path/to/file")
'method)
"method3"))
(should
(string-equal
(file-remote-p
(concat
"/[method1/user1@host1"
"|method2/user2@host2"
"|method3/user3@host3]/path/to/file")
'user)
"user3"))
(should
(string-equal
(file-remote-p
(concat
"/[method1/user1@host1"
"|method2/user2@host2"
"|method3/user3@host3]/path/to/file")
'host)
"host3"))
(should
(string-equal
(file-remote-p
(concat
"/[method1/user1@host1"
"|method2/user2@host2"
"|method3/user3@host3]/path/to/file")
'localname)
"/path/to/file"))
(should
(string-equal
(file-remote-p
(concat
"/[method1/user1@host1"
"|method2/user2@host2"
"|method3/user3@host3]/path/to/file")
'hop)
(format "%s/%s@%s|%s/%s@%s|"
"method1" "user1" "host1" "method2" "user2" "host2")))
;; Expand `tramp-default-method-alist'.
(add-to-list 'tramp-default-method-alist '("host1" "user1" "method1"))
(add-to-list 'tramp-default-method-alist '("host2" "user2" "method2"))
(add-to-list 'tramp-default-method-alist '("host3" "user3" "method3"))
(should
(string-equal
(file-remote-p
(concat
"/[/user1@host1"
"|/user2@host2"
"|/user3@host3]/path/to/file"))
(format "/[%s/%s@%s|%s/%s@%s|%s/%s@%s]"
"method1" "user1" "host1"
"method2" "user2" "host2"
"method3" "user3" "host3")))
;; Expand `tramp-default-user-alist'.
(add-to-list 'tramp-default-user-alist '("method1" "host1" "user1"))
(add-to-list 'tramp-default-user-alist '("method2" "host2" "user2"))
(add-to-list 'tramp-default-user-alist '("method3" "host3" "user3"))
(should
(string-equal
(file-remote-p
(concat
"/[method1/host1"
"|method2/host2"
"|method3/host3]/path/to/file"))
(format "/[%s/%s@%s|%s/%s@%s|%s/%s@%s]"
"method1" "user1" "host1"
"method2" "user2" "host2"
"method3" "user3" "host3")))
;; Expand `tramp-default-host-alist'.
(add-to-list 'tramp-default-host-alist '("method1" "user1" "host1"))
(add-to-list 'tramp-default-host-alist '("method2" "user2" "host2"))
(add-to-list 'tramp-default-host-alist '("method3" "user3" "host3"))
(should
(string-equal
(file-remote-p
(concat
"/[method1/user1@"
"|method2/user2@"
"|method3/user3@]/path/to/file"))
(format "/[%s/%s@%s|%s/%s@%s|%s/%s@%s]"
"method1" "user1" "host1"
"method2" "user2" "host2"
"method3" "user3" "host3")))
;; Ad-hoc user name and host name expansion.
(setq tramp-default-method-alist nil
tramp-default-user-alist nil
tramp-default-host-alist nil)
(should
(string-equal
(file-remote-p
(concat
"/[method1/user1@host1"
"|method2/user2@"
"|method3/user3@]/path/to/file"))
(format "/[%s/%s@%s|%s/%s@%s|%s/%s@%s]"
"method1" "user1" "host1"
"method2" "user2" "host1"
"method3" "user3" "host1")))
(should
(string-equal
(file-remote-p
(concat
"/[method1/%u@%h"
"|method2/user2@host2"
"|method3/%u@%h"
"|method4/user4%domain4@host4#1234]/path/to/file"))
(format "/[%s/%s@%s|%s/%s@%s|%s/%s@%s|%s/%s@%s]"
"method1" "user2" "host2"
"method2" "user2" "host2"
"method3" "user4" "host4"
"method4" "user4%domain4" "host4#1234"))))
;; Exit.
(tramp-change-syntax syntax))))
2013-11-05 15:46:57 +01:00
(ert-deftest tramp-test03-file-name-defaults ()
"Check default values for some methods."
;; Default values in tramp-adb.el.
Stronger check for Tramp method * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-rclone.el (tramp-rclone-maybe-open-connection): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-maybe-open-connection): Use `tramp-get-connection-name'. * lisp/net/tramp-sh.el (tramp-sh-handle-make-symbolic-link): * lisp/net/tramp-smb.el (tramp-smb-handle-make-symbolic-link): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-handle-make-symbolic-link): Don't check remote TARGET. * lisp/net/tramp.el (tramp-dissect-file-name): Check for proper method. (tramp-file-name-for-operation): Take only 2nd argument into account for file name handler. (tramp-file-name-handler): Suppress checks for `file-remote-p'. * test/lisp/net/tramp-archive-tests.el (tramp-archive-test02-file-name-dissect): Suppress check for wrong method. * test/lisp/net/tramp-tests.el (tramp--test-instrument-test-case): Dump *all* Tramp buffers. (tramp-test02-file-name-dissect) (tramp-test02-file-name-dissect-simplified) (tramp-test02-file-name-dissect-separate): Check also wrong method. (tramp-test03-file-name-defaults): Check, that the respective Tramp package is loaded. (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name) (tramp-test06-directory-file-name, tramp-test44-auto-load): Suppress check for wrong method. (tramp-test30-make-process): Remove instrumentation code. (tramp-test31-interrupt-process, tramp-test36-vc-registered): Guarantee that connection is established prior starting process.
2019-06-04 12:51:45 +02:00
(when (assoc "adb" tramp-methods)
(should (string-equal (file-remote-p "/adb::" 'host) "")))
2013-11-05 15:46:57 +01:00
;; Default values in tramp-ftp.el.
Stronger check for Tramp method * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-rclone.el (tramp-rclone-maybe-open-connection): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-maybe-open-connection): Use `tramp-get-connection-name'. * lisp/net/tramp-sh.el (tramp-sh-handle-make-symbolic-link): * lisp/net/tramp-smb.el (tramp-smb-handle-make-symbolic-link): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-handle-make-symbolic-link): Don't check remote TARGET. * lisp/net/tramp.el (tramp-dissect-file-name): Check for proper method. (tramp-file-name-for-operation): Take only 2nd argument into account for file name handler. (tramp-file-name-handler): Suppress checks for `file-remote-p'. * test/lisp/net/tramp-archive-tests.el (tramp-archive-test02-file-name-dissect): Suppress check for wrong method. * test/lisp/net/tramp-tests.el (tramp--test-instrument-test-case): Dump *all* Tramp buffers. (tramp-test02-file-name-dissect) (tramp-test02-file-name-dissect-simplified) (tramp-test02-file-name-dissect-separate): Check also wrong method. (tramp-test03-file-name-defaults): Check, that the respective Tramp package is loaded. (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name) (tramp-test06-directory-file-name, tramp-test44-auto-load): Suppress check for wrong method. (tramp-test30-make-process): Remove instrumentation code. (tramp-test31-interrupt-process, tramp-test36-vc-registered): Guarantee that connection is established prior starting process.
2019-06-04 12:51:45 +02:00
(when (assoc "ftp" tramp-methods)
(should (string-equal (file-remote-p "/-:ftp.host:" 'method) "ftp"))
(dolist (u '("ftp" "anonymous"))
(should
(string-equal (file-remote-p (format "/-:%s@:" u) 'method) "ftp"))))
;; Default values in tramp-sh.el and tramp-sudoedit.el.
Stronger check for Tramp method * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-rclone.el (tramp-rclone-maybe-open-connection): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-maybe-open-connection): Use `tramp-get-connection-name'. * lisp/net/tramp-sh.el (tramp-sh-handle-make-symbolic-link): * lisp/net/tramp-smb.el (tramp-smb-handle-make-symbolic-link): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-handle-make-symbolic-link): Don't check remote TARGET. * lisp/net/tramp.el (tramp-dissect-file-name): Check for proper method. (tramp-file-name-for-operation): Take only 2nd argument into account for file name handler. (tramp-file-name-handler): Suppress checks for `file-remote-p'. * test/lisp/net/tramp-archive-tests.el (tramp-archive-test02-file-name-dissect): Suppress check for wrong method. * test/lisp/net/tramp-tests.el (tramp--test-instrument-test-case): Dump *all* Tramp buffers. (tramp-test02-file-name-dissect) (tramp-test02-file-name-dissect-simplified) (tramp-test02-file-name-dissect-separate): Check also wrong method. (tramp-test03-file-name-defaults): Check, that the respective Tramp package is loaded. (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name) (tramp-test06-directory-file-name, tramp-test44-auto-load): Suppress check for wrong method. (tramp-test30-make-process): Remove instrumentation code. (tramp-test31-interrupt-process, tramp-test36-vc-registered): Guarantee that connection is established prior starting process.
2019-06-04 12:51:45 +02:00
(when (assoc "su" tramp-methods)
(dolist (h `("127.0.0.1" "[::1]" "localhost" "localhost6" ,(system-name)))
(should
(string-equal (file-remote-p (format "/-:root@%s:" h) 'method) "su")))
(dolist (m '("su" "sudo" "ksu" "doas" "sudoedit"))
(should (string-equal (file-remote-p (format "/%s::" m) 'user) "root"))
(should
(string-equal (file-remote-p (format "/%s::" m) 'host) (system-name))))
(dolist (m '("rcp" "remcp" "rsh" "telnet" "krlogin" "fcp" "nc"))
(should
(string-equal
(file-remote-p (format "/%s::" m) 'user) (user-login-name)))))
2013-11-05 15:46:57 +01:00
;; Default values in tramp-smb.el.
Stronger check for Tramp method * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-rclone.el (tramp-rclone-maybe-open-connection): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-maybe-open-connection): Use `tramp-get-connection-name'. * lisp/net/tramp-sh.el (tramp-sh-handle-make-symbolic-link): * lisp/net/tramp-smb.el (tramp-smb-handle-make-symbolic-link): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-handle-make-symbolic-link): Don't check remote TARGET. * lisp/net/tramp.el (tramp-dissect-file-name): Check for proper method. (tramp-file-name-for-operation): Take only 2nd argument into account for file name handler. (tramp-file-name-handler): Suppress checks for `file-remote-p'. * test/lisp/net/tramp-archive-tests.el (tramp-archive-test02-file-name-dissect): Suppress check for wrong method. * test/lisp/net/tramp-tests.el (tramp--test-instrument-test-case): Dump *all* Tramp buffers. (tramp-test02-file-name-dissect) (tramp-test02-file-name-dissect-simplified) (tramp-test02-file-name-dissect-separate): Check also wrong method. (tramp-test03-file-name-defaults): Check, that the respective Tramp package is loaded. (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name) (tramp-test06-directory-file-name, tramp-test44-auto-load): Suppress check for wrong method. (tramp-test30-make-process): Remove instrumentation code. (tramp-test31-interrupt-process, tramp-test36-vc-registered): Guarantee that connection is established prior starting process.
2019-06-04 12:51:45 +02:00
(when (assoc "smb" tramp-methods)
(should (string-equal (file-remote-p "/smb::" 'user) nil))))
2013-11-05 15:46:57 +01:00
;; The following test is inspired by Bug#30946.
(ert-deftest tramp-test03-file-name-host-rules ()
"Check host name rules for host-less methods."
(skip-unless (tramp--test-enabled))
(skip-unless (tramp--test-sh-p))
;; Host names must match rules in case the command template of a
;; method doesn't use them.
(dolist (m '("su" "sg" "sudo" "doas" "ksu"))
(let ((vec (tramp-dissect-file-name tramp-test-temporary-file-directory))
tramp-connection-properties tramp-default-proxies-alist)
(ignore-errors (tramp-cleanup-connection vec nil 'keep-password))
;; Single hop. The host name must match `tramp-local-host-regexp'.
(should-error
(find-file (format "/%s:foo:" m))
:type 'user-error)
;; Multi hop. The host name must match the previous hop.
(should-error
(find-file
(format
"%s|%s:foo:"
(substring (file-remote-p tramp-test-temporary-file-directory) 0 -1)
m))
:type 'user-error))))
(ert-deftest tramp-test03-file-name-method-rules ()
"Check file name rules for some methods."
(skip-unless (tramp--test-enabled))
;; Multi hops are allowed for inline methods only.
(should-error
(file-remote-p "/ssh:user1@host1|method:user2@host2:/path/to/file")
:type 'user-error)
(should-error
(file-remote-p "/method:user1@host1|ssh:user2@host2:/path/to/file")
:type 'user-error)
;; Samba does not support file names with periods followed by
;; spaces, and trailing periods or spaces.
(when (tramp-smb-file-name-p tramp-test-temporary-file-directory)
(dolist (file '("foo." "foo. bar" "foo "))
(should-error
(tramp-smb-get-localname
(tramp-dissect-file-name
(expand-file-name file tramp-test-temporary-file-directory)))
:type 'file-error))))
2013-11-05 15:46:57 +01:00
(ert-deftest tramp-test04-substitute-in-file-name ()
"Check `substitute-in-file-name'."
Stronger check for Tramp method * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-rclone.el (tramp-rclone-maybe-open-connection): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-maybe-open-connection): Use `tramp-get-connection-name'. * lisp/net/tramp-sh.el (tramp-sh-handle-make-symbolic-link): * lisp/net/tramp-smb.el (tramp-smb-handle-make-symbolic-link): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-handle-make-symbolic-link): Don't check remote TARGET. * lisp/net/tramp.el (tramp-dissect-file-name): Check for proper method. (tramp-file-name-for-operation): Take only 2nd argument into account for file name handler. (tramp-file-name-handler): Suppress checks for `file-remote-p'. * test/lisp/net/tramp-archive-tests.el (tramp-archive-test02-file-name-dissect): Suppress check for wrong method. * test/lisp/net/tramp-tests.el (tramp--test-instrument-test-case): Dump *all* Tramp buffers. (tramp-test02-file-name-dissect) (tramp-test02-file-name-dissect-simplified) (tramp-test02-file-name-dissect-separate): Check also wrong method. (tramp-test03-file-name-defaults): Check, that the respective Tramp package is loaded. (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name) (tramp-test06-directory-file-name, tramp-test44-auto-load): Suppress check for wrong method. (tramp-test30-make-process): Remove instrumentation code. (tramp-test31-interrupt-process, tramp-test36-vc-registered): Guarantee that connection is established prior starting process.
2019-06-04 12:51:45 +02:00
;; Suppress method name check.
(let ((tramp-methods (cons '("method") tramp-methods)))
(should
(string-equal (substitute-in-file-name "/method:host:///foo") "/foo"))
(should
(string-equal
(substitute-in-file-name "/method:host://foo") "/method:host:/foo"))
(should
(string-equal (substitute-in-file-name "/method:host:/path///foo") "/foo"))
(should
(string-equal
(substitute-in-file-name "/method:host:/path//foo") "/method:host:/foo"))
;; Quoting local part.
(should
(string-equal
(substitute-in-file-name "/method:host:/:///foo")
"/method:host:/:///foo"))
(should
(string-equal
(substitute-in-file-name "/method:host:/://foo") "/method:host:/://foo"))
(should
(string-equal
(substitute-in-file-name "/method:host:/:/path///foo")
"/method:host:/:/path///foo"))
(should
(string-equal
(substitute-in-file-name "/method:host:/:/path//foo")
"/method:host:/:/path//foo"))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; Forwhatever reasons, the following tests let Emacs crash for
;; Emacs 24 and Emacs 25, occasionally. No idea what's up.
(when (or (tramp--test-emacs26-p) (tramp--test-emacs27-p))
(should
(string-equal (substitute-in-file-name "/method:host://~foo") "/~foo"))
(should
(string-equal
(substitute-in-file-name "/method:host:/~foo") "/method:host:/~foo"))
(should
(string-equal
(substitute-in-file-name "/method:host:/path//~foo") "/~foo"))
;; (substitute-in-file-name "/path/~foo") expands only for a local
;; user "foo" to "/~foo"". Otherwise, it doesn't expand.
(should
(string-equal
(substitute-in-file-name
"/method:host:/path/~foo") "/method:host:/path/~foo"))
;; Quoting local part.
(should
(string-equal
(substitute-in-file-name "/method:host:/://~foo")
"/method:host:/://~foo"))
(should
(string-equal
(substitute-in-file-name
"/method:host:/:/~foo") "/method:host:/:/~foo"))
(should
(string-equal
(substitute-in-file-name
"/method:host:/:/path//~foo") "/method:host:/:/path//~foo"))
(should
(string-equal
(substitute-in-file-name
"/method:host:/:/path/~foo") "/method:host:/:/path/~foo")))
Stronger check for Tramp method * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-rclone.el (tramp-rclone-maybe-open-connection): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-maybe-open-connection): Use `tramp-get-connection-name'. * lisp/net/tramp-sh.el (tramp-sh-handle-make-symbolic-link): * lisp/net/tramp-smb.el (tramp-smb-handle-make-symbolic-link): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-handle-make-symbolic-link): Don't check remote TARGET. * lisp/net/tramp.el (tramp-dissect-file-name): Check for proper method. (tramp-file-name-for-operation): Take only 2nd argument into account for file name handler. (tramp-file-name-handler): Suppress checks for `file-remote-p'. * test/lisp/net/tramp-archive-tests.el (tramp-archive-test02-file-name-dissect): Suppress check for wrong method. * test/lisp/net/tramp-tests.el (tramp--test-instrument-test-case): Dump *all* Tramp buffers. (tramp-test02-file-name-dissect) (tramp-test02-file-name-dissect-simplified) (tramp-test02-file-name-dissect-separate): Check also wrong method. (tramp-test03-file-name-defaults): Check, that the respective Tramp package is loaded. (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name) (tramp-test06-directory-file-name, tramp-test44-auto-load): Suppress check for wrong method. (tramp-test30-make-process): Remove instrumentation code. (tramp-test31-interrupt-process, tramp-test36-vc-registered): Guarantee that connection is established prior starting process.
2019-06-04 12:51:45 +02:00
(let (process-environment)
(should
(string-equal
(substitute-in-file-name "/method:host:/path/$FOO")
"/method:host:/path/$FOO"))
(setenv "FOO" "bla")
(should
(string-equal
(substitute-in-file-name "/method:host:/path/$FOO")
"/method:host:/path/bla"))
(should
(string-equal
(substitute-in-file-name "/method:host:/path/$$FOO")
"/method:host:/path/$FOO"))
;; Quoting local part.
(should
(string-equal
(substitute-in-file-name "/method:host:/:/path/$FOO")
"/method:host:/:/path/$FOO"))
(setenv "FOO" "bla")
(should
(string-equal
(substitute-in-file-name "/method:host:/:/path/$FOO")
"/method:host:/:/path/$FOO"))
(should
(string-equal
(substitute-in-file-name "/method:host:/:/path/$$FOO")
"/method:host:/:/path/$$FOO")))))
2013-11-05 15:46:57 +01:00
(ert-deftest tramp-test05-expand-file-name ()
"Check `expand-file-name'."
Stronger check for Tramp method * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-rclone.el (tramp-rclone-maybe-open-connection): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-maybe-open-connection): Use `tramp-get-connection-name'. * lisp/net/tramp-sh.el (tramp-sh-handle-make-symbolic-link): * lisp/net/tramp-smb.el (tramp-smb-handle-make-symbolic-link): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-handle-make-symbolic-link): Don't check remote TARGET. * lisp/net/tramp.el (tramp-dissect-file-name): Check for proper method. (tramp-file-name-for-operation): Take only 2nd argument into account for file name handler. (tramp-file-name-handler): Suppress checks for `file-remote-p'. * test/lisp/net/tramp-archive-tests.el (tramp-archive-test02-file-name-dissect): Suppress check for wrong method. * test/lisp/net/tramp-tests.el (tramp--test-instrument-test-case): Dump *all* Tramp buffers. (tramp-test02-file-name-dissect) (tramp-test02-file-name-dissect-simplified) (tramp-test02-file-name-dissect-separate): Check also wrong method. (tramp-test03-file-name-defaults): Check, that the respective Tramp package is loaded. (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name) (tramp-test06-directory-file-name, tramp-test44-auto-load): Suppress check for wrong method. (tramp-test30-make-process): Remove instrumentation code. (tramp-test31-interrupt-process, tramp-test36-vc-registered): Guarantee that connection is established prior starting process.
2019-06-04 12:51:45 +02:00
;; Suppress method name check.
(let ((tramp-methods (cons '("method") tramp-methods)))
(should
(string-equal
(expand-file-name "/method:host:/path/./file") "/method:host:/path/file"))
(should
(string-equal
(expand-file-name "/method:host:/path/../file") "/method:host:/file"))
(should
(string-equal
(expand-file-name "/method:host:/path/.") "/method:host:/path"))
(should
(string-equal
(expand-file-name "/method:host:/path/..") "/method:host:/"))
(should
(string-equal
(expand-file-name "." "/method:host:/path/") "/method:host:/path"))
(should
(string-equal
(expand-file-name "" "/method:host:/path/") "/method:host:/path"))
;; Quoting local part.
(should
(string-equal
(expand-file-name "/method:host:/:/path/./file")
"/method:host:/:/path/file"))
(should
(string-equal
(expand-file-name "/method:host:/:/path/../file") "/method:host:/:/file"))
(should
(string-equal
(expand-file-name "/method:host:/:/~/path/./file")
"/method:host:/:/~/path/file"))))
2013-11-05 15:46:57 +01:00
;; The following test is inspired by Bug#26911 and Bug#34834. They
;; are rather bugs in `expand-file-name', and it fails for all Emacs
;; versions. Test added for later, when they are fixed.
(ert-deftest tramp-test05-expand-file-name-relative ()
"Check `expand-file-name'."
;; Mark as failed until bug has been fixed.
:expected-result :failed
(skip-unless (tramp--test-enabled))
;; These are the methods the test doesn't fail.
(when (or (tramp--test-adb-p) (tramp--test-gvfs-p) (tramp--test-rclone-p)
(tramp-smb-file-name-p tramp-test-temporary-file-directory))
(setf (ert-test-expected-result-type
(ert-get-test 'tramp-test05-expand-file-name-relative))
:passed))
(should
(string-equal
(let ((default-directory
(concat
(file-remote-p tramp-test-temporary-file-directory) "/path")))
(expand-file-name ".." "./"))
(concat (file-remote-p tramp-test-temporary-file-directory) "/"))))
2013-11-05 15:46:57 +01:00
(ert-deftest tramp-test06-directory-file-name ()
"Check `directory-file-name'.
This checks also `file-name-as-directory', `file-name-directory',
`file-name-nondirectory' and `unhandled-file-name-directory'."
Stronger check for Tramp method * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-rclone.el (tramp-rclone-maybe-open-connection): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-maybe-open-connection): Use `tramp-get-connection-name'. * lisp/net/tramp-sh.el (tramp-sh-handle-make-symbolic-link): * lisp/net/tramp-smb.el (tramp-smb-handle-make-symbolic-link): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-handle-make-symbolic-link): Don't check remote TARGET. * lisp/net/tramp.el (tramp-dissect-file-name): Check for proper method. (tramp-file-name-for-operation): Take only 2nd argument into account for file name handler. (tramp-file-name-handler): Suppress checks for `file-remote-p'. * test/lisp/net/tramp-archive-tests.el (tramp-archive-test02-file-name-dissect): Suppress check for wrong method. * test/lisp/net/tramp-tests.el (tramp--test-instrument-test-case): Dump *all* Tramp buffers. (tramp-test02-file-name-dissect) (tramp-test02-file-name-dissect-simplified) (tramp-test02-file-name-dissect-separate): Check also wrong method. (tramp-test03-file-name-defaults): Check, that the respective Tramp package is loaded. (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name) (tramp-test06-directory-file-name, tramp-test44-auto-load): Suppress check for wrong method. (tramp-test30-make-process): Remove instrumentation code. (tramp-test31-interrupt-process, tramp-test36-vc-registered): Guarantee that connection is established prior starting process.
2019-06-04 12:51:45 +02:00
;; Suppress method name check.
(let ((tramp-methods (cons '("method") tramp-methods)))
(should
(string-equal
(directory-file-name "/method:host:/path/to/file")
"/method:host:/path/to/file"))
(should
(string-equal
(directory-file-name "/method:host:/path/to/file/")
"/method:host:/path/to/file"))
(should
(string-equal
(directory-file-name "/method:host:/path/to/file//")
"/method:host:/path/to/file"))
(should
(string-equal
(file-name-as-directory "/method:host:/path/to/file")
"/method:host:/path/to/file/"))
(should
(string-equal
(file-name-as-directory "/method:host:/path/to/file/")
"/method:host:/path/to/file/"))
(should
(string-equal
(file-name-directory "/method:host:/path/to/file")
"/method:host:/path/to/"))
(should
(string-equal
(file-name-directory "/method:host:/path/to/file/")
"/method:host:/path/to/file/"))
(should
(string-equal (file-name-directory "/method:host:file") "/method:host:"))
(should
(string-equal
(file-name-directory "/method:host:path/") "/method:host:path/"))
(should
(string-equal
(file-name-directory "/method:host:path/to") "/method:host:path/"))
(should
(string-equal
(file-name-nondirectory "/method:host:/path/to/file") "file"))
(should
(string-equal (file-name-nondirectory "/method:host:/path/to/file/") ""))
(should-not
(unhandled-file-name-directory "/method:host:/path/to/file")))
;; Bug#10085.
Add `make-nearby-temp-file' and `temporary-file-directory' * doc/lispref/files.texi (Unique File Names): Introduce `make-nearby-temp-file' and `temporary-file-directory'. (Magic File Names): Mention `make-nearby-temp-file' and `temporary-file-directory'. * etc/NEWS (provided): Mention `make-nearby-temp-file' and `temporary-file-directory'. * lisp/files.el (mounted-file-systems): New defcustom. (temporary-file-directory, make-nearby-temp-file): New defuns. (normal-backup-enable-predicate): Fix docstring. * lisp/net/tramp-adb.el (tramp-adb-file-name-handler-alist): * lisp/net/tramp-gvfs.el (tramp-gvfs-file-name-handler-alist): * lisp/net/tramp-sh.el (tramp-sh-file-name-handler-alist): * lisp/net/tramp-smb.el (tramp-smb-file-name-handler-alist): <make-nearby-temp-file, temporary-file-directory>: Add handler. * lisp/net/tramp.el (tramp-file-name-for-operation): Add `make-nearby-temp-file' and `temporary-file-directory'. (tramp-get-remote-tmpdir): Remove compatibility code. (tramp-handle-temporary-file-directory) (tramp-handle-make-nearby-temp-file): New defuns. * lisp/org/ob-core.el (org-babel-local-file-name): * lisp/progmodes/gud.el (gud-common-init): * lisp/vc/vc-hooks.el (vc-user-login-name): Use `file-remote-p'. * lisp/vc/vc-git.el (vc-git-checkin): Handle remote log message. * test/lisp/net/tramp-tests.el (tramp-test06-directory-file-name): Check `tramp--test-enabled'. (tramp-test18-file-attributes): Add tests for `file-ownership-preserved-p'. (tramp-test27-start-file-process, tramp-test28-shell-command): Reduce timeouts in `accept-process-output'. (tramp-test--shell-command-to-string-asynchronously): Add timeout. (tramp-test29-environment-variables): Remove additional sleep calls. (tramp-test32-make-nearby-temp-file): New test. (tramp--test-special-characters, tramp--test-utf8): Adapt docstring. (tramp-test33-special-characters) (tramp-test33-special-characters-with-stat) (tramp-test33-special-characters-with-perl) (tramp-test33-special-characters-with-ls, tramp-test34-utf8) (tramp-test34-utf8-with-stat, tramp-test34-utf8-with-perl) (tramp-test34-utf8-with-ls) (tramp-test35-asynchronous-requests) (tramp-test36-recursive-load, tramp-test37-unload): Rename. (tramp--test-ftp-p): Simplify check. (tramp--test-sh-p): New defun. (tramp-test20-file-modes, tramp-test22-file-times) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command) (tramp-test29-environment-variables) (tramp-test30-vc-registered) (tramp-test33-special-characters-with-stat) (tramp-test33-special-characters-with-perl) (tramp-test33-special-characters-with-ls) (tramp-test34-utf8-with-stat, tramp-test34-utf8-with-perl) (tramp-test34-utf8-with-ls) (tramp-test35-asynchronous-requests): Use it.
2016-08-07 13:57:23 +02:00
(when (tramp--test-enabled) ;; Packages like tramp-gvfs.el might be disabled.
(dolist (n-e '(nil t))
;; We must clear `tramp-default-method'. On hydra, it is "ftp",
;; which ruins the tests.
(let ((non-essential n-e)
(tramp-default-method
(file-remote-p tramp-test-temporary-file-directory 'method)))
Require method in remote file name syntax * lisp/minibuffer.el (completion--nth-completion): Do not bind `non-essential'. * lisp/net/tramp-adb.el (tramp-adb-maybe-open-connection): * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-sh.el (tramp-maybe-open-connection): * lisp/net/tramp-smb.el (tramp-smb-maybe-open-connection): Do not call `tramp-check-proper-method-and-host'. * lisp/net/tramp-sh.el (tramp-ssh-controlmaster-options): Better traces. (tramp-maybe-open-connection): Do not use argument for ´tramp-completion-mode-p'. * lisp/net/tramp.el (tramp-default-method-marker): New defconst. (tramp-prefix-format, tramp-postfix-method-format) (tramp-prefix-ipv6-format, tramp-postfix-ipv6-format) (tramp-prefix-port-format, tramp-postfix-host-format) (tramp-file-name-regexp, tramp-completion-file-name-regexp): Use `eq' instead of `eqal'. (tramp-method-regexp, tramp-domain-regexp) (tramp-remote-file-name-spec-regexp) (tramp-file-name-regexp-unified) (tramp-completion-file-name-regexp-unified) (tramp-completion-file-name-regexp-separate): Adapt regexp. (tramp-completion-file-name-handler-alist) (tramp-run-real-handler): Autoload them. (tramp-find-method): Handle `tramp-default-method-marker'. (tramp-check-proper-method-and-host) (tramp-completion-run-real-handler): Remove them. (tramp-error-with-buffer, tramp-connectable-p): Do not use argument for ´tramp-completion-mode-p'. (tramp-find-foreign-file-name-handler): Remove COMPLETION argument. Do not apply heuristic for completion. (tramp-file-name-handler): Do not modify `non-essential'. (tramp-completion-file-name-handler): Change implementation. (tramp-autoload-file-name-handler) (tramp-completion-handle-file-name-all-completions): Call `tramp-run-real-handler'. (tramp-completion-mode-p): Do not autoload. Remove argument. Do not apply heuristic for completion. (tramp-completion-dissect-file-name): Simplify implementation. (tramp-handle-file-name-as-directory): Call `tramp-connectable-p'. * test/lisp/net/tramp-tests.el (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test03-file-name-defaults) (tramp-test06-directory-file-name): Adapt to the new syntax. (tramp-test11-copy-file, tramp-test12-rename-file) (tramp--test-check-files): Deactivate temporarily tests with quoted file names. (tramp-test16-directory-files, tramp-test17-insert-directory): Adapt tests. (tramp-test24-file-name-completion): Do not check for completion mode. (tramp-test31-make-auto-save-file-name): Deactivate temporarily two tests.
2017-03-13 18:05:59 +01:00
(dolist
(file
`(,(format
"/%s::"
(file-remote-p tramp-test-temporary-file-directory 'method))
,(format
"/-:%s:"
(file-remote-p tramp-test-temporary-file-directory 'host))))
(should (string-equal (directory-file-name file) file))
(should
(string-equal
(file-name-as-directory file)
(if (tramp-completion-mode-p)
file (concat file "./"))))
(should (string-equal (file-name-directory file) file))
(should (string-equal (file-name-nondirectory file) "")))))))
2013-11-05 15:46:57 +01:00
(ert-deftest tramp-test07-file-exists-p ()
"Check `file-exist-p', `write-region' and `delete-file'."
(skip-unless (tramp--test-enabled))
(dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(let ((tmp-name (tramp--test-make-temp-name nil quoted)))
(should-not (file-exists-p tmp-name))
(write-region "foo" nil tmp-name)
(should (file-exists-p tmp-name))
(delete-file tmp-name)
(should-not (file-exists-p tmp-name)))))
2013-11-05 15:46:57 +01:00
(ert-deftest tramp-test08-file-local-copy ()
"Check `file-local-copy'."
(skip-unless (tramp--test-enabled))
(dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(let ((tmp-name1 (tramp--test-make-temp-name nil quoted))
tmp-name2)
(unwind-protect
(progn
(write-region "foo" nil tmp-name1)
(should (setq tmp-name2 (file-local-copy tmp-name1)))
(with-temp-buffer
(insert-file-contents tmp-name2)
(should (string-equal (buffer-string) "foo")))
;; Check also that a file transfer with compression works.
(let ((default-directory tramp-test-temporary-file-directory)
(tramp-copy-size-limit 4)
(tramp-inline-compress-start-size 2))
(delete-file tmp-name2)
(should (setq tmp-name2 (file-local-copy tmp-name1))))
;; Error case.
(delete-file tmp-name1)
(delete-file tmp-name2)
(should-error
(setq tmp-name2 (file-local-copy tmp-name1))
:type tramp-file-missing))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; Cleanup.
(ignore-errors
(delete-file tmp-name1)
(delete-file tmp-name2))))))
2013-11-05 15:46:57 +01:00
(ert-deftest tramp-test09-insert-file-contents ()
"Check `insert-file-contents'."
(skip-unless (tramp--test-enabled))
(dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(let ((tmp-name (tramp--test-make-temp-name nil quoted)))
(unwind-protect
(with-temp-buffer
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(write-region "foo" nil tmp-name)
(insert-file-contents tmp-name)
(should (string-equal (buffer-string) "foo"))
(insert-file-contents tmp-name)
(should (string-equal (buffer-string) "foofoo"))
;; Insert partly.
(insert-file-contents tmp-name nil 1 3)
(should (string-equal (buffer-string) "oofoofoo"))
;; Replace.
(insert-file-contents tmp-name nil nil nil 'replace)
(should (string-equal (buffer-string) "foo"))
;; Error case.
(delete-file tmp-name)
(should-error
(insert-file-contents tmp-name)
:type tramp-file-missing))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; Cleanup.
(ignore-errors (delete-file tmp-name))))))
2013-11-05 15:46:57 +01:00
(ert-deftest tramp-test10-write-region ()
"Check `write-region'."
(skip-unless (tramp--test-enabled))
(dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
(let ((tmp-name (tramp--test-make-temp-name nil quoted)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(unwind-protect
(progn
;; Write buffer. Use absolute and relative file name.
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(with-temp-buffer
(insert "foo")
(write-region nil nil tmp-name))
(with-temp-buffer
(insert-file-contents tmp-name)
(should (string-equal (buffer-string) "foo")))
(delete-file tmp-name)
(with-temp-buffer
(insert "foo")
(should-not (file-exists-p tmp-name))
(let ((default-directory (file-name-directory tmp-name)))
(should-not (file-exists-p (file-name-nondirectory tmp-name)))
(write-region nil nil (file-name-nondirectory tmp-name))
(should (file-exists-p (file-name-nondirectory tmp-name))))
(should (file-exists-p tmp-name)))
(with-temp-buffer
(insert-file-contents tmp-name)
(should (string-equal (buffer-string) "foo")))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; Append.
(with-temp-buffer
(insert "bla")
(write-region nil nil tmp-name 'append))
(with-temp-buffer
(insert-file-contents tmp-name)
(should (string-equal (buffer-string) "foobla")))
(with-temp-buffer
(insert "baz")
(write-region nil nil tmp-name 3))
(with-temp-buffer
(insert-file-contents tmp-name)
(should (string-equal (buffer-string) "foobaz")))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; Write string.
(write-region "foo" nil tmp-name)
(with-temp-buffer
(insert-file-contents tmp-name)
(should (string-equal (buffer-string) "foo")))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; Write partly.
(with-temp-buffer
(insert "123456789")
(write-region 3 5 tmp-name))
(with-temp-buffer
(insert-file-contents tmp-name)
(should (string-equal (buffer-string) "34")))
;; Check message.
;; Macro `ert-with-message-capture' was introduced in Emacs 26.1.
(with-no-warnings (when (symbol-plist 'ert-with-message-capture)
(let ((tramp-message-show-message t))
(dolist (noninteractive '(nil t))
(dolist (visit '(nil t "string" no-message))
(ert-with-message-capture tramp--test-messages
(write-region "foo" nil tmp-name nil visit)
;; We must check the last line. There could be
;; other messages from the progress reporter.
(should
(string-match
(if (and (null noninteractive)
(or (eq visit t) (null visit) (stringp visit)))
(format "^Wrote %s\n\\'" tmp-name) "^\\'")
tramp--test-messages))))))))
;; Do not overwrite if excluded.
(cl-letf (((symbol-function 'y-or-n-p) (lambda (_prompt) t)))
(write-region "foo" nil tmp-name nil nil nil 'mustbenew))
;; `mustbenew' is passed to Tramp since Emacs 26.1.
(when (tramp--test-emacs26-p)
(should-error
(cl-letf (((symbol-function 'y-or-n-p) 'ignore))
(write-region "foo" nil tmp-name nil nil nil 'mustbenew))
:type 'file-already-exists)
(should-error
(write-region "foo" nil tmp-name nil nil nil 'excl)
:type 'file-already-exists)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; Cleanup.
(ignore-errors (delete-file tmp-name))))))
2013-11-05 15:46:57 +01:00
;; The following test is inspired by Bug#35497.
(ert-deftest tramp-test10-write-region-file-precious-flag ()
"Check that `file-precious-flag' is respected with Tramp in use."
(skip-unless (tramp--test-enabled))
(skip-unless (tramp--test-sh-p))
;; The bug is fixed in Emacs 27.1.
(skip-unless (tramp--test-emacs27-p))
(let* ((tmp-name (tramp--test-make-temp-name))
written-files
(advice (lambda (_start _end filename &rest _r)
(push filename written-files))))
(unwind-protect
(with-current-buffer (find-file-noselect tmp-name)
;; Write initial contents. Adapt `visited-file-modtime'
;; in order to suppress confirmation.
(insert "foo")
(write-region nil nil tmp-name)
(set-visited-file-modtime)
;; Run the test.
(advice-add 'write-region :before advice)
(setq-local file-precious-flag t)
(setq-local backup-inhibited t)
(insert "bar")
(should (null (save-buffer)))
(should-not (cl-member tmp-name written-files :test #'string=)))
;; Cleanup.
(ignore-errors (advice-remove 'write-region advice))
(ignore-errors (delete-file tmp-name)))))
2013-11-05 15:46:57 +01:00
(ert-deftest tramp-test11-copy-file ()
"Check `copy-file'."
(skip-unless (tramp--test-enabled))
;; `filename-non-special' has been fixed in Emacs 27.1, see Bug#29579.
(dolist (quoted (if (and (tramp--test-expensive-test) (tramp--test-emacs27-p))
'(nil t) '(nil)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(let ((tmp-name1 (tramp--test-make-temp-name nil quoted))
(tmp-name2 (tramp--test-make-temp-name nil quoted))
(tmp-name3 (tramp--test-make-temp-name 'local quoted)))
(dolist (source-target
`(;; Copy on remote side.
(,tmp-name1 . ,tmp-name2)
;; Copy from remote side to local side.
(,tmp-name1 . ,tmp-name3)
;; Copy from local side to remote side.
(,tmp-name3 . ,tmp-name1)))
(let ((source (car source-target))
(target (cdr source-target)))
;; Copy simple file.
(unwind-protect
(progn
(should-error
(copy-file source target)
:type tramp-file-missing)
(write-region "foo" nil source)
(should (file-exists-p source))
(copy-file source target)
(should (file-exists-p target))
(with-temp-buffer
(insert-file-contents target)
(should (string-equal (buffer-string) "foo")))
(when (tramp--test-expensive-test)
(should-error
(copy-file source target)
:type 'file-already-exists))
(copy-file source target 'ok))
;; Cleanup.
(ignore-errors (delete-file source))
(ignore-errors (delete-file target)))
;; Copy file to directory.
(unwind-protect
Add new Tramp connection method "owncloud" * doc/misc/tramp.texi (all): Use @acronym{GNOME} thoroughly. (Using GNOME Online Accounts based methods): Rename from "Using Google Drive". Add `owncloud'. (GVFS based methods): Add `owncloud'. * etc/NEWS: Add Tramp connection method "owncloud". * lisp/net/tramp-gvfs.el (tramp-gvfs-methods): Add "owncloud". Remove goa methods if not supported. (tramp-goa-methods, tramp-goa-service, tramp-goa-path) (tramp-goa-path-accounts, tramp-goa-interface-documents) (tramp-goa-interface-printers, tramp-goa-interface-files) (tramp-goa-interface-contacts, tramp-goa-interface-calendar) (tramp-goa-interface-oauth2based) (tramp-goa-interface-account, tramp-goa-identity-regexp) (tramp-goa-interface-mail, tramp-goa-interface-chat) (tramp-goa-interface-photos, tramp-goa-path-manager) (tramp-goa-interface-documents) (tramp-gvfs-owncloud-default-prefix) (tramp-gvfs-owncloud-default-prefix-regexp): New defconst. (tramp-goa-name): New defstruct. (tramp-gvfs-stringify-dbus-message): Handle all consp messages. (tramp-dbus-function, tramp-gvfs-get-remote-prefix) (tramp-get-goa-accounts): New defun. (with-tramp-dbus-call-method): Use it. (with-tramp-dbus-get-all-properties): New defmacro. (tramp-gvfs-url-file-name) (tramp-gvfs-handler-mounted-unmounted) (tramp-gvfs-connection-mounted-p, tramp-gvfs-mount-spec): Map between "owncloud" and "davs". (tramp-gvfs-maybe-open-connection): Set "vector" connection property. * test/lisp/net/tramp-tests.el (tramp-gvfs-handler-askquestion): Suppress run in tests. (tramp--test-owncloud-p): New defun. (tramp-test11-copy-file, tramp-test12-rename-file): Use it.
2018-01-05 21:04:39 +01:00
;; FIXME: This fails on my QNAP server, see
;; /share/Web/owncloud/data/owncloud.log
(unless (tramp--test-nextcloud-p)
(write-region "foo" nil source)
(should (file-exists-p source))
(make-directory target)
(should (file-directory-p target))
;; This has been changed in Emacs 26.1.
(when (and (tramp--test-expensive-test) (tramp--test-emacs26-p))
(should-error
(copy-file source target)
:type 'file-already-exists)
(should-error
(copy-file source target 'ok)
:type 'file-error))
(copy-file source (file-name-as-directory target))
(should
(file-exists-p
(expand-file-name (file-name-nondirectory source) target))))
;; Cleanup.
(ignore-errors (delete-file source))
(ignore-errors (delete-directory target 'recursive)))
;; Copy directory to existing directory.
(unwind-protect
Add new Tramp connection method "owncloud" * doc/misc/tramp.texi (all): Use @acronym{GNOME} thoroughly. (Using GNOME Online Accounts based methods): Rename from "Using Google Drive". Add `owncloud'. (GVFS based methods): Add `owncloud'. * etc/NEWS: Add Tramp connection method "owncloud". * lisp/net/tramp-gvfs.el (tramp-gvfs-methods): Add "owncloud". Remove goa methods if not supported. (tramp-goa-methods, tramp-goa-service, tramp-goa-path) (tramp-goa-path-accounts, tramp-goa-interface-documents) (tramp-goa-interface-printers, tramp-goa-interface-files) (tramp-goa-interface-contacts, tramp-goa-interface-calendar) (tramp-goa-interface-oauth2based) (tramp-goa-interface-account, tramp-goa-identity-regexp) (tramp-goa-interface-mail, tramp-goa-interface-chat) (tramp-goa-interface-photos, tramp-goa-path-manager) (tramp-goa-interface-documents) (tramp-gvfs-owncloud-default-prefix) (tramp-gvfs-owncloud-default-prefix-regexp): New defconst. (tramp-goa-name): New defstruct. (tramp-gvfs-stringify-dbus-message): Handle all consp messages. (tramp-dbus-function, tramp-gvfs-get-remote-prefix) (tramp-get-goa-accounts): New defun. (with-tramp-dbus-call-method): Use it. (with-tramp-dbus-get-all-properties): New defmacro. (tramp-gvfs-url-file-name) (tramp-gvfs-handler-mounted-unmounted) (tramp-gvfs-connection-mounted-p, tramp-gvfs-mount-spec): Map between "owncloud" and "davs". (tramp-gvfs-maybe-open-connection): Set "vector" connection property. * test/lisp/net/tramp-tests.el (tramp-gvfs-handler-askquestion): Suppress run in tests. (tramp--test-owncloud-p): New defun. (tramp-test11-copy-file, tramp-test12-rename-file): Use it.
2018-01-05 21:04:39 +01:00
;; FIXME: This fails on my QNAP server, see
;; /share/Web/owncloud/data/owncloud.log
(unless (tramp--test-nextcloud-p)
(make-directory source)
(should (file-directory-p source))
(write-region "foo" nil (expand-file-name "foo" source))
(should (file-exists-p (expand-file-name "foo" source)))
(make-directory target)
(should (file-directory-p target))
;; Directory `target' exists already, so we must use
;; `file-name-as-directory'.
(copy-file source (file-name-as-directory target))
(should
(file-exists-p
(expand-file-name
(concat (file-name-nondirectory source) "/foo") target))))
;; Cleanup.
(ignore-errors (delete-directory source 'recursive))
(ignore-errors (delete-directory target 'recursive)))
;; Copy directory/file to non-existing directory.
(unwind-protect
Add new Tramp connection method "owncloud" * doc/misc/tramp.texi (all): Use @acronym{GNOME} thoroughly. (Using GNOME Online Accounts based methods): Rename from "Using Google Drive". Add `owncloud'. (GVFS based methods): Add `owncloud'. * etc/NEWS: Add Tramp connection method "owncloud". * lisp/net/tramp-gvfs.el (tramp-gvfs-methods): Add "owncloud". Remove goa methods if not supported. (tramp-goa-methods, tramp-goa-service, tramp-goa-path) (tramp-goa-path-accounts, tramp-goa-interface-documents) (tramp-goa-interface-printers, tramp-goa-interface-files) (tramp-goa-interface-contacts, tramp-goa-interface-calendar) (tramp-goa-interface-oauth2based) (tramp-goa-interface-account, tramp-goa-identity-regexp) (tramp-goa-interface-mail, tramp-goa-interface-chat) (tramp-goa-interface-photos, tramp-goa-path-manager) (tramp-goa-interface-documents) (tramp-gvfs-owncloud-default-prefix) (tramp-gvfs-owncloud-default-prefix-regexp): New defconst. (tramp-goa-name): New defstruct. (tramp-gvfs-stringify-dbus-message): Handle all consp messages. (tramp-dbus-function, tramp-gvfs-get-remote-prefix) (tramp-get-goa-accounts): New defun. (with-tramp-dbus-call-method): Use it. (with-tramp-dbus-get-all-properties): New defmacro. (tramp-gvfs-url-file-name) (tramp-gvfs-handler-mounted-unmounted) (tramp-gvfs-connection-mounted-p, tramp-gvfs-mount-spec): Map between "owncloud" and "davs". (tramp-gvfs-maybe-open-connection): Set "vector" connection property. * test/lisp/net/tramp-tests.el (tramp-gvfs-handler-askquestion): Suppress run in tests. (tramp--test-owncloud-p): New defun. (tramp-test11-copy-file, tramp-test12-rename-file): Use it.
2018-01-05 21:04:39 +01:00
;; FIXME: This fails on my QNAP server, see
;; /share/Web/owncloud/data/owncloud.log
(unless (tramp--test-nextcloud-p)
(make-directory source)
(should (file-directory-p source))
(write-region "foo" nil (expand-file-name "foo" source))
(should (file-exists-p (expand-file-name "foo" source)))
(make-directory target)
(should (file-directory-p target))
(copy-file
source
(expand-file-name (file-name-nondirectory source) target))
(should
(file-exists-p
(expand-file-name
(concat (file-name-nondirectory source) "/foo") target))))
;; Cleanup.
(ignore-errors (delete-directory source 'recursive))
(ignore-errors (delete-directory target 'recursive))))))))
2013-11-05 15:46:57 +01:00
(ert-deftest tramp-test12-rename-file ()
"Check `rename-file'."
(skip-unless (tramp--test-enabled))
;; `filename-non-special' has been fixed in Emacs 27.1, see Bug#29579.
(dolist (quoted (if (and (tramp--test-expensive-test) (tramp--test-emacs27-p))
'(nil t) '(nil)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(let ((tmp-name1 (tramp--test-make-temp-name nil quoted))
(tmp-name2 (tramp--test-make-temp-name nil quoted))
(tmp-name3 (tramp--test-make-temp-name 'local quoted)))
(dolist (source-target
`(;; Rename on remote side.
(,tmp-name1 . ,tmp-name2)
;; Rename from remote side to local side.
(,tmp-name1 . ,tmp-name3)
;; Rename from local side to remote side.
(,tmp-name3 . ,tmp-name1)))
(let ((source (car source-target))
(target (cdr source-target)))
;; Rename simple file.
(unwind-protect
(progn
(should-error
(rename-file source target)
:type tramp-file-missing)
(write-region "foo" nil source)
(should (file-exists-p source))
(rename-file source target)
(should-not (file-exists-p source))
(should (file-exists-p target))
(with-temp-buffer
(insert-file-contents target)
(should (string-equal (buffer-string) "foo")))
(write-region "foo" nil source)
(should (file-exists-p source))
(when (tramp--test-expensive-test)
(should-error
(rename-file source target)
:type 'file-already-exists))
(rename-file source target 'ok)
(should-not (file-exists-p source)))
;; Cleanup.
(ignore-errors (delete-file source))
(ignore-errors (delete-file target)))
;; Rename file to directory.
(unwind-protect
(progn
(write-region "foo" nil source)
(should (file-exists-p source))
(make-directory target)
(should (file-directory-p target))
;; This has been changed in Emacs 26.1.
(when (and (tramp--test-expensive-test) (tramp--test-emacs26-p))
(should-error
(rename-file source target)
:type 'file-already-exists)
(should-error
(rename-file source target 'ok)
:type 'file-error))
(rename-file source (file-name-as-directory target))
(should-not (file-exists-p source))
(should
(file-exists-p
(expand-file-name (file-name-nondirectory source) target))))
;; Cleanup.
(ignore-errors (delete-file source))
(ignore-errors (delete-directory target 'recursive)))
;; Rename directory to existing directory.
(unwind-protect
Add new Tramp connection method "owncloud" * doc/misc/tramp.texi (all): Use @acronym{GNOME} thoroughly. (Using GNOME Online Accounts based methods): Rename from "Using Google Drive". Add `owncloud'. (GVFS based methods): Add `owncloud'. * etc/NEWS: Add Tramp connection method "owncloud". * lisp/net/tramp-gvfs.el (tramp-gvfs-methods): Add "owncloud". Remove goa methods if not supported. (tramp-goa-methods, tramp-goa-service, tramp-goa-path) (tramp-goa-path-accounts, tramp-goa-interface-documents) (tramp-goa-interface-printers, tramp-goa-interface-files) (tramp-goa-interface-contacts, tramp-goa-interface-calendar) (tramp-goa-interface-oauth2based) (tramp-goa-interface-account, tramp-goa-identity-regexp) (tramp-goa-interface-mail, tramp-goa-interface-chat) (tramp-goa-interface-photos, tramp-goa-path-manager) (tramp-goa-interface-documents) (tramp-gvfs-owncloud-default-prefix) (tramp-gvfs-owncloud-default-prefix-regexp): New defconst. (tramp-goa-name): New defstruct. (tramp-gvfs-stringify-dbus-message): Handle all consp messages. (tramp-dbus-function, tramp-gvfs-get-remote-prefix) (tramp-get-goa-accounts): New defun. (with-tramp-dbus-call-method): Use it. (with-tramp-dbus-get-all-properties): New defmacro. (tramp-gvfs-url-file-name) (tramp-gvfs-handler-mounted-unmounted) (tramp-gvfs-connection-mounted-p, tramp-gvfs-mount-spec): Map between "owncloud" and "davs". (tramp-gvfs-maybe-open-connection): Set "vector" connection property. * test/lisp/net/tramp-tests.el (tramp-gvfs-handler-askquestion): Suppress run in tests. (tramp--test-owncloud-p): New defun. (tramp-test11-copy-file, tramp-test12-rename-file): Use it.
2018-01-05 21:04:39 +01:00
;; FIXME: This fails on my QNAP server, see
;; /share/Web/owncloud/data/owncloud.log
(unless (tramp--test-nextcloud-p)
(make-directory source)
(should (file-directory-p source))
(write-region "foo" nil (expand-file-name "foo" source))
(should (file-exists-p (expand-file-name "foo" source)))
(make-directory target)
(should (file-directory-p target))
;; Directory `target' exists already, so we must use
;; `file-name-as-directory'.
(rename-file source (file-name-as-directory target))
(should-not (file-exists-p source))
(should
(file-exists-p
(expand-file-name
(concat (file-name-nondirectory source) "/foo") target))))
;; Cleanup.
(ignore-errors (delete-directory source 'recursive))
(ignore-errors (delete-directory target 'recursive)))
;; Rename directory/file to non-existing directory.
(unwind-protect
Add new Tramp connection method "owncloud" * doc/misc/tramp.texi (all): Use @acronym{GNOME} thoroughly. (Using GNOME Online Accounts based methods): Rename from "Using Google Drive". Add `owncloud'. (GVFS based methods): Add `owncloud'. * etc/NEWS: Add Tramp connection method "owncloud". * lisp/net/tramp-gvfs.el (tramp-gvfs-methods): Add "owncloud". Remove goa methods if not supported. (tramp-goa-methods, tramp-goa-service, tramp-goa-path) (tramp-goa-path-accounts, tramp-goa-interface-documents) (tramp-goa-interface-printers, tramp-goa-interface-files) (tramp-goa-interface-contacts, tramp-goa-interface-calendar) (tramp-goa-interface-oauth2based) (tramp-goa-interface-account, tramp-goa-identity-regexp) (tramp-goa-interface-mail, tramp-goa-interface-chat) (tramp-goa-interface-photos, tramp-goa-path-manager) (tramp-goa-interface-documents) (tramp-gvfs-owncloud-default-prefix) (tramp-gvfs-owncloud-default-prefix-regexp): New defconst. (tramp-goa-name): New defstruct. (tramp-gvfs-stringify-dbus-message): Handle all consp messages. (tramp-dbus-function, tramp-gvfs-get-remote-prefix) (tramp-get-goa-accounts): New defun. (with-tramp-dbus-call-method): Use it. (with-tramp-dbus-get-all-properties): New defmacro. (tramp-gvfs-url-file-name) (tramp-gvfs-handler-mounted-unmounted) (tramp-gvfs-connection-mounted-p, tramp-gvfs-mount-spec): Map between "owncloud" and "davs". (tramp-gvfs-maybe-open-connection): Set "vector" connection property. * test/lisp/net/tramp-tests.el (tramp-gvfs-handler-askquestion): Suppress run in tests. (tramp--test-owncloud-p): New defun. (tramp-test11-copy-file, tramp-test12-rename-file): Use it.
2018-01-05 21:04:39 +01:00
;; FIXME: This fails on my QNAP server, see
;; /share/Web/owncloud/data/owncloud.log
(unless (tramp--test-nextcloud-p)
(make-directory source)
(should (file-directory-p source))
(write-region "foo" nil (expand-file-name "foo" source))
(should (file-exists-p (expand-file-name "foo" source)))
(make-directory target)
(should (file-directory-p target))
(rename-file
source
(expand-file-name (file-name-nondirectory source) target))
(should-not (file-exists-p source))
(should
(file-exists-p
(expand-file-name
(concat (file-name-nondirectory source) "/foo") target))))
;; Cleanup.
(ignore-errors (delete-directory source 'recursive))
(ignore-errors (delete-directory target 'recursive))))))))
2013-11-05 15:46:57 +01:00
(ert-deftest tramp-test13-make-directory ()
"Check `make-directory'.
This tests also `file-directory-p' and `file-accessible-directory-p'."
(skip-unless (tramp--test-enabled))
(dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(let* ((tmp-name1 (tramp--test-make-temp-name nil quoted))
(tmp-name2 (expand-file-name "foo/bar" tmp-name1)))
(unwind-protect
(progn
(make-directory tmp-name1)
(should (file-directory-p tmp-name1))
(should (file-accessible-directory-p tmp-name1))
(should-error (make-directory tmp-name2) :type 'file-error)
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(make-directory tmp-name2 'parents)
(should (file-directory-p tmp-name2))
(should (file-accessible-directory-p tmp-name2))
;; If PARENTS is non-nil, `make-directory' shall not
;; signal an error when DIR exists already.
(make-directory tmp-name2 'parents))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; Cleanup.
(ignore-errors (delete-directory tmp-name1 'recursive))))))
2013-11-05 15:46:57 +01:00
(ert-deftest tramp-test14-delete-directory ()
"Check `delete-directory'."
(skip-unless (tramp--test-enabled))
(dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
(let* ((tmp-name1 (tramp--test-make-temp-name nil quoted))
(tmp-name2 (expand-file-name "foo" tmp-name1)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; Delete empty directory.
(make-directory tmp-name1)
(should (file-directory-p tmp-name1))
(delete-directory tmp-name1)
(should-not (file-directory-p tmp-name1))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; Delete non-empty directory.
(make-directory tmp-name1)
(should (file-directory-p tmp-name1))
(write-region "foo" nil (expand-file-name "bla" tmp-name1))
(should (file-exists-p (expand-file-name "bla" tmp-name1)))
(make-directory tmp-name2)
(should (file-directory-p tmp-name2))
(write-region "foo" nil (expand-file-name "bla" tmp-name2))
(should (file-exists-p (expand-file-name "bla" tmp-name2)))
(should-error (delete-directory tmp-name1) :type 'file-error)
(delete-directory tmp-name1 'recursive)
(should-not (file-directory-p tmp-name1)))))
2013-11-05 15:46:57 +01:00
(ert-deftest tramp-test15-copy-directory ()
"Check `copy-directory'."
(skip-unless (tramp--test-enabled))
(dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(let* ((tmp-name1 (tramp--test-make-temp-name nil quoted))
(tmp-name2 (tramp--test-make-temp-name nil quoted))
(tmp-name3 (expand-file-name
(file-name-nondirectory tmp-name1) tmp-name2))
(tmp-name4 (expand-file-name "foo" tmp-name1))
(tmp-name5 (expand-file-name "foo" tmp-name2))
(tmp-name6 (expand-file-name "foo" tmp-name3)))
;; Copy complete directory.
(unwind-protect
(progn
(should-error
(copy-directory tmp-name1 tmp-name2)
:type tramp-file-missing)
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; Copy empty directory.
(make-directory tmp-name1)
(write-region "foo" nil tmp-name4)
(should (file-directory-p tmp-name1))
(should (file-exists-p tmp-name4))
(copy-directory tmp-name1 tmp-name2)
(should (file-directory-p tmp-name2))
(should (file-exists-p tmp-name5))
;; Target directory does exist already.
;; This has been changed in Emacs 26.1.
(when (tramp--test-emacs26-p)
(should-error
(copy-directory tmp-name1 tmp-name2)
:type 'file-error))
(copy-directory tmp-name1 (file-name-as-directory tmp-name2))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(should (file-directory-p tmp-name3))
(should (file-exists-p tmp-name6)))
;; Cleanup.
(ignore-errors
(delete-directory tmp-name1 'recursive)
(delete-directory tmp-name2 'recursive)))
;; Copy directory contents.
(unwind-protect
(progn
;; Copy empty directory.
(make-directory tmp-name1)
(write-region "foo" nil tmp-name4)
(should (file-directory-p tmp-name1))
(should (file-exists-p tmp-name4))
(copy-directory tmp-name1 tmp-name2 nil 'parents 'contents)
(should (file-directory-p tmp-name2))
(should (file-exists-p tmp-name5))
;; Target directory does exist already.
(delete-file tmp-name5)
(should-not (file-exists-p tmp-name5))
(copy-directory
tmp-name1 (file-name-as-directory tmp-name2)
nil 'parents 'contents)
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(should (file-directory-p tmp-name2))
(should (file-exists-p tmp-name5))
(should-not (file-directory-p tmp-name3))
(should-not (file-exists-p tmp-name6)))
;; Cleanup.
(ignore-errors
(delete-directory tmp-name1 'recursive)
(delete-directory tmp-name2 'recursive))))))
2013-11-05 15:46:57 +01:00
(ert-deftest tramp-test16-directory-files ()
"Check `directory-files'."
(skip-unless (tramp--test-enabled))
(dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
(let* ((tmp-name1 (tramp--test-make-temp-name nil quoted))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(tmp-name2 (expand-file-name "bla" tmp-name1))
(tmp-name3 (expand-file-name "foo" tmp-name1)))
(unwind-protect
(progn
(should-error
(directory-files tmp-name1)
:type tramp-file-missing)
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(make-directory tmp-name1)
(write-region "foo" nil tmp-name2)
(write-region "bla" nil tmp-name3)
(should (file-directory-p tmp-name1))
(should (file-exists-p tmp-name2))
(should (file-exists-p tmp-name3))
(should (equal (directory-files tmp-name1) '("." ".." "bla" "foo")))
(should (equal (directory-files tmp-name1 'full)
`(,(concat tmp-name1 "/.")
,(concat tmp-name1 "/..")
,tmp-name2 ,tmp-name3)))
(should (equal (directory-files
tmp-name1 nil directory-files-no-dot-files-regexp)
'("bla" "foo")))
(should (equal (directory-files
tmp-name1 'full directory-files-no-dot-files-regexp)
`(,tmp-name2 ,tmp-name3))))
;; Cleanup.
(ignore-errors (delete-directory tmp-name1 'recursive))))))
2013-11-05 15:46:57 +01:00
;; This is not a file name handler test. But Tramp needed to apply an
;; advice for older Emacs versions, so we check that this has been fixed.
(ert-deftest tramp-test16-file-expand-wildcards ()
"Check `file-expand-wildcards'."
(skip-unless (tramp--test-enabled))
(dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
(let* ((tmp-name1 (tramp--test-make-temp-name nil quoted))
(tmp-name2 (expand-file-name "foo" tmp-name1))
(tmp-name3 (expand-file-name "bar" tmp-name1))
(tmp-name4 (expand-file-name "baz" tmp-name1))
(default-directory tmp-name1))
(unwind-protect
(progn
(make-directory tmp-name1)
(write-region "foo" nil tmp-name2)
(write-region "bar" nil tmp-name3)
(write-region "baz" nil tmp-name4)
(should (file-directory-p tmp-name1))
(should (file-exists-p tmp-name2))
(should (file-exists-p tmp-name3))
(should (file-exists-p tmp-name4))
;; `sort' works destructive.
(should
(equal (file-expand-wildcards "*")
(sort (copy-sequence '("foo" "bar" "baz")) 'string<)))
(should
(equal (file-expand-wildcards "ba?")
(sort (copy-sequence '("bar" "baz")) 'string<)))
(should
(equal (file-expand-wildcards "ba[rz]")
(sort (copy-sequence '("bar" "baz")) 'string<)))
(should
(equal
(file-expand-wildcards "*" 'full)
(sort
(copy-sequence `(,tmp-name2 ,tmp-name3 ,tmp-name4)) 'string<)))
(should
(equal
(file-expand-wildcards "ba?" 'full)
(sort (copy-sequence `(,tmp-name3 ,tmp-name4)) 'string<)))
(should
(equal
(file-expand-wildcards "ba[rz]" 'full)
(sort (copy-sequence `(,tmp-name3 ,tmp-name4)) 'string<)))
(should
(equal
(file-expand-wildcards (concat tmp-name1 "/" "*"))
(sort
(copy-sequence `(,tmp-name2 ,tmp-name3 ,tmp-name4)) 'string<)))
(should
(equal
(file-expand-wildcards (concat tmp-name1 "/" "ba?"))
(sort (copy-sequence `(,tmp-name3 ,tmp-name4)) 'string<)))
(should
(equal
(file-expand-wildcards (concat tmp-name1 "/" "ba[rz]"))
(sort (copy-sequence `(,tmp-name3 ,tmp-name4)) 'string<))))
;; Cleanup.
(ignore-errors
(delete-directory tmp-name1 'recursive))))))
2013-11-05 15:46:57 +01:00
(ert-deftest tramp-test17-insert-directory ()
"Check `insert-directory'."
(skip-unless (tramp--test-enabled))
(dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
Require method in remote file name syntax * lisp/minibuffer.el (completion--nth-completion): Do not bind `non-essential'. * lisp/net/tramp-adb.el (tramp-adb-maybe-open-connection): * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-sh.el (tramp-maybe-open-connection): * lisp/net/tramp-smb.el (tramp-smb-maybe-open-connection): Do not call `tramp-check-proper-method-and-host'. * lisp/net/tramp-sh.el (tramp-ssh-controlmaster-options): Better traces. (tramp-maybe-open-connection): Do not use argument for ´tramp-completion-mode-p'. * lisp/net/tramp.el (tramp-default-method-marker): New defconst. (tramp-prefix-format, tramp-postfix-method-format) (tramp-prefix-ipv6-format, tramp-postfix-ipv6-format) (tramp-prefix-port-format, tramp-postfix-host-format) (tramp-file-name-regexp, tramp-completion-file-name-regexp): Use `eq' instead of `eqal'. (tramp-method-regexp, tramp-domain-regexp) (tramp-remote-file-name-spec-regexp) (tramp-file-name-regexp-unified) (tramp-completion-file-name-regexp-unified) (tramp-completion-file-name-regexp-separate): Adapt regexp. (tramp-completion-file-name-handler-alist) (tramp-run-real-handler): Autoload them. (tramp-find-method): Handle `tramp-default-method-marker'. (tramp-check-proper-method-and-host) (tramp-completion-run-real-handler): Remove them. (tramp-error-with-buffer, tramp-connectable-p): Do not use argument for ´tramp-completion-mode-p'. (tramp-find-foreign-file-name-handler): Remove COMPLETION argument. Do not apply heuristic for completion. (tramp-file-name-handler): Do not modify `non-essential'. (tramp-completion-file-name-handler): Change implementation. (tramp-autoload-file-name-handler) (tramp-completion-handle-file-name-all-completions): Call `tramp-run-real-handler'. (tramp-completion-mode-p): Do not autoload. Remove argument. Do not apply heuristic for completion. (tramp-completion-dissect-file-name): Simplify implementation. (tramp-handle-file-name-as-directory): Call `tramp-connectable-p'. * test/lisp/net/tramp-tests.el (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test03-file-name-defaults) (tramp-test06-directory-file-name): Adapt to the new syntax. (tramp-test11-copy-file, tramp-test12-rename-file) (tramp--test-check-files): Deactivate temporarily tests with quoted file names. (tramp-test16-directory-files, tramp-test17-insert-directory): Adapt tests. (tramp-test24-file-name-completion): Do not check for completion mode. (tramp-test31-make-auto-save-file-name): Deactivate temporarily two tests.
2017-03-13 18:05:59 +01:00
(let* ((tmp-name1
(expand-file-name (tramp--test-make-temp-name nil quoted)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(tmp-name2 (expand-file-name "foo" tmp-name1))
;; We test for the summary line. Keyword "total" could be localized.
(process-environment
(append '("LANG=C" "LANGUAGE=C" "LC_ALL=C") process-environment)))
(unwind-protect
(progn
(make-directory tmp-name1)
(write-region "foo" nil tmp-name2)
(should (file-directory-p tmp-name1))
(should (file-exists-p tmp-name2))
(with-temp-buffer
(insert-directory tmp-name1 nil)
(goto-char (point-min))
(should (looking-at-p (regexp-quote tmp-name1))))
;; This has been fixed in Emacs 26.1. See Bug#29423.
(when (tramp--test-emacs26-p)
(with-temp-buffer
(insert-directory (file-name-as-directory tmp-name1) nil)
(goto-char (point-min))
(should
(looking-at-p
(regexp-quote (file-name-as-directory tmp-name1))))))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(with-temp-buffer
(insert-directory tmp-name1 "-al")
(goto-char (point-min))
(should
(looking-at-p (format "^.+ %s$" (regexp-quote tmp-name1)))))
(with-temp-buffer
(insert-directory (file-name-as-directory tmp-name1) "-al")
(goto-char (point-min))
(should
(looking-at-p (format "^.+ %s/$" (regexp-quote tmp-name1)))))
(with-temp-buffer
(insert-directory
(file-name-as-directory tmp-name1) "-al" nil 'full-directory-p)
(goto-char (point-min))
(should
(looking-at-p
(concat
;; There might be a summary line.
"\\(total.+[[:digit:]]+ ?[kKMGTPEZY]?i?B?\n\\)?"
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; We don't know in which order ".", ".." and "foo" appear.
(format
"\\(.+ %s\\( ->.+\\)?\n\\)\\{%d\\}"
(regexp-opt (directory-files tmp-name1))
(length (directory-files tmp-name1)))))))
;; Check error case. We do not check for the error type,
;; because ls-lisp returns `file-error', and native Tramp
;; returns `file-missing'.
(delete-directory tmp-name1 'recursive)
(with-temp-buffer
(should-error
(insert-directory tmp-name1 nil)
:type tramp-file-missing)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; Cleanup.
(ignore-errors (delete-directory tmp-name1 'recursive))))))
2013-11-05 15:46:57 +01:00
(ert-deftest tramp-test17-dired-with-wildcards ()
"Check `dired' with wildcards."
(skip-unless (tramp--test-enabled))
(skip-unless (tramp--test-sh-p))
(skip-unless (not (tramp--test-rsync-p)))
;; Since Emacs 26.1.
(skip-unless (fboundp 'insert-directory-wildcard-in-dir-p))
(dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
(let* ((tmp-name1
(expand-file-name (tramp--test-make-temp-name nil quoted)))
(tmp-name2
(expand-file-name (tramp--test-make-temp-name nil quoted)))
(tmp-name3 (expand-file-name "foo" tmp-name1))
(tmp-name4 (expand-file-name "bar" tmp-name2))
(tramp-test-temporary-file-directory
(funcall
(if quoted #'tramp-compat-file-name-quote #'identity)
tramp-test-temporary-file-directory))
buffer)
(unwind-protect
(progn
(make-directory tmp-name1)
(write-region "foo" nil tmp-name3)
(should (file-directory-p tmp-name1))
(should (file-exists-p tmp-name3))
(make-directory tmp-name2)
(write-region "foo" nil tmp-name4)
(should (file-directory-p tmp-name2))
(should (file-exists-p tmp-name4))
;; Check for expanded directory names.
(with-current-buffer
(setq buffer
(dired-noselect
(expand-file-name
"tramp-test*" tramp-test-temporary-file-directory)))
(goto-char (point-min))
(should
(re-search-forward
(regexp-quote
(file-relative-name
tmp-name1 tramp-test-temporary-file-directory))))
(goto-char (point-min))
(should
(re-search-forward
(regexp-quote
(file-relative-name
tmp-name2 tramp-test-temporary-file-directory)))))
(kill-buffer buffer)
;; Check for expanded directory and file names.
(with-current-buffer
(setq buffer
(dired-noselect
(expand-file-name
"tramp-test*/*" tramp-test-temporary-file-directory)))
(goto-char (point-min))
(should
(re-search-forward
(regexp-quote
(file-relative-name
tmp-name3 tramp-test-temporary-file-directory))))
(goto-char (point-min))
(should
(re-search-forward
(regexp-quote
(file-relative-name
tmp-name4
tramp-test-temporary-file-directory)))))
(kill-buffer buffer)
;; Check for special characters.
(setq tmp-name3 (expand-file-name "*?" tmp-name1))
(setq tmp-name4 (expand-file-name "[a-z0-9]" tmp-name2))
(write-region "foo" nil tmp-name3)
(should (file-exists-p tmp-name3))
(write-region "foo" nil tmp-name4)
(should (file-exists-p tmp-name4))
(with-current-buffer
(setq buffer
(dired-noselect
(expand-file-name
"tramp-test*/*" tramp-test-temporary-file-directory)))
(goto-char (point-min))
(should
(re-search-forward
(regexp-quote
(file-relative-name
tmp-name3 tramp-test-temporary-file-directory))))
(goto-char (point-min))
(should
(re-search-forward
(regexp-quote
(file-relative-name
tmp-name4
tramp-test-temporary-file-directory)))))
(kill-buffer buffer))
;; Cleanup.
(ignore-errors (kill-buffer buffer))
(ignore-errors (delete-directory tmp-name1 'recursive))
(ignore-errors (delete-directory tmp-name2 'recursive))))))
;; Method "smb" supports `make-symbolic-link' only if the remote host
;; has CIFS capabilities. tramp-adb.el, tramp-gvfs.el and
;; tramp-rclone.el do not support symbolic links at all.
(defmacro tramp--test-ignore-make-symbolic-link-error (&rest body)
"Run BODY, ignoring \"make-symbolic-link not supported\" file error."
(declare (indent defun) (debug (body)))
`(condition-case err
(progn ,@body)
(file-error
(unless (string-equal (error-message-string err)
"make-symbolic-link not supported")
(signal (car err) (cdr err))))))
2013-11-05 15:46:57 +01:00
(ert-deftest tramp-test18-file-attributes ()
"Check `file-attributes'.
This tests also `access-file', `file-readable-p',
`file-regular-p' and `file-ownership-preserved-p'."
2013-11-05 15:46:57 +01:00
(skip-unless (tramp--test-enabled))
(dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; We must use `file-truename' for the temporary directory,
;; because it could be located on a symlinked directory. This
;; would let the test fail.
(let* ((tramp-test-temporary-file-directory
(file-truename tramp-test-temporary-file-directory))
(tmp-name1 (tramp--test-make-temp-name nil quoted))
(tmp-name2 (tramp--test-make-temp-name nil quoted))
;; File name with "//".
(tmp-name3
(format
"%s%s"
(file-remote-p tmp-name1)
(replace-regexp-in-string
"/" "//" (file-remote-p tmp-name1 'localname))))
attr)
(unwind-protect
(progn
(should-error
(access-file tmp-name1 "error")
:type tramp-file-missing)
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; `file-ownership-preserved-p' should return t for
;; non-existing files. It is implemented only in tramp-sh.el.
(when (tramp--test-sh-p)
(should (file-ownership-preserved-p tmp-name1 'group)))
(write-region "foo" nil tmp-name1)
(should (file-exists-p tmp-name1))
(should (file-readable-p tmp-name1))
(should (file-regular-p tmp-name1))
(should-not (access-file tmp-name1 "error"))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(when (tramp--test-sh-p)
(should (file-ownership-preserved-p tmp-name1 'group)))
;; We do not test inodes and device numbers.
(setq attr (file-attributes tmp-name1))
(should (consp attr))
(should (null (tramp-compat-file-attribute-type attr)))
(should (numberp (tramp-compat-file-attribute-link-number attr)))
(should (numberp (tramp-compat-file-attribute-user-id attr)))
(should (numberp (tramp-compat-file-attribute-group-id attr)))
(should
(stringp
(current-time-string
(tramp-compat-file-attribute-access-time attr))))
(should
(stringp
(current-time-string
(tramp-compat-file-attribute-modification-time attr))))
(should
(stringp
(current-time-string
(tramp-compat-file-attribute-status-change-time attr))))
(should (numberp (tramp-compat-file-attribute-size attr)))
(should (stringp (tramp-compat-file-attribute-modes attr)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(setq attr (file-attributes tmp-name1 'string))
(should (stringp (tramp-compat-file-attribute-user-id attr)))
(should (stringp (tramp-compat-file-attribute-group-id attr)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(tramp--test-ignore-make-symbolic-link-error
(should-error
(access-file tmp-name2 "error")
:type tramp-file-missing)
(when (tramp--test-sh-p)
(should (file-ownership-preserved-p tmp-name2 'group)))
(make-symbolic-link tmp-name1 tmp-name2)
(should (file-exists-p tmp-name2))
(should (file-symlink-p tmp-name2))
(should-not (access-file tmp-name2 "error"))
(when (tramp--test-sh-p)
(should (file-ownership-preserved-p tmp-name2 'group)))
(setq attr (file-attributes tmp-name2))
(should
(string-equal
(funcall
(if quoted #'tramp-compat-file-name-quote #'identity)
(tramp-compat-file-attribute-type attr))
(file-remote-p (file-truename tmp-name1) 'localname)))
(delete-file tmp-name2))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; Check, that "//" in symlinks are handled properly.
(with-temp-buffer
(let ((default-directory tramp-test-temporary-file-directory))
(shell-command
(format
"ln -s %s %s"
(tramp-file-name-localname
(tramp-dissect-file-name tmp-name3))
(tramp-file-name-localname
(tramp-dissect-file-name tmp-name2)))
t)))
(when (file-symlink-p tmp-name2)
(setq attr (file-attributes tmp-name2))
(should
(string-equal
(tramp-compat-file-attribute-type attr)
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(tramp-file-name-localname
(tramp-dissect-file-name tmp-name3))))
(delete-file tmp-name2))
(when (tramp--test-sh-p)
(should (file-ownership-preserved-p tmp-name1 'group)))
(delete-file tmp-name1)
(make-directory tmp-name1)
(should (file-exists-p tmp-name1))
(should (file-readable-p tmp-name1))
(should-not (file-regular-p tmp-name1))
(should-not (access-file tmp-name1 ""))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(when (tramp--test-sh-p)
(should (file-ownership-preserved-p tmp-name1 'group)))
(setq attr (file-attributes tmp-name1))
(should (eq (tramp-compat-file-attribute-type attr) t)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; Cleanup.
(ignore-errors (delete-directory tmp-name1))
(ignore-errors (delete-file tmp-name1))
(ignore-errors (delete-file tmp-name2))))))
2013-11-05 15:46:57 +01:00
(defvar tramp--test-start-time nil
"Keep the start time of the current test, a float number.")
(defsubst tramp--test-file-attributes-equal-p (attr1 attr2)
"Check, whether file attributes ATTR1 and ATTR2 are equal.
They might differ only in time attributes or directory size."
(let ((attr1 (copy-sequence attr1))
(attr2 (copy-sequence attr2))
(start-time (- tramp--test-start-time 10)))
;; Link number. For directories, it includes the number of
;; subdirectories. Set it to 1.
(when (eq (tramp-compat-file-attribute-type attr1) t)
(setcar (nthcdr 1 attr1) 1))
(when (eq (tramp-compat-file-attribute-type attr2) t)
(setcar (nthcdr 1 attr2) 1))
;; Access time.
(setcar (nthcdr 4 attr1) tramp-time-dont-know)
(setcar (nthcdr 4 attr2) tramp-time-dont-know)
;; Modification time. If any of the time values is "don't know",
;; we cannot compare, and we normalize the time stamps. If the
;; time value is newer than the test start time, normalize it,
;; because due to caching the time stamps could differ slightly (a
;; few seconds). We use a test start time minus 10 seconds, in
;; order to compensate a possible timestamp resolution higher than
;; a second on the remote machine.
(when (or (tramp-compat-time-equal-p
(tramp-compat-file-attribute-modification-time attr1)
tramp-time-dont-know)
(tramp-compat-time-equal-p
(tramp-compat-file-attribute-modification-time attr2)
tramp-time-dont-know))
(setcar (nthcdr 5 attr1) tramp-time-dont-know)
(setcar (nthcdr 5 attr2) tramp-time-dont-know))
(when (< start-time
(float-time (tramp-compat-file-attribute-modification-time attr1)))
(setcar (nthcdr 5 attr1) tramp-time-dont-know))
(when (< start-time
(float-time (tramp-compat-file-attribute-modification-time attr2)))
(setcar (nthcdr 5 attr2) tramp-time-dont-know))
;; Status change time. Dito.
(when (or (tramp-compat-time-equal-p
(tramp-compat-file-attribute-status-change-time attr1)
tramp-time-dont-know)
(tramp-compat-time-equal-p
(tramp-compat-file-attribute-status-change-time attr2)
tramp-time-dont-know))
(setcar (nthcdr 6 attr1) tramp-time-dont-know)
(setcar (nthcdr 6 attr2) tramp-time-dont-know))
(when
(< start-time
(float-time
(tramp-compat-file-attribute-status-change-time attr1)))
(setcar (nthcdr 6 attr1) tramp-time-dont-know))
(when
(< start-time
(float-time (tramp-compat-file-attribute-status-change-time attr2)))
(setcar (nthcdr 6 attr2) tramp-time-dont-know))
;; Size. Set it to 0 for directories, because it might have
;; changed. For example the upper directory "../".
(when (eq (tramp-compat-file-attribute-type attr1) t)
(setcar (nthcdr 7 attr1) 0))
(when (eq (tramp-compat-file-attribute-type attr2) t)
(setcar (nthcdr 7 attr2) 0))
;; The check.
(unless (equal attr1 attr2) (tramp--test-message "%S\n%S" attr1 attr2))
(equal attr1 attr2)))
;; This isn't 100% correct, but better than no explainer at all.
(put #'tramp--test-file-attributes-equal-p 'ert-explainer #'ert--explain-equal)
2013-11-05 15:46:57 +01:00
(ert-deftest tramp-test19-directory-files-and-attributes ()
"Check `directory-files-and-attributes'."
(skip-unless (tramp--test-enabled))
(dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; `directory-files-and-attributes' contains also values for
;; "../". Ensure that this doesn't change during tests, for
;; example due to handling temporary files.
(let* ((tmp-name1 (tramp--test-make-temp-name nil quoted))
(tmp-name2 (expand-file-name "bla" tmp-name1))
attr)
(unwind-protect
(progn
(should-error
(directory-files-and-attributes tmp-name1)
:type tramp-file-missing)
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(make-directory tmp-name1)
(should (file-directory-p tmp-name1))
(setq tramp--test-start-time
(float-time
(tramp-compat-file-attribute-modification-time
(file-attributes tmp-name1))))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(make-directory tmp-name2)
(should (file-directory-p tmp-name2))
(write-region "foo" nil (expand-file-name "foo" tmp-name2))
(write-region "bar" nil (expand-file-name "bar" tmp-name2))
(write-region "boz" nil (expand-file-name "boz" tmp-name2))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(setq attr (directory-files-and-attributes tmp-name2))
(should (consp attr))
(dolist (elt attr)
(should
(tramp--test-file-attributes-equal-p
(file-attributes (expand-file-name (car elt) tmp-name2))
(cdr elt))))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(setq attr (directory-files-and-attributes tmp-name2 'full))
(should (consp attr))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(dolist (elt attr)
(should
(tramp--test-file-attributes-equal-p
(file-attributes (car elt)) (cdr elt))))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(setq attr (directory-files-and-attributes tmp-name2 nil "^b"))
(should (equal (mapcar #'car attr) '("bar" "boz"))))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; Cleanup.
(ignore-errors (delete-directory tmp-name1 'recursive))))))
2013-11-05 15:46:57 +01:00
(ert-deftest tramp-test20-file-modes ()
"Check `file-modes'.
This tests also `file-executable-p', `file-writable-p' and `set-file-modes'."
(skip-unless (tramp--test-enabled))
(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)))))
(dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(let ((tmp-name (tramp--test-make-temp-name nil quoted)))
(unwind-protect
(progn
(write-region "foo" nil tmp-name)
(should (file-exists-p tmp-name))
(set-file-modes tmp-name #o777)
(should (= (file-modes tmp-name) #o777))
(should (file-executable-p tmp-name))
(should (file-writable-p tmp-name))
(set-file-modes tmp-name #o444)
(should (= (file-modes tmp-name) #o444))
(should-not (file-executable-p tmp-name))
;; A file is always writable for user "root".
(unless (zerop (tramp-compat-file-attribute-user-id
(file-attributes tmp-name)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(should-not (file-writable-p tmp-name))))
;; Cleanup.
(ignore-errors (delete-file tmp-name))))))
2013-11-05 15:46:57 +01:00
;; Method "smb" could run into "NT_STATUS_REVISION_MISMATCH" error.
(defmacro tramp--test-ignore-add-name-to-file-error (&rest body)
"Run BODY, ignoring \"error with add-name-to-file\" file error."
(declare (indent defun) (debug (body)))
`(condition-case err
(progn ,@body)
(file-error
(unless (string-match "^error with add-name-to-file"
(error-message-string err))
(signal (car err) (cdr err))))))
2013-11-05 15:46:57 +01:00
(ert-deftest tramp-test21-file-links ()
"Check `file-symlink-p'.
This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
(skip-unless (tramp--test-enabled))
;; The semantics have changed heavily in Emacs 26.1. We cannot test
;; older Emacsen, therefore.
(skip-unless (tramp--test-emacs26-p))
(dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; We must use `file-truename' for the temporary directory,
;; because it could be located on a symlinked directory. This
;; would let the test fail.
(let* ((tramp-test-temporary-file-directory
(file-truename tramp-test-temporary-file-directory))
(tmp-name1 (tramp--test-make-temp-name nil quoted))
(tmp-name2 (tramp--test-make-temp-name nil quoted))
(tmp-name3 (tramp--test-make-temp-name 'local quoted))
(tmp-name4 (tramp--test-make-temp-name nil quoted))
(tmp-name5
(expand-file-name (file-name-nondirectory tmp-name1) tmp-name4))
(tmp-name6 (tramp--test-make-temp-name nil quoted)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; Check `make-symbolic-link'.
(unwind-protect
(tramp--test-ignore-make-symbolic-link-error
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(write-region "foo" nil tmp-name1)
(should (file-exists-p tmp-name1))
(make-symbolic-link tmp-name1 tmp-name2)
(should
(string-equal
(funcall
(if quoted #'tramp-compat-file-name-unquote #'identity)
(file-remote-p tmp-name1 'localname))
(file-symlink-p tmp-name2)))
(when (tramp--test-expensive-test)
(should-error
(make-symbolic-link tmp-name1 tmp-name2)
:type 'file-already-exists))
(when (tramp--test-expensive-test)
;; A number means interactive case.
(cl-letf (((symbol-function 'yes-or-no-p) #'ignore))
(should-error
(make-symbolic-link tmp-name1 tmp-name2 0)
:type 'file-already-exists)))
(cl-letf (((symbol-function 'yes-or-no-p) (lambda (_prompt) t)))
(make-symbolic-link tmp-name1 tmp-name2 0)
(should
(string-equal
(funcall
(if quoted #'tramp-compat-file-name-unquote #'identity)
(file-remote-p tmp-name1 'localname))
(file-symlink-p tmp-name2))))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(make-symbolic-link tmp-name1 tmp-name2 'ok-if-already-exists)
(should
(string-equal
(funcall
(if quoted #'tramp-compat-file-name-unquote #'identity)
(file-remote-p tmp-name1 'localname))
(file-symlink-p tmp-name2)))
;; If we use the local part of `tmp-name1', it shall still work.
(make-symbolic-link
(file-remote-p tmp-name1 'localname)
tmp-name2 'ok-if-already-exists)
(should
(string-equal
(funcall
(if quoted #'tramp-compat-file-name-unquote #'identity)
(file-remote-p tmp-name1 'localname))
(file-symlink-p tmp-name2)))
;; `tmp-name3' is a local file name. Therefore, the link
;; target remains unchanged, even if quoted.
;; `make-symbolic-link' might not be permitted on w32 systems.
(unless (tramp--test-windows-nt)
(make-symbolic-link tmp-name1 tmp-name3)
(should
(string-equal tmp-name1 (file-symlink-p tmp-name3))))
;; Check directory as newname.
(make-directory tmp-name4)
(when (tramp--test-expensive-test)
(should-error
(make-symbolic-link tmp-name1 tmp-name4)
:type 'file-already-exists))
(make-symbolic-link tmp-name1 (file-name-as-directory tmp-name4))
(should
(string-equal
(funcall
(if quoted #'tramp-compat-file-name-unquote #'identity)
(file-remote-p tmp-name1 'localname))
(file-symlink-p tmp-name5)))
;; Check, that files in symlinked directories still work.
(make-symbolic-link tmp-name4 tmp-name6)
(write-region "foo" nil (expand-file-name "foo" tmp-name6))
(delete-file (expand-file-name "foo" tmp-name6))
(should-not (file-exists-p (expand-file-name "foo" tmp-name4)))
(should-not (file-exists-p (expand-file-name "foo" tmp-name6))))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; Cleanup.
(ignore-errors (delete-file tmp-name1))
(ignore-errors (delete-file tmp-name2))
(ignore-errors (delete-file tmp-name3))
(ignore-errors (delete-file tmp-name5))
(ignore-errors (delete-file tmp-name6))
(ignore-errors (delete-directory tmp-name4 'recursive)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; Check `add-name-to-file'.
(unwind-protect
(when (tramp--test-expensive-test)
(tramp--test-ignore-add-name-to-file-error
(write-region "foo" nil tmp-name1)
(should (file-exists-p tmp-name1))
(add-name-to-file tmp-name1 tmp-name2)
(should (file-regular-p tmp-name2))
(should-error
(add-name-to-file tmp-name1 tmp-name2)
:type 'file-already-exists)
;; A number means interactive case.
(cl-letf (((symbol-function 'yes-or-no-p) #'ignore))
(should-error
(add-name-to-file tmp-name1 tmp-name2 0)
:type 'file-already-exists))
(cl-letf (((symbol-function 'yes-or-no-p) (lambda (_prompt) t)))
(add-name-to-file tmp-name1 tmp-name2 0)
(should (file-regular-p tmp-name2)))
(add-name-to-file tmp-name1 tmp-name2 'ok-if-already-exists)
(should-not (file-symlink-p tmp-name2))
(should (file-regular-p tmp-name2))
;; `tmp-name3' is a local file name.
(should-error
(add-name-to-file tmp-name1 tmp-name3)
:type 'file-error)
;; Check directory as newname.
(make-directory tmp-name4)
(should-error
(add-name-to-file tmp-name1 tmp-name4)
:type 'file-already-exists)
(add-name-to-file tmp-name1 (file-name-as-directory tmp-name4))
(should
(file-regular-p
(expand-file-name
(file-name-nondirectory tmp-name1) tmp-name4)))))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; Cleanup.
(ignore-errors
(delete-file tmp-name1)
(delete-file tmp-name2)
(delete-directory tmp-name4 'recursive)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; Check `file-truename'.
(unwind-protect
(tramp--test-ignore-make-symbolic-link-error
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(write-region "foo" nil tmp-name1)
(should (file-exists-p tmp-name1))
(should (string-equal tmp-name1 (file-truename tmp-name1)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(make-symbolic-link tmp-name1 tmp-name2)
(should (file-symlink-p tmp-name2))
(should-not (string-equal tmp-name2 (file-truename tmp-name2)))
(should
(string-equal (file-truename tmp-name1) (file-truename tmp-name2)))
(should (file-equal-p tmp-name1 tmp-name2))
;; Check relative symlink file name.
(delete-file tmp-name2)
(let ((default-directory tramp-test-temporary-file-directory))
(make-symbolic-link (file-name-nondirectory tmp-name1) tmp-name2))
(should (file-symlink-p tmp-name2))
(should-not (string-equal tmp-name2 (file-truename tmp-name2)))
(should
(string-equal (file-truename tmp-name1) (file-truename tmp-name2)))
(should (file-equal-p tmp-name1 tmp-name2))
;; Symbolic links could look like a remote file name.
;; They must be quoted then.
(delete-file tmp-name2)
(make-symbolic-link
(funcall
(if quoted #'tramp-compat-file-name-unquote #'identity)
"/penguin:motd:")
tmp-name2)
(should (file-symlink-p tmp-name2))
(should
(string-equal
(file-truename tmp-name2)
(tramp-compat-file-name-quote
(concat (file-remote-p tmp-name2) "/penguin:motd:"))))
;; `tmp-name3' is a local file name.
;; `make-symbolic-link' might not be permitted on w32 systems.
(unless (tramp--test-windows-nt)
(make-symbolic-link tmp-name1 tmp-name3)
(should (file-symlink-p tmp-name3))
(should-not (string-equal tmp-name3 (file-truename tmp-name3)))
;; `file-truename' returns a quoted file name for `tmp-name3'.
;; We must unquote it.
(should
(string-equal
Extend file-name-non-special * lisp/files.el (insert-file-contents-literally): Bind `inhibit-file-name-handlers' the default way. (file-name-non-special): Rework, mainly for operations with two file name arguments. (file-name-unquote-non-special): New defsubst. (file-name-unquote): Use it. * test/lisp/files-tests.el (files-test-bug-18141): Skip if needed. (files-tests--with-temp-non-special): Add docstring. Delete also `non-special-name' if the file/directory exists. (files-tests--special-file-name-extension) (files-tests--special-file-name-regexp): New defconst. (files-tests--special-file-name-handler, files-tests--new-name): New defuns. (files-tests--with-temp-non-special-and-file-name-handler): New macro. (files-tests-file-name-non-special-access-file) (files-tests-file-name-non-special-add-name-to-file) (files-tests-file-name-non-special-byte-compiler-base-file-name) (files-tests-file-name-non-special-copy-directory) (files-tests-file-name-non-special-copy-file) (files-tests-file-name-non-special-delete-directory) (files-tests-file-name-non-special-delete-file) (files-tests-file-name-non-special-diff-latest-backup-file) (files-tests-file-name-non-special-directory-file-name) (files-tests-file-name-non-special-directory-files) (files-tests-file-name-non-special-directory-files-and-attributes) (files-tests-file-name-non-special-dired-compress-handler) (files-tests-file-name-non-special-dired-uncache) (files-tests-file-name-non-special-expand-file-name) (files-tests-file-name-non-special-file-accessible-directory-p) (files-tests-file-name-non-special-file-acl) (files-tests-file-name-non-special-file-attributes) (files-tests-file-name-non-special-file-directory-p) (files-tests-file-name-non-special-file-equal-p) (files-tests-file-name-non-special-file-executable-p) (files-tests-file-name-non-special-file-exists-p) (files-tests-file-name-non-special-file-in-directory-p) (files-tests-file-name-non-special-file-local-copy) (files-tests-file-name-non-special-file-modes) (files-tests-file-name-non-special-file-name-all-completions) (files-tests-file-name-non-special-file-name-as-directory) (files-tests-file-name-non-special-file-name-case-insensitive-p) (files-tests-file-name-non-special-file-name-completion) (files-tests-file-name-non-special-file-name-directory) (files-tests-file-name-non-special-file-name-nondirectory) (files-tests-file-name-non-special-file-name-sans-versions) (files-tests-file-name-non-special-file-newer-than-file-p) (files-tests-file-name-non-special-notify-handlers) (files-tests-file-name-non-special-file-ownership-preserved-p) (files-tests-file-name-non-special-file-readable-p) (files-tests-file-name-non-special-file-regular-p) (files-tests-file-name-non-special-file-remote-p) (files-tests-file-name-non-special-file-selinux-context) (files-tests-file-name-non-special-file-symlink-p) (files-tests-file-name-non-special-file-truename) (files-tests-file-name-non-special-file-writable-p) (files-tests-file-name-non-special-find-backup-file-name) (files-tests-file-name-non-special-get-file-buffer) (files-tests-file-name-non-special-insert-directory) (files-tests-file-name-non-special-insert-file-contents) (files-tests-file-name-non-special-load) (files-tests-file-name-non-special-make-auto-save-file-name) (files-tests-file-name-non-special-make-directory) (files-tests-file-name-non-special-make-directory-internal) (files-tests-file-name-non-special-make-symbolic-link) (files-tests-file-name-non-special-rename-file) (files-tests-file-name-non-special-set-file-acl) (files-tests-file-name-non-special-set-file-modes) (files-tests-file-name-non-special-set-file-selinux-context) (files-tests-file-name-non-special-set-file-times) (files-tests-file-name-non-special-set-visited-file-modtime) (files-tests-file-name-non-special-shell-command) (files-tests-file-name-non-special-start-file-process) (files-tests-file-name-non-special-substitute-in-file-name) (files-tests-file-name-non-special-temporary-file-directory) (files-tests-file-name-non-special-unhandled-file-name-directory) (files-tests-file-name-non-special-vc-registered) (files-tests-file-name-non-special-write-region): Extends tests to quoted file names, which would require a file name handler if unquoted. (files-test-no-file-write-contents): Make test more robust. * test/lisp/net/tramp-tests.el (tramp-test21-file-links): Adapt test. (tramp--test-emacs25-p): New defun. (tramp-test34-vc-registered): Use it.
2018-06-03 14:30:41 +02:00
(file-truename tmp-name1)
(tramp-compat-file-name-unquote (file-truename tmp-name3))))))
;; Cleanup.
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(ignore-errors
(delete-file tmp-name1)
(delete-file tmp-name2)
(delete-file tmp-name3)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; Symbolic links could be nested.
(unwind-protect
(tramp--test-ignore-make-symbolic-link-error
(make-directory tmp-name1)
(should (file-directory-p tmp-name1))
(let* ((tramp-test-temporary-file-directory
(file-truename tmp-name1))
(tmp-name2 (tramp--test-make-temp-name nil quoted))
(tmp-name3 tmp-name2)
(number-nesting 15))
(dotimes (_ number-nesting)
(make-symbolic-link
tmp-name3
(setq tmp-name3 (tramp--test-make-temp-name nil quoted))))
(should
(string-equal
(file-truename tmp-name2)
(file-truename tmp-name3)))
(when (tramp--test-expensive-test)
(should-error
(with-temp-buffer (insert-file-contents tmp-name2))
:type tramp-file-missing))
(when (tramp--test-expensive-test)
(should-error
(with-temp-buffer (insert-file-contents tmp-name3))
:type tramp-file-missing))
;; `directory-files' does not show symlinks to
;; non-existing targets in the "smb" case. So we remove
;; the symlinks manually.
(while (stringp (setq tmp-name2 (file-symlink-p tmp-name3)))
(delete-file tmp-name3)
(setq tmp-name3 (concat (file-remote-p tmp-name3) tmp-name2)))))
;; Cleanup.
(ignore-errors
(delete-file tmp-name3)
(delete-directory tmp-name1 'recursive)))
;; Detect cyclic symbolic links.
(unwind-protect
(when (tramp--test-expensive-test)
(tramp--test-ignore-make-symbolic-link-error
(make-symbolic-link tmp-name2 tmp-name1)
(should (file-symlink-p tmp-name1))
(if (tramp-smb-file-name-p tramp-test-temporary-file-directory)
;; The symlink command of `smbclient' detects the
;; cycle already.
(should-error
(make-symbolic-link tmp-name1 tmp-name2)
:type 'file-error)
(make-symbolic-link tmp-name1 tmp-name2)
(should (file-symlink-p tmp-name2))
(should-error (file-truename tmp-name1) :type 'file-error))))
;; Cleanup.
(ignore-errors
(delete-file tmp-name1)
(delete-file tmp-name2)))
;; `file-truename' shall preserve trailing slash of directories.
(let* ((dir1
(directory-file-name
(funcall
(if quoted #'tramp-compat-file-name-quote #'identity)
tramp-test-temporary-file-directory)))
(dir2 (file-name-as-directory dir1)))
(should (string-equal (file-truename dir1) (expand-file-name dir1)))
(should (string-equal (file-truename dir2) (expand-file-name dir2)))))))
2013-11-05 15:46:57 +01:00
(ert-deftest tramp-test22-file-times ()
"Check `set-file-times' and `file-newer-than-file-p'."
(skip-unless (tramp--test-enabled))
(skip-unless
(or (tramp--test-adb-p) (tramp--test-gvfs-p)
(tramp--test-sh-p) (tramp--test-sudoedit-p)))
(dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(let ((tmp-name1 (tramp--test-make-temp-name nil quoted))
(tmp-name2 (tramp--test-make-temp-name nil quoted))
(tmp-name3 (tramp--test-make-temp-name nil quoted)))
(unwind-protect
(progn
(write-region "foo" nil tmp-name1)
(should (file-exists-p tmp-name1))
(should (consp (tramp-compat-file-attribute-modification-time
(file-attributes tmp-name1))))
;; Skip the test, if the remote handler is not able to set
;; the correct time.
(skip-unless (set-file-times tmp-name1 (seconds-to-time 1)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; Dumb remote shells without perl(1) or stat(1) are not
;; able to return the date correctly. They say "don't know".
(unless (tramp-compat-time-equal-p
(tramp-compat-file-attribute-modification-time
(file-attributes tmp-name1))
tramp-time-dont-know)
(should
(tramp-compat-time-equal-p
(tramp-compat-file-attribute-modification-time
(file-attributes tmp-name1))
(seconds-to-time 1)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(write-region "bla" nil tmp-name2)
(should (file-exists-p tmp-name2))
(should (file-newer-than-file-p tmp-name2 tmp-name1))
;; `tmp-name3' does not exist.
(should (file-newer-than-file-p tmp-name2 tmp-name3))
(should-not (file-newer-than-file-p tmp-name3 tmp-name1))))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; Cleanup.
(ignore-errors
(delete-file tmp-name1)
(delete-file tmp-name2))))))
2013-11-05 15:46:57 +01:00
(ert-deftest tramp-test23-visited-file-modtime ()
"Check `set-visited-file-modtime' and `verify-visited-file-modtime'."
(skip-unless (tramp--test-enabled))
(dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(let ((tmp-name (tramp--test-make-temp-name nil quoted)))
(unwind-protect
(progn
(write-region "foo" nil tmp-name)
(should (file-exists-p tmp-name))
(with-temp-buffer
(insert-file-contents tmp-name)
(should (verify-visited-file-modtime))
(set-visited-file-modtime (seconds-to-time 1))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(should (verify-visited-file-modtime))
(should (= 1 (float-time (visited-file-modtime))))
;; Checks with deleted file.
(delete-file tmp-name)
(dired-uncache tmp-name)
(should (verify-visited-file-modtime))
(set-visited-file-modtime (seconds-to-time 1))
(should (verify-visited-file-modtime))
(should (= 1 (float-time (visited-file-modtime))))))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; Cleanup.
(ignore-errors (delete-file tmp-name))))))
2013-11-05 15:46:57 +01:00
;; This test is inspired by Bug#29149.
(ert-deftest tramp-test24-file-acl ()
"Check that `file-acl' and `set-file-acl' work proper."
(skip-unless (tramp--test-enabled))
(skip-unless (file-acl tramp-test-temporary-file-directory))
;; `filename-non-special' has been fixed in Emacs 27.1, see Bug#29579.
(dolist (quoted (if (and (tramp--test-expensive-test) (tramp--test-emacs27-p))
'(nil t) '(nil)))
(let ((tmp-name1 (tramp--test-make-temp-name nil quoted))
(tmp-name2 (tramp--test-make-temp-name nil quoted))
(tmp-name3 (tramp--test-make-temp-name 'local quoted)))
;; Both files are remote.
(unwind-protect
(progn
;; Two files with same ACLs.
(write-region "foo" nil tmp-name1)
(should (file-exists-p tmp-name1))
(should (file-acl tmp-name1))
(copy-file tmp-name1 tmp-name2 nil nil nil 'preserve-permissions)
(should (file-acl tmp-name2))
(should (string-equal (file-acl tmp-name1) (file-acl tmp-name2)))
;; Different permissions mean different ACLs.
(when (not (tramp--test-windows-nt-or-smb-p))
(set-file-modes tmp-name1 #o777)
(set-file-modes tmp-name2 #o444)
(should-not
(string-equal (file-acl tmp-name1) (file-acl tmp-name2))))
;; Copy ACL. Not all remote handlers support it, so we test.
(when (set-file-acl tmp-name2 (file-acl tmp-name1))
(should (string-equal (file-acl tmp-name1) (file-acl tmp-name2))))
;; An invalid ACL does not harm.
(should-not (set-file-acl tmp-name2 "foo")))
;; Cleanup.
(ignore-errors (delete-file tmp-name1))
(ignore-errors (delete-file tmp-name2)))
;; Remote and local file.
(unwind-protect
(when (and (file-acl temporary-file-directory)
(not (tramp--test-windows-nt-or-smb-p)))
;; Two files with same ACLs.
(write-region "foo" nil tmp-name1)
(should (file-exists-p tmp-name1))
(should (file-acl tmp-name1))
(copy-file tmp-name1 tmp-name3 nil nil nil 'preserve-permissions)
(should (file-acl tmp-name3))
(should (string-equal (file-acl tmp-name1) (file-acl tmp-name3)))
;; Different permissions mean different ACLs.
(set-file-modes tmp-name1 #o777)
(set-file-modes tmp-name3 #o444)
(should-not
(string-equal (file-acl tmp-name1) (file-acl tmp-name3)))
;; Copy ACL. Since we don't know whether Emacs is built
;; with local ACL support, we must check it.
(when (set-file-acl tmp-name3 (file-acl tmp-name1))
(should (string-equal (file-acl tmp-name1) (file-acl tmp-name3))))
;; Two files with same ACLs.
(delete-file tmp-name1)
(copy-file tmp-name3 tmp-name1 nil nil nil 'preserve-permissions)
(should (file-acl tmp-name1))
(should (string-equal (file-acl tmp-name1) (file-acl tmp-name3)))
;; Different permissions mean different ACLs.
(set-file-modes tmp-name1 #o777)
(set-file-modes tmp-name3 #o444)
(should-not
(string-equal (file-acl tmp-name1) (file-acl tmp-name3)))
;; Copy ACL.
(set-file-acl tmp-name1 (file-acl tmp-name3))
(should (string-equal (file-acl tmp-name1) (file-acl tmp-name3))))
;; Cleanup.
(ignore-errors (delete-file tmp-name1))
(ignore-errors (delete-file tmp-name3))))))
(ert-deftest tramp-test25-file-selinux ()
"Check `file-selinux-context' and `set-file-selinux-context'."
(skip-unless (tramp--test-enabled))
(skip-unless
(not (equal (file-selinux-context tramp-test-temporary-file-directory)
'(nil nil nil nil))))
;; `filename-non-special' has been fixed in Emacs 27.1, see Bug#29579.
(dolist (quoted (if (and (tramp--test-expensive-test) (tramp--test-emacs27-p))
'(nil t) '(nil)))
(let ((tmp-name1 (tramp--test-make-temp-name nil quoted))
(tmp-name2 (tramp--test-make-temp-name nil quoted))
(tmp-name3 (tramp--test-make-temp-name 'local quoted)))
;; Both files are remote.
(unwind-protect
(progn
;; Two files with same SELinux context.
(write-region "foo" nil tmp-name1)
(should (file-exists-p tmp-name1))
(should (file-selinux-context tmp-name1))
(copy-file tmp-name1 tmp-name2)
(should (file-selinux-context tmp-name2))
(should
(equal
(file-selinux-context tmp-name1)
(file-selinux-context tmp-name2)))
;; Check different SELinux context. We cannot support
;; different ranges in this test; let's assume the most
;; likely one.
(let ((context (file-selinux-context tmp-name1)))
(when (and (string-equal (nth 3 context) "s0")
(setcar (nthcdr 3 context) "s0:c0")
(set-file-selinux-context tmp-name1 context))
(should-not
(equal
(file-selinux-context tmp-name1)
(file-selinux-context tmp-name2)))))
;; Copy SELinux context.
(should
(set-file-selinux-context
tmp-name2 (file-selinux-context tmp-name1)))
(should
(equal
(file-selinux-context tmp-name1)
(file-selinux-context tmp-name2)))
;; An invalid SELinux context does not harm.
(should-not (set-file-selinux-context tmp-name2 "foo")))
;; Cleanup.
(ignore-errors (delete-file tmp-name1))
(ignore-errors (delete-file tmp-name2)))
;; Remote and local file.
(unwind-protect
(when (and (not
(or (equal (file-selinux-context temporary-file-directory)
'(nil nil nil nil))
(tramp--test-windows-nt-or-smb-p)))
;; Both users shall use the same SELinux context.
(string-equal
(let ((default-directory temporary-file-directory))
(shell-command-to-string "id -Z"))
(let ((default-directory
tramp-test-temporary-file-directory))
(shell-command-to-string "id -Z"))))
;; Two files with same SELinux context.
(write-region "foo" nil tmp-name1)
(should (file-exists-p tmp-name1))
(should (file-selinux-context tmp-name1))
(copy-file tmp-name1 tmp-name3)
(should (file-selinux-context tmp-name3))
;; We cannot expect that copying over file system
;; boundaries keeps SELinux context. So we copy it
2017-11-16 00:00:31 -08:00
;; explicitly.
(should
(set-file-selinux-context
tmp-name3 (file-selinux-context tmp-name1)))
(should
(equal
(file-selinux-context tmp-name1)
(file-selinux-context tmp-name3)))
;; Check different SELinux context. We cannot support
;; different ranges in this test; let's assume the most
;; likely one.
(let ((context (file-selinux-context tmp-name1)))
(when (and (string-equal (nth 3 context) "s0")
(setcar (nthcdr 3 context) "s0:c0")
(set-file-selinux-context tmp-name1 context))
(should-not
(equal
(file-selinux-context tmp-name1)
(file-selinux-context tmp-name3)))))
;; Copy SELinux context.
(should
(set-file-selinux-context
tmp-name3 (file-selinux-context tmp-name1)))
(should
(equal
(file-selinux-context tmp-name1)
(file-selinux-context tmp-name3)))
;; Two files with same SELinux context.
(delete-file tmp-name1)
(copy-file tmp-name3 tmp-name1)
(should (file-selinux-context tmp-name1))
;; We cannot expect that copying over file system
;; boundaries keeps SELinux context. So we copy it
2017-11-16 00:00:31 -08:00
;; explicitly.
(should
(set-file-selinux-context
tmp-name1 (file-selinux-context tmp-name3)))
(should
(equal
(file-selinux-context tmp-name1)
(file-selinux-context tmp-name3)))
;; Check different SELinux context. We cannot support
;; different ranges in this test; let's assume the most
;; likely one.
(let ((context (file-selinux-context tmp-name3)))
(when (and (string-equal (nth 3 context) "s0")
(setcar (nthcdr 3 context) "s0:c0")
(set-file-selinux-context tmp-name3 context))
(should-not
(equal
(file-selinux-context tmp-name1)
(file-selinux-context tmp-name3)))))
;; Copy SELinux context.
(should
(set-file-selinux-context
tmp-name1 (file-selinux-context tmp-name3)))
(should
(equal
(file-selinux-context tmp-name1)
(file-selinux-context tmp-name3))))
;; Cleanup.
(ignore-errors (delete-file tmp-name1))
(ignore-errors (delete-file tmp-name3))))))
(ert-deftest tramp-test26-file-name-completion ()
2013-11-05 15:46:57 +01:00
"Check `file-name-completion' and `file-name-all-completions'."
(skip-unless (tramp--test-enabled))
;; Method and host name in completion mode. This kind of completion
;; does not work on MS Windows.
(when (not (memq system-type '(cygwin windows-nt)))
(let ((method (file-remote-p tramp-test-temporary-file-directory 'method))
(host (file-remote-p tramp-test-temporary-file-directory 'host))
(vec (tramp-dissect-file-name tramp-test-temporary-file-directory))
(orig-syntax tramp-syntax))
(when (and (stringp host) (string-match tramp-host-with-port-regexp host))
(setq host (match-string 1 host)))
(unwind-protect
(dolist
(syntax
(if (tramp--test-expensive-test)
(tramp-syntax-values) `(,orig-syntax)))
(tramp-change-syntax syntax)
;; This has cleaned up all connection data, which are used
;; for completion. We must refill the cache.
(tramp-set-connection-property vec "property" nil)
(let ;; This is needed for the `simplified' syntax.
((method-marker
Further optimization in Tramp's file name decomposition * lisp/net/tramp.el (tramp-syntax): Recompute all file name components. Call `custom-set-variables' after loading. (tramp-build-prefix-format, tramp-build-prefix-regexp) (tramp-build-method-regexp) (tramp-build-postfix-method-format) (tramp-build-postfix-method-regexp) (tramp-build-prefix-ipv6-format) (tramp-build-prefix-ipv6-regexp) (tramp-build-postfix-ipv6-format) (tramp-build-postfix-ipv6-regexp) (tramp-build-postfix-host-format) (tramp-build-postfix-host-regexp) (tramp-build-file-name-regexp) (tramp-build-completion-file-name-regexp): New defuns. (tramp-prefix-format, tramp-prefix-regexp) (tramp-method-regexp, tramp-postfix-method-format) (tramp-postfix-method-regexp, tramp-prefix-ipv6-format) (tramp-prefix-ipv6-regexp, tramp-postfix-ipv6-format) (tramp-postfix-ipv6-regexp, tramp-postfix-host-format) (tramp-postfix-host-regexp) (tramp-remote-file-name-spec-regexp) (tramp-file-name-structure, tramp-file-name-regexp) (tramp-completion-file-name-regexp): Convert defuns into defvars. (tramp-prefix-regexp-alist) (tramp-postfix-method-regexp-alist) (tramp-prefix-ipv6-regexp-alist) (tramp-postfix-ipv6-regexp-alist) (tramp-postfix-host-regexp-alist) (tramp-remote-file-name-spec-regexp-alist): Remove. (tramp-build-remote-file-name-spec-regexp) (tramp-build-file-name-structure): Simplify. (tramp-completion-file-name-regexp-alist): New defconst. (tramp-tramp-file-p, tramp-dissect-file-name) (tramp-make-tramp-file-name) (tramp-completion-make-tramp-file-name) (tramp-rfn-eshadow-update-overlay-regexp) (tramp-register-file-name-handlers) (tramp-completion-handle-file-name-all-completions) (tramp-completion-dissect-file-name, tramp-clear-passwd): * lisp/net/tramp-ftp.el (tramp-ftp-file-name-handler): * lisp/net/tramp-sh.el (tramp-sh-handle-vc-registered) (tramp-compute-multi-hops): Use variables but functions for file name components. * test/lisp/net/tramp-tests.el (tramp-test24-file-name-completion): Use variables but functions for file name components.
2017-09-11 17:12:32 +02:00
(if (zerop (length tramp-method-regexp))
"" tramp-default-method-marker))
;; This is needed for the `separate' syntax.
Further optimization in Tramp's file name decomposition * lisp/net/tramp.el (tramp-syntax): Recompute all file name components. Call `custom-set-variables' after loading. (tramp-build-prefix-format, tramp-build-prefix-regexp) (tramp-build-method-regexp) (tramp-build-postfix-method-format) (tramp-build-postfix-method-regexp) (tramp-build-prefix-ipv6-format) (tramp-build-prefix-ipv6-regexp) (tramp-build-postfix-ipv6-format) (tramp-build-postfix-ipv6-regexp) (tramp-build-postfix-host-format) (tramp-build-postfix-host-regexp) (tramp-build-file-name-regexp) (tramp-build-completion-file-name-regexp): New defuns. (tramp-prefix-format, tramp-prefix-regexp) (tramp-method-regexp, tramp-postfix-method-format) (tramp-postfix-method-regexp, tramp-prefix-ipv6-format) (tramp-prefix-ipv6-regexp, tramp-postfix-ipv6-format) (tramp-postfix-ipv6-regexp, tramp-postfix-host-format) (tramp-postfix-host-regexp) (tramp-remote-file-name-spec-regexp) (tramp-file-name-structure, tramp-file-name-regexp) (tramp-completion-file-name-regexp): Convert defuns into defvars. (tramp-prefix-regexp-alist) (tramp-postfix-method-regexp-alist) (tramp-prefix-ipv6-regexp-alist) (tramp-postfix-ipv6-regexp-alist) (tramp-postfix-host-regexp-alist) (tramp-remote-file-name-spec-regexp-alist): Remove. (tramp-build-remote-file-name-spec-regexp) (tramp-build-file-name-structure): Simplify. (tramp-completion-file-name-regexp-alist): New defconst. (tramp-tramp-file-p, tramp-dissect-file-name) (tramp-make-tramp-file-name) (tramp-completion-make-tramp-file-name) (tramp-rfn-eshadow-update-overlay-regexp) (tramp-register-file-name-handlers) (tramp-completion-handle-file-name-all-completions) (tramp-completion-dissect-file-name, tramp-clear-passwd): * lisp/net/tramp-ftp.el (tramp-ftp-file-name-handler): * lisp/net/tramp-sh.el (tramp-sh-handle-vc-registered) (tramp-compute-multi-hops): Use variables but functions for file name components. * test/lisp/net/tramp-tests.el (tramp-test24-file-name-completion): Use variables but functions for file name components.
2017-09-11 17:12:32 +02:00
(prefix-format (substring tramp-prefix-format 1)))
;; Complete method name.
(unless (or (zerop (length method))
Further optimization in Tramp's file name decomposition * lisp/net/tramp.el (tramp-syntax): Recompute all file name components. Call `custom-set-variables' after loading. (tramp-build-prefix-format, tramp-build-prefix-regexp) (tramp-build-method-regexp) (tramp-build-postfix-method-format) (tramp-build-postfix-method-regexp) (tramp-build-prefix-ipv6-format) (tramp-build-prefix-ipv6-regexp) (tramp-build-postfix-ipv6-format) (tramp-build-postfix-ipv6-regexp) (tramp-build-postfix-host-format) (tramp-build-postfix-host-regexp) (tramp-build-file-name-regexp) (tramp-build-completion-file-name-regexp): New defuns. (tramp-prefix-format, tramp-prefix-regexp) (tramp-method-regexp, tramp-postfix-method-format) (tramp-postfix-method-regexp, tramp-prefix-ipv6-format) (tramp-prefix-ipv6-regexp, tramp-postfix-ipv6-format) (tramp-postfix-ipv6-regexp, tramp-postfix-host-format) (tramp-postfix-host-regexp) (tramp-remote-file-name-spec-regexp) (tramp-file-name-structure, tramp-file-name-regexp) (tramp-completion-file-name-regexp): Convert defuns into defvars. (tramp-prefix-regexp-alist) (tramp-postfix-method-regexp-alist) (tramp-prefix-ipv6-regexp-alist) (tramp-postfix-ipv6-regexp-alist) (tramp-postfix-host-regexp-alist) (tramp-remote-file-name-spec-regexp-alist): Remove. (tramp-build-remote-file-name-spec-regexp) (tramp-build-file-name-structure): Simplify. (tramp-completion-file-name-regexp-alist): New defconst. (tramp-tramp-file-p, tramp-dissect-file-name) (tramp-make-tramp-file-name) (tramp-completion-make-tramp-file-name) (tramp-rfn-eshadow-update-overlay-regexp) (tramp-register-file-name-handlers) (tramp-completion-handle-file-name-all-completions) (tramp-completion-dissect-file-name, tramp-clear-passwd): * lisp/net/tramp-ftp.el (tramp-ftp-file-name-handler): * lisp/net/tramp-sh.el (tramp-sh-handle-vc-registered) (tramp-compute-multi-hops): Use variables but functions for file name components. * test/lisp/net/tramp-tests.el (tramp-test24-file-name-completion): Use variables but functions for file name components.
2017-09-11 17:12:32 +02:00
(zerop (length tramp-method-regexp)))
(should
(member
Further optimization in Tramp's file name decomposition * lisp/net/tramp.el (tramp-syntax): Recompute all file name components. Call `custom-set-variables' after loading. (tramp-build-prefix-format, tramp-build-prefix-regexp) (tramp-build-method-regexp) (tramp-build-postfix-method-format) (tramp-build-postfix-method-regexp) (tramp-build-prefix-ipv6-format) (tramp-build-prefix-ipv6-regexp) (tramp-build-postfix-ipv6-format) (tramp-build-postfix-ipv6-regexp) (tramp-build-postfix-host-format) (tramp-build-postfix-host-regexp) (tramp-build-file-name-regexp) (tramp-build-completion-file-name-regexp): New defuns. (tramp-prefix-format, tramp-prefix-regexp) (tramp-method-regexp, tramp-postfix-method-format) (tramp-postfix-method-regexp, tramp-prefix-ipv6-format) (tramp-prefix-ipv6-regexp, tramp-postfix-ipv6-format) (tramp-postfix-ipv6-regexp, tramp-postfix-host-format) (tramp-postfix-host-regexp) (tramp-remote-file-name-spec-regexp) (tramp-file-name-structure, tramp-file-name-regexp) (tramp-completion-file-name-regexp): Convert defuns into defvars. (tramp-prefix-regexp-alist) (tramp-postfix-method-regexp-alist) (tramp-prefix-ipv6-regexp-alist) (tramp-postfix-ipv6-regexp-alist) (tramp-postfix-host-regexp-alist) (tramp-remote-file-name-spec-regexp-alist): Remove. (tramp-build-remote-file-name-spec-regexp) (tramp-build-file-name-structure): Simplify. (tramp-completion-file-name-regexp-alist): New defconst. (tramp-tramp-file-p, tramp-dissect-file-name) (tramp-make-tramp-file-name) (tramp-completion-make-tramp-file-name) (tramp-rfn-eshadow-update-overlay-regexp) (tramp-register-file-name-handlers) (tramp-completion-handle-file-name-all-completions) (tramp-completion-dissect-file-name, tramp-clear-passwd): * lisp/net/tramp-ftp.el (tramp-ftp-file-name-handler): * lisp/net/tramp-sh.el (tramp-sh-handle-vc-registered) (tramp-compute-multi-hops): Use variables but functions for file name components. * test/lisp/net/tramp-tests.el (tramp-test24-file-name-completion): Use variables but functions for file name components.
2017-09-11 17:12:32 +02:00
(concat prefix-format method tramp-postfix-method-format)
(file-name-all-completions
(concat prefix-format (substring method 0 1)) "/"))))
;; Complete host name for default method. With gvfs
;; based methods, host name will be determined as
;; host.local, so we omit the test.
(let ((tramp-default-method (or method tramp-default-method)))
(unless (or (zerop (length host))
(tramp--test-gvfs-p tramp-default-method))
(should
(member
(concat
Further optimization in Tramp's file name decomposition * lisp/net/tramp.el (tramp-syntax): Recompute all file name components. Call `custom-set-variables' after loading. (tramp-build-prefix-format, tramp-build-prefix-regexp) (tramp-build-method-regexp) (tramp-build-postfix-method-format) (tramp-build-postfix-method-regexp) (tramp-build-prefix-ipv6-format) (tramp-build-prefix-ipv6-regexp) (tramp-build-postfix-ipv6-format) (tramp-build-postfix-ipv6-regexp) (tramp-build-postfix-host-format) (tramp-build-postfix-host-regexp) (tramp-build-file-name-regexp) (tramp-build-completion-file-name-regexp): New defuns. (tramp-prefix-format, tramp-prefix-regexp) (tramp-method-regexp, tramp-postfix-method-format) (tramp-postfix-method-regexp, tramp-prefix-ipv6-format) (tramp-prefix-ipv6-regexp, tramp-postfix-ipv6-format) (tramp-postfix-ipv6-regexp, tramp-postfix-host-format) (tramp-postfix-host-regexp) (tramp-remote-file-name-spec-regexp) (tramp-file-name-structure, tramp-file-name-regexp) (tramp-completion-file-name-regexp): Convert defuns into defvars. (tramp-prefix-regexp-alist) (tramp-postfix-method-regexp-alist) (tramp-prefix-ipv6-regexp-alist) (tramp-postfix-ipv6-regexp-alist) (tramp-postfix-host-regexp-alist) (tramp-remote-file-name-spec-regexp-alist): Remove. (tramp-build-remote-file-name-spec-regexp) (tramp-build-file-name-structure): Simplify. (tramp-completion-file-name-regexp-alist): New defconst. (tramp-tramp-file-p, tramp-dissect-file-name) (tramp-make-tramp-file-name) (tramp-completion-make-tramp-file-name) (tramp-rfn-eshadow-update-overlay-regexp) (tramp-register-file-name-handlers) (tramp-completion-handle-file-name-all-completions) (tramp-completion-dissect-file-name, tramp-clear-passwd): * lisp/net/tramp-ftp.el (tramp-ftp-file-name-handler): * lisp/net/tramp-sh.el (tramp-sh-handle-vc-registered) (tramp-compute-multi-hops): Use variables but functions for file name components. * test/lisp/net/tramp-tests.el (tramp-test24-file-name-completion): Use variables but functions for file name components.
2017-09-11 17:12:32 +02:00
prefix-format method-marker tramp-postfix-method-format
host tramp-postfix-host-format)
(file-name-all-completions
(concat
Further optimization in Tramp's file name decomposition * lisp/net/tramp.el (tramp-syntax): Recompute all file name components. Call `custom-set-variables' after loading. (tramp-build-prefix-format, tramp-build-prefix-regexp) (tramp-build-method-regexp) (tramp-build-postfix-method-format) (tramp-build-postfix-method-regexp) (tramp-build-prefix-ipv6-format) (tramp-build-prefix-ipv6-regexp) (tramp-build-postfix-ipv6-format) (tramp-build-postfix-ipv6-regexp) (tramp-build-postfix-host-format) (tramp-build-postfix-host-regexp) (tramp-build-file-name-regexp) (tramp-build-completion-file-name-regexp): New defuns. (tramp-prefix-format, tramp-prefix-regexp) (tramp-method-regexp, tramp-postfix-method-format) (tramp-postfix-method-regexp, tramp-prefix-ipv6-format) (tramp-prefix-ipv6-regexp, tramp-postfix-ipv6-format) (tramp-postfix-ipv6-regexp, tramp-postfix-host-format) (tramp-postfix-host-regexp) (tramp-remote-file-name-spec-regexp) (tramp-file-name-structure, tramp-file-name-regexp) (tramp-completion-file-name-regexp): Convert defuns into defvars. (tramp-prefix-regexp-alist) (tramp-postfix-method-regexp-alist) (tramp-prefix-ipv6-regexp-alist) (tramp-postfix-ipv6-regexp-alist) (tramp-postfix-host-regexp-alist) (tramp-remote-file-name-spec-regexp-alist): Remove. (tramp-build-remote-file-name-spec-regexp) (tramp-build-file-name-structure): Simplify. (tramp-completion-file-name-regexp-alist): New defconst. (tramp-tramp-file-p, tramp-dissect-file-name) (tramp-make-tramp-file-name) (tramp-completion-make-tramp-file-name) (tramp-rfn-eshadow-update-overlay-regexp) (tramp-register-file-name-handlers) (tramp-completion-handle-file-name-all-completions) (tramp-completion-dissect-file-name, tramp-clear-passwd): * lisp/net/tramp-ftp.el (tramp-ftp-file-name-handler): * lisp/net/tramp-sh.el (tramp-sh-handle-vc-registered) (tramp-compute-multi-hops): Use variables but functions for file name components. * test/lisp/net/tramp-tests.el (tramp-test24-file-name-completion): Use variables but functions for file name components.
2017-09-11 17:12:32 +02:00
prefix-format method-marker tramp-postfix-method-format
(substring host 0 1))
"/")))))
;; Complete host name.
(unless (or (zerop (length method))
Further optimization in Tramp's file name decomposition * lisp/net/tramp.el (tramp-syntax): Recompute all file name components. Call `custom-set-variables' after loading. (tramp-build-prefix-format, tramp-build-prefix-regexp) (tramp-build-method-regexp) (tramp-build-postfix-method-format) (tramp-build-postfix-method-regexp) (tramp-build-prefix-ipv6-format) (tramp-build-prefix-ipv6-regexp) (tramp-build-postfix-ipv6-format) (tramp-build-postfix-ipv6-regexp) (tramp-build-postfix-host-format) (tramp-build-postfix-host-regexp) (tramp-build-file-name-regexp) (tramp-build-completion-file-name-regexp): New defuns. (tramp-prefix-format, tramp-prefix-regexp) (tramp-method-regexp, tramp-postfix-method-format) (tramp-postfix-method-regexp, tramp-prefix-ipv6-format) (tramp-prefix-ipv6-regexp, tramp-postfix-ipv6-format) (tramp-postfix-ipv6-regexp, tramp-postfix-host-format) (tramp-postfix-host-regexp) (tramp-remote-file-name-spec-regexp) (tramp-file-name-structure, tramp-file-name-regexp) (tramp-completion-file-name-regexp): Convert defuns into defvars. (tramp-prefix-regexp-alist) (tramp-postfix-method-regexp-alist) (tramp-prefix-ipv6-regexp-alist) (tramp-postfix-ipv6-regexp-alist) (tramp-postfix-host-regexp-alist) (tramp-remote-file-name-spec-regexp-alist): Remove. (tramp-build-remote-file-name-spec-regexp) (tramp-build-file-name-structure): Simplify. (tramp-completion-file-name-regexp-alist): New defconst. (tramp-tramp-file-p, tramp-dissect-file-name) (tramp-make-tramp-file-name) (tramp-completion-make-tramp-file-name) (tramp-rfn-eshadow-update-overlay-regexp) (tramp-register-file-name-handlers) (tramp-completion-handle-file-name-all-completions) (tramp-completion-dissect-file-name, tramp-clear-passwd): * lisp/net/tramp-ftp.el (tramp-ftp-file-name-handler): * lisp/net/tramp-sh.el (tramp-sh-handle-vc-registered) (tramp-compute-multi-hops): Use variables but functions for file name components. * test/lisp/net/tramp-tests.el (tramp-test24-file-name-completion): Use variables but functions for file name components.
2017-09-11 17:12:32 +02:00
(zerop (length tramp-method-regexp))
(zerop (length host))
(tramp--test-gvfs-p method))
(should
(member
(concat
Further optimization in Tramp's file name decomposition * lisp/net/tramp.el (tramp-syntax): Recompute all file name components. Call `custom-set-variables' after loading. (tramp-build-prefix-format, tramp-build-prefix-regexp) (tramp-build-method-regexp) (tramp-build-postfix-method-format) (tramp-build-postfix-method-regexp) (tramp-build-prefix-ipv6-format) (tramp-build-prefix-ipv6-regexp) (tramp-build-postfix-ipv6-format) (tramp-build-postfix-ipv6-regexp) (tramp-build-postfix-host-format) (tramp-build-postfix-host-regexp) (tramp-build-file-name-regexp) (tramp-build-completion-file-name-regexp): New defuns. (tramp-prefix-format, tramp-prefix-regexp) (tramp-method-regexp, tramp-postfix-method-format) (tramp-postfix-method-regexp, tramp-prefix-ipv6-format) (tramp-prefix-ipv6-regexp, tramp-postfix-ipv6-format) (tramp-postfix-ipv6-regexp, tramp-postfix-host-format) (tramp-postfix-host-regexp) (tramp-remote-file-name-spec-regexp) (tramp-file-name-structure, tramp-file-name-regexp) (tramp-completion-file-name-regexp): Convert defuns into defvars. (tramp-prefix-regexp-alist) (tramp-postfix-method-regexp-alist) (tramp-prefix-ipv6-regexp-alist) (tramp-postfix-ipv6-regexp-alist) (tramp-postfix-host-regexp-alist) (tramp-remote-file-name-spec-regexp-alist): Remove. (tramp-build-remote-file-name-spec-regexp) (tramp-build-file-name-structure): Simplify. (tramp-completion-file-name-regexp-alist): New defconst. (tramp-tramp-file-p, tramp-dissect-file-name) (tramp-make-tramp-file-name) (tramp-completion-make-tramp-file-name) (tramp-rfn-eshadow-update-overlay-regexp) (tramp-register-file-name-handlers) (tramp-completion-handle-file-name-all-completions) (tramp-completion-dissect-file-name, tramp-clear-passwd): * lisp/net/tramp-ftp.el (tramp-ftp-file-name-handler): * lisp/net/tramp-sh.el (tramp-sh-handle-vc-registered) (tramp-compute-multi-hops): Use variables but functions for file name components. * test/lisp/net/tramp-tests.el (tramp-test24-file-name-completion): Use variables but functions for file name components.
2017-09-11 17:12:32 +02:00
prefix-format method tramp-postfix-method-format
host tramp-postfix-host-format)
(file-name-all-completions
Further optimization in Tramp's file name decomposition * lisp/net/tramp.el (tramp-syntax): Recompute all file name components. Call `custom-set-variables' after loading. (tramp-build-prefix-format, tramp-build-prefix-regexp) (tramp-build-method-regexp) (tramp-build-postfix-method-format) (tramp-build-postfix-method-regexp) (tramp-build-prefix-ipv6-format) (tramp-build-prefix-ipv6-regexp) (tramp-build-postfix-ipv6-format) (tramp-build-postfix-ipv6-regexp) (tramp-build-postfix-host-format) (tramp-build-postfix-host-regexp) (tramp-build-file-name-regexp) (tramp-build-completion-file-name-regexp): New defuns. (tramp-prefix-format, tramp-prefix-regexp) (tramp-method-regexp, tramp-postfix-method-format) (tramp-postfix-method-regexp, tramp-prefix-ipv6-format) (tramp-prefix-ipv6-regexp, tramp-postfix-ipv6-format) (tramp-postfix-ipv6-regexp, tramp-postfix-host-format) (tramp-postfix-host-regexp) (tramp-remote-file-name-spec-regexp) (tramp-file-name-structure, tramp-file-name-regexp) (tramp-completion-file-name-regexp): Convert defuns into defvars. (tramp-prefix-regexp-alist) (tramp-postfix-method-regexp-alist) (tramp-prefix-ipv6-regexp-alist) (tramp-postfix-ipv6-regexp-alist) (tramp-postfix-host-regexp-alist) (tramp-remote-file-name-spec-regexp-alist): Remove. (tramp-build-remote-file-name-spec-regexp) (tramp-build-file-name-structure): Simplify. (tramp-completion-file-name-regexp-alist): New defconst. (tramp-tramp-file-p, tramp-dissect-file-name) (tramp-make-tramp-file-name) (tramp-completion-make-tramp-file-name) (tramp-rfn-eshadow-update-overlay-regexp) (tramp-register-file-name-handlers) (tramp-completion-handle-file-name-all-completions) (tramp-completion-dissect-file-name, tramp-clear-passwd): * lisp/net/tramp-ftp.el (tramp-ftp-file-name-handler): * lisp/net/tramp-sh.el (tramp-sh-handle-vc-registered) (tramp-compute-multi-hops): Use variables but functions for file name components. * test/lisp/net/tramp-tests.el (tramp-test24-file-name-completion): Use variables but functions for file name components.
2017-09-11 17:12:32 +02:00
(concat prefix-format method tramp-postfix-method-format)
"/"))))))
;; Cleanup.
(tramp-change-syntax orig-syntax))))
(dolist (n-e '(nil t))
(dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(let ((non-essential n-e)
(tmp-name (tramp--test-make-temp-name nil quoted)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(unwind-protect
(progn
;; Local files.
(make-directory tmp-name)
(should (file-directory-p tmp-name))
(write-region "foo" nil (expand-file-name "foo" tmp-name))
(should (file-exists-p (expand-file-name "foo" tmp-name)))
(write-region "bar" nil (expand-file-name "bold" tmp-name))
(should (file-exists-p (expand-file-name "bold" tmp-name)))
(make-directory (expand-file-name "boz" tmp-name))
(should (file-directory-p (expand-file-name "boz" tmp-name)))
(should (equal (file-name-completion "fo" tmp-name) "foo"))
(should (equal (file-name-completion "foo" tmp-name) t))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(should (equal (file-name-completion "b" tmp-name) "bo"))
(should-not (file-name-completion "a" tmp-name))
(should
(equal
(file-name-completion "b" tmp-name #'file-directory-p) "boz/"))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(should
(equal (file-name-all-completions "fo" tmp-name) '("foo")))
(should
(equal
(sort (file-name-all-completions "b" tmp-name) #'string-lessp)
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
'("bold" "boz/")))
(should-not (file-name-all-completions "a" tmp-name))
;; `completion-regexp-list' restricts the completion to
;; files which match all expressions in this list.
(let ((completion-regexp-list
`(,directory-files-no-dot-files-regexp "b")))
(should
(equal (file-name-completion "" tmp-name) "bo"))
(should
(equal
(sort (file-name-all-completions "" tmp-name) #'string-lessp)
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
'("bold" "boz/"))))
;; `file-name-completion' ignores file names that end in
;; any string in `completion-ignored-extensions'.
(let ((completion-ignored-extensions '(".ext")))
(write-region "foo" nil (expand-file-name "foo.ext" tmp-name))
(should (file-exists-p (expand-file-name "foo.ext" tmp-name)))
(should (equal (file-name-completion "fo" tmp-name) "foo"))
(should (equal (file-name-completion "foo" tmp-name) t))
(should
(equal (file-name-completion "foo." tmp-name) "foo.ext"))
(should (equal (file-name-completion "foo.ext" tmp-name) t))
;; `file-name-all-completions' is not affected.
(should
(equal
(sort (file-name-all-completions "" tmp-name) #'string-lessp)
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
'("../" "./" "bold" "boz/" "foo" "foo.ext")))))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; Cleanup.
(ignore-errors (delete-directory tmp-name 'recursive)))))))
2013-11-05 15:46:57 +01:00
(ert-deftest tramp-test27-load ()
2013-11-05 15:46:57 +01:00
"Check `load'."
(skip-unless (tramp--test-enabled))
(dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(let ((tmp-name (tramp--test-make-temp-name nil quoted)))
(unwind-protect
(progn
(load tmp-name 'noerror 'nomessage)
(should-not (featurep 'tramp-test-load))
(write-region "(provide 'tramp-test-load)" nil tmp-name)
;; `load' in lread.c does not pass `must-suffix'. Why?
;;(should-error
;; (load tmp-name nil 'nomessage 'nosuffix 'must-suffix)
;; :type 'file-error)
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(load tmp-name nil 'nomessage 'nosuffix)
(should (featurep 'tramp-test-load)))
;; Cleanup.
(ignore-errors
(and (featurep 'tramp-test-load) (unload-feature 'tramp-test-load))
(delete-file tmp-name))))))
2013-11-05 15:46:57 +01:00
(ert-deftest tramp-test28-process-file ()
2013-11-05 15:46:57 +01:00
"Check `process-file'."
:tags '(:expensive-test)
2013-11-05 15:46:57 +01:00
(skip-unless (tramp--test-enabled))
Add `make-nearby-temp-file' and `temporary-file-directory' * doc/lispref/files.texi (Unique File Names): Introduce `make-nearby-temp-file' and `temporary-file-directory'. (Magic File Names): Mention `make-nearby-temp-file' and `temporary-file-directory'. * etc/NEWS (provided): Mention `make-nearby-temp-file' and `temporary-file-directory'. * lisp/files.el (mounted-file-systems): New defcustom. (temporary-file-directory, make-nearby-temp-file): New defuns. (normal-backup-enable-predicate): Fix docstring. * lisp/net/tramp-adb.el (tramp-adb-file-name-handler-alist): * lisp/net/tramp-gvfs.el (tramp-gvfs-file-name-handler-alist): * lisp/net/tramp-sh.el (tramp-sh-file-name-handler-alist): * lisp/net/tramp-smb.el (tramp-smb-file-name-handler-alist): <make-nearby-temp-file, temporary-file-directory>: Add handler. * lisp/net/tramp.el (tramp-file-name-for-operation): Add `make-nearby-temp-file' and `temporary-file-directory'. (tramp-get-remote-tmpdir): Remove compatibility code. (tramp-handle-temporary-file-directory) (tramp-handle-make-nearby-temp-file): New defuns. * lisp/org/ob-core.el (org-babel-local-file-name): * lisp/progmodes/gud.el (gud-common-init): * lisp/vc/vc-hooks.el (vc-user-login-name): Use `file-remote-p'. * lisp/vc/vc-git.el (vc-git-checkin): Handle remote log message. * test/lisp/net/tramp-tests.el (tramp-test06-directory-file-name): Check `tramp--test-enabled'. (tramp-test18-file-attributes): Add tests for `file-ownership-preserved-p'. (tramp-test27-start-file-process, tramp-test28-shell-command): Reduce timeouts in `accept-process-output'. (tramp-test--shell-command-to-string-asynchronously): Add timeout. (tramp-test29-environment-variables): Remove additional sleep calls. (tramp-test32-make-nearby-temp-file): New test. (tramp--test-special-characters, tramp--test-utf8): Adapt docstring. (tramp-test33-special-characters) (tramp-test33-special-characters-with-stat) (tramp-test33-special-characters-with-perl) (tramp-test33-special-characters-with-ls, tramp-test34-utf8) (tramp-test34-utf8-with-stat, tramp-test34-utf8-with-perl) (tramp-test34-utf8-with-ls) (tramp-test35-asynchronous-requests) (tramp-test36-recursive-load, tramp-test37-unload): Rename. (tramp--test-ftp-p): Simplify check. (tramp--test-sh-p): New defun. (tramp-test20-file-modes, tramp-test22-file-times) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command) (tramp-test29-environment-variables) (tramp-test30-vc-registered) (tramp-test33-special-characters-with-stat) (tramp-test33-special-characters-with-perl) (tramp-test33-special-characters-with-ls) (tramp-test34-utf8-with-stat, tramp-test34-utf8-with-perl) (tramp-test34-utf8-with-ls) (tramp-test35-asynchronous-requests): Use it.
2016-08-07 13:57:23 +02:00
(skip-unless (or (tramp--test-adb-p) (tramp--test-sh-p)))
(dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(let* ((tmp-name (tramp--test-make-temp-name nil quoted))
(fnnd (file-name-nondirectory tmp-name))
(default-directory tramp-test-temporary-file-directory)
kill-buffer-query-functions)
(unwind-protect
(progn
;; We cannot use "/bin/true" and "/bin/false"; those paths
;; do not exist on hydra.
(should (zerop (process-file "true")))
(should-not (zerop (process-file "false")))
(should-not (zerop (process-file "binary-does-not-exist")))
(with-temp-buffer
(write-region "foo" nil tmp-name)
(should (file-exists-p tmp-name))
(should (zerop (process-file "ls" nil t nil fnnd)))
;; `ls' could produce colorized output.
(goto-char (point-min))
(while
(re-search-forward tramp-display-escape-sequence-regexp nil t)
(replace-match "" nil nil))
(should (string-equal (format "%s\n" fnnd) (buffer-string)))
(should-not (get-buffer-window (current-buffer) t))
;; Second run. The output must be appended.
(goto-char (point-max))
(should (zerop (process-file "ls" nil t t fnnd)))
;; `ls' could produce colorized output.
(goto-char (point-min))
(while
(re-search-forward tramp-display-escape-sequence-regexp nil t)
(replace-match "" nil nil))
(should
(string-equal (format "%s\n%s\n" fnnd fnnd) (buffer-string)))
;; A non-nil DISPLAY must not raise the buffer.
(should-not (get-buffer-window (current-buffer) t))))
;; Cleanup.
(ignore-errors (delete-file tmp-name))))))
;; Must be a command, because used as `sigusr' handler.
(defun tramp--test-timeout-handler (&rest _ignore)
"Timeout handler, reporting a failed test."
(interactive)
(let ((proc (get-buffer-process (current-buffer))))
(when (processp proc)
(tramp--test-message
"cmd: %s\nbuf:\n%s\n---" (process-command proc) (buffer-string))))
(ert-fail (format "`%s' timed out" (ert-test-name (ert-running-test)))))
(ert-deftest tramp-test29-start-file-process ()
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
"Check `start-file-process'."
:tags '(:expensive-test)
(skip-unless (tramp--test-enabled))
(skip-unless (or (tramp--test-adb-p) (tramp--test-sh-p)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(let ((default-directory tramp-test-temporary-file-directory)
(tmp-name (tramp--test-make-temp-name nil quoted))
kill-buffer-query-functions proc)
;; Simple process.
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(unwind-protect
(with-temp-buffer
(setq proc (start-file-process "test1" (current-buffer) "cat"))
(should (processp proc))
(should (equal (process-status proc) 'run))
(process-send-string proc "foo")
(process-send-eof proc)
;; Read output.
(with-timeout (10 (tramp--test-timeout-handler))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(while (< (- (point-max) (point-min)) (length "foo"))
(while (accept-process-output proc 0 nil t))))
;; We cannot use `string-equal', because tramp-adb.el
;; echoes also the sent string.
(should (string-match "\\`foo" (buffer-string))))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; Cleanup.
(ignore-errors (delete-process proc)))
;; Simple process using a file.
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(unwind-protect
(with-temp-buffer
(write-region "foo" nil tmp-name)
(should (file-exists-p tmp-name))
(setq proc
(start-file-process
"test2" (current-buffer)
"cat" (file-name-nondirectory tmp-name)))
(should (processp proc))
;; Read output.
(with-timeout (10 (tramp--test-timeout-handler))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(while (< (- (point-max) (point-min)) (length "foo"))
(while (accept-process-output proc 0 nil t))))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(should (string-equal (buffer-string) "foo")))
;; Cleanup.
(ignore-errors
(delete-process proc)
(delete-file tmp-name)))
;; Process filter.
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(unwind-protect
(with-temp-buffer
(setq proc (start-file-process "test3" (current-buffer) "cat"))
(should (processp proc))
(should (equal (process-status proc) 'run))
(set-process-filter
proc
(lambda (p s) (with-current-buffer (process-buffer p) (insert s))))
(process-send-string proc "foo")
(process-send-eof proc)
;; Read output.
(with-timeout (10 (tramp--test-timeout-handler))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(while (< (- (point-max) (point-min)) (length "foo"))
(while (accept-process-output proc 0 nil t))))
;; We cannot use `string-equal', because tramp-adb.el
;; echoes also the sent string.
(should (string-match "\\`foo" (buffer-string))))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; Cleanup.
2019-01-24 14:36:38 +01:00
(ignore-errors (delete-process proc))))))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(ert-deftest tramp-test30-make-process ()
"Check `make-process'."
:tags '(:expensive-test)
(skip-unless (tramp--test-enabled))
(skip-unless (or (tramp--test-adb-p) (tramp--test-sh-p)))
;; `make-process' has been inserted in Emacs 25.1. It supports file
;; name handlers since Emacs 27.
(skip-unless (tramp--test-emacs27-p))
(dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
(let ((default-directory tramp-test-temporary-file-directory)
(tmp-name (tramp--test-make-temp-name nil quoted))
kill-buffer-query-functions proc)
(should-not (with-no-warnings (make-process)))
;; Simple process.
(unwind-protect
(with-temp-buffer
(setq proc
(with-no-warnings
(make-process
:name "test1" :buffer (current-buffer) :command '("cat")
:file-handler t)))
(should (processp proc))
(should (equal (process-status proc) 'run))
(process-send-string proc "foo")
(process-send-eof proc)
;; Read output.
(with-timeout (10 (tramp--test-timeout-handler))
(while (< (- (point-max) (point-min)) (length "foo"))
(while (accept-process-output proc 0 nil t))))
;; We cannot use `string-equal', because tramp-adb.el
;; echoes also the sent string.
(should (string-match "\\`foo" (buffer-string))))
;; Cleanup.
(ignore-errors (delete-process proc)))
;; Simple process using a file.
(unwind-protect
(with-temp-buffer
(write-region "foo" nil tmp-name)
(should (file-exists-p tmp-name))
(setq proc
(with-no-warnings
(make-process
:name "test2" :buffer (current-buffer)
:command `("cat" ,(file-name-nondirectory tmp-name))
:file-handler t)))
(should (processp proc))
;; Read output.
(with-timeout (10 (tramp--test-timeout-handler))
(while (< (- (point-max) (point-min)) (length "foo"))
(while (accept-process-output proc 0 nil t))))
(should (string-equal (buffer-string) "foo")))
;; Cleanup.
(ignore-errors
(delete-process proc)
(delete-file tmp-name)))
;; Process filter.
(unwind-protect
(with-temp-buffer
(setq proc
(with-no-warnings
(make-process
:name "test3" :buffer (current-buffer) :command '("cat")
:filter
(lambda (p s)
(with-current-buffer (process-buffer p) (insert s)))
:file-handler t)))
(should (processp proc))
(should (equal (process-status proc) 'run))
(process-send-string proc "foo")
(process-send-eof proc)
;; Read output.
(with-timeout (10 (tramp--test-timeout-handler))
(while (not (string-match "foo" (buffer-string)))
(while (accept-process-output proc 0 nil t))))
;; We cannot use `string-equal', because tramp-adb.el
;; echoes also the sent string.
(should (string-match "\\`foo" (buffer-string))))
;; Cleanup.
(ignore-errors (delete-process proc)))
;; Process sentinel.
(unwind-protect
(with-temp-buffer
(setq proc
(with-no-warnings
(make-process
:name "test4" :buffer (current-buffer) :command '("cat")
:sentinel
(lambda (p s)
(with-current-buffer (process-buffer p) (insert s)))
:file-handler t)))
(should (processp proc))
(should (equal (process-status proc) 'run))
(process-send-string proc "foo")
(process-send-eof proc)
(delete-process proc)
;; Read output.
(with-timeout (10 (tramp--test-timeout-handler))
(while (accept-process-output proc 0 nil t)))
;; We cannot use `string-equal', because tramp-adb.el
;; echoes also the sent string. And a remote macOS sends
;; a slightly modified string.
(should (string-match "killed.*\n\\'" (buffer-string))))
;; Cleanup.
(ignore-errors (delete-process proc)))
;; Process with stderr. tramp-adb.el doesn't support it (yet).
(unless (tramp--test-adb-p)
(let ((stderr
(generate-new-buffer (generate-new-buffer-name "stderr"))))
(unwind-protect
(with-temp-buffer
(setq proc
(with-no-warnings
(make-process
:name "test5" :buffer (current-buffer)
:command '("cat" "/")
:stderr stderr
:file-handler t)))
(should (processp proc))
;; Read stderr.
(with-current-buffer stderr
(with-timeout (10 (tramp--test-timeout-handler))
(while (= (point-min) (point-max))
(while (accept-process-output proc 0 nil t))))
(should
(string-match "^cat:.* Is a directory" (buffer-string)))))
;; Cleanup.
(ignore-errors (delete-process proc))
Stronger check for Tramp method * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-rclone.el (tramp-rclone-maybe-open-connection): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-maybe-open-connection): Use `tramp-get-connection-name'. * lisp/net/tramp-sh.el (tramp-sh-handle-make-symbolic-link): * lisp/net/tramp-smb.el (tramp-smb-handle-make-symbolic-link): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-handle-make-symbolic-link): Don't check remote TARGET. * lisp/net/tramp.el (tramp-dissect-file-name): Check for proper method. (tramp-file-name-for-operation): Take only 2nd argument into account for file name handler. (tramp-file-name-handler): Suppress checks for `file-remote-p'. * test/lisp/net/tramp-archive-tests.el (tramp-archive-test02-file-name-dissect): Suppress check for wrong method. * test/lisp/net/tramp-tests.el (tramp--test-instrument-test-case): Dump *all* Tramp buffers. (tramp-test02-file-name-dissect) (tramp-test02-file-name-dissect-simplified) (tramp-test02-file-name-dissect-separate): Check also wrong method. (tramp-test03-file-name-defaults): Check, that the respective Tramp package is loaded. (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name) (tramp-test06-directory-file-name, tramp-test44-auto-load): Suppress check for wrong method. (tramp-test30-make-process): Remove instrumentation code. (tramp-test31-interrupt-process, tramp-test36-vc-registered): Guarantee that connection is established prior starting process.
2019-06-04 12:51:45 +02:00
(ignore-errors (kill-buffer stderr))))))))
(ert-deftest tramp-test31-interrupt-process ()
"Check `interrupt-process'."
:tags '(:expensive-test)
(skip-unless (tramp--test-enabled))
(skip-unless (tramp--test-sh-p))
;; Since Emacs 26.1.
(skip-unless (boundp 'interrupt-process-functions))
Stronger check for Tramp method * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-rclone.el (tramp-rclone-maybe-open-connection): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-maybe-open-connection): Use `tramp-get-connection-name'. * lisp/net/tramp-sh.el (tramp-sh-handle-make-symbolic-link): * lisp/net/tramp-smb.el (tramp-smb-handle-make-symbolic-link): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-handle-make-symbolic-link): Don't check remote TARGET. * lisp/net/tramp.el (tramp-dissect-file-name): Check for proper method. (tramp-file-name-for-operation): Take only 2nd argument into account for file name handler. (tramp-file-name-handler): Suppress checks for `file-remote-p'. * test/lisp/net/tramp-archive-tests.el (tramp-archive-test02-file-name-dissect): Suppress check for wrong method. * test/lisp/net/tramp-tests.el (tramp--test-instrument-test-case): Dump *all* Tramp buffers. (tramp-test02-file-name-dissect) (tramp-test02-file-name-dissect-simplified) (tramp-test02-file-name-dissect-separate): Check also wrong method. (tramp-test03-file-name-defaults): Check, that the respective Tramp package is loaded. (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name) (tramp-test06-directory-file-name, tramp-test44-auto-load): Suppress check for wrong method. (tramp-test30-make-process): Remove instrumentation code. (tramp-test31-interrupt-process, tramp-test36-vc-registered): Guarantee that connection is established prior starting process.
2019-06-04 12:51:45 +02:00
;; We must use `file-truename' for the temporary directory, in
;; order to establish the connection prior running an asynchronous
;; process.
(let ((default-directory (file-truename tramp-test-temporary-file-directory))
kill-buffer-query-functions proc)
(unwind-protect
(with-temp-buffer
(setq proc (start-file-process "test" (current-buffer) "sleep" "10"))
(should (processp proc))
(should (process-live-p proc))
(should (equal (process-status proc) 'run))
(should (numberp (process-get proc 'remote-pid)))
(should (interrupt-process proc))
;; Let the process accept the interrupt.
(with-timeout (10 (tramp--test-timeout-handler))
(while (accept-process-output proc nil nil 0)))
(should-not (process-live-p proc))
;; An interrupted process cannot be interrupted, again.
(should-error (interrupt-process proc) :type 'error))
;; Cleanup.
(ignore-errors (delete-process proc)))))
(defun tramp--test-shell-command-to-string-asynchronously (command)
"Like `shell-command-to-string', but for asynchronous processes."
(with-temp-buffer
(async-shell-command command (current-buffer))
(with-timeout
((if (getenv "EMACS_EMBA_CI") 30 10) (tramp--test-timeout-handler))
(while (accept-process-output
(get-buffer-process (current-buffer)) nil nil t)))
(buffer-substring-no-properties (point-min) (point-max))))
(ert-deftest tramp-test32-shell-command ()
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
"Check `shell-command'."
:tags '(:expensive-test)
(skip-unless (tramp--test-enabled))
;; Prior Emacs 27, `shell-file-name' was hard coded as "/bin/sh" for
;; remote processes in Emacs. That doesn't work for tramp-adb.el.
(skip-unless (or (and (tramp--test-adb-p) (tramp--test-emacs27-p))
(tramp--test-sh-p)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(let ((tmp-name (tramp--test-make-temp-name nil quoted))
(default-directory tramp-test-temporary-file-directory)
;; Suppress nasty messages.
(inhibit-message t)
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
kill-buffer-query-functions)
;; Test ordinary `shell-command'.
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(unwind-protect
(with-temp-buffer
(write-region "foo" nil tmp-name)
(should (file-exists-p tmp-name))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(shell-command
(format "ls %s" (file-name-nondirectory tmp-name))
(current-buffer))
;; `ls' could produce colorized output.
(goto-char (point-min))
Sync with Tramp repository. * lisp/net/tramp-adb.el (tramp-adb-handle-start-file-process): * lisp/net/tramp-sh.el (tramp-sh-handle-start-file-process) * lisp/net/tramp-smb.el (tramp-smb-handle-start-file-process): Create BUFFER if it doesn't exist. Reported by Nikolay Kudryavtsev <nikolay.kudryavtsev@gmail.com>. * lisp/net/tramp-gvfs.el (tramp-gvfs-file-attributes) (tramp-gvfs-file-attributes-with-gvfs-ls-regexp) (tramp-gvfs-file-attributes-with-gvfs-info-regexp): New defconst. (tramp-gvfs-get-directory-attributes) (tramp-gvfs-get-root-attributes) (tramp-gvfs-get-file-attributes): New defun. (tramp-gvfs-handle-file-attributes) (tramp-gvfs-handle-file-name-all-completions): Use them. (tramp-gvfs-handle-file-directory-p): Use `file-truename'. (tramp-gvfs-maybe-open-connection): Set :noquery flag for process. (tramp-gvfs-send-command): Add locale settings to `process-environment'. (top): Suppress D-Bus error messages during zeroconf initialization. * lisp/net/tramp.el (tramp-unknown-id-string) (tramp-unknown-id-integer): New defconst. (tramp-check-cached-permissions) * lisp/net/tramp-gvfs.el (tramp-gvfs-handle-file-attributes) * lisp/net/tramp-sh.el (tramp-do-file-attributes-with-ls) (tramp-convert-file-attributes, tramp-get-remote-uid) (tramp-get-remote-gid): Use them. * lisp/net/tramp-sh.el (tramp-display-escape-sequence-regexp): Rename from `tramp-color-escape-sequence-regexp'. (tramp-sh-handle-insert-directory) (tramp-convert-file-attributes): Adapt callees. (tramp-device-escape-sequence-regexp): New defconst. (tramp-wait-for-output): Use it. Reported by Matthías Páll Gissurarson <icetritlo@gmail.com>. * lisp/net/tramp-smb.el (tramp-smb-handle-file-name-all-completions): Simplify. * test/lisp/net/tramp-tests.el (tramp-test26-process-file) (tramp-test28-shell-command): Use `tramp-display-escape-sequence-regexp'.
2016-05-28 12:14:58 +02:00
(while
(re-search-forward tramp-display-escape-sequence-regexp nil t)
(replace-match "" nil nil))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(should
(string-equal
(format "%s\n" (file-name-nondirectory tmp-name))
(buffer-string))))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; Cleanup.
(ignore-errors (delete-file tmp-name)))
;; Test ordinary `async-shell-command'.
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(unwind-protect
(with-temp-buffer
(write-region "foo" nil tmp-name)
(should (file-exists-p tmp-name))
(async-shell-command
(format "ls %s" (file-name-nondirectory tmp-name))
(current-buffer))
;; Read output.
(with-timeout (10 (tramp--test-timeout-handler))
(while (accept-process-output
(get-buffer-process (current-buffer)) nil nil t)))
;; `ls' could produce colorized output.
(goto-char (point-min))
Sync with Tramp repository. * lisp/net/tramp-adb.el (tramp-adb-handle-start-file-process): * lisp/net/tramp-sh.el (tramp-sh-handle-start-file-process) * lisp/net/tramp-smb.el (tramp-smb-handle-start-file-process): Create BUFFER if it doesn't exist. Reported by Nikolay Kudryavtsev <nikolay.kudryavtsev@gmail.com>. * lisp/net/tramp-gvfs.el (tramp-gvfs-file-attributes) (tramp-gvfs-file-attributes-with-gvfs-ls-regexp) (tramp-gvfs-file-attributes-with-gvfs-info-regexp): New defconst. (tramp-gvfs-get-directory-attributes) (tramp-gvfs-get-root-attributes) (tramp-gvfs-get-file-attributes): New defun. (tramp-gvfs-handle-file-attributes) (tramp-gvfs-handle-file-name-all-completions): Use them. (tramp-gvfs-handle-file-directory-p): Use `file-truename'. (tramp-gvfs-maybe-open-connection): Set :noquery flag for process. (tramp-gvfs-send-command): Add locale settings to `process-environment'. (top): Suppress D-Bus error messages during zeroconf initialization. * lisp/net/tramp.el (tramp-unknown-id-string) (tramp-unknown-id-integer): New defconst. (tramp-check-cached-permissions) * lisp/net/tramp-gvfs.el (tramp-gvfs-handle-file-attributes) * lisp/net/tramp-sh.el (tramp-do-file-attributes-with-ls) (tramp-convert-file-attributes, tramp-get-remote-uid) (tramp-get-remote-gid): Use them. * lisp/net/tramp-sh.el (tramp-display-escape-sequence-regexp): Rename from `tramp-color-escape-sequence-regexp'. (tramp-sh-handle-insert-directory) (tramp-convert-file-attributes): Adapt callees. (tramp-device-escape-sequence-regexp): New defconst. (tramp-wait-for-output): Use it. Reported by Matthías Páll Gissurarson <icetritlo@gmail.com>. * lisp/net/tramp-smb.el (tramp-smb-handle-file-name-all-completions): Simplify. * test/lisp/net/tramp-tests.el (tramp-test26-process-file) (tramp-test28-shell-command): Use `tramp-display-escape-sequence-regexp'.
2016-05-28 12:14:58 +02:00
(while
(re-search-forward tramp-display-escape-sequence-regexp nil t)
(replace-match "" nil nil))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; There might be a nasty "Process *Async Shell* finished" message.
(goto-char (point-min))
(forward-line)
(narrow-to-region (point-min) (point))
(should
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(string-equal
(format "%s\n" (file-name-nondirectory tmp-name))
(buffer-string))))
2013-11-05 15:46:57 +01:00
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; Cleanup.
(ignore-errors (delete-file tmp-name)))
;; Test sending string to `async-shell-command'.
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(unwind-protect
(with-temp-buffer
(write-region "foo" nil tmp-name)
(should (file-exists-p tmp-name))
(async-shell-command "read line; ls $line" (current-buffer))
(process-send-string
(get-buffer-process (current-buffer))
(format "%s\n" (file-name-nondirectory tmp-name)))
;; Read output.
(with-timeout (10 (tramp--test-timeout-handler))
(while (accept-process-output
(get-buffer-process (current-buffer)) nil nil t)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; `ls' could produce colorized output.
(goto-char (point-min))
(while
(re-search-forward tramp-display-escape-sequence-regexp nil t)
(replace-match "" nil nil))
;; There might be a nasty "Process *Async Shell* finished" message.
(goto-char (point-min))
(forward-line)
(narrow-to-region (point-min) (point))
(should
(string-equal
(format "%s\n" (file-name-nondirectory tmp-name))
(buffer-string))))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; Cleanup.
(ignore-errors (delete-file tmp-name)))
;; Test `async-shell-command-width'. Since Emacs 27.1.
(when (ignore-errors
(and (boundp 'async-shell-command-width)
(zerop (call-process "tput" nil nil nil "cols"))
(zerop (process-file "tput" nil nil nil "cols"))))
(let (async-shell-command-width)
(should
(string-equal
(format "%s\n" (car (process-lines "tput" "cols")))
(tramp--test-shell-command-to-string-asynchronously
"tput cols")))
(setq async-shell-command-width 1024)
(should
(string-equal
"1024\n"
(tramp--test-shell-command-to-string-asynchronously
"tput cols"))))))))
;; This test is inspired by Bug#23952.
(ert-deftest tramp-test33-environment-variables ()
"Check that remote processes set / unset environment variables properly."
:tags '(:expensive-test)
(skip-unless (tramp--test-enabled))
Add `make-nearby-temp-file' and `temporary-file-directory' * doc/lispref/files.texi (Unique File Names): Introduce `make-nearby-temp-file' and `temporary-file-directory'. (Magic File Names): Mention `make-nearby-temp-file' and `temporary-file-directory'. * etc/NEWS (provided): Mention `make-nearby-temp-file' and `temporary-file-directory'. * lisp/files.el (mounted-file-systems): New defcustom. (temporary-file-directory, make-nearby-temp-file): New defuns. (normal-backup-enable-predicate): Fix docstring. * lisp/net/tramp-adb.el (tramp-adb-file-name-handler-alist): * lisp/net/tramp-gvfs.el (tramp-gvfs-file-name-handler-alist): * lisp/net/tramp-sh.el (tramp-sh-file-name-handler-alist): * lisp/net/tramp-smb.el (tramp-smb-file-name-handler-alist): <make-nearby-temp-file, temporary-file-directory>: Add handler. * lisp/net/tramp.el (tramp-file-name-for-operation): Add `make-nearby-temp-file' and `temporary-file-directory'. (tramp-get-remote-tmpdir): Remove compatibility code. (tramp-handle-temporary-file-directory) (tramp-handle-make-nearby-temp-file): New defuns. * lisp/org/ob-core.el (org-babel-local-file-name): * lisp/progmodes/gud.el (gud-common-init): * lisp/vc/vc-hooks.el (vc-user-login-name): Use `file-remote-p'. * lisp/vc/vc-git.el (vc-git-checkin): Handle remote log message. * test/lisp/net/tramp-tests.el (tramp-test06-directory-file-name): Check `tramp--test-enabled'. (tramp-test18-file-attributes): Add tests for `file-ownership-preserved-p'. (tramp-test27-start-file-process, tramp-test28-shell-command): Reduce timeouts in `accept-process-output'. (tramp-test--shell-command-to-string-asynchronously): Add timeout. (tramp-test29-environment-variables): Remove additional sleep calls. (tramp-test32-make-nearby-temp-file): New test. (tramp--test-special-characters, tramp--test-utf8): Adapt docstring. (tramp-test33-special-characters) (tramp-test33-special-characters-with-stat) (tramp-test33-special-characters-with-perl) (tramp-test33-special-characters-with-ls, tramp-test34-utf8) (tramp-test34-utf8-with-stat, tramp-test34-utf8-with-perl) (tramp-test34-utf8-with-ls) (tramp-test35-asynchronous-requests) (tramp-test36-recursive-load, tramp-test37-unload): Rename. (tramp--test-ftp-p): Simplify check. (tramp--test-sh-p): New defun. (tramp-test20-file-modes, tramp-test22-file-times) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command) (tramp-test29-environment-variables) (tramp-test30-vc-registered) (tramp-test33-special-characters-with-stat) (tramp-test33-special-characters-with-perl) (tramp-test33-special-characters-with-ls) (tramp-test34-utf8-with-stat, tramp-test34-utf8-with-perl) (tramp-test34-utf8-with-ls) (tramp-test35-asynchronous-requests): Use it.
2016-08-07 13:57:23 +02:00
(skip-unless (tramp--test-sh-p))
(dolist (this-shell-command-to-string
'(;; Synchronously.
shell-command-to-string
;; Asynchronously.
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
tramp--test-shell-command-to-string-asynchronously))
(let ((default-directory tramp-test-temporary-file-directory)
(shell-file-name "/bin/sh")
(envvar (concat "VAR_" (upcase (md5 (current-time-string)))))
kill-buffer-query-functions)
(unwind-protect
;; Set a value.
(let ((process-environment
(cons (concat envvar "=foo") process-environment)))
;; Default value.
(should
(string-match
"foo"
(funcall
this-shell-command-to-string
(format "echo -n ${%s:-bla}" envvar))))))
(unwind-protect
;; Set the empty value.
(let ((process-environment
(cons (concat envvar "=") process-environment)))
;; Value is null.
(should
(string-match
"bla"
(funcall
this-shell-command-to-string
(format "echo -n ${%s:-bla}" envvar))))
;; Variable is set.
(should
(string-match
(regexp-quote envvar)
(funcall this-shell-command-to-string "set")))))
;; We force a reconnect, in order to have a clean environment.
(tramp-cleanup-connection
(tramp-dissect-file-name tramp-test-temporary-file-directory)
'keep-debug 'keep-password)
(unwind-protect
;; Unset the variable.
(let ((tramp-remote-process-environment
(cons (concat envvar "=foo")
tramp-remote-process-environment)))
;; Set the initial value, we want to unset below.
(should
(string-match
"foo"
(funcall
this-shell-command-to-string
(format "echo -n ${%s:-bla}" envvar))))
(let ((process-environment
(cons envvar process-environment)))
;; Variable is unset.
(should
(string-match
"bla"
(funcall
this-shell-command-to-string
(format "echo -n ${%s:-bla}" envvar))))
;; Variable is unset.
(should-not
(string-match
(regexp-quote envvar)
;; We must remove PS1, the output is truncated otherwise.
(funcall
this-shell-command-to-string "printenv | grep -v PS1")))))))))
;; This test is inspired by Bug#27009.
(ert-deftest tramp-test33-environment-variables-and-port-numbers ()
"Check that two connections with separate ports are different."
(skip-unless (tramp--test-enabled))
;; We test it only for the mock-up connection; otherwise there might
;; be problems with the used ports.
(skip-unless (and (eq tramp-syntax 'default)
(tramp--test-mock-p)))
;; We force a reconnect, in order to have a clean environment.
(dolist (dir `(,tramp-test-temporary-file-directory
"/mock:localhost#11111:" "/mock:localhost#22222:"))
(tramp-cleanup-connection
(tramp-dissect-file-name dir) 'keep-debug 'keep-password))
(unwind-protect
(dolist (port '(11111 22222))
(let* ((default-directory
(format "/mock:localhost#%d:%s" port temporary-file-directory))
(shell-file-name "/bin/sh")
(envvar (concat "VAR_" (upcase (md5 (current-time-string)))))
;; We cannot use `process-environment', because this
;; would be applied in `process-file'.
(tramp-remote-process-environment
(cons
(format "%s=%d" envvar port)
tramp-remote-process-environment)))
(should
(string-match
(number-to-string port)
(shell-command-to-string (format "echo -n $%s" envvar))))))
;; Cleanup.
(dolist (dir '("/mock:localhost#11111:" "/mock:localhost#22222:"))
(tramp-cleanup-connection (tramp-dissect-file-name dir)))))
Do not hardcode "/bin/sh" in compile. Bug#24338, Bug#29723 * doc/emacs/custom.texi (Connection Variables): New node. * doc/emacs/emacs.texi (Top): Add entry for Connection Variables. * doc/emacs/misc.texi (Single Shell): Mention default value for remote buffers. * doc/lispref/variables.texi (Connection Local Variables): Describe `with-connection-local-variables' instead of `with-connection-local-profiles'. * doc/misc/tramp.texi (Remote processes): Refer to Emacs manual. Mention default connection-local settings for `shell-file-name' and `shell-command-switch'. * etc/NEWS: Mention connection-local variables changes. * lisp/files-x.el (hack-connection-local-variables): Push connection-local variables to `file-local-variables-alist'. (connection-local-criteria-for-default-directory): New defsubst. (with-connection-local-variables): Rename from `with-connection-local-profiles'. Adapt implementation. * lisp/files.el (hack-local-variables): Call `hack-connection-local-variables'. * lisp/shell.el (shell): Use `with-connection-local-variables'. * lisp/subr.el (start-file-process-shell-command): * lisp/progmodes/compile.el (compilation-start): Use `with-connection-local-variables'. Do not set "/bin/sh" for remote buffers, trust settings of `shell-file-name'. (Bug#24338), (Bug#29723) * lisp/net/ange-ftp.el (ange-ftp-compress, ange-ftp-uncompress): Use `shell-command-switch'. * lisp/net/tramp-adb.el (tramp-adb-connection-local-default-profile): New defvar. Add it to connection-local profiles after loading "shell". * lisp/net/tramp-integration.el (tramp-compat): Require tramp-compat. (tramp-compat-exec-path): Do not declare anymore. (tramp-connection-local-safe-shell-file-names): New defvar. (tramp-connection-local-default-profile): New defconst. Activate it after loading "shell". (shell-file-name, shell-command-switch): Add safe-local-variable property. * lisp/net/tramp-sh.el (tramp-display-escape-sequence-regexp): Add tramp-autoload cookie. * test/lisp/files-x-tests.el (remote-shell-file-name): Add safe-local-variable property to remote-* variables. (tramp-connection-local-default-profile): Declare. (files-x-test-with-connection-local-variables): Rename from `files-x-test-with-connection-local-profiles'. Adapt implementation. * test/lisp/net/tramp-tests.el (tramp-test34-connection-local-variables): New test. (tramp-test34-explicit-shell-file-name): Run it also for tramp-adb. Bind connection-local-{profile,criteria}-alist. Use tramp-adb specific `shell-file-name'. Add safe-local-variable property to `explicit-shell-file-name' and `explicit-sh-args'.
2019-03-09 16:44:24 +01:00
;; Connection-local variables are enabled per default since Emacs 27.1.
(ert-deftest tramp-test34-connection-local-variables ()
"Check that connection-local variables are enabled."
:tags '(:expensive-test)
(skip-unless (tramp--test-enabled))
;; Since Emacs 27.1.
(skip-unless (fboundp 'with-connection-local-variables))
;; `connection-local-set-profile-variables' and
;; `connection-local-set-profiles' exist since Emacs 26.1. We don't
;; want to see compiler warnings for older Emacsen.
(let* ((default-directory tramp-test-temporary-file-directory)
(tmp-name1 (tramp--test-make-temp-name))
(tmp-name2 (expand-file-name "foo" tmp-name1))
(enable-local-variables :all)
(enable-remote-dir-locals t)
kill-buffer-query-functions
connection-local-profile-alist connection-local-criteria-alist)
(unwind-protect
(progn
(make-directory tmp-name1)
(should (file-directory-p tmp-name1))
;; `local-variable' is buffer-local due to explicit setting.
(with-no-warnings
(defvar-local local-variable 'buffer))
(with-temp-buffer
(should (eq local-variable 'buffer)))
;; `local-variable' is connection-local due to Tramp.
(write-region "foo" nil tmp-name2)
(should (file-exists-p tmp-name2))
(with-no-warnings
(connection-local-set-profile-variables
'local-variable-profile
'((local-variable . connect)))
(connection-local-set-profiles
`(:application tramp
:protocol ,(file-remote-p default-directory 'method)
:user ,(file-remote-p default-directory 'user)
:machine ,(file-remote-p default-directory 'host))
'local-variable-profile))
(with-current-buffer (find-file-noselect tmp-name2)
(should (eq local-variable 'connect))
(kill-buffer (current-buffer)))
;; `local-variable' is dir-local due to existence of .dir-locals.el.
(write-region
"((nil . ((local-variable . dir))))" nil
(expand-file-name ".dir-locals.el" tmp-name1))
(should (file-exists-p (expand-file-name ".dir-locals.el" tmp-name1)))
(with-current-buffer (find-file-noselect tmp-name2)
(should (eq local-variable 'dir))
(kill-buffer (current-buffer)))
;; `local-variable' is file-local due to specifying as file variable.
(write-region
"-*- mode: comint; local-variable: file; -*-" nil tmp-name2)
(should (file-exists-p tmp-name2))
(with-current-buffer (find-file-noselect tmp-name2)
(should (eq local-variable 'file))
(kill-buffer (current-buffer))))
;; Cleanup.
(ignore-errors (delete-directory tmp-name1 'recursive)))))
;; The functions were introduced in Emacs 26.1.
(ert-deftest tramp-test34-explicit-shell-file-name ()
"Check that connection-local `explicit-shell-file-name' is set."
:tags '(:expensive-test)
(skip-unless (tramp--test-enabled))
;; Prior Emacs 27, `shell-file-name' was hard coded as "/bin/sh" for
;; remote processes in Emacs. That doesn't work for tramp-adb.el.
(skip-unless (or (and (tramp--test-adb-p) (tramp--test-emacs27-p))
(tramp--test-sh-p)))
;; Since Emacs 26.1.
(skip-unless (and (fboundp 'connection-local-set-profile-variables)
(fboundp 'connection-local-set-profiles)))
;; `connection-local-set-profile-variables' and
;; `connection-local-set-profiles' exist since Emacs 26.1. We don't
;; want to see compiler warnings for older Emacsen.
(let ((default-directory tramp-test-temporary-file-directory)
Do not hardcode "/bin/sh" in compile. Bug#24338, Bug#29723 * doc/emacs/custom.texi (Connection Variables): New node. * doc/emacs/emacs.texi (Top): Add entry for Connection Variables. * doc/emacs/misc.texi (Single Shell): Mention default value for remote buffers. * doc/lispref/variables.texi (Connection Local Variables): Describe `with-connection-local-variables' instead of `with-connection-local-profiles'. * doc/misc/tramp.texi (Remote processes): Refer to Emacs manual. Mention default connection-local settings for `shell-file-name' and `shell-command-switch'. * etc/NEWS: Mention connection-local variables changes. * lisp/files-x.el (hack-connection-local-variables): Push connection-local variables to `file-local-variables-alist'. (connection-local-criteria-for-default-directory): New defsubst. (with-connection-local-variables): Rename from `with-connection-local-profiles'. Adapt implementation. * lisp/files.el (hack-local-variables): Call `hack-connection-local-variables'. * lisp/shell.el (shell): Use `with-connection-local-variables'. * lisp/subr.el (start-file-process-shell-command): * lisp/progmodes/compile.el (compilation-start): Use `with-connection-local-variables'. Do not set "/bin/sh" for remote buffers, trust settings of `shell-file-name'. (Bug#24338), (Bug#29723) * lisp/net/ange-ftp.el (ange-ftp-compress, ange-ftp-uncompress): Use `shell-command-switch'. * lisp/net/tramp-adb.el (tramp-adb-connection-local-default-profile): New defvar. Add it to connection-local profiles after loading "shell". * lisp/net/tramp-integration.el (tramp-compat): Require tramp-compat. (tramp-compat-exec-path): Do not declare anymore. (tramp-connection-local-safe-shell-file-names): New defvar. (tramp-connection-local-default-profile): New defconst. Activate it after loading "shell". (shell-file-name, shell-command-switch): Add safe-local-variable property. * lisp/net/tramp-sh.el (tramp-display-escape-sequence-regexp): Add tramp-autoload cookie. * test/lisp/files-x-tests.el (remote-shell-file-name): Add safe-local-variable property to remote-* variables. (tramp-connection-local-default-profile): Declare. (files-x-test-with-connection-local-variables): Rename from `files-x-test-with-connection-local-profiles'. Adapt implementation. * test/lisp/net/tramp-tests.el (tramp-test34-connection-local-variables): New test. (tramp-test34-explicit-shell-file-name): Run it also for tramp-adb. Bind connection-local-{profile,criteria}-alist. Use tramp-adb specific `shell-file-name'. Add safe-local-variable property to `explicit-shell-file-name' and `explicit-sh-args'.
2019-03-09 16:44:24 +01:00
explicit-shell-file-name kill-buffer-query-functions
connection-local-profile-alist connection-local-criteria-alist)
(unwind-protect
(progn
;; `shell-mode' would ruin our test, because it deletes all
;; buffer local variables. Not needed in Emacs 27.1.
(put 'explicit-shell-file-name 'permanent-local t)
;; Declare connection-local variables `explicit-shell-file-name'
;; and `explicit-sh-args'.
(with-no-warnings
(connection-local-set-profile-variables
'remote-sh
Do not hardcode "/bin/sh" in compile. Bug#24338, Bug#29723 * doc/emacs/custom.texi (Connection Variables): New node. * doc/emacs/emacs.texi (Top): Add entry for Connection Variables. * doc/emacs/misc.texi (Single Shell): Mention default value for remote buffers. * doc/lispref/variables.texi (Connection Local Variables): Describe `with-connection-local-variables' instead of `with-connection-local-profiles'. * doc/misc/tramp.texi (Remote processes): Refer to Emacs manual. Mention default connection-local settings for `shell-file-name' and `shell-command-switch'. * etc/NEWS: Mention connection-local variables changes. * lisp/files-x.el (hack-connection-local-variables): Push connection-local variables to `file-local-variables-alist'. (connection-local-criteria-for-default-directory): New defsubst. (with-connection-local-variables): Rename from `with-connection-local-profiles'. Adapt implementation. * lisp/files.el (hack-local-variables): Call `hack-connection-local-variables'. * lisp/shell.el (shell): Use `with-connection-local-variables'. * lisp/subr.el (start-file-process-shell-command): * lisp/progmodes/compile.el (compilation-start): Use `with-connection-local-variables'. Do not set "/bin/sh" for remote buffers, trust settings of `shell-file-name'. (Bug#24338), (Bug#29723) * lisp/net/ange-ftp.el (ange-ftp-compress, ange-ftp-uncompress): Use `shell-command-switch'. * lisp/net/tramp-adb.el (tramp-adb-connection-local-default-profile): New defvar. Add it to connection-local profiles after loading "shell". * lisp/net/tramp-integration.el (tramp-compat): Require tramp-compat. (tramp-compat-exec-path): Do not declare anymore. (tramp-connection-local-safe-shell-file-names): New defvar. (tramp-connection-local-default-profile): New defconst. Activate it after loading "shell". (shell-file-name, shell-command-switch): Add safe-local-variable property. * lisp/net/tramp-sh.el (tramp-display-escape-sequence-regexp): Add tramp-autoload cookie. * test/lisp/files-x-tests.el (remote-shell-file-name): Add safe-local-variable property to remote-* variables. (tramp-connection-local-default-profile): Declare. (files-x-test-with-connection-local-variables): Rename from `files-x-test-with-connection-local-profiles'. Adapt implementation. * test/lisp/net/tramp-tests.el (tramp-test34-connection-local-variables): New test. (tramp-test34-explicit-shell-file-name): Run it also for tramp-adb. Bind connection-local-{profile,criteria}-alist. Use tramp-adb specific `shell-file-name'. Add safe-local-variable property to `explicit-shell-file-name' and `explicit-sh-args'.
2019-03-09 16:44:24 +01:00
`((explicit-shell-file-name
. ,(if (tramp--test-adb-p) "/system/bin/sh" "/bin/sh"))
(explicit-sh-args . ("-c" "echo foo"))))
(connection-local-set-profiles
`(:application tramp
:protocol ,(file-remote-p default-directory 'method)
:user ,(file-remote-p default-directory 'user)
:machine ,(file-remote-p default-directory 'host))
'remote-sh))
Do not hardcode "/bin/sh" in compile. Bug#24338, Bug#29723 * doc/emacs/custom.texi (Connection Variables): New node. * doc/emacs/emacs.texi (Top): Add entry for Connection Variables. * doc/emacs/misc.texi (Single Shell): Mention default value for remote buffers. * doc/lispref/variables.texi (Connection Local Variables): Describe `with-connection-local-variables' instead of `with-connection-local-profiles'. * doc/misc/tramp.texi (Remote processes): Refer to Emacs manual. Mention default connection-local settings for `shell-file-name' and `shell-command-switch'. * etc/NEWS: Mention connection-local variables changes. * lisp/files-x.el (hack-connection-local-variables): Push connection-local variables to `file-local-variables-alist'. (connection-local-criteria-for-default-directory): New defsubst. (with-connection-local-variables): Rename from `with-connection-local-profiles'. Adapt implementation. * lisp/files.el (hack-local-variables): Call `hack-connection-local-variables'. * lisp/shell.el (shell): Use `with-connection-local-variables'. * lisp/subr.el (start-file-process-shell-command): * lisp/progmodes/compile.el (compilation-start): Use `with-connection-local-variables'. Do not set "/bin/sh" for remote buffers, trust settings of `shell-file-name'. (Bug#24338), (Bug#29723) * lisp/net/ange-ftp.el (ange-ftp-compress, ange-ftp-uncompress): Use `shell-command-switch'. * lisp/net/tramp-adb.el (tramp-adb-connection-local-default-profile): New defvar. Add it to connection-local profiles after loading "shell". * lisp/net/tramp-integration.el (tramp-compat): Require tramp-compat. (tramp-compat-exec-path): Do not declare anymore. (tramp-connection-local-safe-shell-file-names): New defvar. (tramp-connection-local-default-profile): New defconst. Activate it after loading "shell". (shell-file-name, shell-command-switch): Add safe-local-variable property. * lisp/net/tramp-sh.el (tramp-display-escape-sequence-regexp): Add tramp-autoload cookie. * test/lisp/files-x-tests.el (remote-shell-file-name): Add safe-local-variable property to remote-* variables. (tramp-connection-local-default-profile): Declare. (files-x-test-with-connection-local-variables): Rename from `files-x-test-with-connection-local-profiles'. Adapt implementation. * test/lisp/net/tramp-tests.el (tramp-test34-connection-local-variables): New test. (tramp-test34-explicit-shell-file-name): Run it also for tramp-adb. Bind connection-local-{profile,criteria}-alist. Use tramp-adb specific `shell-file-name'. Add safe-local-variable property to `explicit-shell-file-name' and `explicit-sh-args'.
2019-03-09 16:44:24 +01:00
(put 'explicit-shell-file-name 'safe-local-variable #'identity)
(put 'explicit-sh-args 'safe-local-variable #'identity)
;; Run `shell' interactively. Since the default directory
;; is remote, `explicit-shell-file-name' shall be set in
;; order to avoid a question. `explicit-sh-args' echoes the
;; test data.
(with-current-buffer (get-buffer-create "*shell*")
(ignore-errors (kill-process (current-buffer)))
(should-not explicit-shell-file-name)
(call-interactively #'shell)
(with-timeout (10)
(while (accept-process-output
(get-buffer-process (current-buffer)) nil nil t)))
(should (string-match "^foo$" (buffer-string)))))
Do not hardcode "/bin/sh" in compile. Bug#24338, Bug#29723 * doc/emacs/custom.texi (Connection Variables): New node. * doc/emacs/emacs.texi (Top): Add entry for Connection Variables. * doc/emacs/misc.texi (Single Shell): Mention default value for remote buffers. * doc/lispref/variables.texi (Connection Local Variables): Describe `with-connection-local-variables' instead of `with-connection-local-profiles'. * doc/misc/tramp.texi (Remote processes): Refer to Emacs manual. Mention default connection-local settings for `shell-file-name' and `shell-command-switch'. * etc/NEWS: Mention connection-local variables changes. * lisp/files-x.el (hack-connection-local-variables): Push connection-local variables to `file-local-variables-alist'. (connection-local-criteria-for-default-directory): New defsubst. (with-connection-local-variables): Rename from `with-connection-local-profiles'. Adapt implementation. * lisp/files.el (hack-local-variables): Call `hack-connection-local-variables'. * lisp/shell.el (shell): Use `with-connection-local-variables'. * lisp/subr.el (start-file-process-shell-command): * lisp/progmodes/compile.el (compilation-start): Use `with-connection-local-variables'. Do not set "/bin/sh" for remote buffers, trust settings of `shell-file-name'. (Bug#24338), (Bug#29723) * lisp/net/ange-ftp.el (ange-ftp-compress, ange-ftp-uncompress): Use `shell-command-switch'. * lisp/net/tramp-adb.el (tramp-adb-connection-local-default-profile): New defvar. Add it to connection-local profiles after loading "shell". * lisp/net/tramp-integration.el (tramp-compat): Require tramp-compat. (tramp-compat-exec-path): Do not declare anymore. (tramp-connection-local-safe-shell-file-names): New defvar. (tramp-connection-local-default-profile): New defconst. Activate it after loading "shell". (shell-file-name, shell-command-switch): Add safe-local-variable property. * lisp/net/tramp-sh.el (tramp-display-escape-sequence-regexp): Add tramp-autoload cookie. * test/lisp/files-x-tests.el (remote-shell-file-name): Add safe-local-variable property to remote-* variables. (tramp-connection-local-default-profile): Declare. (files-x-test-with-connection-local-variables): Rename from `files-x-test-with-connection-local-profiles'. Adapt implementation. * test/lisp/net/tramp-tests.el (tramp-test34-connection-local-variables): New test. (tramp-test34-explicit-shell-file-name): Run it also for tramp-adb. Bind connection-local-{profile,criteria}-alist. Use tramp-adb specific `shell-file-name'. Add safe-local-variable property to `explicit-shell-file-name' and `explicit-sh-args'.
2019-03-09 16:44:24 +01:00
;; Cleanup.
(put 'explicit-shell-file-name 'permanent-local nil)
(kill-buffer "*shell*"))))
;; `exec-path' was introduced in Emacs 27.1. `executable-find' has
;; changed the number of parameters, so we use `apply' for older
;; Emacsen.
(ert-deftest tramp-test35-exec-path ()
Implement command completion in remote shells. (Bug#31704) * doc/lispref/files.texi (Locating Files): Describe optional argument REMOTE of `executable-find'. (Magic File Names): Add `exec-path'. * doc/lispref/processes.texi (Subprocess Creation): Describe function `exec-path'. * doc/misc/tramp.texi (Remote programs): Explain refresh of search paths by `tramp-cleanup-this-connection'. * etc/NEWS: Mention 'exec-path' and 'executable-find'. * lisp/files.el (exec-path): New defun. (executable-find): Add optional argument REMOTE. * lisp/shell.el (shell-completion-vars): Set `comint-file-name-prefix'. (shell--command-completion-data): Use `(exec-path)'. (Bug#31704) * lisp/net/ange-ftp.el (exec-path): * lisp/net/tramp.el (tramp-file-name-for-operation): * lisp/net/tramp-adb.el (tramp-adb-file-name-handler-alist): * lisp/net/tramp-archive.el (tramp-archive-file-name-handler-alist): * lisp/net/tramp-gvfs.el (tramp-gvfs-file-name-handler-alist): * lisp/net/tramp-sh.el (tramp-sh-file-name-handler-alist): * lisp/net/tramp-smb.el (tramp-smb-file-name-handler-alist) <exec-path>: Add handler. * lisp/net/tramp-adb.el (tramp-adb-handle-exec-path): New defun. (tramp-adb-maybe-open-connection): Do not set "remote-path" connection property. * lisp/net/tramp-compat.el (tramp-compat-exec-path): New defun. * lisp/net/tramp-sh.el (tramp-sh-handle-exec-path): New defun. * lisp/net/tramp.el (tramp-eshell-directory-change): Use it. * test/lisp/net/tramp-archive-tests.el (tramp-archive-test38-make-nearby-temp-file) (tramp-archive-test41-file-system-info) (tramp-archive-test43-auto-load) (tramp-archive-test43-delay-load): Rename. * test/lisp/net/tramp-tests.el (tramp-test34-exec-path): New test. (tramp-test36-make-auto-save-file-name) (tramp-test37-find-backup-file-name) (tramp-test38-make-nearby-temp-file) (tramp-test39-special-characters) (tramp-test39-special-characters-with-stat) (tramp-test39-special-characters-with-perl) (tramp-test39-special-characters-with-ls, tramp-test40-utf8) (tramp-test40-utf8-with-stat, tramp-test40-utf8-with-perl) (tramp-test40-utf8-with-ls, tramp-test41-file-system-info) (tramp-test42-asynchronous-requests, tramp-test43-auto-load) (tramp-test43-delay-load, tramp-test43-recursive-load) (tramp-test43-remote-load-path, tramp-test44-unload): Rename.
2018-06-20 12:13:56 +02:00
"Check `exec-path' and `executable-find'."
(skip-unless (tramp--test-enabled))
(skip-unless (or (tramp--test-adb-p) (tramp--test-sh-p)))
;; Since Emacs 27.1.
(skip-unless (fboundp 'exec-path))
Implement command completion in remote shells. (Bug#31704) * doc/lispref/files.texi (Locating Files): Describe optional argument REMOTE of `executable-find'. (Magic File Names): Add `exec-path'. * doc/lispref/processes.texi (Subprocess Creation): Describe function `exec-path'. * doc/misc/tramp.texi (Remote programs): Explain refresh of search paths by `tramp-cleanup-this-connection'. * etc/NEWS: Mention 'exec-path' and 'executable-find'. * lisp/files.el (exec-path): New defun. (executable-find): Add optional argument REMOTE. * lisp/shell.el (shell-completion-vars): Set `comint-file-name-prefix'. (shell--command-completion-data): Use `(exec-path)'. (Bug#31704) * lisp/net/ange-ftp.el (exec-path): * lisp/net/tramp.el (tramp-file-name-for-operation): * lisp/net/tramp-adb.el (tramp-adb-file-name-handler-alist): * lisp/net/tramp-archive.el (tramp-archive-file-name-handler-alist): * lisp/net/tramp-gvfs.el (tramp-gvfs-file-name-handler-alist): * lisp/net/tramp-sh.el (tramp-sh-file-name-handler-alist): * lisp/net/tramp-smb.el (tramp-smb-file-name-handler-alist) <exec-path>: Add handler. * lisp/net/tramp-adb.el (tramp-adb-handle-exec-path): New defun. (tramp-adb-maybe-open-connection): Do not set "remote-path" connection property. * lisp/net/tramp-compat.el (tramp-compat-exec-path): New defun. * lisp/net/tramp-sh.el (tramp-sh-handle-exec-path): New defun. * lisp/net/tramp.el (tramp-eshell-directory-change): Use it. * test/lisp/net/tramp-archive-tests.el (tramp-archive-test38-make-nearby-temp-file) (tramp-archive-test41-file-system-info) (tramp-archive-test43-auto-load) (tramp-archive-test43-delay-load): Rename. * test/lisp/net/tramp-tests.el (tramp-test34-exec-path): New test. (tramp-test36-make-auto-save-file-name) (tramp-test37-find-backup-file-name) (tramp-test38-make-nearby-temp-file) (tramp-test39-special-characters) (tramp-test39-special-characters-with-stat) (tramp-test39-special-characters-with-perl) (tramp-test39-special-characters-with-ls, tramp-test40-utf8) (tramp-test40-utf8-with-stat, tramp-test40-utf8-with-perl) (tramp-test40-utf8-with-ls, tramp-test41-file-system-info) (tramp-test42-asynchronous-requests, tramp-test43-auto-load) (tramp-test43-delay-load, tramp-test43-recursive-load) (tramp-test43-remote-load-path, tramp-test44-unload): Rename.
2018-06-20 12:13:56 +02:00
(let ((tmp-name (tramp--test-make-temp-name))
(default-directory tramp-test-temporary-file-directory))
(unwind-protect
(progn
(should (consp (with-no-warnings (exec-path))))
;; Last element is the `exec-directory'.
(should
(string-equal
(car (last (with-no-warnings (exec-path))))
(file-remote-p default-directory 'localname)))
Implement command completion in remote shells. (Bug#31704) * doc/lispref/files.texi (Locating Files): Describe optional argument REMOTE of `executable-find'. (Magic File Names): Add `exec-path'. * doc/lispref/processes.texi (Subprocess Creation): Describe function `exec-path'. * doc/misc/tramp.texi (Remote programs): Explain refresh of search paths by `tramp-cleanup-this-connection'. * etc/NEWS: Mention 'exec-path' and 'executable-find'. * lisp/files.el (exec-path): New defun. (executable-find): Add optional argument REMOTE. * lisp/shell.el (shell-completion-vars): Set `comint-file-name-prefix'. (shell--command-completion-data): Use `(exec-path)'. (Bug#31704) * lisp/net/ange-ftp.el (exec-path): * lisp/net/tramp.el (tramp-file-name-for-operation): * lisp/net/tramp-adb.el (tramp-adb-file-name-handler-alist): * lisp/net/tramp-archive.el (tramp-archive-file-name-handler-alist): * lisp/net/tramp-gvfs.el (tramp-gvfs-file-name-handler-alist): * lisp/net/tramp-sh.el (tramp-sh-file-name-handler-alist): * lisp/net/tramp-smb.el (tramp-smb-file-name-handler-alist) <exec-path>: Add handler. * lisp/net/tramp-adb.el (tramp-adb-handle-exec-path): New defun. (tramp-adb-maybe-open-connection): Do not set "remote-path" connection property. * lisp/net/tramp-compat.el (tramp-compat-exec-path): New defun. * lisp/net/tramp-sh.el (tramp-sh-handle-exec-path): New defun. * lisp/net/tramp.el (tramp-eshell-directory-change): Use it. * test/lisp/net/tramp-archive-tests.el (tramp-archive-test38-make-nearby-temp-file) (tramp-archive-test41-file-system-info) (tramp-archive-test43-auto-load) (tramp-archive-test43-delay-load): Rename. * test/lisp/net/tramp-tests.el (tramp-test34-exec-path): New test. (tramp-test36-make-auto-save-file-name) (tramp-test37-find-backup-file-name) (tramp-test38-make-nearby-temp-file) (tramp-test39-special-characters) (tramp-test39-special-characters-with-stat) (tramp-test39-special-characters-with-perl) (tramp-test39-special-characters-with-ls, tramp-test40-utf8) (tramp-test40-utf8-with-stat, tramp-test40-utf8-with-perl) (tramp-test40-utf8-with-ls, tramp-test41-file-system-info) (tramp-test42-asynchronous-requests, tramp-test43-auto-load) (tramp-test43-delay-load, tramp-test43-recursive-load) (tramp-test43-remote-load-path, tramp-test44-unload): Rename.
2018-06-20 12:13:56 +02:00
;; The shell "sh" shall always exist.
(should (apply #'executable-find '("sh" remote)))
Implement command completion in remote shells. (Bug#31704) * doc/lispref/files.texi (Locating Files): Describe optional argument REMOTE of `executable-find'. (Magic File Names): Add `exec-path'. * doc/lispref/processes.texi (Subprocess Creation): Describe function `exec-path'. * doc/misc/tramp.texi (Remote programs): Explain refresh of search paths by `tramp-cleanup-this-connection'. * etc/NEWS: Mention 'exec-path' and 'executable-find'. * lisp/files.el (exec-path): New defun. (executable-find): Add optional argument REMOTE. * lisp/shell.el (shell-completion-vars): Set `comint-file-name-prefix'. (shell--command-completion-data): Use `(exec-path)'. (Bug#31704) * lisp/net/ange-ftp.el (exec-path): * lisp/net/tramp.el (tramp-file-name-for-operation): * lisp/net/tramp-adb.el (tramp-adb-file-name-handler-alist): * lisp/net/tramp-archive.el (tramp-archive-file-name-handler-alist): * lisp/net/tramp-gvfs.el (tramp-gvfs-file-name-handler-alist): * lisp/net/tramp-sh.el (tramp-sh-file-name-handler-alist): * lisp/net/tramp-smb.el (tramp-smb-file-name-handler-alist) <exec-path>: Add handler. * lisp/net/tramp-adb.el (tramp-adb-handle-exec-path): New defun. (tramp-adb-maybe-open-connection): Do not set "remote-path" connection property. * lisp/net/tramp-compat.el (tramp-compat-exec-path): New defun. * lisp/net/tramp-sh.el (tramp-sh-handle-exec-path): New defun. * lisp/net/tramp.el (tramp-eshell-directory-change): Use it. * test/lisp/net/tramp-archive-tests.el (tramp-archive-test38-make-nearby-temp-file) (tramp-archive-test41-file-system-info) (tramp-archive-test43-auto-load) (tramp-archive-test43-delay-load): Rename. * test/lisp/net/tramp-tests.el (tramp-test34-exec-path): New test. (tramp-test36-make-auto-save-file-name) (tramp-test37-find-backup-file-name) (tramp-test38-make-nearby-temp-file) (tramp-test39-special-characters) (tramp-test39-special-characters-with-stat) (tramp-test39-special-characters-with-perl) (tramp-test39-special-characters-with-ls, tramp-test40-utf8) (tramp-test40-utf8-with-stat, tramp-test40-utf8-with-perl) (tramp-test40-utf8-with-ls, tramp-test41-file-system-info) (tramp-test42-asynchronous-requests, tramp-test43-auto-load) (tramp-test43-delay-load, tramp-test43-recursive-load) (tramp-test43-remote-load-path, tramp-test44-unload): Rename.
2018-06-20 12:13:56 +02:00
;; Since the last element in `exec-path' is the current
;; directory, an executable file in that directory will be
;; found.
(write-region "foo" nil tmp-name)
(should (file-exists-p tmp-name))
(set-file-modes tmp-name #o777)
(should (file-executable-p tmp-name))
(should
(string-equal
(apply
#'executable-find `(,(file-name-nondirectory tmp-name) remote))
(file-remote-p tmp-name 'localname)))
Implement command completion in remote shells. (Bug#31704) * doc/lispref/files.texi (Locating Files): Describe optional argument REMOTE of `executable-find'. (Magic File Names): Add `exec-path'. * doc/lispref/processes.texi (Subprocess Creation): Describe function `exec-path'. * doc/misc/tramp.texi (Remote programs): Explain refresh of search paths by `tramp-cleanup-this-connection'. * etc/NEWS: Mention 'exec-path' and 'executable-find'. * lisp/files.el (exec-path): New defun. (executable-find): Add optional argument REMOTE. * lisp/shell.el (shell-completion-vars): Set `comint-file-name-prefix'. (shell--command-completion-data): Use `(exec-path)'. (Bug#31704) * lisp/net/ange-ftp.el (exec-path): * lisp/net/tramp.el (tramp-file-name-for-operation): * lisp/net/tramp-adb.el (tramp-adb-file-name-handler-alist): * lisp/net/tramp-archive.el (tramp-archive-file-name-handler-alist): * lisp/net/tramp-gvfs.el (tramp-gvfs-file-name-handler-alist): * lisp/net/tramp-sh.el (tramp-sh-file-name-handler-alist): * lisp/net/tramp-smb.el (tramp-smb-file-name-handler-alist) <exec-path>: Add handler. * lisp/net/tramp-adb.el (tramp-adb-handle-exec-path): New defun. (tramp-adb-maybe-open-connection): Do not set "remote-path" connection property. * lisp/net/tramp-compat.el (tramp-compat-exec-path): New defun. * lisp/net/tramp-sh.el (tramp-sh-handle-exec-path): New defun. * lisp/net/tramp.el (tramp-eshell-directory-change): Use it. * test/lisp/net/tramp-archive-tests.el (tramp-archive-test38-make-nearby-temp-file) (tramp-archive-test41-file-system-info) (tramp-archive-test43-auto-load) (tramp-archive-test43-delay-load): Rename. * test/lisp/net/tramp-tests.el (tramp-test34-exec-path): New test. (tramp-test36-make-auto-save-file-name) (tramp-test37-find-backup-file-name) (tramp-test38-make-nearby-temp-file) (tramp-test39-special-characters) (tramp-test39-special-characters-with-stat) (tramp-test39-special-characters-with-perl) (tramp-test39-special-characters-with-ls, tramp-test40-utf8) (tramp-test40-utf8-with-stat, tramp-test40-utf8-with-perl) (tramp-test40-utf8-with-ls, tramp-test41-file-system-info) (tramp-test42-asynchronous-requests, tramp-test43-auto-load) (tramp-test43-delay-load, tramp-test43-recursive-load) (tramp-test43-remote-load-path, tramp-test44-unload): Rename.
2018-06-20 12:13:56 +02:00
(should-not
(apply
#'executable-find
`(,(concat (file-name-nondirectory tmp-name) "foo") remote))))
Implement command completion in remote shells. (Bug#31704) * doc/lispref/files.texi (Locating Files): Describe optional argument REMOTE of `executable-find'. (Magic File Names): Add `exec-path'. * doc/lispref/processes.texi (Subprocess Creation): Describe function `exec-path'. * doc/misc/tramp.texi (Remote programs): Explain refresh of search paths by `tramp-cleanup-this-connection'. * etc/NEWS: Mention 'exec-path' and 'executable-find'. * lisp/files.el (exec-path): New defun. (executable-find): Add optional argument REMOTE. * lisp/shell.el (shell-completion-vars): Set `comint-file-name-prefix'. (shell--command-completion-data): Use `(exec-path)'. (Bug#31704) * lisp/net/ange-ftp.el (exec-path): * lisp/net/tramp.el (tramp-file-name-for-operation): * lisp/net/tramp-adb.el (tramp-adb-file-name-handler-alist): * lisp/net/tramp-archive.el (tramp-archive-file-name-handler-alist): * lisp/net/tramp-gvfs.el (tramp-gvfs-file-name-handler-alist): * lisp/net/tramp-sh.el (tramp-sh-file-name-handler-alist): * lisp/net/tramp-smb.el (tramp-smb-file-name-handler-alist) <exec-path>: Add handler. * lisp/net/tramp-adb.el (tramp-adb-handle-exec-path): New defun. (tramp-adb-maybe-open-connection): Do not set "remote-path" connection property. * lisp/net/tramp-compat.el (tramp-compat-exec-path): New defun. * lisp/net/tramp-sh.el (tramp-sh-handle-exec-path): New defun. * lisp/net/tramp.el (tramp-eshell-directory-change): Use it. * test/lisp/net/tramp-archive-tests.el (tramp-archive-test38-make-nearby-temp-file) (tramp-archive-test41-file-system-info) (tramp-archive-test43-auto-load) (tramp-archive-test43-delay-load): Rename. * test/lisp/net/tramp-tests.el (tramp-test34-exec-path): New test. (tramp-test36-make-auto-save-file-name) (tramp-test37-find-backup-file-name) (tramp-test38-make-nearby-temp-file) (tramp-test39-special-characters) (tramp-test39-special-characters-with-stat) (tramp-test39-special-characters-with-perl) (tramp-test39-special-characters-with-ls, tramp-test40-utf8) (tramp-test40-utf8-with-stat, tramp-test40-utf8-with-perl) (tramp-test40-utf8-with-ls, tramp-test41-file-system-info) (tramp-test42-asynchronous-requests, tramp-test43-auto-load) (tramp-test43-delay-load, tramp-test43-recursive-load) (tramp-test43-remote-load-path, tramp-test44-unload): Rename.
2018-06-20 12:13:56 +02:00
;; Cleanup.
(ignore-errors (delete-file tmp-name)))))
;; This test is inspired by Bug#33781.
;; `exec-path' was introduced in Emacs 27.1. `executable-find' has
;; changed the number of parameters, so we use `apply' for older
;; Emacsen.
(ert-deftest tramp-test35-remote-path ()
"Check loooong `tramp-remote-path'."
(skip-unless (tramp--test-enabled))
(skip-unless (tramp--test-sh-p))
;; Since Emacs 27.1.
(skip-unless (fboundp 'exec-path))
(let* ((tmp-name (tramp--test-make-temp-name))
(default-directory tramp-test-temporary-file-directory)
(orig-exec-path (with-no-warnings (exec-path)))
(tramp-remote-path tramp-remote-path)
(orig-tramp-remote-path tramp-remote-path))
(unwind-protect
(progn
;; Non existing directories are removed.
(setq tramp-remote-path
(cons (file-remote-p tmp-name 'localname) tramp-remote-path))
(tramp-cleanup-connection
(tramp-dissect-file-name tramp-test-temporary-file-directory)
'keep-debug 'keep-password)
(should (equal (with-no-warnings (exec-path)) orig-exec-path))
(setq tramp-remote-path orig-tramp-remote-path)
;; Double entries are removed.
(setq tramp-remote-path (append '("/" "/") tramp-remote-path))
(tramp-cleanup-connection
(tramp-dissect-file-name tramp-test-temporary-file-directory)
'keep-debug 'keep-password)
(should
(equal (with-no-warnings (exec-path)) (cons "/" orig-exec-path)))
(setq tramp-remote-path orig-tramp-remote-path)
;; We make a super long `tramp-remote-path'.
(make-directory tmp-name)
(should (file-directory-p tmp-name))
(while (< (length (mapconcat #'identity orig-exec-path ":")) 5000)
(let ((dir (make-temp-file (file-name-as-directory tmp-name) 'dir)))
(should (file-directory-p dir))
(setq tramp-remote-path
(cons (file-remote-p dir 'localname) tramp-remote-path)
orig-exec-path
(cons (file-remote-p dir 'localname) orig-exec-path))))
(tramp-cleanup-connection
(tramp-dissect-file-name tramp-test-temporary-file-directory)
'keep-debug 'keep-password)
(should (equal (with-no-warnings (exec-path)) orig-exec-path))
(should
(string-equal
;; Ignore trailing newline.
(substring (shell-command-to-string "echo $PATH") nil -1)
;; The last element of `exec-path' is `exec-directory'.
(mapconcat #'identity (butlast orig-exec-path) ":")))
;; The shell "sh" shall always exist.
(should (apply #'executable-find '("sh" remote))))
;; Cleanup.
(tramp-cleanup-connection
(tramp-dissect-file-name tramp-test-temporary-file-directory)
'keep-debug 'keep-password)
(setq tramp-remote-path orig-tramp-remote-path)
(ignore-errors (delete-directory tmp-name 'recursive)))))
(ert-deftest tramp-test36-vc-registered ()
"Check `vc-registered'."
:tags '(:expensive-test)
(skip-unless (tramp--test-enabled))
Add `make-nearby-temp-file' and `temporary-file-directory' * doc/lispref/files.texi (Unique File Names): Introduce `make-nearby-temp-file' and `temporary-file-directory'. (Magic File Names): Mention `make-nearby-temp-file' and `temporary-file-directory'. * etc/NEWS (provided): Mention `make-nearby-temp-file' and `temporary-file-directory'. * lisp/files.el (mounted-file-systems): New defcustom. (temporary-file-directory, make-nearby-temp-file): New defuns. (normal-backup-enable-predicate): Fix docstring. * lisp/net/tramp-adb.el (tramp-adb-file-name-handler-alist): * lisp/net/tramp-gvfs.el (tramp-gvfs-file-name-handler-alist): * lisp/net/tramp-sh.el (tramp-sh-file-name-handler-alist): * lisp/net/tramp-smb.el (tramp-smb-file-name-handler-alist): <make-nearby-temp-file, temporary-file-directory>: Add handler. * lisp/net/tramp.el (tramp-file-name-for-operation): Add `make-nearby-temp-file' and `temporary-file-directory'. (tramp-get-remote-tmpdir): Remove compatibility code. (tramp-handle-temporary-file-directory) (tramp-handle-make-nearby-temp-file): New defuns. * lisp/org/ob-core.el (org-babel-local-file-name): * lisp/progmodes/gud.el (gud-common-init): * lisp/vc/vc-hooks.el (vc-user-login-name): Use `file-remote-p'. * lisp/vc/vc-git.el (vc-git-checkin): Handle remote log message. * test/lisp/net/tramp-tests.el (tramp-test06-directory-file-name): Check `tramp--test-enabled'. (tramp-test18-file-attributes): Add tests for `file-ownership-preserved-p'. (tramp-test27-start-file-process, tramp-test28-shell-command): Reduce timeouts in `accept-process-output'. (tramp-test--shell-command-to-string-asynchronously): Add timeout. (tramp-test29-environment-variables): Remove additional sleep calls. (tramp-test32-make-nearby-temp-file): New test. (tramp--test-special-characters, tramp--test-utf8): Adapt docstring. (tramp-test33-special-characters) (tramp-test33-special-characters-with-stat) (tramp-test33-special-characters-with-perl) (tramp-test33-special-characters-with-ls, tramp-test34-utf8) (tramp-test34-utf8-with-stat, tramp-test34-utf8-with-perl) (tramp-test34-utf8-with-ls) (tramp-test35-asynchronous-requests) (tramp-test36-recursive-load, tramp-test37-unload): Rename. (tramp--test-ftp-p): Simplify check. (tramp--test-sh-p): New defun. (tramp-test20-file-modes, tramp-test22-file-times) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command) (tramp-test29-environment-variables) (tramp-test30-vc-registered) (tramp-test33-special-characters-with-stat) (tramp-test33-special-characters-with-perl) (tramp-test33-special-characters-with-ls) (tramp-test34-utf8-with-stat, tramp-test34-utf8-with-perl) (tramp-test34-utf8-with-ls) (tramp-test35-asynchronous-requests): Use it.
2016-08-07 13:57:23 +02:00
(skip-unless (tramp--test-sh-p))
(dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
Stronger check for Tramp method * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-rclone.el (tramp-rclone-maybe-open-connection): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-maybe-open-connection): Use `tramp-get-connection-name'. * lisp/net/tramp-sh.el (tramp-sh-handle-make-symbolic-link): * lisp/net/tramp-smb.el (tramp-smb-handle-make-symbolic-link): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-handle-make-symbolic-link): Don't check remote TARGET. * lisp/net/tramp.el (tramp-dissect-file-name): Check for proper method. (tramp-file-name-for-operation): Take only 2nd argument into account for file name handler. (tramp-file-name-handler): Suppress checks for `file-remote-p'. * test/lisp/net/tramp-archive-tests.el (tramp-archive-test02-file-name-dissect): Suppress check for wrong method. * test/lisp/net/tramp-tests.el (tramp--test-instrument-test-case): Dump *all* Tramp buffers. (tramp-test02-file-name-dissect) (tramp-test02-file-name-dissect-simplified) (tramp-test02-file-name-dissect-separate): Check also wrong method. (tramp-test03-file-name-defaults): Check, that the respective Tramp package is loaded. (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name) (tramp-test06-directory-file-name, tramp-test44-auto-load): Suppress check for wrong method. (tramp-test30-make-process): Remove instrumentation code. (tramp-test31-interrupt-process, tramp-test36-vc-registered): Guarantee that connection is established prior starting process.
2019-06-04 12:51:45 +02:00
;; We must use `file-truename' for the temporary directory, in
;; order to establish the connection prior running an asynchronous
;; process.
(let* ((default-directory
(file-truename tramp-test-temporary-file-directory))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(tmp-name1 (tramp--test-make-temp-name nil quoted))
(tmp-name2 (expand-file-name "foo" tmp-name1))
(tramp-remote-process-environment tramp-remote-process-environment)
(vc-handled-backends
(with-parsed-tramp-file-name tramp-test-temporary-file-directory nil
(cond
((tramp-find-executable
v vc-git-program (tramp-get-remote-path v))
'(Git))
((tramp-find-executable
v vc-hg-program (tramp-get-remote-path v))
'(Hg))
((tramp-find-executable
v vc-bzr-program (tramp-get-remote-path v))
(setq tramp-remote-process-environment
(cons (format "BZR_HOME=%s"
(file-remote-p tmp-name1 'localname))
tramp-remote-process-environment))
;; We must force a reconnect, in order to activate $BZR_HOME.
(tramp-cleanup-connection
(tramp-dissect-file-name tramp-test-temporary-file-directory)
'keep-debug 'keep-password)
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
'(Bzr))
(t nil))))
;; Suppress nasty messages.
(inhibit-message t))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(skip-unless vc-handled-backends)
(unless quoted (tramp--test-message "%s" vc-handled-backends))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(unwind-protect
(progn
(make-directory tmp-name1)
(write-region "foo" nil tmp-name2)
(should (file-directory-p tmp-name1))
(should (file-exists-p tmp-name2))
(should-not (vc-registered tmp-name1))
(should-not (vc-registered tmp-name2))
(let ((default-directory tmp-name1))
;; Create empty repository, and register the file.
;; Sometimes, creation of repository fails (bzr!); we
;; skip the test then.
(condition-case nil
(vc-create-repo (car vc-handled-backends))
(error (ert-skip "`vc-create-repo' not supported")))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; The structure of VC-FILESET is not documented. Let's
;; hope it won't change.
(condition-case nil
(vc-register
(list (car vc-handled-backends)
(list (file-name-nondirectory tmp-name2))))
;; `vc-register' has changed its arguments in Emacs
;; 25.1. Let's skip it for older Emacsen.
Extend file-name-non-special * lisp/files.el (insert-file-contents-literally): Bind `inhibit-file-name-handlers' the default way. (file-name-non-special): Rework, mainly for operations with two file name arguments. (file-name-unquote-non-special): New defsubst. (file-name-unquote): Use it. * test/lisp/files-tests.el (files-test-bug-18141): Skip if needed. (files-tests--with-temp-non-special): Add docstring. Delete also `non-special-name' if the file/directory exists. (files-tests--special-file-name-extension) (files-tests--special-file-name-regexp): New defconst. (files-tests--special-file-name-handler, files-tests--new-name): New defuns. (files-tests--with-temp-non-special-and-file-name-handler): New macro. (files-tests-file-name-non-special-access-file) (files-tests-file-name-non-special-add-name-to-file) (files-tests-file-name-non-special-byte-compiler-base-file-name) (files-tests-file-name-non-special-copy-directory) (files-tests-file-name-non-special-copy-file) (files-tests-file-name-non-special-delete-directory) (files-tests-file-name-non-special-delete-file) (files-tests-file-name-non-special-diff-latest-backup-file) (files-tests-file-name-non-special-directory-file-name) (files-tests-file-name-non-special-directory-files) (files-tests-file-name-non-special-directory-files-and-attributes) (files-tests-file-name-non-special-dired-compress-handler) (files-tests-file-name-non-special-dired-uncache) (files-tests-file-name-non-special-expand-file-name) (files-tests-file-name-non-special-file-accessible-directory-p) (files-tests-file-name-non-special-file-acl) (files-tests-file-name-non-special-file-attributes) (files-tests-file-name-non-special-file-directory-p) (files-tests-file-name-non-special-file-equal-p) (files-tests-file-name-non-special-file-executable-p) (files-tests-file-name-non-special-file-exists-p) (files-tests-file-name-non-special-file-in-directory-p) (files-tests-file-name-non-special-file-local-copy) (files-tests-file-name-non-special-file-modes) (files-tests-file-name-non-special-file-name-all-completions) (files-tests-file-name-non-special-file-name-as-directory) (files-tests-file-name-non-special-file-name-case-insensitive-p) (files-tests-file-name-non-special-file-name-completion) (files-tests-file-name-non-special-file-name-directory) (files-tests-file-name-non-special-file-name-nondirectory) (files-tests-file-name-non-special-file-name-sans-versions) (files-tests-file-name-non-special-file-newer-than-file-p) (files-tests-file-name-non-special-notify-handlers) (files-tests-file-name-non-special-file-ownership-preserved-p) (files-tests-file-name-non-special-file-readable-p) (files-tests-file-name-non-special-file-regular-p) (files-tests-file-name-non-special-file-remote-p) (files-tests-file-name-non-special-file-selinux-context) (files-tests-file-name-non-special-file-symlink-p) (files-tests-file-name-non-special-file-truename) (files-tests-file-name-non-special-file-writable-p) (files-tests-file-name-non-special-find-backup-file-name) (files-tests-file-name-non-special-get-file-buffer) (files-tests-file-name-non-special-insert-directory) (files-tests-file-name-non-special-insert-file-contents) (files-tests-file-name-non-special-load) (files-tests-file-name-non-special-make-auto-save-file-name) (files-tests-file-name-non-special-make-directory) (files-tests-file-name-non-special-make-directory-internal) (files-tests-file-name-non-special-make-symbolic-link) (files-tests-file-name-non-special-rename-file) (files-tests-file-name-non-special-set-file-acl) (files-tests-file-name-non-special-set-file-modes) (files-tests-file-name-non-special-set-file-selinux-context) (files-tests-file-name-non-special-set-file-times) (files-tests-file-name-non-special-set-visited-file-modtime) (files-tests-file-name-non-special-shell-command) (files-tests-file-name-non-special-start-file-process) (files-tests-file-name-non-special-substitute-in-file-name) (files-tests-file-name-non-special-temporary-file-directory) (files-tests-file-name-non-special-unhandled-file-name-directory) (files-tests-file-name-non-special-vc-registered) (files-tests-file-name-non-special-write-region): Extends tests to quoted file names, which would require a file name handler if unquoted. (files-test-no-file-write-contents): Make test more robust. * test/lisp/net/tramp-tests.el (tramp-test21-file-links): Adapt test. (tramp--test-emacs25-p): New defun. (tramp-test34-vc-registered): Use it.
2018-06-03 14:30:41 +02:00
(error (skip-unless (tramp--test-emacs25-p))))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; vc-git uses an own process sentinel, Tramp's sentinel
;; for flushing the cache isn't used.
(dired-uncache (concat (file-remote-p default-directory) "/"))
(should (vc-registered (file-name-nondirectory tmp-name2)))))
;; Cleanup.
(ignore-errors (delete-directory tmp-name1 'recursive))))))
(ert-deftest tramp-test37-make-auto-save-file-name ()
"Check `make-auto-save-file-name'."
(skip-unless (tramp--test-enabled))
(dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(let ((tmp-name1 (tramp--test-make-temp-name nil quoted))
(tmp-name2 (tramp--test-make-temp-name nil quoted)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(unwind-protect
(progn
;; Use default `auto-save-file-name-transforms' mechanism.
(let (tramp-auto-save-directory)
(with-temp-buffer
(setq buffer-file-name tmp-name1)
(should
(string-equal
(make-auto-save-file-name)
;; This is taken from original `make-auto-save-file-name'.
;; We call `convert-standard-filename', because on
;; MS Windows the (local) colons must be replaced by
;; exclamation marks.
(convert-standard-filename
(expand-file-name
(format
"#%s#"
(subst-char-in-string
?/ ?! (replace-regexp-in-string "!" "!!" tmp-name1)))
temporary-file-directory))))))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; No mapping.
(let (tramp-auto-save-directory auto-save-file-name-transforms)
(with-temp-buffer
(setq buffer-file-name tmp-name1)
(should
(string-equal
(make-auto-save-file-name)
(funcall
(if quoted #'tramp-compat-file-name-quote #'identity)
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(expand-file-name
(format "#%s#" (file-name-nondirectory tmp-name1))
tramp-test-temporary-file-directory))))))
;; Use default `tramp-auto-save-directory' mechanism.
(let ((tramp-auto-save-directory tmp-name2))
(with-temp-buffer
(setq buffer-file-name tmp-name1)
(should
(string-equal
(make-auto-save-file-name)
;; This is taken from Tramp.
(expand-file-name
(format
"#%s#"
(tramp-subst-strs-in-string
'(("_" . "|")
("/" . "_a")
(":" . "_b")
("|" . "__")
("[" . "_l")
("]" . "_r"))
(tramp-compat-file-name-unquote tmp-name1)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
tmp-name2)))
(should (file-directory-p tmp-name2))))
;; Relative file names shall work, too.
(let ((tramp-auto-save-directory "."))
(with-temp-buffer
(setq buffer-file-name tmp-name1
default-directory tmp-name2)
(should
(string-equal
(make-auto-save-file-name)
;; This is taken from Tramp.
(expand-file-name
(format
"#%s#"
(tramp-subst-strs-in-string
'(("_" . "|")
("/" . "_a")
(":" . "_b")
("|" . "__")
("[" . "_l")
("]" . "_r"))
(tramp-compat-file-name-unquote tmp-name1)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
tmp-name2)))
(should (file-directory-p tmp-name2)))))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; Cleanup.
(ignore-errors (delete-file tmp-name1))
(ignore-errors (delete-directory tmp-name2 'recursive))))))
(ert-deftest tramp-test38-find-backup-file-name ()
"Check `find-backup-file-name'."
(skip-unless (tramp--test-enabled))
(dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
(let ((tmp-name1 (tramp--test-make-temp-name nil quoted))
(tmp-name2 (tramp--test-make-temp-name nil quoted))
;; These settings are not used by Tramp, so we ignore them.
version-control delete-old-versions
(kept-old-versions (default-toplevel-value 'kept-old-versions))
(kept-new-versions (default-toplevel-value 'kept-new-versions)))
(unwind-protect
;; Use default `backup-directory-alist' mechanism.
(let (backup-directory-alist tramp-backup-directory-alist)
(should
(equal
(find-backup-file-name tmp-name1)
(list
(funcall
(if quoted #'tramp-compat-file-name-quote #'identity)
(expand-file-name
(format "%s~" (file-name-nondirectory tmp-name1))
tramp-test-temporary-file-directory)))))))
(unwind-protect
;; Map `backup-directory-alist'.
(let ((backup-directory-alist `(("." . ,tmp-name2)))
tramp-backup-directory-alist)
(should
(equal
(find-backup-file-name tmp-name1)
(list
(funcall
(if quoted #'tramp-compat-file-name-quote #'identity)
(expand-file-name
(format
"%s~"
;; This is taken from `make-backup-file-name-1'. We
;; call `convert-standard-filename', because on MS
;; Windows the (local) colons must be replaced by
;; exclamation marks.
(subst-char-in-string
?/ ?!
(replace-regexp-in-string
"!" "!!" (convert-standard-filename tmp-name1))))
tmp-name2)))))
;; The backup directory is created.
(should (file-directory-p tmp-name2)))
;; Cleanup.
(ignore-errors (delete-directory tmp-name2 'recursive)))
(unwind-protect
;; Map `tramp-backup-directory-alist'.
(let ((tramp-backup-directory-alist `(("." . ,tmp-name2)))
backup-directory-alist)
(should
(equal
(find-backup-file-name tmp-name1)
(list
(funcall
(if quoted #'tramp-compat-file-name-quote #'identity)
(expand-file-name
(format
"%s~"
;; This is taken from `make-backup-file-name-1'. We
;; call `convert-standard-filename', because on MS
;; Windows the (local) colons must be replaced by
;; exclamation marks.
(subst-char-in-string
?/ ?!
(replace-regexp-in-string
"!" "!!" (convert-standard-filename tmp-name1))))
tmp-name2)))))
;; The backup directory is created.
(should (file-directory-p tmp-name2)))
;; Cleanup.
(ignore-errors (delete-directory tmp-name2 'recursive)))
(unwind-protect
;; Map `tramp-backup-directory-alist' with local file name.
(let ((tramp-backup-directory-alist
`(("." . ,(file-remote-p tmp-name2 'localname))))
backup-directory-alist)
(should
(equal
(find-backup-file-name tmp-name1)
(list
(funcall
(if quoted #'tramp-compat-file-name-quote #'identity)
(expand-file-name
(format
"%s~"
;; This is taken from `make-backup-file-name-1'. We
;; call `convert-standard-filename', because on MS
;; Windows the (local) colons must be replaced by
;; exclamation marks.
(subst-char-in-string
?/ ?!
(replace-regexp-in-string
"!" "!!" (convert-standard-filename tmp-name1))))
tmp-name2)))))
;; The backup directory is created.
(should (file-directory-p tmp-name2)))
;; Cleanup.
(ignore-errors (delete-directory tmp-name2 'recursive))))))
;; The functions were introduced in Emacs 26.1.
(ert-deftest tramp-test39-make-nearby-temp-file ()
Add `make-nearby-temp-file' and `temporary-file-directory' * doc/lispref/files.texi (Unique File Names): Introduce `make-nearby-temp-file' and `temporary-file-directory'. (Magic File Names): Mention `make-nearby-temp-file' and `temporary-file-directory'. * etc/NEWS (provided): Mention `make-nearby-temp-file' and `temporary-file-directory'. * lisp/files.el (mounted-file-systems): New defcustom. (temporary-file-directory, make-nearby-temp-file): New defuns. (normal-backup-enable-predicate): Fix docstring. * lisp/net/tramp-adb.el (tramp-adb-file-name-handler-alist): * lisp/net/tramp-gvfs.el (tramp-gvfs-file-name-handler-alist): * lisp/net/tramp-sh.el (tramp-sh-file-name-handler-alist): * lisp/net/tramp-smb.el (tramp-smb-file-name-handler-alist): <make-nearby-temp-file, temporary-file-directory>: Add handler. * lisp/net/tramp.el (tramp-file-name-for-operation): Add `make-nearby-temp-file' and `temporary-file-directory'. (tramp-get-remote-tmpdir): Remove compatibility code. (tramp-handle-temporary-file-directory) (tramp-handle-make-nearby-temp-file): New defuns. * lisp/org/ob-core.el (org-babel-local-file-name): * lisp/progmodes/gud.el (gud-common-init): * lisp/vc/vc-hooks.el (vc-user-login-name): Use `file-remote-p'. * lisp/vc/vc-git.el (vc-git-checkin): Handle remote log message. * test/lisp/net/tramp-tests.el (tramp-test06-directory-file-name): Check `tramp--test-enabled'. (tramp-test18-file-attributes): Add tests for `file-ownership-preserved-p'. (tramp-test27-start-file-process, tramp-test28-shell-command): Reduce timeouts in `accept-process-output'. (tramp-test--shell-command-to-string-asynchronously): Add timeout. (tramp-test29-environment-variables): Remove additional sleep calls. (tramp-test32-make-nearby-temp-file): New test. (tramp--test-special-characters, tramp--test-utf8): Adapt docstring. (tramp-test33-special-characters) (tramp-test33-special-characters-with-stat) (tramp-test33-special-characters-with-perl) (tramp-test33-special-characters-with-ls, tramp-test34-utf8) (tramp-test34-utf8-with-stat, tramp-test34-utf8-with-perl) (tramp-test34-utf8-with-ls) (tramp-test35-asynchronous-requests) (tramp-test36-recursive-load, tramp-test37-unload): Rename. (tramp--test-ftp-p): Simplify check. (tramp--test-sh-p): New defun. (tramp-test20-file-modes, tramp-test22-file-times) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command) (tramp-test29-environment-variables) (tramp-test30-vc-registered) (tramp-test33-special-characters-with-stat) (tramp-test33-special-characters-with-perl) (tramp-test33-special-characters-with-ls) (tramp-test34-utf8-with-stat, tramp-test34-utf8-with-perl) (tramp-test34-utf8-with-ls) (tramp-test35-asynchronous-requests): Use it.
2016-08-07 13:57:23 +02:00
"Check `make-nearby-temp-file' and `temporary-file-directory'."
(skip-unless (tramp--test-enabled))
;; Since Emacs 26.1.
(skip-unless
(and (fboundp 'make-nearby-temp-file) (fboundp 'temporary-file-directory)))
Add `make-nearby-temp-file' and `temporary-file-directory' * doc/lispref/files.texi (Unique File Names): Introduce `make-nearby-temp-file' and `temporary-file-directory'. (Magic File Names): Mention `make-nearby-temp-file' and `temporary-file-directory'. * etc/NEWS (provided): Mention `make-nearby-temp-file' and `temporary-file-directory'. * lisp/files.el (mounted-file-systems): New defcustom. (temporary-file-directory, make-nearby-temp-file): New defuns. (normal-backup-enable-predicate): Fix docstring. * lisp/net/tramp-adb.el (tramp-adb-file-name-handler-alist): * lisp/net/tramp-gvfs.el (tramp-gvfs-file-name-handler-alist): * lisp/net/tramp-sh.el (tramp-sh-file-name-handler-alist): * lisp/net/tramp-smb.el (tramp-smb-file-name-handler-alist): <make-nearby-temp-file, temporary-file-directory>: Add handler. * lisp/net/tramp.el (tramp-file-name-for-operation): Add `make-nearby-temp-file' and `temporary-file-directory'. (tramp-get-remote-tmpdir): Remove compatibility code. (tramp-handle-temporary-file-directory) (tramp-handle-make-nearby-temp-file): New defuns. * lisp/org/ob-core.el (org-babel-local-file-name): * lisp/progmodes/gud.el (gud-common-init): * lisp/vc/vc-hooks.el (vc-user-login-name): Use `file-remote-p'. * lisp/vc/vc-git.el (vc-git-checkin): Handle remote log message. * test/lisp/net/tramp-tests.el (tramp-test06-directory-file-name): Check `tramp--test-enabled'. (tramp-test18-file-attributes): Add tests for `file-ownership-preserved-p'. (tramp-test27-start-file-process, tramp-test28-shell-command): Reduce timeouts in `accept-process-output'. (tramp-test--shell-command-to-string-asynchronously): Add timeout. (tramp-test29-environment-variables): Remove additional sleep calls. (tramp-test32-make-nearby-temp-file): New test. (tramp--test-special-characters, tramp--test-utf8): Adapt docstring. (tramp-test33-special-characters) (tramp-test33-special-characters-with-stat) (tramp-test33-special-characters-with-perl) (tramp-test33-special-characters-with-ls, tramp-test34-utf8) (tramp-test34-utf8-with-stat, tramp-test34-utf8-with-perl) (tramp-test34-utf8-with-ls) (tramp-test35-asynchronous-requests) (tramp-test36-recursive-load, tramp-test37-unload): Rename. (tramp--test-ftp-p): Simplify check. (tramp--test-sh-p): New defun. (tramp-test20-file-modes, tramp-test22-file-times) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command) (tramp-test29-environment-variables) (tramp-test30-vc-registered) (tramp-test33-special-characters-with-stat) (tramp-test33-special-characters-with-perl) (tramp-test33-special-characters-with-ls) (tramp-test34-utf8-with-stat, tramp-test34-utf8-with-perl) (tramp-test34-utf8-with-ls) (tramp-test35-asynchronous-requests): Use it.
2016-08-07 13:57:23 +02:00
;; `make-nearby-temp-file' and `temporary-file-directory' exists
;; since Emacs 26.1. We don't want to see compiler warnings for
;; older Emacsen.
Add `make-nearby-temp-file' and `temporary-file-directory' * doc/lispref/files.texi (Unique File Names): Introduce `make-nearby-temp-file' and `temporary-file-directory'. (Magic File Names): Mention `make-nearby-temp-file' and `temporary-file-directory'. * etc/NEWS (provided): Mention `make-nearby-temp-file' and `temporary-file-directory'. * lisp/files.el (mounted-file-systems): New defcustom. (temporary-file-directory, make-nearby-temp-file): New defuns. (normal-backup-enable-predicate): Fix docstring. * lisp/net/tramp-adb.el (tramp-adb-file-name-handler-alist): * lisp/net/tramp-gvfs.el (tramp-gvfs-file-name-handler-alist): * lisp/net/tramp-sh.el (tramp-sh-file-name-handler-alist): * lisp/net/tramp-smb.el (tramp-smb-file-name-handler-alist): <make-nearby-temp-file, temporary-file-directory>: Add handler. * lisp/net/tramp.el (tramp-file-name-for-operation): Add `make-nearby-temp-file' and `temporary-file-directory'. (tramp-get-remote-tmpdir): Remove compatibility code. (tramp-handle-temporary-file-directory) (tramp-handle-make-nearby-temp-file): New defuns. * lisp/org/ob-core.el (org-babel-local-file-name): * lisp/progmodes/gud.el (gud-common-init): * lisp/vc/vc-hooks.el (vc-user-login-name): Use `file-remote-p'. * lisp/vc/vc-git.el (vc-git-checkin): Handle remote log message. * test/lisp/net/tramp-tests.el (tramp-test06-directory-file-name): Check `tramp--test-enabled'. (tramp-test18-file-attributes): Add tests for `file-ownership-preserved-p'. (tramp-test27-start-file-process, tramp-test28-shell-command): Reduce timeouts in `accept-process-output'. (tramp-test--shell-command-to-string-asynchronously): Add timeout. (tramp-test29-environment-variables): Remove additional sleep calls. (tramp-test32-make-nearby-temp-file): New test. (tramp--test-special-characters, tramp--test-utf8): Adapt docstring. (tramp-test33-special-characters) (tramp-test33-special-characters-with-stat) (tramp-test33-special-characters-with-perl) (tramp-test33-special-characters-with-ls, tramp-test34-utf8) (tramp-test34-utf8-with-stat, tramp-test34-utf8-with-perl) (tramp-test34-utf8-with-ls) (tramp-test35-asynchronous-requests) (tramp-test36-recursive-load, tramp-test37-unload): Rename. (tramp--test-ftp-p): Simplify check. (tramp--test-sh-p): New defun. (tramp-test20-file-modes, tramp-test22-file-times) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command) (tramp-test29-environment-variables) (tramp-test30-vc-registered) (tramp-test33-special-characters-with-stat) (tramp-test33-special-characters-with-perl) (tramp-test33-special-characters-with-ls) (tramp-test34-utf8-with-stat, tramp-test34-utf8-with-perl) (tramp-test34-utf8-with-ls) (tramp-test35-asynchronous-requests): Use it.
2016-08-07 13:57:23 +02:00
(let ((default-directory tramp-test-temporary-file-directory)
tmp-file)
2016-08-21 04:17:30 -07:00
;; The remote host shall know a temporary file directory.
(should (stringp (with-no-warnings (temporary-file-directory))))
Add `make-nearby-temp-file' and `temporary-file-directory' * doc/lispref/files.texi (Unique File Names): Introduce `make-nearby-temp-file' and `temporary-file-directory'. (Magic File Names): Mention `make-nearby-temp-file' and `temporary-file-directory'. * etc/NEWS (provided): Mention `make-nearby-temp-file' and `temporary-file-directory'. * lisp/files.el (mounted-file-systems): New defcustom. (temporary-file-directory, make-nearby-temp-file): New defuns. (normal-backup-enable-predicate): Fix docstring. * lisp/net/tramp-adb.el (tramp-adb-file-name-handler-alist): * lisp/net/tramp-gvfs.el (tramp-gvfs-file-name-handler-alist): * lisp/net/tramp-sh.el (tramp-sh-file-name-handler-alist): * lisp/net/tramp-smb.el (tramp-smb-file-name-handler-alist): <make-nearby-temp-file, temporary-file-directory>: Add handler. * lisp/net/tramp.el (tramp-file-name-for-operation): Add `make-nearby-temp-file' and `temporary-file-directory'. (tramp-get-remote-tmpdir): Remove compatibility code. (tramp-handle-temporary-file-directory) (tramp-handle-make-nearby-temp-file): New defuns. * lisp/org/ob-core.el (org-babel-local-file-name): * lisp/progmodes/gud.el (gud-common-init): * lisp/vc/vc-hooks.el (vc-user-login-name): Use `file-remote-p'. * lisp/vc/vc-git.el (vc-git-checkin): Handle remote log message. * test/lisp/net/tramp-tests.el (tramp-test06-directory-file-name): Check `tramp--test-enabled'. (tramp-test18-file-attributes): Add tests for `file-ownership-preserved-p'. (tramp-test27-start-file-process, tramp-test28-shell-command): Reduce timeouts in `accept-process-output'. (tramp-test--shell-command-to-string-asynchronously): Add timeout. (tramp-test29-environment-variables): Remove additional sleep calls. (tramp-test32-make-nearby-temp-file): New test. (tramp--test-special-characters, tramp--test-utf8): Adapt docstring. (tramp-test33-special-characters) (tramp-test33-special-characters-with-stat) (tramp-test33-special-characters-with-perl) (tramp-test33-special-characters-with-ls, tramp-test34-utf8) (tramp-test34-utf8-with-stat, tramp-test34-utf8-with-perl) (tramp-test34-utf8-with-ls) (tramp-test35-asynchronous-requests) (tramp-test36-recursive-load, tramp-test37-unload): Rename. (tramp--test-ftp-p): Simplify check. (tramp--test-sh-p): New defun. (tramp-test20-file-modes, tramp-test22-file-times) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command) (tramp-test29-environment-variables) (tramp-test30-vc-registered) (tramp-test33-special-characters-with-stat) (tramp-test33-special-characters-with-perl) (tramp-test33-special-characters-with-ls) (tramp-test34-utf8-with-stat, tramp-test34-utf8-with-perl) (tramp-test34-utf8-with-ls) (tramp-test35-asynchronous-requests): Use it.
2016-08-07 13:57:23 +02:00
(should
(string-equal
(file-remote-p default-directory)
(file-remote-p (with-no-warnings (temporary-file-directory)))))
Add `make-nearby-temp-file' and `temporary-file-directory' * doc/lispref/files.texi (Unique File Names): Introduce `make-nearby-temp-file' and `temporary-file-directory'. (Magic File Names): Mention `make-nearby-temp-file' and `temporary-file-directory'. * etc/NEWS (provided): Mention `make-nearby-temp-file' and `temporary-file-directory'. * lisp/files.el (mounted-file-systems): New defcustom. (temporary-file-directory, make-nearby-temp-file): New defuns. (normal-backup-enable-predicate): Fix docstring. * lisp/net/tramp-adb.el (tramp-adb-file-name-handler-alist): * lisp/net/tramp-gvfs.el (tramp-gvfs-file-name-handler-alist): * lisp/net/tramp-sh.el (tramp-sh-file-name-handler-alist): * lisp/net/tramp-smb.el (tramp-smb-file-name-handler-alist): <make-nearby-temp-file, temporary-file-directory>: Add handler. * lisp/net/tramp.el (tramp-file-name-for-operation): Add `make-nearby-temp-file' and `temporary-file-directory'. (tramp-get-remote-tmpdir): Remove compatibility code. (tramp-handle-temporary-file-directory) (tramp-handle-make-nearby-temp-file): New defuns. * lisp/org/ob-core.el (org-babel-local-file-name): * lisp/progmodes/gud.el (gud-common-init): * lisp/vc/vc-hooks.el (vc-user-login-name): Use `file-remote-p'. * lisp/vc/vc-git.el (vc-git-checkin): Handle remote log message. * test/lisp/net/tramp-tests.el (tramp-test06-directory-file-name): Check `tramp--test-enabled'. (tramp-test18-file-attributes): Add tests for `file-ownership-preserved-p'. (tramp-test27-start-file-process, tramp-test28-shell-command): Reduce timeouts in `accept-process-output'. (tramp-test--shell-command-to-string-asynchronously): Add timeout. (tramp-test29-environment-variables): Remove additional sleep calls. (tramp-test32-make-nearby-temp-file): New test. (tramp--test-special-characters, tramp--test-utf8): Adapt docstring. (tramp-test33-special-characters) (tramp-test33-special-characters-with-stat) (tramp-test33-special-characters-with-perl) (tramp-test33-special-characters-with-ls, tramp-test34-utf8) (tramp-test34-utf8-with-stat, tramp-test34-utf8-with-perl) (tramp-test34-utf8-with-ls) (tramp-test35-asynchronous-requests) (tramp-test36-recursive-load, tramp-test37-unload): Rename. (tramp--test-ftp-p): Simplify check. (tramp--test-sh-p): New defun. (tramp-test20-file-modes, tramp-test22-file-times) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command) (tramp-test29-environment-variables) (tramp-test30-vc-registered) (tramp-test33-special-characters-with-stat) (tramp-test33-special-characters-with-perl) (tramp-test33-special-characters-with-ls) (tramp-test34-utf8-with-stat, tramp-test34-utf8-with-perl) (tramp-test34-utf8-with-ls) (tramp-test35-asynchronous-requests): Use it.
2016-08-07 13:57:23 +02:00
;; The temporary file shall be located on the remote host.
(setq tmp-file (with-no-warnings (make-nearby-temp-file "tramp-test")))
Add `make-nearby-temp-file' and `temporary-file-directory' * doc/lispref/files.texi (Unique File Names): Introduce `make-nearby-temp-file' and `temporary-file-directory'. (Magic File Names): Mention `make-nearby-temp-file' and `temporary-file-directory'. * etc/NEWS (provided): Mention `make-nearby-temp-file' and `temporary-file-directory'. * lisp/files.el (mounted-file-systems): New defcustom. (temporary-file-directory, make-nearby-temp-file): New defuns. (normal-backup-enable-predicate): Fix docstring. * lisp/net/tramp-adb.el (tramp-adb-file-name-handler-alist): * lisp/net/tramp-gvfs.el (tramp-gvfs-file-name-handler-alist): * lisp/net/tramp-sh.el (tramp-sh-file-name-handler-alist): * lisp/net/tramp-smb.el (tramp-smb-file-name-handler-alist): <make-nearby-temp-file, temporary-file-directory>: Add handler. * lisp/net/tramp.el (tramp-file-name-for-operation): Add `make-nearby-temp-file' and `temporary-file-directory'. (tramp-get-remote-tmpdir): Remove compatibility code. (tramp-handle-temporary-file-directory) (tramp-handle-make-nearby-temp-file): New defuns. * lisp/org/ob-core.el (org-babel-local-file-name): * lisp/progmodes/gud.el (gud-common-init): * lisp/vc/vc-hooks.el (vc-user-login-name): Use `file-remote-p'. * lisp/vc/vc-git.el (vc-git-checkin): Handle remote log message. * test/lisp/net/tramp-tests.el (tramp-test06-directory-file-name): Check `tramp--test-enabled'. (tramp-test18-file-attributes): Add tests for `file-ownership-preserved-p'. (tramp-test27-start-file-process, tramp-test28-shell-command): Reduce timeouts in `accept-process-output'. (tramp-test--shell-command-to-string-asynchronously): Add timeout. (tramp-test29-environment-variables): Remove additional sleep calls. (tramp-test32-make-nearby-temp-file): New test. (tramp--test-special-characters, tramp--test-utf8): Adapt docstring. (tramp-test33-special-characters) (tramp-test33-special-characters-with-stat) (tramp-test33-special-characters-with-perl) (tramp-test33-special-characters-with-ls, tramp-test34-utf8) (tramp-test34-utf8-with-stat, tramp-test34-utf8-with-perl) (tramp-test34-utf8-with-ls) (tramp-test35-asynchronous-requests) (tramp-test36-recursive-load, tramp-test37-unload): Rename. (tramp--test-ftp-p): Simplify check. (tramp--test-sh-p): New defun. (tramp-test20-file-modes, tramp-test22-file-times) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command) (tramp-test29-environment-variables) (tramp-test30-vc-registered) (tramp-test33-special-characters-with-stat) (tramp-test33-special-characters-with-perl) (tramp-test33-special-characters-with-ls) (tramp-test34-utf8-with-stat, tramp-test34-utf8-with-perl) (tramp-test34-utf8-with-ls) (tramp-test35-asynchronous-requests): Use it.
2016-08-07 13:57:23 +02:00
(should (file-exists-p tmp-file))
(should (file-regular-p tmp-file))
(should
(string-equal
(file-remote-p default-directory)
(file-remote-p tmp-file)))
(delete-file tmp-file)
(should-not (file-exists-p tmp-file))
(setq tmp-file (with-no-warnings (make-nearby-temp-file "tramp-test" 'dir)))
Add `make-nearby-temp-file' and `temporary-file-directory' * doc/lispref/files.texi (Unique File Names): Introduce `make-nearby-temp-file' and `temporary-file-directory'. (Magic File Names): Mention `make-nearby-temp-file' and `temporary-file-directory'. * etc/NEWS (provided): Mention `make-nearby-temp-file' and `temporary-file-directory'. * lisp/files.el (mounted-file-systems): New defcustom. (temporary-file-directory, make-nearby-temp-file): New defuns. (normal-backup-enable-predicate): Fix docstring. * lisp/net/tramp-adb.el (tramp-adb-file-name-handler-alist): * lisp/net/tramp-gvfs.el (tramp-gvfs-file-name-handler-alist): * lisp/net/tramp-sh.el (tramp-sh-file-name-handler-alist): * lisp/net/tramp-smb.el (tramp-smb-file-name-handler-alist): <make-nearby-temp-file, temporary-file-directory>: Add handler. * lisp/net/tramp.el (tramp-file-name-for-operation): Add `make-nearby-temp-file' and `temporary-file-directory'. (tramp-get-remote-tmpdir): Remove compatibility code. (tramp-handle-temporary-file-directory) (tramp-handle-make-nearby-temp-file): New defuns. * lisp/org/ob-core.el (org-babel-local-file-name): * lisp/progmodes/gud.el (gud-common-init): * lisp/vc/vc-hooks.el (vc-user-login-name): Use `file-remote-p'. * lisp/vc/vc-git.el (vc-git-checkin): Handle remote log message. * test/lisp/net/tramp-tests.el (tramp-test06-directory-file-name): Check `tramp--test-enabled'. (tramp-test18-file-attributes): Add tests for `file-ownership-preserved-p'. (tramp-test27-start-file-process, tramp-test28-shell-command): Reduce timeouts in `accept-process-output'. (tramp-test--shell-command-to-string-asynchronously): Add timeout. (tramp-test29-environment-variables): Remove additional sleep calls. (tramp-test32-make-nearby-temp-file): New test. (tramp--test-special-characters, tramp--test-utf8): Adapt docstring. (tramp-test33-special-characters) (tramp-test33-special-characters-with-stat) (tramp-test33-special-characters-with-perl) (tramp-test33-special-characters-with-ls, tramp-test34-utf8) (tramp-test34-utf8-with-stat, tramp-test34-utf8-with-perl) (tramp-test34-utf8-with-ls) (tramp-test35-asynchronous-requests) (tramp-test36-recursive-load, tramp-test37-unload): Rename. (tramp--test-ftp-p): Simplify check. (tramp--test-sh-p): New defun. (tramp-test20-file-modes, tramp-test22-file-times) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command) (tramp-test29-environment-variables) (tramp-test30-vc-registered) (tramp-test33-special-characters-with-stat) (tramp-test33-special-characters-with-perl) (tramp-test33-special-characters-with-ls) (tramp-test34-utf8-with-stat, tramp-test34-utf8-with-perl) (tramp-test34-utf8-with-ls) (tramp-test35-asynchronous-requests): Use it.
2016-08-07 13:57:23 +02:00
(should (file-exists-p tmp-file))
(should (file-directory-p tmp-file))
(delete-directory tmp-file)
(should-not (file-exists-p tmp-file))))
Extend file-name-non-special * lisp/files.el (insert-file-contents-literally): Bind `inhibit-file-name-handlers' the default way. (file-name-non-special): Rework, mainly for operations with two file name arguments. (file-name-unquote-non-special): New defsubst. (file-name-unquote): Use it. * test/lisp/files-tests.el (files-test-bug-18141): Skip if needed. (files-tests--with-temp-non-special): Add docstring. Delete also `non-special-name' if the file/directory exists. (files-tests--special-file-name-extension) (files-tests--special-file-name-regexp): New defconst. (files-tests--special-file-name-handler, files-tests--new-name): New defuns. (files-tests--with-temp-non-special-and-file-name-handler): New macro. (files-tests-file-name-non-special-access-file) (files-tests-file-name-non-special-add-name-to-file) (files-tests-file-name-non-special-byte-compiler-base-file-name) (files-tests-file-name-non-special-copy-directory) (files-tests-file-name-non-special-copy-file) (files-tests-file-name-non-special-delete-directory) (files-tests-file-name-non-special-delete-file) (files-tests-file-name-non-special-diff-latest-backup-file) (files-tests-file-name-non-special-directory-file-name) (files-tests-file-name-non-special-directory-files) (files-tests-file-name-non-special-directory-files-and-attributes) (files-tests-file-name-non-special-dired-compress-handler) (files-tests-file-name-non-special-dired-uncache) (files-tests-file-name-non-special-expand-file-name) (files-tests-file-name-non-special-file-accessible-directory-p) (files-tests-file-name-non-special-file-acl) (files-tests-file-name-non-special-file-attributes) (files-tests-file-name-non-special-file-directory-p) (files-tests-file-name-non-special-file-equal-p) (files-tests-file-name-non-special-file-executable-p) (files-tests-file-name-non-special-file-exists-p) (files-tests-file-name-non-special-file-in-directory-p) (files-tests-file-name-non-special-file-local-copy) (files-tests-file-name-non-special-file-modes) (files-tests-file-name-non-special-file-name-all-completions) (files-tests-file-name-non-special-file-name-as-directory) (files-tests-file-name-non-special-file-name-case-insensitive-p) (files-tests-file-name-non-special-file-name-completion) (files-tests-file-name-non-special-file-name-directory) (files-tests-file-name-non-special-file-name-nondirectory) (files-tests-file-name-non-special-file-name-sans-versions) (files-tests-file-name-non-special-file-newer-than-file-p) (files-tests-file-name-non-special-notify-handlers) (files-tests-file-name-non-special-file-ownership-preserved-p) (files-tests-file-name-non-special-file-readable-p) (files-tests-file-name-non-special-file-regular-p) (files-tests-file-name-non-special-file-remote-p) (files-tests-file-name-non-special-file-selinux-context) (files-tests-file-name-non-special-file-symlink-p) (files-tests-file-name-non-special-file-truename) (files-tests-file-name-non-special-file-writable-p) (files-tests-file-name-non-special-find-backup-file-name) (files-tests-file-name-non-special-get-file-buffer) (files-tests-file-name-non-special-insert-directory) (files-tests-file-name-non-special-insert-file-contents) (files-tests-file-name-non-special-load) (files-tests-file-name-non-special-make-auto-save-file-name) (files-tests-file-name-non-special-make-directory) (files-tests-file-name-non-special-make-directory-internal) (files-tests-file-name-non-special-make-symbolic-link) (files-tests-file-name-non-special-rename-file) (files-tests-file-name-non-special-set-file-acl) (files-tests-file-name-non-special-set-file-modes) (files-tests-file-name-non-special-set-file-selinux-context) (files-tests-file-name-non-special-set-file-times) (files-tests-file-name-non-special-set-visited-file-modtime) (files-tests-file-name-non-special-shell-command) (files-tests-file-name-non-special-start-file-process) (files-tests-file-name-non-special-substitute-in-file-name) (files-tests-file-name-non-special-temporary-file-directory) (files-tests-file-name-non-special-unhandled-file-name-directory) (files-tests-file-name-non-special-vc-registered) (files-tests-file-name-non-special-write-region): Extends tests to quoted file names, which would require a file name handler if unquoted. (files-test-no-file-write-contents): Make test more robust. * test/lisp/net/tramp-tests.el (tramp-test21-file-links): Adapt test. (tramp--test-emacs25-p): New defun. (tramp-test34-vc-registered): Use it.
2018-06-03 14:30:41 +02:00
(defun tramp--test-emacs25-p ()
"Check for Emacs version >= 25.1.
Some semantics has been changed for there, w/o new functions or
variables, so we check the Emacs version directly."
(>= emacs-major-version 25))
(defun tramp--test-emacs26-p ()
"Check for Emacs version >= 26.1.
Some semantics has been changed for there, w/o new functions or
variables, so we check the Emacs version directly."
(>= emacs-major-version 26))
(defun tramp--test-emacs27-p ()
"Check for Emacs version >= 27.1.
Some semantics has been changed for there, w/o new functions or
variables, so we check the Emacs version directly."
(>= emacs-major-version 27))
(defun tramp--test-adb-p ()
"Check, whether the remote host runs Android.
This requires restrictions of file name syntax."
Sync with Tramp repository * doc/misc/tramp.texi (Configuration): Note, that Tramp must be required prior changing its configuration. (Connection caching, Predefined connection information) (Remote shell setup): Fix typos. (Predefined connection information): Describe, how to overwrite parameters of `tramp-methods'. (Remote programs, Remote processes, Traces and Profiles): Simplify example. (Remote programs): Remove superfluous comment. * doc/misc/trampver.texi: Update release number. * lisp/net/tramp-cache.el (tramp-connection-properties): Adapt docstring. * lisp/net/tramp-gvfs.el (tramp-gvfs-do-copy-or-rename-file): New defun. (tramp-gvfs-handle-copy-file, tramp-gvfs-handle-rename-file): Use it. (tramp-gvfs-handle-make-directory): Reimplement PARENTS handling, "gvfs-mkdir -p ..." does not work robust. (tramp-gvfs-maybe-open-connection): Adapt `tramp-get-method-parameter' call. * lisp/net/tramp-sh.el (tramp-methods): Add `tramp-remote-shell-login' parameter where it fits. (tramp-get-remote-path): Use it. (tramp-make-copy-program-file-name): Fix quoting for "psftp" method. (all): Adapt `tramp-get-method-parameter' calls. * lisp/net/tramp.el (tramp-methods): Adapt docstring. (tramp-get-method-parameter): Replace argument METHOD by VEC. Check also for hits in `tramp-connection-properties'. Adapt docstring. (tramp-get-remote-tmpdir): Cache only the local name of tmpdir. (all): Adapt `tramp-get-method-parameter' calls. * lisp/net/trampver.el Update release number. * test/automated/tramp-tests.el (tramp--instrument-test-case): Add "^make-symbolic-link not supported$" to `debug-ignored-errors'. (tramp-test13-make-directory, tramp--test-adb-p) (tramp--test-smb-or-windows-nt-p): Simplify. (tramp--test-ftp-p, tramp--test-gvfs-p): New defuns. (tramp--test-special-characters): Fix docstring. Add gvfs and ftp tests. (tramp--test-utf8): Fix docstring.
2015-07-21 14:59:18 +02:00
(tramp-adb-file-name-p tramp-test-temporary-file-directory))
(defun tramp--test-docker-p ()
"Check, whether the docker method is used.
This does not support some special file names."
(string-equal
"docker" (file-remote-p tramp-test-temporary-file-directory 'method)))
Sync with Tramp repository * doc/misc/tramp.texi (Configuration): Note, that Tramp must be required prior changing its configuration. (Connection caching, Predefined connection information) (Remote shell setup): Fix typos. (Predefined connection information): Describe, how to overwrite parameters of `tramp-methods'. (Remote programs, Remote processes, Traces and Profiles): Simplify example. (Remote programs): Remove superfluous comment. * doc/misc/trampver.texi: Update release number. * lisp/net/tramp-cache.el (tramp-connection-properties): Adapt docstring. * lisp/net/tramp-gvfs.el (tramp-gvfs-do-copy-or-rename-file): New defun. (tramp-gvfs-handle-copy-file, tramp-gvfs-handle-rename-file): Use it. (tramp-gvfs-handle-make-directory): Reimplement PARENTS handling, "gvfs-mkdir -p ..." does not work robust. (tramp-gvfs-maybe-open-connection): Adapt `tramp-get-method-parameter' call. * lisp/net/tramp-sh.el (tramp-methods): Add `tramp-remote-shell-login' parameter where it fits. (tramp-get-remote-path): Use it. (tramp-make-copy-program-file-name): Fix quoting for "psftp" method. (all): Adapt `tramp-get-method-parameter' calls. * lisp/net/tramp.el (tramp-methods): Adapt docstring. (tramp-get-method-parameter): Replace argument METHOD by VEC. Check also for hits in `tramp-connection-properties'. Adapt docstring. (tramp-get-remote-tmpdir): Cache only the local name of tmpdir. (all): Adapt `tramp-get-method-parameter' calls. * lisp/net/trampver.el Update release number. * test/automated/tramp-tests.el (tramp--instrument-test-case): Add "^make-symbolic-link not supported$" to `debug-ignored-errors'. (tramp-test13-make-directory, tramp--test-adb-p) (tramp--test-smb-or-windows-nt-p): Simplify. (tramp--test-ftp-p, tramp--test-gvfs-p): New defuns. (tramp--test-special-characters): Fix docstring. Add gvfs and ftp tests. (tramp--test-utf8): Fix docstring.
2015-07-21 14:59:18 +02:00
(defun tramp--test-ftp-p ()
"Check, whether an FTP-like method is used.
This does not support globbing characters in file names (yet)."
;; Globbing characters are ??, ?* and ?\[.
Add `make-nearby-temp-file' and `temporary-file-directory' * doc/lispref/files.texi (Unique File Names): Introduce `make-nearby-temp-file' and `temporary-file-directory'. (Magic File Names): Mention `make-nearby-temp-file' and `temporary-file-directory'. * etc/NEWS (provided): Mention `make-nearby-temp-file' and `temporary-file-directory'. * lisp/files.el (mounted-file-systems): New defcustom. (temporary-file-directory, make-nearby-temp-file): New defuns. (normal-backup-enable-predicate): Fix docstring. * lisp/net/tramp-adb.el (tramp-adb-file-name-handler-alist): * lisp/net/tramp-gvfs.el (tramp-gvfs-file-name-handler-alist): * lisp/net/tramp-sh.el (tramp-sh-file-name-handler-alist): * lisp/net/tramp-smb.el (tramp-smb-file-name-handler-alist): <make-nearby-temp-file, temporary-file-directory>: Add handler. * lisp/net/tramp.el (tramp-file-name-for-operation): Add `make-nearby-temp-file' and `temporary-file-directory'. (tramp-get-remote-tmpdir): Remove compatibility code. (tramp-handle-temporary-file-directory) (tramp-handle-make-nearby-temp-file): New defuns. * lisp/org/ob-core.el (org-babel-local-file-name): * lisp/progmodes/gud.el (gud-common-init): * lisp/vc/vc-hooks.el (vc-user-login-name): Use `file-remote-p'. * lisp/vc/vc-git.el (vc-git-checkin): Handle remote log message. * test/lisp/net/tramp-tests.el (tramp-test06-directory-file-name): Check `tramp--test-enabled'. (tramp-test18-file-attributes): Add tests for `file-ownership-preserved-p'. (tramp-test27-start-file-process, tramp-test28-shell-command): Reduce timeouts in `accept-process-output'. (tramp-test--shell-command-to-string-asynchronously): Add timeout. (tramp-test29-environment-variables): Remove additional sleep calls. (tramp-test32-make-nearby-temp-file): New test. (tramp--test-special-characters, tramp--test-utf8): Adapt docstring. (tramp-test33-special-characters) (tramp-test33-special-characters-with-stat) (tramp-test33-special-characters-with-perl) (tramp-test33-special-characters-with-ls, tramp-test34-utf8) (tramp-test34-utf8-with-stat, tramp-test34-utf8-with-perl) (tramp-test34-utf8-with-ls) (tramp-test35-asynchronous-requests) (tramp-test36-recursive-load, tramp-test37-unload): Rename. (tramp--test-ftp-p): Simplify check. (tramp--test-sh-p): New defun. (tramp-test20-file-modes, tramp-test22-file-times) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command) (tramp-test29-environment-variables) (tramp-test30-vc-registered) (tramp-test33-special-characters-with-stat) (tramp-test33-special-characters-with-perl) (tramp-test33-special-characters-with-ls) (tramp-test34-utf8-with-stat, tramp-test34-utf8-with-perl) (tramp-test34-utf8-with-ls) (tramp-test35-asynchronous-requests): Use it.
2016-08-07 13:57:23 +02:00
(string-match
"ftp$" (file-remote-p tramp-test-temporary-file-directory 'method)))
(defun tramp--test-gvfs-p (&optional method)
Add `make-nearby-temp-file' and `temporary-file-directory' * doc/lispref/files.texi (Unique File Names): Introduce `make-nearby-temp-file' and `temporary-file-directory'. (Magic File Names): Mention `make-nearby-temp-file' and `temporary-file-directory'. * etc/NEWS (provided): Mention `make-nearby-temp-file' and `temporary-file-directory'. * lisp/files.el (mounted-file-systems): New defcustom. (temporary-file-directory, make-nearby-temp-file): New defuns. (normal-backup-enable-predicate): Fix docstring. * lisp/net/tramp-adb.el (tramp-adb-file-name-handler-alist): * lisp/net/tramp-gvfs.el (tramp-gvfs-file-name-handler-alist): * lisp/net/tramp-sh.el (tramp-sh-file-name-handler-alist): * lisp/net/tramp-smb.el (tramp-smb-file-name-handler-alist): <make-nearby-temp-file, temporary-file-directory>: Add handler. * lisp/net/tramp.el (tramp-file-name-for-operation): Add `make-nearby-temp-file' and `temporary-file-directory'. (tramp-get-remote-tmpdir): Remove compatibility code. (tramp-handle-temporary-file-directory) (tramp-handle-make-nearby-temp-file): New defuns. * lisp/org/ob-core.el (org-babel-local-file-name): * lisp/progmodes/gud.el (gud-common-init): * lisp/vc/vc-hooks.el (vc-user-login-name): Use `file-remote-p'. * lisp/vc/vc-git.el (vc-git-checkin): Handle remote log message. * test/lisp/net/tramp-tests.el (tramp-test06-directory-file-name): Check `tramp--test-enabled'. (tramp-test18-file-attributes): Add tests for `file-ownership-preserved-p'. (tramp-test27-start-file-process, tramp-test28-shell-command): Reduce timeouts in `accept-process-output'. (tramp-test--shell-command-to-string-asynchronously): Add timeout. (tramp-test29-environment-variables): Remove additional sleep calls. (tramp-test32-make-nearby-temp-file): New test. (tramp--test-special-characters, tramp--test-utf8): Adapt docstring. (tramp-test33-special-characters) (tramp-test33-special-characters-with-stat) (tramp-test33-special-characters-with-perl) (tramp-test33-special-characters-with-ls, tramp-test34-utf8) (tramp-test34-utf8-with-stat, tramp-test34-utf8-with-perl) (tramp-test34-utf8-with-ls) (tramp-test35-asynchronous-requests) (tramp-test36-recursive-load, tramp-test37-unload): Rename. (tramp--test-ftp-p): Simplify check. (tramp--test-sh-p): New defun. (tramp-test20-file-modes, tramp-test22-file-times) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command) (tramp-test29-environment-variables) (tramp-test30-vc-registered) (tramp-test33-special-characters-with-stat) (tramp-test33-special-characters-with-perl) (tramp-test33-special-characters-with-ls) (tramp-test34-utf8-with-stat, tramp-test34-utf8-with-perl) (tramp-test34-utf8-with-ls) (tramp-test35-asynchronous-requests): Use it.
2016-08-07 13:57:23 +02:00
"Check, whether the remote host runs a GVFS based method.
This requires restrictions of file name syntax."
(or (member method tramp-gvfs-methods)
(tramp-gvfs-file-name-p tramp-test-temporary-file-directory)))
Sync with Tramp repository * doc/misc/tramp.texi (Configuration): Note, that Tramp must be required prior changing its configuration. (Connection caching, Predefined connection information) (Remote shell setup): Fix typos. (Predefined connection information): Describe, how to overwrite parameters of `tramp-methods'. (Remote programs, Remote processes, Traces and Profiles): Simplify example. (Remote programs): Remove superfluous comment. * doc/misc/trampver.texi: Update release number. * lisp/net/tramp-cache.el (tramp-connection-properties): Adapt docstring. * lisp/net/tramp-gvfs.el (tramp-gvfs-do-copy-or-rename-file): New defun. (tramp-gvfs-handle-copy-file, tramp-gvfs-handle-rename-file): Use it. (tramp-gvfs-handle-make-directory): Reimplement PARENTS handling, "gvfs-mkdir -p ..." does not work robust. (tramp-gvfs-maybe-open-connection): Adapt `tramp-get-method-parameter' call. * lisp/net/tramp-sh.el (tramp-methods): Add `tramp-remote-shell-login' parameter where it fits. (tramp-get-remote-path): Use it. (tramp-make-copy-program-file-name): Fix quoting for "psftp" method. (all): Adapt `tramp-get-method-parameter' calls. * lisp/net/tramp.el (tramp-methods): Adapt docstring. (tramp-get-method-parameter): Replace argument METHOD by VEC. Check also for hits in `tramp-connection-properties'. Adapt docstring. (tramp-get-remote-tmpdir): Cache only the local name of tmpdir. (all): Adapt `tramp-get-method-parameter' calls. * lisp/net/trampver.el Update release number. * test/automated/tramp-tests.el (tramp--instrument-test-case): Add "^make-symbolic-link not supported$" to `debug-ignored-errors'. (tramp-test13-make-directory, tramp--test-adb-p) (tramp--test-smb-or-windows-nt-p): Simplify. (tramp--test-ftp-p, tramp--test-gvfs-p): New defuns. (tramp--test-special-characters): Fix docstring. Add gvfs and ftp tests. (tramp--test-utf8): Fix docstring.
2015-07-21 14:59:18 +02:00
(defun tramp--test-hpux-p ()
"Check, whether the remote host runs HP-UX.
Several special characters do not work properly there."
;; We must refill the cache. `file-truename' does it.
(with-parsed-tramp-file-name
(file-truename tramp-test-temporary-file-directory) nil
(string-match "^HP-UX" (tramp-get-connection-property v "uname" ""))))
(defun tramp--test-ksh-p ()
"Check, whether the remote shell is ksh.
ksh93 makes some strange conversions of non-latin characters into
a $'' syntax."
;; We must refill the cache. `file-truename' does it.
(with-parsed-tramp-file-name
(file-truename tramp-test-temporary-file-directory) nil
(string-match "ksh$" (tramp-get-connection-property v "remote-shell" ""))))
(defun tramp--test-mock-p ()
"Check, whether the mock method is used.
This does not support external Emacs calls."
(string-equal
"mock" (file-remote-p tramp-test-temporary-file-directory 'method)))
(defun tramp--test-nextcloud-p ()
"Check, whether the nextcloud method is used."
Add new Tramp connection method "owncloud" * doc/misc/tramp.texi (all): Use @acronym{GNOME} thoroughly. (Using GNOME Online Accounts based methods): Rename from "Using Google Drive". Add `owncloud'. (GVFS based methods): Add `owncloud'. * etc/NEWS: Add Tramp connection method "owncloud". * lisp/net/tramp-gvfs.el (tramp-gvfs-methods): Add "owncloud". Remove goa methods if not supported. (tramp-goa-methods, tramp-goa-service, tramp-goa-path) (tramp-goa-path-accounts, tramp-goa-interface-documents) (tramp-goa-interface-printers, tramp-goa-interface-files) (tramp-goa-interface-contacts, tramp-goa-interface-calendar) (tramp-goa-interface-oauth2based) (tramp-goa-interface-account, tramp-goa-identity-regexp) (tramp-goa-interface-mail, tramp-goa-interface-chat) (tramp-goa-interface-photos, tramp-goa-path-manager) (tramp-goa-interface-documents) (tramp-gvfs-owncloud-default-prefix) (tramp-gvfs-owncloud-default-prefix-regexp): New defconst. (tramp-goa-name): New defstruct. (tramp-gvfs-stringify-dbus-message): Handle all consp messages. (tramp-dbus-function, tramp-gvfs-get-remote-prefix) (tramp-get-goa-accounts): New defun. (with-tramp-dbus-call-method): Use it. (with-tramp-dbus-get-all-properties): New defmacro. (tramp-gvfs-url-file-name) (tramp-gvfs-handler-mounted-unmounted) (tramp-gvfs-connection-mounted-p, tramp-gvfs-mount-spec): Map between "owncloud" and "davs". (tramp-gvfs-maybe-open-connection): Set "vector" connection property. * test/lisp/net/tramp-tests.el (tramp-gvfs-handler-askquestion): Suppress run in tests. (tramp--test-owncloud-p): New defun. (tramp-test11-copy-file, tramp-test12-rename-file): Use it.
2018-01-05 21:04:39 +01:00
(string-equal
"nextcloud" (file-remote-p tramp-test-temporary-file-directory 'method)))
Add new Tramp connection method "owncloud" * doc/misc/tramp.texi (all): Use @acronym{GNOME} thoroughly. (Using GNOME Online Accounts based methods): Rename from "Using Google Drive". Add `owncloud'. (GVFS based methods): Add `owncloud'. * etc/NEWS: Add Tramp connection method "owncloud". * lisp/net/tramp-gvfs.el (tramp-gvfs-methods): Add "owncloud". Remove goa methods if not supported. (tramp-goa-methods, tramp-goa-service, tramp-goa-path) (tramp-goa-path-accounts, tramp-goa-interface-documents) (tramp-goa-interface-printers, tramp-goa-interface-files) (tramp-goa-interface-contacts, tramp-goa-interface-calendar) (tramp-goa-interface-oauth2based) (tramp-goa-interface-account, tramp-goa-identity-regexp) (tramp-goa-interface-mail, tramp-goa-interface-chat) (tramp-goa-interface-photos, tramp-goa-path-manager) (tramp-goa-interface-documents) (tramp-gvfs-owncloud-default-prefix) (tramp-gvfs-owncloud-default-prefix-regexp): New defconst. (tramp-goa-name): New defstruct. (tramp-gvfs-stringify-dbus-message): Handle all consp messages. (tramp-dbus-function, tramp-gvfs-get-remote-prefix) (tramp-get-goa-accounts): New defun. (with-tramp-dbus-call-method): Use it. (with-tramp-dbus-get-all-properties): New defmacro. (tramp-gvfs-url-file-name) (tramp-gvfs-handler-mounted-unmounted) (tramp-gvfs-connection-mounted-p, tramp-gvfs-mount-spec): Map between "owncloud" and "davs". (tramp-gvfs-maybe-open-connection): Set "vector" connection property. * test/lisp/net/tramp-tests.el (tramp-gvfs-handler-askquestion): Suppress run in tests. (tramp--test-owncloud-p): New defun. (tramp-test11-copy-file, tramp-test12-rename-file): Use it.
2018-01-05 21:04:39 +01:00
(defun tramp--test-rclone-p ()
"Check, whether the remote host is offered by rclone.
This requires restrictions of file name syntax."
(tramp-rclone-file-name-p tramp-test-temporary-file-directory))
(defun tramp--test-rsync-p ()
"Check, whether the rsync method is used.
This does not support special file names."
(string-equal
"rsync" (file-remote-p tramp-test-temporary-file-directory 'method)))
Add `make-nearby-temp-file' and `temporary-file-directory' * doc/lispref/files.texi (Unique File Names): Introduce `make-nearby-temp-file' and `temporary-file-directory'. (Magic File Names): Mention `make-nearby-temp-file' and `temporary-file-directory'. * etc/NEWS (provided): Mention `make-nearby-temp-file' and `temporary-file-directory'. * lisp/files.el (mounted-file-systems): New defcustom. (temporary-file-directory, make-nearby-temp-file): New defuns. (normal-backup-enable-predicate): Fix docstring. * lisp/net/tramp-adb.el (tramp-adb-file-name-handler-alist): * lisp/net/tramp-gvfs.el (tramp-gvfs-file-name-handler-alist): * lisp/net/tramp-sh.el (tramp-sh-file-name-handler-alist): * lisp/net/tramp-smb.el (tramp-smb-file-name-handler-alist): <make-nearby-temp-file, temporary-file-directory>: Add handler. * lisp/net/tramp.el (tramp-file-name-for-operation): Add `make-nearby-temp-file' and `temporary-file-directory'. (tramp-get-remote-tmpdir): Remove compatibility code. (tramp-handle-temporary-file-directory) (tramp-handle-make-nearby-temp-file): New defuns. * lisp/org/ob-core.el (org-babel-local-file-name): * lisp/progmodes/gud.el (gud-common-init): * lisp/vc/vc-hooks.el (vc-user-login-name): Use `file-remote-p'. * lisp/vc/vc-git.el (vc-git-checkin): Handle remote log message. * test/lisp/net/tramp-tests.el (tramp-test06-directory-file-name): Check `tramp--test-enabled'. (tramp-test18-file-attributes): Add tests for `file-ownership-preserved-p'. (tramp-test27-start-file-process, tramp-test28-shell-command): Reduce timeouts in `accept-process-output'. (tramp-test--shell-command-to-string-asynchronously): Add timeout. (tramp-test29-environment-variables): Remove additional sleep calls. (tramp-test32-make-nearby-temp-file): New test. (tramp--test-special-characters, tramp--test-utf8): Adapt docstring. (tramp-test33-special-characters) (tramp-test33-special-characters-with-stat) (tramp-test33-special-characters-with-perl) (tramp-test33-special-characters-with-ls, tramp-test34-utf8) (tramp-test34-utf8-with-stat, tramp-test34-utf8-with-perl) (tramp-test34-utf8-with-ls) (tramp-test35-asynchronous-requests) (tramp-test36-recursive-load, tramp-test37-unload): Rename. (tramp--test-ftp-p): Simplify check. (tramp--test-sh-p): New defun. (tramp-test20-file-modes, tramp-test22-file-times) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command) (tramp-test29-environment-variables) (tramp-test30-vc-registered) (tramp-test33-special-characters-with-stat) (tramp-test33-special-characters-with-perl) (tramp-test33-special-characters-with-ls) (tramp-test34-utf8-with-stat, tramp-test34-utf8-with-perl) (tramp-test34-utf8-with-ls) (tramp-test35-asynchronous-requests): Use it.
2016-08-07 13:57:23 +02:00
(defun tramp--test-sh-p ()
"Check, whether the remote host runs a based method from tramp-sh.el."
(eq
(tramp-find-foreign-file-name-handler tramp-test-temporary-file-directory)
'tramp-sh-file-name-handler))
(defun tramp--test-sudoedit-p ()
"Check, whether the sudoedit method is used."
(tramp-sudoedit-file-name-p tramp-test-temporary-file-directory))
(defun tramp--test-windows-nt ()
"Check, whether the locale host runs MS Windows."
(eq system-type 'windows-nt))
(defun tramp--test-windows-nt-and-batch ()
"Check, whether the locale host runs MS Windows in batch mode.
2016-12-22 10:13:46 -08:00
This does not support special characters."
(and (eq system-type 'windows-nt) noninteractive))
(defun tramp--test-windows-nt-and-pscp-psftp-p ()
"Check, whether the locale host runs MS Windows, and ps{cp,ftp} is used.
This does not support utf8 based file transfer."
(and (eq system-type 'windows-nt)
(string-match
(regexp-opt '("pscp" "psftp"))
(file-remote-p tramp-test-temporary-file-directory 'method))))
(defun tramp--test-windows-nt-or-smb-p ()
"Check, whether the locale or remote host runs MS Windows.
This requires restrictions of file name syntax."
(or (eq system-type 'windows-nt)
Sync with Tramp repository * doc/misc/tramp.texi (Configuration): Note, that Tramp must be required prior changing its configuration. (Connection caching, Predefined connection information) (Remote shell setup): Fix typos. (Predefined connection information): Describe, how to overwrite parameters of `tramp-methods'. (Remote programs, Remote processes, Traces and Profiles): Simplify example. (Remote programs): Remove superfluous comment. * doc/misc/trampver.texi: Update release number. * lisp/net/tramp-cache.el (tramp-connection-properties): Adapt docstring. * lisp/net/tramp-gvfs.el (tramp-gvfs-do-copy-or-rename-file): New defun. (tramp-gvfs-handle-copy-file, tramp-gvfs-handle-rename-file): Use it. (tramp-gvfs-handle-make-directory): Reimplement PARENTS handling, "gvfs-mkdir -p ..." does not work robust. (tramp-gvfs-maybe-open-connection): Adapt `tramp-get-method-parameter' call. * lisp/net/tramp-sh.el (tramp-methods): Add `tramp-remote-shell-login' parameter where it fits. (tramp-get-remote-path): Use it. (tramp-make-copy-program-file-name): Fix quoting for "psftp" method. (all): Adapt `tramp-get-method-parameter' calls. * lisp/net/tramp.el (tramp-methods): Adapt docstring. (tramp-get-method-parameter): Replace argument METHOD by VEC. Check also for hits in `tramp-connection-properties'. Adapt docstring. (tramp-get-remote-tmpdir): Cache only the local name of tmpdir. (all): Adapt `tramp-get-method-parameter' calls. * lisp/net/trampver.el Update release number. * test/automated/tramp-tests.el (tramp--instrument-test-case): Add "^make-symbolic-link not supported$" to `debug-ignored-errors'. (tramp-test13-make-directory, tramp--test-adb-p) (tramp--test-smb-or-windows-nt-p): Simplify. (tramp--test-ftp-p, tramp--test-gvfs-p): New defuns. (tramp--test-special-characters): Fix docstring. Add gvfs and ftp tests. (tramp--test-utf8): Fix docstring.
2015-07-21 14:59:18 +02:00
(tramp-smb-file-name-p tramp-test-temporary-file-directory)))
(defun tramp--test-check-files (&rest files)
"Run a simple but comprehensive test over every file in FILES."
;; `filename-non-special' has been fixed in Emacs 27.1, see Bug#29579.
(dolist (quoted (if (and (tramp--test-expensive-test) (tramp--test-emacs27-p))
'(nil t) '(nil)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; We must use `file-truename' for the temporary directory,
;; because it could be located on a symlinked directory. This
;; would let the test fail.
(let* ((tramp-test-temporary-file-directory
(file-truename tramp-test-temporary-file-directory))
(tmp-name1 (tramp--test-make-temp-name nil quoted))
(tmp-name2 (tramp--test-make-temp-name 'local quoted))
(files (delq nil files))
(process-environment process-environment)
(sorted-files (sort (copy-sequence files) #'string-lessp)))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(unwind-protect
(progn
(make-directory tmp-name1)
(make-directory tmp-name2)
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(dolist (elt files)
(let* ((file1 (expand-file-name elt tmp-name1))
(file2 (expand-file-name elt tmp-name2))
(file3 (expand-file-name (concat elt "foo") tmp-name1)))
(write-region elt nil file1)
(should (file-exists-p file1))
;; Check file contents.
(with-temp-buffer
(insert-file-contents file1)
(should (string-equal (buffer-string) elt)))
;; Copy file both directions.
(copy-file file1 (file-name-as-directory tmp-name2))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(should (file-exists-p file2))
(delete-file file1)
(should-not (file-exists-p file1))
(copy-file file2 (file-name-as-directory tmp-name1))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(should (file-exists-p file1))
(tramp--test-ignore-make-symbolic-link-error
(make-symbolic-link file1 file3)
(should (file-symlink-p file3))
(should
(string-equal
(expand-file-name file1) (file-truename file3)))
(should
(string-equal
(funcall
(if quoted #'tramp-compat-file-name-quote #'identity)
(tramp-compat-file-attribute-type (file-attributes file3)))
(file-remote-p (file-truename file1) 'localname)))
;; Check file contents.
(with-temp-buffer
(insert-file-contents file3)
(should (string-equal (buffer-string) elt)))
(delete-file file3))))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; Check file names.
(should (equal (directory-files
tmp-name1 nil directory-files-no-dot-files-regexp)
sorted-files))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(should (equal (directory-files
tmp-name2 nil directory-files-no-dot-files-regexp)
sorted-files))
(should (equal (mapcar
#'car
(directory-files-and-attributes
tmp-name1 nil directory-files-no-dot-files-regexp))
sorted-files))
(should (equal (mapcar
#'car
(directory-files-and-attributes
tmp-name2 nil directory-files-no-dot-files-regexp))
sorted-files))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; `substitute-in-file-name' could return different
;; values. For `adb', there could be strange file
;; permissions preventing overwriting a file. We don't
;; care in this testcase.
(dolist (elt files)
(let ((file1
(substitute-in-file-name (expand-file-name elt tmp-name1)))
(file2
(substitute-in-file-name
(expand-file-name elt tmp-name2))))
(ignore-errors (write-region elt nil file1))
(should (file-exists-p file1))
(ignore-errors (write-region elt nil file2 nil 'nomessage))
(should (file-exists-p file2))))
(should (equal (directory-files
tmp-name1 nil directory-files-no-dot-files-regexp)
(directory-files
tmp-name2 nil directory-files-no-dot-files-regexp)))
;; Check directory creation. We use a subdirectory "foo"
;; in order to avoid conflicts with previous file name tests.
(dolist (elt files)
(let* ((elt1 (concat elt "foo"))
(file1 (expand-file-name (concat "foo/" elt) tmp-name1))
(file2 (expand-file-name elt file1))
(file3 (expand-file-name elt1 file1)))
(make-directory file1 'parents)
(should (file-directory-p file1))
(write-region elt nil file2)
(should (file-exists-p file2))
(should
(equal
(directory-files
file1 nil directory-files-no-dot-files-regexp)
`(,elt)))
(should
(equal
(caar (directory-files-and-attributes
file1 nil directory-files-no-dot-files-regexp))
elt))
;; Check symlink in `directory-files-and-attributes'.
;; It does not work in the "smb" case, only relative
;; symlinks to existing files are shown there.
(tramp--test-ignore-make-symbolic-link-error
(unless
(tramp-smb-file-name-p tramp-test-temporary-file-directory)
(make-symbolic-link file2 file3)
(should (file-symlink-p file3))
(should
(string-equal
(caar (directory-files-and-attributes
file1 nil (regexp-quote elt1)))
elt1))
(should
(string-equal
(funcall
(if quoted #'tramp-compat-file-name-quote #'identity)
(cadr (car (directory-files-and-attributes
file1 nil (regexp-quote elt1)))))
(file-remote-p (file-truename file2) 'localname)))
(delete-file file3)
(should-not (file-exists-p file3))))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(delete-file file2)
(should-not (file-exists-p file2))
(delete-directory file1)
(should-not (file-exists-p file1))))
;; Check, that environment variables are set correctly.
;; We do not run on macOS due to encoding problems. See
;; Bug#36940.
(when (and (tramp--test-expensive-test) (tramp--test-sh-p)
(not (eq system-type 'darwin)))
(dolist (elt files)
(let ((envvar (concat "VAR_" (upcase (md5 elt))))
(elt (encode-coding-string elt coding-system-for-read))
(default-directory tramp-test-temporary-file-directory)
(process-environment process-environment))
(setenv envvar elt)
;; The value of PS1 could confuse Tramp's detection
;; of process output. So we unset it temporarily.
(setenv "PS1")
(with-temp-buffer
(should (zerop (process-file "printenv" nil t nil)))
(goto-char (point-min))
(should
(re-search-forward
(format
"^%s=%s$"
(regexp-quote envvar)
(regexp-quote (getenv envvar))))))))))
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; Cleanup.
(ignore-errors (delete-directory tmp-name1 'recursive))
(ignore-errors (delete-directory tmp-name2 'recursive))))))
2013-11-05 15:46:57 +01:00
(defun tramp--test-special-characters ()
"Perform the test in `tramp-test40-special-characters*'."
;; Newlines, slashes and backslashes in file names are not
;; supported. So we don't test. And we don't test the tab
;; character on Windows or Cygwin, because the backslash is
;; interpreted as a path separator, preventing "\t" from being
;; expanded to <TAB>.
(let ((files
(list
(if (or (tramp--test-gvfs-p)
(tramp--test-rclone-p)
(tramp--test-sudoedit-p)
(tramp--test-windows-nt-or-smb-p))
"foo bar baz"
(if (or (tramp--test-adb-p)
(tramp--test-docker-p)
(eq system-type 'cygwin))
" foo bar baz "
" foo\tbar baz\t"))
"$foo$bar$$baz$"
"-foo-bar-baz-"
"%foo%bar%baz%"
"&foo&bar&baz&"
(unless (or (tramp--test-ftp-p)
(tramp--test-gvfs-p)
(tramp--test-windows-nt-or-smb-p))
"?foo?bar?baz?")
(unless (or (tramp--test-ftp-p)
(tramp--test-gvfs-p)
(tramp--test-windows-nt-or-smb-p))
"*foo*bar*baz*")
(if (or (tramp--test-gvfs-p) (tramp--test-windows-nt-or-smb-p))
"'foo'bar'baz'"
"'foo\"bar'baz\"")
"#foo~bar#baz~"
(if (or (tramp--test-gvfs-p) (tramp--test-windows-nt-or-smb-p))
"!foo!bar!baz!"
"!foo|bar!baz|")
(if (or (tramp--test-gvfs-p)
(tramp--test-rclone-p)
(tramp--test-windows-nt-or-smb-p))
";foo;bar;baz;"
":foo;bar:baz;")
(unless (or (tramp--test-gvfs-p) (tramp--test-windows-nt-or-smb-p))
"<foo>bar<baz>")
"(foo)bar(baz)"
(unless (or (tramp--test-ftp-p) (tramp--test-gvfs-p)) "[foo]bar[baz]")
"{foo}bar{baz}")))
;; Simplify test in order to speed up.
(apply #'tramp--test-check-files
(if (tramp--test-expensive-test)
files (list (mapconcat #'identity files ""))))))
;; These tests are inspired by Bug#17238.
(ert-deftest tramp-test40-special-characters ()
"Check special characters in file names."
(skip-unless (tramp--test-enabled))
(skip-unless (not (tramp--test-rsync-p)))
(skip-unless (not (tramp--test-windows-nt-and-pscp-psftp-p)))
(tramp--test-special-characters))
(ert-deftest tramp-test40-special-characters-with-stat ()
"Check special characters in file names.
Use the `stat' command."
:tags '(:expensive-test)
(skip-unless (tramp--test-enabled))
(skip-unless (tramp--test-sh-p))
(skip-unless (not (tramp--test-rsync-p)))
(skip-unless (not (tramp--test-windows-nt-and-pscp-psftp-p)))
(with-parsed-tramp-file-name tramp-test-temporary-file-directory nil
(skip-unless (tramp-get-remote-stat v)))
(let ((tramp-connection-properties
(append
`((,(regexp-quote (file-remote-p tramp-test-temporary-file-directory))
"perl" nil))
tramp-connection-properties)))
(tramp--test-special-characters)))
(ert-deftest tramp-test40-special-characters-with-perl ()
"Check special characters in file names.
Use the `perl' command."
:tags '(:expensive-test)
(skip-unless (tramp--test-enabled))
(skip-unless (tramp--test-sh-p))
(skip-unless (not (tramp--test-rsync-p)))
(skip-unless (not (tramp--test-windows-nt-and-pscp-psftp-p)))
(with-parsed-tramp-file-name tramp-test-temporary-file-directory nil
(skip-unless (tramp-get-remote-perl v)))
(let ((tramp-connection-properties
(append
`((,(regexp-quote (file-remote-p tramp-test-temporary-file-directory))
"stat" nil)
;; See `tramp-sh-handle-file-truename'.
(,(regexp-quote (file-remote-p tramp-test-temporary-file-directory))
"readlink" nil))
tramp-connection-properties)))
(tramp--test-special-characters)))
(ert-deftest tramp-test40-special-characters-with-ls ()
"Check special characters in file names.
Use the `ls' command."
:tags '(:expensive-test)
(skip-unless (tramp--test-enabled))
(skip-unless (tramp--test-sh-p))
(skip-unless (not (tramp--test-rsync-p)))
(skip-unless (not (tramp--test-windows-nt-and-batch)))
(skip-unless (not (tramp--test-windows-nt-and-pscp-psftp-p)))
(let ((tramp-connection-properties
(append
`((,(regexp-quote (file-remote-p tramp-test-temporary-file-directory))
"perl" nil)
(,(regexp-quote (file-remote-p tramp-test-temporary-file-directory))
"stat" nil)
;; See `tramp-sh-handle-file-truename'.
(,(regexp-quote (file-remote-p tramp-test-temporary-file-directory))
"readlink" nil))
tramp-connection-properties)))
(tramp--test-special-characters)))
(defun tramp--test-utf8 ()
"Perform the test in `tramp-test41-utf8*'."
(let* ((utf8 (if (and (eq system-type 'darwin)
(memq 'utf-8-hfs (coding-system-list)))
'utf-8-hfs 'utf-8))
(coding-system-for-read utf8)
(coding-system-for-write utf8)
(file-name-coding-system
(coding-system-change-eol-conversion utf8 'unix)))
(apply
#'tramp--test-check-files
(append
(list
(unless (tramp--test-hpux-p) "Γυρίστε το Γαλαξία με Ώτο Στοπ")
(unless (tramp--test-hpux-p)
"أصبح بوسعك الآن تنزيل نسخة كاملة من موسوعة ويكيبيديا العربية لتصفحها بلا اتصال بالإنترنت")
"银河系漫游指南系列"
"Автостопом по гала́ктике"
;; Use codepoints without a name. See Bug#31272.
"™›šbung")
(when (tramp--test-expensive-test)
(delete-dups
(mapcar
;; Use all available language specific snippets. Filter out
;; strings which use unencodable characters.
(lambda (x)
(and
(stringp (setq x (eval (get-language-info (car x) 'sample-text))))
(not (unencodable-char-position
0 (length x) file-name-coding-system nil x))
;; ?\n and ?/ shouldn't be part of any file name. ?\t,
;; ?. and ?? do not work for "smb" method.
(replace-regexp-in-string "[\t\n/.?]" "" x)))
language-info-alist)))))))
(ert-deftest tramp-test41-utf8 ()
"Check UTF8 encoding in file names and file contents."
(skip-unless (tramp--test-enabled))
(skip-unless (not (tramp--test-docker-p)))
(skip-unless (not (tramp--test-rsync-p)))
(skip-unless (not (tramp--test-windows-nt-and-batch)))
(skip-unless (not (tramp--test-windows-nt-and-pscp-psftp-p)))
(skip-unless (not (tramp--test-ksh-p)))
(tramp--test-utf8))
(ert-deftest tramp-test41-utf8-with-stat ()
"Check UTF8 encoding in file names and file contents.
Use the `stat' command."
:tags '(:expensive-test)
(skip-unless (tramp--test-enabled))
(skip-unless (tramp--test-sh-p))
(skip-unless (not (tramp--test-docker-p)))
(skip-unless (not (tramp--test-rsync-p)))
(skip-unless (not (tramp--test-windows-nt-and-batch)))
(skip-unless (not (tramp--test-windows-nt-and-pscp-psftp-p)))
(skip-unless (not (tramp--test-ksh-p)))
(with-parsed-tramp-file-name tramp-test-temporary-file-directory nil
(skip-unless (tramp-get-remote-stat v)))
(let ((tramp-connection-properties
(append
`((,(regexp-quote (file-remote-p tramp-test-temporary-file-directory))
"perl" nil))
tramp-connection-properties)))
(tramp--test-utf8)))
(ert-deftest tramp-test41-utf8-with-perl ()
"Check UTF8 encoding in file names and file contents.
Use the `perl' command."
:tags '(:expensive-test)
(skip-unless (tramp--test-enabled))
(skip-unless (tramp--test-sh-p))
(skip-unless (not (tramp--test-docker-p)))
(skip-unless (not (tramp--test-rsync-p)))
(skip-unless (not (tramp--test-windows-nt-and-batch)))
(skip-unless (not (tramp--test-windows-nt-and-pscp-psftp-p)))
(skip-unless (not (tramp--test-ksh-p)))
(with-parsed-tramp-file-name tramp-test-temporary-file-directory nil
(skip-unless (tramp-get-remote-perl v)))
(let ((tramp-connection-properties
(append
`((,(regexp-quote (file-remote-p tramp-test-temporary-file-directory))
"stat" nil)
;; See `tramp-sh-handle-file-truename'.
(,(regexp-quote (file-remote-p tramp-test-temporary-file-directory))
"readlink" nil))
tramp-connection-properties)))
(tramp--test-utf8)))
(ert-deftest tramp-test41-utf8-with-ls ()
"Check UTF8 encoding in file names and file contents.
Use the `ls' command."
:tags '(:expensive-test)
(skip-unless (tramp--test-enabled))
(skip-unless (tramp--test-sh-p))
(skip-unless (not (tramp--test-docker-p)))
(skip-unless (not (tramp--test-rsync-p)))
(skip-unless (not (tramp--test-windows-nt-and-batch)))
(skip-unless (not (tramp--test-windows-nt-and-pscp-psftp-p)))
(skip-unless (not (tramp--test-ksh-p)))
(let ((tramp-connection-properties
(append
`((,(regexp-quote (file-remote-p tramp-test-temporary-file-directory))
"perl" nil)
(,(regexp-quote (file-remote-p tramp-test-temporary-file-directory))
"stat" nil)
;; See `tramp-sh-handle-file-truename'.
(,(regexp-quote (file-remote-p tramp-test-temporary-file-directory))
"readlink" nil))
tramp-connection-properties)))
(tramp--test-utf8)))
(ert-deftest tramp-test42-file-system-info ()
"Check that `file-system-info' returns proper values."
(skip-unless (tramp--test-enabled))
;; Since Emacs 27.1.
(skip-unless (fboundp 'file-system-info))
;; `file-system-info' exists since Emacs 27. We don't want to see
;; compiler warnings for older Emacsen.
(let ((fsi (with-no-warnings
(file-system-info tramp-test-temporary-file-directory))))
(skip-unless fsi)
(should (and (consp fsi)
(= (length fsi) 3)
(numberp (nth 0 fsi))
(numberp (nth 1 fsi))
(numberp (nth 2 fsi))))))
;; `tramp-test43-asynchronous-requests' could be blocked. So we set a
;; timeout of 300 seconds, and we send a SIGUSR1 signal after 300
;; seconds. Similar check is performed in the timer function.
(defconst tramp--test-asynchronous-requests-timeout 300
"Timeout for `tramp-test43-asynchronous-requests'.")
(defmacro tramp--test-with-proper-process-name-and-buffer (proc &rest body)
"Set \"process-name\" and \"process-buffer\" connection properties.
This is needed in timer functions as well as process filters and sentinels."
(declare (indent 1) (debug (processp body)))
`(let* ((v (tramp-get-connection-property ,proc "vector" nil))
(pname (tramp-get-connection-property v "process-name" nil))
(pbuffer (tramp-get-connection-property v "process-buffer" nil)))
(tramp--test-message
"tramp--test-with-proper-process-name-and-buffer before %s %s"
(tramp-get-connection-property v "process-name" nil)
(tramp-get-connection-property v "process-buffer" nil))
(if (process-name ,proc)
(tramp-set-connection-property v "process-name" (process-name ,proc))
(tramp-flush-connection-property v "process-name"))
(if (process-buffer ,proc)
(tramp-set-connection-property
v "process-buffer" (process-buffer ,proc))
(tramp-flush-connection-property v "process-buffer"))
(tramp--test-message
"tramp--test-with-proper-process-name-and-buffer changed %s %s"
(tramp-get-connection-property v "process-name" nil)
(tramp-get-connection-property v "process-buffer" nil))
(unwind-protect
(progn ,@body)
(if pname
(tramp-set-connection-property v "process-name" pname)
(tramp-flush-connection-property v "process-name"))
(if pbuffer
(tramp-set-connection-property v "process-buffer" pbuffer)
(tramp-flush-connection-property v "process-buffer")))))
;; This test is inspired by Bug#16928.
(ert-deftest tramp-test43-asynchronous-requests ()
"Check parallel asynchronous requests.
Such requests could arrive from timers, process filters and
process sentinels. They shall not disturb each other."
;; The test fails from time to time, w/o a reproducible pattern. So
;; we mark it as unstable.
:tags '(:expensive-test :unstable)
(skip-unless (tramp--test-enabled))
;; Prior Emacs 27, `shell-file-name' was hard coded as "/bin/sh" for
;; remote processes in Emacs. That doesn't work for tramp-adb.el.
(skip-unless (or (and (tramp--test-adb-p) (tramp--test-emacs27-p))
(tramp--test-sh-p)))
(with-timeout
(tramp--test-asynchronous-requests-timeout (tramp--test-timeout-handler))
(define-key special-event-map [sigusr1] #'tramp--test-timeout-handler)
(let* (;; For the watchdog.
(default-directory (expand-file-name temporary-file-directory))
(shell-file-name (if (tramp--test-adb-p) "/system/bin/sh" "/bin/sh"))
;; It doesn't work on w32 systems.
(watchdog
(unless (tramp--test-windows-nt)
(start-process-shell-command
"*watchdog*" nil
(format
"sleep %d; kill -USR1 %d"
tramp--test-asynchronous-requests-timeout (emacs-pid)))))
(tmp-name (tramp--test-make-temp-name))
(default-directory tmp-name)
;; Do not cache Tramp properties.
(remote-file-name-inhibit-cache t)
(process-file-side-effects t)
;; Suppress nasty messages.
(inhibit-message t)
;; Do not run delayed timers.
(timer-max-repeats 0)
;; Number of asynchronous processes for test. Tests on
;; some machines handle less parallel processes.
(number-proc
(cond
((ignore-errors
(string-to-number (getenv "REMOTE_PARALLEL_PROCESSES"))))
((getenv "EMACS_HYDRA_CI") 5)
(t 10)))
;; On hydra, timings are bad.
(timer-repeat
(cond
((getenv "EMACS_HYDRA_CI") 10)
(t 1)))
;; We must distinguish due to performance reasons.
;; (timer-operation
;; (cond
;; ((tramp--test-mock-p) #'vc-registered)
;; (t #'file-attributes)))
;; This is when all timers start. We check inside the
;; timer function, that we don't exceed timeout.
(timer-start (current-time))
timer buffers kill-buffer-query-functions)
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
(unwind-protect
(progn
(make-directory tmp-name)
;; Setup a timer in order to raise an ordinary command
;; again and again. `vc-registered' is well suited,
;; because there are many checks.
(setq
timer
(run-at-time
0 timer-repeat
(lambda ()
(tramp--test-with-proper-process-name-and-buffer
(get-buffer-process
(tramp-get-buffer
(tramp-dissect-file-name
tramp-test-temporary-file-directory)))
(when (> (- (time-to-seconds) (time-to-seconds timer-start))
tramp--test-asynchronous-requests-timeout)
(tramp--test-timeout-handler))
(when buffers
(let ((time (float-time))
(default-directory tmp-name)
(file
(buffer-name
(nth (random (length buffers)) buffers))))
(tramp--test-message
"Start timer %s %s" file (current-time-string))
;; (funcall timer-operation file)
(tramp--test-message
"Stop timer %s %s" file (current-time-string))
;; Adjust timer if it takes too much time.
(when (> (- (float-time) time) timer-repeat)
(setq timer-repeat (* 1.1 timer-repeat))
(setf (timer--repeat-delay timer) timer-repeat)
(tramp--test-message
"Increase timer %s" timer-repeat))))))))
;; Create temporary buffers. The number of buffers
;; corresponds to the number of processes; it could be
;; increased in order to make pressure on Tramp.
(dotimes (_ number-proc)
(setq buffers (cons (generate-new-buffer "foo") buffers)))
;; Open asynchronous processes. Set process filter and sentinel.
(dolist (buf buffers)
;; Activate timer.
(sit-for 0.01 'nodisp)
(let ((proc
(start-file-process-shell-command
(buffer-name buf) buf
(concat
"(read line && echo $line >$line && echo $line);"
"(read line && cat $line);"
"(read line && rm -f $line)")))
(file (expand-file-name (buffer-name buf))))
;; Remember the file name. Add counter.
(process-put proc 'foo file)
(process-put proc 'bar 0)
;; Add process filter.
(set-process-filter
proc
(lambda (proc string)
(tramp--test-with-proper-process-name-and-buffer proc
(tramp--test-message
"Process filter %s %s %s"
proc string (current-time-string))
(with-current-buffer (process-buffer proc)
(insert string))
(when (< (process-get proc 'bar) 2)
(dired-uncache (process-get proc 'foo))
(should (file-attributes (process-get proc 'foo)))))))
;; Add process sentinel. It shall not perform remote
;; operations, triggering Tramp processes. This blocks.
(set-process-sentinel
proc
(lambda (proc _state)
(tramp--test-with-proper-process-name-and-buffer proc
(tramp--test-message
"Process sentinel %s %s" proc (current-time-string)))))))
;; Send a string to the processes. Use a random order of
;; the buffers. Mix with regular operation.
(let ((buffers (copy-sequence buffers)))
(while buffers
(let* ((buf (nth (random (length buffers)) buffers))
(proc (get-buffer-process buf))
(file (process-get proc 'foo))
(count (process-get proc 'bar)))
(tramp--test-message
"Start action %d %s %s" count buf (current-time-string))
;; Regular operation prior process action.
(dired-uncache file)
(if (= count 0)
(should-not (file-attributes file))
(should (file-attributes file)))
;; Send string to process.
(process-send-string proc (format "%s\n" (buffer-name buf)))
(while (accept-process-output nil 0))
(tramp--test-message
"Continue action %d %s %s" count buf (current-time-string))
;; Regular operation post process action.
(dired-uncache file)
(if (= count 2)
(should-not (file-attributes file))
(should (file-attributes file)))
(tramp--test-message
"Stop action %d %s %s" count buf (current-time-string))
(process-put proc 'bar (1+ count))
(unless (process-live-p proc)
(setq buffers (delq buf buffers))))))
;; Checks. All process output shall exists in the
;; respective buffers. All created files shall be
;; deleted.
(tramp--test-message "Check %s" (current-time-string))
(dolist (buf buffers)
(with-current-buffer buf
(should
(string-equal
;; tramp-adb.el echoes, so we must add the three strings.
(if (tramp--test-adb-p)
(format "%s\n%s\n%s\n%s\n%s\n" buf buf buf buf buf)
(format "%s\n%s\n" buf buf))
(buffer-string)))))
(should-not
(directory-files
tmp-name nil directory-files-no-dot-files-regexp)))
;; Cleanup.
(define-key special-event-map [sigusr1] #'ignore)
(ignore-errors (quit-process watchdog))
(dolist (buf buffers)
(ignore-errors (delete-process (get-buffer-process buf)))
(ignore-errors (kill-buffer buf)))
(ignore-errors (cancel-timer timer))
(ignore-errors (delete-directory tmp-name 'recursive))))))
;; This test is inspired by Bug#29163.
(ert-deftest tramp-test44-auto-load ()
"Check that Tramp autoloads properly."
(skip-unless (tramp--test-enabled))
(let ((default-directory (expand-file-name temporary-file-directory))
(code
(format
Stronger check for Tramp method * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-rclone.el (tramp-rclone-maybe-open-connection): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-maybe-open-connection): Use `tramp-get-connection-name'. * lisp/net/tramp-sh.el (tramp-sh-handle-make-symbolic-link): * lisp/net/tramp-smb.el (tramp-smb-handle-make-symbolic-link): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-handle-make-symbolic-link): Don't check remote TARGET. * lisp/net/tramp.el (tramp-dissect-file-name): Check for proper method. (tramp-file-name-for-operation): Take only 2nd argument into account for file name handler. (tramp-file-name-handler): Suppress checks for `file-remote-p'. * test/lisp/net/tramp-archive-tests.el (tramp-archive-test02-file-name-dissect): Suppress check for wrong method. * test/lisp/net/tramp-tests.el (tramp--test-instrument-test-case): Dump *all* Tramp buffers. (tramp-test02-file-name-dissect) (tramp-test02-file-name-dissect-simplified) (tramp-test02-file-name-dissect-separate): Check also wrong method. (tramp-test03-file-name-defaults): Check, that the respective Tramp package is loaded. (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name) (tramp-test06-directory-file-name, tramp-test44-auto-load): Suppress check for wrong method. (tramp-test30-make-process): Remove instrumentation code. (tramp-test31-interrupt-process, tramp-test36-vc-registered): Guarantee that connection is established prior starting process.
2019-06-04 12:51:45 +02:00
;; Suppress method name check.
"(let ((non-essential t)) \
(message \"Tramp loaded: %%s\" (and (file-remote-p %S) t)))"
tramp-test-temporary-file-directory)))
(should
(string-match
"Tramp loaded: t[\n\r]+"
(shell-command-to-string
(format
"%s -batch -Q -L %s --eval %s"
(shell-quote-argument
(expand-file-name invocation-name invocation-directory))
(mapconcat #'shell-quote-argument load-path " -L ")
(shell-quote-argument code)))))))
(ert-deftest tramp-test44-delay-load ()
"Check that Tramp is loaded lazily, only when needed."
;; The autoloaded Tramp objects are different since Emacs 26.1. We
;; cannot test older Emacsen, therefore.
(skip-unless (tramp--test-emacs26-p))
;; Tramp is neither loaded at Emacs startup, nor when completing a
;; non-Tramp file name like "/foo". Completing a Tramp-alike file
;; name like "/foo:" autoloads Tramp, when `tramp-mode' is t.
(let ((default-directory (expand-file-name temporary-file-directory))
(code
"(progn \
(setq tramp-mode %s) \
(message \"Tramp loaded: %%s\" (featurep 'tramp)) \
(file-name-all-completions \"/foo\" \"/\") \
(message \"Tramp loaded: %%s\" (featurep 'tramp)) \
(file-name-all-completions \"/foo:\" \"/\") \
(message \"Tramp loaded: %%s\" (featurep 'tramp)))"))
;; Tramp doesn't load when `tramp-mode' is nil.
(dolist (tm '(t nil))
(should
(string-match
(format
"Tramp loaded: nil[\n\r]+Tramp loaded: nil[\n\r]+Tramp loaded: %s[\n\r]+"
tm)
(shell-command-to-string
(format
"%s -batch -Q -L %s --eval %s"
(shell-quote-argument
(expand-file-name invocation-name invocation-directory))
(mapconcat #'shell-quote-argument load-path " -L ")
(shell-quote-argument (format code tm)))))))))
(ert-deftest tramp-test44-recursive-load ()
"Check that Tramp does not fail due to recursive load."
(skip-unless (tramp--test-enabled))
(let ((default-directory (expand-file-name temporary-file-directory)))
(dolist (code
(list
(format
"(expand-file-name %S)" tramp-test-temporary-file-directory)
(format
"(let ((default-directory %S)) (expand-file-name %S))"
tramp-test-temporary-file-directory
temporary-file-directory)))
(should-not
(string-match
"Recursive load"
(shell-command-to-string
(format
"%s -batch -Q -L %s --eval %s"
(shell-quote-argument
(expand-file-name invocation-name invocation-directory))
(mapconcat #'shell-quote-argument load-path " -L ")
(shell-quote-argument code))))))))
(ert-deftest tramp-test44-remote-load-path ()
"Check that Tramp autoloads its packages with remote `load-path'."
;; The autoloaded Tramp objects are different since Emacs 26.1. We
;; cannot test older Emacsen, therefore.
(skip-unless (tramp--test-emacs26-p))
;; `tramp-cleanup-all-connections' is autoloaded from tramp-cmds.el.
;; It shall still work, when a remote file name is in the
;; `load-path'.
(let ((default-directory (expand-file-name temporary-file-directory))
(code
"(let ((force-load-messages t) \
(load-path (cons \"/foo:bar:\" load-path))) \
(tramp-cleanup-all-connections))"))
(should
(string-match
(format
"Loading %s"
(regexp-quote
(expand-file-name
"tramp-cmds" (file-name-directory (locate-library "tramp")))))
(shell-command-to-string
(format
"%s -batch -Q -L %s -l tramp-sh --eval %s"
(shell-quote-argument
(expand-file-name invocation-name invocation-directory))
(mapconcat #'shell-quote-argument load-path " -L ")
(shell-quote-argument code)))))))
(ert-deftest tramp-test45-unload ()
"Check that Tramp and its subpackages unload completely.
Since it unloads Tramp, it shall be the last test to run."
:tags '(:expensive-test)
(skip-unless noninteractive)
;; The autoloaded Tramp objects are different since Emacs 26.1. We
;; cannot test older Emacsen, therefore.
(skip-unless (tramp--test-emacs26-p))
;; We have autoloaded objects from tramp.el and tramp-archive.el.
;; In order to remove them, we first need to load both packages.
(require 'tramp)
(require 'tramp-archive)
(should (featurep 'tramp))
(should (featurep 'tramp-archive))
;; This unloads also tramp-archive.el and tramp-theme.el if needed.
(unload-feature 'tramp 'force)
;; No Tramp feature must be left.
(should-not (featurep 'tramp))
(should-not (featurep 'tramp-archive))
(should-not (featurep 'tramp-theme))
(should-not
(all-completions
"tramp" (delq 'tramp-tests (delq 'tramp-archive-tests features))))
;; `file-name-handler-alist' must be clean.
(should-not (all-completions "tramp" (mapcar #'cdr file-name-handler-alist)))
;; There shouldn't be left a bound symbol, except buffer-local
;; variables, and autoload functions. We do not regard our test
;; symbols, and the Tramp unload hooks.
(mapatoms
(lambda (x)
(and (or (and (boundp x) (null (local-variable-if-set-p x)))
(and (functionp x) (null (autoloadp (symbol-function x)))))
(string-match "^tramp" (symbol-name x))
(not (string-match "^tramp\\(-archive\\)?--?test" (symbol-name x)))
(not (string-match "unload-hook$" (symbol-name x)))
(ert-fail (format "`%s' still bound" x)))))
;; The defstruct `tramp-file-name' and all its internal functions
;; shall be purged.
(should-not (with-no-warnings (cl--find-class 'tramp-file-name)))
(mapatoms
(lambda (x)
(and (functionp x)
(string-match "tramp-file-name" (symbol-name x))
(ert-fail (format "Structure function `%s' still exists" x)))))
;; There shouldn't be left a hook function containing a Tramp
;; function. We do not regard the Tramp unload hooks.
(mapatoms
(lambda (x)
(and (boundp x)
(string-match "-\\(hook\\|function\\)s?$" (symbol-name x))
(not (string-match "unload-hook$" (symbol-name x)))
(consp (symbol-value x))
(ignore-errors (all-completions "tramp" (symbol-value x)))
(ert-fail (format "Hook `%s' still contains Tramp function" x))))))
(defun tramp-test-all (&optional interactive)
"Run all tests for \\[tramp]."
(interactive "p")
(funcall
(if interactive
#'ert-run-tests-interactively #'ert-run-tests-batch) "^tramp"))
2013-11-05 15:46:57 +01:00
;; TODO:
;; * dired-compress-file
;; * dired-uncache
;; * file-equal-p (partly done in `tramp-test21-file-links')
;; * file-in-directory-p
Implement quoting the local part of a remote file name * doc/emacs/files.texi (Quoted File Names): * etc/NEWS: Mention quoting the local part of a remote file name. * lisp/net/tramp.el (tramp-dissect-file-name): Check with `tramp-tramp-file-p'. (tramp-quoted-name-p, tramp-quote-name, tramp-unquote-name): New defsubst. (tramp-handle-substitute-in-file-name) (tramp-handle-make-auto-save-file-name): Handle quoted files. (tramp-shell-quote-argument): Unquote argument. * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename): Handle quoted files. * test/lisp/net/tramp-tests.el (tramp--test-expensive-test): New defvar. (tramp--test-make-temp-name): New argument QUOTED. (tramp-test01-file-name-syntax) (tramp-test02-file-name-dissect) (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name, tramp-test07-file-exists-p) (tramp-test08-file-local-copy) (tramp-test09-insert-file-contents) (tramp-test10-write-region, tramp-test11-copy-file) (tramp-test12-rename-file, tramp-test13-make-directory) (tramp-test14-delete-directory, tramp-test15-copy-directory) (tramp-test16-directory-files) (tramp-test17-insert-directory) (tramp-test18-file-attributes) (tramp-test19-directory-files-and-attributes) (tramp-test20-file-modes, tramp-test21-file-links) (tramp-test22-file-times, tramp-test23-visited-file-modtime) (tramp-test24-file-name-completion, tramp-test25-load) (tramp-test26-process-file, tramp-test27-start-file-process) (tramp-test28-shell-command, tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp--test-check-files) (tramp-test35-asynchronous-requests): Test also quoted file names. (tramp--test-shell-command-to-string-asynchronously): Rename. (tramp-test29-environment-variables): Use it.
2016-12-04 12:12:06 +01:00
;; * file-name-case-insensitive-p
;; * tramp-set-file-uid-gid
2013-11-05 15:46:57 +01:00
;; * Work on skipped tests. Make a comment, when it is impossible.
Implement command completion in remote shells. (Bug#31704) * doc/lispref/files.texi (Locating Files): Describe optional argument REMOTE of `executable-find'. (Magic File Names): Add `exec-path'. * doc/lispref/processes.texi (Subprocess Creation): Describe function `exec-path'. * doc/misc/tramp.texi (Remote programs): Explain refresh of search paths by `tramp-cleanup-this-connection'. * etc/NEWS: Mention 'exec-path' and 'executable-find'. * lisp/files.el (exec-path): New defun. (executable-find): Add optional argument REMOTE. * lisp/shell.el (shell-completion-vars): Set `comint-file-name-prefix'. (shell--command-completion-data): Use `(exec-path)'. (Bug#31704) * lisp/net/ange-ftp.el (exec-path): * lisp/net/tramp.el (tramp-file-name-for-operation): * lisp/net/tramp-adb.el (tramp-adb-file-name-handler-alist): * lisp/net/tramp-archive.el (tramp-archive-file-name-handler-alist): * lisp/net/tramp-gvfs.el (tramp-gvfs-file-name-handler-alist): * lisp/net/tramp-sh.el (tramp-sh-file-name-handler-alist): * lisp/net/tramp-smb.el (tramp-smb-file-name-handler-alist) <exec-path>: Add handler. * lisp/net/tramp-adb.el (tramp-adb-handle-exec-path): New defun. (tramp-adb-maybe-open-connection): Do not set "remote-path" connection property. * lisp/net/tramp-compat.el (tramp-compat-exec-path): New defun. * lisp/net/tramp-sh.el (tramp-sh-handle-exec-path): New defun. * lisp/net/tramp.el (tramp-eshell-directory-change): Use it. * test/lisp/net/tramp-archive-tests.el (tramp-archive-test38-make-nearby-temp-file) (tramp-archive-test41-file-system-info) (tramp-archive-test43-auto-load) (tramp-archive-test43-delay-load): Rename. * test/lisp/net/tramp-tests.el (tramp-test34-exec-path): New test. (tramp-test36-make-auto-save-file-name) (tramp-test37-find-backup-file-name) (tramp-test38-make-nearby-temp-file) (tramp-test39-special-characters) (tramp-test39-special-characters-with-stat) (tramp-test39-special-characters-with-perl) (tramp-test39-special-characters-with-ls, tramp-test40-utf8) (tramp-test40-utf8-with-stat, tramp-test40-utf8-with-perl) (tramp-test40-utf8-with-ls, tramp-test41-file-system-info) (tramp-test42-asynchronous-requests, tramp-test43-auto-load) (tramp-test43-delay-load, tramp-test43-recursive-load) (tramp-test43-remote-load-path, tramp-test44-unload): Rename.
2018-06-20 12:13:56 +02:00
;; * Revisit expensive tests, once problems in `tramp-error' are solved.
;; * Fix `tramp-test05-expand-file-name-relative' in `expand-file-name'.
;; * Fix `tramp-test06-directory-file-name' for `ftp'.
Add new Tramp connection method "owncloud" * doc/misc/tramp.texi (all): Use @acronym{GNOME} thoroughly. (Using GNOME Online Accounts based methods): Rename from "Using Google Drive". Add `owncloud'. (GVFS based methods): Add `owncloud'. * etc/NEWS: Add Tramp connection method "owncloud". * lisp/net/tramp-gvfs.el (tramp-gvfs-methods): Add "owncloud". Remove goa methods if not supported. (tramp-goa-methods, tramp-goa-service, tramp-goa-path) (tramp-goa-path-accounts, tramp-goa-interface-documents) (tramp-goa-interface-printers, tramp-goa-interface-files) (tramp-goa-interface-contacts, tramp-goa-interface-calendar) (tramp-goa-interface-oauth2based) (tramp-goa-interface-account, tramp-goa-identity-regexp) (tramp-goa-interface-mail, tramp-goa-interface-chat) (tramp-goa-interface-photos, tramp-goa-path-manager) (tramp-goa-interface-documents) (tramp-gvfs-owncloud-default-prefix) (tramp-gvfs-owncloud-default-prefix-regexp): New defconst. (tramp-goa-name): New defstruct. (tramp-gvfs-stringify-dbus-message): Handle all consp messages. (tramp-dbus-function, tramp-gvfs-get-remote-prefix) (tramp-get-goa-accounts): New defun. (with-tramp-dbus-call-method): Use it. (with-tramp-dbus-get-all-properties): New defmacro. (tramp-gvfs-url-file-name) (tramp-gvfs-handler-mounted-unmounted) (tramp-gvfs-connection-mounted-p, tramp-gvfs-mount-spec): Map between "owncloud" and "davs". (tramp-gvfs-maybe-open-connection): Set "vector" connection property. * test/lisp/net/tramp-tests.el (tramp-gvfs-handler-askquestion): Suppress run in tests. (tramp--test-owncloud-p): New defun. (tramp-test11-copy-file, tramp-test12-rename-file): Use it.
2018-01-05 21:04:39 +01:00
;; * Investigate, why `tramp-test11-copy-file' and `tramp-test12-rename-file'
;; do not work properly for `nextcloud'.
;; * Fix `tramp-test29-start-file-process' and
;; `tramp-test30-make-process' on MS Windows (`process-send-eof'?).
Stronger check for Tramp method * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * lisp/net/tramp-rclone.el (tramp-rclone-maybe-open-connection): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-maybe-open-connection): Use `tramp-get-connection-name'. * lisp/net/tramp-sh.el (tramp-sh-handle-make-symbolic-link): * lisp/net/tramp-smb.el (tramp-smb-handle-make-symbolic-link): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-handle-make-symbolic-link): Don't check remote TARGET. * lisp/net/tramp.el (tramp-dissect-file-name): Check for proper method. (tramp-file-name-for-operation): Take only 2nd argument into account for file name handler. (tramp-file-name-handler): Suppress checks for `file-remote-p'. * test/lisp/net/tramp-archive-tests.el (tramp-archive-test02-file-name-dissect): Suppress check for wrong method. * test/lisp/net/tramp-tests.el (tramp--test-instrument-test-case): Dump *all* Tramp buffers. (tramp-test02-file-name-dissect) (tramp-test02-file-name-dissect-simplified) (tramp-test02-file-name-dissect-separate): Check also wrong method. (tramp-test03-file-name-defaults): Check, that the respective Tramp package is loaded. (tramp-test04-substitute-in-file-name) (tramp-test05-expand-file-name) (tramp-test06-directory-file-name, tramp-test44-auto-load): Suppress check for wrong method. (tramp-test30-make-process): Remove instrumentation code. (tramp-test31-interrupt-process, tramp-test36-vc-registered): Guarantee that connection is established prior starting process.
2019-06-04 12:51:45 +02:00
;; * Implement `tramp-test31-interrupt-process' for `adb'.
;; * Fix Bug#16928 in `tramp-test43-asynchronous-requests'. A remote
;; file name operation cannot run in the timer. Remove `:unstable' tag?
2013-11-05 15:46:57 +01:00
(provide 'tramp-tests)
;;; tramp-tests.el ends here