Ejemplo n.º 1
0
 /**
  * 修改合并目标分支
  * @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);
 }
Ejemplo n.º 2
0
 /**
  * 合并到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);
     }
 }
Ejemplo n.º 3
0
 /**
  * 关闭申请合并
  * @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);
 }