guix: git: Avoid touching the network unless needed in 'reference-available?'.

* guix/git/scm (reference-available?): Use the resolve-reference procedure
to determine whether the reference exists in the local Git checkout.

Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
This commit is contained in:
Simon Tournier 2023-08-17 16:09:16 +02:00 committed by Maxim Cournoyer
parent 790e5bf0c5
commit a789dd5865
No known key found for this signature in database
GPG Key ID: 1260E46482E63562
1 changed files with 2 additions and 11 deletions

View File

@ -360,17 +360,8 @@ dynamic extent of EXP."
(define (reference-available? repository ref)
"Return true if REF, a reference such as '(commit . \"cabba9e\"), is
definitely available in REPOSITORY, false otherwise."
(match ref
((or ('commit . commit)
('tag-or-commit . (? commit-id? commit)))
(let ((len (string-length commit))
(oid (string->oid commit)))
(false-if-git-not-found
(->bool (if (< len 40)
(object-lookup-prefix repository oid len OBJ-COMMIT)
(commit-lookup repository oid))))))
(_
#f)))
(false-if-git-not-found
(->bool (resolve-reference repository ref))))
(define (clone-from-swh url tag-or-commit output)
"Attempt to clone TAG-OR-COMMIT (a string), which originates from URL, using