From: Stefan Monnier Date: Fri, 28 Sep 2007 18:45:43 +0000 (+0000) Subject: (vc-svn-resolve-when-done, vc-svn-find-file-hook): New funs. X-Git-Tag: emacs-pretest-22.1.90~720 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=1c67a81478ffb168a097a068c2bacee6adf48bcf;p=emacs.git (vc-svn-resolve-when-done, vc-svn-find-file-hook): New funs. Used to try and automatically enabled smerge-mode in the presence of conflicts and to call `svn resolved' when the conflicts are gone. (vc-svn-parse-status): Remember the svn-specific status. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e2b68f2b617..b8ff1f4827c 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,10 @@ 2007-09-28 Stefan Monnier + * vc-svn.el (vc-svn-resolve-when-done, vc-svn-find-file-hook): New funs. + Used to try and automatically enabled smerge-mode in the presence of + conflicts and to call `svn resolved' when the conflicts are gone. + (vc-svn-parse-status): Remember the svn-specific status. + * newcomment.el (comment-choose-indent): New function extracted from comment-indent. Improve the alignment algorithm. (comment-indent): Use it. diff --git a/lisp/vc-svn.el b/lisp/vc-svn.el index ceb1df52eaf..bfb0da68048 100644 --- a/lisp/vc-svn.el +++ b/lisp/vc-svn.el @@ -493,6 +493,33 @@ and that it passes `vc-svn-global-switches' to it before FLAGS." ;; 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 @@ -515,6 +542,8 @@ information about FILENAME and return its status." ;; 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