[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#908: Displaying renamed files in vc-dir for bzr is incorrect
From: |
Dan Nicolaescu |
Subject: |
bug#908: Displaying renamed files in vc-dir for bzr is incorrect |
Date: |
Sun, 07 Sep 2008 03:46:14 -0700 |
When using Bzr, renamed files for are shown like this in vc-dir:
nil OLD_NAME => NEW_NAME
where `nil' is supposed to be the VC state and `OLD_NAME => NEW_NAME' is
believed to be a file name...
The patch below fixes this. Not sure if this is appropriate to check in
now given the feature freeze, as the patch needs to add a feature in
order to fix the bug. So record the fix here so that it does not get
lost.
* vc-bzr.el (vc-bzr-extra-fileinfo): New defstruct.
(vc-bzr-status-printer): New function.
(vc-bzr-after-dir-status): Deal with renamed files.
Index: vc-bzr.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/vc-bzr.el,v
retrieving revision 1.65
diff -u -3 -p -u -p -r1.65 vc-bzr.el
--- vc-bzr.el 10 Aug 2008 19:48:57 -0000 1.65
+++ vc-bzr.el 7 Sep 2008 10:36:07 -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 @@ stream. Standard error output is discar
;; 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 discar
;; 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 discar
(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)))
- bug#908: Displaying renamed files in vc-dir for bzr is incorrect,
Dan Nicolaescu <=