emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master a76420c: Fix emacs-repository-get-version with pack


From: Paul Eggert
Subject: [Emacs-diffs] master a76420c: Fix emacs-repository-get-version with packed .git
Date: Wed, 1 Jun 2016 18:03:44 +0000 (UTC)

branch: master
commit a76420cce2d1c2e1d5de0cdf50443006064c58af
Author: Paul Eggert <address@hidden>
Commit: Paul Eggert <address@hidden>

    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
---
 lisp/version.el |   25 +++++++++++++++++--------
 1 file changed, 17 insertions(+), 8 deletions(-)

diff --git a/lisp/version.el b/lisp/version.el
index dc22887..2f71aeb 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))))))
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]