|
|
@@ -1,6 +1,6 @@
|
|
|
#!/usr/bin/env python3
|
|
|
|
|
|
-from argparse import ArgumentParser,Namespace
|
|
|
+from argparse import ArgumentParser,Namespace,Action
|
|
|
|
|
|
GIT_CMD = ["git", "log",
|
|
|
"--all", '--pretty=format:user:%aN%n%ct',
|
|
|
@@ -81,10 +81,30 @@ def parser():
|
|
|
p_select.add_argument('--file-like', default=None, type=str)
|
|
|
p_select.add_argument('--user-like', default=None, type=str)
|
|
|
p_select.add_argument('--user-regex', default=None, type=str)
|
|
|
- p_select.add_argument('--user-overwrite', default=None, type=str)
|
|
|
+ p_select.add_argument('--user-mapping', default={}, action=StoreDictKeyPair)
|
|
|
+ p_select.add_argument('--user-file', default={}, action=YamlDict)
|
|
|
p_select.set_defaults(func=select)
|
|
|
return p
|
|
|
|
|
|
+class StoreDictKeyPair(Action):
|
|
|
+ def __call__(self, parser, namespace, values, option_string=None):
|
|
|
+ my_dict = {}
|
|
|
+ for kv in values.split(","):
|
|
|
+ k,v = kv.split("=")
|
|
|
+ my_dict[k] = v
|
|
|
+ setattr(namespace, self.dest, my_dict)
|
|
|
+
|
|
|
+class YamlDict(Action):
|
|
|
+ def __call__(self, parser, namespace, values, option_string=None):
|
|
|
+ import yaml
|
|
|
+ with open(values) as fd:
|
|
|
+ my_dict = yaml.safe_load(fd)
|
|
|
+ assert isinstance(my_dict, dict)
|
|
|
+ for k,v in my_dict.items():
|
|
|
+ assert isinstance(k, str)
|
|
|
+ assert isinstance(v, str)
|
|
|
+ setattr(namespace, self.dest, my_dict)
|
|
|
+
|
|
|
def gitjoin(args: Namespace):
|
|
|
import sqlite3
|
|
|
import multiprocessing
|
|
|
@@ -192,7 +212,7 @@ def select(args: Namespace):
|
|
|
with sqlite3.connect(args.output) as db:
|
|
|
import re
|
|
|
def regexp(y, x, search=re.search):
|
|
|
- return 1 if search(y, x) else 0
|
|
|
+ return 1 if search(y, x, flags=re.IGNORECASE) else 0
|
|
|
db.create_function('regexp', 2, regexp)
|
|
|
|
|
|
STMT = STMT_SELECT
|
|
|
@@ -216,7 +236,15 @@ def select(args: Namespace):
|
|
|
WHERE_VERB = "AND"
|
|
|
for i in db.execute(STMT + " ORDER BY time ASC", ARGS):
|
|
|
# print(i)
|
|
|
- username = args.user_overwrite if args.user_overwrite else i[1]
|
|
|
+ username = i[1]
|
|
|
+ for k,v in args.user_mapping.items():
|
|
|
+ if username == k:
|
|
|
+ username = v
|
|
|
+ break
|
|
|
+ for k,v in args.user_file.items():
|
|
|
+ if username == k:
|
|
|
+ username = v
|
|
|
+ break
|
|
|
|
|
|
path = os.path.join(i[3],i[4])
|
|
|
print('|'.join((str(i[0]),username,i[2],path)))
|