Mercurial > emacs
comparison lisp/vc.el @ 47780:27caec378c23
(vc-maybe-resolve-conflicts): Always call vc-resolve-conflicts
in case some other package redefined it.
(vc-resolve-conflicts): Make it into an alias for smerge-ediff.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Mon, 07 Oct 2002 16:24:42 +0000 |
parents | 1dc1153f070a |
children | 79bdd88fb006 |
comparison
equal
deleted
inserted
replaced
47779:d53b71650f3b | 47780:27caec378c23 |
---|---|
4 | 4 |
5 ;; Author: FSF (see below for full credits) | 5 ;; Author: FSF (see below for full credits) |
6 ;; Maintainer: Andre Spiegel <spiegel@gnu.org> | 6 ;; Maintainer: Andre Spiegel <spiegel@gnu.org> |
7 ;; Keywords: tools | 7 ;; Keywords: tools |
8 | 8 |
9 ;; $Id: vc.el,v 1.338 2002/10/05 03:00:47 rost Exp $ | 9 ;; $Id: vc.el,v 1.339 2002/10/05 16:35:28 monnier Exp $ |
10 | 10 |
11 ;; This file is part of GNU Emacs. | 11 ;; This file is part of GNU Emacs. |
12 | 12 |
13 ;; GNU Emacs is free software; you can redistribute it and/or modify | 13 ;; GNU Emacs is free software; you can redistribute it and/or modify |
14 ;; it under the terms of the GNU General Public License as published by | 14 ;; it under the terms of the GNU General Public License as published by |
2034 (defun vc-maybe-resolve-conflicts (file status &optional name-A name-B) | 2034 (defun vc-maybe-resolve-conflicts (file status &optional name-A name-B) |
2035 (vc-resynch-buffer file t (not (buffer-modified-p))) | 2035 (vc-resynch-buffer file t (not (buffer-modified-p))) |
2036 (if (zerop status) (message "Merge successful") | 2036 (if (zerop status) (message "Merge successful") |
2037 (smerge-mode 1) | 2037 (smerge-mode 1) |
2038 (if (y-or-n-p "Conflicts detected. Resolve them now? ") | 2038 (if (y-or-n-p "Conflicts detected. Resolve them now? ") |
2039 (smerge-ediff name-A name-B) | 2039 (vc-resolve-conflicts name-A name-B) |
2040 (message "File contains conflict markers")))) | 2040 (message "File contains conflict markers")))) |
2041 | 2041 |
2042 (defvar vc-ediff-windows) | |
2043 (defvar vc-ediff-result) | |
2044 (eval-when-compile | |
2045 (defvar ediff-buffer-A) | |
2046 (defvar ediff-buffer-B) | |
2047 (defvar ediff-buffer-C) | |
2048 (require 'ediff-util)) | |
2049 ;;;###autoload | 2042 ;;;###autoload |
2050 (defun vc-resolve-conflicts (&optional name-A name-B) | 2043 (defalias 'vc-resolve-conflicts smerge-ediff) |
2051 "Invoke ediff to resolve conflicts in the current buffer. | |
2052 The conflicts must be marked with rcsmerge conflict markers." | |
2053 (interactive) | |
2054 (vc-ensure-vc-buffer) | |
2055 (let* ((found nil) | |
2056 (file-name (file-name-nondirectory buffer-file-name)) | |
2057 (your-buffer (generate-new-buffer | |
2058 (concat "*" file-name | |
2059 " " (or name-A "WORKFILE") "*"))) | |
2060 (other-buffer (generate-new-buffer | |
2061 (concat "*" file-name | |
2062 " " (or name-B "CHECKED-IN") "*"))) | |
2063 (result-buffer (current-buffer))) | |
2064 (save-excursion | |
2065 (set-buffer your-buffer) | |
2066 (erase-buffer) | |
2067 (insert-buffer result-buffer) | |
2068 (goto-char (point-min)) | |
2069 (while (re-search-forward (concat "^<<<<<<< " | |
2070 (regexp-quote file-name) "\n") nil t) | |
2071 (setq found t) | |
2072 (replace-match "") | |
2073 (if (not (re-search-forward "^=======\n" nil t)) | |
2074 (error "Malformed conflict marker")) | |
2075 (replace-match "") | |
2076 (let ((start (point))) | |
2077 (if (not (re-search-forward "^>>>>>>> [0-9.]+\n" nil t)) | |
2078 (error "Malformed conflict marker")) | |
2079 (delete-region start (point)))) | |
2080 (if (not found) | |
2081 (progn | |
2082 (kill-buffer your-buffer) | |
2083 (kill-buffer other-buffer) | |
2084 (error "No conflict markers found"))) | |
2085 (set-buffer other-buffer) | |
2086 (erase-buffer) | |
2087 (insert-buffer result-buffer) | |
2088 (goto-char (point-min)) | |
2089 (while (re-search-forward (concat "^<<<<<<< " | |
2090 (regexp-quote file-name) "\n") nil t) | |
2091 (let ((start (match-beginning 0))) | |
2092 (if (not (re-search-forward "^=======\n" nil t)) | |
2093 (error "Malformed conflict marker")) | |
2094 (delete-region start (point)) | |
2095 (if (not (re-search-forward "^>>>>>>> [0-9.]+\n" nil t)) | |
2096 (error "Malformed conflict marker")) | |
2097 (replace-match ""))) | |
2098 (let ((config (current-window-configuration)) | |
2099 (ediff-default-variant 'default-B)) | |
2100 | |
2101 ;; Fire up ediff. | |
2102 | |
2103 (set-buffer (ediff-merge-buffers your-buffer other-buffer)) | |
2104 | |
2105 ;; Ediff is now set up, and we are in the control buffer. | |
2106 ;; Do a few further adjustments and take precautions for exit. | |
2107 | |
2108 (make-local-variable 'vc-ediff-windows) | |
2109 (setq vc-ediff-windows config) | |
2110 (make-local-variable 'vc-ediff-result) | |
2111 (setq vc-ediff-result result-buffer) | |
2112 (make-local-variable 'ediff-quit-hook) | |
2113 (setq ediff-quit-hook | |
2114 (lambda () | |
2115 (let ((buffer-A ediff-buffer-A) | |
2116 (buffer-B ediff-buffer-B) | |
2117 (buffer-C ediff-buffer-C) | |
2118 (result vc-ediff-result) | |
2119 (windows vc-ediff-windows)) | |
2120 (ediff-cleanup-mess) | |
2121 (set-buffer result) | |
2122 (erase-buffer) | |
2123 (insert-buffer buffer-C) | |
2124 (kill-buffer buffer-A) | |
2125 (kill-buffer buffer-B) | |
2126 (kill-buffer buffer-C) | |
2127 (set-window-configuration windows) | |
2128 (message "Conflict resolution finished; you may save the buffer")))) | |
2129 (message "Please resolve conflicts now; exit ediff when done") | |
2130 nil)))) | |
2131 | 2044 |
2132 ;; The VC directory major mode. Coopt Dired for this. | 2045 ;; The VC directory major mode. Coopt Dired for this. |
2133 ;; All VC commands get mapped into logical equivalents. | 2046 ;; All VC commands get mapped into logical equivalents. |
2134 | 2047 |
2135 (defvar vc-dired-switches) | 2048 (defvar vc-dired-switches) |