From: "Ludovic Courtès" <ludo@gnu.org>
To: zimoun <zimon.toutoune@gmail.com>
Cc: 44187@debbugs.gnu.org
Subject: bug#44187: whishlist: time-machine --channel falls back to SWH
Date: Fri, 05 Mar 2021 15:51:08 +0100 [thread overview]
Message-ID: <87pn0dk61v.fsf@gnu.org> (raw)
In-Reply-To: <86pn581t9s.fsf@gmail.com> (zimoun's message of "Sat, 24 Oct 2020 00:17:51 +0200")
[-- Attachment #1: Type: text/plain, Size: 1635 bytes --]
Hi,
zimoun <zimon.toutoune@gmail.com> skribis:
> Let’s describe the use case. Consider that:
>
> guix time-machine -C channels -- install foo
>
> is provided in some documentation, say scientific paper. Where the
> channels.scm file is completly described:
>
> (list (channel
> (name 'kikoo)
> (url "https://example.org/that-great.git")
> (commit
> "353bdae32f72b720c7ddd706576ccc40e2b43f95")))
>
> In the future, if https://example.org/that-great.git disappears, then
> build/install the package ’foo’ is becoming difficult, nor impossible.
>
> However, let’s consider that the repo ’that-great’ had been saved in SWH
> (say manually); since it is a regular Git repo. Guix should be able to
> fallback to it transparently.
I went head-down to add SWH fallback to ‘latest-repository-commit’… but
that’s of no use because (guix channels) wants a complete clone so that
it can determine commit relations (to detect downgrades).
The SWH vault gives access to checkouts primarily, but it’s also
possible to get a full repo in ‘git fast-import’ format, which is what
we need:
https://archive.softwareheritage.org/api/1/vault/revision/gitfast/doc/
However, this API will be eventually replaced by some other solution say
SWH developers, possibly a bare Git repo export, so it may not be a good
idea to build upon it.
If we were able, using the SWH API, to map “revisions” to “origins”, we
could find potential mirrors hosting a given commit, but apparently
that’s not possible.
To be continued…
Ludo’.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Type: text/x-patch, Size: 2914 bytes --]
diff --git a/guix/git.scm b/guix/git.scm
index a5103547d3..449011c51a 100644
--- a/guix/git.scm
+++ b/guix/git.scm
@@ -32,6 +32,7 @@
#:use-module (guix records)
#:use-module (guix gexp)
#:use-module (guix sets)
+ #:autoload (guix swh) (swh-download)
#:use-module ((guix diagnostics) #:select (leave))
#:use-module (guix progress)
#:use-module (rnrs bytevectors)
@@ -459,22 +460,43 @@ Log progress and checkout info to LOG-PORT."
(eq? 'regular (stat:type stat))))))
(format log-port "updating checkout of '~a'...~%" url)
- (let*-values
- (((checkout commit _)
- (update-cached-checkout url
- #:recursive? recursive?
- #:ref ref
- #:cache-directory
- (url-cache-directory url cache-directory
- #:recursive?
- recursive?)
- #:log-port log-port))
- ((name)
- (url+commit->name url commit)))
- (format log-port "retrieved commit ~a~%" commit)
- (values (add-to-store store name #t "sha256" checkout
- #:select? (negate dot-git?))
- commit)))
+
+ (catch 'git-error
+ (lambda ()
+ (let*-values
+ (((checkout commit _)
+ (update-cached-checkout (pk 'l-r-c url)
+ #:recursive? recursive?
+ #:ref ref
+ #:cache-directory
+ (url-cache-directory url cache-directory
+ #:recursive?
+ recursive?)
+ #:log-port log-port))
+ ((name)
+ (url+commit->name url commit)))
+ (format log-port "retrieved commit ~a~%" commit)
+ (values (add-to-store store name #t "sha256" checkout
+ #:select? (negate dot-git?))
+ commit)))
+ (lambda (key err . rest)
+ ;; XXX: 'swh-download' currently doesn't support submodules.
+ (when recursive?
+ (apply throw key err rest))
+
+ (pk 'err key err rest)
+ (match ref
+ (('commit . commit)
+ ;; Attempt to fetch COMMIT from SWH.
+ (call-with-temporary-directory
+ (lambda (directory)
+ (unless (swh-download url commit directory)
+ (apply throw key err rest))
+ (values (add-to-store store (url+commit->name url commit)
+ #t "sha256" directory)
+ commit))))
+ (_
+ (apply throw key err rest))))))
(define (print-git-error port key args default-printer)
(match args
next prev parent reply other threads:[~2021-03-05 14:52 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-10-23 22:17 bug#44187: whishlist: time-machine --channel falls back to SWH zimoun
2021-03-05 14:51 ` Ludovic Courtès [this message]
2021-09-10 14:34 ` bug#44187: [PATCH 0/3] Fall back to Software Heritage (SWH) for Git clones Ludovic Courtès
2021-09-10 14:34 ` bug#44187: [PATCH 1/3] swh: Support downloads of bare Git repositories Ludovic Courtès
2021-09-17 17:31 ` bug#44187: Channel clones lack SWH fallback zimoun
2021-09-18 10:05 ` Ludovic Courtès
2021-09-18 10:27 ` zimoun
2021-09-10 14:34 ` bug#44187: [PATCH 2/3] git: 'update-cached-checkout' can fall back to SWH when cloning Ludovic Courtès
2021-09-10 14:34 ` bug#44187: [PATCH 3/3] git: 'reference-available?' recognizes 'tag-or-commit' Ludovic Courtès
2021-09-13 16:07 ` bug#44187: [PATCH 0/3] Fall back to Software Heritage (SWH) for Git clones zimoun
2021-09-14 13:37 ` Ludovic Courtès
2021-09-17 8:02 ` bug#44187: Channel clones lack SWH fallback zimoun
2021-09-18 21:10 ` Ludovic Courtès
2021-09-20 9:27 ` zimoun
2021-09-22 10:03 ` Ludovic Courtès
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87pn0dk61v.fsf@gnu.org \
--to=ludo@gnu.org \
--cc=44187@debbugs.gnu.org \
--cc=zimon.toutoune@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/guix.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.