根据代码库url查询是否有创建项目,如果没有,新建项目 :return:
(self, scan_path)
| 139 | return scheme_name, is_scheme_existed |
| 140 | |
| 141 | def check_and_create_proj(self, scan_path): |
| 142 | """ |
| 143 | 根据代码库url查询是否有创建项目,如果没有,新建项目 |
| 144 | :return: |
| 145 | """ |
| 146 | # 判断如果本地url是ssh鉴权方式,转换为http格式(因为server端暂不支持ssh格式的url) |
| 147 | ssh_scm_type = BaseScmUrlMgr.check_ssh_scm_type(self._scm_info.scm_url) |
| 148 | # 转换成http格式的url |
| 149 | if ssh_scm_type: |
| 150 | scm_url_mgr = ScmUrlMgr(ssh_scm_type).get_scm_url_mgr() |
| 151 | format_scm_url = scm_url_mgr.ssh_to_http(self._scm_info.scm_url) |
| 152 | format_repo_url = scm_url_mgr.ssh_to_http(self._scm_info.scm_url) # 仓库地址 |
| 153 | else: |
| 154 | format_scm_url = self._scm_info.scm_url |
| 155 | format_repo_url = self._scm_info.scm_url |
| 156 | |
| 157 | # 没有管理员的情况下,如果有传scm用户名,使用该用户作为管理员 |
| 158 | if not self._admins: |
| 159 | if self._scm_auth_info.username: |
| 160 | self._admins = [self._scm_auth_info.username] |
| 161 | |
| 162 | # 1. 判断代码库,如果不存在,先关联 |
| 163 | self._repo_id = self.__check_and_create_repo(format_repo_url) |
| 164 | # 获取仓库下的分析方案列表 |
| 165 | repo_schemes = self._dog_server.get_repo_schemes(self._repo_id, self._org_sid, self._team_name) |
| 166 | |
| 167 | # 2. 判断分析方案是否存在 |
| 168 | scheme_name, is_scheme_existed = self._check_scheme(repo_schemes) |
| 169 | |
| 170 | # 3. 判断项目是否存在 |
| 171 | proj_info = self.__check_project_exist(self._scm_info.branch, scheme_name, scan_path) |
| 172 | if proj_info: |
| 173 | self._proj_id = proj_info["id"] |
| 174 | is_scheme_existed = True |
| 175 | scheme_name = proj_info["scan_scheme"]["name"] |
| 176 | else: |
| 177 | self._proj_id = None |
| 178 | |
| 179 | if self._proj_id: # 已有项目,复用 |
| 180 | LogPrinter.info(f"Use the already existed project(id: {self._proj_id}).") |
| 181 | else: # 没有项目,需要新建项目 |
| 182 | # 分析方案已存在,直接复用,不需要语言参数 |
| 183 | # 指定了参照扫描方案ID,可以复制该扫描方案,不需要语言参数 |
| 184 | if is_scheme_existed or self._languages or self._ref_scheme_id: |
| 185 | pass |
| 186 | else: |
| 187 | # 补充语言参数 |
| 188 | self._languages = LanguageManager.auto_identify_languages(self._source_dir, self._include_paths, |
| 189 | self._exclude_paths, self._dog_server, |
| 190 | self._repo_id, self._proj_id, self._org_sid, |
| 191 | self._team_name) |
| 192 | self.__check_no_language_exit() |
| 193 | |
| 194 | if not scan_path: |
| 195 | scan_path = '/' |
| 196 | if self._ref_scheme_id: |
| 197 | proj_info = { |
| 198 | "scm_type": self._scm_info.scm_type, |
no test coverage detected