blob: 3de7cb7024259f72285b9c83d6972ca9b8794174 [file] [log] [blame]
alshabibb6ba5082015-07-09 14:57:23 -07001#!/usr/bin/env python
2
3from subprocess import check_output
4import sys
5
6def get_merged_branches_by_change_id():
7 '''a list of merged branches, by change id excluding support branches and master'''
8 raw_changeIds = check_output('git log origin/master | grep -i change-id | awk {\' print $2 \'}', shell=True)
9 changeIds = [b.strip() for b in raw_changeIds.split('\n') if b.strip()]
10 raw_branches = check_output('git branch -a', shell=True)
11 branches = [b.strip() for b in raw_branches.split('\n')
12 if b.strip() and not b.startswith('*') and \
13 not b.strip().startswith('onos') and not b.strip().startswith('remotes') and b.strip() != 'master']
14 to_delete = []
15 for branch in branches:
16 raw_local_change_ids = check_output('git show %s | grep -i change-id | awk {\' print $2 \'}' % branch, shell=True)
17 local_change_ids = [ b.strip() for b in raw_local_change_ids.split('\n') if b.strip() ]
18 for local_change_id in local_change_ids:
19 if local_change_id in changeIds and branch not in to_delete:
20 to_delete.append(branch)
21
22 return to_delete
23
24
25def delete_branch(branch):
26 return check_output('git branch -D %s' % branch, shell=True).strip()
27
28
29if __name__ == '__main__':
30 dry_run = '--confirm' not in sys.argv
31 one_by_one = '--one-by-one' in sys.argv
32 to_delete = get_merged_branches_by_change_id()
33 if len(to_delete) == 0:
34 print "Nothing to clean"
35 sys.exit(0)
36 for branch in to_delete:
37 if dry_run:
38 print branch
39 else:
40 if one_by_one:
41 print 'Do you want to delete branch %s [y/N]' % branch
42 ans = raw_input()
43 if ans == 'y' or ans == 'Y':
44 print delete_branch(branch)
45 else:
46 print delete_branch(branch)
47
48 if dry_run:
49 print '*****************************************************************'
50 print 'Did not actually delete anything yet, pass in --confirm to delete'
51 print