From: Mathieu Othacehe <m.othacehe@gmail.com>
To: "Ludovic Courtès" <ludo@gnu.org>
Cc: 27550@debbugs.gnu.org
Subject: [bug#27550] [PATCH 0/2] cuirass: Prepare (guix git) integration.
Date: Mon, 03 Jul 2017 15:52:31 +0200 [thread overview]
Message-ID: <867ezpocf4.fsf@gmail.com> (raw)
In-Reply-To: <868tk5ogwe.fsf@gmail.com>
[-- Attachment #1: Type: text/plain, Size: 97 bytes --]
> Anyway the (guix git) binding is almost ready, I'll send a patch soon.
Here it is !
Mathieu
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-base-Use-guix-git-module.patch --]
[-- Type: text/x-diff, Size: 6349 bytes --]
From 37d7b68c1e89a2873673613f4781efb6acda529b Mon Sep 17 00:00:00 2001
From: Mathieu Othacehe <m.othacehe@gmail.com>
Date: Sat, 1 Jul 2017 12:29:59 +0200
Subject: [PATCH] base: Use (guix git) module.
* src/cuirass/base.scm (copy-repository-cache) : New procedure.
(fetch-repository): Use latest-repository-commit to fetch git
repository instead of raw git system commands.
(process-specs): Use fetch-repository to get a store directory
containing the repository described in SPEC, add copy it to cache with
"copy-repository-cache".
---
src/cuirass/base.scm | 99 ++++++++++++++++++++++++++++++----------------------
1 file changed, 57 insertions(+), 42 deletions(-)
diff --git a/src/cuirass/base.scm b/src/cuirass/base.scm
index 58f2be3..24b4769 100644
--- a/src/cuirass/base.scm
+++ b/src/cuirass/base.scm
@@ -24,10 +24,12 @@
#:use-module (guix build utils)
#:use-module (guix derivations)
#:use-module (guix store)
+ #:use-module (guix git)
#:use-module (ice-9 format)
#:use-module (ice-9 match)
#:use-module (ice-9 popen)
#:use-module (ice-9 rdelim)
+ #:use-module (ice-9 receive)
#:use-module (srfi srfi-19)
#:use-module (srfi srfi-34)
#:export (;; Procedures.
@@ -77,33 +79,42 @@ values."
duration)
(acons #:duration duration result)))))
-(define (fetch-repository spec)
- "Get the latest version of repository specified in SPEC. Clone repository
-if required. Return the last commit ID on success, #f otherwise."
- (define (current-commit)
- (let* ((pipe (open-input-pipe "git log -n1"))
- (log (read-string pipe))
- (commit (cadr (string-split log char-set:whitespace))))
- (close-pipe pipe)
- commit))
-
+(define (fetch-repository store spec)
+ "Get the latest version of repository specified in SPEC. Return two
+values: the content of the git repository at URL copied into a store
+directory and the sha1 of the top level commit in this directory."
+
+ (define (add-origin branch)
+ "Prefix branch name with origin if no remote is specified."
+ (if (string-index branch #\/)
+ branch
+ (string-append "origin/" branch)))
+
+ (let ((name (assq-ref spec #:name))
+ (url (assq-ref spec #:url))
+ (branch (and=> (assq-ref spec #:branch)
+ (lambda (b)
+ `(branch . ,(add-origin b)))))
+ (commit (and=> (assq-ref spec #:commit)
+ (lambda (c)
+ `(commit . ,c))))
+ (tag (and=> (assq-ref spec #:tag)
+ (lambda (t)
+ `(tag . ,t)))))
+ (latest-repository-commit store url
+ #:cache-directory (%package-cachedir)
+ #:ref (pk (or branch commit tag)))))
+
+(define (copy-repository-cache repo spec)
+ "Copy REPO directory in cache. The directory is named after NAME
+ field in SPEC."
(let ((cachedir (%package-cachedir)))
(mkdir-p cachedir)
(with-directory-excursion cachedir
- (let ((name (assq-ref spec #:name))
- (url (assq-ref spec #:url))
- (branch (assq-ref spec #:branch))
- (commit (assq-ref spec #:commit))
- (tag (assq-ref spec #:tag)))
- (and (or (file-exists? name)
- (zero? (system* "git" "clone" url name)))
- (with-directory-excursion name
- (and (zero? (system* "git" "fetch"))
- (zero? (system* "git" "reset" "--hard"
- (or tag
- commit
- (string-append "origin/" branch))))
- (current-commit))))))))
+ (let ((name (assq-ref spec #:name)))
+ ;; Flush any directory with the same name.
+ (false-if-exception (delete-file-recursively name))
+ (copy-recursively repo name)))))
(define (compile dir)
;; Required for fetching Guix bootstrap tarballs.
@@ -127,6 +138,7 @@ if required. Return the last commit ID on success, #f otherwise."
(%package-database)))
(jobs (read port)))
(close-pipe port)
+ ;; XXX: test if jobs is consistent.
jobs))
(define (build-packages store db jobs)
@@ -171,24 +183,27 @@ if required. Return the last commit ID on success, #f otherwise."
(define (process-specs db jobspecs)
"Evaluate and build JOBSPECS and store results in DB."
(define (process spec)
- (let ((commit (fetch-repository spec))
- (stamp (db-get-stamp db spec)))
- (when commit
- (unless (string=? commit stamp)
- (unless (assq-ref spec #:no-compile?)
- (compile (string-append (%package-cachedir) "/"
- (assq-ref spec #:name))))
- (with-store store
- ;; Always set #:keep-going? so we don't stop on the first build
- ;; failure.
- (set-build-options store
- #:use-substitutes? (%use-substitutes?)
- #:keep-going? #t)
-
- (let* ((spec* (acons #:current-commit commit spec))
- (jobs (evaluate store db spec*)))
- (build-packages store db jobs))))
- (db-add-stamp db spec commit))))
+ (with-store store
+ (let ((stamp (db-get-stamp db spec)))
+ (receive (store-dir commit)
+ (fetch-repository store spec)
+ (when commit
+ (unless (string=? commit stamp)
+ (copy-repository-cache store-dir spec)
+
+ (unless (assq-ref spec #:no-compile?)
+ (compile (string-append (%package-cachedir) "/"
+ (assq-ref spec #:name))))
+ ;; Always set #:keep-going? so we don't stop on the first build
+ ;; failure.
+ (set-build-options store
+ #:use-substitutes? (%use-substitutes?)
+ #:keep-going? #t)
+
+ (let* ((spec* (acons #:current-commit commit spec))
+ (jobs (evaluate store db spec*)))
+ (build-packages store db jobs)))
+ (db-add-stamp db spec commit))))))
(for-each process jobspecs))
--
2.13.1
next prev parent reply other threads:[~2017-07-03 13:53 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-07-01 15:00 [bug#27550] [PATCH 0/2] cuirass: Prepare (guix git) integration Mathieu Othacehe
2017-07-01 15:02 ` [bug#27550] [PATCH 1/2] repo: remove git-repo Mathieu Othacehe
2017-07-01 15:02 ` [bug#27550] [PATCH 2/2] utils: Remove useless procedures Mathieu Othacehe
2017-07-03 12:07 ` [bug#27550] [PATCH 0/2] cuirass: Prepare (guix git) integration Ludovic Courtès
2017-07-03 12:15 ` Mathieu Othacehe
2017-07-03 13:52 ` Mathieu Othacehe [this message]
2017-07-04 21:32 ` Ludovic Courtès
2017-07-05 7:42 ` Mathieu Othacehe
2017-07-05 11:54 ` Mathieu Othacehe
2017-07-05 21:45 ` Ludovic Courtès
2017-07-06 7:00 ` bug#27550: " Mathieu Othacehe
2017-07-05 21:44 ` [bug#27550] " Ludovic Courtès
2017-07-03 14:14 ` Ludovic Courtès
2017-07-03 14:28 ` Mathieu Othacehe
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
List information: https://guix.gnu.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=867ezpocf4.fsf@gmail.com \
--to=m.othacehe@gmail.com \
--cc=27550@debbugs.gnu.org \
--cc=ludo@gnu.org \
/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 public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).