diff options
| author | Michael Albinus | 2017-10-20 12:46:54 +0200 |
|---|---|---|
| committer | Michael Albinus | 2017-10-20 12:46:54 +0200 |
| commit | b500e06f4d05dc094b79f8f2c063e070a5a3306e (patch) | |
| tree | e0d6131de893be18d6217f7709a40a5bedd2c72d /test | |
| parent | d815de017bb531fed751ee0515ed90b73d7a9936 (diff) | |
| download | emacs-b500e06f4d05dc094b79f8f2c063e070a5a3306e.tar.gz emacs-b500e06f4d05dc094b79f8f2c063e070a5a3306e.zip | |
Fix Bug#28896
* lisp/net/tramp-adb.el (tramp-adb-handle-rename-file):
* lisp/net/tramp-gvfs.el (tramp-gvfs-do-copy-or-rename-file):
* lisp/net/tramp-sh.el (tramp-do-copy-or-rename-file): Handle FILENAME
being a directory. (Bug#28896)
* test/lisp/net/tramp-tests.el (tramp-test11-copy-file)
(tramp-test12-rename-file): Test also FILENAME being a directory.
Diffstat (limited to 'test')
| -rw-r--r-- | test/lisp/net/tramp-tests.el | 382 |
1 files changed, 189 insertions, 193 deletions
diff --git a/test/lisp/net/tramp-tests.el b/test/lisp/net/tramp-tests.el index c88abbfcb26..e92d1b6203c 100644 --- a/test/lisp/net/tramp-tests.el +++ b/test/lisp/net/tramp-tests.el | |||
| @@ -1883,96 +1883,98 @@ This checks also `file-name-as-directory', `file-name-directory', | |||
| 1883 | (let (quoted) | 1883 | (let (quoted) |
| 1884 | (let ((tmp-name1 (tramp--test-make-temp-name nil quoted)) | 1884 | (let ((tmp-name1 (tramp--test-make-temp-name nil quoted)) |
| 1885 | (tmp-name2 (tramp--test-make-temp-name nil quoted)) | 1885 | (tmp-name2 (tramp--test-make-temp-name nil quoted)) |
| 1886 | (tmp-name3 (tramp--test-make-temp-name nil quoted)) | 1886 | (tmp-name3 (tramp--test-make-temp-name 'local quoted))) |
| 1887 | (tmp-name4 (tramp--test-make-temp-name 'local quoted)) | 1887 | (dolist (source-target |
| 1888 | (tmp-name5 (tramp--test-make-temp-name 'local quoted))) | 1888 | `(;; Copy on remote side. |
| 1889 | 1889 | (,tmp-name1 . ,tmp-name2) | |
| 1890 | ;; Copy on remote side. | 1890 | ;; Copy from remote side to local side. |
| 1891 | (unwind-protect | 1891 | (,tmp-name1 . ,tmp-name3) |
| 1892 | (progn | 1892 | ;; Copy from local side to remote side. |
| 1893 | (write-region "foo" nil tmp-name1) | 1893 | (,tmp-name3 . ,tmp-name1))) |
| 1894 | (copy-file tmp-name1 tmp-name2) | 1894 | (let ((source (car source-target)) |
| 1895 | (should (file-exists-p tmp-name2)) | 1895 | (target (cdr source-target))) |
| 1896 | (with-temp-buffer | 1896 | |
| 1897 | (insert-file-contents tmp-name2) | 1897 | ;; Copy simple file. |
| 1898 | (should (string-equal (buffer-string) "foo"))) | 1898 | (unwind-protect |
| 1899 | (should-error | 1899 | (progn |
| 1900 | (copy-file tmp-name1 tmp-name2) | 1900 | (write-region "foo" nil source) |
| 1901 | :type 'file-already-exists) | 1901 | (should (file-exists-p source)) |
| 1902 | (copy-file tmp-name1 tmp-name2 'ok) | 1902 | (copy-file source target) |
| 1903 | (make-directory tmp-name3) | 1903 | (should (file-exists-p target)) |
| 1904 | ;; This has been changed in Emacs 26.1. | 1904 | (with-temp-buffer |
| 1905 | (when (tramp--test-emacs26-p) | 1905 | (insert-file-contents target) |
| 1906 | (should-error | 1906 | (should (string-equal (buffer-string) "foo"))) |
| 1907 | (copy-file tmp-name1 tmp-name3) | 1907 | (should-error |
| 1908 | :type 'file-already-exists)) | 1908 | (copy-file source target) |
| 1909 | (copy-file tmp-name1 (file-name-as-directory tmp-name3)) | 1909 | :type 'file-already-exists) |
| 1910 | (should | 1910 | (copy-file source target 'ok)) |
| 1911 | (file-exists-p | 1911 | |
| 1912 | (expand-file-name (file-name-nondirectory tmp-name1) tmp-name3)))) | 1912 | ;; Cleanup. |
| 1913 | 1913 | (ignore-errors (delete-file source)) | |
| 1914 | ;; Cleanup. | 1914 | (ignore-errors (delete-file target))) |
| 1915 | (ignore-errors (delete-file tmp-name1)) | 1915 | |
| 1916 | (ignore-errors (delete-file tmp-name2)) | 1916 | ;; Copy file to directory. |
| 1917 | (ignore-errors (delete-directory tmp-name3 'recursive))) | 1917 | (unwind-protect |
| 1918 | 1918 | (progn | |
| 1919 | ;; Copy from remote side to local side. | 1919 | (write-region "foo" nil source) |
| 1920 | (unwind-protect | 1920 | (should (file-exists-p source)) |
| 1921 | (progn | 1921 | (make-directory target) |
| 1922 | (write-region "foo" nil tmp-name1) | 1922 | (should (file-directory-p target)) |
| 1923 | (copy-file tmp-name1 tmp-name4) | 1923 | ;; This has been changed in Emacs 26.1. |
| 1924 | (should (file-exists-p tmp-name4)) | 1924 | (when (tramp--test-emacs26-p) |
| 1925 | (with-temp-buffer | 1925 | (should-error |
| 1926 | (insert-file-contents tmp-name4) | 1926 | (copy-file source target) |
| 1927 | (should (string-equal (buffer-string) "foo"))) | 1927 | :type 'file-already-exists)) |
| 1928 | (should-error | 1928 | (copy-file source (file-name-as-directory target)) |
| 1929 | (copy-file tmp-name1 tmp-name4) | 1929 | (should |
| 1930 | :type 'file-already-exists) | 1930 | (file-exists-p |
| 1931 | (copy-file tmp-name1 tmp-name4 'ok) | 1931 | (expand-file-name (file-name-nondirectory source) target)))) |
| 1932 | (make-directory tmp-name5) | 1932 | |
| 1933 | ;; This has been changed in Emacs 26.1. | 1933 | ;; Cleanup. |
| 1934 | (when (tramp--test-emacs26-p) | 1934 | (ignore-errors (delete-file source)) |
| 1935 | (should-error | 1935 | (ignore-errors (delete-directory target 'recursive))) |
| 1936 | (copy-file tmp-name1 tmp-name5) | 1936 | |
| 1937 | :type 'file-already-exists)) | 1937 | ;; Copy directory to existing directory. |
| 1938 | (copy-file tmp-name1 (file-name-as-directory tmp-name5)) | 1938 | (unwind-protect |
| 1939 | (should | 1939 | (progn |
| 1940 | (file-exists-p | 1940 | (make-directory source) |
| 1941 | (expand-file-name (file-name-nondirectory tmp-name1) tmp-name5)))) | 1941 | (should (file-directory-p source)) |
| 1942 | 1942 | (write-region "foo" nil (expand-file-name "foo" source)) | |
| 1943 | ;; Cleanup. | 1943 | (should (file-exists-p (expand-file-name "foo" source))) |
| 1944 | (ignore-errors (delete-file tmp-name1)) | 1944 | (make-directory target) |
| 1945 | (ignore-errors (delete-file tmp-name4)) | 1945 | (should (file-directory-p target)) |
| 1946 | (ignore-errors (delete-directory tmp-name5 'recursive))) | 1946 | ;; Directory `target' exists already, so we must use |
| 1947 | 1947 | ;; `file-name-as-directory'. | |
| 1948 | ;; Copy from local side to remote side. | 1948 | (copy-file source (file-name-as-directory target)) |
| 1949 | (unwind-protect | 1949 | (should |
| 1950 | (progn | 1950 | (file-exists-p |
| 1951 | (write-region "foo" nil tmp-name4 nil 'nomessage) | 1951 | (expand-file-name |
| 1952 | (copy-file tmp-name4 tmp-name1) | 1952 | (concat (file-name-nondirectory source) "/foo") target)))) |
| 1953 | (should (file-exists-p tmp-name1)) | 1953 | |
| 1954 | (with-temp-buffer | 1954 | ;; Cleanup. |
| 1955 | (insert-file-contents tmp-name1) | 1955 | (ignore-errors (delete-directory source 'recursive)) |
| 1956 | (should (string-equal (buffer-string) "foo"))) | 1956 | (ignore-errors (delete-directory target 'recursive))) |
| 1957 | (should-error | 1957 | |
| 1958 | (copy-file tmp-name4 tmp-name1) | 1958 | ;; Copy directory/file to non-existing directory. |
| 1959 | :type 'file-already-exists) | 1959 | (unwind-protect |
| 1960 | (copy-file tmp-name4 tmp-name1 'ok) | 1960 | (progn |
| 1961 | (make-directory tmp-name3) | 1961 | (make-directory source) |
| 1962 | ;; This has been changed in Emacs 26.1. | 1962 | (should (file-directory-p source)) |
| 1963 | (when (tramp--test-emacs26-p) | 1963 | (write-region "foo" nil (expand-file-name "foo" source)) |
| 1964 | (should-error | 1964 | (should (file-exists-p (expand-file-name "foo" source))) |
| 1965 | (copy-file tmp-name4 tmp-name3) | 1965 | (make-directory target) |
| 1966 | :type 'file-already-exists)) | 1966 | (should (file-directory-p target)) |
| 1967 | (copy-file tmp-name4 (file-name-as-directory tmp-name3)) | 1967 | (copy-file |
| 1968 | (should | 1968 | source |
| 1969 | (file-exists-p | 1969 | (expand-file-name (file-name-nondirectory source) target)) |
| 1970 | (expand-file-name (file-name-nondirectory tmp-name4) tmp-name3)))) | 1970 | (should |
| 1971 | (file-exists-p | ||
| 1972 | (expand-file-name | ||
| 1973 | (concat (file-name-nondirectory source) "/foo") target)))) | ||
| 1971 | 1974 | ||
| 1972 | ;; Cleanup. | 1975 | ;; Cleanup. |
| 1973 | (ignore-errors (delete-file tmp-name1)) | 1976 | (ignore-errors (delete-directory source 'recursive)) |
| 1974 | (ignore-errors (delete-file tmp-name4)) | 1977 | (ignore-errors (delete-directory target 'recursive)))))))) |
| 1975 | (ignore-errors (delete-directory tmp-name3 'recursive)))))) | ||
| 1976 | 1978 | ||
| 1977 | (ert-deftest tramp-test12-rename-file () | 1979 | (ert-deftest tramp-test12-rename-file () |
| 1978 | "Check `rename-file'." | 1980 | "Check `rename-file'." |
| @@ -1983,111 +1985,105 @@ This checks also `file-name-as-directory', `file-name-directory', | |||
| 1983 | (let (quoted) | 1985 | (let (quoted) |
| 1984 | (let ((tmp-name1 (tramp--test-make-temp-name nil quoted)) | 1986 | (let ((tmp-name1 (tramp--test-make-temp-name nil quoted)) |
| 1985 | (tmp-name2 (tramp--test-make-temp-name nil quoted)) | 1987 | (tmp-name2 (tramp--test-make-temp-name nil quoted)) |
| 1986 | (tmp-name3 (tramp--test-make-temp-name nil quoted)) | 1988 | (tmp-name3 (tramp--test-make-temp-name 'local quoted))) |
| 1987 | (tmp-name4 (tramp--test-make-temp-name 'local quoted)) | 1989 | (dolist (source-target |
| 1988 | (tmp-name5 (tramp--test-make-temp-name 'local quoted))) | 1990 | `(;; Rename on remote side. |
| 1989 | 1991 | (,tmp-name1 . ,tmp-name2) | |
| 1990 | ;; Rename on remote side. | 1992 | ;; Rename from remote side to local side. |
| 1991 | (unwind-protect | 1993 | (,tmp-name1 . ,tmp-name3) |
| 1992 | (progn | 1994 | ;; Rename from local side to remote side. |
| 1993 | (write-region "foo" nil tmp-name1) | 1995 | (,tmp-name3 . ,tmp-name1))) |
| 1994 | (rename-file tmp-name1 tmp-name2) | 1996 | (let ((source (car source-target)) |
| 1995 | (should-not (file-exists-p tmp-name1)) | 1997 | (target (cdr source-target))) |
| 1996 | (should (file-exists-p tmp-name2)) | 1998 | |
| 1997 | (with-temp-buffer | 1999 | ;; Rename simple file. |
| 1998 | (insert-file-contents tmp-name2) | 2000 | (unwind-protect |
| 1999 | (should (string-equal (buffer-string) "foo"))) | 2001 | (progn |
| 2000 | (write-region "foo" nil tmp-name1) | 2002 | (write-region "foo" nil source) |
| 2001 | (should-error | 2003 | (should (file-exists-p source)) |
| 2002 | (rename-file tmp-name1 tmp-name2) | 2004 | (rename-file source target) |
| 2003 | :type 'file-already-exists) | 2005 | (should-not (file-exists-p source)) |
| 2004 | (rename-file tmp-name1 tmp-name2 'ok) | 2006 | (should (file-exists-p target)) |
| 2005 | (should-not (file-exists-p tmp-name1)) | 2007 | (with-temp-buffer |
| 2006 | (write-region "foo" nil tmp-name1) | 2008 | (insert-file-contents target) |
| 2007 | (make-directory tmp-name3) | 2009 | (should (string-equal (buffer-string) "foo"))) |
| 2008 | ;; This has been changed in Emacs 26.1. | 2010 | (write-region "foo" nil source) |
| 2009 | (when (tramp--test-emacs26-p) | 2011 | (should (file-exists-p source)) |
| 2010 | (should-error | 2012 | (should-error |
| 2011 | (rename-file tmp-name1 tmp-name3) | 2013 | (rename-file source target) |
| 2012 | :type 'file-already-exists)) | 2014 | :type 'file-already-exists) |
| 2013 | (rename-file tmp-name1 (file-name-as-directory tmp-name3)) | 2015 | (rename-file source target 'ok) |
| 2014 | (should-not (file-exists-p tmp-name1)) | 2016 | (should-not (file-exists-p source))) |
| 2015 | (should | 2017 | |
| 2016 | (file-exists-p | 2018 | ;; Cleanup. |
| 2017 | (expand-file-name (file-name-nondirectory tmp-name1) tmp-name3)))) | 2019 | (ignore-errors (delete-file source)) |
| 2018 | 2020 | (ignore-errors (delete-file target))) | |
| 2019 | ;; Cleanup. | 2021 | |
| 2020 | (ignore-errors (delete-file tmp-name1)) | 2022 | ;; Rename file to directory. |
| 2021 | (ignore-errors (delete-file tmp-name2)) | 2023 | (unwind-protect |
| 2022 | (ignore-errors (delete-directory tmp-name3 'recursive))) | 2024 | (progn |
| 2023 | 2025 | (write-region "foo" nil source) | |
| 2024 | ;; Rename from remote side to local side. | 2026 | (should (file-exists-p source)) |
| 2025 | (unwind-protect | 2027 | (make-directory target) |
| 2026 | (progn | 2028 | (should (file-directory-p target)) |
| 2027 | (write-region "foo" nil tmp-name1) | 2029 | ;; This has been changed in Emacs 26.1. |
| 2028 | (rename-file tmp-name1 tmp-name4) | 2030 | (when (tramp--test-emacs26-p) |
| 2029 | (should-not (file-exists-p tmp-name1)) | 2031 | (should-error |
| 2030 | (should (file-exists-p tmp-name4)) | 2032 | (rename-file source target) |
| 2031 | (with-temp-buffer | 2033 | :type 'file-already-exists)) |
| 2032 | (insert-file-contents tmp-name4) | 2034 | (rename-file source (file-name-as-directory target)) |
| 2033 | (should (string-equal (buffer-string) "foo"))) | 2035 | (should-not (file-exists-p source)) |
| 2034 | (write-region "foo" nil tmp-name1) | 2036 | (should |
| 2035 | (should-error | 2037 | (file-exists-p |
| 2036 | (rename-file tmp-name1 tmp-name4) | 2038 | (expand-file-name (file-name-nondirectory source) target)))) |
| 2037 | :type 'file-already-exists) | 2039 | |
| 2038 | (rename-file tmp-name1 tmp-name4 'ok) | 2040 | ;; Cleanup. |
| 2039 | (should-not (file-exists-p tmp-name1)) | 2041 | (ignore-errors (delete-file source)) |
| 2040 | (write-region "foo" nil tmp-name1) | 2042 | (ignore-errors (delete-directory target 'recursive))) |
| 2041 | (make-directory tmp-name5) | 2043 | |
| 2042 | ;; This has been changed in Emacs 26.1. | 2044 | ;; Rename directory to existing directory. |
| 2043 | (when (tramp--test-emacs26-p) | 2045 | (unwind-protect |
| 2044 | (should-error | 2046 | (progn |
| 2045 | (rename-file tmp-name1 tmp-name5) | 2047 | (make-directory source) |
| 2046 | :type 'file-already-exists)) | 2048 | (should (file-directory-p source)) |
| 2047 | (rename-file tmp-name1 (file-name-as-directory tmp-name5)) | 2049 | (write-region "foo" nil (expand-file-name "foo" source)) |
| 2048 | (should-not (file-exists-p tmp-name1)) | 2050 | (should (file-exists-p (expand-file-name "foo" source))) |
| 2049 | (should | 2051 | (make-directory target) |
| 2050 | (file-exists-p | 2052 | (should (file-directory-p target)) |
| 2051 | (expand-file-name (file-name-nondirectory tmp-name1) tmp-name5)))) | 2053 | ;; Directory `target' exists already, so we must use |
| 2052 | 2054 | ;; `file-name-as-directory'. | |
| 2053 | ;; Cleanup. | 2055 | (rename-file source (file-name-as-directory target)) |
| 2054 | (ignore-errors (delete-file tmp-name1)) | 2056 | (should-not (file-exists-p source)) |
| 2055 | (ignore-errors (delete-file tmp-name4)) | 2057 | (should |
| 2056 | (ignore-errors (delete-directory tmp-name5 'recursive))) | 2058 | (file-exists-p |
| 2057 | 2059 | (expand-file-name | |
| 2058 | ;; Rename from local side to remote side. | 2060 | (concat (file-name-nondirectory source) "/foo") target)))) |
| 2059 | (unwind-protect | 2061 | |
| 2060 | (progn | 2062 | ;; Cleanup. |
| 2061 | (write-region "foo" nil tmp-name4 nil 'nomessage) | 2063 | (ignore-errors (delete-directory source 'recursive)) |
| 2062 | (rename-file tmp-name4 tmp-name1) | 2064 | (ignore-errors (delete-directory target 'recursive))) |
| 2063 | (should-not (file-exists-p tmp-name4)) | 2065 | |
| 2064 | (should (file-exists-p tmp-name1)) | 2066 | ;; Rename directory/file to non-existing directory. |
| 2065 | (with-temp-buffer | 2067 | (unwind-protect |
| 2066 | (insert-file-contents tmp-name1) | 2068 | (progn |
| 2067 | (should (string-equal (buffer-string) "foo"))) | 2069 | (make-directory source) |
| 2068 | (write-region "foo" nil tmp-name4 nil 'nomessage) | 2070 | (should (file-directory-p source)) |
| 2069 | (should-error | 2071 | (write-region "foo" nil (expand-file-name "foo" source)) |
| 2070 | (rename-file tmp-name4 tmp-name1) | 2072 | (should (file-exists-p (expand-file-name "foo" source))) |
| 2071 | :type 'file-already-exists) | 2073 | (make-directory target) |
| 2072 | (rename-file tmp-name4 tmp-name1 'ok) | 2074 | (should (file-directory-p target)) |
| 2073 | (should-not (file-exists-p tmp-name4)) | 2075 | (rename-file |
| 2074 | (write-region "foo" nil tmp-name4 nil 'nomessage) | 2076 | source |
| 2075 | (make-directory tmp-name3) | 2077 | (expand-file-name (file-name-nondirectory source) target)) |
| 2076 | ;; This has been changed in Emacs 26.1. | 2078 | (should-not (file-exists-p source)) |
| 2077 | (when (tramp--test-emacs26-p) | 2079 | (should |
| 2078 | (should-error | 2080 | (file-exists-p |
| 2079 | (rename-file tmp-name4 tmp-name3) | 2081 | (expand-file-name |
| 2080 | :type 'file-already-exists)) | 2082 | (concat (file-name-nondirectory source) "/foo") target)))) |
| 2081 | (rename-file tmp-name4 (file-name-as-directory tmp-name3)) | ||
| 2082 | (should-not (file-exists-p tmp-name4)) | ||
| 2083 | (should | ||
| 2084 | (file-exists-p | ||
| 2085 | (expand-file-name (file-name-nondirectory tmp-name4) tmp-name3)))) | ||
| 2086 | 2083 | ||
| 2087 | ;; Cleanup. | 2084 | ;; Cleanup. |
| 2088 | (ignore-errors (delete-file tmp-name1)) | 2085 | (ignore-errors (delete-directory source 'recursive)) |
| 2089 | (ignore-errors (delete-file tmp-name4)) | 2086 | (ignore-errors (delete-directory target 'recursive)))))))) |
| 2090 | (ignore-errors (delete-directory tmp-name3 'recursive)))))) | ||
| 2091 | 2087 | ||
| 2092 | (ert-deftest tramp-test13-make-directory () | 2088 | (ert-deftest tramp-test13-make-directory () |
| 2093 | "Check `make-directory'. | 2089 | "Check `make-directory'. |