diff --git a/gitcheckup.py b/gitcheckup.py index 8c22b91..b66de1b 100644 --- a/gitcheckup.py +++ b/gitcheckup.py @@ -17,19 +17,47 @@ DIRECTORIES = [ r'D:\Git\YCDL', ] -def checkup(directory): +# Here is an example of typical git status output: +# +# On branch master +# Changes not staged for commit: +# (use "git add/rm ..." to update what will be committed) +# (use "git checkout -- ..." to discard changes in working directory) +# +# modified: file1 +# deleted: file2 +# +# Untracked files: +# (use "git add ..." to include in what will be committed) +# +# file3 +# +# no changes added to commit (use "git add" and/or "git commit -a") +# --- ALTERNATE LAST LINE --- +# nothing added to commit but untracked files present (use "git add" to track) + +# Here is an example of typical git log -1 --decorate output: +# +# commit f8fddd0de4283a251a8beb35493bd1bd3a4c925a (HEAD -> master) +# Author: My Name +# Date: Sat Jan 11 01:59:07 2020 -0800 +# +# I made some changes. + +def checkup_committed(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:') + committed = False if b'Untracked files' in output: - added = output.split(b'in what will be committed)')[1] + added = output.split(b'include 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()] @@ -38,30 +66,34 @@ def checkup(directory): else: added = 0 - committed = False - details = f'(+{added}, -{deleted}, ~{modified})' + modified = output.count(b'modified:') + deleted = output.count(b'deleted:') + details = f'+{added}, -{deleted}, ~{modified}' + return (committed, details) + +def checkup_pushed(directory): + os.chdir(directory) 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 + refs = headline.split(b'(')[-1].split(b')')[0] + return any (b'/' in ref for ref in refs.split(b',')) + +def checkup(directory): + (committed, details) = checkup_committed(directory) + pushed = checkup_pushed(directory) return {'committed': committed, 'pushed': pushed, 'details': details} -def checkup_all(): +def main(argv): 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 '' + details = result['details'] + details = f' ({details})' if details else '' print(f'[{committed}][{pushed}] {directory}{details}') -def main(argv): - checkup_all() - if __name__ == '__main__': raise SystemExit(main(sys.argv[1:]))