这似乎是一个愚蠢的想法,但无论如何,如果没有 hgweb.cgi 中捆绑的任何 web 界面功能,是否可以通过 http 提供一个 mercurial 存储库。
我希望用户能够通过 http:// 克隆/推送存储库,但我不希望他们能够通过 Web 界面查看存储库或文件。
静态 HTTP 是一种选择,但官方的 mercurial 文档声称这非常慢。
如果这不是微不足道的,是否有人知道通过 http 为 hg 存储库提供服务的示例代码,最好不支持浏览器界面?
提前致谢。
我快速检查了 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 clone
and hg pull
,但没有hg push
。
我不知道您为什么要限制对 UI 部分的访问,因为如果他们可以访问文件,则可以访问此处提供的任何信息,但就这样吧:P
如果您想要一些干净的解决方案,我认为获取 hgweb.cgi 的代码并重写它不会太难,但我认为您也可以更快地做一些事情:hg serve -t /dev/null
这将/dev/null
用作 UI 部分的模板,因此用户在连接到服务器时会收到“内部服务器错误”页面,但可以通过hg
.
唯一的缺点是,如果通过浏览器进行访问,日志将包含错误字段。
PS:如果您不在 Unix 系统上,只需使用任何空目录作为模板的来源。