emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master 0b6f4f2 3/3: * admin/gitmerge.el (gitmerge-resolve)


From: Glenn Morris
Subject: [Emacs-diffs] master 0b6f4f2 3/3: * admin/gitmerge.el (gitmerge-resolve): Handle NEWS. (Bug#29366)
Date: Fri, 1 Dec 2017 22:07:03 -0500 (EST)

branch: master
commit 0b6f4f2c6086a04b27d87d4f06b71334da3933d5
Author: Glenn Morris <address@hidden>
Commit: Glenn Morris <address@hidden>

    * admin/gitmerge.el (gitmerge-resolve): Handle NEWS.  (Bug#29366)
---
 admin/gitmerge.el | 60 +++++++++++++++++++++++++++++++++++++------------------
 1 file changed, 41 insertions(+), 19 deletions(-)

diff --git a/admin/gitmerge.el b/admin/gitmerge.el
index 3c65b0e..69f48b8 100644
--- a/admin/gitmerge.el
+++ b/admin/gitmerge.el
@@ -307,25 +307,47 @@ Returns non-nil if conflicts remain."
             ;; (pop-to-buffer (current-buffer)) (debug 'before-resolve)
             ))
           ;; Try to resolve the conflicts.
-          (cond
-           ;; Generated files.
-           ((member file '("lisp/ldefs-boot.el"))
-            ;; We are in the file's buffer, so names are relative.
-            (call-process "git" nil t nil "reset" "--"
-                          (file-name-nondirectory file))
-            (call-process "git" nil t nil "checkout" "--"
-                          (file-name-nondirectory file))
-            (revert-buffer nil 'noconfirm))
-           (t
-            (goto-char (point-max))
-            (while (re-search-backward smerge-begin-re nil t)
-              (save-excursion
-                (ignore-errors
-                  (smerge-match-conflict)
-                  (smerge-resolve))))
-            ;; (when (derived-mode-p 'change-log-mode)
-            ;;   (pop-to-buffer (current-buffer)) (debug 'after-resolve))
-            (save-buffer)))
+          (let (temp)
+            (cond
+             ((and (equal file "etc/NEWS")
+                   (ignore-errors
+                     (setq temp
+                           (format "NEWS.%s"
+                                   (gitmerge-emacs-version gitmerge--from))))
+                   (file-exists-p temp)
+                   (or noninteractive
+                       (y-or-n-p "Try to fix NEWS conflict? ")))
+              (let ((relfile (file-name-nondirectory file))
+                    (tempfile (make-temp-file "gitmerge")))
+                (unwind-protect
+                    (progn
+                      (call-process "git" nil `(:file ,tempfile) nil "diff"
+                                    (format ":1:%s" file)
+                                    (format ":3:%s" file))
+                      (call-process "git" nil t nil "reset" "--" relfile)
+                      (call-process "git" nil t nil "checkout" "--" relfile)
+                      (revert-buffer nil 'noconfirm)
+                      (call-process "patch" tempfile nil nil temp)
+                      (call-process "git" nil t nil "add" "--" temp))
+                  (delete-file tempfile))))
+             ;; Generated files.
+             ((member file '("lisp/ldefs-boot.el"))
+              ;; We are in the file's buffer, so names are relative.
+              (call-process "git" nil t nil "reset" "--"
+                            (file-name-nondirectory file))
+              (call-process "git" nil t nil "checkout" "--"
+                            (file-name-nondirectory file))
+              (revert-buffer nil 'noconfirm))
+             (t
+              (goto-char (point-max))
+              (while (re-search-backward smerge-begin-re nil t)
+                (save-excursion
+                  (ignore-errors
+                    (smerge-match-conflict)
+                    (smerge-resolve))))
+              ;; (when (derived-mode-p 'change-log-mode)
+              ;;   (pop-to-buffer (current-buffer)) (debug 'after-resolve))
+              (save-buffer))))
           (goto-char (point-min))
           (prog1 (re-search-forward smerge-begin-re nil t)
             (unless exists (kill-buffer))))))))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]