summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
authorMichael Albinus <michael.albinus@gmx.de>2019-11-06 16:49:35 +0100
committerMichael Albinus <michael.albinus@gmx.de>2019-11-06 16:49:35 +0100
commitda2df1c1b5b5a7373f361875b43dd003a221e2e0 (patch)
tree10be03ac989db4fc075422d9648b5f816b3bc898 /lisp
parentd30f5e7eeecd5425e236542189a1d683c00e7ed7 (diff)
downloademacs-da2df1c1b5b5a7373f361875b43dd003a221e2e0.tar.gz
emacs-da2df1c1b5b5a7373f361875b43dd003a221e2e0.tar.bz2
emacs-da2df1c1b5b5a7373f361875b43dd003a221e2e0.zip
More error checks in Tramp's make-directory
* lisp/net/tramp-adb.el (tramp-adb-handle-make-directory): * lisp/net/tramp-gvfs.el (tramp-gvfs-handle-make-directory): * lisp/net/tramp-sh.el (tramp-sh-handle-make-directory): * lisp/net/tramp-smb.el (tramp-smb-handle-make-directory): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-handle-make-directory): Signal `file-already-exists' if DIR exists. * test/lisp/net/tramp-tests.el (tramp-test04-substitute-in-file-name): Fix thinko. (tramp-test13-make-directory, tramp-test14-delete-directory) (tramp-test15-copy-directory): Extend tests.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/net/tramp-adb.el2
-rw-r--r--lisp/net/tramp-gvfs.el2
-rw-r--r--lisp/net/tramp-sh.el2
-rw-r--r--lisp/net/tramp-smb.el2
-rw-r--r--lisp/net/tramp-sudoedit.el2
-rw-r--r--lisp/net/tramp.el4
6 files changed, 12 insertions, 2 deletions
diff --git a/lisp/net/tramp-adb.el b/lisp/net/tramp-adb.el
index a4f5760f72e..cfbda0824e7 100644
--- a/lisp/net/tramp-adb.el
+++ b/lisp/net/tramp-adb.el
@@ -514,6 +514,8 @@ Emacs dired can't find files."
"Like `make-directory' for Tramp files."
(setq dir (expand-file-name dir))
(with-parsed-tramp-file-name dir nil
+ (when (and (null parents) (file-exists-p dir))
+ (tramp-error v 'file-already-exists "Directory already exists %s" dir))
(when parents
(let ((par (expand-file-name ".." dir)))
(unless (file-directory-p par)
diff --git a/lisp/net/tramp-gvfs.el b/lisp/net/tramp-gvfs.el
index dbda24b9ac1..f13564c544e 100644
--- a/lisp/net/tramp-gvfs.el
+++ b/lisp/net/tramp-gvfs.el
@@ -1310,6 +1310,8 @@ file-notify events."
"Like `make-directory' for Tramp files."
(setq dir (directory-file-name (expand-file-name dir)))
(with-parsed-tramp-file-name dir nil
+ (when (and (null parents) (file-exists-p dir))
+ (tramp-error v 'file-already-exists "Directory already exists %s" dir))
(tramp-flush-directory-properties v localname)
(save-match-data
(let ((ldir (file-name-directory dir)))
diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el
index be531ed3192..76bb10a277f 100644
--- a/lisp/net/tramp-sh.el
+++ b/lisp/net/tramp-sh.el
@@ -2513,6 +2513,8 @@ The method used must be an out-of-band method."
"Like `make-directory' for Tramp files."
(setq dir (expand-file-name dir))
(with-parsed-tramp-file-name dir nil
+ (when (and (null parents) (file-exists-p dir))
+ (tramp-error v 'file-already-exists "Directory already exists %s" dir))
;; When PARENTS is non-nil, DIR could be a chain of non-existent
;; directories a/b/c/... Instead of checking, we simply flush the
;; whole cache.
diff --git a/lisp/net/tramp-smb.el b/lisp/net/tramp-smb.el
index f87d4becfe0..95cdb4cbffe 100644
--- a/lisp/net/tramp-smb.el
+++ b/lisp/net/tramp-smb.el
@@ -1139,6 +1139,8 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored."
(unless (file-name-absolute-p dir)
(setq dir (expand-file-name dir default-directory)))
(with-parsed-tramp-file-name dir nil
+ (when (and (null parents) (file-exists-p dir))
+ (tramp-error v 'file-already-exists "Directory already exists %s" dir))
(let* ((ldir (file-name-directory dir)))
;; Make missing directory parts.
(when (and parents
diff --git a/lisp/net/tramp-sudoedit.el b/lisp/net/tramp-sudoedit.el
index e7a892c7465..43ac6ff66b3 100644
--- a/lisp/net/tramp-sudoedit.el
+++ b/lisp/net/tramp-sudoedit.el
@@ -587,6 +587,8 @@ the result will be a local, non-Tramp, file name."
"Like `make-directory' for Tramp files."
(setq dir (expand-file-name dir))
(with-parsed-tramp-file-name dir nil
+ (when (and (null parents) (file-exists-p dir))
+ (tramp-error v 'file-already-exists "Directory already exists %s" dir))
;; When PARENTS is non-nil, DIR could be a chain of non-existent
;; directories a/b/c/... Instead of checking, we simply flush the
;; whole cache.
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index acb5a93687c..09d125945a1 100644
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -3019,8 +3019,8 @@ User is always nil."
(defun tramp-handle-copy-directory
(directory newname &optional keep-date parents copy-contents)
"Like `copy-directory' for Tramp files."
- ;; `directory-files' creates `newname' before running this check.
- ;; So we do it ourselves.
+ ;; `copy-directory' creates NEWNAME before running this check. So
+ ;; we do it ourselves.
(unless (file-exists-p directory)
(tramp-error
(tramp-dissect-file-name directory) tramp-file-missing