2015-09-24 4 views
6

UPDATE: This question is now out of date. Hackage now uses Haskell version 7.10.2 to build, so the following failure does not occur. The change also appears to have broken some of the scripts mentioned in the answers.Comment obtenir la documentation de mon paquet Haskell sur Hackage?

Comment obtenir la documentation de mon paquet Haskell sur Hackage?

Si je comprends bien ce que Hackage serait les construire, mais je reçois une erreur

Resolving dependencies... 
cabal: Could not resolve dependencies: 
trying: MyPackage-0.1.0.2 (user goal) 
next goal: base (dependency of MyPackage-0.1.0.2) 
rejecting: base-4.7.0.1/installed-e4b... (conflict: MyPackage => base>=4.8 && 
<4.9) 
rejecting: base-4.8.1.0, 4.8.0.0, 4.7.0.2, 4.7.0.1, 4.7.0.0, 4.6.0.1, 4.6.0.0, 
4.5.1.0, 4.5.0.0, 4.4.1.0, 4.4.0.0, 4.3.1.0, 4.3.0.0, 4.2.0.2, 4.2.0.1, 
4.2.0.0, 4.1.0.0, 4.0.0.0, 3.0.3.2, 3.0.3.1 (global constraint requires 
installed instance) 
Dependency tree exhaustively searched. 

Je ne suis pas en mesure de déclasser les exigences de mon colis (ce qui semble être l'obstacle à une accumulation automatique) et Je vois que certains paquets disent "Documents téléchargés par l'utilisateur". Cependant, toute tentative de construction échoue (voir ci-dessous.)

Comment obtenir la documentation de mon paquet Haskell sur Hackage? En particulier, que dois-je faire pour les télécharger moi-même?


J'ai tried

$ cp -R ./dist/doc/html/MyPackage/ MyPackage-0.1.0.2-docs 
$ tar cvzf --format=ustar -f MyPackage-0.1.0.2-docs.tar.gz MyPackage-0.1.0.2-docs 
$ curl -X PUT -H 'Content-Type: application/x-tar' -H 'Content-Encoding: gzip' --data-binary '@MyPackage-0.1.0.2-docs.tar.gz' 'https://hackage.haskell.org/package/MyPackage-0.1.0.2/docs' -u 'Rax' 

mais se

Invalid documentation tarball: File in tar archive is not in the expected directory 'MyPackage-0.1.0.2-docs'


name:     MyPackage 
version:    0.1.0.2 
license:    BSD3 
license-file:   LICENSE 
-- copyright:   
category:    Development 
build-type:    Simple 
-- extra-source-files: 
cabal-version:   >= 1.22.1.1 

library 
    -- default-extensions: Trustworthy 
    exposed-modules: MyMod.A, 
         MyMod.A.B 
    other-modules:  MyMod.C 
    -- other-extensions: 
    build-depends:  base >= 4.8.1.0 && <4.9, 
         containers >= 0.5.5.1, 
         split >= 0.2.2, 
         MissingH >= 1.3.0.1 
    -- hs-source-dirs: 
    default-language: Haskell2010 

J'ai aussi essayé ma propre version des plusieurs scripts liés ci-dessous, mais obtenez la même erreur:

#!/bin/bash 

cabal haddock --hyperlink-source --html-location='/package/$pkg-$version/docs' --contents-location='/package/$pkg' 
S=$? 
if [ "${S}" -eq "0" ]; then 
    cd "dist/doc/html" 
    DDIR="${1}-${2}-docs" 
    cp -r "${1}" "${DDIR}" && tar -c -v -z --format=ustar -f "${DDIR}.tar.gz" "${DDIR}" 
    CS=$? 
    if [ "${CS}" -eq "0" ]; then 
     echo "Uploading to Hackage…" 
     curl -X PUT -H 'Content-Type: application/x-tar' -H 'Content-Encoding: gzip' --data-binary "@${DDIR}.tar.gz" --digest --netrc "https://hackage.haskell.org/package/${1}-${2}/docs" 
     exit $? 
    else 
     echo "Error when packaging the documentation" 
     exit $CS 
    fi 
else 
    echo "Error when trying to build the package." 
    exit $S 
fi 

que j'invoque avec

myscript MyPackage 0.1.0.2 

mais obtenir la même erreur.

+0

Quel est votre fichier .cabal? – ErikR

+0

@ user5402: Ajout du fichier .cabal. – orome

+0

Votre commande 'tar' se termine par' MyPackage-0.0.1.3-docs', qui ne correspond pas à la version du reste. Avez-vous peut-être emballer le mauvais par complétion accidentelle de tabulation? –

Répondre

4

Même si les docs construiraient sur hackage, ils prennent un certain temps à apparaître et à un moment donné, ils ont été brisés pendant une longue période de temps. Je me suis habitué à le faire avec l'outil neil comme décrit ici:

http://neilmitchell.blogspot.si/2014/10/fixing-haddock-docs-on-hackage.html

J'ai d'abord installer neil (dans un autre bac à sable sur mon disque), puis, dans le dossier de votre bibliothèque:

neil docs --username=YourHackageUsername 

Il prend soin de tous les détails pour vous!

+0

Cela les construirait localement avec ma version de 'base' cependant, non? – orome

+0

Oui, honnêtement, cela fonctionne de manière si transparente que je ne suis pas sûr à 100% comment cela fonctionne, mais je suis assez sûr qu'il fait tout localement et télécharge simplement le produit final à hackage. –

+0

Depuis que je suis arrivé à l'étape de téléchargement avec les autres scripts, je pense que la meilleure solution est de déterminer quel "fichier dans l'archive tar n'est pas dans le répertoire attendu". Y a-t-il quelque chose que Hackage a besoin d'être téléchargé, qui n'aurait pas été construit localement? un réglage que je devrais ajouter à ma configuration (locale) de Cabal/Haddock, peut-être? – orome

5

Votre bibliothèque nécessite-t-elle base >= 4.8.1.0?

C'est le problème - Hackage essaie d'utiliser base == 4.7.0.1 qui est en conflit avec votre fichier cabal.

Je verrais si vous pouvez construire votre bibliothèque avec la base que Hackage utilise.

Quelques liens vers le téléchargement docs pour vous Hackage:

+0

Ah. Je vois. C'est pourquoi il semble être un problème si commun (fouiner autour je vois l'exact, mot pour mot, erreur pour quelques douzaines de paquets juste frappés au hasard). Je vais voir si je peux me retirer. Si non, quelles sont mes options pour obtenir des docs sur Hackage? – orome

+0

Ajout de liens pour télécharger vous-même des documents. – ErikR

+3

Yuk. La cabale doit faire ça. Pas étonnant que ce soit un problème commun. – orome