Page MenuHomePhabricator

D11050.id26532.diff
No OneTemporary

D11050.id26532.diff

diff --git a/src/applications/diffusion/query/DiffusionCommitQuery.php b/src/applications/diffusion/query/DiffusionCommitQuery.php
--- a/src/applications/diffusion/query/DiffusionCommitQuery.php
+++ b/src/applications/diffusion/query/DiffusionCommitQuery.php
@@ -199,12 +199,19 @@
$result = array();
foreach ($commits as $commit) {
$prefix = 'r'.$commit->getRepository()->getCallsign();
+ $prefix_id = 'r'.$commit->getRepository()->getID().':';
$suffix = $commit->getCommitIdentifier();
if ($commit->getRepository()->isSVN()) {
if (isset($ids[$prefix.$suffix])) {
$result[$prefix.$suffix][] = $commit;
}
+ if (isset($ids[$prefix.':'.$suffix])) {
+ $result[$prefix.':'.$suffix][] = $commit;
+ }
+ if (isset($ids[$prefix_id.$suffix])) {
+ $result[$prefix_id.$suffix][] = $commit;
+ }
} else {
// This awkward construction is so we can link the commits up in O(N)
// time instead of O(N^2).
@@ -213,6 +220,12 @@
if (isset($ids[$prefix.$part])) {
$result[$prefix.$part][] = $commit;
}
+ if (isset($ids[$prefix.':'.$part])) {
+ $result[$prefix.':'.$part][] = $commit;
+ }
+ if (isset($ids[$prefix_id.$part])) {
+ $result[$prefix_id.$part][] = $commit;
+ }
if (isset($ids[$part])) {
$result[$part][] = $commit;
}
@@ -327,8 +340,9 @@
$bare = array();
foreach ($this->identifiers as $identifier) {
$matches = null;
- preg_match('/^(?:r([A-Z]+))?(.*)$/', $identifier, $matches);
- $repo = nonempty($matches[1], null);
+ // FIXME: Replace with CommitPHIDType::getCommitObjectNamePattern ??
+ preg_match('/^(?:r([A-Z]+:?|[0-9]+:))?(.*)$/', $identifier, $matches);
+ $repo = nonempty(rtrim($matches[1], ':'), null);
$identifier = nonempty($matches[2], null);
if ($repo === null) {
@@ -362,14 +376,28 @@
if ($refs) {
$callsigns = ipull($refs, 'callsign');
- $repos = id(new PhabricatorRepositoryQuery())
+
+ $repos = array();
+ $repos_by_callsign = id(new PhabricatorRepositoryQuery())
->setViewer($this->getViewer())
->withCallsigns($callsigns)
->execute();
- $repos = mpull($repos, null, 'getCallsign');
+ foreach ($repos_by_callsign as $obj) {
+ $repos[$obj->getCallsign()] = $obj;
+ }
+
+ $ids = array_filter($callsigns, 'is_numeric');
+ $repos_by_id = id(new PhabricatorRepositoryQuery())
+ ->setViewer($this->getViewer())
+ ->withIDs($ids)
+ ->execute();
+ foreach ($repos_by_id as $obj) {
+ $repos[$obj->getID()] = $obj;
+ }
foreach ($refs as $key => $ref) {
$repo = idx($repos, $ref['callsign']);
+
if (!$repo) {
continue;
}
diff --git a/src/applications/diffusion/remarkup/DiffusionCommitRemarkupRule.php b/src/applications/diffusion/remarkup/DiffusionCommitRemarkupRule.php
--- a/src/applications/diffusion/remarkup/DiffusionCommitRemarkupRule.php
+++ b/src/applications/diffusion/remarkup/DiffusionCommitRemarkupRule.php
@@ -22,7 +22,6 @@
->withIdentifiers($ids);
$query->execute();
-
return $query->getIdentifierMap();
}
diff --git a/src/applications/diffusion/remarkup/DiffusionRepositoryRemarkupRule.php b/src/applications/diffusion/remarkup/DiffusionRepositoryRemarkupRule.php
--- a/src/applications/diffusion/remarkup/DiffusionRepositoryRemarkupRule.php
+++ b/src/applications/diffusion/remarkup/DiffusionRepositoryRemarkupRule.php
@@ -8,18 +8,43 @@
}
protected function getObjectIDPattern() {
- return '[A-Z]+';
+ return '[A-Z0-9]+';
}
protected function loadObjects(array $ids) {
$viewer = $this->getEngine()->getConfig('viewer');
- $repositories = id(new PhabricatorRepositoryQuery())
- ->setViewer($viewer)
- ->withCallsigns($ids)
- ->execute();
+ $repo_ids = array(); $callsigns = array();
+ foreach ($ids as $id) {
+ if (is_numeric($id)) {
+ $repo_ids[] = $id;
+ } else {
+ $callsigns[] = $id;
+ }
+ }
- return mpull($repositories, null, 'getCallsign');
+ $results = array();
+ if ($callsigns) {
+ $objects = id(new PhabricatorRepositoryQuery())
+ ->setViewer($viewer)
+ ->withCallsigns($callsigns)
+ ->execute();
+ foreach ($objects as $object) {
+ $results[$object->getCallsign()] = $object;
+ }
+ }
+
+ if ($repo_ids) {
+ $objects = id(new PhabricatorRepositoryQuery())
+ ->setViewer($viewer)
+ ->withIDs($repo_ids)
+ ->execute();
+ foreach ($objects as $object) {
+ $results[$object->getID()] = $object;
+ }
+ }
+
+ return $results;
}
}
diff --git a/src/applications/repository/phid/PhabricatorRepositoryCommitPHIDType.php b/src/applications/repository/phid/PhabricatorRepositoryCommitPHIDType.php
--- a/src/applications/repository/phid/PhabricatorRepositoryCommitPHIDType.php
+++ b/src/applications/repository/phid/PhabricatorRepositoryCommitPHIDType.php
@@ -54,9 +54,9 @@
$min_qualified = PhabricatorRepository::MINIMUM_QUALIFIED_HASH;
return
- 'r[A-Z]+[1-9]\d*'.
+ 'r([A-Z]+:?|[0-9]+:)[1-9]\d*'.
'|'.
- 'r[A-Z]+[a-f0-9]{'.$min_qualified.',40}'.
+ 'r([A-Z]+:?|[0-9]+:)[a-f0-9]{'.$min_qualified.',40}'.
'|'.
'[a-f0-9]{'.$min_unqualified.',40}';
}
diff --git a/src/applications/repository/phid/PhabricatorRepositoryRepositoryPHIDType.php b/src/applications/repository/phid/PhabricatorRepositoryRepositoryPHIDType.php
--- a/src/applications/repository/phid/PhabricatorRepositoryRepositoryPHIDType.php
+++ b/src/applications/repository/phid/PhabricatorRepositoryRepositoryPHIDType.php
@@ -44,29 +44,41 @@
}
public function canLoadNamedObject($name) {
- return preg_match('/^r[A-Z]+$/', $name);
+ return preg_match('/^r[A-Z0-9]+$/', $name);
}
public function loadNamedObjects(
PhabricatorObjectQuery $query,
array $names) {
- $id_map = array();
+ $callsigns = array(); $ids = array();
foreach ($names as $name) {
$id = substr($name, 1);
- $id_map[$id][] = $name;
+ if (is_numeric($id)) {
+ $ids[] = $id;
+ } else {
+ $callsigns[] = $id;
+ }
}
- $objects = id(new PhabricatorRepositoryQuery())
- ->setViewer($query->getViewer())
- ->withCallsigns(array_keys($id_map))
- ->execute();
-
$results = array();
- foreach ($objects as $object) {
- $callsign = $object->getCallsign();
- foreach (idx($id_map, $callsign, array()) as $name) {
- $results[$name] = $object;
+ if ($callsigns) {
+ $objects = id(new PhabricatorRepositoryQuery())
+ ->setViewer($query->getViewer())
+ ->withCallsigns($callsigns)
+ ->execute();
+ foreach ($objects as $object) {
+ $results[$object->getCallsign()] = $object;
+ }
+ }
+
+ if ($ids) {
+ $objects = id(new PhabricatorRepositoryQuery())
+ ->setViewer($query->getViewer())
+ ->withIDs($ids)
+ ->execute();
+ foreach ($objects as $object) {
+ $results[$object->getID()] = $object;
}
}

File Metadata

Mime Type
text/plain
Expires
Tue, Apr 29, 8:07 AM (1 w, 1 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7387821
Default Alt Text
D11050.id26532.diff (7 KB)

Event Timeline