Mercurial > emacs
changeset 98079:9fc5b62e3967
(vc-bzr-extra-fileinfo): New defstruct.
(vc-bzr-status-printer): New function.
(vc-bzr-after-dir-status): Deal with renamed files.
author | Dan Nicolaescu <dann@ics.uci.edu> |
---|---|
date | Sun, 07 Sep 2008 17:24:57 +0000 |
parents | 673e5f97e402 |
children | 0b2ff37e6e72 |
files | lisp/ChangeLog lisp/vc-bzr.el |
diffstat | 2 files changed, 49 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Sun Sep 07 15:49:59 2008 +0000 +++ b/lisp/ChangeLog Sun Sep 07 17:24:57 2008 +0000 @@ -1,3 +1,9 @@ +2008-09-07 Dan Nicolaescu <dann@ics.uci.edu> + + * vc-bzr.el (vc-bzr-extra-fileinfo): New defstruct. + (vc-bzr-status-printer): New function. + (vc-bzr-after-dir-status): Deal with renamed files. + 2008-09-07 Johan Euphrosine <proppy@aminche.com> (tiny change) * ibuf-ext.el (ibuffer-diff-buffer-with-file-1): Shell quote
--- a/lisp/vc-bzr.el Sun Sep 07 15:49:59 2008 +0000 +++ b/lisp/vc-bzr.el Sun Sep 07 17:24:57 2008 +0000 @@ -52,7 +52,8 @@ (eval-when-compile (require 'cl) - (require 'vc)) ; for vc-exec-after + (require 'vc) ;; for vc-exec-after + (require 'vc-dir)) ;; Clear up the cache to force vc-call to check again and discover ;; new functions when we reload this file. @@ -576,6 +577,22 @@ ;; else fall back to default vc.el representation (vc-default-prettify-state-info 'Bzr file))) +(defstruct (vc-bzr-extra-fileinfo + (:copier nil) + (:constructor vc-bzr-create-extra-fileinfo (extra-name)) + (:conc-name vc-bzr-extra-fileinfo->)) + extra-name) ;; original name for rename targets, new name for + +(defun vc-bzr-status-printer (info) + "Pretty-printer for the vc-dir-fileinfo structure." + (let ((extra (vc-dir-fileinfo->extra info))) + (vc-default-status-printer 'Bzr info) + (when extra + (insert (propertize + (format " (renamed from %s)" + (vc-bzr-extra-fileinfo->extra-name extra)) + 'face 'font-lock-comment-face))))) + ;; FIXME: this needs testing, it's probably incomplete. (defun vc-bzr-after-dir-status (update-function) (let ((status-str nil) @@ -589,6 +606,9 @@ ;; For conflicts, should we list the .THIS/.BASE/.OTHER? ("C " . conflict) ("? " . unregistered) + ("? " . unregistered) + ;; No such state, but we need to distinguish this case. + ("R " . renamed) ;; Ignore "P " and "P." for pending patches. )) (translated nil) @@ -598,23 +618,31 @@ (setq status-str (buffer-substring-no-properties (point) (+ (point) 3))) (setq translated (cdr (assoc status-str translation))) - ;; For conflicts the file appears twice in the listing: once - ;; with the M flag and once with the C flag, so take care not - ;; to add it twice to `result'. Ugly. - (if (eq translated 'conflict) - (let* ((file - (buffer-substring-no-properties - ;;For files with conflicts the format is: - ;;C Text conflict in FILENAME - ;; Bah. - (+ (point) 21) (line-end-position))) - (entry (assoc file result))) - (when entry - (setf (nth 1 entry) 'conflict))) + (cond + ((eq translated 'conflict) + ;; For conflicts the file appears twice in the listing: once + ;; with the M flag and once with the C flag, so take care + ;; not to add it twice to `result'. Ugly. + (let* ((file + (buffer-substring-no-properties + ;;For files with conflicts the format is: + ;;C Text conflict in FILENAME + ;; Bah. + (+ (point) 21) (line-end-position))) + (entry (assoc file result))) + (when entry + (setf (nth 1 entry) 'conflict)))) + ((eq translated 'renamed) + (re-search-forward "R \\(.*\\) => \\(.*\\)$" (line-end-position) t) + (let ((new-name (match-string 2)) + (old-name (match-string 1))) + (push (list new-name 'edited + (vc-bzr-create-extra-fileinfo old-name)) result))) + (t (push (list (buffer-substring-no-properties (+ (point) 4) (line-end-position)) - translated) result)) + translated) result))) (forward-line)) (funcall update-function result)))