-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
42 lines (34 loc) · 1.8 KB
/
main.py
File metadata and controls
42 lines (34 loc) · 1.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import argparse
from search import GitLabSearchTool
from output import OutputHandler
def main():
parser = argparse.ArgumentParser(description='GitLab 高级代码搜索工具')
parser.add_argument('-u', '--url', required=True, help='GitLab 服务器 URL')
parser.add_argument('-t', '--token', required=True, help='GitLab API Token')
parser.add_argument('-k', '--keywords', required=True, nargs='+', help='关键字列表')
parser.add_argument('-g', '--group', help='按组搜索 ID')
parser.add_argument('-p', '--project', type=int, help='按单个项目 ID 搜索')
parser.add_argument('-b', '--branch', nargs='+', default=['master', 'main'],
help='搜索分支,可指定多个 (默认: master main)')
parser.add_argument('-o', '--output', help='输出路径 (.xlsx/.csv/.json)')
parser.add_argument('-v', '--verbose', action='store_true', help='显示详细调试信息')
args = parser.parse_args()
if not (args.group or args.project):
parser.error('必须指定 --group 或 --project')
output_handler = OutputHandler()
all_results = []
try:
for current_branch in args.branch:
if args.verbose:
print(f"\n🚀 正在搜索分支: {current_branch}.....")
search_tool = GitLabSearchTool(args.url, args.token, current_branch, args.verbose)
if args.project:
for kw in args.keywords:
all_results.extend(search_tool.search_in_project(args.project, kw))
elif args.group:
all_results.extend(search_tool.search_in_group(args.group, args.keywords))
output_handler.handle(all_results, args.output)
except Exception as e:
print(f"\n❌ 程序运行出错: {e}")
if __name__ == "__main__":
main()