mirror of
https://github.com/redmine/redmine.git
synced 2025-11-13 16:56:00 +01:00
Support for Git repositories with default branch "main" (#34942).
Patch by Go MAEDA. git-svn-id: http://svn.redmine.org/redmine/trunk@20851 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
@@ -25,6 +25,9 @@ module Redmine
|
||||
class GitAdapter < AbstractAdapter
|
||||
# Git executable name
|
||||
GIT_BIN = Redmine::Configuration['scm_git_command'] || "git"
|
||||
# Repositories created after 2020 may have a default branch of
|
||||
# "main" instead of "master"
|
||||
GIT_DEFAULT_BRANCH_NAMES = %w[main master].freeze
|
||||
|
||||
class GitBranch < Branch
|
||||
attr_accessor :is_default
|
||||
@@ -110,14 +113,13 @@ module Redmine
|
||||
end
|
||||
|
||||
def default_branch
|
||||
bras = self.branches
|
||||
return unless bras
|
||||
return if branches.blank?
|
||||
|
||||
default_bras = bras.detect{|x| x.is_default == true}
|
||||
return default_bras.to_s if default_bras
|
||||
|
||||
master_bras = bras.detect{|x| x.to_s == 'master'}
|
||||
master_bras ? 'master' : bras.first.to_s
|
||||
(
|
||||
branches.detect(&:is_default) ||
|
||||
branches.detect {|b| GIT_DEFAULT_BRANCH_NAMES.include?(b.to_s)} ||
|
||||
branches.first
|
||||
).to_s
|
||||
end
|
||||
|
||||
def entry(path=nil, identifier=nil)
|
||||
|
||||
@@ -124,6 +124,25 @@ class GitAdapterTest < ActiveSupport::TestCase
|
||||
|
||||
def test_default_branch
|
||||
assert_equal 'master-20120212', @adapter.default_branch
|
||||
|
||||
# When no branch is marked as the default, GitAdapter treats
|
||||
# "main" or "master" branch as the default
|
||||
b_foo, b_bar, b_main, b_master =
|
||||
%w[foo bar main master].map do |name|
|
||||
Redmine::Scm::Adapters::GitAdapter::GitBranch.new(name)
|
||||
end
|
||||
@adapter.stubs(:branches).returns([b_foo, b_main, b_bar])
|
||||
assert_equal 'main', @adapter.default_branch
|
||||
@adapter.stubs(:branches).returns([b_foo, b_master, b_bar])
|
||||
assert_equal 'master', @adapter.default_branch
|
||||
|
||||
# The first found branch is treated as the default branch
|
||||
# when neither "main" nor "master" is found
|
||||
@adapter.stubs(:branches).returns([b_foo, b_bar])
|
||||
assert_equal 'foo', @adapter.default_branch
|
||||
|
||||
@adapter.stubs(:branches).returns([])
|
||||
assert_nil @adapter.default_branch
|
||||
end
|
||||
|
||||
def test_tags
|
||||
|
||||
Reference in New Issue
Block a user