| 21 | |
| 22 | |
| 23 | class ScmRevisionCheck(object): |
| 24 | def __init__(self, dog_server, source_dir, total_scan, scm_info, |
| 25 | scm_client, report_file, server_url, scan_history_url, |
| 26 | job_web_url, repo_id, proj_id, org_sid, team_name): |
| 27 | self._total_scan = total_scan |
| 28 | self._source_dir = source_dir |
| 29 | self._scm_info = scm_info |
| 30 | self._scm_client = scm_client |
| 31 | self._report_file = report_file |
| 32 | self._dog_server = dog_server |
| 33 | self._server_url = server_url |
| 34 | self._repo_id = repo_id |
| 35 | self._proj_id = proj_id |
| 36 | self._org_sid = org_sid |
| 37 | self._team_name = team_name |
| 38 | self._scan_history_url = scan_history_url |
| 39 | self._job_web_url = job_web_url |
| 40 | |
| 41 | def _local_rev_is_newer(self, compare_revision): |
| 42 | """ |
| 43 | 判断本地代码版本是否更新(大于对比版本) |
| 44 | :param compare_revision: |
| 45 | :return: True | False | "Error"(判断异常) |
| 46 | """ |
| 47 | # 判空 |
| 48 | if not compare_revision: |
| 49 | logger.error("compare_revision is empty(%s)" % compare_revision) |
| 50 | return "Error" |
| 51 | # 如果版本号相同,本地revision肯定不比last_revision更新,直接返回False |
| 52 | if str(compare_revision) == str(self._scm_info.scm_revision): |
| 53 | return False |
| 54 | |
| 55 | # 没有指定本地代码目录时, self._scm_client还未被初始化,为None |
| 56 | # 此时扫描的scm_revision为远端代码库的最新版本,由于此时已经排除相等的情况,那么revision肯定是比对比版本更新的 |
| 57 | if not self._scm_client: |
| 58 | return True |
| 59 | else: |
| 60 | try: |
| 61 | is_newer = self._scm_client.revision_lt(compare_revision, self._scm_info.scm_revision) |
| 62 | return is_newer |
| 63 | except Exception as err: |
| 64 | # 以下情况会异常: |
| 65 | # 1. 本地代码版本 < scm_last_revision,git本地没有scm_last_revision的信息,无法比较 |
| 66 | # 2. scm_last_revision的git记录被删除,导致找不到该版本,无法比较 |
| 67 | logger.error("scm_client.revision_lt() warning: %s", err) |
| 68 | return "Error" |
| 69 | |
| 70 | def is_revision_unchanged(self): |
| 71 | """ |
| 72 | 判断扫描后本地代码revision是否与扫描前一致 |
| 73 | :return: True(版本相同)|False(版本不同), error_msg |
| 74 | """ |
| 75 | # 不使用本地代码(新拉取的代码),不需要判断 |
| 76 | if not self._source_dir: |
| 77 | return True, "" |
| 78 | # 获取扫描完成后的本地代码版本号 |
| 79 | try: |
| 80 | after_scan_revision = self._scm_client.info().commit_revision |
no outgoing calls
no test coverage detected