guix-commits
[Top][All Lists]
Advanced

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

01/05: git: Avoid touching the network unless needed in 'reference-avail


From: guix-commits
Subject: 01/05: git: Avoid touching the network unless needed in 'reference-available?'.
Date: Fri, 22 Sep 2023 09:51:19 -0400 (EDT)

zimoun pushed a commit to branch master
in repository guix.

commit 6d33c1f8061e86d63ab5c9ec75df9c58130c7264
Author: Simon Tournier <zimon.toutoune@gmail.com>
AuthorDate: Wed Sep 6 15:01:00 2023 +0200

    git: Avoid touching the network unless needed in 'reference-available?'.
    
    Follow-up of 756e336fa008c2469b4a7317ad5c641ed48f25d6 fixing the issue.
    
    * guix/git/scm (reference-available?): Address case by case to determine
    whether the reference exists in the local Git checkout.
---
 guix/git.scm | 22 +++++++++-------------
 1 file changed, 9 insertions(+), 13 deletions(-)

diff --git a/guix/git.scm b/guix/git.scm
index 1cb87a4560..1b3355109e 100644
--- a/guix/git.scm
+++ b/guix/git.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2022 Maxime Devos <maximedevos@telenet.be>
 ;;; Copyright © 2023 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2023 Simon Tournier <zimon.toutoune@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -360,21 +361,16 @@ 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."
-  ;; Note: this must not rely on 'resolve-reference', as that procedure always
-  ;; resolves the references for branch names such as master.  The semantic we
-  ;; want here is that unless the reference is exact (e.g. a commit), the
-  ;; reference should not be considered available, as it could have changed on
-  ;; the remote.
   (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))))))
+    (('commit . (? commit-id? commit))
+     (let ((oid (string->oid commit)))
+       (->bool (commit-lookup repository oid))))
+    ((or ('tag . str)
+         ('tag-or-commit . str))
+     (false-if-git-not-found
+      (->bool (resolve-reference repository ref))))
     (_
+     ;; For the others REF as branch or symref, the REF cannot be available
      #f)))
 
 (define (clone-from-swh url tag-or-commit output)



reply via email to

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