use*_*925 5 security mercurial
是否有可能在mercurial中编写某种方式来拒绝影响存储库中特定命名分支的变更集?
我们有一个托管项目,并且希望允许任何开发人员将他们的更改推送到我们的存储库,只要他们在他们自己的命名分支中.这允许我们在同一个存储库中管理单个buildbot和共享沙箱(通过保持分支分开).我们想阻止任何从外部人员写入默认分支的尝试(我们会在内部合并他们的分支).
我们正在考虑使用pretxnchangegroup钩子,但这有两个问题:
1)用户可以使用任何用户名推送更改; 我们基本上只有一个http-auth保护存储库,要求任何用户名或密码实际连接到repo,但它不会检查提交中的用户名,以确保它们与用于推送的帐户匹配.
2)让我们说用户已经完成并在分支中开发,但随后他们在默认分支上进行最后一次提交.的hg push失败.在这一点上,开发人员做了什么来解决他们的问题?
有什么想法吗?
是的,你可以像你想象的那样很容易地做到这一点pretxnchangegroup。我将在 shell 中完成它,但如果你在 python 中完成它,它将是进程内的(因此更快)。
设置类似这样的内容作为你的 pretxnchangegroup:
#!/bin/sh
for thenode in $(hg log -r $HG_NODE:tip --template '{node}\n') ; do
if [ $(hg id --branch -r $thenode) = "default" ] ; then
echo Commits to default branch are not allowed -- bad changeset $thenode
exit 1
fi
done
Run Code Online (Sandbox Code Playgroud)
这确保了所有到达的变更集都不在分支“默认”上。
关于问题 1:如果您在 apache 后面运行,您将可以访问常用的 CGI 变量,因此您可以检查 $REMOTE_USER 以确保它与分支名称匹配(如果您想尝试强制执行)。
关于问题 2:如果用户看到他们正在推送无效变更集的消息,那么他们只需使用其余的变更集来推送,push -r并且稍后可以在默认情况下删除或修改其变更集。
最后,您是否考虑过为自动构建/主分支创建一个单独的克隆?让每个人都推送到暂存仓库,并且只有构建管理员在他/她对变更集感到满意时才将批准的变更集从暂存中拉入自动构建?您将获得与现在相同的工作流程(等待构建器合并),但麻烦要少得多。
| 归档时间: |
|
| 查看次数: |
1400 次 |
| 最近记录: |