Page MenuHomePhabricator

D14930.diff
No OneTemporary

D14930.diff

diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -603,7 +603,6 @@
'DiffusionFileContentQuery' => 'applications/diffusion/query/filecontent/DiffusionFileContentQuery.php',
'DiffusionFileContentQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionFileContentQueryConduitAPIMethod.php',
'DiffusionFindSymbolsConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionFindSymbolsConduitAPIMethod.php',
- 'DiffusionGetCommitsConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionGetCommitsConduitAPIMethod.php',
'DiffusionGetLintMessagesConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionGetLintMessagesConduitAPIMethod.php',
'DiffusionGetRecentCommitsByPathConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionGetRecentCommitsByPathConduitAPIMethod.php',
'DiffusionGitBranch' => 'applications/diffusion/data/DiffusionGitBranch.php',
@@ -4566,7 +4565,6 @@
'DiffusionFileContentQuery' => 'DiffusionQuery',
'DiffusionFileContentQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod',
'DiffusionFindSymbolsConduitAPIMethod' => 'DiffusionConduitAPIMethod',
- 'DiffusionGetCommitsConduitAPIMethod' => 'DiffusionConduitAPIMethod',
'DiffusionGetLintMessagesConduitAPIMethod' => 'DiffusionConduitAPIMethod',
'DiffusionGetRecentCommitsByPathConduitAPIMethod' => 'DiffusionConduitAPIMethod',
'DiffusionGitBranch' => 'Phobject',
diff --git a/src/applications/diffusion/conduit/DiffusionGetCommitsConduitAPIMethod.php b/src/applications/diffusion/conduit/DiffusionGetCommitsConduitAPIMethod.php
deleted file mode 100644
--- a/src/applications/diffusion/conduit/DiffusionGetCommitsConduitAPIMethod.php
+++ /dev/null
@@ -1,293 +0,0 @@
-<?php
-
-final class DiffusionGetCommitsConduitAPIMethod
- extends DiffusionConduitAPIMethod {
-
- public function getAPIMethodName() {
- return 'diffusion.getcommits';
- }
-
- public function getMethodDescription() {
- return pht('Retrieve Diffusion commit information.');
- }
-
- public function getMethodStatus() {
- return self::METHOD_STATUS_DEPRECATED;
- }
-
- public function getMethodStatusDescription() {
- return pht('Obsoleted by %s.', 'diffusion.querycommits');
- }
-
- protected function defineParamTypes() {
- return array(
- 'commits' => 'required list<string>',
- );
- }
-
- protected function defineReturnType() {
- return 'nonempty list<dict<string, wild>>';
- }
-
- protected function execute(ConduitAPIRequest $request) {
- $results = array();
-
- $commits = $request->getValue('commits');
- $commits = array_fill_keys($commits, array());
- foreach ($commits as $name => $info) {
- $matches = null;
- if (!preg_match('/^r([A-Z]+)([0-9a-f]+)\z/', $name, $matches)) {
- $results[$name] = array(
- 'error' => 'ERR-UNPARSEABLE',
- );
- unset($commits[$name]);
- continue;
- }
- $commits[$name] = array(
- 'callsign' => $matches[1],
- 'commitIdentifier' => $matches[2],
- );
- }
-
- if (!$commits) {
- return $results;
- }
-
- $callsigns = ipull($commits, 'callsign');
- $callsigns = array_unique($callsigns);
- $repos = id(new PhabricatorRepositoryQuery())
- ->setViewer($request->getUser())
- ->withCallsigns($callsigns)
- ->execute();
- $repos = mpull($repos, null, 'getCallsign');
-
- foreach ($commits as $name => $info) {
- $repo = idx($repos, $info['callsign']);
- if (!$repo) {
- $results[$name] = $info + array(
- 'error' => 'ERR-UNKNOWN-REPOSITORY',
- );
- unset($commits[$name]);
- continue;
- }
- $commits[$name] += array(
- 'repositoryPHID' => $repo->getPHID(),
- 'repositoryID' => $repo->getID(),
- );
- }
-
- if (!$commits) {
- return $results;
- }
-
- // Execute a complicated query to figure out the primary commit information
- // for each referenced commit.
- $cdata = $this->queryCommitInformation($commits, $repos);
-
- // We've built the queries so that each row also has the identifier we used
- // to select it, which might be a git prefix rather than a full identifier.
- $ref_map = ipull($cdata, 'commitIdentifier', 'commitRef');
-
- $cobjs = id(new PhabricatorRepositoryCommit())->loadAllFromArray($cdata);
- $cobjs = mgroup($cobjs, 'getRepositoryID', 'getCommitIdentifier');
- foreach ($commits as $name => $commit) {
-
- // Expand short git names into full identifiers. For SVN this map is just
- // the identity.
- $full_identifier = idx($ref_map, $commit['commitIdentifier']);
-
- $repo_id = $commit['repositoryID'];
- unset($commits[$name]['repositoryID']);
-
- if (empty($full_identifier) ||
- empty($cobjs[$commit['repositoryID']][$full_identifier])) {
- $results[$name] = $commit + array(
- 'error' => 'ERR-UNKNOWN-COMMIT',
- );
- unset($commits[$name]);
- continue;
- }
-
- $cobj_arr = $cobjs[$commit['repositoryID']][$full_identifier];
- $cobj = head($cobj_arr);
-
- $commits[$name] += array(
- 'epoch' => $cobj->getEpoch(),
- 'commitPHID' => $cobj->getPHID(),
- 'commitID' => $cobj->getID(),
- );
-
- // Upgrade git short references into full commit identifiers.
- $identifier = $cobj->getCommitIdentifier();
- $commits[$name]['commitIdentifier'] = $identifier;
-
- $callsign = $commits[$name]['callsign'];
- $uri = "/r{$callsign}{$identifier}";
- $commits[$name]['uri'] = PhabricatorEnv::getProductionURI($uri);
- }
-
- if (!$commits) {
- return $results;
- }
-
- $commits = $this->addRepositoryCommitDataInformation($commits);
- $commits = $this->addDifferentialInformation($commits, $request);
- $commits = $this->addManiphestInformation($commits);
-
- foreach ($commits as $name => $commit) {
- $results[$name] = $commit;
- }
-
- return $results;
- }
-
- /**
- * Retrieve primary commit information for all referenced commits.
- */
- private function queryCommitInformation(array $commits, array $repos) {
- assert_instances_of($repos, 'PhabricatorRepository');
- $conn_r = id(new PhabricatorRepositoryCommit())->establishConnection('r');
- $repos = mpull($repos, null, 'getID');
-
- $groups = array();
- foreach ($commits as $name => $commit) {
- $groups[$commit['repositoryID']][] = $commit['commitIdentifier'];
- }
-
- // NOTE: MySQL goes crazy and does a massive table scan if we build a more
- // sensible version of this query. Make sure the query plan is OK if you
- // attempt to reduce the craziness here. METANOTE: The addition of prefix
- // selection for Git further complicates matters.
- $query = array();
- $commit_table = id(new PhabricatorRepositoryCommit())->getTableName();
-
- foreach ($groups as $repository_id => $identifiers) {
- $vcs = $repos[$repository_id]->getVersionControlSystem();
- $is_git = ($vcs == PhabricatorRepositoryType::REPOSITORY_TYPE_GIT);
- if ($is_git) {
- foreach ($identifiers as $identifier) {
- if (strlen($identifier) < 7) {
- // Don't bother with silly stuff like 'rX2', which will select
- // 1/16th of all commits. Note that with length 7 we'll still get
- // collisions in repositories at the tens-of-thousands-of-commits
- // scale.
- continue;
- }
- $query[] = qsprintf(
- $conn_r,
- 'SELECT %T.*, %s commitRef
- FROM %T WHERE repositoryID = %d
- AND commitIdentifier LIKE %>',
- $commit_table,
- $identifier,
- $commit_table,
- $repository_id,
- $identifier);
- }
- } else {
- $query[] = qsprintf(
- $conn_r,
- 'SELECT %T.*, commitIdentifier commitRef
- FROM %T WHERE repositoryID = %d
- AND commitIdentifier IN (%Ls)',
- $commit_table,
- $commit_table,
- $repository_id,
- $identifiers);
- }
- }
-
- return queryfx_all(
- $conn_r,
- '%Q',
- implode(' UNION ALL ', $query));
- }
-
- /**
- * Enhance the commit list with RepositoryCommitData information.
- */
- private function addRepositoryCommitDataInformation(array $commits) {
- $commit_ids = ipull($commits, 'commitID');
-
- $data = id(new PhabricatorRepositoryCommitData())->loadAllWhere(
- 'commitID in (%Ld)',
- $commit_ids);
- $data = mpull($data, null, 'getCommitID');
-
- foreach ($commits as $name => $commit) {
- if (isset($data[$commit['commitID']])) {
- $dobj = $data[$commit['commitID']];
- $commits[$name] += array(
- 'commitMessage' => $dobj->getCommitMessage(),
- 'commitDetails' => $dobj->getCommitDetails(),
- );
- }
-
- // Remove this information so we don't expose it via the API since
- // external services shouldn't be storing internal Commit IDs.
- unset($commits[$name]['commitID']);
- }
-
- return $commits;
- }
-
- /**
- * Enhance the commit list with Differential information.
- */
- private function addDifferentialInformation(
- array $commits,
- ConduitAPIRequest $request) {
-
- $commit_phids = ipull($commits, 'commitPHID');
-
- $revisions = id(new DifferentialRevisionQuery())
- ->setViewer($request->getUser())
- ->withCommitPHIDs($commit_phids)
- ->needCommitPHIDs(true)
- ->execute();
- $rev_phid_commit_phids_map = mpull($revisions, 'getCommitPHIDs', 'getPHID');
- $revisions = mpull($revisions, null, 'getPHID');
- foreach ($rev_phid_commit_phids_map as $rev_phid => $commit_phids) {
- foreach ($commits as $name => $commit) {
- $commit_phid = $commit['commitPHID'];
- if (in_array($commit_phid, $commit_phids)) {
- $revision = $revisions[$rev_phid];
- $commits[$name] += array(
- 'differentialRevisionID' => 'D'.$revision->getID(),
- 'differentialRevisionPHID' => $revision->getPHID(),
- );
- }
- }
- }
-
- return $commits;
- }
-
- /**
- * Enhances the commits list with Maniphest information.
- */
- private function addManiphestInformation(array $commits) {
- $task_type = DiffusionCommitHasTaskEdgeType::EDGECONST;
-
- $commit_phids = ipull($commits, 'commitPHID');
-
- $edge_query = id(new PhabricatorEdgeQuery())
- ->withSourcePHIDs($commit_phids)
- ->withEdgeTypes(array($task_type));
-
- $edges = $edge_query->execute();
-
- foreach ($commits as $name => $commit) {
- $task_phids = $edge_query->getDestinationPHIDs(
- array($commit['commitPHID']),
- array($task_type));
-
- $commits[$name] += array(
- 'taskPHIDs' => $task_phids,
- );
- }
-
- return $commits;
- }
-
-}
diff --git a/src/applications/diffusion/view/DiffusionView.php b/src/applications/diffusion/view/DiffusionView.php
--- a/src/applications/diffusion/view/DiffusionView.php
+++ b/src/applications/diffusion/view/DiffusionView.php
@@ -129,7 +129,6 @@
$summary = '') {
$commit_name = $repository->formatCommitName($commit);
- $callsign = $repository->getCallsign();
if (strlen($summary)) {
$commit_name .= ': '.$summary;
@@ -138,7 +137,7 @@
return phutil_tag(
'a',
array(
- 'href' => "/r{$callsign}{$commit}",
+ 'href' => $repository->getCommitURI($commit),
),
$commit_name);
}
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
@@ -38,7 +38,6 @@
$repository = $objects[$phid];
$monogram = $repository->getMonogram();
- $callsign = $repository->getCallsign();
$name = $repository->getName();
$uri = $repository->getURI();
diff --git a/src/applications/repository/worker/__tests__/PhabricatorChangeParserTestCase.php b/src/applications/repository/worker/__tests__/PhabricatorChangeParserTestCase.php
--- a/src/applications/repository/worker/__tests__/PhabricatorChangeParserTestCase.php
+++ b/src/applications/repository/worker/__tests__/PhabricatorChangeParserTestCase.php
@@ -1186,7 +1186,7 @@
pht(
'No test entry for commit "%s" in repository "%s"!',
$commit_identifier,
- $repository->getCallsign()));
+ $repository->getDisplayName()));
}
$changes = $this->parseCommit($repository, $commit);
diff --git a/src/applications/repository/worker/commitmessageparser/PhabricatorRepositoryCommitMessageParserWorker.php b/src/applications/repository/worker/commitmessageparser/PhabricatorRepositoryCommitMessageParserWorker.php
--- a/src/applications/repository/worker/commitmessageparser/PhabricatorRepositoryCommitMessageParserWorker.php
+++ b/src/applications/repository/worker/commitmessageparser/PhabricatorRepositoryCommitMessageParserWorker.php
@@ -319,8 +319,7 @@
->setDescription(
pht(
'Commit %s',
- 'r'.$this->repository->getCallsign().
- $this->commit->getCommitIdentifier()));
+ $this->commit->getMonogram()));
$parents = DiffusionQuery::callConduitWithDiffusionRequest(
$viewer,

File Metadata

Mime Type
text/plain
Expires
Mon, Apr 21, 5:14 AM (3 d, 15 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7376640
Default Alt Text
D14930.diff (13 KB)

Event Timeline