Mercurial > emacs
changeset 82007:c934794f2e69
(change-log-resolve-conflict): Don't lose data if the merge fails.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Fri, 20 Jul 2007 20:41:58 +0000 |
parents | 5942689a5d21 |
children | fa89e40167b9 |
files | lisp/ChangeLog lisp/add-log.el |
diffstat | 2 files changed, 31 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Fri Jul 20 20:31:29 2007 +0000 +++ b/lisp/ChangeLog Fri Jul 20 20:41:58 2007 +0000 @@ -1,3 +1,8 @@ +2007-07-20 Stefan Monnier <monnier@iro.umontreal.ca> + + * add-log.el (change-log-resolve-conflict): Don't lose data if the + merge fails. + 2007-07-20 Dan Nicolaescu <dann@ics.uci.edu> * progmodes/compile.el (compilation-auto-jump-to-first-error):
--- a/lisp/add-log.el Fri Jul 20 20:31:29 2007 +0000 +++ b/lisp/add-log.el Fri Jul 20 20:41:58 2007 +0000 @@ -1043,17 +1043,32 @@ (defun change-log-resolve-conflict () "Function to be used in `smerge-resolve-function'." - (let ((buf (current-buffer))) - (with-temp-buffer - (insert-buffer-substring buf (match-beginning 1) (match-end 1)) - (save-match-data (change-log-mode)) - (let ((other-buf (current-buffer))) - (with-current-buffer buf - (save-excursion - (save-restriction - (narrow-to-region (match-beginning 0) (match-end 0)) - (replace-match (match-string 3) t t) - (change-log-merge other-buf)))))))) + (save-excursion + (save-restriction + (narrow-to-region (match-beginning 0) (match-end 0)) + (let ((mb1 (match-beginning 1)) + (me1 (match-end 1)) + (mb3 (match-beginning 3)) + (me3 (match-end 3)) + (tmp1 (generate-new-buffer " *changelog-resolve-1*")) + (tmp2 (generate-new-buffer " *changelog-resolve-2*"))) + (unwind-protect + (let ((buf (current-buffer))) + (with-current-buffer tmp1 + (change-log-mode) + (insert-buffer-substring buf mb1 me1)) + (with-current-buffer tmp2 + (change-log-mode) + (insert-buffer-substring buf mb3 me3) + ;; Do the merge here instead of inside `buf' so as to be + ;; more robust in case change-log-merge fails. + (change-log-merge tmp1)) + (goto-char (point-max)) + (delete-region (point-min) + (prog1 (point) + (insert-buffer-substring tmp2)))) + (kill-buffer tmp1) + (kill-buffer tmp2)))))) ;;;###autoload (defun change-log-merge (other-log)