MCPcopy Index your code
hub / github.com/Tencent/CodeAnalysis / CodeLineCount

Class CodeLineCount

client/util/codecount/codestat.py:24–84  ·  view source on GitHub ↗

代码行统计

Source from the content-addressed store, hash-verified

22
23
24class CodeLineCount(object):
25 """
26 代码行统计
27 """
28 def __init__(self, task_params, work_dir=None):
29 self._task_params = task_params
30 if work_dir:
31 self._work_dir = work_dir
32 else:
33 task_dir = task_params.get('task_dir')
34 logger.info("task params taskdir: %s" % task_dir)
35 if task_dir:
36 self._work_dir = task_dir
37 else:
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

Callers 3

runMethod · 0.90
runMethod · 0.90
analyzeMethod · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected