mirror of
https://we.phorge.it/source/arcanist.git
synced 2024-11-29 18:22:41 +01:00
Support --nobranch when not currently on a branch
Summary: This is horrible and git specific, but fixes a case where people are using "arc patch --nobranch ..." when they're not currently on a branch. The old code assumed you were on a branch and used getBranchName() to record this, in order to return to that branch later and cherry-pick the patch. When not on a branch, and using arc patch --nobranch, this was trying to return to the branch '(no branch)'. Now, I detect that we're not on a branch and just record what HEAD is instead. Test Plan: Checkout the SHA of master (so I'm on master, but not on a branch) then try to patch it with a feature diff: € git checkout e7a3ec68159d6847372cab5ad913f2f15aa7c249 Warning: you are leaving 1 commit behind, not connected to any of your branches: ac1ad39 Updating a-file If you want to keep them by creating a new branch, this may be a good time to do so with: git branch new_branch_name ac1ad392350a51edd10343f12b9713f5e5b3707c HEAD is now at e7a3ec6... Fix arcconfig € arc patch --nobranch D7 Created and checked out branch arcpatch-D7. OKAY Successfully committed patch. € git branch * (no branch) feature haddock master € git log --oneline | head -2 38c0235 Updating a-file e7a3ec6 Fix arcconfig Reviewers: vrana, epriestley Reviewed By: epriestley CC: aran, Korvin Differential Revision: https://secure.phabricator.com/D3743
This commit is contained in:
parent
4585ab7363
commit
f0c0245957
2 changed files with 14 additions and 3 deletions
|
@ -338,8 +338,10 @@ final class ArcanistGitAPI extends ArcanistRepositoryAPI {
|
||||||
// But that may fail if you're not on a branch.
|
// But that may fail if you're not on a branch.
|
||||||
list($stdout) = $this->execxLocal('branch --no-color');
|
list($stdout) = $this->execxLocal('branch --no-color');
|
||||||
|
|
||||||
|
// Assume that any branch beginning with '(' means 'no branch', or whatever
|
||||||
|
// 'no branch' is in the current locale.
|
||||||
$matches = null;
|
$matches = null;
|
||||||
if (preg_match('/^\* (.+)$/m', $stdout, $matches)) {
|
if (preg_match('/^\* ([^\(].*)$/m', $stdout, $matches)) {
|
||||||
return $matches[1];
|
return $matches[1];
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
|
|
@ -471,8 +471,16 @@ EOTEXT
|
||||||
$repository_api = $this->getRepositoryAPI();
|
$repository_api = $this->getRepositoryAPI();
|
||||||
|
|
||||||
$has_base_revision = $this->hasBaseRevision($bundle);
|
$has_base_revision = $this->hasBaseRevision($bundle);
|
||||||
if ($this->canBranch() && ($this->shouldBranch() || $has_base_revision)) {
|
if ($this->shouldCommit() &&
|
||||||
|
$this->canBranch() &&
|
||||||
|
($this->shouldBranch() || $has_base_revision)) {
|
||||||
|
|
||||||
$original_branch = $repository_api->getBranchName();
|
$original_branch = $repository_api->getBranchName();
|
||||||
|
// If we weren't on a branch, then record the ref we'll return to
|
||||||
|
// instead.
|
||||||
|
if ($original_branch === null) {
|
||||||
|
$original_branch = $repository_api->getCanonicalRevisionName('HEAD');
|
||||||
|
}
|
||||||
$new_branch = $this->createBranch($bundle, $has_base_revision);
|
$new_branch = $this->createBranch($bundle, $has_base_revision);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -724,7 +732,8 @@ EOTEXT
|
||||||
$verb = 'applied';
|
$verb = 'applied';
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->canBranch() && !$this->shouldBranch() && $has_base_revision) {
|
if ($this->shouldCommit() && $this->canBranch() &&
|
||||||
|
!$this->shouldBranch() && $has_base_revision) {
|
||||||
$repository_api->execxLocal('checkout %s', $original_branch);
|
$repository_api->execxLocal('checkout %s', $original_branch);
|
||||||
$ex = null;
|
$ex = null;
|
||||||
try {
|
try {
|
||||||
|
|
Loading…
Reference in a new issue