2014-03-08 02:05:00 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
final class DifferentialRevisionIDField
|
|
|
|
extends DifferentialCustomField {
|
|
|
|
|
2014-03-14 19:50:22 +01:00
|
|
|
private $revisionID;
|
|
|
|
|
2014-03-08 02:05:00 +01:00
|
|
|
public function getFieldKey() {
|
2014-03-08 18:13:51 +01:00
|
|
|
return 'differential:revision-id';
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getFieldKeyForConduit() {
|
2014-03-08 02:05:00 +01:00
|
|
|
return 'revisionID';
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getFieldName() {
|
|
|
|
return pht('Differential Revision');
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getFieldDescription() {
|
|
|
|
return pht(
|
|
|
|
'Ties commits to revisions and provides a permananent link between '.
|
|
|
|
'them.');
|
|
|
|
}
|
|
|
|
|
|
|
|
public function canDisableField() {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function shouldAppearInCommitMessage() {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function parseValueFromCommitMessage($value) {
|
2014-03-09 20:55:57 +01:00
|
|
|
return self::parseRevisionIDFromURI($value);
|
2014-03-08 02:05:00 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function renderCommitMessageValue(array $handles) {
|
2014-03-14 19:50:22 +01:00
|
|
|
$id = coalesce($this->revisionID, $this->getObject()->getID());
|
|
|
|
if (!$id) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
return PhabricatorEnv::getProductionURI('/D'.$id);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function readValueFromCommitMessage($value) {
|
|
|
|
$this->revisionID = $value;
|
2014-03-08 02:05:00 +01:00
|
|
|
}
|
|
|
|
|
2014-03-09 20:55:57 +01:00
|
|
|
private static function parseRevisionIDFromURI($uri) {
|
|
|
|
$path = id(new PhutilURI($uri))->getPath();
|
|
|
|
|
|
|
|
$matches = null;
|
|
|
|
if (preg_match('#^/D(\d+)$#', $path, $matches)) {
|
|
|
|
$id = (int)$matches[1];
|
|
|
|
// Make sure the URI is the same as our URI. Basically, we want to ignore
|
|
|
|
// commits from other Phabricator installs.
|
|
|
|
if ($uri == PhabricatorEnv::getProductionURI('/D'.$id)) {
|
|
|
|
return $id;
|
|
|
|
}
|
|
|
|
|
|
|
|
$allowed_uris = PhabricatorEnv::getAllowedURIs('/D'.$id);
|
|
|
|
|
|
|
|
foreach ($allowed_uris as $allowed_uri) {
|
|
|
|
if ($uri == $allowed_uri) {
|
|
|
|
return $id;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
2014-03-08 02:05:00 +01:00
|
|
|
}
|