diff --git a/app/Common/GitLocal/AbstractGitx.php b/app/Common/GitLocal/AbstractGitx.php index 4ebfe94..6b19234 100644 --- a/app/Common/GitLocal/AbstractGitx.php +++ b/app/Common/GitLocal/AbstractGitx.php @@ -9,6 +9,7 @@ use PhpGit\Repo; use RuntimeException; use Toolkit\Stdlib\Obj; +use function array_merge; use function basename; use function count; use function explode; @@ -94,7 +95,7 @@ abstract class AbstractGitx protected string $curForkGroup = ''; /** - * @var string + * @var string repo name without group */ protected string $curRepo = ''; @@ -116,13 +117,18 @@ abstract class AbstractGitx protected string $curPjName = ''; /** - * @var array + * @var array = [ + * 'name' => 'name', + * 'repo' => 'repo name', // default use name as repo name. + * 'group' => 'group', + * 'forkGroup' => 'my-group', + * ] */ protected array $curPjInfo = []; /** * @param Output|null $output - * @param array $config + * @param array $config * * @return static */ @@ -135,7 +141,7 @@ public static function new(Output $output = null, array $config = []): self * Class constructor. * * @param Output|null $output - * @param array $config + * @param array $config */ public function __construct(Output $output = null, array $config = []) { @@ -350,7 +356,7 @@ public function loadProjectInfo(string $pjName = ''): self // throw new RuntimeException("project '{$pjName}' is not found in the projects"); $info = $this->getRemoteInfo($this->forkRemote); if ($info->isInvalid()) { - throw new RuntimeException("dynamic load project '{$pjName}' fail. not found git remote info"); + throw new RuntimeException("dynamic load project '$pjName' fail. not found git remote info"); } // load main remote info @@ -386,7 +392,7 @@ public function loadProjectInfo(string $pjName = ''): self /** * @param string $repo - * @param bool $useGitUrl + * @param bool $useGitUrl * * @return string */ @@ -686,4 +692,14 @@ public function setDefaultBranch(string $defaultBranch): void { $this->defaultBranch = $defaultBranch; } + + /** + * @param array $curPjInfo + */ + public function setCurPjInfo(array $curPjInfo): void + { + $this->curPjInfo = array_merge([ + 'forkGroup' => '', + ], $curPjInfo); + } } diff --git a/app/Console/Attach/Gitlab/MergeRequestCmd.php b/app/Console/SubCmd/GitlabCmd/MergeRequestCmd.php similarity index 73% rename from app/Console/Attach/Gitlab/MergeRequestCmd.php rename to app/Console/SubCmd/GitlabCmd/MergeRequestCmd.php index 22d4ba8..a809bcc 100644 --- a/app/Console/Attach/Gitlab/MergeRequestCmd.php +++ b/app/Console/SubCmd/GitlabCmd/MergeRequestCmd.php @@ -1,6 +1,6 @@ flags; $gl = AppHelper::newGitlab(); - // http://gitlab.my.com/group/repo/merge_requests/new?utf8=%E2%9C%93&merge_request%5Bsource_project_id%5D=319&merge_request%5Bsource_branch%5D=fea_4_16&merge_request%5Btarget_project_id%5D=319&merge_request%5Btarget_branch%5D=qa - if (!$pjName = $gl->findProjectName()) { - $pjName = $fs->getArg('project'); + $pjName = $fs->getArg('project'); + if ($pjName) { + [$group, $repo] = \PhpGit\GitUtil::splitPath($pjName); + $pjInfo = [ + 'name' => $repo, + 'repo' => $repo, // default use name as repo name. + 'group' => $group, + ]; + $gl->setCurPjInfo($pjInfo); + } else { + // auto parse info from workdir + $pjName = $gl->findProjectName(); + $gl->loadProjectInfo($pjName); } - $gl->loadProjectInfo($pjName); - $p = $gl->getCurProject(); // $brPrefix = $gitlab->getValue('branchPrefix', ''); @@ -83,21 +92,22 @@ protected function execute(Input $input, Output $output): mixed $srcPjId = $p->getForkPid(); $tgtPjId = $p->getMainPid(); - $output->info('auto fetch current branch name'); - $curBranch = GitUtil::getCurrentBranchName(); $srcBranch = $fs->getOpt('source'); $tgtBranch = $fs->getOpt('target'); - if ($fullSBranch = $fs->getOpt('full-source')) { - $srcBranch = $fullSBranch; - } elseif (!$srcBranch) { + if (!$srcBranch) { + $output->info('auto fetch current branch name as source branch'); + $curBranch = GitUtil::getCurrentBranchName(); $srcBranch = $curBranch; + } else { + $curBranch = $srcBranch; } $open = $gl->getRealBranchName($fs->getOpt('open')); // if input '@', 'head', use current branch name. if ($open) { - if ($open === '@' || strtoupper($open) === 'HEAD') { + $upper = strtoupper($open); + if ($open === '@' || $upper === 'H' || $upper === 'HEAD') { $open = $curBranch; } elseif ($open === '@s') { $open = $srcBranch; @@ -119,7 +129,7 @@ protected function execute(Input $input, Output $output): mixed // deny as an source branch if ($denyBrs && $srcBranch !== $tgtBranch && in_array($srcBranch, $denyBrs, true)) { - throw new PromptException("the branch '$srcBranch' dont allow as source-branch for PR to other branch"); + throw new PromptException("branch '$srcBranch' dont allow as source-branch for create PR"); } $repo = $p->repo;