do not force main as main branch's name, try to guess
This commit is contained in:
parent
a476266393
commit
a36b792190
|
@ -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 ?'):
|
||||
|
|
Loading…
Reference in New Issue