更新:这个问题现在已经过时了 . 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.
我无法降级我的软件包的要求(这似乎是自动构建的障碍),我看到一些软件包说“用户上传的文档” . 但是,任何构建尝试都失败了(见下文) .
如何将我的Haskell包的文档提供给Hackage?特别是,我自己上传它们需要做什么?
$ 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存档中的文件不在预期目录“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
但得到同样的错误 .
2 回答
即使文档 Build 在hackage上,它们也需要一些时间才能出现,并且在某些时候它们会被打破很长一段时间 . 我已经习惯了这里描述的
neil
工具:http://neilmitchell.blogspot.si/2014/10/fixing-haddock-docs-on-hackage.html
我首先安装neil(在我的磁盘上的另一个沙箱中),然后,在你的库的文件夹中:
它会为您处理所有细节!
你的图书馆需要
base >= 4.8.1.0
吗?这就是问题 - Hackage试图使用
base == 4.7.0.1
与你的cabal文件冲突 .我会看看你是否可以使用Hackage正在使用的库来构建你的库 .
您自己将文档上传到Hackage的一些链接:
http://fuuzetsu.co.uk/blog/posts/2014-01-06-Fix-your-Hackage-documentation.html
https://gist.github.com/stbuehler/7068764