diff options
author | Marius Bakke <marius@gnu.org> | 2021-09-17 01:25:52 +0200 |
---|---|---|
committer | Marius Bakke <marius@gnu.org> | 2021-09-17 01:25:52 +0200 |
commit | 5c3cb22c9b2810669999e044b2de5e9331011a83 (patch) | |
tree | 3276e19cc1a0af3cece6ce4f2bfa930901888bb4 /guix/git.scm | |
parent | c896287ce5eff968a0b323f3a069653a64b96b4c (diff) | |
parent | 2a054d29dcfd4b68ed3914886b637f93ac7a0a72 (diff) | |
download | guix-patches-5c3cb22c9b2810669999e044b2de5e9331011a83.tar guix-patches-5c3cb22c9b2810669999e044b2de5e9331011a83.tar.gz |
Merge branch 'master' into core-updates-frozen
Conflicts:
gnu/packages/bioinformatics.scm
gnu/packages/chez.scm
gnu/packages/docbook.scm
gnu/packages/ebook.scm
gnu/packages/gnome.scm
gnu/packages/linux.scm
gnu/packages/networking.scm
gnu/packages/python-web.scm
gnu/packages/python-xyz.scm
gnu/packages/tex.scm
gnu/packages/version-control.scm
gnu/packages/xml.scm
guix/build-system/dune.scm
guix/build-system/go.scm
guix/build-system/linux-module.scm
guix/packages.scm
Diffstat (limited to 'guix/git.scm')
-rw-r--r-- | guix/git.scm | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/guix/git.scm b/guix/git.scm index 9c6f326c36..acc48fd12f 100644 --- a/guix/git.scm +++ b/guix/git.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2017, 2020 Mathieu Othacehe <m.othacehe@gmail.com> ;;; Copyright © 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2021 Kyle Meyer <kyle@kyleam.com> +;;; Copyright © 2021 Marius Bakke <marius@gnu.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -223,15 +224,29 @@ corresponding Git object." (object-lookup-prefix repository (string->oid commit) len) (object-lookup repository (string->oid commit))))) (('tag-or-commit . str) - (if (or (> (string-length str) 40) - (not (string-every char-set:hex-digit str))) - (resolve `(tag . ,str)) ;definitely a tag - (catch 'git-error - (lambda () - (resolve `(tag . ,str))) - (lambda _ - ;; There's no such tag, so it must be a commit ID. - (resolve `(commit . ,str)))))) + (cond ((and (string-contains str "-g") + (match (string-split str #\-) + ((version ... revision g+commit) + (if (and (> (string-length g+commit) 4) + (string-every char-set:digit revision) + (string-every char-set:hex-digit + (string-drop g+commit 1))) + ;; Looks like a 'git describe' style ID, like + ;; v1.3.0-7-gaa34d4d28d. + (string-drop g+commit 1) + #f)) + (_ #f))) + => (lambda (commit) (resolve `(commit . ,commit)))) + ((or (> (string-length str) 40) + (not (string-every char-set:hex-digit str))) + (resolve `(tag . ,str))) ;definitely a tag + (else + (catch 'git-error + (lambda () + (resolve `(tag . ,str))) + (lambda _ + ;; There's no such tag, so it must be a commit ID. + (resolve `(commit . ,str))))))) (('tag . tag) (let ((oid (reference-name->oid repository (string-append "refs/tags/" tag)))) |