mirror of
https://we.phorge.it/source/arcanist.git
synced 2024-11-10 08:52:39 +01:00
Support git svn dcommit
in arc land
Test Plan: $ arc land # in Git SVN repository Reviewers: epriestley Reviewed By: epriestley CC: aran, Korvin Differential Revision: https://secure.phabricator.com/D4123
This commit is contained in:
parent
7b2ce3a987
commit
c68a048213
2 changed files with 42 additions and 23 deletions
|
@ -859,20 +859,14 @@ abstract class ArcanistBaseWorkflow {
|
|||
|
||||
// TODO: Check commits since tracking branch. If empty then return false.
|
||||
|
||||
$repository_phid = idx($this->getProjectInfo(), 'repositoryPHID');
|
||||
if ($repository_phid) {
|
||||
$repositories = $this->getConduit()->callMethodSynchronous(
|
||||
'repository.query',
|
||||
array());
|
||||
$callsigns = ipull($repositories, 'callsign', 'phid');
|
||||
$callsign = idx($callsigns, $repository_phid);
|
||||
if ($callsign) {
|
||||
$known_commits = $this->getConduit()->callMethodSynchronous(
|
||||
'diffusion.getcommits',
|
||||
array('commits' => array('r'.$callsign.$commit['commit'])));
|
||||
if (ifilter($known_commits, 'error', $negate = true)) {
|
||||
return false;
|
||||
}
|
||||
$repository = $this->loadProjectRepository();
|
||||
if ($repository) {
|
||||
$callsign = $repository['callsign'];
|
||||
$known_commits = $this->getConduit()->callMethodSynchronous(
|
||||
'diffusion.getcommits',
|
||||
array('commits' => array('r'.$callsign.$commit['commit'])));
|
||||
if (ifilter($known_commits, 'error', $negate = true)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1432,6 +1426,20 @@ abstract class ArcanistBaseWorkflow {
|
|||
return $this->projectInfo;
|
||||
}
|
||||
|
||||
protected function loadProjectRepository() {
|
||||
$repository_phid = idx($this->getProjectInfo(), 'repositoryPHID');
|
||||
if (!$repository_phid) {
|
||||
return array();
|
||||
}
|
||||
|
||||
$repositories = $this->getConduit()->callMethodSynchronous(
|
||||
'repository.query',
|
||||
array());
|
||||
$repositories = ipull($repositories, null, 'phid');
|
||||
|
||||
return idx($repositories, $repository_phid, array());
|
||||
}
|
||||
|
||||
protected function newInteractiveEditor($text) {
|
||||
$editor = new PhutilInteractiveEditor($text);
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
*/
|
||||
final class ArcanistLandWorkflow extends ArcanistBaseWorkflow {
|
||||
private $isGit;
|
||||
private $isGitSvn;
|
||||
private $isHg;
|
||||
|
||||
private $oldBranch;
|
||||
|
@ -170,6 +171,11 @@ EOTEXT
|
|||
"'arc land' only supports git and mercurial.");
|
||||
}
|
||||
|
||||
if ($this->isGit) {
|
||||
$repository = $this->loadProjectRepository();
|
||||
$this->isGitSvn = (idx($repository, 'vcs') == 'svn');
|
||||
}
|
||||
|
||||
$branch = $this->getArgument('branch');
|
||||
if (empty($branch)) {
|
||||
$branch = $this->getBranchOrBookmark();
|
||||
|
@ -205,7 +211,9 @@ EOTEXT
|
|||
}
|
||||
|
||||
$this->ontoRemoteBranch = $this->onto;
|
||||
if ($this->isGit) {
|
||||
if ($this->isGitSvn) {
|
||||
$this->ontoRemoteBranch = 'trunk';
|
||||
} else if ($this->isGit) {
|
||||
$this->ontoRemoteBranch = $this->remote.'/'.$this->onto;
|
||||
}
|
||||
|
||||
|
@ -362,13 +370,14 @@ EOTEXT
|
|||
if ($this->isGit) {
|
||||
$repository_api->execxLocal('pull --ff-only');
|
||||
|
||||
list($out) = $repository_api->execxLocal(
|
||||
'log %s/%s..%s',
|
||||
$this->remote,
|
||||
$this->onto,
|
||||
$this->onto);
|
||||
if (strlen(trim($out))) {
|
||||
$local_ahead_of_remote = true;
|
||||
if (!$this->isGitSvn) {
|
||||
list($out) = $repository_api->execxLocal(
|
||||
'log %s..%s',
|
||||
$this->ontoRemoteBranch,
|
||||
$this->onto);
|
||||
if (strlen(trim($out))) {
|
||||
$local_ahead_of_remote = true;
|
||||
}
|
||||
}
|
||||
} else if ($this->isHg) {
|
||||
// execManual instead of execx because outgoing returns
|
||||
|
@ -549,7 +558,9 @@ EOTEXT
|
|||
|
||||
chdir($repository_api->getPath());
|
||||
|
||||
if ($this->isGit) {
|
||||
if ($this->isGitSvn) {
|
||||
$err = phutil_passthru('git svn dcommit');
|
||||
} else if ($this->isGit) {
|
||||
$err = phutil_passthru(
|
||||
'git push %s %s',
|
||||
$this->remote,
|
||||
|
|
Loading…
Reference in a new issue