summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
authorDan Nicolaescu <dann@ics.uci.edu>2008-09-07 17:24:57 +0000
committerDan Nicolaescu <dann@ics.uci.edu>2008-09-07 17:24:57 +0000
commita0c38937bbb85c0ef6e6149211142d927f903cc5 (patch)
tree5beb96b23fa441c94e352cf3d21afb4a2c743c55 /lisp
parentbed27b246864eef935a982549e4155e7050fa507 (diff)
downloademacs-a0c38937bbb85c0ef6e6149211142d927f903cc5.tar.gz
(vc-bzr-extra-fileinfo): New defstruct.
(vc-bzr-status-printer): New function. (vc-bzr-after-dir-status): Deal with renamed files.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/ChangeLog6
-rw-r--r--lisp/vc-bzr.el58
2 files changed, 49 insertions, 15 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 2f7f5f0832b..9bda179c523 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -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
diff --git a/lisp/vc-bzr.el b/lisp/vc-bzr.el
index 9ba97cf7f94..a9652639948 100644
--- a/lisp/vc-bzr.el
+++ b/lisp/vc-bzr.el
@@ -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 @@ stream. Standard error output is discarded."
;; 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 @@ stream. Standard error output is discarded."
;; 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 @@ stream. Standard error output is discarded."
(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)))