summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorJonathan Tomer <jktomer@google.com>2019-05-08 09:13:58 +0200
committerMichael Albinus <michael.albinus@gmx.de>2019-05-08 09:13:58 +0200
commit21888a94648df813cef354a22b92be9b23673358 (patch)
treef5b55ca6b78c17d1dc33272a30ce677bd63c0cd0 /test
parentcd8a1d6bfdc5aebc34348801dbaca06f2f4986c5 (diff)
downloademacs-21888a94648df813cef354a22b92be9b23673358.tar.gz
Don't rewrite buffer contents after saving by rename (Bug#35497)
* lisp/files.el (basic-save-buffer-2): Don't rewrite file contents after saving-by-renaming. (Bug#35497) * test/lisp/files-tests.el (files-tests-dont-rewrite-precious-files): * test/lisp/net/tramp-tests.el (tramp-test10-write-region-file-precious-flag): Regression tests for this change.
Diffstat (limited to 'test')
-rw-r--r--test/lisp/files-tests.el15
-rw-r--r--test/lisp/net/tramp-tests.el29
2 files changed, 44 insertions, 0 deletions
diff --git a/test/lisp/files-tests.el b/test/lisp/files-tests.el
index ae8ea41a797..fe2e958f1c3 100644
--- a/test/lisp/files-tests.el
+++ b/test/lisp/files-tests.el
@@ -1244,5 +1244,20 @@ See <https://debbugs.gnu.org/35241>."
(executable-find (file-name-nondirectory tmpfile))))))
(delete-file tmpfile))))
+(ert-deftest files-tests-dont-rewrite-precious-files ()
+ "Test that `file-precious-flag' forces files to be saved by
+renaming only, rather than modified in-place."
+ (let* ((temp-file-name (make-temp-file "files-tests"))
+ (advice (lambda (_start _end filename &rest _r)
+ (should-not (string= filename temp-file-name)))))
+ (unwind-protect
+ (with-current-buffer (find-file-noselect temp-file-name)
+ (advice-add #'write-region :before advice)
+ (setq-local file-precious-flag t)
+ (insert "foobar")
+ (should (null (save-buffer))))
+ (ignore-errors (advice-remove #'write-region advice))
+ (ignore-errors (delete-file temp-file-name)))))
+
(provide 'files-tests)
;;; files-tests.el ends here
diff --git a/test/lisp/net/tramp-tests.el b/test/lisp/net/tramp-tests.el
index 7d3c43408d4..e35be0e3121 100644
--- a/test/lisp/net/tramp-tests.el
+++ b/test/lisp/net/tramp-tests.el
@@ -41,6 +41,7 @@
;;; Code:
+(require 'cl-seq)
(require 'dired)
(require 'ert)
(require 'ert-x)
@@ -2270,6 +2271,34 @@ This checks also `file-name-as-directory', `file-name-directory',
;; Cleanup.
(ignore-errors (delete-file tmp-name))))))
+(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))
+
+ (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)
+ (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)))))
+
(ert-deftest tramp-test11-copy-file ()
"Check `copy-file'."
(skip-unless (tramp--test-enabled))