web-dev-qa-db-fra.com

Dépendance du paquet d'installation de Haskell Stack à partir de github

Est-il possible d'installer une version d'un paquet de github en utilisant une pile Haskell?

par exemple. Dans un fichier .cabal ou stack.yaml, comment puis-je pointer une dépendance sur un référentiel git/branche/révision?

23
Abraham P

La documentation de la section stack.yamlpackages donne des exemples de référence à des emplacements de packages plus complexes.

packages:
- location: .
- location: dir1/dir2
- location: https://example.com/foo/bar/baz-0.0.2.tar.gz
- location: http://github.com/yesodweb/wai/archive/2f8a8e1b771829f4a8a77c0111352ce45a14c30f.Zip
- location:
    git: [email protected]:commercialhaskell/stack.git
    commit: 6a86ee32e5b869a877151f74064572225e1a0398
- location:
    hg: https://example.com/hg/repo
    commit: da39a3ee5e6b4b0d3255bfef95601890afd80709

Ajoutez ensuite extra-dep: true à l’entrée package pour indiquer à stack de ne pas traiter le code extrait comme un élément sur lequel vous êtes en train de développer (par exemple, ne le chargez pas dans GHCi).

22
R B

Nouvelle syntaxe pour Stack> 1.7.1

Comme @Flip a commenté, la documentation de docs.haskellstack.org Clarifie la nouvelle syntaxe pour votre stack.yaml est la suivante:

extra-deps:
- github: apolishch/prime_table
  commit: a510622a824af999a809191e8c959b8ea5fa8bdb
- github: apolishch/reactive-banana
  commit: "74bac0f"
  subdirs: reactive-banana

Pour être clair: les dépendances dans votre stack.yaml s'assurent que les paquetages (qui ne sont pas dans Stackage) sont disponibles si un fichier .cabal de votre projet les veut, juste au cas où. 

Vous devez toujours spécifier le nom du package dans build-depends dans votre fichier .cabal pour indiquer que vous dépendez réellement du package.

Notez que la branche sur laquelle se trouve le commit n'a pas d'importance, et que les dépôts peuvent être des forks. Quand un paquet est dans un sous-répertoire, vous pouvez le spécifier, sinon il passera par défaut au niveau supérieur.

Syntaxe pour pile> 1.6.0

extra-deps:
- github: [email protected]:apolishch/prime_table.git
  commit: a510622a824af999a809191e8c959b8ea5fa8bdb

[Modifier] J'ai constaté que parfois la syntaxe de 1.7.1 échoue avec un message d'erreur

C:\Users\username\AppData\Local\Programs\stack\x86_64-windows\ghc-8.4.3\lib/../mingw/bin\ar.exe: .stack-work\dist\7d103d30\build\objs-10648\libHSpackagename-0.1.0.0-DlGXqyeqb9MDn2z8KhgjVb.a: No such file or directory

et j'ai résolu ce problème en utilisant la syntaxe 1.6.0, même si j'utilisais Stack 1.7.1. Si vous utilisez Travis, cela échouera car Travis ne peut pas cloner via SSH sans vos clés SSH, bien sûr. Mais vous pouvez toujours utiliser le lien https comme

extra-deps:
- github: https://github.com/apolishch/prime_table.git
  commit: a510622a824af999a809191e8c959b8ea5fa8bdb
5
PHPirate

Dans mon cas, je voulais dépendre d'un fork de pandoc, en spécifiant un commit précis. Cela a fonctionné en ajoutant ce qui suit à stack.yml:

extra-deps: - archive: https://github.com/italia/pandoc/archive/1327c564cccf5dfa387a2956443990d9854c85cd.Zip

Cela fonctionnerait avec n’importe quel branch-type URL sur Git. J'ai trouvé mon URL en parcourant les fichiers à la validation et en copiant l'URL à partir du bouton "Télécharger Zip".

Notez que ma branche a une version spécifique, supérieure à celle de toute version que Stack pourrait extraire du résolveur. Je repère la version dans les dépendances Cabal. Si la version de cette branche chevauchait une version disponible dans l'index du résolveur, je ne suis pas sûr de celle qui serait choisie

1
danza