summaryrefslogtreecommitdiff
path: root/admin/gitmerge.el
diff options
context:
space:
mode:
authorGlenn Morris <rgm@gnu.org>2017-12-01 22:06:40 -0500
committerGlenn Morris <rgm@gnu.org>2017-12-01 22:06:40 -0500
commit0b6f4f2c6086a04b27d87d4f06b71334da3933d5 (patch)
treeab909b893a16db55aa407c0f764c250905a9fec5 /admin/gitmerge.el
parent7c95819de0bb351e77449877cb6899444a99d0c1 (diff)
downloademacs-0b6f4f2c6086a04b27d87d4f06b71334da3933d5.tar.gz
* admin/gitmerge.el (gitmerge-resolve): Handle NEWS. (Bug#29366)
Diffstat (limited to 'admin/gitmerge.el')
-rw-r--r--admin/gitmerge.el60
1 files changed, 41 insertions, 19 deletions
diff --git a/admin/gitmerge.el b/admin/gitmerge.el
index 3c65b0e6951..69f48b877af 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))))))))