Quick glance in to the state of your git branches
#!/usr/bin/env python | |
""" | |
This script implements a git subcommand for viewing git branches with | |
a summary on how far behind/ahead each branch is compared to current branch. | |
copy the file to somewhere in the path as git-branches and make it executable | |
then you can use `git branches` to see summary of unmerged branches | |
`git brnaches -a` will give a summary of all branches | |
This is mostly a python port of similar ruby script by @sosedoff | |
http://sosedoff.com/2014/07/03/cleanup-git-branches.html | |
""" | |
from __future__ import print_function | |
from sys import argv, exit | |
import os | |
show_all = True if len(argv) == 2 and argv[1] in ['-a', '--all'] else False | |
def colorize(num, word): | |
if 0 <= num <= 5: | |
return '\x1b[32m{} {}\x1b[0m'.format(num, word) | |
elif 5 < num <= 15: | |
return '\x1b[33m{} {}\x1b[0m'.format(num, word) | |
else: | |
return '\x1b[31m{} {}\x1b[0m'.format(num, word) | |
current = os.popen('git rev-parse --abbrev-ref HEAD').read().strip() | |
_all= [x.replace('*', '').strip() for x in os.popen('git branch --list --no-color').read().strip().split("\n")] | |
merged = [x.replace('*', '').strip() for x in os.popen('git branch --merged')] | |
if not show_all: | |
_all = [b for b in _all if b not in merged] | |
if len(_all) == 0: | |
print('Nothing to compare..') | |
exit() | |
pad = max(len(s) for s in _all) | |
for br in _all: | |
behind = len(os.popen('git rev-list ' + br + '..' + current).read().splitlines()) | |
ahead = len(os.popen('git rev-list ' + current + '..' + br).read().splitlines()) | |
if br is not 'master': | |
print('{} - {}, {}'.format(br.rjust(pad), colorize(behind, "behind"), colorize(ahead, "ahead"))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment