Differential D20422 Diff 48775 src/applications/repository/xaction/PhabricatorRepositoryFetchRefsTransaction.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/repository/xaction/PhabricatorRepositoryFetchRefsTransaction.php
- This file was added.
<?php | |||||
final class PhabricatorRepositoryFetchRefsTransaction | |||||
extends PhabricatorRepositoryTransactionType { | |||||
const TRANSACTIONTYPE = 'fetch-refs'; | |||||
public function generateOldValue($object) { | |||||
return $object->getFetchRules(); | |||||
} | |||||
public function applyInternalEffects($object, $value) { | |||||
$object->setFetchRules($value); | |||||
} | |||||
public function getTitle() { | |||||
$old = $this->getOldValue(); | |||||
$new = $this->getNewValue(); | |||||
if (!$new) { | |||||
return pht( | |||||
'%s set this repository to fetch all refs.', | |||||
$this->renderAuthor()); | |||||
} else if (!$old) { | |||||
return pht( | |||||
'%s set this repository to fetch refs: %s.', | |||||
$this->renderAuthor(), | |||||
$this->renderValue(implode(', ', $new))); | |||||
} else { | |||||
return pht( | |||||
'%s changed fetched refs from %s to %s.', | |||||
$this->renderAuthor(), | |||||
$this->renderValue(implode(', ', $old)), | |||||
$this->renderValue(implode(', ', $new))); | |||||
} | |||||
} | |||||
public function validateTransactions($object, array $xactions) { | |||||
$errors = array(); | |||||
foreach ($xactions as $xaction) { | |||||
$new_value = $xaction->getNewValue(); | |||||
if (!is_array($new_value) || !phutil_is_natural_list($new_value)) { | |||||
$errors[] = $this->newInvalidError( | |||||
pht( | |||||
'Fetch rules must be a list of strings, got "%s".', | |||||
phutil_describe_type($new_value)), | |||||
$xaction); | |||||
continue; | |||||
} | |||||
foreach ($new_value as $idx => $rule) { | |||||
if (!is_string($rule)) { | |||||
$errors[] = $this->newInvalidError( | |||||
pht( | |||||
'Fetch rule (at index "%s") must be a string, got "%s".', | |||||
$idx, | |||||
phutil_describe_type($rule)), | |||||
$xaction); | |||||
continue; | |||||
} | |||||
if (!strlen($rule)) { | |||||
$errors[] = $this->newInvalidError( | |||||
pht( | |||||
'Fetch rule (at index "%s") is empty. Fetch rules must '. | |||||
'contain text.', | |||||
$idx), | |||||
$xaction); | |||||
continue; | |||||
} | |||||
// Since we fetch ref "X" as "+X:X", don't allow rules to include | |||||
// colons. This is specific to Git and may not be relevant if | |||||
// Mercurial repositories eventually get fetch rules. | |||||
if (preg_match('/:/', $rule)) { | |||||
$errors[] = $this->newInvalidError( | |||||
pht( | |||||
'Fetch rule ("%s", at index "%s") is invalid: fetch rules '. | |||||
'must not contain colons.', | |||||
$rule, | |||||
$idx), | |||||
$xaction); | |||||
continue; | |||||
} | |||||
} | |||||
} | |||||
return $errors; | |||||
} | |||||
} |