1

这似乎是一个愚蠢的想法,但无论如何,如果没有 hgweb.cgi 中捆绑的任何 web 界面功能,是否可以通过 http 提供一个 mercurial 存储库。

我希望用户能够通过 http:// 克隆/推送存储库,但我不希望他们能够通过 Web 界面查看存储库或文件。

静态 HTTP 是一种选择,但官方的 mercurial 文档声称这非常慢。

如果这不是微不足道的,是否有人知道通过 http 为 hg 存储库提供服务的示例代码,最好不支持浏览器界面?

提前致谢。

4

2 回答 2

2

我快速检查了 hgweb 文件并发现了这一点:

找到hgweb/webcommands.py您的 mercurial 安装文件,然后在编辑器中打开它。更改文件顶部的以下代码:

__all__ = [
   'log', 'rawfile', 'file', 'changelog', 'shortlog', 'changeset', 'rev',
   'manifest', 'tags', 'bookmarks', 'branches', 'summary', 'filediff', 'diff',
   'annotate', 'filelog', 'archive', 'static', 'graph', 'help',
]

对此:

__all__ = [
]

这将禁用所有网络命令;您仍然可以查看 repos 列表,但看不到有关它们的更多信息。

我确实检查了hg cloneand hg pull,但没有hg push

于 2011-11-15T09:02:48.493 回答
0

我不知道您为什么要限制对 UI 部分的访问,因为如果他们可以访问文件,则可以访问此处提供的任何信息,但就这样吧:P

如果您想要一些干净的解决方案,我认为获取 hgweb.cgi 的代码并重写它不会太难,但我认为您也可以更快地做一些事情:hg serve -t /dev/null

这将/dev/null用作 UI 部分的模板,因此用户在连接到服务器时会收到“内部服务器错误”页面,但可以通过hg.

唯一的缺点是,如果通过浏览器进行访问,日志将包含错误字段。

PS:如果您不在 Unix 系统上,只需使用任何空目录作为模板的来源。

于 2011-11-15T04:24:28.880 回答