[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] scratch/add-vdiff 52ea351 237/258: vdiff-magit: Add option to pre
From: |
Justin Burkett |
Subject: |
[elpa] scratch/add-vdiff 52ea351 237/258: vdiff-magit: Add option to prefer ediff for merges |
Date: |
Wed, 17 May 2017 08:14:00 -0400 (EDT) |
branch: scratch/add-vdiff
commit 52ea351686918aab0adba92cad4600cf5c0e05c5
Author: Justin Burkett <address@hidden>
Commit: Justin Burkett <address@hidden>
vdiff-magit: Add option to prefer ediff for merges
---
README.org | 10 +++-
vdiff-magit.el | 180 +++++++++++++++++++++++++++++++--------------------------
2 files changed, 104 insertions(+), 86 deletions(-)
diff --git a/README.org b/README.org
index 3be33a2..eafbab1 100644
--- a/README.org
+++ b/README.org
@@ -144,9 +144,13 @@ Please note that this is a new feature and probably
contains some bugs, so use
it with caution and please report oddities.
#+BEGIN_SRC emacs-lisp
-(require 'vdiff-magit)
-(define-key magit-mode-map "e" 'vdiff-magit-dwim)
-(define-key magit-mode-map "E" 'vdiff-magit-popup)
+ (require 'vdiff-magit)
+ (define-key magit-mode-map "e" 'vdiff-magit-dwim)
+ (define-key magit-mode-map "E" 'vdiff-magit-popup)
+ ;; This flag will default to using ediff for merges. vdiff-magit does not yet
+ ;; support 3-way merges. Please see the docstring of this variable for more
+ ;; information
+ ;; (setq vdiff-magit-use-ediff-for-merges nil)
#+END_SRC
** Further customization
diff --git a/vdiff-magit.el b/vdiff-magit.el
index 23e59e5..fa456f0 100644
--- a/vdiff-magit.el
+++ b/vdiff-magit.el
@@ -90,6 +90,18 @@ tree at the time of stashing."
:group 'vdiff-magit
:type 'boolean)
+(defcustom vdiff-magit-use-ediff-for-merges nil
+ "If non-nil prefer using `magit-ediff-resolve' over `vdiff-magit-resolve'.
+
+The vdiff-magit version only supports 2-way merges right now and
+not 3-way ones. If you use `vdiff-magit-resolve' in a situation
+requiring a 3-way merge it will abort and forward to
+`magit-ediff-resolve' instead. The purpose of this flag is to
+make the merge experience consistent across all types of
+merges."
+ :group 'vdiff-magit
+ :type 'boolean)
+
;; (defvar magit-ediff-previous-winconf nil)
;;;###autoload (autoload 'vdiff-magit-popup "vdiff-magit" nil t)
@@ -121,89 +133,91 @@ 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))))))
- (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))))
+ (if vdiff-magit-use-ediff-for-merges
+ (magit-ediff-resolve file)
+ (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 615e7bd 228/258: vdiff-magit: Fix killing of buffers in stage, (continued)
- [elpa] scratch/add-vdiff 615e7bd 228/258: vdiff-magit: Fix killing of buffers in stage, Justin Burkett, 2017/05/17
- [elpa] scratch/add-vdiff a040a4b 246/258: vdiff: Add vdiff-merge-conflict, Justin Burkett, 2017/05/17
- [elpa] scratch/add-vdiff 7fbb20e 205/258: Nil temp-session after using it, Justin Burkett, 2017/05/17
- [elpa] scratch/add-vdiff 048d544 198/258: Pass session explicitly from refresh sentinel, Justin Burkett, 2017/05/17
- [elpa] scratch/add-vdiff ed25084 224/258: vdiff-magit: Fix some strings, Justin Burkett, 2017/05/17
- [elpa] scratch/add-vdiff 432534d 230/258: vdiff-magit: Don't use vdiff-magit-resolve yet, Justin Burkett, 2017/05/17
- [elpa] scratch/add-vdiff 1d79425 235/258: vdiff-magit: Cleanup header, Justin Burkett, 2017/05/17
- [elpa] scratch/add-vdiff c2c991d 209/258: Add initial vdiff-magit work, Justin Burkett, 2017/05/17
- [elpa] scratch/add-vdiff fb3097c 247/258: vdiff: Check if window exists before forcing vscroll, Justin Burkett, 2017/05/17
- [elpa] scratch/add-vdiff bcacd3f 249/258: vdiff: Add option vdiff-use-ancestor-as-merge-buffer, Justin Burkett, 2017/05/17
- [elpa] scratch/add-vdiff 52ea351 237/258: vdiff-magit: Add option to prefer ediff for merges,
Justin Burkett <=
- [elpa] scratch/add-vdiff f11c7c2 257/258: vdiff: Fix vdiff-buffers window layout, Justin Burkett, 2017/05/17