diff options
Diffstat (limited to 'framework/src/onos/tools/dev/bin/clean-branches.py')
-rwxr-xr-x | framework/src/onos/tools/dev/bin/clean-branches.py | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/framework/src/onos/tools/dev/bin/clean-branches.py b/framework/src/onos/tools/dev/bin/clean-branches.py new file mode 100755 index 00000000..3de7cb70 --- /dev/null +++ b/framework/src/onos/tools/dev/bin/clean-branches.py @@ -0,0 +1,51 @@ +#!/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 |