Skip to content
Snippets Groups Projects
Verified Commit 695fd3cf authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets
Browse files

Move protected branches to Project settings

parent 8ae2d215
No related branches found
No related tags found
No related merge requests found
Showing with 109 additions and 119 deletions
Loading
Loading
@@ -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
Loading
Loading
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
Loading
Loading
Loading
Loading
@@ -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
Loading
Loading
Loading
Loading
@@ -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))
 
Loading
Loading
@@ -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
Loading
Loading
@@ -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
Loading
Loading
Loading
Loading
@@ -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
Loading
Loading
@@ -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'
Loading
Loading
@@ -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
%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
= 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'
= 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
Loading
Loading
@@ -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
Loading
Loading
= 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)
Loading
Loading
@@ -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 }
 
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment