diff --git a/lib/redmine/scm/adapters/git_adapter.rb b/lib/redmine/scm/adapters/git_adapter.rb index 8f3008df..e1932da7 100644 --- a/lib/redmine/scm/adapters/git_adapter.rb +++ b/lib/redmine/scm/adapters/git_adapter.rb @@ -100,6 +100,13 @@ module Redmine def default_branch bras = self.branches return nil if bras.nil? + head = nil + scm_cmd('symbolic-ref', 'HEAD') do |io| + head = io.readline + end + /^refs\/heads\/(.*)$/.match(head) + bras.include?($1) ? $1 : bras.first + rescue ScmCommandAborted, EOFError bras.include?('master') ? 'master' : bras.first end diff --git a/test/unit/lib/redmine/scm/adapters/git_adapter_test.rb b/test/unit/lib/redmine/scm/adapters/git_adapter_test.rb index acee7b90..15724417 100644 --- a/test/unit/lib/redmine/scm/adapters/git_adapter_test.rb +++ b/test/unit/lib/redmine/scm/adapters/git_adapter_test.rb @@ -231,6 +231,13 @@ begin end end + def test_default_branch + @adapter.send :scm_cmd, 'branch', '-m', 'master', 'non-master-default-branch' + assert_equal 'non-master-default-branch', @adapter.default_branch + ensure + @adapter.send :scm_cmd, 'branch', '-m', 'non-master-default-branch', 'master' + end + private def test_scm_version_for(scm_command_version, version)