Permalink
Browse files

Make arc land list the commits being landed.

Summary:
Arc land is a bit magical and some users have gotten bitten by
the fact that it collapses and lands every commit on the branch. To make
it explicit what is being landed, it now shows a list of the commits
that are being landed.  I also added a --preview flag that will just
print the commits that would be landed, but does nothing else.

Hopefully this make arc land a little less magical for people.

Test Plan:
arc land in the following scenarios:
- Landing one change
- Landing no changes
- Landing a stack of changes

Did it with hg and git.

Reviewers: epriestley

Reviewed By: epriestley

CC: nh, sid0, dschleimer, bos, aran, Korvin

Differential Revision: https://secure.phabricator.com/D5460
  • Loading branch information...
1 parent d1027c1 commit b7a2766130444827ad66cc3c8e8f81837bcfbb68 @DurhamG DurhamG committed Mar 29, 2013
Showing with 48 additions and 0 deletions.
  1. +48 −0 src/workflow/ArcanistLandWorkflow.php
@@ -21,6 +21,7 @@
private $shouldUpdateWithRebase;
private $branchType;
private $ontoType;
+ private $preview;
private $revision;
private $messageFile;
@@ -131,6 +132,10 @@ public function getArguments() {
'help' => 'Use the message from a specific revision, rather than '.
'inferring the revision based on branch content.',
),
+ 'preview' => array(
+ 'help' => 'Prints the commits that would be landed. Does not actually '.
+ 'modify or land the commits.'
+ ),
'*' => 'branch',
);
}
@@ -146,6 +151,12 @@ public function run() {
throw $ex;
}
+ $this->printPendingCommits();
+ if ($this->preview) {
+ $this->restoreBranch();
+ return 0;
+ }
+
$this->checkoutBranch();
$this->findRevision();
@@ -212,6 +223,7 @@ private function readArguments() {
$this->branch = head($branch);
$this->keepBranch = $this->getArgument('keep-branch');
$this->shouldUpdateWithRebase = $this->getArgument('update-with-rebase');
+ $this->preview = $this->getArgument('preview');
if (!$this->branchType) {
$this->branchType = $this->getBranchType($this->branch);
@@ -306,6 +318,42 @@ private function checkoutBranch() {
$this->branch);
}
+ private function printPendingCommits() {
+ $repository_api = $this->getRepositoryAPI();
+
+ if ($repository_api instanceof ArcanistGitAPI) {
+ list($out) = $repository_api->execxLocal(
+ 'log --oneline %s ^%s',
+ $this->branch,
+ $this->onto);
+ } else if ($repository_api instanceof ArcanistMercurialAPI) {
+ $common_ancestor = $repository_api->getCanonicalRevisionName(
+ hgsprintf('ancestor(%s,%s)',
+ $this->onto,
+ $this->branch));
+
+ $branch_range = hgsprintf(
+ 'reverse((%s::%s) - %s)',
+ $common_ancestor,
+ $this->branch,
+ $common_ancestor);
+
+ list($out) = $repository_api->execxLocal(
+ 'log -r %s --template %s',
+ $branch_range,
+ '{node|short} {desc|firstline}\n');
+ }
+
+ if (!trim($out)) {
+ $this->restoreBranch();
+ throw new ArcanistUsageException(
+ "No commits to land from {$this->branch}.");
+ }
+
+ echo phutil_console_format(
+ "The following commit(s) will be landed:\n\n{$out}\n");
+ }
+
private function findRevision() {
$repository_api = $this->getRepositoryAPI();

0 comments on commit b7a2766

Please sign in to comment.