Tweaks to svn access rights importer
- Make it work with repositories outside of svn.b.o. Useful for local debugging. - Make it aware of svn subpath repository setting. So now it's possible to restrict commit rights to a subpath in svn repository. - Make SVN repositories always available for read-only access;
This commit is contained in:
@@ -4,6 +4,12 @@
|
||||
$root = dirname(dirname(dirname(__FILE__)));
|
||||
require_once $root.'/scripts/__init_script__.php';
|
||||
|
||||
function getSVNRepositoryName($repository) {
|
||||
$uri = $repository->getRemoteURI();
|
||||
return preg_replace(
|
||||
'/https?\:\/\/.*?\/svnroot\/([^\/]+)\/?.*/', '$1', $uri);
|
||||
}
|
||||
|
||||
// Get user's heys and put them to the configuration
|
||||
function handleSingleUserPHID(
|
||||
$viewer, $userPHID, $repository, &$authfile, &$access) {
|
||||
@@ -28,13 +34,15 @@ function handleSingleUserPHID(
|
||||
}
|
||||
}
|
||||
|
||||
$uri = $repository->getRemoteURI();
|
||||
$repository_name = preg_replace(
|
||||
'/https?\:\/\/svn.blender.org\/svnroot\/([^\/]+)\/?.*/', '$1', $uri);
|
||||
if (!array_key_exists($repository_name, $access)) {
|
||||
$access[$repository_name] = array();
|
||||
$repository_name = getSVNRepositoryName($repository);
|
||||
|
||||
// Store write access settings to current subath
|
||||
$subpath = $repository->getDetail('svn-subpath');
|
||||
$repository_pathname = "$repository_name:/$subpath";
|
||||
if (!array_key_exists($repository_pathname, $access)) {
|
||||
$access[$repository_pathname] = array();
|
||||
}
|
||||
$access[$repository_name][] = $user_name;
|
||||
$access[$repository_pathname][] = $user_name;
|
||||
}
|
||||
|
||||
// Parse repository and put it's members to the config file
|
||||
@@ -47,6 +55,12 @@ function handleSingleRepository(
|
||||
$pushable = $policies[DiffusionCapabilityPush::CAPABILITY];
|
||||
$type = phid_get_type($pushable->getPHID());
|
||||
|
||||
// Make sure repository is always available for read-only access
|
||||
$repository_rootpath = getSVNRepositoryName($repository) . ':/';
|
||||
if (!array_key_exists($repository_rootpath, $access)) {
|
||||
$access[$repository_rootpath] = array();
|
||||
}
|
||||
|
||||
if ($type == PhabricatorProjectPHIDTypeProject::TYPECONST) {
|
||||
$project = id(new PhabricatorProjectQuery())
|
||||
->setViewer($viewer)
|
||||
@@ -93,12 +107,12 @@ function rebuildConfiguration($what) {
|
||||
}
|
||||
else if ($what == 'ACCESS') {
|
||||
foreach ($access as $repository => $users) {
|
||||
print("[$repository:/]\n");
|
||||
print("[$repository]\n");
|
||||
foreach ($users as $user) {
|
||||
print("$user = rw\n");
|
||||
}
|
||||
print("anonsvn = r\n");
|
||||
print("* = r\n");
|
||||
print("* = r\n\n");
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
Reference in New Issue
Block a user