Commit 6a6bb820 authored by Ulrich Müller's avatar Ulrich Müller

Discard the Bazaar case in repository version detection

* version.el (emacs-bzr-version-dirstate, emacs-bzr-version-bzr):
Remove.
(emacs-repository-get-version): Discard the Bazaar case.

* vc/vc-bzr.el (vc-bzr-version-dirstate): Rename from
emacs-bzr-version-dirstate and move from version.el to here.
(vc-bzr-working-revision): Use it.
parent d48c98cd
2015-01-17 Ulrich Müller <ulm@gentoo.org>
* version.el (emacs-bzr-version-dirstate, emacs-bzr-version-bzr):
Remove.
(emacs-repository-get-version): Discard the Bazaar case.
* vc/vc-bzr.el (vc-bzr-version-dirstate): Rename from
emacs-bzr-version-dirstate and move from version.el to here.
(vc-bzr-working-revision): Use it.
2015-01-17 Stefan Monnier <monnier@iro.umontreal.ca>
* emacs-lisp/eieio-generic.el (call-next-method): Don't bother checking
......
......@@ -493,6 +493,22 @@ in the branch repository (or whose status not be determined)."
(add-hook 'after-save-hook 'vc-bzr-resolve-when-done nil t)
(message "There are unresolved conflicts in this file")))
(defun vc-bzr-workfile-unchanged-p (file)
(eq 'unchanged (car (vc-bzr-status file))))
(defun vc-bzr-version-dirstate (dir)
"Try to return as a string the bzr revision ID of directory DIR.
This uses the dirstate file's parent revision entry.
Returns nil if unable to find this information."
(let ((file (expand-file-name ".bzr/checkout/dirstate" dir)))
(when (file-readable-p file)
(with-temp-buffer
(insert-file-contents file)
(and (looking-at "#bazaar dirstate flat format 3")
(forward-line 3)
(looking-at "[0-9]+\0\\([^\0\n]+\\)\0")
(match-string 1))))))
(defun vc-bzr-working-revision (file)
(let* ((rootdir (vc-bzr-root file))
(branch-format-file (expand-file-name vc-bzr-admin-branch-format-file
......@@ -538,8 +554,8 @@ in the branch repository (or whose status not be determined)."
;; files exist.
(and (file-exists-p branch-format-file)
(file-exists-p lastrev-file)
(equal (emacs-bzr-version-dirstate l-c-parent-dir)
(emacs-bzr-version-dirstate rootdir))))))
(equal (vc-bzr-version-dirstate l-c-parent-dir)
(vc-bzr-version-dirstate rootdir))))))
t)))
(with-temp-buffer
(insert-file-contents branch-format-file)
......
......@@ -93,41 +93,6 @@ or if we could not determine the revision.")
(define-obsolete-variable-alias 'emacs-bzr-version
'emacs-repository-version "24.4")
(defun emacs-bzr-version-dirstate (dir)
"Try to return as a string the bzr revision ID of directory DIR.
This uses the dirstate file's parent revision entry.
Returns nil if unable to find this information."
(let ((file (expand-file-name ".bzr/checkout/dirstate" dir)))
(when (file-readable-p file)
(with-temp-buffer
(insert-file-contents file)
(and (looking-at "#bazaar dirstate flat format 3")
(forward-line 3)
(looking-at "[0-9]+\0\\([^\0\n]+\\)\0")
(match-string 1))))))
(defun emacs-bzr-version-bzr (dir)
"Ask bzr itself for the version information for directory DIR."
;; Comments on `bzr version-info':
;; i) Unknown files also cause clean != 1.
;; ii) It can be slow, contacting the upstream repo to get the
;; branch nick if one is not set locally, even with a custom
;; template that is not asking for the nick (as used here). You'd
;; think the latter part would be trivial to fix:
;; https://bugs.launchpad.net/bzr/+bug/882541/comments/3
;; https://bugs.launchpad.net/bzr/+bug/629150
;; You can set the nick locally with `bzr nick ...', which speeds
;; things up enormously. `bzr revno' does not have this issue, but
;; has no way to print the revision_id AFAICS.
(message "Waiting for bzr...")
(with-temp-buffer
(if (zerop
(call-process "bzr" nil '(t nil) nil "version-info"
"--custom"
"--template={revno} {revision_id} (clean = {clean})"
dir))
(buffer-string))))
(define-obsolete-function-alias 'emacs-bzr-get-version
'emacs-repository-get-version "24.4")
......@@ -145,43 +110,7 @@ maybe ask the VCS itself, if the sources appear to be under
version control. If `force', always ask. the VCS. Otherwise
only ask the VCS if we cannot find any information ourselves."
(or dir (setq dir source-directory))
(cond ((file-directory-p (expand-file-name ".bzr/branch" dir))
(if (eq external 'force)
(emacs-bzr-version-bzr dir)
(let (file loc rev)
(cond ((file-readable-p
(setq file (expand-file-name
".bzr/branch/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 ".bzr/branch/location" dir)))
(setq rev (emacs-bzr-version-dirstate dir))
;; If parent branch is local, try looking there for the rev.
;; Note: there is no guarantee that the parent branch's rev
;; corresponds to this branch. This branch could have
;; been made with a specific -r revno argument, or the
;; parent could have been updated since this branch was
;; created.
;; To try and detect this, we check the dirstate revids
;; to see if they match.
(if (and (setq loc (with-temp-buffer
(insert-file-contents file)
(if (looking-at "file://\\(.*\\)")
(match-string 1))))
(equal rev (emacs-bzr-version-dirstate loc)))
(emacs-repository-get-version loc)
;; If parent does not match, the best we can do without
;; calling external commands is to use the dirstate rev.
rev))
(external
(emacs-bzr-version-bzr dir))))))
((file-directory-p (expand-file-name ".git" dir))
(cond ((file-directory-p (expand-file-name ".git" dir))
(message "Waiting for git...")
(with-temp-buffer
(let ((default-directory (file-name-as-directory dir)))
......
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