aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lisp/vc/ediff-diff.el35
1 files changed, 21 insertions, 14 deletions
diff --git a/lisp/vc/ediff-diff.el b/lisp/vc/ediff-diff.el
index 07b853817d1..24647de576d 100644
--- a/lisp/vc/ediff-diff.el
+++ b/lisp/vc/ediff-diff.el
@@ -942,6 +942,9 @@ one optional arguments, diff-number to refine.")
942 (c-prev-pt nil) 942 (c-prev-pt nil)
943 (anc-prev 1) 943 (anc-prev 1)
944 diff-list shift-A shift-B shift-C 944 diff-list shift-A shift-B shift-C
945 (A-idx "1")
946 (B-idx (if three-way-comp "2" "3"))
947 (C-idx (if three-way-comp "3" "2"))
945 ) 948 )
946 949
947 ;; diff list contains word numbers or points, depending on word-mode 950 ;; diff list contains word numbers or points, depending on word-mode
@@ -979,23 +982,23 @@ one optional arguments, diff-number to refine.")
979 (let ((agreement (buffer-substring (match-beginning 1) (match-end 1)))) 982 (let ((agreement (buffer-substring (match-beginning 1) (match-end 1))))
980 ;; if the files A and B are the same and not 3way-comparison, 983 ;; if the files A and B are the same and not 3way-comparison,
981 ;; ignore the difference 984 ;; ignore the difference
982 (if (or three-way-comp (not (string-equal agreement "3"))) 985 (if (or three-way-comp (not (string-equal agreement C-idx)))
983 (let* ((a-begin (car (ediff-get-diff3-group "1"))) 986 (let* ((a-begin (car (ediff-get-diff3-group A-idx)))
984 (a-end (nth 1 (ediff-get-diff3-group "1"))) 987 (a-end (nth 1 (ediff-get-diff3-group A-idx)))
985 (b-begin (car (ediff-get-diff3-group "2"))) 988 (b-begin (car (ediff-get-diff3-group B-idx)))
986 (b-end (nth 1 (ediff-get-diff3-group "2"))) 989 (b-end (nth 1 (ediff-get-diff3-group B-idx)))
987 (c-or-anc-begin (car (ediff-get-diff3-group "3"))) 990 (c-or-anc-begin (car (ediff-get-diff3-group C-idx)))
988 (c-or-anc-end (nth 1 (ediff-get-diff3-group "3"))) 991 (c-or-anc-end (nth 1 (ediff-get-diff3-group C-idx)))
989 (state-of-merge 992 (state-of-merge
990 (cond ((string-equal agreement "1") 'prefer-A) 993 (cond ((string-equal agreement A-idx) 'prefer-A)
991 ((string-equal agreement "2") 'prefer-B) 994 ((string-equal agreement B-idx) 'prefer-B)
992 (t ediff-default-variant))) 995 (t ediff-default-variant)))
993 (state-of-diff-merge 996 (state-of-diff-merge
994 (if (memq state-of-merge '(default-A prefer-A)) 'B 'A)) 997 (if (memq state-of-merge '(default-A prefer-A)) 'B 'A))
995 (state-of-diff-comparison 998 (state-of-diff-comparison
996 (cond ((string-equal agreement "1") 'A) 999 (cond ((string-equal agreement A-idx) 'A)
997 ((string-equal agreement "2") 'B) 1000 ((string-equal agreement B-idx) 'B)
998 ((string-equal agreement "3") 'C))) 1001 ((string-equal agreement C-idx) 'C)))
999 state-of-ancestor 1002 state-of-ancestor
1000 c-begin c-end 1003 c-begin c-end
1001 a-begin-pt a-end-pt 1004 a-begin-pt a-end-pt
@@ -1108,8 +1111,12 @@ one optional arguments, diff-number to refine.")
1108 (get-buffer-create (ediff-unique-buffer-name "*ediff-diff" "*")))) 1111 (get-buffer-create (ediff-unique-buffer-name "*ediff-diff" "*"))))
1109 1112
1110 (message "Computing differences ...") 1113 (message "Computing differences ...")
1111 (ediff-exec-process ediff-diff3-program ediff-diff-buffer 'synchronize 1114 (apply #'ediff-exec-process ediff-diff3-program ediff-diff-buffer 'synchronize
1112 ediff-actual-diff3-options file-A file-B file-C) 1115 ediff-actual-diff3-options
1116 (cons file-A (if ediff-merge-with-ancestor-job
1117 ;; Ancestor must be the middle file
1118 (list file-C file-B)
1119 (list file-B file-C))))
1113 1120
1114 (ediff-prepare-error-list ediff-diff3-ok-lines-regexp ediff-diff-buffer) 1121 (ediff-prepare-error-list ediff-diff3-ok-lines-regexp ediff-diff-buffer)
1115 ;;(message "Computing differences ... done") 1122 ;;(message "Computing differences ... done")