Feature #34942 ยป support-git-main-branch.patch
| lib/redmine/scm/adapters/git_adapter.rb | ||
|---|---|---|
| 25 | 25 |
class GitAdapter < AbstractAdapter |
| 26 | 26 |
# Git executable name |
| 27 | 27 |
GIT_BIN = Redmine::Configuration['scm_git_command'] || "git" |
| 28 |
# Repositories created after 2020 may have a default branch of |
|
| 29 |
# "main" instead of "master" |
|
| 30 |
GIT_DEFAULT_BRANCH_NAMES = %w[main master].freeze |
|
| 28 | 31 | |
| 29 | 32 |
class GitBranch < Branch |
| 30 | 33 |
attr_accessor :is_default |
| ... | ... | |
| 110 | 113 |
end |
| 111 | 114 | |
| 112 | 115 |
def default_branch |
| 113 |
bras = self.branches |
|
| 114 |
return unless bras |
|
| 116 |
return if branches.blank? |
|
| 115 | 117 | |
| 116 |
default_bras = bras.detect{|x| x.is_default == true}
|
|
| 117 |
return default_bras.to_s if default_bras
|
|
| 118 | ||
| 119 |
master_bras = bras.detect{|x| x.to_s == 'master'}
|
|
| 120 |
master_bras ? 'master' : bras.first.to_s
|
|
| 118 |
(
|
|
| 119 |
branches.detect(&:is_default) ||
|
|
| 120 |
branches.detect {|b| GIT_DEFAULT_BRANCH_NAMES.include?(b.to_s)} ||
|
|
| 121 |
branches.first
|
|
| 122 |
).to_s
|
|
| 121 | 123 |
end |
| 122 | 124 | |
| 123 | 125 |
def entry(path=nil, identifier=nil) |
| test/unit/lib/redmine/scm/adapters/git_adapter_test.rb | ||
|---|---|---|
| 124 | 124 | |
| 125 | 125 |
def test_default_branch |
| 126 | 126 |
assert_equal 'master-20120212', @adapter.default_branch |
| 127 | ||
| 128 |
# When no branch is marked as the default, GitAdapter treats |
|
| 129 |
# "main" or "master" branch as the default |
|
| 130 |
b_foo, b_bar, b_main, b_master = |
|
| 131 |
%w[foo bar main master].map do |name| |
|
| 132 |
Redmine::Scm::Adapters::GitAdapter::GitBranch.new(name) |
|
| 133 |
end |
|
| 134 |
@adapter.stubs(:branches).returns([b_foo, b_main, b_bar]) |
|
| 135 |
assert_equal 'main', @adapter.default_branch |
|
| 136 |
@adapter.stubs(:branches).returns([b_foo, b_master, b_bar]) |
|
| 137 |
assert_equal 'master', @adapter.default_branch |
|
| 138 | ||
| 139 |
# The first found branch is treated as the default branch |
|
| 140 |
# when neither "main" nor "master" is found |
|
| 141 |
@adapter.stubs(:branches).returns([b_foo, b_bar]) |
|
| 142 |
assert_equal 'foo', @adapter.default_branch |
|
| 143 | ||
| 144 |
@adapter.stubs(:branches).returns([]) |
|
| 145 |
assert_nil @adapter.default_branch |
|
| 127 | 146 |
end |
| 128 | 147 | |
| 129 | 148 |
def test_tags |