[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] scratch/add-vdiff e8d3d26 236/258: vdiff-magit: Try to switch res
From: |
Justin Burkett |
Subject: |
[elpa] scratch/add-vdiff e8d3d26 236/258: vdiff-magit: Try to switch resolve functions gracefully |
Date: |
Wed, 17 May 2017 08:14:00 -0400 (EDT) |
branch: scratch/add-vdiff
commit e8d3d2623b4f2249d78ff5297400a3fb7d32d66e
Author: Justin Burkett <address@hidden>
Commit: Justin Burkett <address@hidden>
vdiff-magit: Try to switch resolve functions gracefully
vdiff-magit-resolve does not handle 3-way merges (yet at least) so we flip
to
magit-ediff-resolve if one is detected.
---
vdiff-magit.el | 159 ++++++++++++++++++++++++++++++---------------------------
1 file changed, 83 insertions(+), 76 deletions(-)
diff --git a/vdiff-magit.el b/vdiff-magit.el
index 0fc4bcf..23e59e5 100644
--- a/vdiff-magit.el
+++ b/vdiff-magit.el
@@ -121,82 +121,89 @@ conflicts, including those already resolved by Git, use
(user-error "There are no unresolved conflicts"))
(list (magit-completing-read "Resolve file" unmerged nil t nil nil
(car (member current unmerged))))))
- (magit-with-toplevel
- (with-current-buffer (find-file-noselect file)
- ;; taken from `smerge-ediff'
- (require 'smerge-mode)
- (let* ((smerge-buffer (current-buffer))
- (mode major-mode)
- ;;(ediff-default-variant 'default-B)
- (config (current-window-configuration))
- (filename (file-name-nondirectory (or buffer-file-name "-")))
- (mine (generate-new-buffer
- (concat "*" filename " "
- (smerge--get-marker smerge-begin-re "MINE")
- "*")))
- (other (generate-new-buffer
- (concat "*" filename " "
- (smerge--get-marker smerge-end-re "OTHER")
- "*")))
- base)
- (with-current-buffer mine
- (buffer-disable-undo)
- (insert-buffer-substring smerge-buffer)
- (goto-char (point-min))
- (while (smerge-find-conflict)
- (when (match-beginning 2)
- ;; This is not supported yet, so we abort here
- ;; (setq base t)
- (when (buffer-live-p mine)
- (kill-buffer mine))
- (when (buffer-live-p other)
- (kill-buffer other))
- (set-window-configuration config)
- (user-error "Sorry vdiff-magit does not support three-way merges
yet."))
- (smerge-keep-n 1))
- (buffer-enable-undo)
- (set-buffer-modified-p nil)
- (funcall mode))
-
- (with-current-buffer other
- (buffer-disable-undo)
- (insert-buffer-substring smerge-buffer)
- (goto-char (point-min))
- (while (smerge-find-conflict)
- (smerge-keep-n 3))
- (buffer-enable-undo)
- (set-buffer-modified-p nil)
- (funcall mode))
-
- ;; (when base
- ;; (setq base (generate-new-buffer
- ;; (or name-base
- ;; (concat "*" filename " "
- ;; (smerge--get-marker smerge-base-re "BASE")
- ;; "*"))))
- ;; (with-current-buffer base
- ;; (buffer-disable-undo)
- ;; (insert-buffer-substring smerge-buffer)
- ;; (goto-char (point-min))
- ;; (while (smerge-find-conflict)
- ;; (if (match-end 2)
- ;; (smerge-keep-n 2)
- ;; (delete-region (match-beginning 0) (match-end 0))))
- ;; (buffer-enable-undo)
- ;; (set-buffer-modified-p nil)
- ;; (funcall mode)))
-
- (vdiff-buffers3
- mine other smerge-buffer
- (lambda (mine other smerge-buffer)
- (with-current-buffer smerge-buffer
- (when (yes-or-no-p (format "Conflict resolution finished; save
%s?"
- buffer-file-name))
- (save-buffer)))
- (dolist (buf (list mine other))
- (when (buffer-live-p buf)
- (kill-buffer buf))))
- t)))))
+ (let ((switch-to-ediff
+ (catch 'switch-to-ediff
+ (magit-with-toplevel
+ (with-current-buffer (find-file-noselect file)
+ ;; taken from `smerge-ediff'
+ (require 'smerge-mode)
+ (let* ((smerge-buffer (current-buffer))
+ (mode major-mode)
+ ;;(ediff-default-variant 'default-B)
+ (config (current-window-configuration))
+ (filename (file-name-nondirectory (or buffer-file-name
"-")))
+ (mine (generate-new-buffer
+ (concat "*" filename " "
+ (smerge--get-marker smerge-begin-re
"MINE")
+ "*")))
+ (other (generate-new-buffer
+ (concat "*" filename " "
+ (smerge--get-marker smerge-end-re
"OTHER")
+ "*")))
+ base)
+ (with-current-buffer mine
+ (buffer-disable-undo)
+ (insert-buffer-substring smerge-buffer)
+ (goto-char (point-min))
+ (while (smerge-find-conflict)
+ (when (match-beginning 2)
+ ;; This is not supported yet, so we abort here
+ ;; (setq base t)
+ (when (buffer-live-p mine)
+ (kill-buffer mine))
+ (when (buffer-live-p other)
+ (kill-buffer other))
+ (set-window-configuration config)
+ (message "Switching to ediff. vdiff-magit does not
support three-way merges.")
+ (throw 'switch-to-ediff t))
+ (smerge-keep-n 1))
+ (buffer-enable-undo)
+ (set-buffer-modified-p nil)
+ (funcall mode))
+
+ (with-current-buffer other
+ (buffer-disable-undo)
+ (insert-buffer-substring smerge-buffer)
+ (goto-char (point-min))
+ (while (smerge-find-conflict)
+ (smerge-keep-n 3))
+ (buffer-enable-undo)
+ (set-buffer-modified-p nil)
+ (funcall mode))
+
+ ;; (when base
+ ;; (setq base (generate-new-buffer
+ ;; (or name-base
+ ;; (concat "*" filename " "
+ ;; (smerge--get-marker
smerge-base-re "BASE")
+ ;; "*"))))
+ ;; (with-current-buffer base
+ ;; (buffer-disable-undo)
+ ;; (insert-buffer-substring smerge-buffer)
+ ;; (goto-char (point-min))
+ ;; (while (smerge-find-conflict)
+ ;; (if (match-end 2)
+ ;; (smerge-keep-n 2)
+ ;; (delete-region (match-beginning 0) (match-end 0))))
+ ;; (buffer-enable-undo)
+ ;; (set-buffer-modified-p nil)
+ ;; (funcall mode)))
+
+ (vdiff-buffers3
+ mine other smerge-buffer
+ (lambda (mine other smerge-buffer)
+ (with-current-buffer smerge-buffer
+ (when (yes-or-no-p (format "Conflict resolution
finished; save %s?"
+ buffer-file-name))
+ (save-buffer)))
+ (dolist (buf (list mine other))
+ (when (buffer-live-p buf)
+ (kill-buffer buf))))
+ t)
+ ;; return nil for the catch statement
+ nil))))))
+ (when (eq t switch-to-ediff)
+ (magit-ediff-resolve file))))
;;;###autoload
(defun vdiff-magit-stage (file)
- [elpa] scratch/add-vdiff 30b85fe 164/258: Fix sending changes with diff3, (continued)
- [elpa] scratch/add-vdiff 30b85fe 164/258: Fix sending changes with diff3, Justin Burkett, 2017/05/17
- [elpa] scratch/add-vdiff 816fe2a 182/258: Fix subtraction string width, Justin Burkett, 2017/05/17
- [elpa] scratch/add-vdiff 582d13d 180/258: Fix compiler warnings, Justin Burkett, 2017/05/17
- [elpa] scratch/add-vdiff cd9dad4 191/258: Fix refresh function call sequence, Justin Burkett, 2017/05/17
- [elpa] scratch/add-vdiff 2847cd6 183/258: Add callback support on quit, Justin Burkett, 2017/05/17
- [elpa] scratch/add-vdiff 90f81f0 175/258: Make sure hook functions execute in vdiff bufs, Justin Burkett, 2017/05/17
- [elpa] scratch/add-vdiff 2d48cb5 229/258: vdiff-magit: Simplify resolve, Justin Burkett, 2017/05/17
- [elpa] scratch/add-vdiff c31755a 220/258: vdiff-magit: Port show stash, Justin Burkett, 2017/05/17
- [elpa] scratch/add-vdiff cfb90d7 233/258: vdiff-magit: Add note to README, Justin Burkett, 2017/05/17
- [elpa] scratch/add-vdiff f5fdcaa 241/258: vdiff-magit: Simplify exit from stage, Justin Burkett, 2017/05/17
- [elpa] scratch/add-vdiff e8d3d26 236/258: vdiff-magit: Try to switch resolve functions gracefully,
Justin Burkett <=
- [elpa] scratch/add-vdiff 7c87360 244/258: vdiff: Add vdiff-current-file, Justin Burkett, 2017/05/17
- [elpa] scratch/add-vdiff 8b32329 245/258: vdiff: Filter out killed buffers better, Justin Burkett, 2017/05/17
- [elpa] scratch/add-vdiff 8aa5c45 250/258: vdiff-magit: Fix paren, Justin Burkett, 2017/05/17
- [elpa] scratch/add-vdiff 466b852 173/258: Fix subtraction overlay addition, Justin Burkett, 2017/05/17
- [elpa] scratch/add-vdiff f3b6cec 179/258: Center on start, Justin Burkett, 2017/05/17
- [elpa] scratch/add-vdiff 667a7e4 144/258: Generalize data structures to prepare for diff3, Justin Burkett, 2017/05/17
- [elpa] scratch/add-vdiff 059d288 208/258: Update gitignore, Justin Burkett, 2017/05/17
- [elpa] scratch/add-vdiff cfad650 207/258: Provide missing function for emacs-nox users, Justin Burkett, 2017/05/17
- [elpa] scratch/add-vdiff e567468 221/258: vdiff-magit: Port show-working-tree, Justin Burkett, 2017/05/17
- [elpa] scratch/add-vdiff 30b0f9c 213/258: Add vdiff-magit.el with two functions, Justin Burkett, 2017/05/17