From: Tino Calancha <tino.calancha@gmail.com>
To: 26084@debbugs.gnu.org
Subject: bug#26084: 24.5; epatch save wrong backups in Git multipatches
Date: Mon, 13 Mar 2017 23:24:09 +0900 [thread overview]
Message-ID: <87h92xdzli.fsf@calancha-pc> (raw)
emacs -Q /tmp
;; Eval following form:
(let ((cmd "
mkdir -p foo
cd foo
echo 'qux here' > qux.txt
echo 'bar here' > bar.txt
git init
git add . && git commit -m 'Test repository.'
echo 'foo here' > qux.txt
echo 'foo here' > bar.txt
git diff > ../foo.diff
git reset --hard HEAD
"))
(call-process-shell-command cmd))
M-x epatch RET n /tmp/foo.diff RET /tmp/foo RET n RET q y RET q y q y
;; Eval this form:
(string=
(with-temp-buffer
(insert-file-contents "/tmp/foo/bar.txt")
(buffer-string))
(with-temp-buffer
(insert-file-contents
(concat "/tmp/foo/bar.txt" ediff-backup-extension))
(buffer-string)))
=> t ; Should be nil.
--8<-----------------------------cut here---------------start------------->8---
From 0cb7eb3d3d7cb44051ea0739bf04e34fd8ec80e7 Mon Sep 17 00:00:00 2001
From: Tino Calancha <tino.calancha@gmail.com>
Date: Mon, 13 Mar 2017 23:21:43 +0900
Subject: [PATCH] epatch: Save right backups in Git multipatches
Multipatches on N Git files save wrong backups for
N-1 files; only the last one has a proper backup (Bug#26084).
* lisp/vc/diff-mode.el (diff-file-junk-re): Add 'Prereq: '
* lisp/vc/ediff-ptch.el (ediff-map-patch-buffer): Use 'diff-file-junk-re'.
* test/lisp/vc/ediff-ptch-tests.el (ediff-ptch-test-bug25010):
Rename from ibuffer-test-bug25010.
(ediff-ptch-test-bug26084): New test.
---
lisp/vc/diff-mode.el | 2 +-
lisp/vc/ediff-ptch.el | 13 ++++-----
test/lisp/vc/ediff-ptch-tests.el | 59 +++++++++++++++++++++++++++++++++++++++-
3 files changed, 65 insertions(+), 9 deletions(-)
diff --git a/lisp/vc/diff-mode.el b/lisp/vc/diff-mode.el
index 31c33e6a72..aa8d77882e 100644
--- a/lisp/vc/diff-mode.el
+++ b/lisp/vc/diff-mode.el
@@ -504,7 +504,7 @@ diff-end-of-hunk
;; "index ", "old mode", "new mode", "new file mode" and
;; "deleted file mode" are output by git-diff.
(defconst diff-file-junk-re
- (concat "Index: \\|=\\{20,\\}\\|" ; SVN
+ (concat "Index: \\|Prereq: \\|=\\{20,\\}\\|" ; SVN
"diff \\|index \\|\\(?:deleted file\\|new\\(?: file\\)?\\|old\\) mode\\|=== modified file"))
;; If point is in a diff header, then return beginning
diff --git a/lisp/vc/ediff-ptch.el b/lisp/vc/ediff-ptch.el
index 9d2ec51b59..36aebf4aed 100644
--- a/lisp/vc/ediff-ptch.el
+++ b/lisp/vc/ediff-ptch.el
@@ -25,6 +25,8 @@
;;; Code:
+(require 'diff-mode) ; For `diff-file-junk-re'.
+
(provide 'ediff-ptch)
(defgroup ediff-ptch nil
@@ -225,14 +227,11 @@ ediff-map-patch-buffer
(if (and beg2 end2)
(buffer-substring beg2 end2)
"/dev/null")))
- ;; check for any `Index:' or `Prereq:' lines, but don't use them
- (if (re-search-backward "^Index:" mark1-end 'noerror)
- (move-marker mark2 (match-beginning 0)))
- (if (re-search-backward "^Prereq:" mark1-end 'noerror)
- (move-marker mark2 (match-beginning 0)))
-
+ ;; Remove file junk (Bug#26084).
+ (while (re-search-backward
+ (concat "^" diff-file-junk-re) mark1-end t)
+ (move-marker mark2 (match-beginning 0)))
(goto-char mark2-end)
-
(if filenames
(setq patch-map
(cons (ediff-make-new-meta-list-element
diff --git a/test/lisp/vc/ediff-ptch-tests.el b/test/lisp/vc/ediff-ptch-tests.el
index 912c6b1e81..9aacb6bd20 100644
--- a/test/lisp/vc/ediff-ptch-tests.el
+++ b/test/lisp/vc/ediff-ptch-tests.el
@@ -22,7 +22,7 @@
(require 'ert)
(require 'ediff-ptch)
-(ert-deftest ibuffer-test-bug25010 ()
+(ert-deftest ediff-ptch-test-bug25010 ()
"Test for http://debbugs.gnu.org/25010 ."
(with-temp-buffer
(insert "diff --git a/lisp/vc/ediff-ptch.el b/lisp/vc/ediff-ptch.el
@@ -38,5 +38,62 @@
(match-string 1))))
(should-not (string-suffix-p "@@" filename)))))
+
+(ert-deftest ediff-ptch-test-bug26084 ()
+ "Test for http://debbugs.gnu.org/26084 ."
+ (let* ((tmpdir temporary-file-directory)
+ (foo (expand-file-name "foo" tmpdir))
+ (patch (expand-file-name "foo.diff" tmpdir))
+ (qux (expand-file-name "qux.txt" foo))
+ (bar (expand-file-name "bar.txt" foo))
+ (cmd "
+mkdir -p foo
+cd foo
+echo 'qux here' > qux.txt
+echo 'bar here' > bar.txt
+git init
+git add . && git commit -m 'Test repository.'
+echo 'foo here' > qux.txt
+echo 'foo here' > bar.txt
+git diff > ../foo.diff
+git reset --hard HEAD
+"))
+ (setq default-directory tmpdir)
+ (call-process-shell-command cmd)
+ (find-file patch)
+ (unwind-protect
+ (let* ((info
+ (progn (ediff-map-patch-buffer (current-buffer)) ediff-patch-map))
+ (patch1
+ (buffer-substring-no-properties
+ (car (nth 3 (car info)))
+ (car (nth 4 (car info)))))
+ (patch2
+ (buffer-substring-no-properties
+ (car (nth 3 (cadr info)))
+ (car (nth 4 (cadr info))))))
+ ;; Apply both patches.
+ (dolist (x (list (cons patch1 bar) (cons patch2 qux)))
+ (with-temp-buffer
+ (insert (car x))
+ (call-shell-region (point-min)
+ (point-max)
+ (format "%s %s %s %s"
+ ediff-patch-program
+ ediff-patch-options
+ ediff-backup-specs
+ (cdr x)))))
+ ;; Check backup files were saved correctly.
+ (dolist (x (list qux bar))
+ (should-not (string= (with-temp-buffer
+ (insert-file-contents x)
+ (buffer-string))
+ (with-temp-buffer
+ (insert-file-contents (concat x ediff-backup-extension))
+ (buffer-string))))))
+ (delete-directory foo 'recursive)
+ (delete-file patch))))
+
+
(provide 'ediff-ptch-tests)
;;; ediff-ptch-tests.el ends here
--
2.11.0
--8<-----------------------------cut here---------------end--------------->8---
In GNU Emacs 26.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.22.8)
of 2017-03-13
Repository revision: 7a50abee22581e02f0d822c3d9684c0985cdecb2
next reply other threads:[~2017-03-13 14:24 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-13 14:24 Tino Calancha [this message]
2017-03-21 8:29 ` bug#26084: 24.5; epatch save wrong backups in Git multipatches Tino Calancha
[not found] ` <handler.26084.D26084.149008498412423.notifdone@debbugs.gnu.org>
2017-03-31 22:54 ` bug#26084: closed (Re: bug#26084: 24.5; epatch save wrong backups in Git multipatches) Glenn Morris
2017-04-01 3:33 ` Tino Calancha
2017-04-02 15:51 ` Glenn Morris
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87h92xdzli.fsf@calancha-pc \
--to=tino.calancha@gmail.com \
--cc=26084@debbugs.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).