From: Paul Eggert Date: Wed, 1 Jun 2016 17:28:43 +0000 (-0700) Subject: Fix emacs-repository-get-version with packed .git X-Git-Tag: emacs-26.0.90~1846 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=a76420cce2d1c2e1d5de0cdf50443006064c58af;p=emacs.git Fix emacs-repository-get-version with packed .git * lisp/version.el (emacs-repository-get-version): Parse .git/packed-refs if it exists. Problem reported by Martin Rudalics in: http://lists.gnu.org/archive/html/emacs-devel/2016-05/msg00554.html --- diff --git a/lisp/version.el b/lisp/version.el index dc228870d1e..2f71aeb228f 100644 --- a/lisp/version.el +++ b/lisp/version.el @@ -163,14 +163,23 @@ the VCS if we cannot find any information ourselves." (or (if in-linked-worktree (emacs-repository--version-git-1 (expand-file-name "HEAD" sub-dir) base-dir) - (let ((files '("HEAD" "refs/heads/master")) - file rev) - (while (and (not rev) - (setq file (car files))) - (setq file (expand-file-name file base-dir) - files (cdr files) - rev (emacs-repository--version-git-1 file base-dir))) - rev)) + (or + (let ((packed-refs (expand-file-name "packed-refs" base-dir))) + (if (file-readable-p packed-refs) + (with-temp-buffer + (insert-file-contents packed-refs) + (when (re-search-forward + "^\\([0-9a-fA-F]\\{40\\}\\) refs/heads/master$" + nil t) + (match-string 1))))) + (let ((files '("HEAD" "refs/heads/master")) + file rev) + (while (and (not rev) + (setq file (car files))) + (setq file (expand-file-name file base-dir) + files (cdr files) + rev (emacs-repository--version-git-1 file base-dir))) + rev))) ;; AFAICS this doesn't work during dumping (bug#20799). (emacs-repository-version-git dir))))))