如何将我的Haskell软件包的文档提供给Hackage?

时间:2015-09-24 18:51:47

标签: haskell hackage haddock

  

更新:此问题现在已过时。 Hackage现在使用Haskell   版本7.10.2来构建,所以以下失败不会   发生。这一变化似乎也破坏了一些脚本   在答案中提到。

如何将我的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.

我无法降级我的软件包的要求(这似乎是自动构建的障碍),我看到有些软件包说&#34;用户上传的文档&#34;。但是,任何构建尝试都会失败(见下文)。

如何将我的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'

但是

  

无效的文档tarball:tar存档中的文件不在   预期目录&#39; MyPackage-0.1.0.2-docs&#39;

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

但得到同样的错误。

2 个答案:

答案 0 :(得分:5)

您的图书馆需要base >= 4.8.1.0吗?

这就是问题所在 - Hackage正在尝试使用与您的cabal文件冲突的base == 4.7.0.1

我会看看你是否可以使用Hackage正在使用的库来构建你的库。

自行将文档上传到Hackage的一些链接:

答案 1 :(得分:4)

即使文档建立在hackage上,它们也需要一些时间才会出现,并且在某些时候它们会被打破很长一段时间。我已习惯使用此处所述的neil工具执行此操作:

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

我首先安装neil(在我的磁盘上的另一个沙箱中),然后在你的库的文件夹中安装:

neil docs --username=YourHackageUsername

它会为您处理所有细节!