summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--guix/git.scm28
1 files changed, 18 insertions, 10 deletions
diff --git a/guix/git.scm b/guix/git.scm
index ab3b5075b1..1c45afa050 100644
--- a/guix/git.scm
+++ b/guix/git.scm
@@ -243,18 +243,23 @@ Return true on success, false on failure."
               (G_ "Support for submodules is missing; \
 please upgrade Guile-Git.~%"))))
 
+(define-syntax-rule (false-if-git-not-found exp)
+  "Evaluate EXP, returning #false if a GIT_ENOTFOUND error is raised."
+  (catch 'git-error
+    (lambda ()
+      exp)
+    (lambda (key error . rest)
+      (if (= GIT_ENOTFOUND (git-error-code error))
+          #f
+          (apply throw key error rest)))))
+
 (define (reference-available? repository ref)
   "Return true if REF, a reference such as '(commit . \"cabba9e\"), is
 definitely available in REPOSITORY, false otherwise."
   (match ref
     (('commit . commit)
-     (catch 'git-error
-       (lambda ()
-         (->bool (commit-lookup repository (string->oid commit))))
-       (lambda (key error . rest)
-         (if (= GIT_ENOTFOUND (git-error-code error))
-             #f
-             (apply throw key error rest)))))
+     (false-if-git-not-found
+      (->bool (commit-lookup repository (string->oid commit)))))
     (_
      #f)))
 
@@ -311,10 +316,13 @@ When RECURSIVE? is true, check out submodules as well, if any."
             (new      (and starting-commit
                            (commit-lookup repository oid)))
             (old      (and starting-commit
-                           (commit-lookup repository
-                                          (string->oid starting-commit))))
+                           (false-if-git-not-found
+                            (commit-lookup repository
+                                           (string->oid starting-commit)))))
             (relation (and starting-commit
-                           (commit-relation old new))))
+                           (if old
+                               (commit-relation old new)
+                               'unrelated))))
 
        ;; Reclaim file descriptors and memory mappings associated with
        ;; REPOSITORY as soon as possible.