Commit dac7c44ab357d703381c2beafd2e04996794fa45

Authored by Dmitriy Zaporozhets
1 parent 37224dc9

Updated readme, Roles in progress

app/assets/images/help_commit.png

95.7 KB

app/assets/images/help_merge_request.png

54.5 KB

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