(self)
| 38 | self._work_dir = os.path.abspath(os.getcwd()) |
| 39 | |
| 40 | def run(self): |
| 41 | try: |
| 42 | incr_scan = self._task_params['incr_scan'] |
| 43 | source_dir = self._task_params['source_dir'] |
| 44 | scc_handler = SccHandler(self._work_dir) |
| 45 | filter_handler = FilterPathUtil(self._task_params) |
| 46 | wanted_exts = scc_handler.get_scc_supported_ext() |
| 47 | relpos = len(source_dir) + 1 |
| 48 | |
| 49 | try: |
| 50 | if incr_scan: |
| 51 | diffs = SCMMgr(self._task_params).get_scm_diff() |
| 52 | toscans = [os.path.join(source_dir, diff.path) for diff in diffs if |
| 53 | diff.path.lower().endswith(wanted_exts) and diff.state != 'del'] |
| 54 | # filter include and exclude path |
| 55 | filtered_files = filter_handler.get_include_files(toscans, relpos) |
| 56 | else: # 全量扫描 |
| 57 | if filter_handler.is_filter_empty(): # 过滤条件为空,filtered_files传空 |
| 58 | filtered_files = None |
| 59 | else: |
| 60 | toscans = PathMgr().get_dir_files(source_dir, wanted_exts) |
| 61 | filtered_files = filter_handler.get_include_files(toscans, relpos) |
| 62 | if len(filtered_files) == len(toscans): # 如果过滤后文件数和过滤前相同,filtered_files传空 |
| 63 | filtered_files = None |
| 64 | except: |
| 65 | # 获取过滤后的文件时出现异常(比如增量扫描last revision不存在,无法得到diff文件列表),此时不计算过滤,按全量数据处理 |
| 66 | logger.exception("CodeLineCount get filtered files error, skip. set filtered_files=None.") |
| 67 | filtered_files = None |
| 68 | |
| 69 | result = scc_handler.source_dir_stat(source_dir, filtered_files) |
| 70 | except: |
| 71 | # 出现异常,返回空数据 |
| 72 | logger.exception("count line encounter error, return empty data!") |
| 73 | result = { |
| 74 | "code_line_num": 0, |
| 75 | "comment_line_num": 0, |
| 76 | "blank_line_num": 0, |
| 77 | "total_line_num": 0, |
| 78 | "filtered_code_line_num": 0, |
| 79 | "filtered_comment_line_num": 0, |
| 80 | "filtered_blank_line_num": 0, |
| 81 | "filtered_total_line_num": 0 |
| 82 | } |
| 83 | # logger.info(">>> result: %s" % result) |
| 84 | return result |
| 85 | |
| 86 | |
| 87 | if __name__ == '__main__': |
nothing calls this directly
no test coverage detected