Commit 1eabd9dfecad735a4e59884c568b27d27932517f
Exists in
master
and in
4 other branches
Merge branch 'master' into relative_links_in_documentation
Showing
26 changed files
with
162 additions
and
70 deletions
Show diff stats
CHANGELOG
@@ -12,6 +12,7 @@ v 6.2.0 | @@ -12,6 +12,7 @@ v 6.2.0 | ||
12 | - Update logic for validates_merge_request for tree of MR (Andrew Kumanyaev) | 12 | - Update logic for validates_merge_request for tree of MR (Andrew Kumanyaev) |
13 | - Rake tasks for web hooks management (Jonhnny Weslley) | 13 | - Rake tasks for web hooks management (Jonhnny Weslley) |
14 | - Extended User API to expose admin and can_create_group for user creation/updating (Boyan Tabakov) | 14 | - Extended User API to expose admin and can_create_group for user creation/updating (Boyan Tabakov) |
15 | + - API: Remove group | ||
15 | 16 | ||
16 | v 6.1.0 | 17 | v 6.1.0 |
17 | - Project specific IDs for issues, mr, milestones | 18 | - Project specific IDs for issues, mr, milestones |
app/assets/stylesheets/sections/tree.scss
app/controllers/projects/milestones_controller.rb
@@ -14,7 +14,7 @@ class Projects::MilestonesController < Projects::ApplicationController | @@ -14,7 +14,7 @@ class Projects::MilestonesController < Projects::ApplicationController | ||
14 | @milestones = case params[:f] | 14 | @milestones = case params[:f] |
15 | when 'all'; @project.milestones.order("state, due_date DESC") | 15 | when 'all'; @project.milestones.order("state, due_date DESC") |
16 | when 'closed'; @project.milestones.closed.order("due_date DESC") | 16 | when 'closed'; @project.milestones.closed.order("due_date DESC") |
17 | - else @project.milestones.active.order("due_date DESC") | 17 | + else @project.milestones.active.order("due_date ASC") |
18 | end | 18 | end |
19 | 19 | ||
20 | @milestones = @milestones.includes(:project) | 20 | @milestones = @milestones.includes(:project) |
app/models/merge_request.rb
@@ -222,7 +222,11 @@ class MergeRequest < ActiveRecord::Base | @@ -222,7 +222,11 @@ class MergeRequest < ActiveRecord::Base | ||
222 | 222 | ||
223 | def mr_and_commit_notes | 223 | def mr_and_commit_notes |
224 | commit_ids = commits.map(&:id) | 224 | commit_ids = commits.map(&:id) |
225 | - Note.where("(noteable_type = 'MergeRequest' AND noteable_id = :mr_id) OR (noteable_type = 'Commit' AND commit_id IN (:commit_ids))", mr_id: id, commit_ids: commit_ids) | 225 | + project.notes.where( |
226 | + "(noteable_type = 'MergeRequest' AND noteable_id = :mr_id) OR (noteable_type = 'Commit' AND commit_id IN (:commit_ids))", | ||
227 | + mr_id: id, | ||
228 | + commit_ids: commit_ids | ||
229 | + ) | ||
226 | end | 230 | end |
227 | 231 | ||
228 | # Returns the raw diff for this merge request | 232 | # Returns the raw diff for this merge request |
app/models/project.rb
@@ -53,6 +53,7 @@ class Project < ActiveRecord::Base | @@ -53,6 +53,7 @@ class Project < ActiveRecord::Base | ||
53 | has_many :services, dependent: :destroy | 53 | has_many :services, dependent: :destroy |
54 | has_many :events, dependent: :destroy | 54 | has_many :events, dependent: :destroy |
55 | has_many :merge_requests, dependent: :destroy, foreign_key: "target_project_id" | 55 | has_many :merge_requests, dependent: :destroy, foreign_key: "target_project_id" |
56 | + has_many :fork_merge_requests,dependent: :destroy, foreign_key: "source_project_id", class_name: MergeRequest | ||
56 | has_many :issues, dependent: :destroy, order: "state DESC, created_at DESC" | 57 | has_many :issues, dependent: :destroy, order: "state DESC, created_at DESC" |
57 | has_many :milestones, dependent: :destroy | 58 | has_many :milestones, dependent: :destroy |
58 | has_many :notes, dependent: :destroy | 59 | has_many :notes, dependent: :destroy |
@@ -312,8 +313,11 @@ class Project < ActiveRecord::Base | @@ -312,8 +313,11 @@ class Project < ActiveRecord::Base | ||
312 | branch_name = ref.gsub("refs/heads/", "") | 313 | branch_name = ref.gsub("refs/heads/", "") |
313 | c_ids = self.repository.commits_between(oldrev, newrev).map(&:id) | 314 | c_ids = self.repository.commits_between(oldrev, newrev).map(&:id) |
314 | 315 | ||
315 | - # Update code for merge requests | 316 | + # Update code for merge requests into project between project branches |
316 | mrs = self.merge_requests.opened.by_branch(branch_name).all | 317 | mrs = self.merge_requests.opened.by_branch(branch_name).all |
318 | + # Update code for merge requests between project and project fork | ||
319 | + mrs += self.fork_merge_requests.opened.by_branch(branch_name).all | ||
320 | + | ||
317 | mrs.each { |merge_request| merge_request.reload_code; merge_request.mark_as_unchecked } | 321 | mrs.each { |merge_request| merge_request.reload_code; merge_request.mark_as_unchecked } |
318 | 322 | ||
319 | # Close merge requests | 323 | # Close merge requests |
app/services/system_hooks_service.rb
@@ -36,7 +36,8 @@ class SystemHooksService | @@ -36,7 +36,8 @@ class SystemHooksService | ||
36 | when User | 36 | when User |
37 | data.merge!({ | 37 | data.merge!({ |
38 | name: model.name, | 38 | name: model.name, |
39 | - email: model.email | 39 | + email: model.email, |
40 | + user_id: model.id | ||
40 | }) | 41 | }) |
41 | when UsersProject | 42 | when UsersProject |
42 | data.merge!({ | 43 | data.merge!({ |
app/views/admin/hooks/_data_ex.html.erb
@@ -52,7 +52,8 @@ | @@ -52,7 +52,8 @@ | ||
52 | "created_at": "2012-07-21T07:44:07Z", | 52 | "created_at": "2012-07-21T07:44:07Z", |
53 | "email": "js@gitlabhq.com", | 53 | "email": "js@gitlabhq.com", |
54 | "event_name": "user_create", | 54 | "event_name": "user_create", |
55 | - "name": "John Smith" | 55 | + "name": "John Smith", |
56 | + "user_id": 41 | ||
56 | } | 57 | } |
57 | 58 | ||
58 | 6. User removed: | 59 | 6. User removed: |
@@ -60,7 +61,8 @@ | @@ -60,7 +61,8 @@ | ||
60 | "created_at": "2012-07-21T07:44:07Z", | 61 | "created_at": "2012-07-21T07:44:07Z", |
61 | "email": "js@gitlabhq.com", | 62 | "email": "js@gitlabhq.com", |
62 | "event_name": "user_destroy", | 63 | "event_name": "user_destroy", |
63 | - "name": "John Smith" | 64 | + "name": "John Smith", |
65 | + "user_id": 41 | ||
64 | } | 66 | } |
65 | 67 | ||
66 | eos | 68 | eos |
app/views/admin/hooks/index.html.haml
1 | -.alert.alert-info | ||
2 | - %span | ||
3 | - Post-receive hooks for binding events. | ||
4 | - %br | ||
5 | - Read more about system hooks | ||
6 | - %strong #{link_to "here", help_system_hooks_path, class: "vlink"} | 1 | +%h3.page-title |
2 | + System Hooks | ||
3 | + | ||
4 | +%p.light | ||
5 | + #{link_to "System hooks ", help_system_hooks_path, class: "vlink"} can be | ||
6 | + used for binding events when GitLab creates a User or Project. | ||
7 | + | ||
8 | +%hr | ||
9 | + | ||
7 | 10 | ||
8 | = form_for @hook, as: :hook, url: admin_hooks_path, html: { class: 'form-inline' } do |f| | 11 | = form_for @hook, as: :hook, url: admin_hooks_path, html: { class: 'form-inline' } do |f| |
9 | -if @hook.errors.any? | 12 | -if @hook.errors.any? |
app/views/projects/tree/_tree_commit_column.html.haml
1 | -%span.tree_author= commit_author_link(commit, avatar: true) | 1 | +%span.tree_author= commit_author_link(commit, avatar: true, size: 16) |
2 | = link_to_gfm truncate(commit.title, length: 80), project_commit_path(@project, commit.id), class: "tree-commit-link" | 2 | = link_to_gfm truncate(commit.title, length: 80), project_commit_path(@project, commit.id), class: "tree-commit-link" |
doc/api/groups.md
@@ -57,6 +57,19 @@ Parameters: | @@ -57,6 +57,19 @@ Parameters: | ||
57 | + `project_id` (required) - The ID of a project | 57 | + `project_id` (required) - The ID of a project |
58 | 58 | ||
59 | 59 | ||
60 | +## Remove group | ||
61 | + | ||
62 | +Removes group with all projects inside. | ||
63 | + | ||
64 | +``` | ||
65 | +DELETE /groups/:id | ||
66 | +``` | ||
67 | + | ||
68 | +Parameters: | ||
69 | + | ||
70 | ++ `id` (required) - The ID of a user group | ||
71 | + | ||
72 | + | ||
60 | ## Group members | 73 | ## Group members |
61 | 74 | ||
62 | 75 |
doc/api/merge_requests.md
@@ -20,6 +20,8 @@ Parameters: | @@ -20,6 +20,8 @@ Parameters: | ||
20 | "project_id":3, | 20 | "project_id":3, |
21 | "title":"test1", | 21 | "title":"test1", |
22 | "state":"opened", | 22 | "state":"opened", |
23 | + "upvotes":0, | ||
24 | + "downvotes":0, | ||
23 | "author":{ | 25 | "author":{ |
24 | "id":1, | 26 | "id":1, |
25 | "username": "admin", | 27 | "username": "admin", |
@@ -62,6 +64,8 @@ Parameters: | @@ -62,6 +64,8 @@ Parameters: | ||
62 | "project_id":3, | 64 | "project_id":3, |
63 | "title":"test1", | 65 | "title":"test1", |
64 | "state":"merged", | 66 | "state":"merged", |
67 | + "upvotes":0, | ||
68 | + "downvotes":0, | ||
65 | "author":{ | 69 | "author":{ |
66 | "id":1, | 70 | "id":1, |
67 | "username": "admin", | 71 | "username": "admin", |
@@ -106,6 +110,8 @@ Parameters: | @@ -106,6 +110,8 @@ Parameters: | ||
106 | "project_id":3, | 110 | "project_id":3, |
107 | "title":"test1", | 111 | "title":"test1", |
108 | "state":"opened", | 112 | "state":"opened", |
113 | + "upvotes":0, | ||
114 | + "downvotes":0, | ||
109 | "author":{ | 115 | "author":{ |
110 | "id":1, | 116 | "id":1, |
111 | "username": "admin", | 117 | "username": "admin", |
@@ -152,6 +158,8 @@ Parameters: | @@ -152,6 +158,8 @@ Parameters: | ||
152 | "project_id":3, | 158 | "project_id":3, |
153 | "title":"test1", | 159 | "title":"test1", |
154 | "state":"opened", | 160 | "state":"opened", |
161 | + "upvotes":0, | ||
162 | + "downvotes":0, | ||
155 | "author":{ | 163 | "author":{ |
156 | "id":1, | 164 | "id":1, |
157 | "username": "admin", | 165 | "username": "admin", |
doc/update/5.1-to-5.2.md
@@ -7,7 +7,7 @@ It's useful to make a backup just in case things go south: | @@ -7,7 +7,7 @@ It's useful to make a backup just in case things go south: | ||
7 | 7 | ||
8 | ```bash | 8 | ```bash |
9 | cd /home/git/gitlab | 9 | cd /home/git/gitlab |
10 | -sudo -u git -H RAILS_ENV=production bundle exec rake gitlab:backup:create | 10 | +sudo -u git -H bundle exec rake gitlab:backup:create RAILS_ENV=production |
11 | ``` | 11 | ``` |
12 | 12 | ||
13 | ### 1. Stop server | 13 | ### 1. Stop server |
@@ -95,5 +95,5 @@ Follow the [`upgrade guide from 5.0 to 5.1`](5.0-to-5.1.md), except for the data | @@ -95,5 +95,5 @@ Follow the [`upgrade guide from 5.0 to 5.1`](5.0-to-5.1.md), except for the data | ||
95 | 95 | ||
96 | ```bash | 96 | ```bash |
97 | cd /home/git/gitlab | 97 | cd /home/git/gitlab |
98 | -sudo -u git -H RAILS_ENV=production bundle exec rake gitlab:backup:restore | 98 | +sudo -u git -H bundle exec rake gitlab:backup:restore RAILS_ENV=production |
99 | ``` | 99 | ``` |
doc/update/5.2-to-5.3.md
@@ -7,7 +7,7 @@ It's useful to make a backup just in case things go south: | @@ -7,7 +7,7 @@ It's useful to make a backup just in case things go south: | ||
7 | 7 | ||
8 | ```bash | 8 | ```bash |
9 | cd /home/git/gitlab | 9 | cd /home/git/gitlab |
10 | -sudo -u git -H RAILS_ENV=production bundle exec rake gitlab:backup:create | 10 | +sudo -u git -H bundle exec rake gitlab:backup:create RAILS_ENV=production |
11 | ``` | 11 | ``` |
12 | 12 | ||
13 | ### 1. Stop server | 13 | ### 1. Stop server |
@@ -78,5 +78,5 @@ Follow the [`upgrade guide from 5.1 to 5.2`](5.1-to-5.2.md), except for the data | @@ -78,5 +78,5 @@ Follow the [`upgrade guide from 5.1 to 5.2`](5.1-to-5.2.md), except for the data | ||
78 | 78 | ||
79 | ```bash | 79 | ```bash |
80 | cd /home/git/gitlab | 80 | cd /home/git/gitlab |
81 | -sudo -u git -H RAILS_ENV=production bundle exec rake gitlab:backup:restore | 81 | +sudo -u git -H bundle exec rake gitlab:backup:restore RAILS_ENV=production |
82 | ``` | 82 | ``` |
doc/update/5.3-to-5.4.md
@@ -7,7 +7,7 @@ It's useful to make a backup just in case things go south: | @@ -7,7 +7,7 @@ It's useful to make a backup just in case things go south: | ||
7 | 7 | ||
8 | ```bash | 8 | ```bash |
9 | cd /home/git/gitlab | 9 | cd /home/git/gitlab |
10 | -sudo -u git -H RAILS_ENV=production bundle exec rake gitlab:backup:create | 10 | +sudo -u git -H bundle exec rake gitlab:backup:create RAILS_ENV=production |
11 | ``` | 11 | ``` |
12 | 12 | ||
13 | ### 1. Stop server | 13 | ### 1. Stop server |
@@ -86,5 +86,5 @@ Follow the [`upgrade guide from 5.2 to 5.3`](5.2-to-5.3.md), except for the data | @@ -86,5 +86,5 @@ Follow the [`upgrade guide from 5.2 to 5.3`](5.2-to-5.3.md), except for the data | ||
86 | 86 | ||
87 | ```bash | 87 | ```bash |
88 | cd /home/git/gitlab | 88 | cd /home/git/gitlab |
89 | -sudo -u git -H RAILS_ENV=production bundle exec rake gitlab:backup:restore | 89 | +sudo -u git -H bundle exec rake gitlab:backup:restore RAILS_ENV=production |
90 | ``` | 90 | ``` |
doc/update/5.4-to-6.0.md
@@ -24,7 +24,7 @@ It's useful to make a backup just in case things go south: | @@ -24,7 +24,7 @@ It's useful to make a backup just in case things go south: | ||
24 | 24 | ||
25 | ```bash | 25 | ```bash |
26 | cd /home/git/gitlab | 26 | cd /home/git/gitlab |
27 | -sudo -u git -H RAILS_ENV=production bundle exec rake gitlab:backup:create | 27 | +sudo -u git -H bundle exec rake gitlab:backup:create RAILS_ENV=production |
28 | ``` | 28 | ``` |
29 | 29 | ||
30 | ### 1. Stop server | 30 | ### 1. Stop server |
doc/update/6.0-to-6.1.md
@@ -16,7 +16,7 @@ It's useful to make a backup just in case things go south: | @@ -16,7 +16,7 @@ It's useful to make a backup just in case things go south: | ||
16 | 16 | ||
17 | ```bash | 17 | ```bash |
18 | cd /home/git/gitlab | 18 | cd /home/git/gitlab |
19 | -sudo -u git -H RAILS_ENV=production bundle exec rake gitlab:backup:create | 19 | +sudo -u git -H bundle exec rake gitlab:backup:create RAILS_ENV=production |
20 | ``` | 20 | ``` |
21 | 21 | ||
22 | ### 1. Stop server | 22 | ### 1. Stop server |
@@ -99,5 +99,5 @@ Follow the [`upgrade guide from 5.4 to 6.0`](5.4-to-6.0.md), except for the data | @@ -99,5 +99,5 @@ Follow the [`upgrade guide from 5.4 to 6.0`](5.4-to-6.0.md), except for the data | ||
99 | 99 | ||
100 | ```bash | 100 | ```bash |
101 | cd /home/git/gitlab | 101 | cd /home/git/gitlab |
102 | -sudo -u git -H RAILS_ENV=production bundle exec rake gitlab:backup:restore | 102 | +sudo -u git -H bundle exec rake gitlab:backup:restore RAILS_ENV=production |
103 | ``` | 103 | ``` |
doc/update/6.1-to-6.2.md
@@ -9,7 +9,7 @@ It's useful to make a backup just in case things go south: | @@ -9,7 +9,7 @@ It's useful to make a backup just in case things go south: | ||
9 | 9 | ||
10 | ```bash | 10 | ```bash |
11 | cd /home/git/gitlab | 11 | cd /home/git/gitlab |
12 | -sudo -u git -H RAILS_ENV=production bundle exec rake gitlab:backup:create | 12 | +sudo -u git -H bundle exec rake gitlab:backup:create RAILS_ENV=production |
13 | ``` | 13 | ``` |
14 | 14 | ||
15 | ### 1. Stop server | 15 | ### 1. Stop server |
@@ -96,5 +96,5 @@ Follow the [`upgrade guide from 6.0 to 6.1`](6.0-to-6.1.md), except for the data | @@ -96,5 +96,5 @@ Follow the [`upgrade guide from 6.0 to 6.1`](6.0-to-6.1.md), except for the data | ||
96 | 96 | ||
97 | ```bash | 97 | ```bash |
98 | cd /home/git/gitlab | 98 | cd /home/git/gitlab |
99 | -sudo -u git -H RAILS_ENV=production bundle exec rake gitlab:backup:restore | 99 | +sudo -u git -H bundle exec rake gitlab:backup:restore RAILS_ENV=production |
100 | ``` | 100 | ``` |
lib/api/entities.rb
@@ -112,7 +112,7 @@ module API | @@ -112,7 +112,7 @@ module API | ||
112 | end | 112 | end |
113 | 113 | ||
114 | class MergeRequest < Grape::Entity | 114 | class MergeRequest < Grape::Entity |
115 | - expose :id, :target_branch, :source_branch, :title, :state | 115 | + expose :id, :target_branch, :source_branch, :title, :state, :upvotes, :downvotes |
116 | expose :target_project_id, as: :project_id | 116 | expose :target_project_id, as: :project_id |
117 | expose :author, :assignee, using: Entities::UserBasic | 117 | expose :author, :assignee, using: Entities::UserBasic |
118 | end | 118 | end |
lib/api/groups.rb
@@ -7,12 +7,14 @@ module API | @@ -7,12 +7,14 @@ module API | ||
7 | helpers do | 7 | helpers do |
8 | def find_group(id) | 8 | def find_group(id) |
9 | group = Group.find(id) | 9 | group = Group.find(id) |
10 | - if current_user.admin or current_user.groups.include? group | 10 | + |
11 | + if can?(current_user, :read_group, group) | ||
11 | group | 12 | group |
12 | else | 13 | else |
13 | render_api_error!("403 Forbidden - #{current_user.username} lacks sufficient access to #{group.name}", 403) | 14 | render_api_error!("403 Forbidden - #{current_user.username} lacks sufficient access to #{group.name}", 403) |
14 | end | 15 | end |
15 | end | 16 | end |
17 | + | ||
16 | def validate_access_level?(level) | 18 | def validate_access_level?(level) |
17 | Gitlab::Access.options_with_owner.values.include? level.to_i | 19 | Gitlab::Access.options_with_owner.values.include? level.to_i |
18 | end | 20 | end |
@@ -64,6 +66,19 @@ module API | @@ -64,6 +66,19 @@ module API | ||
64 | present group, with: Entities::GroupDetail | 66 | present group, with: Entities::GroupDetail |
65 | end | 67 | end |
66 | 68 | ||
69 | + | ||
70 | + # Remove group | ||
71 | + # | ||
72 | + # Parameters: | ||
73 | + # id (required) - The ID of a group | ||
74 | + # Example Request: | ||
75 | + # DELETE /groups/:id | ||
76 | + delete ":id" do | ||
77 | + group = find_group(params[:id]) | ||
78 | + authorize! :manage_group, group | ||
79 | + group.destroy | ||
80 | + end | ||
81 | + | ||
67 | # Transfer a project to the Group namespace | 82 | # Transfer a project to the Group namespace |
68 | # | 83 | # |
69 | # Parameters: | 84 | # Parameters: |
@@ -132,7 +147,6 @@ module API | @@ -132,7 +147,6 @@ module API | ||
132 | member.destroy | 147 | member.destroy |
133 | end | 148 | end |
134 | end | 149 | end |
135 | - | ||
136 | end | 150 | end |
137 | end | 151 | end |
138 | end | 152 | end |
lib/api/internal.rb
@@ -35,6 +35,7 @@ module API | @@ -35,6 +35,7 @@ module API | ||
35 | user = key.user | 35 | user = key.user |
36 | 36 | ||
37 | return false if user.blocked? | 37 | return false if user.blocked? |
38 | + return false if user.ldap_user? && Gitlab::LDAP::User.blocked?(user.extern_uid) | ||
38 | 39 | ||
39 | action = case git_cmd | 40 | action = case git_cmd |
40 | when *DOWNLOAD_COMMANDS | 41 | when *DOWNLOAD_COMMANDS |
lib/gitlab/ldap/user.rb
@@ -71,6 +71,16 @@ module Gitlab | @@ -71,6 +71,16 @@ module Gitlab | ||
71 | find_by_uid(ldap_user.dn) if ldap_user | 71 | find_by_uid(ldap_user.dn) if ldap_user |
72 | end | 72 | end |
73 | 73 | ||
74 | + # Check LDAP user existance by dn. User in git over ssh check | ||
75 | + # | ||
76 | + # It covers 2 cases: | ||
77 | + # * when ldap account was removed | ||
78 | + # * when ldap account was deactivated by change of OU membership in 'dn' | ||
79 | + def blocked?(dn) | ||
80 | + ldap = OmniAuth::LDAP::Adaptor.new(ldap_conf) | ||
81 | + ldap.connection.search(base: dn, size: 1).blank? | ||
82 | + end | ||
83 | + | ||
74 | private | 84 | private |
75 | 85 | ||
76 | def find_by_uid(uid) | 86 | def find_by_uid(uid) |
lib/support/init.d/gitlab
@@ -151,7 +151,7 @@ stop() { | @@ -151,7 +151,7 @@ stop() { | ||
151 | exit_if_not_running | 151 | exit_if_not_running |
152 | # If the Unicorn web server is running, tell it to stop; | 152 | # If the Unicorn web server is running, tell it to stop; |
153 | if [ "$web_status" = "0" ]; then | 153 | if [ "$web_status" = "0" ]; then |
154 | - kill -QUIT "$wpid" & | 154 | + kill -QUIT "$wpid" |
155 | echo "Stopping the GitLab Unicorn web server..." | 155 | echo "Stopping the GitLab Unicorn web server..." |
156 | stopping=true | 156 | stopping=true |
157 | else | 157 | else |
@@ -160,7 +160,7 @@ stop() { | @@ -160,7 +160,7 @@ stop() { | ||
160 | # And do the same thing for the Sidekiq. | 160 | # And do the same thing for the Sidekiq. |
161 | if [ "$sidekiq_status" = "0" ]; then | 161 | if [ "$sidekiq_status" = "0" ]; then |
162 | printf "Stopping Sidekiq job dispatcher." | 162 | printf "Stopping Sidekiq job dispatcher." |
163 | - RAILS_ENV=$RAILS_ENV bundle exec rake sidekiq:stop & | 163 | + RAILS_ENV=$RAILS_ENV bundle exec rake sidekiq:stop |
164 | stopping=true | 164 | stopping=true |
165 | else | 165 | else |
166 | echo "The Sidekiq was not running, must have run out of breath." | 166 | echo "The Sidekiq was not running, must have run out of breath." |
lib/tasks/gitlab/check.rake
@@ -392,14 +392,20 @@ namespace :gitlab do | @@ -392,14 +392,20 @@ namespace :gitlab do | ||
392 | hook_file = "update" | 392 | hook_file = "update" |
393 | gitlab_shell_hooks_path = Gitlab.config.gitlab_shell.hooks_path | 393 | gitlab_shell_hooks_path = Gitlab.config.gitlab_shell.hooks_path |
394 | gitlab_shell_hook_file = File.join(gitlab_shell_hooks_path, hook_file) | 394 | gitlab_shell_hook_file = File.join(gitlab_shell_hooks_path, hook_file) |
395 | - gitlab_shell_ssh_user = Gitlab.config.gitlab_shell.ssh_user | ||
396 | 395 | ||
397 | - unless File.exists?(gitlab_shell_hook_file) | ||
398 | - puts "can't check because of previous errors".magenta | ||
399 | - return | 396 | + if File.exists?(gitlab_shell_hook_file) |
397 | + puts "yes".green | ||
398 | + else | ||
399 | + puts "no".red | ||
400 | + puts "Could not find #{gitlab_shell_hook_file}" | ||
401 | + try_fixing_it( | ||
402 | + 'Check the hooks_path in config/gitlab.yml', | ||
403 | + 'Check your gitlab-shell installation' | ||
404 | + ) | ||
405 | + for_more_information( | ||
406 | + see_installation_guide_section "GitLab Shell" | ||
407 | + ) | ||
400 | end | 408 | end |
401 | - | ||
402 | - puts "yes".green | ||
403 | end | 409 | end |
404 | 410 | ||
405 | def check_repo_base_exists | 411 | def check_repo_base_exists |
spec/models/merge_request_spec.rb
@@ -49,8 +49,8 @@ describe MergeRequest do | @@ -49,8 +49,8 @@ describe MergeRequest do | ||
49 | 49 | ||
50 | before do | 50 | before do |
51 | merge_request.stub(:commits) { [merge_request.source_project.repository.commit] } | 51 | merge_request.stub(:commits) { [merge_request.source_project.repository.commit] } |
52 | - create(:note, commit_id: merge_request.commits.first.id, noteable_type: 'Commit') | ||
53 | - create(:note, noteable: merge_request) | 52 | + create(:note, commit_id: merge_request.commits.first.id, noteable_type: 'Commit', project: merge_request.project) |
53 | + create(:note, noteable: merge_request, project: merge_request.project) | ||
54 | end | 54 | end |
55 | 55 | ||
56 | it "should include notes for commits" do | 56 | it "should include notes for commits" do |
spec/requests/api/groups_spec.rb
@@ -106,6 +106,44 @@ describe API::API do | @@ -106,6 +106,44 @@ describe API::API do | ||
106 | end | 106 | end |
107 | end | 107 | end |
108 | 108 | ||
109 | + describe "DELETE /groups/:id" do | ||
110 | + context "when authenticated as user" do | ||
111 | + it "should remove group" do | ||
112 | + delete api("/groups/#{group1.id}", user1) | ||
113 | + response.status.should == 200 | ||
114 | + end | ||
115 | + | ||
116 | + it "should not remove a group if not an owner" do | ||
117 | + user3 = create(:user) | ||
118 | + group1.add_user(user3, Gitlab::Access::MASTER) | ||
119 | + delete api("/groups/#{group1.id}", user3) | ||
120 | + response.status.should == 403 | ||
121 | + end | ||
122 | + | ||
123 | + it "should not remove a non existing group" do | ||
124 | + delete api("/groups/1328", user1) | ||
125 | + response.status.should == 404 | ||
126 | + end | ||
127 | + | ||
128 | + it "should not remove a group not attached to user1" do | ||
129 | + delete api("/groups/#{group2.id}", user1) | ||
130 | + response.status.should == 403 | ||
131 | + end | ||
132 | + end | ||
133 | + | ||
134 | + context "when authenticated as admin" do | ||
135 | + it "should remove any existing group" do | ||
136 | + delete api("/groups/#{group2.id}", admin) | ||
137 | + response.status.should == 200 | ||
138 | + end | ||
139 | + | ||
140 | + it "should not remove a non existing group" do | ||
141 | + delete api("/groups/1328", admin) | ||
142 | + response.status.should == 404 | ||
143 | + end | ||
144 | + end | ||
145 | + end | ||
146 | + | ||
109 | describe "POST /groups/:id/projects/:project_id" do | 147 | describe "POST /groups/:id/projects/:project_id" do |
110 | let(:project) { create(:project) } | 148 | let(:project) { create(:project) } |
111 | before(:each) do | 149 | before(:each) do |
spec/services/system_hooks_service_spec.rb
@@ -5,37 +5,29 @@ describe SystemHooksService do | @@ -5,37 +5,29 @@ describe SystemHooksService do | ||
5 | let (:project) { create :project } | 5 | let (:project) { create :project } |
6 | let (:users_project) { create :users_project } | 6 | let (:users_project) { create :users_project } |
7 | 7 | ||
8 | - context 'it should build event data' do | ||
9 | - it 'should build event data for user' do | ||
10 | - SystemHooksService.build_event_data(user, :create).should include(:event_name, :name, :created_at, :email) | ||
11 | - end | ||
12 | - | ||
13 | - it 'should build event data for project' do | ||
14 | - SystemHooksService.build_event_data(project, :create).should include(:event_name, :name, :created_at, :path, :project_id, :owner_name, :owner_email) | ||
15 | - end | ||
16 | - | ||
17 | - it 'should build event data for users project' do | ||
18 | - SystemHooksService.build_event_data(users_project, :create).should include(:event_name, :created_at, :project_name, :project_path, :project_id, :user_name, :user_email, :project_access) | ||
19 | - end | 8 | + context 'event data' do |
9 | + it { event_data(user, :create).should include(:event_name, :name, :created_at, :email, :user_id) } | ||
10 | + it { event_data(user, :destroy).should include(:event_name, :name, :created_at, :email, :user_id) } | ||
11 | + it { event_data(project, :create).should include(:event_name, :name, :created_at, :path, :project_id, :owner_name, :owner_email) } | ||
12 | + it { event_data(project, :destroy).should include(:event_name, :name, :created_at, :path, :project_id, :owner_name, :owner_email) } | ||
13 | + it { event_data(users_project, :create).should include(:event_name, :created_at, :project_name, :project_path, :project_id, :user_name, :user_email, :project_access) } | ||
14 | + it { event_data(users_project, :destroy).should include(:event_name, :created_at, :project_name, :project_path, :project_id, :user_name, :user_email, :project_access) } | ||
20 | end | 15 | end |
21 | 16 | ||
22 | - context 'it should build event names' do | ||
23 | - it 'should build event names for user' do | ||
24 | - SystemHooksService.build_event_name(user, :create).should eq "user_create" | ||
25 | - | ||
26 | - SystemHooksService.build_event_name(user, :destroy).should eq "user_destroy" | ||
27 | - end | ||
28 | - | ||
29 | - it 'should build event names for project' do | ||
30 | - SystemHooksService.build_event_name(project, :create).should eq "project_create" | ||
31 | - | ||
32 | - SystemHooksService.build_event_name(project, :destroy).should eq "project_destroy" | ||
33 | - end | 17 | + context 'event names' do |
18 | + it { event_name(user, :create).should eq "user_create" } | ||
19 | + it { event_name(user, :destroy).should eq "user_destroy" } | ||
20 | + it { event_name(project, :create).should eq "project_create" } | ||
21 | + it { event_name(project, :destroy).should eq "project_destroy" } | ||
22 | + it { event_name(users_project, :create).should eq "user_add_to_team" } | ||
23 | + it { event_name(users_project, :destroy).should eq "user_remove_from_team" } | ||
24 | + end | ||
34 | 25 | ||
35 | - it 'should build event names for users project' do | ||
36 | - SystemHooksService.build_event_name(users_project, :create).should eq "user_add_to_team" | 26 | + def event_data(*args) |
27 | + SystemHooksService.build_event_data(*args) | ||
28 | + end | ||
37 | 29 | ||
38 | - SystemHooksService.build_event_name(users_project, :destroy).should eq "user_remove_from_team" | ||
39 | - end | 30 | + def event_name(*args) |
31 | + SystemHooksService.build_event_name(*args) | ||
40 | end | 32 | end |
41 | end | 33 | end |