Mercurial > emacs
diff lisp/vc-svn.el @ 91040:14c4a6aac623
Merge from emacs--devo--0
Patches applied:
* emacs--devo--0 (patch 866-879)
- Merge multi-tty branch
- Update from CVS
- Merge from emacs--rel--22
Revision: emacs@sv.gnu.org/emacs--unicode--0--patch-257
author | Miles Bader <miles@gnu.org> |
---|---|
date | Thu, 11 Oct 2007 16:14:00 +0000 |
parents | b83d0dadb2a7 c2cc930bdd9e |
children | d38543a1c0f9 |
line wrap: on
line diff
--- a/lisp/vc-svn.el Thu Oct 11 01:51:15 2007 +0000 +++ b/lisp/vc-svn.el Thu Oct 11 16:14:00 2007 +0000 @@ -24,11 +24,8 @@ ;;; Commentary: -;; This is preliminary support for Subversion (http://subversion.tigris.org/). -;; It started as `sed s/cvs/svn/ vc.cvs.el' (from version 1.56) -;; and hasn't been completely fixed since. - -;; Sync'd with Subversion's vc-svn.el as of revision 5801. +;; Sync'd with Subversion's vc-svn.el as of revision 5801. but this version +;; has been extensively modified since to handle filesets. ;;; Bugs: @@ -382,7 +379,16 @@ (let ((inhibit-read-only t)) (goto-char (point-min)) ;; Add a line to tell log-view-mode what file this is. - (insert "Working file(s): " (vc-delistify (mapcar 'file-relative-name files)) "\n")) + ;; FIXME if there are multiple files, log-view-current-file + ;; breaks. It's trivial to adapt log-view-file-re for the + ;; changed prefix, but less trivial to make + ;; log-view-current-file actually do the right thing in the + ;; multiple file case. + (insert (format "Working file%s: " + (if (= (length files) 1) + "" + "s")) + (vc-delistify (mapcar 'file-relative-name files)) "\n")) (vc-svn-command buffer (if (and (= (length files) 1) (vc-stay-local-p (car files)) (fboundp 'start-process)) 'async 0) @@ -433,7 +439,7 @@ (defun vc-svn-diff-tree (dir &optional rev1 rev2) "Diff all files at and below DIR." - (vc-svn-diff (file-name-as-directory dir) rev1 rev2)) + (vc-svn-diff (list (file-name-as-directory dir)) rev1 rev2)) ;;; ;;; Snapshot system @@ -512,6 +518,33 @@ ;; behavior for different modules on the same server. (match-string 1)))) +(defun vc-svn-resolve-when-done () + "Call \"svn resolved\" if the conflict markers have been removed." + (save-excursion + (goto-char (point-min)) + (if (not (re-search-forward "^<<<<<<< " nil t)) + (vc-svn-command nil 0 buffer-file-name "resolved")))) + +;; Inspired by vc-arch-find-file-hook. +(defun vc-svn-find-file-hook () + (when (eq ?C (vc-file-getprop buffer-file-name 'vc-svn-status)) + ;; If the file is marked as "conflicted", then we should try and call + ;; "svn resolved" when applicable. + (if (save-excursion + (goto-char (point-min)) + (re-search-forward "^<<<<<<< " nil t)) + ;; There are conflict markers. + (progn + (smerge-mode 1) + (add-hook 'after-save-hook 'vc-svn-resolve-when-done nil t)) + ;; There are no conflict markers. This is problematic: maybe it means + ;; the conflict has been resolved and we should immediately call "svn + ;; resolved", or it means that the file's type does not allow Svn to + ;; use conflict markers in which case we don't really know what to do. + ;; So let's just punt for now. + nil) + (message "There are unresolved conflicts in this file"))) + (defun vc-svn-parse-status (&optional filename) "Parse output of \"svn status\" command in the current buffer. Set file properties accordingly. Unless FILENAME is non-nil, parse only @@ -534,6 +567,8 @@ ;; Use the last-modified revision, so that searching in vc-print-log ;; output works. (vc-file-setprop file 'vc-workfile-version (match-string 3)) + ;; Remember Svn's own status. + (vc-file-setprop file 'vc-svn-status status) (vc-file-setprop file 'vc-state (cond