summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/controllers/projects/branches_controller.rb4
-rw-r--r--app/controllers/projects/protected_branches_controller.rb4
-rw-r--r--app/helpers/tab_helper.rb2
-rw-r--r--app/models/repository.rb21
-rw-r--r--app/views/layouts/nav/_project.html.haml2
-rw-r--r--app/views/projects/_settings_nav.html.haml4
-rw-r--r--app/views/projects/branches/_branch.html.haml10
-rw-r--r--app/views/projects/branches/_filter.html.haml27
-rw-r--r--app/views/projects/branches/index.html.haml39
-rw-r--r--app/views/projects/branches/recent.html.haml8
-rw-r--r--app/views/projects/commits/_head.html.haml4
-rw-r--r--app/views/projects/protected_branches/index.html.haml96
-rw-r--r--config/routes.rb7
13 files changed, 109 insertions, 119 deletions
diff --git a/app/controllers/projects/branches_controller.rb b/app/controllers/projects/branches_controller.rb
index 00811f17adb..8c70ae45f06 100644
--- a/app/controllers/projects/branches_controller.rb
+++ b/app/controllers/projects/branches_controller.rb
@@ -7,7 +7,9 @@ class Projects::BranchesController < Projects::ApplicationController
before_filter :authorize_push!, only: [:create, :destroy]
def index
- @branches = Kaminari.paginate_array(@repository.branches).page(params[:page]).per(30)
+ @sort = params[:sort] || 'name'
+ @branches = @repository.branches_sorted_by(@sort)
+ @branches = Kaminari.paginate_array(@branches).page(params[:page]).per(30)
end
def recent
diff --git a/app/controllers/projects/protected_branches_controller.rb b/app/controllers/projects/protected_branches_controller.rb
index cfc1bd99a20..e39e97af8dd 100644
--- a/app/controllers/projects/protected_branches_controller.rb
+++ b/app/controllers/projects/protected_branches_controller.rb
@@ -1,9 +1,9 @@
class Projects::ProtectedBranchesController < Projects::ApplicationController
# Authorize
- before_filter :authorize_read_project!
before_filter :require_non_empty_project
+ before_filter :authorize_admin_project!
- before_filter :authorize_admin_project!, only: [:destroy, :create]
+ layout "project_settings"
def index
@branches = @project.protected_branches.to_a
diff --git a/app/helpers/tab_helper.rb b/app/helpers/tab_helper.rb
index bd373c5f3cf..610175f8447 100644
--- a/app/helpers/tab_helper.rb
+++ b/app/helpers/tab_helper.rb
@@ -75,7 +75,7 @@ module TabHelper
def project_tab_class
return "active" if current_page?(controller: "/projects", action: :edit, id: @project)
- if ['services', 'hooks', 'deploy_keys', 'team_members'].include? controller.controller_name
+ if ['services', 'hooks', 'deploy_keys', 'team_members', 'protected_branches'].include? controller.controller_name
"active"
end
end
diff --git a/app/models/repository.rb b/app/models/repository.rb
index eadc34127c2..b7239236aea 100644
--- a/app/models/repository.rb
+++ b/app/models/repository.rb
@@ -55,12 +55,6 @@ class Repository
tags.find { |tag| tag.name == name }
end
- def recent_branches(limit = 20)
- branches.sort do |a, b|
- commit(b.target).committed_date <=> commit(a.target).committed_date
- end[0..limit]
- end
-
def add_branch(branch_name, ref)
Rails.cache.delete(cache_key(:branch_names))
@@ -220,4 +214,19 @@ class Repository
def clean_old_archives
Gitlab::Popen.popen(%W(find #{Gitlab.config.gitlab.repository_downloads_path} -mmin +120 -delete))
end
+
+ def branches_sorted_by(value)
+ case value
+ when 'recently_updated'
+ branches.sort do |a, b|
+ commit(b.target).committed_date <=> commit(a.target).committed_date
+ end
+ when 'last_updated'
+ branches.sort do |a, b|
+ commit(a.target).committed_date <=> commit(b.target).committed_date
+ end
+ else
+ branches
+ end
+ end
end
diff --git a/app/views/layouts/nav/_project.html.haml b/app/views/layouts/nav/_project.html.haml
index 1f70cf17987..d7d330e2a61 100644
--- a/app/views/layouts/nav/_project.html.haml
+++ b/app/views/layouts/nav/_project.html.haml
@@ -8,7 +8,7 @@
= link_to 'Files', project_tree_path(@project, @ref || @repository.root_ref)
- if project_nav_tab? :commits
- = nav_link(controller: %w(commit commits compare repositories protected_branches tags branches)) do
+ = nav_link(controller: %w(commit commits compare repositories tags branches)) do
= link_to "Commits", project_commits_path(@project, @ref || @repository.root_ref)
- if project_nav_tab? :network
diff --git a/app/views/projects/_settings_nav.html.haml b/app/views/projects/_settings_nav.html.haml
index 4c7b088ae9a..9b73f06a5be 100644
--- a/app/views/projects/_settings_nav.html.haml
+++ b/app/views/projects/_settings_nav.html.haml
@@ -19,3 +19,7 @@
= link_to project_services_path(@project) do
%i.icon-cogs
Services
+ = nav_link(controller: :protected_branches) do
+ = link_to project_protected_branches_path(@project) do
+ %i.icon-lock
+ Protected branches
diff --git a/app/views/projects/branches/_branch.html.haml b/app/views/projects/branches/_branch.html.haml
index 87f4dd88c27..a5f382c9a5c 100644
--- a/app/views/projects/branches/_branch.html.haml
+++ b/app/views/projects/branches/_branch.html.haml
@@ -8,6 +8,7 @@
- if @project.protected_branch? branch.name
%span.label.label-success
%i.icon-lock
+ protected
.pull-right
- if can?(current_user, :download_code, @project)
= render 'projects/repositories/download_archive', ref: branch.name, btn_class: 'btn-grouped btn-group-small'
@@ -21,13 +22,8 @@
%i.icon-trash
- if commit
- %p
- = link_to project_commit_path(@project, commit.id), class: 'commit_short_id' do
- = commit.short_id
- = image_tag avatar_icon(commit.author_email), class: "avatar s16", alt: ''
- %span.light
- = gfm escape_once(truncate(commit.title, length: 40))
- #{time_ago_with_tooltip(commit.committed_date)}
+ %ul.list-unstyled
+ = render 'projects/commits/inline_commit', commit: commit, project: @project
- else
%p
Cant find HEAD commit for this branch
diff --git a/app/views/projects/branches/_filter.html.haml b/app/views/projects/branches/_filter.html.haml
deleted file mode 100644
index 7e1478292e0..00000000000
--- a/app/views/projects/branches/_filter.html.haml
+++ /dev/null
@@ -1,27 +0,0 @@
-%ul.nav.nav-pills.nav-stacked
- = nav_link(path: 'branches#recent') do
- = link_to recent_project_branches_path(@project) do
- Recent
- .pull-right
- = @repository.recent_branches.count
-
- = nav_link(path: 'protected_branches#index') do
- = link_to project_protected_branches_path(@project) do
- Protected
- %i.icon-lock
- .pull-right
- = @project.protected_branches.count
-
- = nav_link(path: 'branches#index') do
- = link_to project_branches_path(@project) do
- All branches
- .pull-right
- = @repository.branch_names.count
-
-
-%hr
-- if can? current_user, :push_code, @project
- = link_to new_project_branch_path(@project), class: 'btn btn-create' do
- %i.icon-add-sign
- New branch
-
diff --git a/app/views/projects/branches/index.html.haml b/app/views/projects/branches/index.html.haml
index bee04eb013e..8bc4a8f7e98 100644
--- a/app/views/projects/branches/index.html.haml
+++ b/app/views/projects/branches/index.html.haml
@@ -1,10 +1,31 @@
= render "projects/commits/head"
-.row
- .col-md-3
- = render "filter"
- .col-md-9
- - unless @branches.empty?
- %ul.bordered-list.top-list.all-branches
- - @branches.each do |branch|
- = render "projects/branches/branch", branch: branch
- = paginate @branches, theme: 'gitlab'
+%h3.page-title
+ Branches
+ .pull-right
+ - if can? current_user, :push_code, @project
+ = link_to new_project_branch_path(@project), class: 'btn btn-create' do
+ %i.icon-add-sign
+ New branch
+ &nbsp;
+ .dropdown.inline
+ %a.dropdown-toggle.btn{href: '#', "data-toggle" => "dropdown"}
+ %span.light sort:
+ - if @sort.present?
+ = @sort.humanize
+ - else
+ Name
+ %b.caret
+ %ul.dropdown-menu
+ %li
+ = link_to project_branches_path(sort: nil) do
+ Name
+ = link_to project_branches_path(sort: 'recently_updated') do
+ Recently updated
+ = link_to project_branches_path(sort: 'last_updated') do
+ Last updated
+%hr
+- unless @branches.empty?
+ %ul.bordered-list.top-list.all-branches
+ - @branches.each do |branch|
+ = render "projects/branches/branch", branch: branch
+ = paginate @branches, theme: 'gitlab'
diff --git a/app/views/projects/branches/recent.html.haml b/app/views/projects/branches/recent.html.haml
deleted file mode 100644
index 37d7919121e..00000000000
--- a/app/views/projects/branches/recent.html.haml
+++ /dev/null
@@ -1,8 +0,0 @@
-= render "projects/commits/head"
-.row
- .col-md-3
- = render "filter"
- .col-md-9
- %ul.bordered-list.top-list
- - @branches.each do |branch|
- = render "projects/branches/branch", branch: branch
diff --git a/app/views/projects/commits/_head.html.haml b/app/views/projects/commits/_head.html.haml
index 81e33743911..0facfc4b5f1 100644
--- a/app/views/projects/commits/_head.html.haml
+++ b/app/views/projects/commits/_head.html.haml
@@ -7,9 +7,9 @@
= link_to 'Compare', project_compare_index_path(@project, from: @repository.root_ref, to: @ref || @repository.root_ref)
= nav_link(html_options: {class: branches_tab_class}) do
- = link_to recent_project_branches_path(@project) do
+ = link_to project_branches_path(@project) do
Branches
- %span.badge= @repository.branches.length
+ %span.badge= @repository.branches.size
= nav_link(controller: :tags) do
= link_to project_tags_path(@project) do
diff --git a/app/views/projects/protected_branches/index.html.haml b/app/views/projects/protected_branches/index.html.haml
index e9f67b671bf..e51bf1d3a8c 100644
--- a/app/views/projects/protected_branches/index.html.haml
+++ b/app/views/projects/protected_branches/index.html.haml
@@ -1,52 +1,50 @@
-= render "projects/commits/head"
-.row
- .col-md-3
- = render "projects/branches/filter"
- .col-md-9
- .bs-callout.bs-callout-info
- %p Protected branches designed to
- %ul
- %li prevent push for all except #{link_to "masters", help_permissions_path, class: "vlink"}.
- %li prevent branch from force push
- %li prevent branch from removal
- %p This ability allows to keep stable branches secured and force code review before merge to protected branches
- %p Read more about project permissions #{link_to "here", help_permissions_path, class: "underlined-link"}
+%h3.page-title Protected branches
+%p.light This ability allows to keep stable branches secured and force code review before merge to protected branches
+%hr
- - if can? current_user, :admin_project, @project
- = form_for [@project, @protected_branch], html: { class: 'form-horizontal' } do |f|
- -if @protected_branch.errors.any?
- .alert.alert-danger
- %ul
- - @protected_branch.errors.full_messages.each do |msg|
- %li= msg
+.bs-callout.bs-callout-info
+ %p Protected branches designed to
+ %ul
+ %li prevent push for all except #{link_to "masters", help_permissions_path, class: "vlink"}.
+ %li prevent branch from force push
+ %li prevent branch from removal
+ %p Read more about project permissions #{link_to "here", help_permissions_path, class: "underlined-link"}
- .form-group
- = f.label :name, "Branch", class: 'control-label'
- .col-sm-10
- = f.select(:name, @project.open_branches.map { |br| [br.name, br.name] } , {include_blank: "Select branch"}, {class: "select2"})
- .form-actions
- = f.submit 'Protect', class: "btn-create btn"
- - unless @branches.empty?
- %h5 Already Protected:
- %ul.bordered-list.protected-branches-list
- - @branches.each do |branch|
- %li
- %h4
- = link_to project_commits_path(@project, branch.name) do
- %strong= branch.name
- - if @project.root_ref?(branch.name)
- %span.label.label-info default
- %span.label.label-success
- %i.icon-lock
- .pull-right
- - if can? current_user, :admin_project, @project
- = link_to 'Unprotect', [@project, branch], data: { confirm: 'Branch will be writable for developers. Are you sure?' }, method: :delete, class: "btn btn-remove btn-small"
+- if can? current_user, :admin_project, @project
+ = form_for [@project, @protected_branch], html: { class: 'form-horizontal' } do |f|
+ -if @protected_branch.errors.any?
+ .alert.alert-danger
+ %ul
+ - @protected_branch.errors.full_messages.each do |msg|
+ %li= msg
- - if commit = branch.commit
- = link_to project_commit_path(@project, commit.id), class: 'commit_short_id' do
- = commit.short_id
- %span.light
- = gfm escape_once(truncate(commit.title, length: 40))
- #{time_ago_with_tooltip(commit.committed_date)}
- - else
- (branch was removed from repository)
+ .form-group
+ = f.label :name, "Branch", class: 'control-label'
+ .col-sm-10
+ = f.select(:name, @project.open_branches.map { |br| [br.name, br.name] } , {include_blank: "Select branch"}, {class: "select2"})
+ .form-actions
+ = f.submit 'Protect', class: "btn-create btn"
+- unless @branches.empty?
+ %h5 Already Protected:
+ %ul.bordered-list.protected-branches-list
+ - @branches.each do |branch|
+ %li
+ %h4
+ = link_to project_commits_path(@project, branch.name) do
+ %strong= branch.name
+ - if @project.root_ref?(branch.name)
+ %span.label.label-info default
+ %span.label.label-success
+ %i.icon-lock
+ .pull-right
+ - if can? current_user, :admin_project, @project
+ = link_to 'Unprotect', [@project, branch], data: { confirm: 'Branch will be writable for developers. Are you sure?' }, method: :delete, class: "btn btn-remove btn-small"
+
+ - if commit = branch.commit
+ = link_to project_commit_path(@project, commit.id), class: 'commit_short_id' do
+ = commit.short_id
+ %span.light
+ = gfm escape_once(truncate(commit.title, length: 40))
+ #{time_ago_with_tooltip(commit.committed_date)}
+ - else
+ (branch was removed from repository)
diff --git a/config/routes.rb b/config/routes.rb
index da5a1ba7a87..ada9bb1d77a 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -243,12 +243,7 @@ Gitlab::Application.routes.draw do
end
end
- resources :branches, only: [:index, :new, :create, :destroy], constraints: { id: Gitlab::Regex.git_reference_regex } do
- collection do
- get :recent, constraints: { id: Gitlab::Regex.git_reference_regex }
- end
- end
-
+ resources :branches, only: [:index, :new, :create, :destroy], constraints: { id: Gitlab::Regex.git_reference_regex }
resources :tags, only: [:index, :new, :create, :destroy], constraints: { id: Gitlab::Regex.git_reference_regex }
resources :protected_branches, only: [:index, :create, :destroy], constraints: { id: Gitlab::Regex.git_reference_regex }