From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Dan Nicolaescu Newsgroups: gmane.emacs.bugs Subject: bug#908: Displaying renamed files in vc-dir for bzr is incorrect Date: Sun, 07 Sep 2008 03:46:14 -0700 Message-ID: <200809071046.m87AkEQZ011895@sallyv1.ics.uci.edu> Reply-To: Dan Nicolaescu , 908@emacsbugs.donarmstrong.com NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: ger.gmane.org 1220785686 18940 80.91.229.12 (7 Sep 2008 11:08:06 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Sun, 7 Sep 2008 11:08:06 +0000 (UTC) To: bug-gnu-emacs Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Sun Sep 07 13:09:01 2008 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1KcI8Z-0004Ht-Lr for geb-bug-gnu-emacs@m.gmane.org; Sun, 07 Sep 2008 13:09:00 +0200 Original-Received: from localhost ([127.0.0.1]:42811 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KcI7Z-0002n6-TE for geb-bug-gnu-emacs@m.gmane.org; Sun, 07 Sep 2008 07:07:57 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KcI7E-0002jm-Ah for bug-gnu-emacs@gnu.org; Sun, 07 Sep 2008 07:07:36 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KcI7C-0002jL-DJ for bug-gnu-emacs@gnu.org; Sun, 07 Sep 2008 07:07:35 -0400 Original-Received: from [199.232.76.173] (port=37272 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KcI7C-0002jG-A2 for bug-gnu-emacs@gnu.org; Sun, 07 Sep 2008 07:07:34 -0400 Original-Received: from rzlab.ucr.edu ([138.23.92.77]:38713) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1KcI7B-0000vT-JC for bug-gnu-emacs@gnu.org; Sun, 07 Sep 2008 07:07:33 -0400 Original-Received: from rzlab.ucr.edu (rzlab.ucr.edu [127.0.0.1]) by rzlab.ucr.edu (8.13.8/8.13.8/Debian-3) with ESMTP id m87B7WKN025683; Sun, 7 Sep 2008 04:07:32 -0700 Original-Received: (from debbugs@localhost) by rzlab.ucr.edu (8.13.8/8.13.8/Submit) id m87At4Mv020160; Sun, 7 Sep 2008 03:55:04 -0700 X-Loop: don@donarmstrong.com Resent-From: Dan Nicolaescu Original-Sender: dann@ics.uci.edu Resent-To: bug-submit-list@donarmstrong.com Resent-CC: Emacs Bugs Resent-Date: Sun, 07 Sep 2008 10:55:04 +0000 Resent-Message-ID: Resent-Sender: don@donarmstrong.com X-Emacs-PR-Message: report 908 X-Emacs-PR-Package: emacs X-Emacs-PR-Keywords: Original-Received: via spool by submit@emacsbugs.donarmstrong.com id=B.122078445618005 (code B ref -1); Sun, 07 Sep 2008 10:55:04 +0000 Original-Received: (at submit) by emacsbugs.donarmstrong.com; 7 Sep 2008 10:47:36 +0000 Original-Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) by rzlab.ucr.edu (8.13.8/8.13.8/Debian-3) with ESMTP id m87AlWp4017938 for ; Sun, 7 Sep 2008 03:47:33 -0700 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KcHnn-0005n3-TV for bug-gnu-emacs@gnu.org; Sun, 07 Sep 2008 06:47:32 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KcHnj-0005eA-MN for bug-gnu-emacs@gnu.org; Sun, 07 Sep 2008 06:47:31 -0400 Original-Received: from [199.232.76.173] (port=39643 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KcHnj-0005dh-GV for bug-gnu-emacs@gnu.org; Sun, 07 Sep 2008 06:47:27 -0400 Original-Received: from sallyv1.ics.uci.edu ([128.195.1.109]:48882) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_3DES_EDE_CBC_SHA1:24) (Exim 4.60) (envelope-from ) id 1KcHnj-0006Yo-0y for bug-gnu-emacs@gnu.org; Sun, 07 Sep 2008 06:47:27 -0400 X-ICS-MailScanner-Watermark: 1221389175.23073@BxAv9H85EXQIoijumNQSAg Original-Received: from mothra.ics.uci.edu (mothra.ics.uci.edu [128.195.6.93]) by sallyv1.ics.uci.edu (8.13.7+Sun/8.13.7) with ESMTP id m87AkEQZ011895 for ; Sun, 7 Sep 2008 03:46:14 -0700 (PDT) Original-Lines: 114 X-ICS-MailScanner: Found to be clean X-ICS-MailScanner-SpamCheck: not spam, SpamAssassin (score=-1.363, required 5, autolearn=disabled, ALL_TRUSTED -1.44, TW_BZ 0.08) X-ICS-MailScanner-From: dann@mothra.ics.uci.edu X-detected-kernel: by monty-python.gnu.org: Solaris 10 (beta) X-detected-kernel: by monty-python.gnu.org: Linux 2.6 (newer, 3) Resent-Date: Sun, 07 Sep 2008 07:07:35 -0400 X-BeenThere: bug-gnu-emacs@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:20275 Archived-At: 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)))