diff --git a/gitcheckup.py b/gitcheckup.py new file mode 100644 index 0000000..8c22b91 --- /dev/null +++ b/gitcheckup.py @@ -0,0 +1,67 @@ +import sys +import subprocess +import os + +from voussoirkit import winwhich + +GIT = winwhich.which('git') + +DIRECTORIES = [ + r'D:\Git\cmd', + r'D:\Git\epubfile', + r'D:\Git\Etiquette', + r'D:\Git\reddit', + r'D:\Git\reddit\Timesearch', + r'D:\Git\sigilplugins', + r'D:\Git\voussoirkit', + r'D:\Git\YCDL', +] + +def checkup(directory): + os.chdir(directory) + command = [GIT, 'status'] + output = subprocess.check_output(command, stderr=subprocess.STDOUT) + if b'nothing to commit' in output: + committed = True + details = '' + else: + modified = output.count(b'modified:') + deleted = output.count(b'deleted:') + + if b'Untracked files' in output: + added = output.split(b'in what will be committed)')[1] + added = added.split(b'no changes added to commit')[0] + added = added.split(b'nothing added to commit but')[0] + added = [x.strip() for x in added.splitlines()] + added = [x for x in added if x] + added = len(added) + else: + added = 0 + + committed = False + details = f'(+{added}, -{deleted}, ~{modified})' + + command = [GIT, 'log', '-1', '--decorate'] + output = subprocess.check_output(command, stderr=subprocess.STDOUT) + headline = output.splitlines()[0] + locations = headline.split(b'(')[-1].split(b')')[0] + if b',' in locations: + pushed = True + else: + pushed = False + return {'committed': committed, 'pushed': pushed, 'details': details} + +def checkup_all(): + print('[C][P]') + for directory in DIRECTORIES: + result = checkup(directory) + committed = 'x' if result['committed'] else ' ' + pushed = 'x' if result['pushed'] else ' ' + details = (' ' + result['details']) if result['details'] else '' + print(f'[{committed}][{pushed}] {directory}{details}') + +def main(argv): + checkup_all() + +if __name__ == '__main__': + raise SystemExit(main(sys.argv[1:]))