diff --git a/module/gogs/model.php b/module/gogs/model.php index 5757210519..6f5c97d7a3 100644 --- a/module/gogs/model.php +++ b/module/gogs/model.php @@ -565,4 +565,19 @@ class gogsModel extends model return $newBranches; } + + /** + * Api delete branch. + * + * @param int $gogsID + * @param string $project + * @param string $branch + * @access public + * @return void + */ + public function apiDeleteBranch($gogsID, $project, $branch) + { + $url = sprintf($this->getApiRoot($gogsID), "/repos/$project/branches/$branch"); + return json_decode(commonModel::http($url, null, array(), array(), 'json', 'DELETE')); + } } diff --git a/module/mr/control.php b/module/mr/control.php index d8925b74f9..3f3526a2fc 100644 --- a/module/mr/control.php +++ b/module/mr/control.php @@ -368,7 +368,7 @@ class mr extends control } } - if(isset($MR->hostID)) $rawMR = $this->mr->apiAcceptMR($MR->hostID, $MR->targetProject, $MR->mriid, $MR); + if(isset($MR->hostID)) $rawMR = $this->mr->apiAcceptMR($MR); if(isset($rawMR->state) and $rawMR->state == 'merged') { $this->mr->logMergedAction($MR); diff --git a/module/mr/model.php b/module/mr/model.php index 6a716ff68e..be50709778 100644 --- a/module/mr/model.php +++ b/module/mr/model.php @@ -1039,37 +1039,37 @@ class mrModel extends model /** * Accept MR by API. * - * @link https://docs.gitlab.com/ee/api/merge_requests.html#accept-mr - * @param int $hostID - * @param int $projectID - * @param int $MRID * @param object $MR * @access public * @return object */ - public function apiAcceptMR($hostID, $projectID, $MRID, $MR = null) + public function apiAcceptMR($MR) { - $host = $this->loadModel('pipeline')->getByID($hostID); + $host = $this->loadModel('pipeline')->getByID($MR->hostID); if($host->type == 'gitlab') { - $apiRoot = $this->gitlab->getApiRoot($hostID); - $approveUrl = sprintf($apiRoot, "/projects/$projectID/merge_requests/$MRID/approved"); + $apiRoot = $this->gitlab->getApiRoot($MR->hostID); + $approveUrl = sprintf($apiRoot, "/projects/$MR->targetProject/merge_requests/$MR->mriid/approved"); commonModel::http($approveUrl, null, array(CURLOPT_CUSTOMREQUEST => 'POST')); - $url = sprintf($apiRoot, "/projects/$projectID/merge_requests/$MRID/merge"); + $url = sprintf($apiRoot, "/projects/$MR->targetProject/merge_requests/$MR->mriid/merge"); return json_decode(commonModel::http($url, null, array(CURLOPT_CUSTOMREQUEST => 'PUT'))); } else { - $apiRoot = $this->loadModel($host->type)->getApiRoot($hostID); - $url = sprintf($apiRoot, "/repos/$projectID/pulls/$MRID/merge"); + $apiRoot = $this->loadModel($host->type)->getApiRoot($MR->hostID); + $url = sprintf($apiRoot, "/repos/$MR->targetProject/pulls/$MR->mriid/merge"); $merge = ($MR and $MR->squash == '1') ? 'squash' : 'merge'; $data = array('Do' => $merge); - if($MR and $MR->removeSourceBranch == '1') $data['delete_branch_after_merge'] = true; + if($MR->removeSourceBranch == '1') $data['delete_branch_after_merge'] = true; $rowMR = json_decode(commonModel::http($url, $data, array(), array(), 'json', 'POST')); - if(!isset($rowMR->massage)) $rowMR = $this->apiGetSingleMR($hostID, $projectID, $MRID); + if(!isset($rowMR->massage)) + { + $rowMR = $this->apiGetSingleMR($MR->hostID, $MR->targetProject, $MR->mriid); + if($data['delete_branch_after_merge'] == true) $this->loadModel('gogs')->apiDeleteBranch($MR->hostID, $MR->targetProject, $MR->sourceBranch); + } return $rowMR; }