mirror of
				https://github.com/opennetworkinglab/onos.git
				synced 2025-10-31 08:11:00 +01: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 
 |