/** * 修改合并目标分支 * @throws \Exception * */ function _modify_branch_action() { if ($this->role != 16) { throw new \Exception('firegit.u_power'); } $reposite = new \firegit\git\Reposite($this->gitGroup, $this->gitName); $datas['dest_branch'] = $_POST['branch']; $mergeId = $_POST['merge_id']; $datas['dest_hash'] = $reposite->getBranchHash($datas['dest_branch']); $api = new \firegit\app\mod\git\Merge(); $mergeinfo = $api->getMerge($mergeId); if (!$mergeinfo) { throw new \Exception('firegit.u_notfound'); } if ($datas['dest_branch'] == $mergeinfo['dest_branch']) { throw new \Exception('firegit.alike'); } $merge = new \firegit\app\mod\git\Merge(); $merge->updateDate($mergeId, $datas); }
/** * 合并到master ---------后期要重新优化代码@----------- * @param $mergeIds * @throws \Exception */ function _mergemaster_action() { $mergeIds = $this->post('merge_ids'); if (empty($mergeIds)) { throw new \Exception('firegit.merge_id_empty'); } $repoTmp = TMP_ROOT . '/merge/'; $api = new \firegit\app\mod\git\Merge(); foreach ($mergeIds as $mergeId) { $repoDir = $repoTmp . '/master'; if (is_dir($repoDir)) { // stat beta system('rm ' . $repoDir . ' -rf'); } mkdir($repoDir, 0777, true); chdir($repoDir); $mergeinfo = $api->getMerge($mergeId); if (!$mergeinfo) { throw new \Exception('firegit.u_notfound'); } // 检查合并状态 只允许预上线已确认的 if ($mergeinfo['deploy_status'] != 4) { throw new \Exception('firegit.u_mergeedFailed'); } $origDir = GIT_REPO . $mergeinfo['repo_group'] . '/' . $mergeinfo['repo_name'] . '.git'; // clone远程分支 $cmd = sprintf('git clone %s -b master ./', $origDir); exec($cmd, $outputs, $code); unset($outputs); system('git config user.name ' . $this->user); system('git config user.email ' . $this->user . '@hunbasha.com'); $cmd = sprintf('git fetch origin %s:%s', $mergeinfo['orig_branch'], $mergeinfo['orig_branch']); exec($cmd, $outputs, $code); unset($outputs); $cmd = sprintf('git merge -m "Merge remote-tracking branch \'%s\' into %s" %s', $mergeinfo['orig_branch'], 'master', $mergeinfo['orig_branch']); exec($cmd, $outputs, $code); $merge = new \firegit\app\mod\git\Merge(); if ($code) { $merge->endMerge($mergeId, false, implode("\n", $outputs)); throw new \Exception('firegit.merge_master_error:' . $mergeinfo['orig_branch']); } unset($outputs); //push 到远程 $cmd = sprintf('git push origin master:master'); exec($cmd, $outputs, $code); if ($code != 0) { throw new \Exception('firegit.push_master_error:' . $mergeinfo['orig_branch']); } $repo = new \firegit\git\Reposite($mergeinfo['repo_group'], $mergeinfo['repo_name']); //删除合并的分支 if (!$repo->isProtected($mergeinfo['orig_branch'])) { $repo->delBranch($mergeinfo['orig_branch']); $repos = new \firegit\app\mod\git\Reposite(); $repos->delBranch($mergeinfo['repo_group'], $mergeinfo['repo_name'], $mergeinfo['orig_branch']); \firegit\log\Logger::trace('merge.delBranch branch=%s hash=%s', $mergeinfo['orig_branch'], $mergeinfo['orig_hash']); } $merge->updateDeployStatus($mergeId, 0x11); } }
/** * 关闭申请合并 * @param $mergeId * @throws \Exception */ function merge_close_action($mergeId) { $api = new \firegit\app\mod\git\Merge(); $loginUser = $this->request->data['user']; $merge = $api->getMerge($mergeId); if (!$merge || $loginUser != $merge['username']) { throw new \Exception('firegit.u_notfound'); } $api->closeMerge($mergeId); }