From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Riccardo Murri Newsgroups: gmane.emacs.devel Subject: Fixes to vc-bzr.el for the new VC code Date: Fri, 04 Jan 2008 02:25:48 +0100 Message-ID: <87abnms7oj.fsf@tanja.bruenzels.invalid> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Trace: ger.gmane.org 1199409979 27793 80.91.229.12 (4 Jan 2008 01:26:19 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Fri, 4 Jan 2008 01:26:19 +0000 (UTC) To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Fri Jan 04 02:26:29 2008 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1JAbKO-0003Qr-Ob for ged-emacs-devel@m.gmane.org; Fri, 04 Jan 2008 02:26:29 +0100 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1JAbK2-0001Ua-DO for ged-emacs-devel@m.gmane.org; Thu, 03 Jan 2008 20:26:06 -0500 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1JAbJx-0001UL-H8 for emacs-devel@gnu.org; Thu, 03 Jan 2008 20:26:01 -0500 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1JAbJv-0001U9-SL for emacs-devel@gnu.org; Thu, 03 Jan 2008 20:26:00 -0500 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1JAbJv-0001U6-Nl for emacs-devel@gnu.org; Thu, 03 Jan 2008 20:25:59 -0500 Original-Received: from main.gmane.org ([80.91.229.2] helo=ciao.gmane.org) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1JAbJv-0005CE-CF for emacs-devel@gnu.org; Thu, 03 Jan 2008 20:25:59 -0500 Original-Received: from list by ciao.gmane.org with local (Exim 4.43) id 1JAbJs-0001vN-1R for emacs-devel@gnu.org; Fri, 04 Jan 2008 01:25:56 +0000 Original-Received: from adsl203-145-182.mclink.it ([213.203.145.182]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Fri, 04 Jan 2008 01:25:56 +0000 Original-Received: from riccardo.murri by adsl203-145-182.mclink.it with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Fri, 04 Jan 2008 01:25:56 +0000 X-Injected-Via-Gmane: http://gmane.org/ Original-Lines: 366 Original-X-Complaints-To: usenet@ger.gmane.org X-Gmane-NNTP-Posting-Host: adsl203-145-182.mclink.it User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.1 (gnu/linux) Cancel-Lock: sha1:sSlGY8zxytRSTlGBG0Zoe+M6oFw= X-detected-kernel: by monty-python.gnu.org: Linux 2.6, seldom 2.4 (older, 4) X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:86030 Archived-At: --=-=-= Hello, here's a patch against vc-bzr.el (diff taken against CVS-1.23 HEAD), containing some misc fixes. Only slightly tested on 23.0.50.1 built on Debian from CVS sources. Short summary of changes: - completed transition to new VC; `vc-bzr-state' uses the new 'removed, 'ignored and 'unregistered states. - new customization option `vc-bzr-log-switches' (analogous to `vc-bzr-diff-switches'); - bugfix in `vc-bzr-unregister': must not delete unregistered file; - vc-bzr-command overrides only LC_MESSAGES, not the whole locale setting; Detailed changelog: * Copyright and version headers update. Remove some outdated comments through the whole file. * (vc-bzr-program-args): Removed because unused. * (vc-bzr-log-switches): New customization option. * (vc-bzr-command): Use LC_MESSAGES=C instead of LC_ALL=C. No longer use `vc-bzr-program-args'. * (vc-bzr-revision-granularity): New function. * (vc-bzr-status): Update regex to match latest Bzr output. Use new 'removed, 'ignored and 'unregistered states. * (vc-bzr-init-revision): New function. * (vc-bzr-unregister): Must not delete file. * (vc-bzr-find-revision): New function. * (vc-bzr-checkout): Argument `rev' is explicit revision only if it's a non-empty string, otherwise take head revision. * (vc-bzr-print-log): Pass `vc-bzr-log-switches' to "bzr log". * (vc-bzr-diff): Simpler build of the revision spec string. * (vc-annotate-convert-time, vc-bzr-annotate-difference): Removed: compatibility hacks for Emacs21, not needed in Emacs 22. * (vc-bzr-dir-state): Added code comments. Removed redundant statement. * (vc-bzr-dired-state-info): Only provide custom strings for overloaded VC state 'edited; otherwise fallback to `vc-default-dired-state-info'. -- Riccardo Murri, via Galeazzo Alessi 61, 00176 Roma --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=CVS-1.23.diff Content-Description: patch against vc-bzr.el CVS-1.23 HEAD --- /home/rmurri/src/emacs23/lisp/vc-bzr.el 2007-12-30 22:25:49.000000000 +0100 +++ vc-bzr.el 2008-01-04 00:25:18.000000000 +0100 @@ -1,11 +1,11 @@ ;;; vc-bzr.el --- VC backend for the bzr revision control system -;; Copyright (C) 2006, 2007 Free Software Foundation, Inc. +;; Copyright (C) 2006--2008 Free Software Foundation, Inc. ;; Author: Dave Love , Riccardo Murri ;; Keywords: tools ;; Created: Sept 2006 -;; Version: 2007-09-05 +;; Version: 2008-01-03 (Bzr revno 22) ;; URL: http://launchpad.net/vc-bzr ;; This file is free software; you can redistribute it and/or modify @@ -26,13 +26,11 @@ ;;; Commentary: -;; See concerning bzr. - -;; Load this library to register bzr support in VC. It covers basic VC -;; functionality, but was only lightly exercised with a few Emacs/bzr -;; version combinations, namely those current on the authors' PCs. -;; See various Fixmes below. +;; See concerning bzr. See +;; for alternate development +;; branches of `vc-bzr'. +;; Load this library to register bzr support in VC. ;; Known bugs ;; ========== @@ -67,12 +65,6 @@ :group 'vc-bzr :type 'string) -;; Fixme: there's probably no call for this. -(defcustom vc-bzr-program-args nil - "List of global arguments to pass to `vc-bzr-program'." - :group 'vc-bzr - :type '(repeat string)) - (defcustom vc-bzr-diff-switches nil "String/list of strings specifying extra switches for bzr diff under VC." :type '(choice (const :tag "None" nil) @@ -80,21 +72,29 @@ (repeat :tag "Argument List" :value ("") string)) :group 'vc-bzr) +(defcustom vc-bzr-log-switches nil + "String/list of strings specifying extra switches for `bzr log' under VC." + :type '(choice (const :tag "None" nil) + (string :tag "Argument String") + (repeat :tag "Argument List" :value ("") string)) + :group 'vc-bzr) + ;; since v0.9, bzr supports removing the progress indicators ;; by setting environment variable BZR_PROGRESS_BAR to "none". (defun vc-bzr-command (bzr-command buffer okstatus file-or-list &rest args) "Wrapper round `vc-do-command' using `vc-bzr-program' as COMMAND. -Invoke the bzr command adding `BZR_PROGRESS_BAR=none' to the environment." +Invoke the bzr command adding `BZR_PROGRESS_BAR=none' and +`LC_MESSAGES=C' to the environment." (let ((process-environment (list* "BZR_PROGRESS_BAR=none" ; Suppress progress output (bzr >=0.9) - "LC_ALL=C" ; Force English output + "LC_MESSAGES=C" ; Force English output process-environment))) (apply 'vc-do-command buffer okstatus vc-bzr-program - file-or-list bzr-command (append vc-bzr-program-args args)))) + file-or-list bzr-command args))) ;;;###autoload -(defconst vc-bzr-admin-dirname ".bzr" ; FIXME: "_bzr" on w32? +(defconst vc-bzr-admin-dirname ".bzr" "Name of the directory containing Bzr repository status files.") ;;;###autoload (defconst vc-bzr-admin-checkout-format-file @@ -122,6 +122,10 @@ file 'bzr-root (vc-find-root file vc-bzr-admin-checkout-format-file)))) +(defun vc-bzr-revision-granularity () + "Always return 'repository: Bzr has repository-wide revision numbers." + 'repository) + (defun vc-bzr-registered (file) "Return non-nil if FILE is registered with bzr. @@ -167,8 +171,6 @@ (when rootdir (file-relative-name filename* rootdir)))) -;; FIXME: Also get this in a non-registered sub-directory. -;; It already works for me. -- Riccardo (defun vc-bzr-status (file) "Return FILE status according to Bzr. Return value is a cons (STATUS . WARNING), where WARNING is a @@ -197,16 +199,16 @@ ;; bzr prints paths relative to the repository root. (concat "^\\(" vc-bzr-state-words "\\):[ \t\n]+" (regexp-quote (vc-bzr-file-name-relative file)) - (if (file-directory-p file) "/?" "") + ;; Bzr appends a '/' to directory names and + ;; '*' to executable files + (if (file-directory-p file) "/?" "\\*?") "[ \t\n]*$") nil t) (lexical-let ((statusword (match-string 1))) ;; Erase the status text that matched. (delete-region (match-beginning 0) (match-end 0)) (setq status - (and (equal ret 0) ; Seems redundant. --Stef - (intern (replace-regexp-in-string " " "" - statusword)))))) + (intern (replace-regexp-in-string " " "" statusword))))) (when status (goto-char (point-min)) (skip-chars-forward " \n\t") ;Throw away spaces. @@ -226,19 +228,22 @@ (if (cdr result) (message "Warnings in `bzr' output: %s" (cdr result))) (cdr (assq (car result) - '((added . edited) + '((added . added) (kindchanged . edited) (renamed . edited) (modified . edited) - (removed . edited) - (ignored . nil) - (unknown . nil) + (removed . removed) + (ignored . ignored) + (unknown . unregistered) (unchanged . up-to-date))))))) (defun vc-bzr-workfile-unchanged-p (file) (eq 'unchanged (car (vc-bzr-status file)))) (defun vc-bzr-working-revision (file) + ;; XXX: does not return "0" for a file added but not yet committed, + ;; as required by vc.el, but we cannot do that without calling `bzr + ;; status' --Riccardo (lexical-let* ((rootdir (vc-bzr-root file)) (branch-format-file (expand-file-name vc-bzr-admin-branch-format-file @@ -280,6 +285,10 @@ "Create a new Bzr repository." (vc-bzr-command "init" nil 0 nil)) +(defun vc-bzr-init-revision (&optional file) + "Always return nil, as Bzr cannot register explicit versions." + nil) + (defun vc-bzr-register (files &optional rev comment) "Register FILE under bzr. Signal an error unless REV is nil. @@ -308,7 +317,7 @@ (defun vc-bzr-unregister (file) "Unregister FILE from bzr." - (vc-bzr-command "remove" nil 0 file)) + (vc-bzr-command "remove" nil 0 file "--keep")) (defun vc-bzr-checkin (files rev comment) "Check FILE in to bzr with log message COMMENT. @@ -316,6 +325,13 @@ (if rev (error "Can't check in a specific revision with bzr")) (vc-bzr-command "commit" nil 0 files "-m" comment)) +(defun vc-bzr-find-revision (file rev buffer) + "Fetch revision REV of file FILE and put it into BUFFER." + (with-current-buffer buffer + (if (and rev (stringp rev) (not (string= rev ""))) + (vc-bzr-command "cat" t 0 file "-r" rev) + (vc-bzr-command "cat" t 0 file)))) + (defun vc-bzr-checkout (file &optional editable rev destfile) "Checkout revision REV of FILE from bzr to DESTFILE. EDITABLE is ignored." @@ -324,7 +340,7 @@ (let ((coding-system-for-read 'binary) (coding-system-for-write 'binary)) (with-temp-file destfile - (if rev + (if (and rev (stringp rev) (not (string= rev ""))) (vc-bzr-command "cat" t 0 file "-r" rev) (vc-bzr-command "cat" t 0 file))))) @@ -357,9 +373,13 @@ (defun vc-bzr-print-log (files &optional buffer) ; get buffer arg in Emacs 22 "Get bzr change log for FILES into specified BUFFER." - ;; Fixme: This might need the locale fixing up if things like `revno' - ;; got localized, but certainly it shouldn't use LC_ALL=C. - (vc-bzr-command "log" buffer 0 files) + ;; FIXME: `vc-bzr-command' runs `bzr log' with `LC_MESSAGES=C', so + ;; the log display may not what the user wants - but I see no other + ;; way of getting the above regexps working. + (apply 'vc-bzr-command "log" buffer 0 files + (if (stringp vc-bzr-log-switches) + (list vc-bzr-log-switches) + vc-bzr-log-switches)) ;; FIXME: Until Emacs-23, VC was missing a hook to sort out the mode for ;; the buffer, or at least set the regexps right. (unless (fboundp 'vc-default-log-view-mode) @@ -377,24 +397,14 @@ (defun vc-bzr-diff (files &optional rev1 rev2 buffer) "VC bzr backend for diff." - (let ((working (vc-working-revision (if (consp files) (car files) files)))) - (if (and (equal rev1 working) (not rev2)) - (setq rev1 nil)) - (if (and (not rev1) rev2) - (setq rev1 working)) - ;; bzr diff produces condition code 1 for some reason. + ;; `bzr diff' exits with code 1 if diff is non-empty (apply #'vc-bzr-command "diff" (or buffer "*vc-diff*") 1 files - "--diff-options" (mapconcat 'identity (vc-diff-switches-list bzr) + "--diff-options" (mapconcat 'identity + (vc-diff-switches-list bzr) " ") - (when rev1 - (if rev2 - (list "-r" (format "%s..%s" rev1 rev2)) - (list "-r" rev1)))))) - - - -;; FIXME: vc-{next,previous}-revision need fixing in vc.el to deal with -;; straight integer revisions. + (list "-r" (format "%s..%s" + (or rev1 "revno:-1") + (or rev2 ""))))) (defun vc-bzr-delete-file (file) "Delete FILE and delete it in the bzr repository." @@ -437,14 +447,6 @@ (replace-match "") (insert tag " |"))))) -;; Definition from Emacs 22 -(unless (fboundp 'vc-annotate-convert-time) - (defun vc-annotate-convert-time (time) - "Convert a time value to a floating-point number of days. -The argument TIME is a list as returned by `current-time' or -`encode-time', only the first two elements of that list are considered." - (/ (+ (* (float (car time)) (lsh 1 16)) (cadr time)) 24 3600))) - (defun vc-bzr-annotate-time () (when (re-search-forward "^ *[0-9]+ |" nil t) (let ((prop (get-text-property (line-beginning-position) 'help-echo))) @@ -464,12 +466,6 @@ (if (looking-at " *\\([0-9]+\\) | ") (match-string-no-properties 1)))) -;; Not needed for Emacs 22 -(defun vc-bzr-annotate-difference (point) - (let ((next-time (vc-bzr-annotate-time))) - (if next-time - (- (vc-annotate-convert-time (current-time)) next-time)))) - (defun vc-bzr-command-discarding-stderr (command &rest args) "Execute shell command COMMAND (with ARGS); return its output and exitcode. Return value is a cons (EXITCODE . OUTPUT), where EXITCODE is @@ -496,9 +492,9 @@ ;; `bzr ls --versioned' lists all versioned files; ;; assume they are up-to-date, unless we are given ;; evidence of the contrary. - (setq at-start t) (with-temp-buffer (buffer-disable-undo) ;; Because these buffers can get huge + ;; Gather list of all files registered with Bzr (vc-bzr-command "ls" t 0 nil "--versioned") (goto-char (point-min)) (while (or at-start @@ -508,9 +504,13 @@ (buffer-substring-no-properties (line-beginning-position) (line-end-position)) bzr-root-directory))) + ;; files are up-to-date unless they appear in the `bzr + ;; status' output below (vc-file-setprop file 'vc-state 'up-to-date) ;; XXX: is this correct? what happens if one ;; mixes different SCMs in the same dir? + ;; Anyway, we're looking at the output of `bzr ls --versioned', + ;; so we know these files are registered with Bzr. (vc-file-setprop file 'vc-backend 'Bzr)))) ;; `bzr status' reports on added/modified/renamed and unknown/ignored files (setq at-start t) @@ -565,11 +565,10 @@ (defun vc-bzr-dired-state-info (file) "Bzr-specific version of `vc-dired-state-info'." (if (eq 'edited (vc-state file)) - (let ((bzr-state (vc-file-getprop file 'vc-bzr-state))) - (if bzr-state - (concat "(" (symbol-name bzr-state) ")") - ;; else fall back to default vc representation - (vc-default-dired-state-info 'Bzr file))))) + (concat "(" (symbol-name (or (vc-file-getprop file 'vc-bzr-state) + 'edited)) ")") + ;; else fall back to default vc.el representation + (vc-default-dired-state-info 'Bzr file))) (eval-after-load "vc" '(add-to-list 'vc-directory-exclusion-list vc-bzr-admin-dirname t)) --=-=-= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Emacs-devel mailing list Emacs-devel@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-devel --=-=-=--