Gitosis sync fixes and improvements
- Fixed some remaining issues caused by the update process. - Support custom rules for the repositories. Currnetly only supports allowing users.
This commit is contained in:
@@ -45,8 +45,8 @@ function handleSingleUserPHID(
|
|||||||
return array();
|
return array();
|
||||||
}
|
}
|
||||||
|
|
||||||
$keys = id(new PhabricatorUserSSHKey())->loadAllWhere(
|
$keys = id(new PhabricatorAuthSSHKey())->loadAllWhere(
|
||||||
'userPHID = %s',
|
'objectPHID = %s',
|
||||||
$user->getPHID());
|
$user->getPHID());
|
||||||
|
|
||||||
$members = array();
|
$members = array();
|
||||||
@@ -73,6 +73,27 @@ function handleSingleUserPHID(
|
|||||||
return $members;
|
return $members;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function handleCustomPolicy(
|
||||||
|
$keydir, $viewer, $policy, $system_keys, &$used_keys) {
|
||||||
|
$members = array();
|
||||||
|
$rules = $policy->getRules();
|
||||||
|
foreach ($rules as $rule) {
|
||||||
|
// Everyone is denied by default anyway
|
||||||
|
if ($rule['action'] == 'allow') {
|
||||||
|
if ($rule['rule'] == 'PhabricatorPolicyRuleUsers') {
|
||||||
|
foreach ($rule['value'] as $userPHID) {
|
||||||
|
$members = array_merge($members,
|
||||||
|
handleSingleUserPHID($keydir, $viewer, $userPHID,
|
||||||
|
$system_keys, $used_keys));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/* pass */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $members;
|
||||||
|
}
|
||||||
|
|
||||||
// Parse repository and put it's members to the config file
|
// Parse repository and put it's members to the config file
|
||||||
function handleSingleRepository(
|
function handleSingleRepository(
|
||||||
$keydir, $viewer, $repository, $all_repositories, $system_keys,
|
$keydir, $viewer, $repository, $all_repositories, $system_keys,
|
||||||
@@ -82,11 +103,11 @@ function handleSingleRepository(
|
|||||||
$repository);
|
$repository);
|
||||||
|
|
||||||
$pushable = $policies[DiffusionPushCapability::CAPABILITY];
|
$pushable = $policies[DiffusionPushCapability::CAPABILITY];
|
||||||
$type = phid_get_type($pushable->getPHID());
|
$type = $pushable->getType();
|
||||||
|
|
||||||
$members = array();
|
$members = array();
|
||||||
|
|
||||||
if ($type == PhabricatorProjectProjectPHIDType::TYPECONST) {
|
if ($type == PhabricatorPolicyType::TYPE_PROJECT) {
|
||||||
$project = id(new PhabricatorProjectQuery())
|
$project = id(new PhabricatorProjectQuery())
|
||||||
->setViewer($viewer)
|
->setViewer($viewer)
|
||||||
->needMembers(true)
|
->needMembers(true)
|
||||||
@@ -99,11 +120,12 @@ function handleSingleRepository(
|
|||||||
handleSingleUserPHID($keydir, $viewer, $memberPHID,
|
handleSingleUserPHID($keydir, $viewer, $memberPHID,
|
||||||
$system_keys, $used_keys));
|
$system_keys, $used_keys));
|
||||||
}
|
}
|
||||||
} else if ($type == PhabricatorPeopleUserPHIDType::TYPECONST) {
|
} else if ($type == PhabricatorPolicyType::TYPE_USER) {
|
||||||
$members = handleSingleUserPHID(
|
$members = handleSingleUserPHID(
|
||||||
$keydir, $viewer, $pushable->getPHID(), $system_keys, $used_keys);
|
$keydir, $viewer, $pushable->getPHID(), $system_keys, $used_keys);
|
||||||
} else if ($type == PhabricatorPolicyPHIDTypePolicy::TYPECONST) {
|
} else if ($type == PhabricatorPolicyType::TYPE_CUSTOM) {
|
||||||
/* pass */
|
$members = handleCustomPolicy(
|
||||||
|
$keydir, $viewer, $pushable, $system_keys, $used_keys);
|
||||||
} else {
|
} else {
|
||||||
/* pass */
|
/* pass */
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user