[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."
- [elpa] scratch/add-vdiff e567468 221/258: vdiff-magit: Port show-working-tree, (continued)
- [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
- [elpa] scratch/add-vdiff 64430c3 215/258: Cleanup merge, Justin Burkett, 2017/05/17
- [elpa] scratch/add-vdiff 19f4616 217/258: vdiff-magit: Port compare and show-commit, Justin Burkett, 2017/05/17
- [elpa] scratch/add-vdiff a81d62a 240/258: README: Update recent changes, Justin Burkett, 2017/05/17
- [elpa] scratch/add-vdiff 9be4fe3 066/258: Update install instructions in README, Justin Burkett, 2017/05/17
- [elpa] scratch/add-vdiff eda4b1b 204/258: Force update of window-start in manual calls to scroll func, Justin Burkett, 2017/05/17
- [elpa] scratch/add-vdiff 7d60015 201/258: Add some doctrings, Justin Burkett, 2017/05/17
- [elpa] scratch/add-vdiff 3037be6 222/258: vdiff-magit: Cleanup references in dwim, Justin Burkett, 2017/05/17
- [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 <=
- [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, 2017/05/17
- [elpa] scratch/add-vdiff f11c7c2 257/258: vdiff: Fix vdiff-buffers window layout, Justin Burkett, 2017/05/17