mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-05 22:20:24 -08:00
Fix emerge.el for remote files
* lisp/vc/emerge.el (emerge-make-diff-list) (emerge-make-diff3-list): Set proper `default-directory' in order to support remote files. (Bug#6850, Bug#74352) * test/lisp/vc/emerge-tests.el: New file.
This commit is contained in:
parent
2f2fbae882
commit
8c04396b19
2 changed files with 93 additions and 10 deletions
|
|
@ -583,6 +583,7 @@ This is *not* a user option, since Emerge uses it for its own processing.")
|
|||
(with-current-buffer
|
||||
emerge-diff-buffer
|
||||
(erase-buffer)
|
||||
(setq default-directory temporary-file-directory)
|
||||
(shell-command
|
||||
(format "%s %s %s %s"
|
||||
(shell-quote-argument emerge-diff-program)
|
||||
|
|
@ -755,16 +756,17 @@ This is *not* a user option, since Emerge uses it for its own processing.")
|
|||
(defun emerge-make-diff3-list (file-A file-B file-ancestor)
|
||||
(setq emerge-diff-buffer (get-buffer-create "*emerge-diff*"))
|
||||
(with-current-buffer
|
||||
emerge-diff-buffer
|
||||
(erase-buffer)
|
||||
(shell-command
|
||||
(format "%s %s %s %s %s"
|
||||
(shell-quote-argument emerge-diff3-program)
|
||||
emerge-diff-options
|
||||
(shell-quote-argument file-A)
|
||||
(shell-quote-argument file-ancestor)
|
||||
(shell-quote-argument file-B))
|
||||
t))
|
||||
emerge-diff-buffer
|
||||
(erase-buffer)
|
||||
(setq default-directory temporary-file-directory)
|
||||
(shell-command
|
||||
(format "%s %s %s %s %s"
|
||||
(shell-quote-argument emerge-diff3-program)
|
||||
emerge-diff-options
|
||||
(shell-quote-argument file-A)
|
||||
(shell-quote-argument file-ancestor)
|
||||
(shell-quote-argument file-B))
|
||||
t))
|
||||
(emerge-prepare-error-list emerge-diff3-ok-lines-regexp)
|
||||
(emerge-convert-diffs-to-markers
|
||||
emerge-A-buffer emerge-B-buffer emerge-merge-buffer
|
||||
|
|
|
|||
81
test/lisp/vc/emerge-tests.el
Normal file
81
test/lisp/vc/emerge-tests.el
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
;;; emerge-tests.el --- Tests of shadowfile -*- lexical-binding:t -*-
|
||||
|
||||
(require 'tramp)
|
||||
(require 'ert-x)
|
||||
(require 'emerge)
|
||||
|
||||
(setq auth-source-save-behavior nil
|
||||
password-cache-expiry nil
|
||||
;; When the remote user id is 0, Tramp refuses unsafe temporary files.
|
||||
tramp-allow-unsafe-temporary-files
|
||||
(or tramp-allow-unsafe-temporary-files noninteractive)
|
||||
tramp-cache-read-persistent-data t ;; For auth-sources.
|
||||
tramp-persistency-file-name nil
|
||||
tramp-verbose 0
|
||||
;; On macOS, `temporary-file-directory' is a symlinked directory.
|
||||
temporary-file-directory (file-truename temporary-file-directory)
|
||||
ert-remote-temporary-file-directory
|
||||
(ignore-errors (file-truename ert-remote-temporary-file-directory)))
|
||||
|
||||
(ert-deftest emerge-test-files ()
|
||||
"Check emerge for two files."
|
||||
(skip-when (memq system-type '(windows-nt ms-dos)))
|
||||
(skip-unless (file-remote-p ert-remote-temporary-file-directory))
|
||||
|
||||
;; Remote file.
|
||||
(ert-with-temp-file
|
||||
file1 :prefix (expand-file-name "emerge-tests" ert-remote-temporary-file-directory) :text "foo"
|
||||
;; Local file.
|
||||
(ert-with-temp-file
|
||||
file2 :prefix (expand-file-name "emerge-tests" temporary-file-directory) :text "foo"
|
||||
;; Output.
|
||||
(ert-with-temp-file
|
||||
file3 :prefix (expand-file-name "emerge-tests" temporary-file-directory)
|
||||
|
||||
;; Run emerge.
|
||||
(should (emerge-files nil file1 file2 file3))
|
||||
(cl-letf (((symbol-function #'y-or-n-p) #'always))
|
||||
(emerge-quit nil))
|
||||
|
||||
;; Check result.
|
||||
(with-temp-buffer
|
||||
(insert-file-contents file3)
|
||||
(should (string-equal "foo" (buffer-string))))))))
|
||||
|
||||
(ert-deftest emerge-test-files-with-ancestor ()
|
||||
"Check emerge for three files."
|
||||
(skip-when (memq system-type '(windows-nt ms-dos)))
|
||||
(skip-unless (file-remote-p ert-remote-temporary-file-directory))
|
||||
|
||||
;; Remote file.
|
||||
(ert-with-temp-file
|
||||
file1 :prefix (expand-file-name "emerge-tests" ert-remote-temporary-file-directory) :text "foo"
|
||||
;; Local file.
|
||||
(ert-with-temp-file
|
||||
file2 :prefix (expand-file-name "emerge-tests" temporary-file-directory) :text "foo"
|
||||
;; Remote file.
|
||||
(ert-with-temp-file
|
||||
file3 :prefix (expand-file-name "emerge-tests" ert-remote-temporary-file-directory) :text "foo"
|
||||
;; Output.
|
||||
(ert-with-temp-file
|
||||
file4 :prefix (expand-file-name "emerge-tests" temporary-file-directory)
|
||||
|
||||
;; Run emerge.
|
||||
(should (emerge-files-with-ancestor nil file1 file2 file3 file4))
|
||||
(cl-letf (((symbol-function #'y-or-n-p) #'always))
|
||||
(emerge-quit nil))
|
||||
|
||||
;; Check result.
|
||||
(with-temp-buffer
|
||||
(insert-file-contents file4)
|
||||
(should (string-equal "foo" (buffer-string)))))))))
|
||||
|
||||
(defun emerge-test-all (&optional interactive)
|
||||
"Run all tests for `emerge-*'."
|
||||
(interactive "p")
|
||||
(if interactive
|
||||
(ert-run-tests-interactively "^emerge-")
|
||||
(ert-run-tests-batch "^emerge-")))
|
||||
|
||||
(provide 'emerge-tests)
|
||||
;;; emerge-tests.el ends here
|
||||
Loading…
Add table
Add a link
Reference in a new issue