[+] Git id list script
This commit is contained in:
Executable
+89
@@ -0,0 +1,89 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
import argparse
|
||||||
|
import json
|
||||||
|
import sys
|
||||||
|
from pathlib import Path
|
||||||
|
from subprocess import check_output
|
||||||
|
|
||||||
|
CONFIG = Path.home() / ".config" / "git-ids.json"
|
||||||
|
|
||||||
|
|
||||||
|
def load() -> dict[str, list[str]]:
|
||||||
|
if not CONFIG.is_file():
|
||||||
|
return {}
|
||||||
|
return json.loads(CONFIG.read_text())
|
||||||
|
|
||||||
|
|
||||||
|
def store(d: dict[str, list[str]]):
|
||||||
|
CONFIG.parent.mkdir(parents=True, exist_ok=True)
|
||||||
|
CONFIG.write_text(json.dumps(d, indent=2))
|
||||||
|
print("Saved.")
|
||||||
|
|
||||||
|
|
||||||
|
def cmd_get(args: argparse.Namespace):
|
||||||
|
n = load().get(args.alias)
|
||||||
|
if n is None:
|
||||||
|
exit(128)
|
||||||
|
print("\n".join(n))
|
||||||
|
|
||||||
|
|
||||||
|
def cmd_add(args: argparse.Namespace):
|
||||||
|
store({args.alias: [args.name, args.email], **load()})
|
||||||
|
|
||||||
|
|
||||||
|
def cmd_add_all(_):
|
||||||
|
f = load()
|
||||||
|
log = check_output('git log --pretty="%an%n%ae%n%n"', shell=True).decode().strip().split("\n\n")
|
||||||
|
log = {tuple(l.strip().split('\n')) for l in log}
|
||||||
|
log = {l for l in log if l not in f.values()}
|
||||||
|
print(log)
|
||||||
|
|
||||||
|
# Filter out no-reply
|
||||||
|
new_log = []
|
||||||
|
for n, _ in log:
|
||||||
|
same_name = [(n1, e) for n1, e in log if n1 == n]
|
||||||
|
filtered = [(n, e) for n, e in same_name if "noreply.github.com" not in e]
|
||||||
|
if len(filtered):
|
||||||
|
new_log += filtered
|
||||||
|
else:
|
||||||
|
new_log += same_name
|
||||||
|
log = new_log
|
||||||
|
|
||||||
|
for l in log:
|
||||||
|
a = input(f"Do you want {l} to be added?\nType in an alias if yes, otherwise type enter.\n> ").strip()
|
||||||
|
if a:
|
||||||
|
f[a] = l
|
||||||
|
store(f)
|
||||||
|
|
||||||
|
|
||||||
|
def cmd_list(_):
|
||||||
|
print("\n".join(f"{n}: {e[0]}, {e[1]}" for n, e in load().items()))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
raw_args = sys.argv[1:]
|
||||||
|
if not raw_args:
|
||||||
|
raw_args = ['-h']
|
||||||
|
|
||||||
|
par = argparse.ArgumentParser("Git ID List")
|
||||||
|
sp = par.add_subparsers()
|
||||||
|
|
||||||
|
get = sp.add_parser("get", usage="Get an identity")
|
||||||
|
get.set_defaults(handler=cmd_get)
|
||||||
|
get.add_argument("alias", help="Alias of the author")
|
||||||
|
|
||||||
|
add = sp.add_parser("add", usage="Add an identity")
|
||||||
|
add.set_defaults(handler=cmd_add)
|
||||||
|
add.add_argument("alias", help="Short alias of the author")
|
||||||
|
add.add_argument("name", help="Name shown in git log")
|
||||||
|
add.add_argument("email", help="Email shown in git log")
|
||||||
|
|
||||||
|
add = sp.add_parser("add-all", usage="Ask to add each identity from current git log")
|
||||||
|
add.set_defaults(handler=cmd_add_all)
|
||||||
|
|
||||||
|
add = sp.add_parser("list", usage="List identities")
|
||||||
|
add.set_defaults(handler=cmd_list)
|
||||||
|
|
||||||
|
args = par.parse_args(raw_args)
|
||||||
|
if hasattr(args, "handler"):
|
||||||
|
args.handler(args)
|
||||||
@@ -212,6 +212,11 @@ setproxy() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Git identity
|
# Git identity
|
||||||
|
git-ida() {
|
||||||
|
# Zsh only
|
||||||
|
TMP_ARR=("${(@f)$(git-id-list get "$1")}")
|
||||||
|
git-id "${TMP_ARR[1]}" "${TMP_ARR[2]}"
|
||||||
|
}
|
||||||
git-id() {
|
git-id() {
|
||||||
export GIT_USER="$1"
|
export GIT_USER="$1"
|
||||||
export GIT_EMAIL="$2"
|
export GIT_EMAIL="$2"
|
||||||
|
|||||||
Reference in New Issue
Block a user