GNU bug report logs -
#35935
[PATCH] guix: import: simplify recursive import
Previous Next
Reported by: Robert Vollmert <rob <at> vllmrt.net>
Date: Mon, 27 May 2019 20:08:01 UTC
Severity: normal
Tags: patch
Done: Oleg Pykhalov <go.wigust <at> gmail.com>
Bug is archived. No further changes may be made.
To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 35935 in the body.
You can then email your comments to 35935 AT debbugs.gnu.org in the normal way.
Toggle the display of automated, internal messages from the tracker.
Report forwarded
to
guix-patches <at> gnu.org
:
bug#35935
; Package
guix-patches
.
(Mon, 27 May 2019 20:08:02 GMT)
Full text and
rfc822 format available.
Acknowledgement sent
to
Robert Vollmert <rob <at> vllmrt.net>
:
New bug report received and forwarded. Copy sent to
guix-patches <at> gnu.org
.
(Mon, 27 May 2019 20:08:02 GMT)
Full text and
rfc822 format available.
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
This simplifies the logic of recursive-import, intending no
major functional changes. The package import function is no
longer called twice per package. Failed imports now make it
to the package stream as '() instead of #f.
* guix/import/utils.scm: Simplify recursive-import.
---
guix/import/utils.scm | 86 ++++++++++++++++---------------------------
1 file changed, 32 insertions(+), 54 deletions(-)
diff --git a/guix/import/utils.scm b/guix/import/utils.scm
index 516c0cfaa2..ff548b809a 100644
--- a/guix/import/utils.scm
+++ b/guix/import/utils.scm
@@ -378,57 +378,35 @@ separated by PRED."
#:allow-other-keys)
"Generate a stream of package expressions for PACKAGE-NAME and all its
dependencies."
- (receive (package . dependencies)
- (repo->guix-package package-name repo)
- (if (not package)
- stream-null
-
- ;; Generate a lazy stream of package expressions for all unknown
- ;; dependencies in the graph.
- (let* ((make-state (lambda (queue done)
- (cons queue done)))
- (next (match-lambda
- (((next . rest) . done) next)))
- (imported (match-lambda
- ((queue . done) done)))
- (done? (match-lambda
- ((queue . done)
- (zero? (length queue)))))
- (unknown? (lambda* (dependency #:optional (done '()))
- (and (not (member dependency
- done))
- (null? (find-packages-by-name
- (guix-name dependency))))))
- (update (lambda (state new-queue)
- (match state
- (((head . tail) . done)
- (make-state (lset-difference
- equal?
- (lset-union equal? new-queue tail)
- done)
- (cons head done)))))))
- (stream-cons
- package
- (stream-unfold
- ;; map: produce a stream element
- (lambda (state)
- (repo->guix-package (next state) repo))
-
- ;; predicate
- (negate done?)
-
- ;; generator: update the queue
- (lambda (state)
- (receive (package . dependencies)
- (repo->guix-package (next state) repo)
- (if package
- (update state (filter (cut unknown? <>
- (cons (next state)
- (imported state)))
- (car dependencies)))
- ;; TODO: Try the other archives before giving up
- (update state (imported state)))))
-
- ;; initial state
- (make-state (filter unknown? (car dependencies))
- (list package-name))))))))
+ (define (exists? dependency)
+ (not (null? (find-packages-by-name (guix-name dependency)))))
+ (define initial-state (list #f (list package-name) (list)))
+ (define (step state)
+ (match state
+ ((prev (next . rest) done)
+ (define (handle? dep)
+ (and
+ (not (equal? dep next))
+ (not (member dep done))
+ (not (exists? dep))))
+ (receive (package . dependencies) (repo->guix-package next repo)
+ (list
+ (if package package '()) ;; default #f on failure would interrupt
+ (if package
+ (lset-union equal? rest (filter handle? (car dependencies)))
+ rest)
+ (cons next done))))
+ ((prev '() done)
+ (list #f '() done))))
+
+ ;; Generate a lazy stream of package expressions for all unknown
+ ;; dependencies in the graph.
+ (stream-unfold
+ ;; map: produce a stream element
+ (match-lambda ((latest queue done) latest))
+ ;; predicate
+ (match-lambda ((latest queue done) latest))
+ ;; generator: update the queue
+ step
+ ;; initial state
+ (step initial-state)))
--
2.20.1 (Apple Git-117)
Information forwarded
to
guix-patches <at> gnu.org
:
bug#35935
; Package
guix-patches
.
(Sun, 02 Jun 2019 19:53:02 GMT)
Full text and
rfc822 format available.
Message #8 received at 35935 <at> debbugs.gnu.org (full text, mbox):
Hello Robert,
Robert Vollmert <rob <at> vllmrt.net> skribis:
> This simplifies the logic of recursive-import, intending no
> major functional changes. The package import function is no
> longer called twice per package. Failed imports now make it
> to the package stream as '() instead of #f.
>
> * guix/import/utils.scm: Simplify recursive-import.
^
Minor issue: please make sure to mention the modified entities here
(procedures, variables, etc.); see
<https://www.gnu.org/prep/standards/html_node/Change-Logs.html>.
I think Oleg worked on this part before; Oleg, could you comment
and/or apply?
‘tests/import-utils.scm’ doesn’t seem to be testing this procedure,
perhaps that’s something we should fix eventually.
Thanks,
Ludo’.
Information forwarded
to
guix-patches <at> gnu.org
:
bug#35935
; Package
guix-patches
.
(Sun, 02 Jun 2019 20:20:02 GMT)
Full text and
rfc822 format available.
Message #11 received at 35935 <at> debbugs.gnu.org (full text, mbox):
This simplifies the logic of recursive-import, intending no
major functional changes. The package import function is no
longer called twice per package. Failed imports now make it
to the package stream as '() instead of #f.
* guix/import/utils.scm (recursive-import): Simplify.
---
guix/import/utils.scm | 86 ++++++++++++++++---------------------------
1 file changed, 32 insertions(+), 54 deletions(-)
diff --git a/guix/import/utils.scm b/guix/import/utils.scm
index 516c0cfaa2..ff548b809a 100644
--- a/guix/import/utils.scm
+++ b/guix/import/utils.scm
@@ -378,57 +378,35 @@ separated by PRED."
#:allow-other-keys)
"Generate a stream of package expressions for PACKAGE-NAME and all its
dependencies."
- (receive (package . dependencies)
- (repo->guix-package package-name repo)
- (if (not package)
- stream-null
-
- ;; Generate a lazy stream of package expressions for all unknown
- ;; dependencies in the graph.
- (let* ((make-state (lambda (queue done)
- (cons queue done)))
- (next (match-lambda
- (((next . rest) . done) next)))
- (imported (match-lambda
- ((queue . done) done)))
- (done? (match-lambda
- ((queue . done)
- (zero? (length queue)))))
- (unknown? (lambda* (dependency #:optional (done '()))
- (and (not (member dependency
- done))
- (null? (find-packages-by-name
- (guix-name dependency))))))
- (update (lambda (state new-queue)
- (match state
- (((head . tail) . done)
- (make-state (lset-difference
- equal?
- (lset-union equal? new-queue tail)
- done)
- (cons head done)))))))
- (stream-cons
- package
- (stream-unfold
- ;; map: produce a stream element
- (lambda (state)
- (repo->guix-package (next state) repo))
-
- ;; predicate
- (negate done?)
-
- ;; generator: update the queue
- (lambda (state)
- (receive (package . dependencies)
- (repo->guix-package (next state) repo)
- (if package
- (update state (filter (cut unknown? <>
- (cons (next state)
- (imported state)))
- (car dependencies)))
- ;; TODO: Try the other archives before giving up
- (update state (imported state)))))
-
- ;; initial state
- (make-state (filter unknown? (car dependencies))
- (list package-name))))))))
+ (define (exists? dependency)
+ (not (null? (find-packages-by-name (guix-name dependency)))))
+ (define initial-state (list #f (list package-name) (list)))
+ (define (step state)
+ (match state
+ ((prev (next . rest) done)
+ (define (handle? dep)
+ (and
+ (not (equal? dep next))
+ (not (member dep done))
+ (not (exists? dep))))
+ (receive (package . dependencies) (repo->guix-package next repo)
+ (list
+ (if package package '()) ;; default #f on failure would interrupt
+ (if package
+ (lset-union equal? rest (filter handle? (car dependencies)))
+ rest)
+ (cons next done))))
+ ((prev '() done)
+ (list #f '() done))))
+
+ ;; Generate a lazy stream of package expressions for all unknown
+ ;; dependencies in the graph.
+ (stream-unfold
+ ;; map: produce a stream element
+ (match-lambda ((latest queue done) latest))
+ ;; predicate
+ (match-lambda ((latest queue done) latest))
+ ;; generator: update the queue
+ step
+ ;; initial state
+ (step initial-state)))
--
2.20.1 (Apple Git-117)
Information forwarded
to
guix-patches <at> gnu.org
:
bug#35935
; Package
guix-patches
.
(Sun, 02 Jun 2019 20:25:02 GMT)
Full text and
rfc822 format available.
Message #14 received at 35935 <at> debbugs.gnu.org (full text, mbox):
> On 2. Jun 2019, at 21:52, Ludovic Courtès <ludo <at> gnu.org> wrote:
> Robert Vollmert <rob <at> vllmrt.net> skribis:
>> * guix/import/utils.scm: Simplify recursive-import.
> ^
> Minor issue: please make sure to mention the modified entities here
> (procedures, variables, etc.); see
> <https://www.gnu.org/prep/standards/html_node/Change-Logs.html>.
Fixed, thanks for the heads up.
> I think Oleg worked on this part before; Oleg, could you comment
> and/or apply?
>
> ‘tests/import-utils.scm’ doesn’t seem to be testing this procedure,
> perhaps that’s something we should fix eventually.
Agreed. It does seem to be covered somewhat by tests/gem.scm.
I also tested it a bit by hand, with some haskell packages.
Information forwarded
to
guix-patches <at> gnu.org
:
bug#35935
; Package
guix-patches
.
(Mon, 03 Jun 2019 19:57:02 GMT)
Full text and
rfc822 format available.
Message #17 received at 35935 <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
Hello Robert,
Robert Vollmert <rob <at> vllmrt.net> writes:
[…]
>> I think Oleg worked on this part before; Oleg, could you comment
>> and/or apply?
>>
>> ‘tests/import-utils.scm’ doesn’t seem to be testing this procedure,
>> perhaps that’s something we should fix eventually.
>
> Agreed. It does seem to be covered somewhat by tests/gem.scm.
> I also tested it a bit by hand, with some haskell packages.
True, ‘tests/gem.scm’ file tests ‘recursive-import’ procedure by
invoking ‘gem-recursive-import’. I think this test is good enough for
our purpose - use ‘recursive-import’ in other package importers and make
sure it works. Thoughts?
I also added a copyright line if you don't mind:
;;; Copyright © 2019 Robert Vollmert <rob <at> vllmrt.net>
Is it OK, Robert? I tested manually with ‘gem’ and ‘elpa’ recursive
importers and ready to push :-)
Thanks,
Oleg.
[signature.asc (application/pgp-signature, inline)]
Information forwarded
to
guix-patches <at> gnu.org
:
bug#35935
; Package
guix-patches
.
(Mon, 03 Jun 2019 20:00:02 GMT)
Full text and
rfc822 format available.
Message #20 received at 35935 <at> debbugs.gnu.org (full text, mbox):
Hello Oleg,
thanks for having a look.
> On 3. Jun 2019, at 21:56, Oleg Pykhalov <go.wigust <at> gmail.com> wrote:
[…]
> I also added a copyright line if you don't mind:
>
> ;;; Copyright © 2019 Robert Vollmert <rob <at> vllmrt.net>
>
> Is it OK, Robert? I tested manually with ‘gem’ and ‘elpa’ recursive
> importers and ready to push :-)
Yes, of course. (Should I generally be adding copyright lines when edit
a file?
Cheers
Robert
Reply sent
to
Oleg Pykhalov <go.wigust <at> gmail.com>
:
You have taken responsibility.
(Mon, 03 Jun 2019 20:32:04 GMT)
Full text and
rfc822 format available.
Notification sent
to
Robert Vollmert <rob <at> vllmrt.net>
:
bug acknowledged by developer.
(Mon, 03 Jun 2019 20:32:04 GMT)
Full text and
rfc822 format available.
Message #25 received at 35935-done <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
Robert Vollmert <rob <at> vllmrt.net> writes:
[…]
>> I also added a copyright line if you don't mind:
>>
>> ;;; Copyright © 2019 Robert Vollmert <rob <at> vllmrt.net>
>>
>> Is it OK, Robert? I tested manually with ‘gem’ and ‘elpa’ recursive
>> importers and ready to push :-)
>
> Yes, of course. (Should I generally be adding copyright lines when edit
> a file?
Yes.
Pushed as 5b315f3ea93020df52bc11105064a1398687e572 to master.
[signature.asc (application/pgp-signature, inline)]
bug archived.
Request was from
Debbugs Internal Request <help-debbugs <at> gnu.org>
to
internal_control <at> debbugs.gnu.org
.
(Tue, 02 Jul 2019 11:24:04 GMT)
Full text and
rfc822 format available.
This bug report was last modified 4 years and 291 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.