我正在尝试为我的客户托管多个 Mercurial 存储库。我需要分别控制对每个存储库的访问 — 不仅是推送访问,还有克隆访问。
我有一.htaccess
组需要全局身份验证的内容:
AuthUserFile /path/to/hgweb.passwd
AuthGroupFile /dev/null
AuthName "Chris Lawlor Client Mercurial Repositories"
AuthType Basic
<Limit GET POST PUT>
Require valid-user
</Limit>
<FilesMatch "\.(htaccess|passwd|config|bak)$">
Order Allow,Deny
Deny from all
</FilesMatch>
然后在每个存储库中,我都有一个.hg/hgrc
需要有效用户的文件
[web]
allow_push = <comma seperated user list>
这几乎满足了我的需求。问题是我需要添加全部我的客户hgweb.passwd
,这让他们可以克隆访问全部的存储库。
我能想到的唯一解决方案是再提交.htaccess
一份.passwd
每个存储库。但我真的不想这样做,这似乎有点复杂。我已经可以使用该设置在存储库hgrc
文件中为每个存储库指定授权用户列表allow_push
。如果也有一个allow_clone
设置就好了……
我找到的所有文档hgwebdir.cgi
都不完整。我读过:
- http://mercurial.selenic.com/wiki/HgWebDirStepByStep
- http://hgbook.red-bean.com/read/collaborating-with-other-people.html#sec:collab:cgi
- http://hgbook.red-bean.com/read/collaborating-with-other-people.html
以及其他。我还没有找到完整的设置列表hgrc
。
我猜这更多的是一个 Apache 问题而不是 Mercurial 问题。
除非我能找到更好的方法,否则我将为每个 repo 使用单独的文件.htaccess
。.passwd
这是 Webfaction 上的虚拟主机(如果有必要的话)——设置大致如下在他们的文档中描述。
编辑:看起来客户端存储库中的所有文件都将被忽略。我认为这是因为所有请求都由webroot.htaccess
处理,因此只有webroot 中的才会生效。hgwebdir.cgi
.htaccess
答案1
我在hgrc(5) 手册页:
允许读取
如果用户尚未因 的内容而被拒绝访问存储库
deny_read
,则此列表将确定是否授予用户访问存储库的权限。如果此列表不为空,并且用户未经身份验证或不在列表中(以空格或 分隔,
),则拒绝用户访问。如果列表为空或未设置,则默认允许所有用户访问。设置allow_read
为特殊值相当于未设置(即允许所有用户访问)。列表之后将检查列表*
的内容。allow_read
deny_read