Skip to content

Instantly share code, notes, and snippets.

@philippbosch
Forked from wolever/git-blast
Created November 30, 2016 14:24
Show Gist options
  • Save philippbosch/5d25d225bb9510eb49de6ff74e7f4de7 to your computer and use it in GitHub Desktop.
Save philippbosch/5d25d225bb9510eb49de6ff74e7f4de7 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
import sys
def xcall(cmd):
return sp.check_output(cmd.split()).decode("utf-8")
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 = ''
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)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment