Skip to content

Instantly share code, notes, and snippets.

@wolever
Last active November 30, 2016 14:24
Show Gist options
  • Save wolever/e54585df532ef23ceb1c to your computer and use it in GitHub Desktop.
Save wolever/e54585df532ef23ceb1c to your computer and use it in GitHub Desktop.
git-blast: show git branches sorted by last commit date
#!/usr/bin/env python
"""
Shows git branches sorted by last commit date, noting when branch has been
merged:
$ git blast
* master 33 minutes ago
david 4 days ago [M]
unholy-david-payments 4 days ago
handsontable-2 5 days ago
payments 5 days ago [M]
ask-inst-type 7 days ago
legacy 2 weeks ago
archive 2 weeks ago
upload 3 weeks ago
david-old 4 months ago
dbscan 5 months ago
matrix-fun 5 months ago
"""
import subprocess as sp
def xcall(cmd):
return sp.check_output(cmd.split()).decode("utf-8")
C_GREEN = '\033[0;32m'
C_BLUE = '\033[0;34m'
C_RESET = '\033[0;0m'
cur_branch = xcall("git rev-parse --abbrev-ref HEAD").strip()
merged_branches = set([
x.split()[-1] for x
in xcall("git branch --merged").splitlines()
])
by_date = xcall(
"git for-each-ref --sort=-committerdate refs/heads/ "
"--format=%(refname:short)%09%(committerdate:relative)"
)
for line in by_date.splitlines():
branch, _, date = line.partition("\t")
output = ""
if branch == cur_branch:
output += "* %s%s" %(C_GREEN, branch)
else:
output += " %s" %(branch, )
output += " %s%s%s" %(C_BLUE, date, C_RESET)
if branch in merged_branches and branch != cur_branch:
output += " [%sM%s]" %(C_GREEN, C_RESET)
print(output)
@bpoetz
Copy link

bpoetz commented May 20, 2016

thanks for sharing!

@dwf
Copy link

dwf commented Jun 4, 2016

You can make this more grep-friendly with

import sys
if sys.stdout.isatty():
    C_GREEN = '\033[0;32m'
    C_BLUE = '\033[0;34m'
    C_RESET = '\033[0;0m'
else:
    C_GREEN = C_BLUE = C_RESET = ''

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment