summaryrefslogtreecommitdiff
path: root/guix/git.scm
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2020-07-06 10:10:01 +0200
committerLudovic Courtès <ludo@gnu.org>2020-07-11 11:51:56 +0200
commit69db2993b58579e7b0990f5c35f9a289844f22e5 (patch)
tree0077b6ec7b821ae87620def2e55295a2b46a228c /guix/git.scm
parent4b9b8b2ec23e59af2275a6d2829e6e0f915b44b3 (diff)
git: Add 'with-git-error-handling'.
* guix/scripts/pull.scm (report-git-error, with-git-error-handling): Move to... * guix/git.scm: ... here. * guix/scripts/time-machine.scm: Adjust accordingly.
Diffstat (limited to 'guix/git.scm')
-rw-r--r--guix/git.scm19
1 files changed, 19 insertions, 0 deletions
diff --git a/guix/git.scm b/guix/git.scm
index 0d8e617cc9..19c1cb59d3 100644
--- a/guix/git.scm
+++ b/guix/git.scm
@@ -29,6 +29,7 @@
#:use-module (guix records)
#:use-module (guix gexp)
#:use-module (guix sets)
+ #:use-module ((guix diagnostics) #:select (leave))
#:use-module (rnrs bytevectors)
#:use-module (ice-9 match)
#:use-module (srfi srfi-1)
@@ -39,6 +40,7 @@
honor-system-x509-certificates!
with-repository
+ with-git-error-handling
false-if-git-not-found
update-cached-checkout
url+commit->name
@@ -209,6 +211,23 @@ dynamic extent of EXP."
(call-with-repository directory
(lambda (repository) exp ...)))
+(define (report-git-error error)
+ "Report the given Guile-Git error."
+ ;; Prior to Guile-Git commit b6b2760c2fd6dfaa5c0fedb43eeaff06166b3134,
+ ;; errors would be represented by integers.
+ (match error
+ ((? integer? error) ;old Guile-Git
+ (leave (G_ "Git error ~a~%") error))
+ ((? git-error? error) ;new Guile-Git
+ (leave (G_ "Git error: ~a~%") (git-error-message error)))))
+
+(define-syntax-rule (with-git-error-handling body ...)
+ (catch 'git-error
+ (lambda ()
+ body ...)
+ (lambda (key err)
+ (report-git-error err))))
+
(define (load-git-submodules)
"Attempt to load (git submodules), which was missing until Guile-Git 0.2.0.
Return true on success, false on failure."