MCPcopy Create free account
hub / github.com/Tencent/CodeAnalysis / check_and_create_proj

Method check_and_create_proj

client/node/localtask/projectmgr.py:141–242  ·  view source on GitHub ↗

根据代码库url查询是否有创建项目,如果没有,新建项目 :return:

(self, scan_path)

Source from the content-addressed store, hash-verified

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,

Callers 1

runMethod · 0.95

Calls 15

_check_schemeMethod · 0.95
__check_project_existMethod · 0.95
ScmUrlMgrClass · 0.90
ResfulApiErrorClass · 0.90
check_ssh_scm_typeMethod · 0.80
get_scm_url_mgrMethod · 0.80
get_repo_schemesMethod · 0.80
get_module_settingMethod · 0.80
dumpMethod · 0.80

Tested by

no test coverage detected