/** * This method will merge two branches and push to your remote fork, defined in your GitConfiguration * config file * * @param Sadekbaroudi\Gitorade\Branches\BranchMerge $branchMerge BranchMerge object representing the from and to branches * @param boolean submit the merge pull request when done merging * @throws GitException */ public function merge(BranchMerge $branchMerge) { $this->validateForMerge($branchMerge); // Checkout the new branch based on the BranchMerge object $localBranch = new BranchLocal($branchMerge->getMergeName()); $this->checkoutNewBranch($branchMerge->getBranchTo(), $localBranch); try { echo "merging " . $branchMerge->getBranchFrom() . " to " . $branchMerge->getBranchTo() . PHP_EOL; $this->getGit()->merge((string) $branchMerge->getBranchFrom()); } catch (GitException $e) { $this->getOsm()->undoAll(); throw new GitException("Could not merge " . $branchMerge->getBranchFrom() . " to " . $branchMerge->getBranchTo() . ". There may have been conflicts. Please verify."); } // TODO: log merge success $logMe = "Merged " . $branchMerge->getBranchFrom() . " to " . $branchMerge->getBranchTo() . PHP_EOL; // Begin with pushing merged branch to remote $remoteBranch = new BranchRemote("remotes/" . $this->getGitCliConfig()->getConfig('fork_alias') . "/" . $branchMerge->getMergeName()); $remoteBranch->setMergeName($branchMerge->getBranchTo()->getBranch()); $localBranch->setRemote($remoteBranch); try { echo "Pushing to {$localBranch}" . PHP_EOL; $this->push($localBranch); } catch (GitException $e) { $this->getOsm()->undoAll(); throw $e; } $this->getOsm()->undoAll(); // Delete this line after testing //return $remoteBranch; $returnArray = array('remoteBranch' => $remoteBranch); // Begin with pull request preparation // Set pull request data on remoteBranch if ($branchMerge->getBranchTo()->getType() == 'remote') { $returnArray['pullRequest'] = new BranchPullRequest(new BranchGithub($this->getGitCliConfig()->getConfig('fork_alias'), $branchMerge->getBranchFrom()->getAlias(), $branchMerge->getBranchFrom()->getBranch()), new BranchGithub($this->getUserFromRepoString($this->getGitCliConfig()->getConfig('repository')), $this->getRepoFromRepoString($this->getGitCliConfig()->getConfig('repository')), $branchMerge->getBranchTo()->getBranch()), "Merge " . $branchMerge->getBranchFrom()->getBranch() . " to " . $branchMerge->getBranchTo()->getBranch(), "Pushed by Gitorade"); } else { // We don't submit a pull request against a local branch $logMe = "Can't prepare pull request since branchFrom and/or branchTo have an empty alias"; echo $logMe . PHP_EOL; //throw new GitException("branchTo or branchFrom have empty alias"); } return $returnArray; }