| 27 | |
| 28 | |
| 29 | class ProjectMgr(object): |
| 30 | def __init__(self, scan_plan, scheme_template_ids, scheme_templates, languages, |
| 31 | dog_server, org_sid, team_name, source_dir, include_paths, exclude_paths, |
| 32 | proj_id, scm_info, report_file, admins, scm_auth_info, front_end_url, |
| 33 | labels, machine_tag, ref_scheme_id, proj_env, create_from, enable_module): |
| 34 | self._repo_id = None |
| 35 | self._scan_plan = scan_plan |
| 36 | self._scheme_template_ids = scheme_template_ids |
| 37 | self._scheme_templates = scheme_templates |
| 38 | self._languages = languages |
| 39 | self._dog_server = dog_server |
| 40 | self._org_sid = org_sid |
| 41 | self._team_name = team_name |
| 42 | self._source_dir = source_dir |
| 43 | self._include_paths = include_paths |
| 44 | self._exclude_paths = exclude_paths |
| 45 | self._proj_id = proj_id |
| 46 | self._scm_info = scm_info |
| 47 | self._report_file = report_file |
| 48 | self._admins = admins |
| 49 | self._scm_auth_info = scm_auth_info |
| 50 | self._front_end_url = front_end_url |
| 51 | self._labels = labels |
| 52 | self._machine_tag = machine_tag |
| 53 | self._ref_scheme_id = ref_scheme_id |
| 54 | self._proj_env = proj_env |
| 55 | self._create_from = create_from |
| 56 | self._enable_module = enable_module |
| 57 | |
| 58 | def __check_project_exist(self, branch, scheme_name, scan_path): |
| 59 | """ |
| 60 | 判断项目是否已存在 |
| 61 | :return: |
| 62 | """ |
| 63 | # 向serer查询是否已创建项目 |
| 64 | try: |
| 65 | proj_info_list = self._dog_server.get_proj_info(branch=branch, scan_scheme=scheme_name, |
| 66 | repo_id=self._repo_id, org_sid=self._org_sid, |
| 67 | team_name=self._team_name, scan_path=scan_path) |
| 68 | except ResfulApiError as err: |
| 69 | logger.error("获取项目ID失败,退出!\n%s", err.msg) |
| 70 | sys.exit(-1) |
| 71 | |
| 72 | if proj_info_list: |
| 73 | if len(proj_info_list) == 1: |
| 74 | return proj_info_list[0] |
| 75 | else: |
| 76 | proj_info_list_str = json.dumps(proj_info_list, indent=2, ensure_ascii=False) |
| 77 | err_msg = f"该仓库(id: {self._repo_id})下的{branch}分支, 使用 {scheme_name} 分析方案的项目有多个," \ |
| 78 | f"请联系代码分析管理员排查原因.\n{proj_info_list_str}" |
| 79 | raise NodeError(code=errcode.E_NODE_TASK_CONFIG, msg=err_msg) |
| 80 | else: |
| 81 | return None |
| 82 | |
| 83 | def __check_and_create_repo(self, repo_url): |
| 84 | is_existed, repo_id = self._dog_server.is_repo_existed(repo_url, self._org_sid, self._team_name) |
| 85 | if is_existed: |
| 86 | return repo_id |