控制通过hgwebdir.cgi服务的多个mercurial回购的克隆访问

可能重复:
使用Mercurial和Apache读取访问控制

我正在尝试为我的客户托pipe多个Mercurial存储库。 我需要单独控制对每个存储库的访问,而不仅仅是访问,而是克隆。

我有一个需要全局身份validation的.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 ,这使得他们可以克隆所有存储库。

我能想到的唯一解决scheme是在每个存储库中都有另一个.htaccess.passwd文件。 我不想这样做,似乎有点复杂。 我可以使用allow_push设置hgrc仓库hgrc文件中的每个仓库指定一个授权用户列表。 如果只有一个allow_clone设置以及…

我为hgwebdir.cgifind的所有文档都不完整。 我读了:

  • 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

和别的。 我还没有find一个完整的hgrc设置列表。

我猜这是一个Apache问题,而不是一个Mercurial问题。

除非我能find更好的方法,否则我将为每个回购单独提供一个.htaccess.passwd文件。

这是一个Webfaction上的虚拟主机,如果它很重要的话 – 就像在他们的文档中描述的一样。

编辑:看起来像客户端回购任何.htaccess文件将被忽略。 我认为这是因为所有请求都由webroot中的hgwebdir.cgi提供,所以只有webroot中的.htaccess才会生效。

我在hgrc(5)手册页find了答案:

allow_read

如果由于deny_read的内容,用户尚未被拒绝存储库访问,则此列表将确定是否将存储库访问权授予用户。 如果该列表不为空,且用户未经身份validation或者不在列表中(由空格或,分隔),则拒绝访问该用户。 如果列表为空或未设置,则默认情况下允许所有用户访问。 将allow_read设置为特殊值*相当于未设置(即允许所有用户访问)。 allow_read列表的内容在deny_read列表之后被检查。