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> 2015-01-17 Stefan Monnier <monnier@iro.umontreal.ca>
* emacs-lisp/eieio-generic.el (call-next-method): Don't bother checking * 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)." ...@@ -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) (add-hook 'after-save-hook 'vc-bzr-resolve-when-done nil t)
(message "There are unresolved conflicts in this file"))) (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) (defun vc-bzr-working-revision (file)
(let* ((rootdir (vc-bzr-root file)) (let* ((rootdir (vc-bzr-root file))
(branch-format-file (expand-file-name vc-bzr-admin-branch-format-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)." ...@@ -538,8 +554,8 @@ in the branch repository (or whose status not be determined)."
;; files exist. ;; files exist.
(and (file-exists-p branch-format-file) (and (file-exists-p branch-format-file)
(file-exists-p lastrev-file) (file-exists-p lastrev-file)
(equal (emacs-bzr-version-dirstate l-c-parent-dir) (equal (vc-bzr-version-dirstate l-c-parent-dir)
(emacs-bzr-version-dirstate rootdir)))))) (vc-bzr-version-dirstate rootdir))))))
t))) t)))
(with-temp-buffer (with-temp-buffer
(insert-file-contents branch-format-file) (insert-file-contents branch-format-file)
......
...@@ -93,41 +93,6 @@ or if we could not determine the revision.") ...@@ -93,41 +93,6 @@ or if we could not determine the revision.")
(define-obsolete-variable-alias 'emacs-bzr-version (define-obsolete-variable-alias 'emacs-bzr-version
'emacs-repository-version "24.4") '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 (define-obsolete-function-alias 'emacs-bzr-get-version
'emacs-repository-get-version "24.4") 'emacs-repository-get-version "24.4")
...@@ -145,43 +110,7 @@ maybe ask the VCS itself, if the sources appear to be under ...@@ -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 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))
(cond ((file-directory-p (expand-file-name ".bzr/branch" dir)) (cond ((file-directory-p (expand-file-name ".git" 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))
(message "Waiting for git...") (message "Waiting for git...")
(with-temp-buffer (with-temp-buffer
(let ((default-directory (file-name-as-directory dir))) (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