From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([209.51.188.92]:54294) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hTjSH-0000cB-Uz for guix-patches@gnu.org; Thu, 23 May 2019 04:52:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hTjSE-00032A-8G for guix-patches@gnu.org; Thu, 23 May 2019 04:52:04 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:58565) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hTjSE-000325-5M for guix-patches@gnu.org; Thu, 23 May 2019 04:52:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1hTjSE-0001KG-0w for guix-patches@gnu.org; Thu, 23 May 2019 04:52:02 -0400 Subject: [bug#35859] line ending fix References: <72F268CC-5FB7-421C-B6F7-B47EAAB823C1@vllmrt.net> In-Reply-To: <72F268CC-5FB7-421C-B6F7-B47EAAB823C1@vllmrt.net> Resent-Message-ID: From: Robert Vollmert Content-Type: multipart/mixed; boundary="Apple-Mail=_43497E60-1C51-4F0F-97C6-BBD75705C83E" Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.11\)) Message-Id: <5222A8B7-DF2B-4EC3-8E88-B3A3A546DF75@vllmrt.net> Date: Thu, 23 May 2019 10:50:51 +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: 35859@debbugs.gnu.org --Apple-Mail=_43497E60-1C51-4F0F-97C6-BBD75705C83E Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii Updated patch to deal with CRLF line endings when computing cabal hash. --Apple-Mail=_43497E60-1C51-4F0F-97C6-BBD75705C83E Content-Disposition: attachment; filename=0005-guix-import-hackage-handle-hackage-revisions.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="0005-guix-import-hackage-handle-hackage-revisions.patch" Content-Transfer-Encoding: quoted-printable =46rom=20ee2300e5605745a71e77c0972aebc21e826c581a=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Robert=20Vollmert=20=0ADate:=20= Fri,=2017=20May=202019=2022:52:24=20+0200=0ASubject:=20[PATCH=205/5]=20= guix:=20import:=20hackage:=20handle=20hackage=20revisions=0A=0AHackage=20= packages=20can=20have=20metadata=20revision=20(cabal-file=20only)=0Athat=20= aren't=20reflected=20in=20the=20source=20archive.=20haskell-build-system=0A= has=20support=20for=20this,=20but=20previously=20`guix=20import=20= hackage`=20would=0Acreate=20a=20definition=20based=20on=20the=20new=20= cabal=20file=20but=20building=20using=0Athe=20old=20cabal=20file.=0A=0A= Compare=20https://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D35750.=0A=0A*=20= guix/import/cabal.scm:=20Parse=20`x-revision:`=20property.=0A*=20= guix/import/hackage.scm:=20Compute=20hash=20of=20cabal=20file,=20and=20= write=0Acabal-revision=20build=20system=20arguments.=0A---=0A=20= guix/import/cabal.scm=20=20=20|=20=207=20+++--=0A=20= guix/import/hackage.scm=20|=2061=20= ++++++++++++++++++++++++++++++-----------=0A=202=20files=20changed,=2050=20= insertions(+),=2018=20deletions(-)=0A=0Adiff=20--git=20= a/guix/import/cabal.scm=20b/guix/import/cabal.scm=0Aindex=20= 3028ed2882..312927a573=20100644=0A---=20a/guix/import/cabal.scm=0A+++=20= b/guix/import/cabal.scm=0A@@=20-40,6=20+40,7=20@@=0A=20=20=20=20=20=20=20= =20=20=20=20=20=20cabal-package?=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= cabal-package-name=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= cabal-package-version=0A+=20=20=20=20=20=20=20=20=20=20=20=20= cabal-package-revision=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= cabal-package-license=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= cabal-package-home-page=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= cabal-package-source-repository=0A@@=20-638,13=20+639,14=20@@=20If=20#f=20= use=20the=20function=20'port-filename'=20to=20obtain=20it."=0A=20;;=20= information=20of=20the=20Cabal=20file,=20but=20only=20the=20ones=20we=20= currently=20are=0A=20;;=20interested=20in.=0A=20(define-record-type=20= =0A-=20=20(make-cabal-package=20name=20version=20license=20= home-page=20source-repository=0A+=20=20(make-cabal-package=20name=20= version=20revision=20license=20home-page=20source-repository=0A=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20synopsis=20= description=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20executables=20lib=20test-suites=0A=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20flags=20eval-environment=20= custom-setup)=0A=20=20=20cabal-package?=0A=20=20=20(name=20=20=20= cabal-package-name)=0A=20=20=20(version=20cabal-package-version)=0A+=20=20= (revision=20cabal-package-revision)=0A=20=20=20(license=20= cabal-package-license)=0A=20=20=20(home-page=20cabal-package-home-page)=0A= =20=20=20(source-repository=20cabal-package-source-repository)=0A@@=20= -838,6=20+840,7=20@@=20See=20the=20manual=20for=20limitations.")))))))=0A= =20=20=20(define=20(cabal-evaluated-sexp->package=20evaluated-sexp)=0A=20= =20=20=20=20(let*=20((name=20(lookup-join=20evaluated-sexp=20"name"))=0A=20= =20=20=20=20=20=20=20=20=20=20=20(version=20(lookup-join=20= evaluated-sexp=20"version"))=0A+=20=20=20=20=20=20=20=20=20=20=20= (revision=20(lookup-join=20evaluated-sexp=20"x-revision"))=0A=20=20=20=20= =20=20=20=20=20=20=20=20(license=20(lookup-join=20evaluated-sexp=20= "license"))=0A=20=20=20=20=20=20=20=20=20=20=20=20(home-page=20= (lookup-join=20evaluated-sexp=20"homepage"))=0A=20=20=20=20=20=20=20=20=20= =20=20=20(home-page-or-hackage=0A@@=20-856,7=20+859,7=20@@=20See=20the=20= manual=20for=20limitations.")))))))=0A=20=20=20=20=20=20=20=20=20=20=20=20= (custom-setup=20(match=20(make-cabal-section=20evaluated-sexp=20= 'custom-setup)=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((x)=20x)=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#f))))=0A-=20=20=20=20= =20=20(make-cabal-package=20name=20version=20license=20= home-page-or-hackage=0A+=20=20=20=20=20=20(make-cabal-package=20name=20= version=20revision=20license=20home-page-or-hackage=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= source-repository=20synopsis=20description=20executables=20lib=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= test-suites=20flags=20eval-environment=20custom-setup)))=0A=20=0Adiff=20= --git=20a/guix/import/hackage.scm=20b/guix/import/hackage.scm=0Aindex=20= 5b80a7ea1d..0bd9034087=20100644=0A---=20a/guix/import/hackage.scm=0A+++=20= b/guix/import/hackage.scm=0A@@=20-117,9=20+117,15=20@@=20version=20is=20= returned."=0A=20=20=20=20=20=20=20=20=20=20=20(#f=20name)=0A=20=20=20=20=20= =20=20=20=20=20=20(m=20(match:substring=20m=201)))))))=0A=20=0A-(define=20= (hackage-fetch=20name-version)=0A-=20=20"Return=20the=20Cabal=20file=20= for=20the=20package=20NAME-VERSION,=20or=20#f=20on=20failure.=20=20If=0A= -the=20version=20part=20is=20omitted=20from=20the=20package=20name,=20= then=20return=20the=20latest=0A+(define=20(read-cabal-and-hash=20port)=0A= +=20=20(let-values=20(((port=20get-hash)=20(open-sha256-input-port=20= port)))=0A+=20=20=20=20(cons=0A+=20=20=20=20=20=20(read-cabal=20= (canonical-newline-port=20port))=0A+=20=20=20=20=20=20= (bytevector->nix-base32-string=20(get-hash)))))=0A+=0A+(define=20= (hackage-fetch-and-hash=20name-version)=0A+=20=20"Return=20the=20Cabal=20= file=20and=20hash=20for=20the=20package=20NAME-VERSION,=20or=20#f=20on=20= failure.=0A+If=20the=20version=20part=20is=20omitted=20from=20the=20= package=20name,=20then=20return=20the=20latest=0A=20version."=0A=20=20=20= (guard=20(c=20((and=20(http-get-error?=20c)=0A=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(=3D=20404=20(http-get-error-code=20c)))=0A= @@=20-127,10=20+133,18=20@@=20version."=0A=20=20=20=20=20(let-values=20= (((name=20version)=20(package-name->name+version=20name-version)))=0A=20=20= =20=20=20=20=20(let*=20((url=20(hackage-cabal-url=20name=20version))=0A=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(port=20(http-fetch=20url))=0A-=20= =20=20=20=20=20=20=20=20=20=20=20=20(result=20(read-cabal=20= (canonical-newline-port=20port))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20(result=20(read-cabal-and-hash=20port)))=0A=20=20=20=20=20=20=20=20=20= (close-port=20port)=0A=20=20=20=20=20=20=20=20=20result))))=0A=20=0A= +(define=20(hackage-fetch=20name-version)=0A+=20=20"Return=20the=20Cabal=20= file=20for=20the=20package=20NAME-VERSION,=20or=20#f=20on=20failure.=20=20= If=0A+the=20version=20part=20is=20omitted=20from=20the=20package=20name,=20= then=20return=20the=20latest=0A+version."=0A+=20=20(match=20= (hackage-fetch-and-hash=20name-version)=0A+=20=20=20=20=20=20=20=20=20= ((cabal=20.=20hash)=20cabal)=0A+=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+=0A=20(define=20string->license=0A= =20=20=20;;=20List=20of=20valid=20values=20from=0A=20=20=20;;=20= https://www.haskell.org=0A@@=20-196,15=20+210,19=20@@=20package=20being=20= processed=20and=20is=20used=20to=20filter=20references=20to=20itself."=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(cons=20own-name=20= ghc-standard-libraries))))=0A=20=20=20=20=20=20=20=20=20=20=20= dependencies))=0A=20=0A-(define*=20(hackage-module->sexp=20cabal=20#:key=20= (include-test-dependencies?=20#t))=0A+(define*=20(hackage-module->sexp=20= cabal=20cabal-hash=20#:key=20(include-test-dependencies?=20#t))=0A=20=20=20= "Return=20the=20`package'=20S-expression=20for=20a=20Cabal=20package.=20=20= CABAL=20is=20the=0A-representation=20of=20a=20Cabal=20file=20as=20= produced=20by=20'read-cabal'."=0A+representation=20of=20a=20Cabal=20file=20= as=20produced=20by=20'read-cabal'.=20CABAL-HASH=20is=0A+the=20hash=20of=20= the=20Cabal=20file."=0A=20=0A=20=20=20(define=20name=0A=20=20=20=20=20= (cabal-package-name=20cabal))=0A=20=0A=20=20=20(define=20version=0A=20=20= =20=20=20(cabal-package-version=20cabal))=0A+=0A+=20=20(define=20= revision=0A+=20=20=20=20(cabal-package-revision=20cabal))=0A=20=20=20=0A=20= =20=20(define=20source-url=0A=20=20=20=20=20(hackage-source-url=20name=20= version))=0A@@=20-250,9=20+268,17=20@@=20representation=20of=20a=20Cabal=20= file=20as=20produced=20by=20'read-cabal'."=0A=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(list=20'quasiquote=20inputs))))))=0A=20=20= =20=0A=20=20=20(define=20(maybe-arguments)=0A-=20=20=20=20(if=20(not=20= include-test-dependencies?)=0A-=20=20=20=20=20=20=20=20'((arguments=20= `(#:tests?=20#f)))=0A-=20=20=20=20=20=20=20=20'()))=0A+=20=20=20=20= (define=20testargs=20(if=20(not=20include-test-dependencies?)=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20'(#:tests?=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'()))=0A+=20=20=20=20(define=20revargs=20=20(if=20(not=20= (string-null?=20revision))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20`(#:cabal-revision=20(,revision=20,cabal-hash))=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= '()))=0A+=20=20=20=20(define=20args=20(append=20testargs=20revargs))=0A+=20= =20=20=20(if=20(not=20(nil?=20args))=0A+=20=20=20=20=20=20(let=20((qargs=20= `(,'quasiquote=20,args)))=0A+=20=20=20=20=20=20=20=20`((arguments=20= ,qargs)))=0A+=20=20=20=20=20=20'()))=0A=20=0A=20=20=20(let=20((tarball=20= (with-store=20store=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(download-to-store=20store=20source-url))))=0A@@=20-293,13=20= +319,16=20@@=20symbol=20'true'=20or=20'false'.=20=20The=20value=20= associated=20with=20other=20keys=20has=20to=20conform=0A=20to=20the=20= Cabal=20file=20format=20definition.=20=20The=20default=20value=20= associated=20with=20the=0A=20keys=20\"os\",=20\"arch\"=20and=20\"impl\"=20= is=20\"linux\",=20\"x86_64\"=20and=20\"ghc\"=0A=20respectively."=0A-=20=20= =20(let=20((cabal-meta=20(if=20port=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(read-cabal=20= (canonical-newline-port=20port))=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(hackage-fetch=20package-name))))=0A= -=20=20=20=20=20(and=3D>=20cabal-meta=20(compose=20(cut=20= hackage-module->sexp=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= #:include-test-dependencies?=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= include-test-dependencies?)=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(cut=20eval-cabal=20= <>=20cabal-environment))))))=0A+=20=20=20(match=0A+=20=20=20=20=20(if=20= port=20(read-cabal-and-hash=20port)=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(hackage-fetch-and-hash=20package-name))=0A+=20=20=20=20=20= ((cabal-meta=20.=20cabal-hash)=0A+=20=20=20=20=20=20(and=3D>=20= cabal-meta=20(compose=20(cut=20hackage-module->sexp=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=20cabal-hash=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#:include-test-dependencies?=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= include-test-dependencies?)=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(cut=20= eval-cabal=20<>=20cabal-environment))))=0A+=20=20=20=20=20(_=20#f))))=0A=20= =0A=20(define=20hackage->guix-package=0A=20=20=20(memoize=20= hackage->guix-package-impl))=0A--=20=0A2.21.0=0A=0A= --Apple-Mail=_43497E60-1C51-4F0F-97C6-BBD75705C83E--