From 85a55d3871ce4efbde1666bd48b4fca1c638ee99 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 4 Mar 2011 09:24:02 -0800 Subject: [PATCH] * lisp/vc/vc-bzr.el (vc-bzr-after-dir-status): Handle bzr 2.3.0. (Bug#8170) --- lisp/ChangeLog | 4 +++ lisp/vc/vc-bzr.el | 66 ++++++++++++++++++++++++----------------------- 2 files changed, 38 insertions(+), 32 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index d22a209afa3..2fca345992d 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2011-03-04 Glenn Morris + + * vc/vc-bzr.el (vc-bzr-after-dir-status): Handle bzr 2.3.0. (Bug#8170) + 2011-03-04 Tom Tromey * progmodes/gud.el (gdb-script-mode): Derive from prog-mode. diff --git a/lisp/vc/vc-bzr.el b/lisp/vc/vc-bzr.el index 99b70b06882..a0a16601ed7 100644 --- a/lisp/vc/vc-bzr.el +++ b/lisp/vc/vc-bzr.el @@ -879,38 +879,40 @@ stream. Standard error output is discarded." (result nil)) (goto-char (point-min)) (while (not (eobp)) - (setq status-str - (buffer-substring-no-properties (point) (+ (point) 3))) - (setq translated (cdr (assoc status-str translation))) - (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[ M] \\(.*\\) => \\(.*\\)$" (line-end-position) t) - (let ((new-name (file-relative-name (match-string 2) relative-dir)) - (old-name (file-relative-name (match-string 1) relative-dir))) - (push (list new-name 'edited - (vc-bzr-create-extra-fileinfo old-name)) result))) - ;; do nothing for non existent files - ((eq translated 'not-found)) - (t - (push (list (file-relative-name - (buffer-substring-no-properties - (+ (point) 4) - (line-end-position)) relative-dir) - translated) result))) - (forward-line)) + ;; Bzr 2.3.0 added this if there are shelves. (Bug#8170) + (unless (looking-at "[1-9]+ shel\\(f\\|ves\\) exists?\\.") + (setq status-str + (buffer-substring-no-properties (point) (+ (point) 3))) + (setq translated (cdr (assoc status-str translation))) + (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[ M] \\(.*\\) => \\(.*\\)$" (line-end-position) t) + (let ((new-name (file-relative-name (match-string 2) relative-dir)) + (old-name (file-relative-name (match-string 1) relative-dir))) + (push (list new-name 'edited + (vc-bzr-create-extra-fileinfo old-name)) result))) + ;; do nothing for non existent files + ((eq translated 'not-found)) + (t + (push (list (file-relative-name + (buffer-substring-no-properties + (+ (point) 4) + (line-end-position)) relative-dir) + translated) result)))) + (forward-line)) (funcall update-function result))) (defun vc-bzr-dir-status (dir update-function)