mirror of
https://github.com/opennetworkinglab/onos.git
synced 2025-10-14 17:01:02 +02:00
52 lines
2.0 KiB
Python
Executable File
52 lines
2.0 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
from subprocess import check_output
|
|
import sys
|
|
|
|
def get_merged_branches_by_change_id():
|
|
'''a list of merged branches, by change id excluding support branches and master'''
|
|
raw_changeIds = check_output('git log origin/master | grep -i change-id | awk {\' print $2 \'}', shell=True)
|
|
changeIds = [b.strip() for b in raw_changeIds.split('\n') if b.strip()]
|
|
raw_branches = check_output('git branch -a', shell=True)
|
|
branches = [b.strip() for b in raw_branches.split('\n')
|
|
if b.strip() and not b.startswith('*') and \
|
|
not b.strip().startswith('onos') and not b.strip().startswith('remotes') and b.strip() != 'master']
|
|
to_delete = []
|
|
for branch in branches:
|
|
raw_local_change_ids = check_output('git show %s -- | grep -i change-id | awk {\' print $2 \'}' % branch, shell=True)
|
|
local_change_ids = [ b.strip() for b in raw_local_change_ids.split('\n') if b.strip() ]
|
|
for local_change_id in local_change_ids:
|
|
if local_change_id in changeIds and branch not in to_delete:
|
|
to_delete.append(branch)
|
|
|
|
return to_delete
|
|
|
|
|
|
def delete_branch(branch):
|
|
return check_output('git branch -D %s' % branch, shell=True).strip()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
dry_run = '--confirm' not in sys.argv
|
|
one_by_one = '--one-by-one' in sys.argv
|
|
to_delete = get_merged_branches_by_change_id()
|
|
if len(to_delete) == 0:
|
|
print "Nothing to clean"
|
|
sys.exit(0)
|
|
for branch in to_delete:
|
|
if dry_run:
|
|
print branch
|
|
else:
|
|
if one_by_one:
|
|
print 'Do you want to delete branch %s [y/N]' % branch
|
|
ans = raw_input()
|
|
if ans == 'y' or ans == 'Y':
|
|
print delete_branch(branch)
|
|
else:
|
|
print delete_branch(branch)
|
|
|
|
if dry_run:
|
|
print '*****************************************************************'
|
|
print 'Did not actually delete anything yet, pass in --confirm to delete'
|
|
print
|