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.Как получить документацию для моего пакета Haskell на Hackage?

Как получить документацию для моего пакета Haskell на Hackage?

Мое понимание, что это Hackage будет строить их, но я получаю сообщение об ошибке

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. 

Я не в состоянии понизить требования к моему пакету (который, как представляется, препятствием для автоматической сборки) и Я вижу, что некоторые пакеты говорят «Документы, загруженные пользователем». Однако любая попытка построения сбоя (см. Ниже).

Как получить документацию для моего пакета Haskell на Hackage? В частности, что мне нужно сделать, чтобы загрузить их самостоятельно?


Я 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' 

но получить

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 

Я также попробовал свою собственную версию из нескольких сценариев, связанных ниже, но получить ту же ошибку:

#!/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 

который я вызываю с

myscript MyPackage 0.1.0.2 

но получить ту же ошибку.

+0

Каков ваш файл .cabal? – ErikR

+0

@ user5402: Добавлен файл .cabal. – orome

+0

Ваша команда 'tar' заканчивается' MyPackage-0.0.1.3-docs', которая не соответствует версии в остальном. Возможно, вы упаковали неправильный случайным завершением вкладки? –

ответ

4

Даже если документы будут опираться на hackage, они занять некоторое время, чтобы появиться и в какой-то момент они были сломаны в течение длительного периода времени. Я привык делать это с neil инструмента, как описано здесь:

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

Я сначала установить Neil (в другой песочнице на моем диске), а затем, в папке библиотеки:

neil docs --username=YourHackageUsername 

Он заботится обо всех деталях для вас!

+0

Это будет строить их локально с моей версией 'base', правда? – orome

+0

Да, честно говоря, он работает настолько прозрачно, что я не на 100% уверен, как это работает, но я уверен, что он делает все локально и просто загружает конечный продукт в хакер. –

+0

Поскольку я добираюсь до этапа загрузки с помощью других сценариев, я думаю, что лучший способ - выяснить, что «файл в tar-архиве не находится в ожидаемом каталоге». Возможно, что-то должно быть загружено Hackage, которое не было бы построено локально; параметр, который я должен добавить в мою (локальную) конфигурацию Cabal/Haddock, возможно? – orome

5

Требуется ли вашей библиотеке base >= 4.8.1.0?

В этом проблема - Hackage пытается использовать base == 4.7.0.1, который конфликтует с вашим файлом cabal.

Я бы посмотрел, можете ли вы построить свою библиотеку с базой, которую использует Hackage.

Некоторые ссылки на загрузку Документах Hackage себя:

+0

Ах. Понимаю. Вот почему, по-видимому, такая распространенная проблема (выкапывая, я вижу точный, слово в слово, ошибка для пары дюжины пакетов, которые просто попадают случайно). Я посмотрю, смогу ли я уйти. Если нет, то каковы мои варианты получения документов в Hackage? – orome

+0

Добавлены некоторые ссылки на загрузку документов. – ErikR

+3

Yuk. Кабалу нужно это сделать. Неудивительно, что это распространенная проблема. – orome