Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15427296
D8002.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
15 KB
Referenced Files
None
Subscribers
None
D8002.diff
View Options
Index: src/__phutil_library_map__.php
===================================================================
--- src/__phutil_library_map__.php
+++ src/__phutil_library_map__.php
@@ -467,7 +467,6 @@
'DifferentialUnitStatus' => 'applications/differential/constants/DifferentialUnitStatus.php',
'DifferentialUnitTestResult' => 'applications/differential/constants/DifferentialUnitTestResult.php',
'DifferentialViewPolicyFieldSpecification' => 'applications/differential/field/specification/DifferentialViewPolicyFieldSpecification.php',
- 'DiffusionBranchInformation' => 'applications/diffusion/data/DiffusionBranchInformation.php',
'DiffusionBranchTableController' => 'applications/diffusion/controller/DiffusionBranchTableController.php',
'DiffusionBranchTableView' => 'applications/diffusion/view/DiffusionBranchTableView.php',
'DiffusionBrowseController' => 'applications/diffusion/controller/DiffusionBrowseController.php',
@@ -3014,6 +3013,7 @@
1 => 'PhabricatorApplicationSearchResultsControllerInterface',
),
'DiffusionRepositoryNewController' => 'DiffusionController',
+ 'DiffusionRepositoryRef' => 'Phobject',
'DiffusionRepositoryRemarkupRule' => 'PhabricatorRemarkupRuleObject',
'DiffusionResolveUserQuery' => 'Phobject',
'DiffusionSSHGitReceivePackWorkflow' => 'DiffusionSSHGitWorkflow',
Index: src/applications/diffusion/conduit/ConduitAPI_diffusion_branchquery_Method.php
===================================================================
--- src/applications/diffusion/conduit/ConduitAPI_diffusion_branchquery_Method.php
+++ src/applications/diffusion/conduit/ConduitAPI_diffusion_branchquery_Method.php
@@ -21,62 +21,53 @@
);
}
+
protected function getGitResult(ConduitAPIRequest $request) {
$drequest = $this->getDiffusionRequest();
$repository = $drequest->getRepository();
- $limit = $request->getValue('limit');
- $offset = $request->getValue('offset');
$refs = id(new DiffusionLowLevelGitRefQuery())
->setRepository($repository)
->withIsOriginBranch(true)
->execute();
- $branches = array();
- foreach ($refs as $ref) {
- $branch = id(new DiffusionBranchInformation())
- ->setName($ref->getShortName())
- ->setHeadCommitIdentifier($ref->getCommitIdentifier());
-
- if (!$repository->shouldTrackBranch($branch->getName())) {
- continue;
- }
-
- $branches[] = $branch->toDictionary();
- }
-
- // NOTE: We can't apply the offset or limit until here, because we may have
- // filtered untrackable branches out of the result set.
+ return $this->processBranchRefs($request, $refs);
+ }
- if ($offset) {
- $branches = array_slice($branches, $offset);
- }
+ protected function getMercurialResult(ConduitAPIRequest $request) {
+ $drequest = $this->getDiffusionRequest();
+ $repository = $drequest->getRepository();
- if ($limit) {
- $branches = array_slice($branches, 0, $limit);
- }
+ $refs = id(new DiffusionLowLevelMercurialBranchesQuery())
+ ->setRepository($repository)
+ ->execute();
- return $branches;
+ return $this->processBranchRefs($request, $refs);
}
- protected function getMercurialResult(ConduitAPIRequest $request) {
+ private function processBranchRefs(ConduitAPIRequest $request, array $refs) {
$drequest = $this->getDiffusionRequest();
$repository = $drequest->getRepository();
$offset = $request->getValue('offset');
$limit = $request->getValue('limit');
- $branches = id(new DiffusionLowLevelMercurialBranchesQuery())
- ->setRepository($repository)
- ->execute();
+ foreach ($refs as $key => $ref) {
+ if (!$repository->shouldTrackBranch($ref->getShortName())) {
+ unset($refs[$key]);
+ }
+ }
+
+ // NOTE: We can't apply the offset or limit until here, because we may have
+ // filtered untrackable branches out of the result set.
if ($offset) {
- $branches = array_slice($branches, $offset);
+ $refs = array_slice($refs, $offset);
}
if ($limit) {
- $branches = array_slice($branches, 0, $limit);
+ $refs = array_slice($refs, 0, $limit);
}
- return mpull($branches, 'toDictionary');
+ return mpull($refs, 'toDictionary');
}
}
Index: src/applications/diffusion/conduit/ConduitAPI_diffusion_commitbranchesquery_Method.php
===================================================================
--- src/applications/diffusion/conduit/ConduitAPI_diffusion_commitbranchesquery_Method.php
+++ src/applications/diffusion/conduit/ConduitAPI_diffusion_commitbranchesquery_Method.php
@@ -39,7 +39,7 @@
$commit);
return DiffusionGitBranch::parseRemoteBranchOutput(
$contains,
- DiffusionBranchInformation::DEFAULT_GIT_REMOTE);
+ DiffusionGitBranch::DEFAULT_GIT_REMOTE);
}
}
@@ -48,7 +48,10 @@
$repository = $drequest->getRepository();
$commit = $request->getValue('commit');
- // TODO: This should use `branches`.
+ // TODO: This should use `branches`. Also, this entire method's API needs
+ // to be fixed to support multiple branch heads in Mercurial. We should
+ // probably return `DiffusionRepositoryRefs` and probably merge this into
+ // `diffusion.branchesquery`.
list($contains) = $repository->execxLocalCommand(
'log --template %s --limit 1 --rev %s --',
Index: src/applications/diffusion/controller/DiffusionBranchTableController.php
===================================================================
--- src/applications/diffusion/controller/DiffusionBranchTableController.php
+++ src/applications/diffusion/controller/DiffusionBranchTableController.php
@@ -18,15 +18,16 @@
$pager->setOffset($request->getInt('offset'));
// TODO: Add support for branches that contain commit
- $branches = DiffusionBranchInformation::newFromConduit(
- $this->callConduitWithDiffusionRequest(
- 'diffusion.branchquery',
- array(
- 'offset' => $pager->getOffset(),
- 'limit' => $pager->getPageSize() + 1
- )));
+ $branches = $this->callConduitWithDiffusionRequest(
+ 'diffusion.branchquery',
+ array(
+ 'offset' => $pager->getOffset(),
+ 'limit' => $pager->getPageSize() + 1
+ ));
$branches = $pager->sliceResults($branches);
+ $branches = DiffusionRepositoryRef::loadAllFromDictionaries($branches);
+
$content = null;
if (!$branches) {
$content = $this->renderStatusMessage(
@@ -35,7 +36,7 @@
} else {
$commits = id(new DiffusionCommitQuery())
->setViewer($viewer)
- ->withIdentifiers(mpull($branches, 'getHeadCommitIdentifier'))
+ ->withIdentifiers(mpull($branches, 'getCommitIdentifier'))
->withRepository($repository)
->execute();
Index: src/applications/diffusion/controller/DiffusionRepositoryController.php
===================================================================
--- src/applications/diffusion/controller/DiffusionRepositoryController.php
+++ src/applications/diffusion/controller/DiffusionRepositoryController.php
@@ -261,12 +261,11 @@
$limit = 15;
- $branches = DiffusionBranchInformation::newFromConduit(
- $this->callConduitWithDiffusionRequest(
- 'diffusion.branchquery',
- array(
- 'limit' => $limit + 1,
- )));
+ $branches = $this->callConduitWithDiffusionRequest(
+ 'diffusion.branchquery',
+ array(
+ 'limit' => $limit + 1,
+ ));
if (!$branches) {
return null;
}
@@ -274,9 +273,11 @@
$more_branches = (count($branches) > $limit);
$branches = array_slice($branches, 0, $limit);
+ $branches = DiffusionRepositoryRef::loadAllFromDictionaries($branches);
+
$commits = id(new DiffusionCommitQuery())
->setViewer($viewer)
- ->withIdentifiers(mpull($branches, 'getHeadCommitIdentifier'))
+ ->withIdentifiers(mpull($branches, 'getCommitIdentifier'))
->withRepository($drequest->getRepository())
->execute();
Index: src/applications/diffusion/data/DiffusionBranchInformation.php
===================================================================
--- src/applications/diffusion/data/DiffusionBranchInformation.php
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-
-final class DiffusionBranchInformation {
-
- const DEFAULT_GIT_REMOTE = 'origin';
-
- private $name;
- private $headCommitIdentifier;
-
- public function setName($name) {
- $this->name = $name;
- return $this;
- }
-
- public function getName() {
- return $this->name;
- }
-
- public function setHeadCommitIdentifier($head_commit_identifier) {
- $this->headCommitIdentifier = $head_commit_identifier;
- return $this;
- }
-
- public function getHeadCommitIdentifier() {
- return $this->headCommitIdentifier;
- }
-
- public static function newFromConduit(array $dicts) {
- $branches = array();
- foreach ($dicts as $dict) {
- $branches[] = id(new DiffusionBranchInformation())
- ->setName($dict['name'])
- ->setHeadCommitIdentifier($dict['headCommitIdentifier']);
- }
- return $branches;
- }
-
- public function toDictionary() {
- return array(
- 'name' => $this->getName(),
- 'headCommitIdentifier' => $this->getHeadCommitIdentifier()
- );
- }
-
- // TODO: These are hacks to make this compatible with DiffusionRepositoryRef
- // for PhabricatorRepositoryRefEngine. The two classes should be merged.
-
- public function getShortName() {
- return $this->getName();
- }
-
- public function getCommitIdentifier() {
- return $this->getHeadCommitIdentifier();
- }
-
-}
Index: src/applications/diffusion/data/DiffusionGitBranch.php
===================================================================
--- src/applications/diffusion/data/DiffusionGitBranch.php
+++ src/applications/diffusion/data/DiffusionGitBranch.php
@@ -2,6 +2,8 @@
final class DiffusionGitBranch {
+ const DEFAULT_GIT_REMOTE = 'origin';
+
/**
* Parse the output of 'git branch -r --verbose --no-abbrev' or similar into
* a map. For instance:
Index: src/applications/diffusion/data/DiffusionRepositoryRef.php
===================================================================
--- src/applications/diffusion/data/DiffusionRepositoryRef.php
+++ src/applications/diffusion/data/DiffusionRepositoryRef.php
@@ -1,10 +1,13 @@
<?php
-final class DiffusionRepositoryRef {
+/**
+ * @task serialization Serializing Repository Refs
+ */
+final class DiffusionRepositoryRef extends Phobject {
private $shortName;
private $commitIdentifier;
- private $rawFields;
+ private $rawFields = array();
public function setRawFields(array $raw_fields) {
$this->rawFields = $raw_fields;
@@ -33,4 +36,31 @@
return $this->shortName;
}
+
+/* -( Serialization )------------------------------------------------------ */
+
+
+ public function toDictionary() {
+ return array(
+ 'shortName' => $this->shortName,
+ 'commitIdentifier' => $this->commitIdentifier,
+ 'rawFields' => $this->rawFields,
+ );
+ }
+
+ public static function newFromDictionary(array $dict) {
+ return id(new DiffusionRepositoryRef())
+ ->setShortName($dict['shortName'])
+ ->setCommitIdentifier($dict['commitIdentifier'])
+ ->setRawFields($dict['rawFields']);
+ }
+
+ public static function loadAllFromDictionaries(array $dictionaries) {
+ $refs = array();
+ foreach ($dictionaries as $dictionary) {
+ $refs[] = self::newFromDictionary($dictionary);
+ }
+ return $refs;
+ }
+
}
Index: src/applications/diffusion/query/lowlevel/DiffusionLowLevelGitRefQuery.php
===================================================================
--- src/applications/diffusion/query/lowlevel/DiffusionLowLevelGitRefQuery.php
+++ src/applications/diffusion/query/lowlevel/DiffusionLowLevelGitRefQuery.php
@@ -32,7 +32,7 @@
if ($repository->isWorkingCopyBare()) {
$prefix = 'refs/heads/';
} else {
- $remote = DiffusionBranchInformation::DEFAULT_GIT_REMOTE;
+ $remote = DiffusionGitBranch::DEFAULT_GIT_REMOTE;
$prefix = 'refs/remotes/'.$remote.'/';
}
} else {
Index: src/applications/diffusion/query/lowlevel/DiffusionLowLevelMercurialBranchesQuery.php
===================================================================
--- src/applications/diffusion/query/lowlevel/DiffusionLowLevelMercurialBranchesQuery.php
+++ src/applications/diffusion/query/lowlevel/DiffusionLowLevelMercurialBranchesQuery.php
@@ -18,9 +18,9 @@
$lines = ArcanistMercurialParser::parseMercurialBranches($stdout);
foreach ($lines as $name => $spec) {
- $branches[] = id(new DiffusionBranchInformation())
- ->setName($name)
- ->setHeadCommitIdentifier($spec['rev']);
+ $branches[] = id(new DiffusionRepositoryRef())
+ ->setShortName($name)
+ ->setCommitIdentifier($spec['rev']);
}
return $branches;
Index: src/applications/diffusion/request/DiffusionGitRequest.php
===================================================================
--- src/applications/diffusion/request/DiffusionGitRequest.php
+++ src/applications/diffusion/request/DiffusionGitRequest.php
@@ -39,7 +39,7 @@
if ($this->repository->isWorkingCopyBare()) {
return $branch;
} else {
- $remote = DiffusionBranchInformation::DEFAULT_GIT_REMOTE;
+ $remote = DiffusionGitBranch::DEFAULT_GIT_REMOTE;
return $remote.'/'.$branch;
}
}
Index: src/applications/diffusion/view/DiffusionBranchTableView.php
===================================================================
--- src/applications/diffusion/view/DiffusionBranchTableView.php
+++ src/applications/diffusion/view/DiffusionBranchTableView.php
@@ -6,12 +6,13 @@
private $commits = array();
public function setBranches(array $branches) {
- assert_instances_of($branches, 'DiffusionBranchInformation');
+ assert_instances_of($branches, 'DiffusionRepositoryRef');
$this->branches = $branches;
return $this;
}
public function setCommits(array $commits) {
+ assert_instances_of($commits, 'PhabricatorRepositoryCommit');
$this->commits = mpull($commits, null, 'getCommitIdentifier');
return $this;
}
@@ -23,7 +24,7 @@
$rows = array();
$rowc = array();
foreach ($this->branches as $branch) {
- $commit = idx($this->commits, $branch->getHeadCommitIdentifier());
+ $commit = idx($this->commits, $branch->getCommitIdentifier());
if ($commit) {
$details = $commit->getSummary();
$datetime = phabricator_datetime($commit->getEpoch(), $this->user);
@@ -39,7 +40,7 @@
'href' => $drequest->generateURI(
array(
'action' => 'history',
- 'branch' => $branch->getName(),
+ 'branch' => $branch->getShortName(),
))
),
pht('History')),
@@ -49,17 +50,17 @@
'href' => $drequest->generateURI(
array(
'action' => 'browse',
- 'branch' => $branch->getName(),
+ 'branch' => $branch->getShortName(),
)),
),
- $branch->getName()),
+ $branch->getShortName()),
self::linkCommit(
$drequest->getRepository(),
- $branch->getHeadCommitIdentifier()),
+ $branch->getCommitIdentifier()),
$datetime,
AphrontTableView::renderSingleDisplayLine($details),
);
- if ($branch->getName() == $current_branch) {
+ if ($branch->getShortName() == $current_branch) {
$rowc[] = 'highlighted';
} else {
$rowc[] = null;
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Mar 24, 1:35 PM (2 w, 1 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7357529
Default Alt Text
D8002.diff (15 KB)
Attached To
Mode
D8002: Remove DiffusionBranchInformation in favor of DiffusionRepositoryRef
Attached
Detach File
Event Timeline
Log In to Comment