Commit 0abf4134 authored by Eric S. Raymond's avatar Eric S. Raymond
Browse files

Make the function emacs-repository-get-version polyvalent.

* version.el (emacs-repository-get-version): Enhance so the
function works correctly in either a Bazaar or Git repo. The
Bazaar case can be discarded  after the repo transition.
parent 3da493d5
2014-01-11 Eric S. Raymond <esr@thyrsus.com> 2014-01-11 Eric S. Raymond <esr@thyrsus.com>
* version.el (emacs-repository-get-version): Enhancee so the
function works correctly in either a Bazaar or Git repo. The
Bazaar case can be discarded after the repo transition.
* play/meese.el: It's 2014 and Ed Meese is justly forgotten. Goes * play/meese.el: It's 2014 and Ed Meese is justly forgotten. Goes
with removal of the joke manpages from /etc. with removal of the joke manpages from /etc.
......
...@@ -145,40 +145,52 @@ maybe ask the VCS itself, if the sources appear to be under ...@@ -145,40 +145,52 @@ maybe ask the VCS itself, if the sources appear to be under
version control. If `force', always ask. the VCS. Otherwise version control. If `force', always ask. the VCS. Otherwise
only ask the VCS if we cannot find any information ourselves." only ask the VCS if we cannot find any information ourselves."
(or dir (setq dir source-directory)) (or dir (setq dir source-directory))
(when (file-directory-p (expand-file-name ".bzr/branch" dir)) (or
(if (eq external 'force) ;; Bazaar case -- to be removed after transition
(emacs-bzr-version-bzr dir) (when (file-directory-p (expand-file-name ".bzr/branch" dir))
(let (file loc rev) (if (eq external 'force)
(cond ((file-readable-p (emacs-bzr-version-bzr dir)
(setq file (expand-file-name ".bzr/branch/last-revision" dir))) (let (file loc rev)
(with-temp-buffer (cond ((file-readable-p
(insert-file-contents file) (setq file (expand-file-name ".bzr/branch/last-revision" dir)))
(goto-char (point-max)) (with-temp-buffer
(if (looking-back "\n") (insert-file-contents file)
(delete-char -1)) (goto-char (point-max))
(buffer-string))) (if (looking-back "\n")
;; OK, no last-revision. Is it a lightweight checkout? (delete-char -1))
((file-readable-p (buffer-string)))
(setq file (expand-file-name ".bzr/branch/location" dir))) ;; OK, no last-revision. Is it a lightweight checkout?
(setq rev (emacs-bzr-version-dirstate dir)) ((file-readable-p
;; If the parent branch is local, try looking there for the rev. (setq file (expand-file-name ".bzr/branch/location" dir)))
;; Note: there is no guarantee that the parent branch's rev (setq rev (emacs-bzr-version-dirstate dir))
;; corresponds to this branch. This branch could have ;; If the parent branch is local, try looking there for the rev.
;; been made with a specific -r revno argument, or the ;; Note: there is no guarantee that the parent branch's rev
;; parent could have been updated since this branch was created. ;; corresponds to this branch. This branch could have
;; To try and detect this, we check the dirstate revids ;; been made with a specific -r revno argument, or the
;; to see if they match. ;; parent could have been updated since this branch was created.
(if (and (setq loc (with-temp-buffer ;; To try and detect this, we check the dirstate revids
(insert-file-contents file) ;; to see if they match.
(if (looking-at "file://\\(.*\\)") (if (and (setq loc (with-temp-buffer
(match-string 1)))) (insert-file-contents file)
(equal rev (emacs-bzr-version-dirstate loc))) (if (looking-at "file://\\(.*\\)")
(emacs-bzr-get-version loc) (match-string 1))))
;; If parent does not match, the best we can do without (equal rev (emacs-bzr-version-dirstate loc)))
;; calling external commands is to use the dirstate rev. (emacs-bzr-get-version loc)
rev)) ;; If parent does not match, the best we can do without
(external ;; calling external commands is to use the dirstate rev.
(emacs-bzr-version-bzr dir))))))) rev))
(external
(emacs-bzr-version-bzr dir))))))
;; Git case
(when (file-directory-p (expand-file-name ".git" dir))
(message "Waiting for git...")
(with-temp-buffer
(if (zerop
(call-process "git" nil '(t nil) nil "log"
"-1"
"--pretty=format:%N"))
(replace-regexp-in-string "\n" "" (buffer-string)))))
))
;; We put version info into the executable in the form that `ident' uses. ;; We put version info into the executable in the form that `ident' uses.
(purecopy (concat "\n$Id: " (subst-char-in-string ?\n ?\s (emacs-version)) (purecopy (concat "\n$Id: " (subst-char-in-string ?\n ?\s (emacs-version))
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment