Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
gitlab-ce
Commits
2472147f
Commit
2472147f
authored
9 years ago
by
Douwe Maan
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' into ldap-sync-group-members
parents
db00bd00
4af98170
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
103 additions
and
38 deletions
+103
-38
CHANGELOG
CHANGELOG
+2
-0
CHANGELOG-EE
CHANGELOG-EE
+2
-0
app/models/group.rb
app/models/group.rb
+6
-6
app/models/member.rb
app/models/member.rb
+4
-1
app/models/members/group_member.rb
app/models/members/group_member.rb
+5
-5
app/models/members/project_member.rb
app/models/members/project_member.rb
+5
-5
app/views/shared/issuable/_form.html.haml
app/views/shared/issuable/_form.html.haml
+40
-15
app/workers/admin_emails_worker.rb
app/workers/admin_emails_worker.rb
+1
-1
features/project/merge_requests.feature
features/project/merge_requests.feature
+7
-0
features/steps/project/merge_requests.rb
features/steps/project/merge_requests.rb
+13
-2
lib/gitlab/ldap/access.rb
lib/gitlab/ldap/access.rb
+1
-1
spec/lib/gitlab/ldap/access_spec.rb
spec/lib/gitlab/ldap/access_spec.rb
+15
-0
spec/models/merge_request_spec.rb
spec/models/merge_request_spec.rb
+2
-2
No files found.
CHANGELOG
View file @
2472147f
...
...
@@ -12,6 +12,8 @@ v 7.14.0 (unreleased)
- Add support for destroying project milestones (Stan Hu)
- Add fetch command to the MR page.
- Fix bug causing "Remove source-branch" option not to work for merge requests from the same project.
- Fix approvals for forks. Now you can change approvals settings on the new merge request form
- Suggested approvers are shown on the new merge request form
v 7.13.1
- Revert issue caching
...
...
This diff is collapsed.
Click to expand it.
CHANGELOG-EE
View file @
2472147f
v 7.14
- Disable adding, updating and removing members from a group that is synced with LDAP
- Don't send "Added to group" notifications when group is LDAP synched
v 7.13.2
- Fix group web hook
- Don't resend admin email to everyone if one delivery fails
v 7.13.1
- Merge community edition changes for version 7.13.1
...
...
This diff is collapsed.
Click to expand it.
app/models/group.rb
View file @
2472147f
...
...
@@ -64,18 +64,18 @@ class Group < Namespace
@owners
||=
group_members
.
owners
.
map
(
&
:user
)
end
def
add_users
(
user_ids
,
access_level
,
current_user
=
nil
)
def
add_users
(
user_ids
,
access_level
,
current_user
=
nil
,
skip_notification:
false
)
user_ids
.
each
do
|
user_id
|
Member
.
add_user
(
self
.
group_members
,
user_id
,
access_level
,
current_user
)
Member
.
add_user
(
self
.
group_members
,
user_id
,
access_level
,
current_user
,
skip_notification:
skip_notification
)
end
end
def
add_user
(
user
,
access_level
,
current_user
=
nil
)
add_users
([
user
],
access_level
,
current_user
)
def
add_user
(
user
,
access_level
,
current_user
=
nil
,
skip_notification:
false
)
add_users
([
user
],
access_level
,
current_user
,
skip_notification:
skip_notification
)
end
def
add_owner
(
user
,
current_user
=
nil
)
self
.
add_user
(
user
,
Gitlab
::
Access
::
OWNER
,
current_user
)
def
add_owner
(
user
,
current_user
=
nil
,
skip_notification:
false
)
self
.
add_user
(
user
,
Gitlab
::
Access
::
OWNER
,
current_user
,
skip_notification:
skip_notification
)
end
def
has_owner?
(
user
)
...
...
This diff is collapsed.
Click to expand it.
app/models/member.rb
View file @
2472147f
...
...
@@ -23,6 +23,7 @@ class Member < ActiveRecord::Base
include
Gitlab
::
Access
attr_accessor
:raw_invite_token
attr_accessor
:skip_notification
belongs_to
:created_by
,
class_name:
"User"
belongs_to
:user
...
...
@@ -71,7 +72,7 @@ class Member < ActiveRecord::Base
user
end
def
add_user
(
members
,
user_id
,
access_level
,
current_user
=
nil
)
def
add_user
(
members
,
user_id
,
access_level
,
current_user
=
nil
,
skip_notification:
false
)
user
=
user_for_id
(
user_id
)
# `user` can be either a User object or an email to be invited
...
...
@@ -85,6 +86,8 @@ class Member < ActiveRecord::Base
member
.
created_by
||=
current_user
member
.
access_level
=
access_level
member
.
skip_notification
=
skip_notification
member
.
save
end
end
...
...
This diff is collapsed.
Click to expand it.
app/models/members/group_member.rb
View file @
2472147f
...
...
@@ -47,33 +47,33 @@ class GroupMember < Member
private
def
send_invite
notification_service
.
invite_group_member
(
self
,
@raw_invite_token
)
notification_service
.
invite_group_member
(
self
,
@raw_invite_token
)
unless
@skip_notification
super
end
def
post_create_hook
notification_service
.
new_group_member
(
self
)
notification_service
.
new_group_member
(
self
)
unless
@skip_notification
super
end
def
post_update_hook
if
access_level_changed?
notification_service
.
update_group_member
(
self
)
notification_service
.
update_group_member
(
self
)
unless
@skip_notification
end
super
end
def
after_accept_invite
notification_service
.
accept_group_invite
(
self
)
notification_service
.
accept_group_invite
(
self
)
unless
@skip_notification
super
end
def
after_decline_invite
notification_service
.
decline_group_invite
(
self
)
notification_service
.
decline_group_invite
(
self
)
unless
@skip_notification
super
end
...
...
This diff is collapsed.
Click to expand it.
app/models/members/project_member.rb
View file @
2472147f
...
...
@@ -123,7 +123,7 @@ class ProjectMember < Member
private
def
send_invite
notification_service
.
invite_project_member
(
self
,
@raw_invite_token
)
notification_service
.
invite_project_member
(
self
,
@raw_invite_token
)
unless
@skip_notification
super
end
...
...
@@ -131,7 +131,7 @@ class ProjectMember < Member
def
post_create_hook
unless
owner?
event_service
.
join_project
(
self
.
project
,
self
.
user
)
notification_service
.
new_project_member
(
self
)
notification_service
.
new_project_member
(
self
)
unless
@skip_notification
end
super
...
...
@@ -139,7 +139,7 @@ class ProjectMember < Member
def
post_update_hook
if
access_level_changed?
notification_service
.
update_project_member
(
self
)
notification_service
.
update_project_member
(
self
)
unless
@skip_notification
end
super
...
...
@@ -152,13 +152,13 @@ class ProjectMember < Member
end
def
after_accept_invite
notification_service
.
accept_project_invite
(
self
)
notification_service
.
accept_project_invite
(
self
)
unless
@skip_notification
super
end
def
after_decline_invite
notification_service
.
decline_project_invite
(
self
)
notification_service
.
decline_project_invite
(
self
)
unless
@skip_notification
super
end
...
...
This diff is collapsed.
Click to expand it.
app/views/shared/issuable/_form.html.haml
View file @
2472147f
...
...
@@ -81,7 +81,7 @@
=
link_to
'Create new label'
,
new_namespace_project_label_path
(
issuable
.
project
.
namespace
,
issuable
.
project
),
target: :blank
-
if
issuable
.
is_a?
(
MergeRequest
)
-
if
@
project
.
approvals_before_merge
.
nonzero
?
-
if
@
merge_request
.
requires_approve
?
.form-group
=
f
.
label
:approver_ids
,
class:
'control-label'
do
Approvers
...
...
@@ -89,25 +89,35 @@
=
users_select_tag
(
"merge_request[approver_ids]"
,
multiple:
true
,
class:
'input-large'
,
scope: :all
,
email_user:
true
)
.help-block
Merge Request should be approved by these users.
-
if
@project
.
approvers
.
any?
Suggested approver(s):
#{
render_items_list
(
@project
.
approvers
.
map
{
|
approver
|
approver
.
user
.
name
})
}
.
You can override the project settings by setting your own list of approvers.
You can override the project settings by setting your own list of approvers.
.panel.panel-default.prepend-top-10
.panel-heading
Approvers
%small
(
#{
@merge_request
.
approvers
.
count
(
:all
)
}
)
%small
#approvers-counter
-
approvers
=
@merge_request
.
new_record?
?
@merge_request
.
target_project
.
approvers
:
@merge_request
.
approvers
(
#{
approvers
.
count
(
:all
)
}
)
%ul
.well-list
-
@merge_request
.
approvers
.
each
do
|
approver
|
%li
=
link_to
approver
.
user
.
name
,
approver
.
user
.pull-right
=
link_to
namespace_project_merge_request_approver_path
(
@project
.
namespace
,
@project
,
@merge_request
,
approver
),
data:
{
confirm:
"Are you sure you want to remove approver
#{
approver
.
user
.
name
}
"
},
method: :delete
,
class:
"btn-xs btn btn-remove"
,
title:
'Remove approver'
do
=
icon
(
"sign-out"
)
Remove
-
if
@merge_request
.
approvers
.
empty?
%li
There are no approvers
-
if
@merge_request
.
new_record?
-
@merge_request
.
target_project
.
approvers
.
each
do
|
approver
|
%li
.project-approvers
{
id:
dom_id
(
approver
.
user
)}
=
link_to
approver
.
user
.
name
,
approver
.
user
.pull-right
=
link_to
"#"
,
data:
{
confirm:
"Are you sure you want to remove approver
#{
approver
.
user
.
name
}
"
},
class:
"btn-xs btn btn-remove"
,
title:
'Remove approver'
do
=
icon
(
"sign-out"
)
Remove
-
if
@merge_request
.
target_project
.
approvers
.
empty?
%li
There are no approvers
-
else
-
@merge_request
.
approvers
.
each
do
|
approver
|
%li
=
link_to
approver
.
user
.
name
,
approver
.
user
.pull-right
=
link_to
namespace_project_merge_request_approver_path
(
@project
.
namespace
,
@project
,
@merge_request
,
approver
),
data:
{
confirm:
"Are you sure you want to remove approver
#{
approver
.
user
.
name
}
"
},
method: :delete
,
class:
"btn-xs btn btn-remove"
,
title:
'Remove approver'
do
=
icon
(
"sign-out"
)
Remove
-
if
@merge_request
.
approvers
.
empty?
%li
There are no approvers
%hr
-
if
@merge_request
.
new_record?
.form-group
...
...
@@ -141,3 +151,18 @@
-
else
-
cancel_project
=
issuable
.
project
=
link_to
'Cancel'
,
[
cancel_project
.
namespace
.
becomes
(
Namespace
),
cancel_project
,
issuable
],
class:
'btn btn-cancel'
:coffeescript
$(".project-approvers .btn-remove").click ->
approvers_list = $(this).closest("ul")
$(this).closest("li").remove()
approvers_count = approvers_list.find("li").size()
$("#approvers-counter").text("(" + approvers_count + ")")
return false
$("form#new_merge_request").submit ->
approver_ids = $.map $("li.project-approvers"), (li, i) ->
li.id.replace("user_", "")
approvers_input = $(this).find("input#merge_request_approver_ids")
approver_ids = approver_ids.concat(approvers_input.val().split(","))
approvers_input.val(approver_ids.join(","))
This diff is collapsed.
Click to expand it.
app/workers/admin_emails_worker.rb
View file @
2472147f
...
...
@@ -3,7 +3,7 @@ class AdminEmailsWorker
def
perform
(
recipient_id
,
subject
,
body
)
recipient_list
(
recipient_id
).
pluck
(
:id
).
each
do
|
user_id
|
Notify
.
send_admin_notification
(
user_id
,
subject
,
body
).
deliver
Notify
.
delay
.
send_admin_notification
(
user_id
,
subject
,
body
)
end
end
...
...
This diff is collapsed.
Click to expand it.
features/project/merge_requests.feature
View file @
2472147f
...
...
@@ -255,6 +255,13 @@ Feature: Project Merge Requests
When
I should not see Approve button
And
I should see message that MR require an approval
Scenario
:
I
see suggested approvers on new merge request form
Given
project settings contain list of approvers
When
I click link
"New Merge Request"
And
I select
"fix"
as source
Then
I see suggested approver
Scenario
:
I
should see rebase checkbox
Given
project
"Shop"
have
"Bug NS-05"
open merge request with diffs inside
And
rebase before merge enabled
...
...
This diff is collapsed.
Click to expand it.
features/steps/project/merge_requests.rb
View file @
2472147f
...
...
@@ -338,6 +338,17 @@ class Spinach::Features::ProjectMergeRequests < Spinach::FeatureSteps
expect
(
page
).
to
have_content
'Target branch changed from master to feature'
end
step
'project settings contain list of approvers'
do
project
.
update
(
approvals_before_merge:
1
)
project
.
approvers
.
create
(
user_id:
current_user
.
id
)
end
step
'I see suggested approver'
do
page
.
within
'.project-approvers'
do
expect
(
page
).
to
have_content
(
current_user
.
name
)
end
end
step
'merge request \'Bug NS-04\' must be approved'
do
merge_request
=
MergeRequest
.
find_by!
(
title:
"Bug NS-04"
)
project
=
merge_request
.
target_project
...
...
@@ -350,7 +361,7 @@ class Spinach::Features::ProjectMergeRequests < Spinach::FeatureSteps
merge_request
=
MergeRequest
.
find_by!
(
title:
"Bug NS-04"
)
project
=
merge_request
.
target_project
project
.
approvals_before_merge
=
1
projec
t
.
approvers
.
create
(
user_id:
current_user
.
id
)
merge_reques
t
.
approvers
.
create
(
user_id:
current_user
.
id
)
project
.
ensure_satellite_exists
project
.
save!
end
...
...
@@ -359,7 +370,7 @@ class Spinach::Features::ProjectMergeRequests < Spinach::FeatureSteps
merge_request
=
MergeRequest
.
find_by!
(
title:
"Bug NS-04"
)
project
=
merge_request
.
target_project
project
.
approvals_before_merge
=
1
projec
t
.
approvers
.
create
(
user_id:
create
(
:user
).
id
)
merge_reques
t
.
approvers
.
create
(
user_id:
create
(
:user
).
id
)
project
.
ensure_satellite_exists
project
.
save!
end
...
...
This diff is collapsed.
Click to expand it.
lib/gitlab/ldap/access.rb
View file @
2472147f
...
...
@@ -140,7 +140,7 @@ module Gitlab
active_group_links
=
group
.
ldap_group_links
.
where
(
cn:
cns_with_access
)
if
active_group_links
.
any?
group
.
add_users
([
user
.
id
],
fetch_group_access
(
group
,
user
,
active_group_links
))
group
.
add_users
([
user
.
id
],
fetch_group_access
(
group
,
user
,
active_group_links
)
,
skip_notification:
true
)
elsif
group
.
last_owner?
(
user
)
Rails
.
logger
.
warn
"
#{
self
.
class
.
name
}
: LDAP group sync cannot remove
#{
user
.
name
}
(
#{
user
.
id
}
) from group
#{
group
.
name
}
(
#{
group
.
id
}
) as this is the group's last owner"
else
...
...
This diff is collapsed.
Click to expand it.
spec/lib/gitlab/ldap/access_spec.rb
View file @
2472147f
...
...
@@ -258,6 +258,11 @@ objectclass: posixGroup
access
.
update_ldap_group_links
expect
(
gitlab_group_1
.
has_master?
(
user
)
).
to
be_truthy
end
it
"doesn't send a notification email"
do
expect
{
access
.
update_ldap_group_links
}.
not_to
\
change
{
ActionMailer
::
Base
.
deliveries
}
end
end
context
"existing access as guest for group-1, allowed via ldap-group1 as DEVELOPER"
do
...
...
@@ -271,6 +276,11 @@ objectclass: posixGroup
expect
{
access
.
update_ldap_group_links
}.
to
\
change
{
gitlab_group_1
.
has_master?
(
user
)
}.
from
(
false
).
to
(
true
)
end
it
"doesn't send a notification email"
do
expect
{
access
.
update_ldap_group_links
}.
not_to
\
change
{
ActionMailer
::
Base
.
deliveries
}
end
end
context
"existing access as MASTER for group-1, allowed via ldap-group1 as DEVELOPER"
do
...
...
@@ -284,6 +294,11 @@ objectclass: posixGroup
expect
{
access
.
update_ldap_group_links
}.
not_to
\
change
{
gitlab_group_1
.
has_master?
(
user
)
}
end
it
"doesn't send a notification email"
do
expect
{
access
.
update_ldap_group_links
}.
not_to
\
change
{
ActionMailer
::
Base
.
deliveries
}
end
end
context
"existing access as master for group-1, not allowed"
do
...
...
This diff is collapsed.
Click to expand it.
spec/models/merge_request_spec.rb
View file @
2472147f
...
...
@@ -181,8 +181,8 @@ describe MergeRequest do
it
"returns correct value"
do
user
=
create
(
:user
)
user1
=
create
(
:user
)
merge_request
.
target_project
.
approvers
.
create
(
user_id:
user
.
id
)
merge_request
.
target_project
.
approvers
.
create
(
user_id:
user1
.
id
)
merge_request
.
approvers
.
create
(
user_id:
user
.
id
)
merge_request
.
approvers
.
create
(
user_id:
user1
.
id
)
merge_request
.
approvals
.
create
(
user_id:
user1
.
id
)
expect
(
merge_request
.
approvers_left
).
to
eq
[
user
]
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment