diff --git a/CHANGELOG b/CHANGELOG index e14255ee9b2fffc486572ff2e72009c31a85742b..16ed0470f8eb8e4a8661feeb77d1424b468278f5 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -55,6 +55,7 @@ v 7.14.0 (unreleased) - Fix bug causing error when the target branch of a symbolic ref was deleted - Include branch/tag name in archive file and directory name - Add dropzone upload progress + - Add a label for merged branches on branches page (Florent Baldino) v 7.13.3 - Fix bug causing Bitbucket importer to crash when OAuth application had been removed. diff --git a/app/models/repository.rb b/app/models/repository.rb index 0a62980f93a1b528ad39897c94691bd9be70ba5a..3bba3ca888a8b49453389cbddfe9403596c052dd 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -364,6 +364,17 @@ class Repository @root_ref ||= raw_repository.root_ref end + def merged_to_root_ref?(branch_name) + branch_commit = commit(branch_name) + root_ref_commit = commit(root_ref) + + if branch_commit + rugged.merge_base(root_ref_commit.id, branch_commit.id) == branch_commit.id + else + nil + end + end + def search_files(query, ref) offset = 2 args = %W(git grep -i -n --before-context #{offset} --after-context #{offset} #{query} #{ref || root_ref}) diff --git a/app/views/projects/branches/_branch.html.haml b/app/views/projects/branches/_branch.html.haml index 43412624da698af4b1797a061fb3ff423576b6e9..a693c4b282f06504199e9fc4cc0b1ae27413dfce 100644 --- a/app/views/projects/branches/_branch.html.haml +++ b/app/views/projects/branches/_branch.html.haml @@ -5,6 +5,11 @@ %strong.str-truncated= branch.name - if branch.name == @repository.root_ref %span.label.label-info default + - elsif @repository.merged_to_root_ref? branch.name + %span.label.label-primary.has_tooltip(title="Merged into #{@repository.root_ref}") + %i.fa.fa-check + merged + - if @project.protected_branch? branch.name %span.label.label-success %i.fa.fa-lock diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb index 0927cde61a6232bd61eb8aa882f576548b9430c8..8e2849691ff0573eacea42e73f1acb4c8bfb6608 100644 --- a/spec/models/repository_spec.rb +++ b/spec/models/repository_spec.rb @@ -34,6 +34,26 @@ describe Repository do end end + describe :merged_to_root_ref? do + context 'merged branch' do + subject { repository.merged_to_root_ref?('improve/awesome') } + + it { is_expected.to be_truthy } + end + + context 'non merged branch' do + subject { repository.merged_to_root_ref?('fix') } + + it { is_expected.to be_falsey } + end + + context 'non existent branch' do + subject { repository.merged_to_root_ref?('non_existent_branch') } + + it { is_expected.to be_nil } + end + end + describe "search_files" do let(:results) { repository.search_files('feature', 'master') } subject { results }