add command clean to delete origin and local branches for closed issues

This commit is contained in:
Benjamin Dauvergne 2019-08-06 17:03:30 +02:00
parent 69007372fc
commit 253ff93085
1 changed files with 45 additions and 0 deletions

View File

@ -555,5 +555,50 @@ def set(project_id):
config_writer.write()
@redmine.command()
def clean():
repo = get_repo()
repo.git.fetch(prune=True)
api = get_redmine_api()
issue_re = re.compile(r'wip/([0-9]+)')
issues_to_branch = {}
origin = repo.remote()
for ref in origin.refs:
m = issue_re.search(ref.name)
if not m:
continue
issues_to_branch[m.group(1)] = ref.name.lstrip('origin/')
if not issues_to_branch:
return
issues = api.issue.filter(issue_id=','.join(issues_to_branch), status_id='closed')
issues_to_delete = list(issues.values_list('id', 'subject'))
for _id, _subject in issues_to_delete:
print('%5s | %60s | %s' % (_id, issues_to_branch[str(_id)][:60], _subject))
if issues_to_delete and click.confirm('Remove theses remote branches ?'):
for _id, _subject in issues_to_delete:
ref = issues_to_branch[str(_id)]
click.echo('Deleting origin/%s... ' % ref, nl=False)
origin.push(refspec=':%s' % ref)
click.echo(click.style('Done.', fg='green'))
issues_to_branch = {}
for ref in repo.branches:
m = issue_re.search(ref.name)
if not m:
continue
issues_to_branch[m.group(1)] = ref.name
issues = api.issue.filter(issue_id=','.join(issues_to_branch), status_id='closed')
issues_to_delete = list(issues.values_list('id', 'subject'))
for _id, _subject in issues_to_delete:
print('%5s | %60s | %s' % (_id, issues_to_branch[str(_id)][:60], _subject))
if issues_to_delete and click.confirm('Remove theses branches ?'):
for _id, _subject in issues_to_delete:
ref = issues_to_branch[str(_id)]
click.echo('Deleting %s... ' % ref, nl=False)
repo.delete_head(ref, force=True)
click.echo(click.style('Done.', fg='green'))
if __name__ == '__main__':
redmine()