From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([209.51.188.92]:55336) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hUBsk-0001Dm-3f for guix-patches@gnu.org; Fri, 24 May 2019 11:13:21 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hUBsb-0003CC-26 for guix-patches@gnu.org; Fri, 24 May 2019 11:13:10 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:33501) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hUBsU-00038i-HP for guix-patches@gnu.org; Fri, 24 May 2019 11:13:04 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1hUBsU-0007Id-Au for guix-patches@gnu.org; Fri, 24 May 2019 11:13:02 -0400 Subject: [bug#35884] [PATCH] recursive import refactoring, and ignore option for hackage import Resent-Message-ID: Received: from eggs.gnu.org ([209.51.188.92]:54965) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hUBrr-0000cn-20 for guix-patches@gnu.org; Fri, 24 May 2019 11:12:24 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hUBrp-0002ho-O1 for guix-patches@gnu.org; Fri, 24 May 2019 11:12:23 -0400 Received: from mx1.mailbox.org ([2001:67c:2050:104:0:1:25:1]:11812) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hUBrk-0000up-8t for guix-patches@gnu.org; Fri, 24 May 2019 11:12:20 -0400 Received: from smtp1.mailbox.org (smtp1.mailbox.org [IPv6:2001:67c:2050:105:465:1:1:0]) (using TLSv1.2 with cipher ECDHE-RSA-CHACHA20-POLY1305 (256/256 bits)) (No client certificate requested) by mx1.mailbox.org (Postfix) with ESMTPS id B8C4B508E2 for ; Fri, 24 May 2019 17:09:24 +0200 (CEST) Received: from smtp1.mailbox.org ([80.241.60.240]) by spamfilter03.heinlein-hosting.de (spamfilter03.heinlein-hosting.de [80.241.56.117]) (amavisd-new, port 10030) with ESMTP id u2ruQkvB72DU for ; Fri, 24 May 2019 17:09:05 +0200 (CEST) From: Robert Vollmert Content-Type: multipart/mixed; boundary="Apple-Mail=_B30012F6-5632-460E-A050-F96C3C4732BD" Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.11\)) Message-Id: <790D25CC-533E-40B5-8346-E07AB8137A2C@vllmrt.net> Date: Fri, 24 May 2019 17:09:05 +0200 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+kyle=kyleam.com@gnu.org Sender: "Guix-patches" To: 35884@debbugs.gnu.org --Apple-Mail=_B30012F6-5632-460E-A050-F96C3C4732BD Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii This is on top of https://debbugs.gnu.org/cgi/bugreport.cgi?bug=35859 --Apple-Mail=_B30012F6-5632-460E-A050-F96C3C4732BD Content-Disposition: attachment; filename=0011-guix-build-download-Don-t-log-start-of-each-download.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="0011-guix-build-download-Don-t-log-start-of-each-download.patch" Content-Transfer-Encoding: quoted-printable =46rom=2000e150fcb49f2d5e075cd7a16ddf3d56f321a629=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Robert=20Vollmert=20=0ADate:=20= Fri,=2024=20May=202019=2010:44:09=20+0200=0ASubject:=20[PATCH=2011/13]=20= guix:=20build:=20download:=20Don't=20log=20start=20of=20each=0A=20= download.=0A=0ADownloads=20are=20already=20logged=20through=20the=20= progress-reporter.=20If=0Asuch=20debug=20output=20is=20desired,=20it=20= should=20probably=20be=20handled=20at=0Athe=20call=20site.=0A=0A*=20= guix/build/download.scm=20(url-fetch):=20Remove=20debug=20log.=0A---=0A=20= guix/build/download.scm=20|=202=20--=0A=201=20file=20changed,=202=20= deletions(-)=0A=0Adiff=20--git=20a/guix/build/download.scm=20= b/guix/build/download.scm=0Aindex=200c9c61de4b..b5ff90b920=20100644=0A= ---=20a/guix/build/download.scm=0A+++=20b/guix/build/download.scm=0A@@=20= -766,8=20+766,6=20@@=20otherwise=20simply=20ignore=20them."=0A=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(_=20=20=20=20=20=20=20= (list=20(string->uri=20url))))))=0A=20=0A=20=20=20(define=20(fetch=20uri=20= file)=0A-=20=20=20=20(format=20#t=20"~%Starting=20download=20of=20= ~a~%=46rom=20~a...~%"=0A-=20=20=20=20=20=20=20=20=20=20=20=20file=20= (uri->string=20uri))=0A=20=20=20=20=20(case=20(uri-scheme=20uri)=0A=20=20= =20=20=20=20=20((http=20https)=0A=20=20=20=20=20=20=20=20= (false-if-exception*=0A--=20=0A2.21.0=0A=0A= --Apple-Mail=_B30012F6-5632-460E-A050-F96C3C4732BD Content-Disposition: attachment; filename=0012-guix-import-simplify-recursive-import.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="0012-guix-import-simplify-recursive-import.patch" Content-Transfer-Encoding: quoted-printable =46rom=2000942eff44cc4e1fc7f7d97c1279c941937c1c6c=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Robert=20Vollmert=20=0ADate:=20= Sat,=2018=20May=202019=2003:37:53=20+0200=0ASubject:=20[PATCH=2012/13]=20= guix:=20import:=20simplify=20recursive=20import=0A=0AThis=20simplifies=20= the=20logic=20of=20recursive-import,=20intending=20no=0Amajor=20= functional=20changes.=20The=20package=20import=20function=20is=20no=0A= longer=20called=20twice=20per=20package.=20Failed=20imports=20now=20make=20= it=0Ato=20the=20package=20stream=20as=20'()=20instead=20of=20#f.=0A=0A*=20= guix/import/utils.scm:=20Simplify=20recursive-import.=0A---=0A=20= guix/import/utils.scm=20|=2086=20= ++++++++++++++++---------------------------=0A=201=20file=20changed,=20= 32=20insertions(+),=2054=20deletions(-)=0A=0Adiff=20--git=20= a/guix/import/utils.scm=20b/guix/import/utils.scm=0Aindex=20= 516c0cfaa2..ff548b809a=20100644=0A---=20a/guix/import/utils.scm=0A+++=20= b/guix/import/utils.scm=0A@@=20-378,57=20+378,35=20@@=20separated=20by=20= PRED."=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20#:allow-other-keys)=0A=20=20=20"Generate=20a=20stream=20= of=20package=20expressions=20for=20PACKAGE-NAME=20and=20all=20its=0A=20= dependencies."=0A-=20=20(receive=20(package=20.=20dependencies)=0A-=20=20= =20=20=20=20(repo->guix-package=20package-name=20repo)=0A-=20=20=20=20= (if=20(not=20package)=0A-=20=20=20=20=20=20=20=20stream-null=0A-=0A-=20=20= =20=20=20=20=20=20;;=20Generate=20a=20lazy=20stream=20of=20package=20= expressions=20for=20all=20unknown=0A-=20=20=20=20=20=20=20=20;;=20= dependencies=20in=20the=20graph.=0A-=20=20=20=20=20=20=20=20(let*=20= ((make-state=20(lambda=20(queue=20done)=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(cons=20queue=20= done)))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(next=20=20=20=20= =20=20=20(match-lambda=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(((next=20.=20rest)=20.=20done)=20= next)))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(imported=20=20=20= (match-lambda=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20((queue=20.=20done)=20done)))=0A-=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(done?=20=20=20=20=20=20(match-lambda=0A= -=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20((queue=20.=20done)=0A-=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(zero?=20(length=20= queue)))))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(unknown?=20=20= =20(lambda*=20(dependency=20#:optional=20(done=20'()))=0A-=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (and=20(not=20(member=20dependency=0A-=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20done))=0A-=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (null?=20(find-packages-by-name=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(guix-name=20dependency))))))=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(update=20=20=20=20=20(lambda=20(state=20new-queue)=0A-=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(match=20state=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(((head=20.=20tail)=20.=20= done)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(make-state=20(lset-difference=0A-=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20equal?=0A-=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(lset-union=20equal?=20= new-queue=20tail)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20done)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (cons=20head=20done)))))))=0A-=20=20=20=20=20=20=20=20=20=20(stream-cons=0A= -=20=20=20=20=20=20=20=20=20=20=20package=0A-=20=20=20=20=20=20=20=20=20=20= =20(stream-unfold=0A-=20=20=20=20=20=20=20=20=20=20=20=20;;=20map:=20= produce=20a=20stream=20element=0A-=20=20=20=20=20=20=20=20=20=20=20=20= (lambda=20(state)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (repo->guix-package=20(next=20state)=20repo))=0A-=0A-=20=20=20=20=20=20=20= =20=20=20=20=20;;=20predicate=0A-=20=20=20=20=20=20=20=20=20=20=20=20= (negate=20done?)=0A-=0A-=20=20=20=20=20=20=20=20=20=20=20=20;;=20= generator:=20update=20the=20queue=0A-=20=20=20=20=20=20=20=20=20=20=20=20= (lambda=20(state)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20(receive=20= (package=20.=20dependencies)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(repo->guix-package=20(next=20state)=20repo)=0A-=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(if=20package=0A-=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(update=20state=20(filter=20(cut=20= unknown?=20<>=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(cons=20(next=20state)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(imported=20state)))=0A-=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(car=20dependencies)))=0A-=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20TODO:=20= Try=20the=20other=20archives=20before=20giving=20up=0A-=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(update=20state=20(imported=20= state)))))=0A-=0A-=20=20=20=20=20=20=20=20=20=20=20=20;;=20initial=20= state=0A-=20=20=20=20=20=20=20=20=20=20=20=20(make-state=20(filter=20= unknown?=20(car=20dependencies))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(list=20package-name))))))))=0A+=20=20= (define=20(exists?=20dependency)=0A+=20=20=20=20(not=20(null?=20= (find-packages-by-name=20(guix-name=20dependency)))))=0A+=20=20(define=20= initial-state=20(list=20#f=20(list=20package-name)=20(list)))=0A+=20=20= (define=20(step=20state)=0A+=20=20=20=20(match=20state=0A+=20=20=20=20=20= =20((prev=20(next=20.=20rest)=20done)=0A+=20=20=20=20=20=20=20(define=20= (handle?=20dep)=0A+=20=20=20=20=20=20=20=20=20(and=0A+=20=20=20=20=20=20=20= =20=20=20=20(not=20(equal?=20dep=20next))=0A+=20=20=20=20=20=20=20=20=20=20= =20(not=20(member=20dep=20done))=0A+=20=20=20=20=20=20=20=20=20=20=20= (not=20(exists?=20dep))))=0A+=20=20=20=20=20=20=20(receive=20(package=20= .=20dependencies)=20(repo->guix-package=20next=20repo)=0A+=20=20=20=20=20= =20=20=20=20(list=0A+=20=20=20=20=20=20=20=20=20=20=20(if=20package=20= package=20'())=20;;=20default=20#f=20on=20failure=20would=20interrupt=0A= +=20=20=20=20=20=20=20=20=20=20=20(if=20package=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20(lset-union=20equal?=20rest=20(filter=20handle?=20(car=20= dependencies)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20rest)=0A+=20=20= =20=20=20=20=20=20=20=20=20(cons=20next=20done))))=0A+=20=20=20=20=20=20= ((prev=20'()=20done)=0A+=20=20=20=20=20=20=20(list=20#f=20'()=20done))))=0A= +=0A+=20=20;;=20Generate=20a=20lazy=20stream=20of=20package=20= expressions=20for=20all=20unknown=0A+=20=20;;=20dependencies=20in=20the=20= graph.=0A+=20=20(stream-unfold=0A+=20=20=20=20;;=20map:=20produce=20a=20= stream=20element=0A+=20=20=20=20(match-lambda=20((latest=20queue=20done)=20= latest))=0A+=20=20=20=20;;=20predicate=0A+=20=20=20=20(match-lambda=20= ((latest=20queue=20done)=20latest))=0A+=20=20=20=20;;=20generator:=20= update=20the=20queue=0A+=20=20=20=20step=0A+=20=20=20=20;;=20initial=20= state=0A+=20=20=20=20(step=20initial-state)))=0A--=20=0A2.21.0=0A=0A= --Apple-Mail=_B30012F6-5632-460E-A050-F96C3C4732BD Content-Disposition: attachment; filename=0013-guix-import-hackage-Add-flag-to-allow-bypassing-exis.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="0013-guix-import-hackage-Add-flag-to-allow-bypassing-exis.patch" Content-Transfer-Encoding: quoted-printable =46rom=20d06fcb46f34636a662467289f39fa28423f7b682=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Robert=20Vollmert=20=0ADate:=20= Fri,=2024=20May=202019=2016:00:25=20+0200=0ASubject:=20[PATCH=2013/13]=20= guix=20import=20hackage:=20Add=20flag=20to=20allow=20bypassing=0A=20= existing=20packages.=0A=0AThis=20adds=20a=20command=20line=20flag=20`-i`=20= which=20causes=20recursive=20import=0Ato=20reimport=20packages=20that=20= are=20already=20part=20of=20guix,=20allowing=20a=20way=0Ato=20easily=20= define=20updated=20versions=20of=20stale=20packages.=0A=0A*=20= guix/import/utils.scm=20(recursive-import):=20Add=20keyword=20argument=20= `#:ignore-existing?`.=0A*=20guix/import/hackage.scm=20= (hackage-recursive-import):=20Add=20keyword=20argument=20= `#:ignore-existing?`.=0A*=20guix/scripts/import/hackage.scm:=20Add=20= flag=20-i/--ignore.=0A*=20doc/guix.tex=20(import=20hackage):=20Document=20= flag=20-i/--ignore.=0A---=0A=20doc/guix.texi=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20|=20=204=20++++=0A=20guix/import/hackage.scm=20= =20=20=20=20=20=20=20=20|=20=208=20+++++---=0A=20guix/import/utils.scm=20= =20=20=20=20=20=20=20=20=20=20|=20=205=20+++--=0A=20= guix/scripts/import/hackage.scm=20|=2011=20++++++++++-=0A=204=20files=20= changed,=2022=20insertions(+),=206=20deletions(-)=0A=0Adiff=20--git=20= a/doc/guix.texi=20b/doc/guix.texi=0Aindex=20ae9ad0739e..45f2f14fd8=20= 100644=0A---=20a/doc/guix.texi=0A+++=20b/doc/guix.texi=0A@@=20-8692,6=20= +8692,10=20@@=20associated=20with=20the=20keys=20@code{os},=20= @code{arch}=20and=20@code{impl}=20is=0A=20Traverse=20the=20dependency=20= graph=20of=20the=20given=20upstream=20package=20recursively=0A=20and=20= generate=20package=20expressions=20for=20all=20those=20packages=20that=20= are=20not=20yet=0A=20in=20Guix.=0A+@item=20--ignore=0A+@itemx=20-i=0A= +When=20importing=20recursively,=20generate=20package=20expressions=20= also=20for=0A+dependencies=20that=20are=20already=20in=20Guix.=0A=20@end=20= table=0A=20=0A=20The=20command=20below=20imports=20metadata=20for=20the=20= latest=20version=20of=20the=0Adiff=20--git=20a/guix/import/hackage.scm=20= b/guix/import/hackage.scm=0Aindex=20405294d186..d6f5448cfc=20100644=0A= ---=20a/guix/import/hackage.scm=0A+++=20b/guix/import/hackage.scm=0A@@=20= -308,7=20+308,8=20@@=20the=20hash=20of=20the=20Cabal=20file."=0A=20=20=20= (lambda*=20(package-name=20#:key=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(include-test-dependencies?=20#t)=0A= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(port=20#f)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(cabal-environment=20'()))=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(cabal-environment=20= '())=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20#:allow-other-keys)=0A=20=20=20=20"Fetch=20the=20Cabal=20file=20= for=20PACKAGE-NAME=20from=20hackage.haskell.org,=20or,=20if=20the=0A=20= called=20with=20keyword=20parameter=20PORT,=20from=20PORT.=20=20Return=20= the=20`package'=0A=20S-expression=20corresponding=20to=20that=20package,=20= or=20#f=20on=20failure.=0A@@=20-337,11=20+338,12=20@@=20respectively."=0A= =20(define=20hackage->guix-package=0A=20=20=20(memoize=20= hackage->guix-package-impl))=0A=20=0A-(define*=20= (hackage-recursive-import=20package-name=20.=20args)=0A+(define*=20= (hackage-recursive-import=20package-name=20#:key=20ignore-existing?=20= #:allow-other-keys=20#:rest=20args)=0A=20=20=20(recursive-import=20= package-name=20#f=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20#:repo->guix-package=20(lambda=20(name=20repo)=0A=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(apply=20hackage->guix-package=20= (cons=20name=20args)))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20#:guix-name=20hackage-name->package-name))=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#:guix-name=20= hackage-name->package-name=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20#:ignore-existing?=20ignore-existing?))=0A=20=0A=20= (define=20(hackage-package?=20package)=0A=20=20=20"Return=20#t=20if=20= PACKAGE=20is=20a=20Haskell=20package=20from=20Hackage."=0Adiff=20--git=20= a/guix/import/utils.scm=20b/guix/import/utils.scm=0Aindex=20= ff548b809a..3ae31e497c=20100644=0A---=20a/guix/import/utils.scm=0A+++=20= b/guix/import/utils.scm=0A@@=20-374,12=20+374,13=20@@=20separated=20by=20= PRED."=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20name)))=0A=20=0A=20(define*=20= (recursive-import=20package-name=20repo=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#:key=20= repo->guix-package=20guix-name=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20#:key=20repo->guix-package=20= guix-name=20ignore-existing?=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20#:allow-other-keys)=0A=20=20=20= "Generate=20a=20stream=20of=20package=20expressions=20for=20PACKAGE-NAME=20= and=20all=20its=0A=20dependencies."=0A=20=20=20(define=20(exists?=20= dependency)=0A-=20=20=20=20(not=20(null?=20(find-packages-by-name=20= (guix-name=20dependency)))))=0A+=20=20=20=20(and=20(not=20= ignore-existing?)=0A+=20=20=20=20=20=20=20=20=20(not=20(null?=20= (find-packages-by-name=20(guix-name=20dependency))))))=0A=20=20=20= (define=20initial-state=20(list=20#f=20(list=20package-name)=20(list)))=0A= =20=20=20(define=20(step=20state)=0A=20=20=20=20=20(match=20state=0Adiff=20= --git=20a/guix/scripts/import/hackage.scm=20= b/guix/scripts/import/hackage.scm=0Aindex=20f4aac61078..6574adf010=20= 100644=0A---=20a/guix/scripts/import/hackage.scm=0A+++=20= b/guix/scripts/import/hackage.scm=0A@@=20-59,6=20+59,8=20@@=20= version.\n"))=0A=20=20=20(display=20(G_=20"=0A=20=20=20-h,=20--help=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20display=20this=20help=20= and=20exit"))=0A=20=20=20(display=20(G_=20"=0A+=20=20-i,=20--ignore=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20ignore=20existing=20= packages=20on=20recursive=20import"))=0A+=20=20(display=20(G_=20"=0A=20=20= =20-r,=20--recursive=20=20=20=20=20=20=20=20=20=20=20=20=20=20import=20= packages=20recursively"))=0A=20=20=20(display=20(G_=20"=0A=20=20=20-s,=20= --stdin=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20read=20from=20= standard=20input"))=0A@@=20-96,6=20+98,11=20@@=20version.\n"))=0A=20=20=20= =20=20=20=20=20=20=20(option=20'(#\r=20"recursive")=20#f=20#f=0A=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(lambda=20(opt=20name=20arg=20= result)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (alist-cons=20'recursive=20#t=20result)))=0A+=0A+=20=20=20=20=20=20=20=20= =20(option=20'(#\i=20"ignore")=20#f=20#f=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(lambda=20(opt=20name=20arg=20result)=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(alist-cons=20= 'ignore-existing?=20#t=20result)))=0A+=0A=20=20=20=20=20=20=20=20=20=20= %standard-import-options))=0A=20=0A=20=0C=0A@@=20-122,7=20+129,9=20@@=20= version.\n"))=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(current-input-port)=0A=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20#f)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20#:cabal-environment=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(assoc-ref=20opts=20= 'cabal-environment)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(assoc-ref=20opts=20'cabal-environment)=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= #:ignore-existing?=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(assoc-ref=20opts=20'ignore-existing?)))=0A=20=20=20=20= =20=20=20=20=20=20=20=20(sexp=20(if=20(assoc-ref=20opts=20'recursive)=0A=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= Recursive=20import=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(map=20(match-lambda=0A--=20=0A2.21.0=0A=0A= --Apple-Mail=_B30012F6-5632-460E-A050-F96C3C4732BD--