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 (

Reply via email to