#!/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)', 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())