do not force main as main branch's name, try to guess

This commit is contained in:
Benjamin Dauvergne 2021-11-25 11:33:31 +01:00
parent a476266393
commit a36b792190
1 changed files with 48 additions and 14 deletions

View File

@ -6,9 +6,11 @@
from __future__ import print_function
from datetime import datetime, timedelta
import os
import re
import git
import configparser
import unidecode
import tempfile
import glob
@ -36,12 +38,26 @@ def get_config(name, default=Ellipsis):
reader = repo.config_reader()
if not reader.has_section('redmine'):
raise click.UsageError('Please add a redmine section to your git configuration')
if not reader.has_option('redmine', name):
if default is Ellipsis:
raise click.UsageError('Please add redmine\'s %s' % name)
else:
return default
return reader.get('redmine', name)
if default is Ellipsis:
return reader.get('redmine', name)
else:
return reader.get('redmine', name, fallback=default)
def get_main_branch_name():
# try to get local default
try:
return get_config('main')
except configparser.NoOptionError:
pass
# or guess...
repo = get_repo()
reader = repo.config_reader()
default = reader.get('init', 'defaultBranch', fallback='main')
for branch_name in [default, 'master', 'main']:
if branch_name in repo.branches:
return branch_name
def get_redmine_api():
@ -137,6 +153,11 @@ def redmine():
pass
@redmine.command()
def main_branch():
print(get_main_branch_name())
@redmine.command()
def shell():
import IPython
@ -209,11 +230,11 @@ def take(issue_number, reference):
else:
new = True
default_branch_name = 'wip/%s-%s' % (issue_number, slugify(issue.subject)[:32])
click.confirm('Do you want to create a branch tracking %s ?' % (reference or 'origin/main'),
click.confirm('Do you want to create a branch tracking %s ?' % (reference or 'origin/%s' % get_main_branch_name()),
default=True, abort=True)
branch_name = click.prompt('Branch name', default=default_branch_name)
branch = repo.create_head(branch_name, commit=reference or 'origin/main')
set_branch_option(repo, branch, 'merge', 'refs/heads/main')
branch = repo.create_head(branch_name, commit=reference or 'origin/%s' % get_main_branch_name())
set_branch_option(repo, branch, 'merge', 'refs/heads/%s' % get_main_branch_name())
set_branch_option(repo, branch, 'remote', '.')
if repo.head.reference == branch:
click.echo('Already on branch %s' % branch_name)
@ -272,7 +293,7 @@ def submit(ctx, issue, no_rebase, number_of_commits):
api = get_redmine_api()
kwargs = {}
repo = get_repo()
for commit in list(get_commits(repo, 'main'))[:number_of_commits]:
for commit in list(get_commits(repo, get_main_branch_name()))[:number_of_commits]:
if ('#%s' % get_current_issue()) not in commit.message:
click.echo(click.style('Missing commit number in commit message', fg='red'))
click.echo()
@ -379,7 +400,7 @@ def get_commits(repo, ref):
@redmine.command(name='merge-and-push')
@click.option('--issue', default=None, type=int)
@click.option('--validate-msg/--no-validate-msg', default=True)
@click.argument('target_branch', default='main')
@click.argument('target_branch', default=get_main_branch_name())
def merge_and_push(issue, validate_msg, target_branch):
issue = get_issue(issue or None)
repo = get_repo()
@ -506,7 +527,7 @@ def merge_and_push(issue, validate_msg, target_branch):
@redmine.command(name='rebase')
@click.argument('target_branch', default='main')
@click.argument('target_branch', default=get_main_branch_name())
def rebase(target_branch):
repo = get_repo()
origin = repo.remote()
@ -599,8 +620,21 @@ def clean():
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'))
issues_to_delete = []
temp_issues_to_branch = list(issues_to_branch)
while temp_issues_to_branch:
issue_ids = ','.join(temp_issues_to_branch[:30])
issues = api.issue.filter(issue_id=issue_ids,
status_id='closed',
include=['journals'])
for issue in issues:
journals = list(issue.journals)
last_journal = len(journals) and journals[len(journals) - 1]
if last_journal.created_on < datetime.now() - timedelta(days=21):
issues_to_delete.append((issue.id, issue.subject))
temp_issues_to_branch = temp_issues_to_branch[30:]
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 ?'):