From 263f20cd0a60e791e14ead267b5aefe7ad3e2dea Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 9 Apr 2012 19:03:33 -0400 Subject: [PATCH] emacs-bzr-get-version tweak * lisp/version.el (emacs-bzr-get-version): Handle lightweight checkouts of local branches. --- lisp/ChangeLog | 8 ++++++-- lisp/version.el | 36 ++++++++++++++++++++++++++---------- 2 files changed, 32 insertions(+), 12 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 954daf68510..a3f992eb9dc 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,7 +1,11 @@ +2012-04-09 Glenn Morris + + * version.el (emacs-bzr-get-version): + Handle lightweight checkouts of local branches. + 2012-04-09 Andreas Schwab - * international/characters.el: Recover lost case pairs. - (Bug#11209) + * international/characters.el: Recover lost case pairs. (Bug#11209) 2012-04-09 Chong Yidong diff --git a/lisp/version.el b/lisp/version.el index a4bc4fd54a6..56e19147b2c 100644 --- a/lisp/version.el +++ b/lisp/version.el @@ -85,19 +85,35 @@ String giving the bzr revision number from which this Emacs was built. This is nil if Emacs was not built from a bzr checkout, or if we could not determine the revision.") -(defun emacs-bzr-get-version () "\ +(defun emacs-bzr-get-version (&optional dir) "\ Try to return as a string the bzr revision number of the Emacs sources. Returns nil if the sources do not seem to be under bzr, or if we could not determine the revision. Note that this reports on the current state -of the sources, which may not correspond to the running Emacs." - (let ((file (expand-file-name ".bzr/branch/last-revision" source-directory))) - (if (file-readable-p file) - (with-temp-buffer - (insert-file-contents file) - (goto-char (point-max)) - (if (looking-back "\n") - (delete-char -1)) - (buffer-string))))) +of the sources, which may not correspond to the running Emacs. + +Optional argument DIR is a directory to use instead of `source-directory'." + (or dir (setq dir source-directory)) + (when (file-directory-p (setq dir (expand-file-name ".bzr/branch" dir))) + (let (file loc) + (cond ((file-readable-p + (setq file (expand-file-name "last-revision" dir))) + (with-temp-buffer + (insert-file-contents file) + (goto-char (point-max)) + (if (looking-back "\n") + (delete-char -1)) + (buffer-string))) + ;; OK, no last-revision. Is it a lightweight checkout? + ((file-readable-p + (setq file (expand-file-name "location" dir))) + ;; If the parent branch is local, try looking there for the revid. + (if (setq loc (with-temp-buffer + (insert-file-contents file) + (if (looking-at "file://\\(.*\\)") + (match-string 1)))) + (emacs-bzr-get-version loc))) + ;; Could fall back to eg `bzr testament' at this point. + )))) ;; We put version info into the executable in the form that `ident' uses. (or (eq system-type 'windows-nt) -- 2.39.2