1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-11-27 07:37:33 +00:00

(vc-bzr-extra-fileinfo): New defstruct.

(vc-bzr-status-printer): New function.
(vc-bzr-after-dir-status): Deal with renamed files.
This commit is contained in:
Dan Nicolaescu 2008-09-07 17:24:57 +00:00
parent bed27b2468
commit a0c38937bb
2 changed files with 49 additions and 15 deletions

View File

@ -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

View File

@ -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)))