#!/usr/bin/env python import sys, subprocess, re if len(sys.argv) < 2: print("Usage: %s [...]\nThis is mostly here for helping the 'st' script." % sys.argv[0]) exit(1) interesting_branch_names = [ 'master', 'sysmocom/iu', 'sysmocom/sccp', 'aper-prefix-onto-upstream' ] re_branch_name = re.compile('^..([^ ]+) .*') re_ahead = re.compile('ahead [0-9]+|behind [0-9]+') def branch_name(line): m = re_branch_name.match(line) return m.group(1) interesting = [] def do_one_git(git_dir): global interesting branch_strs = subprocess.check_output(('git', '-C', git_dir, 'branch', '-vv')).decode('utf-8').splitlines() interesting_branches = [] for line in branch_strs: name = branch_name(line) current_branch = False if line.startswith('*'): current_branch = True elif name not in interesting_branch_names: continue ahead = re_ahead.findall(line) if not ahead and not current_branch: continue ahead = [x.replace('ahead ', '+').replace('behind ', '-') for x in ahead] br = (current_branch, name, ahead) if current_branch: interesting_branches.insert(0, br) else: interesting_branches.append(br) status = subprocess.check_output(('git', '-C', git_dir, 'status')).decode() has_mods = 'modified:' in status interesting.append((git_dir, has_mods, interesting_branches)) for git_dir in sys.argv[1:]: do_one_git(git_dir) first_col = max([len(git_dir) for git_dir, _, _ in interesting]) first_col_fmt = '%' + str(first_col) + 's' for git_dir, has_mods, interesting_branches in interesting: strs = [first_col_fmt % git_dir,] if has_mods: strs.append('MODS') for current_branch, name, ahead in interesting_branches: br = [] br.append(name) if ahead: br.append('[%s]' % '|'.join(ahead)) strs.append(''.join(br)) print(' '.join(strs)) # vim: shiftwidth=2 expandtab tabstop=2