emacs-elpa-diffs
[Top][All Lists]
Advanced

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

[elpa] scratch/add-vdiff a040a4b 246/258: vdiff: Add vdiff-merge-conflic


From: Justin Burkett
Subject: [elpa] scratch/add-vdiff a040a4b 246/258: vdiff: Add vdiff-merge-conflict
Date: Wed, 17 May 2017 08:14:02 -0400 (EDT)

branch: scratch/add-vdiff
commit a040a4b48f840804962f3ef534df93628bbc85ea
Author: Justin Burkett <address@hidden>
Commit: Justin Burkett <address@hidden>

    vdiff: Add vdiff-merge-conflict
    
    Function for starting a vdiff session from a file marked with merge 
conflicts.
---
 vdiff-magit.el | 85 +---------------------------------------------------------
 vdiff.el       | 50 ++++++++++++++++++++++++++++++++++
 2 files changed, 51 insertions(+), 84 deletions(-)

diff --git a/vdiff-magit.el b/vdiff-magit.el
index 7802c5f..80ef977 100644
--- a/vdiff-magit.el
+++ b/vdiff-magit.el
@@ -118,90 +118,7 @@ conflicts, including those already resolved by Git, use
                                   (car (member current unmerged))))))
   (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)))))
+    (vdiff-merge-conflict file))))
 
 ;;;###autoload
 (defun vdiff-magit-stage (file)
diff --git a/vdiff.el b/vdiff.el
index 2351f0f..1f7ed04 100644
--- a/vdiff.el
+++ b/vdiff.el
@@ -1735,6 +1735,56 @@ function for ON-QUIT to do something useful with the 
result."
     (vdiff-refresh #'vdiff--scroll-function)))
 
 ;;;###autoload
+(defun vdiff-merge-conflict (file &optional on-quit restore-windows-on-quit)
+  "Start vdiff session using merge conflicts marked in FILE.
+
+The base or ancestor file is currently ignored."
+  (interactive (list buffer-file-name))
+  (with-current-buffer (find-file-noselect file)
+    (require 'smerge-mode)
+    (let* ((smerge-buffer (current-buffer))
+           (mode major-mode)
+           (filename (file-name-directory (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")
+                           "*"))))
+      (with-current-buffer mine
+        (buffer-disable-undo)
+        (insert-buffer-substring smerge-buffer)
+        (goto-char (point-min))
+        (while (smerge-find-conflict)
+          (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))
+
+      (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)))
+         (when (buffer-live-p mine) (kill-buffer mine))
+         (when (buffer-live-p other) (kill-buffer other)))
+       t))))
+
+;;;###autoload
 (defun vdiff-files3 (file-a file-b file-c &optional on-quit)
   "Start a vdiff session with 3 files. If called interactively,
 you will be asked to select two files."



reply via email to

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