Permalink
Browse files

Add arc.land.update.default config for setting the default strategy

Summary:
This adds a arcconfig setting to allow specifying whether to use the merge
or rebase strategy when doing the feature branch update.
arc.land.update.default can be set to either 'rebase' or 'merge'.  The command
line flags will override this setting.

We have had trouble with arc land producing merge commits (introduced
with D4080) in git. They usually appear when arc land fails, and our users
are confused by the presence of a merge commit afterwards. Today it got even
worse since a user managed to get arc land to push the merge commit to the
server. This setting will allow us to turn it off for our uses.

Test Plan:
Verified the following combinations:
update.default not set + arc land (saw git merge in the trace)
update.default = 'rebase' + arc land (saw git rebase)
update.default = 'merge' + arc land (saw git merge)
update.default = 'rebase' + arc land --update-with-merge (saw git merge)
update.default = 'merge' + arc land --update-with-rebase (saw git rebase)

Reviewers: epriestley

Reviewed By: epriestley

CC: aran, Korvin

Differential Revision: https://secure.phabricator.com/D5683
  • Loading branch information...
1 parent f5c8430 commit e573610ce4117b6b69d95b54e6b4014d5d68f485 @DurhamG DurhamG committed Apr 14, 2013
Showing with 48 additions and 4 deletions.
  1. +14 −0 src/configuration/ArcanistSettings.php
  2. +34 −4 src/workflow/ArcanistLandWorkflow.php
@@ -48,13 +48,27 @@ private function getOptions() {
'engine is specified by the current project.',
'example' => '"ExampleUnitTestEngine"',
),
+ 'arc.feature.start.default' => array(
+ 'type' => 'string',
+ 'help' =>
+ 'The name of the default branch to create the new feature branch '.
+ 'off of.',
+ 'example' => '"develop"',
+ ),
'arc.land.onto.default' => array(
'type' => 'string',
'help' =>
'The name of the default branch to land changes onto when '.
'`arc land` is run.',
'example' => '"develop"',
),
+ 'arc.land.update.default' => array(
+ 'type' => 'string',
+ 'help' =>
+ 'The default strategy to use when arc land updates the feature '.
+ 'branch. Supports \'rebase\' and \'merge\' strategies.',
+ 'example' => '"rebase"',
+ ),
'history.immutable' => array(
'type' => 'bool',
'legacy' => 'immutable_history',
@@ -121,10 +121,29 @@ public function getArguments() {
),
),
'update-with-rebase' => array(
- 'help' => 'When updating the feature branch, use rebase intead of '.
- 'merge. This might make things work better in some cases.',
+ 'help' => 'When updating the feature branch, use rebase instead of '.
+ 'merge. This might make things work better in some cases.'.
+ 'Set arc.land.update.default to \'rebase\' to make this '.
+ 'default.',
'conflicts' => array(
'merge' => 'The --merge strategy does not update the feature branch.',
+ 'update-with-merge' => 'Cannot be used with --update-with-merge.',
+ ),
+ 'supports' => array(
+ 'git',
+ ),
+ ),
+ 'update-with-merge' => array(
+ 'help' => 'When updating the feature branch, use merge instead of '.
+ 'rebase. This is the default behavior. '.
+ 'Setting arc.land.update.default to \'merge\' can also '.
+ 'be used to make this the default.',
+ 'conflicts' => array(
+ 'merge' => 'The --merge strategy does not update the feature branch.',
+ 'update-with-rebase' => 'Cannot be used with --update-with-rebase.',
+ ),
+ 'supports' => array(
+ 'git',
),
),
'revision' => array(
@@ -222,7 +241,18 @@ private function readArguments() {
}
$this->branch = head($branch);
$this->keepBranch = $this->getArgument('keep-branch');
- $this->shouldUpdateWithRebase = $this->getArgument('update-with-rebase');
+
+ $working_copy = $this->getWorkingCopy();
+ $update_strategy = $working_copy->getConfigFromAnySource(
+ 'arc.land.update.default',
+ 'merge');
+ $this->shouldUpdateWithRebase = $update_strategy == 'rebase';
+ if ($this->getArgument('update-with-rebase')) {
+ $this->shouldUpdateWithRebase = true;
+ } else if ($this->getArgument('update-with-merge')) {
+ $this->shouldUpdateWithRebase = false;
+ }
+
$this->preview = $this->getArgument('preview');
if (!$this->branchType) {
@@ -231,7 +261,7 @@ private function readArguments() {
$onto_default = $this->isGit ? 'master' : 'default';
$onto_default = nonempty(
- $this->getWorkingCopy()->getConfigFromAnySource('arc.land.onto.default'),
+ $working_copy->getConfigFromAnySource('arc.land.onto.default'),
$onto_default);
$this->onto = $this->getArgument('onto', $onto_default);
$this->ontoType = $this->getBranchType($this->onto);

0 comments on commit e573610

Please sign in to comment.