Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F14383805
D8069.id18258.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
5 KB
Referenced Files
None
Subscribers
None
D8069.id18258.diff
View Options
Index: src/applications/repository/conduit/ConduitAPI_repository_query_Method.php
===================================================================
--- src/applications/repository/conduit/ConduitAPI_repository_query_Method.php
+++ src/applications/repository/conduit/ConduitAPI_repository_query_Method.php
@@ -21,6 +21,7 @@
'phids' => 'optional list<phid>',
'callsigns' => 'optional list<string>',
'vcsTypes' => 'optional list<string>',
+ 'remoteURIs' => 'optional list<string>',
);
}
@@ -57,6 +58,11 @@
$query->withTypes($vcs_types);
}
+ $remote_uris = $request->getValue('remoteURIs', array());
+ if ($remote_uris) {
+ $query->withRemoteURIs($remote_uris);
+ }
+
$repositories = $query->execute();
$results = array();
Index: src/applications/repository/data/PhabricatorRepositoryURINormalizer.php
===================================================================
--- src/applications/repository/data/PhabricatorRepositoryURINormalizer.php
+++ src/applications/repository/data/PhabricatorRepositoryURINormalizer.php
@@ -40,6 +40,7 @@
const TYPE_GIT = 'git';
const TYPE_SVN = 'svn';
+ const TYPE_MERCURIAL = 'hg';
private $type;
private $uri;
@@ -48,6 +49,7 @@
switch ($type) {
case self::TYPE_GIT:
case self::TYPE_SVN:
+ case self::TYPE_MERCURIAL:
break;
default:
throw new Exception(pht('Unknown URI type "%s"!'));
@@ -79,6 +81,7 @@
return $this->uri;
case self::TYPE_SVN:
+ case self::TYPE_MERCURIAL:
$uri = new PhutilURI($this->uri);
if ($uri->getProtocol()) {
return $uri->getPath();
@@ -101,6 +104,7 @@
$path = preg_replace('/\.git$/', '', $path);
break;
case self::TYPE_SVN:
+ case self::TYPE_MERCURIAL:
break;
}
Index: src/applications/repository/query/PhabricatorRepositoryQuery.php
===================================================================
--- src/applications/repository/query/PhabricatorRepositoryQuery.php
+++ src/applications/repository/query/PhabricatorRepositoryQuery.php
@@ -9,6 +9,7 @@
private $types;
private $uuids;
private $nameContains;
+ private $remoteURIs;
const STATUS_OPEN = 'status-open';
const STATUS_CLOSED = 'status-closed';
@@ -70,6 +71,11 @@
return $this;
}
+ public function withRemoteURIs(array $uris) {
+ $this->remoteURIs = $uris;
+ return $this;
+ }
+
public function needCommitCounts($need_counts) {
$this->needCommitCounts = $need_counts;
return $this;
@@ -90,6 +96,7 @@
return $this;
}
+
protected function loadPage() {
$table = new PhabricatorRepository();
$conn_r = $table->establishConnection('r');
@@ -159,6 +166,7 @@
throw new Exception("Unknown status '{$status}'!");
}
+ // TODO: This should also be denormalized.
$hosted = $this->hosted;
switch ($hosted) {
case self::HOSTED_PHABRICATOR:
@@ -178,6 +186,17 @@
}
}
+ // TODO: Denormalize this, too.
+ if ($this->remoteURIs) {
+ $try_uris = $this->getNormalizedPaths();
+ $try_uris = array_fuse($try_uris);
+ foreach ($repositories as $key => $repository) {
+ if (!isset($try_uris[$repository->getNormalizedPath()])) {
+ unset($repositories[$key]);
+ }
+ }
+ }
+
return $repositories;
}
@@ -389,4 +408,28 @@
return 'PhabricatorApplicationDiffusion';
}
+ private function getNormalizedPaths() {
+ $normalized_uris = array();
+
+ // Since we don't know which type of repository this URI is in the general
+ // case, just generate all the normalizations. We could refine this in some
+ // cases: if the query specifies VCS types, or the URI is a git-style URI
+ // or an `svn+ssh` URI, we could deduce how to normalize it. However, this
+ // would be more complicated and it's not clear if it matters in practice.
+
+ foreach ($this->remoteURIs as $uri) {
+ $normalized_uris[] = new PhabricatorRepositoryURINormalizer(
+ PhabricatorRepositoryURINormalizer::TYPE_GIT,
+ $uri);
+ $normalized_uris[] = new PhabricatorRepositoryURINormalizer(
+ PhabricatorRepositoryURINormalizer::TYPE_SVN,
+ $uri);
+ $normalized_uris[] = new PhabricatorRepositoryURINormalizer(
+ PhabricatorRepositoryURINormalizer::TYPE_MERCURIAL,
+ $uri);
+ }
+
+ return array_unique(mpull($normalized_uris, 'getNormalizedPath'));
+ }
+
}
Index: src/applications/repository/storage/PhabricatorRepository.php
===================================================================
--- src/applications/repository/storage/PhabricatorRepository.php
+++ src/applications/repository/storage/PhabricatorRepository.php
@@ -485,6 +485,30 @@
return '/diffusion/'.$this->getCallsign().'/';
}
+ public function getNormalizedPath() {
+ switch ($this->getVersionControlSystem()) {
+ case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT:
+ $normalized_uri = new PhabricatorRepositoryURINormalizer(
+ PhabricatorRepositoryURINormalizer::TYPE_GIT,
+ $this->getURI());
+ break;
+ case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN:
+ $normalized_uri = new PhabricatorRepositoryURINormalizer(
+ PhabricatorRepositoryURINormalizer::TYPE_SVN,
+ $this->getURI());
+ break;
+ case PhabricatorRepositoryType::REPOSITORY_TYPE_MERCURIAL:
+ $normalized_uri = new PhabricatorRepositoryURINormalizer(
+ PhabricatorRepositoryURINormalizer::TYPE_MERCURIAL,
+ $this->getURI());
+ break;
+ default:
+ throw new Exception("Unrecognized version control system.");
+ }
+
+ return $normalized_uri->getNormalizedPath();
+ }
+
public function isTracked() {
return $this->getDetail('tracking-enabled', false);
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Dec 22, 8:37 AM (20 h, 27 m)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6917721
Default Alt Text
D8069.id18258.diff (5 KB)
Attached To
Mode
D8069: Allow repository lookup by remote URI
Attached
Detach File
Event Timeline
Log In to Comment