60 lines
1.5 KiB
Python
Executable file
60 lines
1.5 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
|
|
# Usage: git setmail
|
|
#
|
|
# Configuration format:
|
|
# [
|
|
# {
|
|
# "match": ".*",
|
|
# "email": "mymail@example.com",
|
|
# "signingkey": "...",
|
|
# }
|
|
# ]
|
|
|
|
import sys
|
|
import re
|
|
import subprocess
|
|
import os.path
|
|
import json
|
|
|
|
CONFIG = os.path.expanduser('~/.config/git-committerconfig.json')
|
|
|
|
|
|
def main():
|
|
try:
|
|
repo = [x.split()[1] for x
|
|
in subprocess.check_output(['git', 'remote', '-v'], universal_newlines=True).split('\n')
|
|
if re.match('origin.*\(push\)', x)][0]
|
|
except:
|
|
print('Could not find origin, not setting local git configuration.')
|
|
return 0
|
|
|
|
if os.path.isfile(CONFIG):
|
|
combinations = json.loads(open(CONFIG).read())
|
|
else:
|
|
print('Config ({}) found.'.format(CONFIG))
|
|
return 1
|
|
|
|
for combi in combinations:
|
|
if re.search(combi['match'], repo):
|
|
set_local_config('user.email', combi['email'])
|
|
|
|
if 'signingkey' in combi and combi['signingkey'] != '':
|
|
set_local_config('user.signingkey', combi['signingkey'])
|
|
set_local_config('gpg.format', 'ssh' if re.search(
|
|
r'^(?:ssh|ecdsa|key::)', combi['signingkey']) else 'openpgp')
|
|
|
|
if 'commit-opts' in combi:
|
|
set_local_config('commit.cliopts', combi['commit-opts'])
|
|
|
|
break
|
|
|
|
return 0
|
|
|
|
|
|
def set_local_config(param, value):
|
|
subprocess.check_call(['git', 'config', '--local', param, value])
|
|
|
|
|
|
if __name__ == "__main__":
|
|
exit(main())
|