diff --git a/app/assets/images/help_commit.png b/app/assets/images/help_commit.png deleted file mode 100644 index e0a49b7123a18688dd2036b44a2e2a49f661f15b..0000000000000000000000000000000000000000 Binary files a/app/assets/images/help_commit.png and /dev/null differ diff --git a/app/assets/images/help_merge_request.png b/app/assets/images/help_merge_request.png deleted file mode 100644 index a6b5d3dfabdd586ff1ddb630604d7cb410b982a8..0000000000000000000000000000000000000000 Binary files a/app/assets/images/help_merge_request.png and /dev/null differ diff --git a/app/assets/stylesheets/common.scss b/app/assets/stylesheets/common.scss index 2c0fcaf9cd3fba7555e0a8a348056f0cb91e1c0f..bc72689e4320c09f949a41a752c37d720a634ea7 100644 --- a/app/assets/stylesheets/common.scss +++ b/app/assets/stylesheets/common.scss @@ -6,6 +6,10 @@ a { } } +.vlink { + color: $link_color !important; +} + .pills .active a { background-color: #474D57; } @@ -27,6 +31,7 @@ a { .cgray { color:gray; } .cred { color:#D12F19; } .cgreen { color:#44aa22; } +.cblack { color:#111; } /** COMMON STYLES **/ .left { @@ -259,3 +264,5 @@ img.lil_av { } } + +.help li { color:#111 } diff --git a/app/controllers/protected_branches_controller.rb b/app/controllers/protected_branches_controller.rb index c91bd903645ed2fed917963511bf3f436b61b897..81bfbe6a5ebbe9f9e4c7d81c85e642aaf3665d74 100644 --- a/app/controllers/protected_branches_controller.rb +++ b/app/controllers/protected_branches_controller.rb @@ -6,6 +6,8 @@ class ProtectedBranchesController < ApplicationController before_filter :authorize_read_project! before_filter :require_non_empty_project + before_filter :authorize_admin_project!, :only => [:destroy, :create] + layout "project" def index @@ -19,5 +21,11 @@ class ProtectedBranchesController < ApplicationController end def destroy + @project.protected_branches.find(params[:id]).destroy + + respond_to do |format| + format.html { redirect_to project_protected_branches_path } + format.js { render :nothing => true } + end end end diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index 0c0ce0fb165206abefd9ae55ae8150321c531eec..d78a4af3294e1b6ab7c6fc46a2966b29659943c6 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -34,7 +34,9 @@ module ProjectsHelper def repository_tab_class if controller.controller_name == "repositories" || - controller.controller_name == "hooks" + controller.controller_name == "hooks" || + controller.controller_name == "protected_branches" || + controller.controller_name == "deploy_keys" "current" end end diff --git a/app/models/users_project.rb b/app/models/users_project.rb index dd8439207c28926f303673b64dc2609247d47b74..82302b1c10082229a74934dc97f88ed158f92233 100644 --- a/app/models/users_project.rb +++ b/app/models/users_project.rb @@ -1,4 +1,8 @@ class UsersProject < ActiveRecord::Base + REPORTER = 21 + DEVELOPER = 22 + MASTER = 33 + belongs_to :user belongs_to :project @@ -41,6 +45,18 @@ class UsersProject < ActiveRecord::Base end end + def self.access_roles + { + "Reporter" => REPORTER, + "Developer" => DEVELOPER, + "Master" => MASTER + } + end + + def role_access + "#{project_access}#{repo_access}" + end + def update_repository Gitlabhq::GitHost.system.new.configure do |c| c.update_project(project.path, project) diff --git a/app/views/help/index.html.haml b/app/views/help/index.html.haml index fd1f512bbd88c009003e2214274a1a2a973b6d7f..2b0b5a191ff88d3beee0df9f1ee6a48d9145cbac 100644 --- a/app/views/help/index.html.haml +++ b/app/views/help/index.html.haml @@ -1,43 +1,17 @@ -- bash_lexer = Pygments::Lexer[:bash] -%div.help_content - %h2 - Gitlabhq - %span.right v2.1 - %hr - %h3 Self Hosted Git Management - %h3 Fast, secure and stable solution based on Ruby on Rails & Gitolite. +%h3 + Gitlabhq + %span.right v2.2 +%hr +%h4 Self Hosted Git Management +%h4 Fast, secure and stable solution based on Ruby on Rails & Gitolite. - %hr +%hr - .menu - %h3= link_to "Workflow", "#", :class => "active" +%h3 Help - .content - %h3 Clone project - .bash - %pre - git clone git@example.com:project-name.git +%ol + %li + = link_to "Workflow", help_workflow_path - %h3 Create branch with your feature - .bash - %pre - git checkout -b $feature_name - - %h3 Write code. Commit changes - .bash - %pre - git commit -am "My feature is ready" - - %h3 Push your branch to gitlabhq - .bash - %pre - git push origin $feature_name - - %h3 Review your code - .bash= image_tag "help_commit.png", :width => 600 - - - %h3 Open a merge request - .bash= image_tag "help_merge_request.png", :width => 600 - - %h3 Your team lead will review code & merge it to main branch + %li + = link_to "Permissions", help_permissions_path diff --git a/app/views/help/permissions.html.haml b/app/views/help/permissions.html.haml new file mode 100644 index 0000000000000000000000000000000000000000..1e54a91dcd2e3880fde0c4ec14fee337e44960d4 --- /dev/null +++ b/app/views/help/permissions.html.haml @@ -0,0 +1,27 @@ +%h3 Permissions +%hr + +%h4 Reporter +%ul + %li Pull project code + %li Create new issue + %li Create new merge request + %li Write on project wall + + +%h4 Developer +%ul + %li Pull project code + %li Create new branches + %li Push to non-protected branches + %li Remove non-protected branches + %li Add tags + %li Create new issue + %li Create new merge request + %li Write on project wall + +%h4 Master +%ul + %li Full repository access + %li Full project access + %li Add new team members diff --git a/app/views/help/workflow.html.haml b/app/views/help/workflow.html.haml new file mode 100644 index 0000000000000000000000000000000000000000..4785b367e653d691be0f973f68c3ab2e5efefcd3 --- /dev/null +++ b/app/views/help/workflow.html.haml @@ -0,0 +1,38 @@ +- bash_lexer = Pygments::Lexer[:bash] +%h3 Workflow +%hr + +%ol.help + %li + %p Clone project + .bash + %pre + git clone git@example.com:project-name.git + + %li + %p Create branch with your feature + .bash + %pre + git checkout -b $feature_name + + %li + %p Write code. Commit changes + .bash + %pre + git commit -am "My feature is ready" + + %li + %p Push your branch to gitlabhq + .bash + %pre + git push origin $feature_name + + %li + %p Review your code on Commits page + + %li + %p Create a merge request + + %li + %p Your team lead will review code & merge it to main branch + diff --git a/app/views/projects/team.html.haml b/app/views/projects/team.html.haml index 884c1645445b4f343bf8e580ece73fc265fb6430..a19f57026f45214f8af1984b321b1af319bfc4cc 100644 --- a/app/views/projects/team.html.haml +++ b/app/views/projects/team.html.haml @@ -4,9 +4,9 @@ .alert-message.block-message = link_to new_project_team_member_path(@project), :class => "btn small right", :title => "New Team Member" do New Team Member - Manage project team from this page. - %br - To open team member profile - click on avatar. + %p Ream more about project permissions #{link_to "here", help_permissions_path, :class => "vlink"} + %p To open team member profile - click on avatar. + = render :partial => "team", :locals => {:project => @project} diff --git a/app/views/protected_branches/index.html.haml b/app/views/protected_branches/index.html.haml index 055d93690913b5c29b6fe5251924540ae34068cd..dde90af3d39d6ff3a1b4a8a288ee141beab1fb6e 100644 --- a/app/views/protected_branches/index.html.haml +++ b/app/views/protected_branches/index.html.haml @@ -1,25 +1,22 @@ = render "repositories/branches_head" -= form_for [@project, @protected_branch] do |f| - -if @protected_branch.errors.any? - .alert-message.block-message.error - %ul - - @protected_branch.errors.full_messages.each do |msg| - %li= msg +.alert-message.block-message + %p Protected branches designed to prevent push for all except #{link_to "masters", help_permissions_path, :class => "vlink"}. + %p This ability allows: + %ul + %li keep stable branches secured + %li forced code review before merge to protected branches + %p Ream more about project permissions #{link_to "here", help_permissions_path, :class => "vlink"} - .clearfix - = f.label :name - .input= f.select(:name, @project.open_branches.map { |br| [br.name, br.name] } , { :include_blank => "Select branch" }, { :style => "width:300px" }) - .actions - = f.submit 'Add', :class => "primary btn" - unless @branches.empty? - %table + %table.zebra-striped %thead %tr %th Name %th Last commit + %th %tbody - @branches.each do |branch| %tr @@ -33,6 +30,25 @@ = truncate branch.commit.id.to_s, :length => 10 = time_ago_in_words(branch.commit.committed_date) ago + %td + - if can? current_user, :admin_project, @project + = link_to 'Unprotect', [@project, branch], :confirm => 'Are you sure?', :method => :delete, :class => "danger btn small" + + + +- if can? current_user, :admin_project, @project + = form_for [@project, @protected_branch] do |f| + -if @protected_branch.errors.any? + .alert-message.block-message.error + %ul + - @protected_branch.errors.full_messages.each do |msg| + %li= msg + + .clearfix + = f.label :name + .input= f.select(:name, @project.open_branches.map { |br| [br.name, br.name] } , { :include_blank => "Select branch" }, { :style => "width:300px" }) + .actions + = f.submit 'Add', :class => "primary btn" :javascript diff --git a/app/views/repositories/_branches_head.html.haml b/app/views/repositories/_branches_head.html.haml index d98dedc23ebf46bf43b62d1700ff23970c0ee367..dd4d6868bcc0b0c759ab08371fdc8a231c60769b 100644 --- a/app/views/repositories/_branches_head.html.haml +++ b/app/views/repositories/_branches_head.html.haml @@ -6,4 +6,4 @@ %li{:class => ("active" if current_page?(project_protected_branches_path(@project)))} = link_to project_protected_branches_path(@project) do Protected - +%hr diff --git a/app/views/team_members/_form.html.haml b/app/views/team_members/_form.html.haml index ec31deb183add557fe12461c78a67c30cf41d90d..bc4ee353b7790bd4c0a074f99ff67e3708174680 100644 --- a/app/views/team_members/_form.html.haml +++ b/app/views/team_members/_form.html.haml @@ -11,13 +11,20 @@ = f.label :user_id, "Name" .input= f.select(:user_id, User.not_in_project(@project).all.collect {|p| [ p.name, p.id ] }, { :include_blank => "Select user" }, { :style => "width:300px" }) + .clearfix = f.label :project_access, "Project Access" - .input= f.select :project_access, options_for_select(Project.access_options, @team_member.project_access), {}, :class => "project-access-select" + .input= f.select :_project_access, options_for_select(UsersProject.access_roles, @team_member.role_access), {}, :class => "project-access-select" + - .clearfix - = f.label :repo_access, "Repository Access" - .input= f.select :repo_access, options_for_select(Repository.access_options, @team_member.repo_access), {}, :class => "repo-access-select" + + -#.clearfix + -#= f.label :project_access, "Project Access" + -#.input= f.select :project_access, options_for_select(Project.access_options, @team_member.project_access), {}, :class => "project-access-select" + + -#.clearfix + -#= f.label :repo_access, "Repository Access" + -#.input= f.select :repo_access, options_for_select(Repository.access_options, @team_member.repo_access), {}, :class => "repo-access-select" .actions = f.submit 'Save', :class => "btn primary" @@ -30,5 +37,6 @@ :javascript $('select#team_member_user_id').chosen(); - $('select#team_member_repo_access').chosen(); - $('select#team_member_project_access').chosen(); + $('select#team_member__project_access').chosen(); + //$('select#team_member_repo_access').chosen(); + //$('select#team_member_project_access').chosen(); diff --git a/app/views/team_members/_show.html.haml b/app/views/team_members/_show.html.haml index e5cd947ba2b15867985a83f31f7a4fbe711a6054..90a5de602e61894c5eae87d7ff248796b22cfc77 100644 --- a/app/views/team_members/_show.html.haml +++ b/app/views/team_members/_show.html.haml @@ -11,9 +11,9 @@ .span3 = form_for(member, :as => :team_member, :url => project_team_member_path(@project, member)) do |f| - = f.select :project_access, options_for_select(Project.access_options, member.project_access), {}, :class => "medium project-access-select", :disabled => !allow_admin - .span3 - = form_for(member, :as => :team_member, :url => project_team_member_path(@project, member)) do |f| - = f.select :repo_access, options_for_select(Repository.access_options, member.repo_access), {}, :class => "medium repo-access-select", :disabled => !allow_admin + = f.select :_project_access, options_for_select(UsersProject.access_roles, member.role_access), {}, :class => "medium project-access-select", :disabled => !allow_admin + -#.span3 + -#= form_for(member, :as => :team_member, :url => project_team_member_path(@project, member)) do |f| + -#= f.select :repo_access, options_for_select(Repository.access_options, member.repo_access), {}, :class => "medium repo-access-select", :disabled => !allow_admin - if @project.owner == user %span.label Project Owner diff --git a/config/routes.rb b/config/routes.rb index e7a96fb4afbe613119ea33e586ca2b8a59c25d34..5d880df1739b65f1097caac1f5030041538686d9 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -5,6 +5,8 @@ Gitlab::Application.routes.draw do mount Resque::Server.new, at: '/info/resque' get 'help' => 'help#index' + get 'help/permissions' => 'help#permissions' + get 'help/workflow' => 'help#workflow' namespace :admin do resources :users do