This is an automated email from the ASF dual-hosted git repository. brondsem pushed a commit to branch db/8486 in repository https://gitbox.apache.org/repos/asf/allura.git
commit c825787f5eb8b9ebc8e8f8219e57a3298cf31be3 Author: Dave Brondsema <[email protected]> AuthorDate: Mon Dec 19 21:54:40 2022 +0000 [#8486] git repos should look for main & master branches as possible default names --- Allura/allura/model/repository.py | 17 ++++++++++++----- ForgeGit/forgegit/git_main.py | 2 +- ForgeGit/forgegit/tests/model/test_repository.py | 20 ++++++++++++++------ 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/Allura/allura/model/repository.py b/Allura/allura/model/repository.py index 737389095..2eacb1762 100644 --- a/Allura/allura/model/repository.py +++ b/Allura/allura/model/repository.py @@ -33,9 +33,10 @@ from threading import Thread from six.moves.queue import Queue from itertools import chain, islice import typing +from collections.abc import Iterable import tg -from paste.deploy.converters import asint, asbool +from paste.deploy.converters import asint, asbool, aslist from tg import tmpl_context as c from tg import app_globals as g import pymongo @@ -778,15 +779,21 @@ class Repository(Artifact, ActivityObject): self.status = status session(self).flush(self) - def get_default_branch(self, default_branch_name): - branch_name = getattr(self, 'default_branch_name', None) or default_branch_name + def get_default_branch(self, common_defaults: str | Iterable[str]) -> str: + common_defaults = aslist(common_defaults) + branch_name = getattr(self, 'default_branch_name', None) branches = [] if not self.is_empty(): branches = [b.name for b in self.get_branches()] + if not branches: + return branch_name or common_defaults[0] + if branches and branch_name not in branches: - if default_branch_name in branches: - branch_name = default_branch_name + for comm_default in common_defaults: + if comm_default in branches: + branch_name = comm_default + break else: branch_name = branches[0] self.set_default_branch(branch_name) diff --git a/ForgeGit/forgegit/git_main.py b/ForgeGit/forgegit/git_main.py index ab6cd0537..f7850d72f 100644 --- a/ForgeGit/forgegit/git_main.py +++ b/ForgeGit/forgegit/git_main.py @@ -66,7 +66,7 @@ class ForgeGitApp(RepositoryApp): @property def default_branch_name(self): - return self.repo.get_default_branch('master') + return self.repo.get_default_branch(('main', 'master')) def admin_menu(self): links = [] diff --git a/ForgeGit/forgegit/tests/model/test_repository.py b/ForgeGit/forgegit/tests/model/test_repository.py index afcb1b3ac..29efceea1 100644 --- a/ForgeGit/forgegit/tests/model/test_repository.py +++ b/ForgeGit/forgegit/tests/model/test_repository.py @@ -602,13 +602,13 @@ By Dave Brondsema''' in text_body def test_default_branch_set(self): self.repo.default_branch_name = 'zz' - assert self.repo.get_default_branch('master') == 'zz' + assert self.repo.get_default_branch(('main', 'master')) == 'zz' def test_default_branch_non_standard_unset(self): with mock.patch.object(self.repo, 'get_branches') as gb,\ mock.patch.object(self.repo, 'set_default_branch') as set_db: gb.return_value = [Object(name='foo')] - assert self.repo.get_default_branch('master') == 'foo' + assert self.repo.get_default_branch(('main', 'master')) == 'foo' set_db.assert_called_once_with('foo') def test_default_branch_non_standard_invalid(self): @@ -616,7 +616,7 @@ By Dave Brondsema''' in text_body mock.patch.object(self.repo, 'set_default_branch') as set_db: self.repo.default_branch_name = 'zz' gb.return_value = [Object(name='foo')] - assert self.repo.get_default_branch('master') == 'foo' + assert self.repo.get_default_branch(('main', 'master')) == 'foo' set_db.assert_called_once_with('foo') def test_default_branch_invalid(self): @@ -624,20 +624,28 @@ By Dave Brondsema''' in text_body mock.patch.object(self.repo, 'set_default_branch') as set_db: self.repo.default_branch_name = 'zz' gb.return_value = [Object(name='foo'), Object(name='master')] - assert self.repo.get_default_branch('master') == 'master' + assert self.repo.get_default_branch(('main', 'master')) == 'master' set_db.assert_called_once_with('master') def test_default_branch_no_clobber(self): with mock.patch.object(self.repo, 'get_branches') as gb: gb.return_value = [] self.repo.default_branch_name = 'zz' - assert self.repo.get_default_branch('master') == 'zz' + assert self.repo.get_default_branch(('main', 'master')) == 'zz' def test_default_branch_clobber_none(self): with mock.patch.object(self.repo, 'get_branches') as gb: gb.return_value = [] self.repo.default_branch_name = None - assert self.repo.get_default_branch('master') == 'master' + assert self.repo.get_default_branch(('main', 'master')) == 'main' + + def test_default_branch_main_before_master(self): + with mock.patch.object(self.repo, 'get_branches') as gb,\ + mock.patch.object(self.repo, 'set_default_branch') as set_db: + self.repo.default_branch_name = None + gb.return_value = [Object(name='master'), Object(name='main')] + assert self.repo.get_default_branch(('main', 'master')) == 'main' + set_db.assert_called_once_with('main') def test_clone_url(self): assert (
