-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcode_diff.py
More file actions
35 lines (33 loc) · 3.19 KB
/
code_diff.py
File metadata and controls
35 lines (33 loc) · 3.19 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
# -*- coding: utf-8 -*-
import argparse
import comparator
import os
if __name__ == "__main__":
desc = "code_diff сравнивает попарно посслыки разных пользователей на похожесть и если пара" \
" подозрительна " \
"показывает в программе сравнения (по умолчанию ./kdiff3) " \
"в папке с поссылками за контест файлы должны назваться runid-userid-problem.{language suffix}"
parser = argparse.ArgumentParser(description=desc, prog="code_diff")
parser.add_argument('contest_folder', help='путь к папке с поссылками')
parser.add_argument('-d', '--diff', default="./kdiff3", help='путь к программе сравнения файлов(kdiff3, vimdiff, '
'diff и т.д.)')
parser.add_argument('-l', '--log', default="./code_diff.log",
help='путь к файлу, где сохраняются подозрительные программы')
parser.add_argument('-m', '--mode', default='last', choices=['all', 'last'], help='режим работы; all - проверять все '
'поссылки; last - проверять только '
'последнюю поссылку пользователя по '
'каждой задаче')
parser.add_argument('-w', '--without-problem', dest='without', action="append", help='задача которую не нужно проверять, '
'можно использовать несколько раз, если таких '
'задач много')
parser.add_argument('--version', action='version', version='%(prog)s 0.0')
parser.add_argument('--max-common-len', '-mcl', type=float, dest='mcl', help='максимальное соотношение '
'при котором файлы считаются не '
'подозрительными')
parser.add_argument('-q', '--quiet', action="store_true", help='если указан парметр, то все подозрительные просто '
'будут сохранены в log, и не будет вызываться '
'программа сравнения')
args = parser.parse_args()
log_file = open(args.log, "w")
comparator.compare(args.contest_folder, args.diff, log_file, args.without, args.mcl, args.quiet, args.mode)
log_file.close()