示例#1
0
 /**
  * 创建新分支
  */
 function _new_branch_action()
 {
     if ($this->role < 2) {
         throw new \Exception('firegit.u_power');
     }
     $orig = $_POST['orig'];
     $dest = $_POST['dest'];
     if (!preg_match(GIT_BRANCH_RULE, $dest)) {
         throw new \Exception('firegit.illegalBranch');
     }
     $reposite = new \firegit\git\Reposite($this->gitGroup, $this->gitName);
     $ret = $reposite->newBranch($orig, $dest);
     if ($ret > 0) {
         throw new \Exception('branch.u_createFailed code:' . $ret);
     }
     $repos = new \firegit\app\mod\git\Reposite();
     $repos->saveBranch($this->gitGroup, $this->gitName, $dest, $this->user);
 }
示例#2
0
文件: Git.php 项目: comdeng/firegit
 /**
  * 开始接收数据前
  * @param Hook $hook
  * @param $commits
  * @return bool
  */
 static function preReceive(Hook $hook, $commits)
 {
     $reposite = new Reposite($hook->group, $hook->name);
     // 检查用户是否能操作该库
     $mod = new \firegit\app\mod\git\Reposite();
     $users = $mod->getUsers($hook->group, $hook->name);
     $user = '';
     $role = -1;
     if ($hook->fromHttp) {
         $user = $hook->authUser;
         if (!$user) {
             ColorConsole::error('用户尚未登录');
             return false;
         }
         if (!isset($users[$user])) {
             ColorConsole::error('用户' . $user . '没有该项目的权限');
             return false;
         }
         $role = $users[$user]['repo_role'];
         if ($role <= \firegit\app\mod\git\Reposite::GROUP_ROLE_READER) {
             ColorConsole::error('用户' . $user . '没有提交该项目的权限');
             return false;
         }
     }
     // 检查每个分支是否已经创建过
     $merges = array();
     $branches = array();
     foreach ($commits as $commit) {
         $branch = $commit['branch'];
         if (strpos($branch, Util::TAG_PREFIX) !== 0) {
             if ($role == \firegit\app\mod\git\Reposite::GROUP_ROLE_BASIC) {
                 if (!$reposite->isBranchExists($branch)) {
                     if (!in_array($branch, array(Util::normalBranch('release'), Util::normalBranch('develop'), Util::normalBranch('beta')))) {
                         ColorConsole::error('服务器上还没有' . $branch . '分支,请先通过web界面创建');
                         return false;
                     } elseif ($commit['end'] == \firegit\git\util::ZERO_COMMIT) {
                         $repos = new \firegit\app\mod\git\Reposite();
                         $repos->delBranch($hook->group, $hook->name, $branch);
                     }
                 }
             }
             // 非管理员不能往主分支提交
             if (in_array($role, array(\firegit\app\mod\git\Reposite::GROUP_ROLE_BASIC, \firegit\app\mod\git\Reposite::GROUP_ROLE_ADVANCED))) {
                 if ($branch == Util::normalBranch('master') || $branch == Util::normalBranch('beta')) {
                     ColorConsole::error('您没有提交到' . $branch . '分支的权限');
                     return false;
                 }
             }
             // 找出增加或修改的文件,对其进行代码审查
             $diffFiles = self::getDiffFiles($commit['start'], $commit['end']);
             if ($diffFiles) {
                 if (!self::checkFiles($commit['end'], $diffFiles)) {
                     ColorConsole::error('代码审查没有通过,请修改完毕再提交!');
                     return false;
                 }
             }
             // 对分支做操作
             if (!$reposite->isBranchExists($branch)) {
                 $repos = new \firegit\app\mod\git\Reposite();
                 $repos->saveBranch($hook->group, $hook->name, $branch, $user);
             } elseif ($commit['end'] == \firegit\git\util::ZERO_COMMIT) {
                 $repos = new \firegit\app\mod\git\Reposite();
                 $repos->delBranch($hook->group, $hook->name, $branch);
             }
             $_ms = $reposite->listMergeCommits($commit['start'], $commit['end']);
             if ($_ms) {
                 $merges = array_merge($merges, $_ms);
             }
             $branches[substr($branch, strlen(Util::BRANCH_PREFIX))] = $commit['end'];
         }
     }
     // 设置分支信息
     $mod->setBranches($hook->group, $hook->name, $user, $commits);
     // 处理合并请求
     $merge = new \firegit\app\mod\git\Merge();
     if ($merges) {
         $merge->handleMerges($hook->group, $hook->name, $merges);
     }
     // 处理分支
     if ($branches) {
         $merge->updateBranches($hook->group, $hook->name, $branches);
     }
 }