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
0
Merge Requests
0
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
Jérome Perrin
gitlab-ce
Commits
d222ce8b
Commit
d222ce8b
authored
Oct 21, 2015
by
Douwe Maan
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' into full-width-tables
parents
7ae13956
249a9476
Changes
68
Hide whitespace changes
Inline
Side-by-side
Showing
68 changed files
with
715 additions
and
225 deletions
+715
-225
CHANGELOG
CHANGELOG
+12
-0
app/assets/stylesheets/framework/blocks.scss
app/assets/stylesheets/framework/blocks.scss
+45
-0
app/assets/stylesheets/framework/typography.scss
app/assets/stylesheets/framework/typography.scss
+0
-1
app/assets/stylesheets/pages/profile.scss
app/assets/stylesheets/pages/profile.scss
+6
-0
app/controllers/abuse_reports_controller.rb
app/controllers/abuse_reports_controller.rb
+4
-0
app/controllers/admin/application_settings_controller.rb
app/controllers/admin/application_settings_controller.rb
+1
-0
app/controllers/admin/broadcast_messages_controller.rb
app/controllers/admin/broadcast_messages_controller.rb
+1
-1
app/controllers/admin/hooks_controller.rb
app/controllers/admin/hooks_controller.rb
+1
-1
app/controllers/admin/users_controller.rb
app/controllers/admin/users_controller.rb
+17
-9
app/controllers/application_controller.rb
app/controllers/application_controller.rb
+4
-0
app/controllers/import/github_controller.rb
app/controllers/import/github_controller.rb
+0
-4
app/controllers/import/google_code_controller.rb
app/controllers/import/google_code_controller.rb
+3
-3
app/controllers/invites_controller.rb
app/controllers/invites_controller.rb
+2
-2
app/controllers/profiles/notifications_controller.rb
app/controllers/profiles/notifications_controller.rb
+1
-1
app/controllers/profiles_controller.rb
app/controllers/profiles_controller.rb
+1
-1
app/controllers/projects/ci_services_controller.rb
app/controllers/projects/ci_services_controller.rb
+1
-1
app/controllers/projects/ci_web_hooks_controller.rb
app/controllers/projects/ci_web_hooks_controller.rb
+1
-1
app/controllers/projects/compare_controller.rb
app/controllers/projects/compare_controller.rb
+2
-1
app/controllers/projects/deploy_keys_controller.rb
app/controllers/projects/deploy_keys_controller.rb
+1
-1
app/controllers/projects/hooks_controller.rb
app/controllers/projects/hooks_controller.rb
+1
-1
app/controllers/projects/issues_controller.rb
app/controllers/projects/issues_controller.rb
+1
-1
app/controllers/projects/merge_requests_controller.rb
app/controllers/projects/merge_requests_controller.rb
+4
-1
app/controllers/projects/milestones_controller.rb
app/controllers/projects/milestones_controller.rb
+1
-5
app/controllers/projects/notes_controller.rb
app/controllers/projects/notes_controller.rb
+2
-2
app/controllers/projects/project_members_controller.rb
app/controllers/projects/project_members_controller.rb
+2
-1
app/controllers/projects/services_controller.rb
app/controllers/projects/services_controller.rb
+2
-2
app/controllers/projects_controller.rb
app/controllers/projects_controller.rb
+3
-1
app/finders/issuable_finder.rb
app/finders/issuable_finder.rb
+71
-43
app/helpers/diff_helper.rb
app/helpers/diff_helper.rb
+2
-1
app/mailers/abuse_report_mailer.rb
app/mailers/abuse_report_mailer.rb
+12
-0
app/models/application_setting.rb
app/models/application_setting.rb
+4
-0
app/models/commit.rb
app/models/commit.rb
+8
-4
app/models/merge_request.rb
app/models/merge_request.rb
+13
-1
app/models/merge_request_diff.rb
app/models/merge_request_diff.rb
+4
-0
app/models/milestone.rb
app/models/milestone.rb
+32
-0
app/models/repository.rb
app/models/repository.rb
+1
-7
app/views/abuse_report_mailer/notify.html.haml
app/views/abuse_report_mailer/notify.html.haml
+11
-0
app/views/abuse_report_mailer/notify.text.haml
app/views/abuse_report_mailer/notify.text.haml
+5
-0
app/views/admin/application_settings/_form.html.haml
app/views/admin/application_settings/_form.html.haml
+6
-0
app/views/admin/users/_profile.html.haml
app/views/admin/users/_profile.html.haml
+0
-0
app/views/admin/users/show.html.haml
app/views/admin/users/show.html.haml
+1
-1
app/views/layouts/notify.html.haml
app/views/layouts/notify.html.haml
+4
-0
app/views/projects/buttons/_notifications.html.haml
app/views/projects/buttons/_notifications.html.haml
+19
-13
app/views/projects/diffs/_diffs.html.haml
app/views/projects/diffs/_diffs.html.haml
+2
-2
app/views/projects/diffs/_file.html.haml
app/views/projects/diffs/_file.html.haml
+2
-2
app/views/projects/merge_requests/widget/_heading.html.haml
app/views/projects/merge_requests/widget/_heading.html.haml
+36
-37
app/views/shared/_clone_panel.html.haml
app/views/shared/_clone_panel.html.haml
+2
-2
app/views/users/calendar.html.haml
app/views/users/calendar.html.haml
+2
-4
app/views/users/show.html.haml
app/views/users/show.html.haml
+57
-33
db/fixtures/development/05_users.rb
db/fixtures/development/05_users.rb
+2
-2
db/fixtures/development/07_milestones.rb
db/fixtures/development/07_milestones.rb
+1
-1
db/fixtures/development/09_issues.rb
db/fixtures/development/09_issues.rb
+1
-1
db/fixtures/development/12_snippets.rb
db/fixtures/development/12_snippets.rb
+1
-1
db/migrate/20151008143519_add_admin_notification_email_setting.rb
...te/20151008143519_add_admin_notification_email_setting.rb
+5
-0
db/schema.rb
db/schema.rb
+1
-0
doc/update/8.0-to-8.1.md
doc/update/8.0-to-8.1.md
+34
-4
doc/update/patch_versions.md
doc/update/patch_versions.md
+1
-3
features/steps/abuse_reports.rb
features/steps/abuse_reports.rb
+1
-1
lib/gitlab/markdown/reference_filter.rb
lib/gitlab/markdown/reference_filter.rb
+4
-4
lib/tasks/gitlab/check.rake
lib/tasks/gitlab/check.rake
+1
-1
spec/benchmarks/lib/gitlab/markdown/reference_filter_spec.rb
spec/benchmarks/lib/gitlab/markdown/reference_filter_spec.rb
+41
-0
spec/benchmarks/models/milestone_spec.rb
spec/benchmarks/models/milestone_spec.rb
+17
-0
spec/controllers/abuse_reports_controller_spec.rb
spec/controllers/abuse_reports_controller_spec.rb
+72
-0
spec/controllers/admin/users_controller_spec.rb
spec/controllers/admin/users_controller_spec.rb
+26
-0
spec/controllers/import/github_controller_spec.rb
spec/controllers/import/github_controller_spec.rb
+1
-1
spec/controllers/invites_controller_spec.rb
spec/controllers/invites_controller_spec.rb
+33
-0
spec/controllers/projects/services_controller_spec.rb
spec/controllers/projects/services_controller_spec.rb
+32
-15
spec/models/milestone_spec.rb
spec/models/milestone_spec.rb
+28
-0
No files found.
CHANGELOG
View file @
d222ce8b
Please view this file on the master branch, on stable branches it's out of date.
Please view this file on the master branch, on stable branches it's out of date.
v 8.2.0 (unreleased)
v 8.2.0 (unreleased)
- Improved performance of replacing references in comments
- Fix duplicate repositories in GitHub import page (Stan Hu)
- Redirect to a default path if HTTP_REFERER is not set (Stan Hu)
- Show last project commit to default branch on project home page
- Show last project commit to default branch on project home page
- Highlight comment based on anchor in URL
- Highlight comment based on anchor in URL
- Adds ability to remove the forked relationship from project settings screen. (Han Loong Liauw)
- Adds ability to remove the forked relationship from project settings screen. (Han Loong Liauw)
- Improved performance of sorting milestone issues
- Allow users to select the Files view as default project view (Cristian Bica)
v 8.1.0 (unreleased)
v 8.1.0 (unreleased)
- Send an email to admin email when a user is reported for spam (Jonathan Rochkind)
- Show notifications button when user is member of group rather than project (Grzegorz Bizon)
- Fix bug preventing mentioned issued from being closed when MR is merged using fast-forward merge.
- Fix bug preventing mentioned issued from being closed when MR is merged using fast-forward merge.
- Fix nonatomic database update potentially causing project star counts to go negative (Stan Hu)
- Fix nonatomic database update potentially causing project star counts to go negative (Stan Hu)
- Fix error preventing displaying of commit data for a directory with a leading dot (Stan Hu)
- Fix error preventing displaying of commit data for a directory with a leading dot (Stan Hu)
...
@@ -72,8 +79,13 @@ v 8.1.0 (unreleased)
...
@@ -72,8 +79,13 @@ v 8.1.0 (unreleased)
- Only render 404 page from /public
- Only render 404 page from /public
- Hide passwords from services API (Alex Lossent)
- Hide passwords from services API (Alex Lossent)
- Fix: Images cannot show when projects' path was changed
- Fix: Images cannot show when projects' path was changed
- Optimize query when filtering on issuables (Zeger-Jan van de Weg)
- Fix padding of outdated discussion item.
- Fix padding of outdated discussion item.
v 8.0.5
- Correct lookup-by-email for LDAP logins
- Fix loading spinner sometimes not being hidden on Merge Request tab switches
v 8.0.4
v 8.0.4
- Fix Message-ID header to be RFC 2111-compliant to prevent e-mails being dropped (Stan Hu)
- Fix Message-ID header to be RFC 2111-compliant to prevent e-mails being dropped (Stan Hu)
- Fix referrals for :back and relative URL installs
- Fix referrals for :back and relative URL installs
...
...
app/assets/stylesheets/framework/blocks.scss
View file @
d222ce8b
...
@@ -65,3 +65,48 @@
...
@@ -65,3 +65,48 @@
line-height
:
42px
;
line-height
:
42px
;
}
}
}
}
.cover-block
{
text-align
:
center
;
background
:
#f7f8fa
;
margin
:
-
$gl-padding
;
margin-bottom
:
0
;
padding
:
44px
$gl-padding
;
border-bottom
:
1px
solid
$border-color
;
position
:
relative
;
.avatar-holder
{
margin-bottom
:
16px
;
.avatar
,
.identicon
{
margin
:
0
auto
;
float
:
none
;
}
.identicon
{
@include
border-radius
(
50%
);
}
}
.cover-title
{
color
:
$gl-header-color
;
margin
:
0
;
font-size
:
23px
;
font-weight
:
normal
;
margin
:
16px
0
5px
0
;
color
:
#4c4e54
;
font-size
:
23px
;
line-height
:
1
.1
;
}
.cover-desc
{
padding
:
0
$gl-padding
;
color
:
$gl-text-color
;
}
.cover-controls
{
position
:
absolute
;
top
:
10px
;
right
:
10px
;
}
}
app/assets/stylesheets/framework/typography.scss
View file @
d222ce8b
...
@@ -18,7 +18,6 @@
...
@@ -18,7 +18,6 @@
font-family
:
$monospace_font
;
font-family
:
$monospace_font
;
white-space
:
pre
;
white-space
:
pre
;
word-wrap
:
normal
;
word-wrap
:
normal
;
padding
:
1px
2px
;
}
}
kbd
{
kbd
{
...
...
app/assets/stylesheets/pages/profile.scss
View file @
d222ce8b
...
@@ -47,3 +47,9 @@
...
@@ -47,3 +47,9 @@
}
}
}
}
}
}
.calendar-hint
{
margin-top
:
-12px
;
float
:
right
;
font-size
:
12px
;
}
app/controllers/abuse_reports_controller.rb
View file @
d222ce8b
...
@@ -9,6 +9,10 @@ class AbuseReportsController < ApplicationController
...
@@ -9,6 +9,10 @@ class AbuseReportsController < ApplicationController
@abuse_report
.
reporter
=
current_user
@abuse_report
.
reporter
=
current_user
if
@abuse_report
.
save
if
@abuse_report
.
save
if
current_application_settings
.
admin_notification_email
.
present?
AbuseReportMailer
.
delay
.
notify
(
@abuse_report
.
id
)
end
message
=
"Thank you for your report. A GitLab administrator will look into it shortly."
message
=
"Thank you for your report. A GitLab administrator will look into it shortly."
redirect_to
root_path
,
notice:
message
redirect_to
root_path
,
notice:
message
else
else
...
...
app/controllers/admin/application_settings_controller.rb
View file @
d222ce8b
...
@@ -55,6 +55,7 @@ class Admin::ApplicationSettingsController < Admin::ApplicationController
...
@@ -55,6 +55,7 @@ class Admin::ApplicationSettingsController < Admin::ApplicationController
:default_snippet_visibility
,
:default_snippet_visibility
,
:restricted_signup_domains_raw
,
:restricted_signup_domains_raw
,
:version_check_enabled
,
:version_check_enabled
,
:admin_notification_email
,
:user_oauth_applications
,
:user_oauth_applications
,
restricted_visibility_levels:
[],
restricted_visibility_levels:
[],
import_sources:
[]
import_sources:
[]
...
...
app/controllers/admin/broadcast_messages_controller.rb
View file @
d222ce8b
...
@@ -19,7 +19,7 @@ class Admin::BroadcastMessagesController < Admin::ApplicationController
...
@@ -19,7 +19,7 @@ class Admin::BroadcastMessagesController < Admin::ApplicationController
BroadcastMessage
.
find
(
params
[
:id
]).
destroy
BroadcastMessage
.
find
(
params
[
:id
]).
destroy
respond_to
do
|
format
|
respond_to
do
|
format
|
format
.
html
{
redirect_
to
:back
}
format
.
html
{
redirect_
back_or_default
(
default:
{
action:
'index'
})
}
format
.
js
{
render
nothing:
true
}
format
.
js
{
render
nothing:
true
}
end
end
end
end
...
...
app/controllers/admin/hooks_controller.rb
View file @
d222ce8b
...
@@ -35,7 +35,7 @@ class Admin::HooksController < Admin::ApplicationController
...
@@ -35,7 +35,7 @@ class Admin::HooksController < Admin::ApplicationController
}
}
@hook
.
execute
(
data
,
'system_hooks'
)
@hook
.
execute
(
data
,
'system_hooks'
)
redirect_
to
:back
redirect_
back_or_default
end
end
def
hook_params
def
hook_params
...
...
app/controllers/admin/users_controller.rb
View file @
d222ce8b
...
@@ -33,33 +33,33 @@ class Admin::UsersController < Admin::ApplicationController
...
@@ -33,33 +33,33 @@ class Admin::UsersController < Admin::ApplicationController
def
block
def
block
if
user
.
block
if
user
.
block
redirect_
to
:back
,
notice:
"Successfully blocked"
redirect_
back_or_admin_user
(
notice:
"Successfully blocked"
)
else
else
redirect_
to
:back
,
alert:
"Error occurred. User was not blocked"
redirect_
back_or_admin_user
(
alert:
"Error occurred. User was not blocked"
)
end
end
end
end
def
unblock
def
unblock
if
user
.
activate
if
user
.
activate
redirect_
to
:back
,
notice:
"Successfully unblocked"
redirect_
back_or_admin_user
(
notice:
"Successfully unblocked"
)
else
else
redirect_
to
:back
,
alert:
"Error occurred. User was not unblocked"
redirect_
back_or_admin_user
(
alert:
"Error occurred. User was not unblocked"
)
end
end
end
end
def
unlock
def
unlock
if
user
.
unlock_access!
if
user
.
unlock_access!
redirect_
to
:back
,
alert:
"Successfully unlocked"
redirect_
back_or_admin_user
(
alert:
"Successfully unlocked"
)
else
else
redirect_
to
:back
,
alert:
"Error occurred. User was not unlocked"
redirect_
back_or_admin_user
(
alert:
"Error occurred. User was not unlocked"
)
end
end
end
end
def
confirm
def
confirm
if
user
.
confirm
if
user
.
confirm
redirect_
to
:back
,
notice:
"Successfully confirmed"
redirect_
back_or_admin_user
(
notice:
"Successfully confirmed"
)
else
else
redirect_
to
:back
,
alert:
"Error occurred. User was not confirmed"
redirect_
back_or_admin_user
(
alert:
"Error occurred. User was not confirmed"
)
end
end
end
end
...
@@ -138,7 +138,7 @@ class Admin::UsersController < Admin::ApplicationController
...
@@ -138,7 +138,7 @@ class Admin::UsersController < Admin::ApplicationController
user
.
update_secondary_emails!
user
.
update_secondary_emails!
respond_to
do
|
format
|
respond_to
do
|
format
|
format
.
html
{
redirect_
to
:back
,
notice:
"Successfully removed email."
}
format
.
html
{
redirect_
back_or_admin_user
(
notice:
"Successfully removed email."
)
}
format
.
js
{
render
nothing:
true
}
format
.
js
{
render
nothing:
true
}
end
end
end
end
...
@@ -157,4 +157,12 @@ class Admin::UsersController < Admin::ApplicationController
...
@@ -157,4 +157,12 @@ class Admin::UsersController < Admin::ApplicationController
:projects_limit
,
:can_create_group
,
:admin
,
:key_id
:projects_limit
,
:can_create_group
,
:admin
,
:key_id
)
)
end
end
def
redirect_back_or_admin_user
(
options
=
{})
redirect_back_or_default
(
default:
default_route
,
options:
options
)
end
def
default_route
[
:admin
,
@user
]
end
end
end
app/controllers/application_controller.rb
View file @
d222ce8b
...
@@ -33,6 +33,10 @@ class ApplicationController < ActionController::Base
...
@@ -33,6 +33,10 @@ class ApplicationController < ActionController::Base
render_404
render_404
end
end
def
redirect_back_or_default
(
default:
root_path
,
options:
{})
redirect_to
request
.
referer
.
present?
?
:back
:
default
,
options
end
protected
protected
# From https://github.com/plataformatec/devise/wiki/How-To:-Simple-Token-Authentication-Example
# From https://github.com/plataformatec/devise/wiki/How-To:-Simple-Token-Authentication-Example
...
...
app/controllers/import/github_controller.rb
View file @
d222ce8b
...
@@ -11,10 +11,6 @@ class Import::GithubController < Import::BaseController
...
@@ -11,10 +11,6 @@ class Import::GithubController < Import::BaseController
def
status
def
status
@repos
=
client
.
repos
@repos
=
client
.
repos
client
.
orgs
.
each
do
|
org
|
@repos
+=
client
.
org_repos
(
org
.
login
)
end
@already_added_projects
=
current_user
.
created_projects
.
where
(
import_type:
"github"
)
@already_added_projects
=
current_user
.
created_projects
.
where
(
import_type:
"github"
)
already_added_projects_names
=
@already_added_projects
.
pluck
(
:import_source
)
already_added_projects_names
=
@already_added_projects
.
pluck
(
:import_source
)
...
...
app/controllers/import/google_code_controller.rb
View file @
d222ce8b
...
@@ -10,18 +10,18 @@ class Import::GoogleCodeController < Import::BaseController
...
@@ -10,18 +10,18 @@ class Import::GoogleCodeController < Import::BaseController
dump_file
=
params
[
:dump_file
]
dump_file
=
params
[
:dump_file
]
unless
dump_file
.
respond_to?
(
:read
)
unless
dump_file
.
respond_to?
(
:read
)
return
redirect_
to
:back
,
alert:
"You need to upload a Google Takeout archive."
return
redirect_
back_or_default
(
options:
{
alert:
"You need to upload a Google Takeout archive."
})
end
end
begin
begin
dump
=
JSON
.
parse
(
dump_file
.
read
)
dump
=
JSON
.
parse
(
dump_file
.
read
)
rescue
rescue
return
redirect_
to
:back
,
alert:
"The uploaded file is not a valid Google Takeout archive."
return
redirect_
back_or_default
(
options:
{
alert:
"The uploaded file is not a valid Google Takeout archive."
})
end
end
client
=
Gitlab
::
GoogleCodeImport
::
Client
.
new
(
dump
)
client
=
Gitlab
::
GoogleCodeImport
::
Client
.
new
(
dump
)
unless
client
.
valid?
unless
client
.
valid?
return
redirect_
to
:back
,
alert:
"The uploaded file is not a valid Google Takeout archive."
return
redirect_
back_or_default
(
options:
{
alert:
"The uploaded file is not a valid Google Takeout archive."
})
end
end
session
[
:google_code_dump
]
=
dump
session
[
:google_code_dump
]
=
dump
...
...
app/controllers/invites_controller.rb
View file @
d222ce8b
...
@@ -14,7 +14,7 @@ class InvitesController < ApplicationController
...
@@ -14,7 +14,7 @@ class InvitesController < ApplicationController
redirect_to
path
,
notice:
"You have been granted
#{
member
.
human_access
}
access to
#{
label
}
."
redirect_to
path
,
notice:
"You have been granted
#{
member
.
human_access
}
access to
#{
label
}
."
else
else
redirect_
to
:back
,
alert:
"The invitation could not be accepted."
redirect_
back_or_default
(
options:
{
alert:
"The invitation could not be accepted."
})
end
end
end
end
...
@@ -31,7 +31,7 @@ class InvitesController < ApplicationController
...
@@ -31,7 +31,7 @@ class InvitesController < ApplicationController
redirect_to
path
,
notice:
"You have declined the invitation to join
#{
label
}
."
redirect_to
path
,
notice:
"You have declined the invitation to join
#{
label
}
."
else
else
redirect_
to
:back
,
alert:
"The invitation could not be declined."
redirect_
back_or_default
(
options:
{
alert:
"The invitation could not be declined."
})
end
end
end
end
...
...
app/controllers/profiles/notifications_controller.rb
View file @
d222ce8b
...
@@ -29,7 +29,7 @@ class Profiles::NotificationsController < Profiles::ApplicationController
...
@@ -29,7 +29,7 @@ class Profiles::NotificationsController < Profiles::ApplicationController
flash
[
:alert
]
=
"Failed to save new settings"
flash
[
:alert
]
=
"Failed to save new settings"
end
end
redirect_
to
:back
redirect_
back_or_default
(
default:
profile_notifications_path
)
end
end
format
.
js
format
.
js
...
...
app/controllers/profiles_controller.rb
View file @
d222ce8b
...
@@ -26,7 +26,7 @@ class ProfilesController < Profiles::ApplicationController
...
@@ -26,7 +26,7 @@ class ProfilesController < Profiles::ApplicationController
end
end
respond_to
do
|
format
|
respond_to
do
|
format
|
format
.
html
{
redirect_
to
:back
}
format
.
html
{
redirect_
back_or_default
(
default:
{
action:
'show'
})
}
end
end
end
end
...
...
app/controllers/projects/ci_services_controller.rb
View file @
d222ce8b
...
@@ -30,7 +30,7 @@ class Projects::CiServicesController < Projects::ApplicationController
...
@@ -30,7 +30,7 @@ class Projects::CiServicesController < Projects::ApplicationController
message
=
{
alert:
'We tried to test the service but error occurred'
}
message
=
{
alert:
'We tried to test the service but error occurred'
}
end
end
redirect_
to
:back
,
message
redirect_
back_or_default
(
options:
message
)
end
end
private
private
...
...
app/controllers/projects/ci_web_hooks_controller.rb
View file @
d222ce8b
...
@@ -24,7 +24,7 @@ class Projects::CiWebHooksController < Projects::ApplicationController
...
@@ -24,7 +24,7 @@ class Projects::CiWebHooksController < Projects::ApplicationController
def
test
def
test
Ci
::
TestHookService
.
new
.
execute
(
hook
,
current_user
)
Ci
::
TestHookService
.
new
.
execute
(
hook
,
current_user
)
redirect_
to
:back
redirect_
back_or_default
(
default:
{
action:
'index'
})
end
end
def
destroy
def
destroy
...
...
app/controllers/projects/compare_controller.rb
View file @
d222ce8b
...
@@ -17,9 +17,10 @@ class Projects::CompareController < Projects::ApplicationController
...
@@ -17,9 +17,10 @@ class Projects::CompareController < Projects::ApplicationController
execute
(
@project
,
head_ref
,
@project
,
base_ref
)
execute
(
@project
,
head_ref
,
@project
,
base_ref
)
if
compare_result
if
compare_result
@commits
=
compare_result
.
commits
@commits
=
Commit
.
decorate
(
compare_result
.
commits
,
@project
)
@diffs
=
compare_result
.
diffs
@diffs
=
compare_result
.
diffs
@commit
=
@commits
.
last
@commit
=
@commits
.
last
@first_commit
=
@commits
.
first
@line_notes
=
[]
@line_notes
=
[]
end
end
end
end
...
...
app/controllers/projects/deploy_keys_controller.rb
View file @
d222ce8b
...
@@ -46,7 +46,7 @@ class Projects::DeployKeysController < Projects::ApplicationController
...
@@ -46,7 +46,7 @@ class Projects::DeployKeysController < Projects::ApplicationController
def
disable
def
disable
@project
.
deploy_keys_projects
.
find_by
(
deploy_key_id:
params
[
:id
]).
destroy
@project
.
deploy_keys_projects
.
find_by
(
deploy_key_id:
params
[
:id
]).
destroy
redirect_
to
:back
redirect_
back_or_default
(
default:
{
action:
'index'
})
end
end
protected
protected
...
...
app/controllers/projects/hooks_controller.rb
View file @
d222ce8b
...
@@ -37,7 +37,7 @@ class Projects::HooksController < Projects::ApplicationController
...
@@ -37,7 +37,7 @@ class Projects::HooksController < Projects::ApplicationController
flash
[
:alert
]
=
'Hook execution failed. Ensure the project has commits.'
flash
[
:alert
]
=
'Hook execution failed. Ensure the project has commits.'
end
end
redirect_
to
:back
redirect_
back_or_default
(
default:
{
action:
'index'
})
end
end
def
destroy
def
destroy
...
...
app/controllers/projects/issues_controller.rb
View file @
d222ce8b
...
@@ -106,7 +106,7 @@ class Projects::IssuesController < Projects::ApplicationController
...
@@ -106,7 +106,7 @@ class Projects::IssuesController < Projects::ApplicationController
def
bulk_update
def
bulk_update
result
=
Issues
::
BulkUpdateService
.
new
(
project
,
current_user
,
bulk_update_params
).
execute
result
=
Issues
::
BulkUpdateService
.
new
(
project
,
current_user
,
bulk_update_params
).
execute
redirect_
to
:back
,
notice:
"
#{
result
[
:count
]
}
issues updated"
redirect_
back_or_default
(
default:
{
action:
'index'
},
options:
{
notice:
"
#{
result
[
:count
]
}
issues updated"
})
end
end
def
toggle_subscription
def
toggle_subscription
...
...
app/controllers/projects/merge_requests_controller.rb
View file @
d222ce8b
...
@@ -56,6 +56,8 @@ class Projects::MergeRequestsController < Projects::ApplicationController
...
@@ -56,6 +56,8 @@ class Projects::MergeRequestsController < Projects::ApplicationController
def
diffs
def
diffs
@commit
=
@merge_request
.
last_commit
@commit
=
@merge_request
.
last_commit
@first_commit
=
@merge_request
.
first_commit
@comments_allowed
=
@reply_allowed
=
true
@comments_allowed
=
@reply_allowed
=
true
@comments_target
=
{
@comments_target
=
{
noteable_type:
'MergeRequest'
,
noteable_type:
'MergeRequest'
,
...
@@ -89,7 +91,8 @@ class Projects::MergeRequestsController < Projects::ApplicationController
...
@@ -89,7 +91,8 @@ class Projects::MergeRequestsController < Projects::ApplicationController
@target_project
=
merge_request
.
target_project
@target_project
=
merge_request
.
target_project
@source_project
=
merge_request
.
source_project
@source_project
=
merge_request
.
source_project
@commits
=
@merge_request
.
compare_commits
@commits
=
@merge_request
.
compare_commits
@commit
=
@merge_request
.
compare_commits
.
last
@commit
=
@merge_request
.
last_commit
@first_commit
=
@merge_request
.
first_commit
@diffs
=
@merge_request
.
compare_diffs
@diffs
=
@merge_request
.
compare_diffs
@note_counts
=
Note
.
where
(
commit_id:
@commits
.
map
(
&
:id
)).
@note_counts
=
Note
.
where
(
commit_id:
@commits
.
map
(
&
:id
)).
group
(
:commit_id
).
count
group
(
:commit_id
).
count
...
...
app/controllers/projects/milestones_controller.rb
View file @
d222ce8b
...
@@ -75,11 +75,7 @@ class Projects::MilestonesController < Projects::ApplicationController
...
@@ -75,11 +75,7 @@ class Projects::MilestonesController < Projects::ApplicationController
end
end
def
sort_issues
def
sort_issues
@issues
=
@milestone
.
issues
.
where
(
id:
params
[
'sortable_issue'
])
@milestone
.
sort_issues
(
params
[
'sortable_issue'
].
map
(
&
:to_i
))
@issues
.
each
do
|
issue
|
issue
.
position
=
params
[
'sortable_issue'
].
index
(
issue
.
id
.
to_s
)
+
1
issue
.
save
end
render
json:
{
saved:
true
}
render
json:
{
saved:
true
}
end
end
...
...
app/controllers/projects/notes_controller.rb
View file @
d222ce8b
...
@@ -25,7 +25,7 @@ class Projects::NotesController < Projects::ApplicationController
...
@@ -25,7 +25,7 @@ class Projects::NotesController < Projects::ApplicationController
respond_to
do
|
format
|
respond_to
do
|
format
|
format
.
json
{
render_note_json
(
@note
)
}
format
.
json
{
render_note_json
(
@note
)
}
format
.
html
{
redirect_
to
:back
}
format
.
html
{
redirect_
back_or_default
}
end
end
end
end
...
@@ -34,7 +34,7 @@ class Projects::NotesController < Projects::ApplicationController
...
@@ -34,7 +34,7 @@ class Projects::NotesController < Projects::ApplicationController
respond_to
do
|
format
|
respond_to
do
|
format
|
format
.
json
{
render_note_json
(
@note
)
}
format
.
json
{
render_note_json
(
@note
)
}
format
.
html
{
redirect_
to
:back
}
format
.
html
{
redirect_
back_or_default
}
end
end
end
end
...
...
app/controllers/projects/project_members_controller.rb
View file @
d222ce8b
...
@@ -72,7 +72,8 @@ class Projects::ProjectMembersController < Projects::ApplicationController
...
@@ -72,7 +72,8 @@ class Projects::ProjectMembersController < Projects::ApplicationController
def
leave
def
leave
if
@project
.
namespace
==
current_user
.
namespace
if
@project
.
namespace
==
current_user
.
namespace
return
redirect_to
(
:back
,
alert:
'You can not leave your own project. Transfer or delete the project.'
)
message
=
'You can not leave your own project. Transfer or delete the project.'
return
redirect_back_or_default
(
default:
{
action:
'index'
},
options:
{
alert:
message
})
end
end
@project
.
project_members
.
find_by
(
user_id:
current_user
).
destroy
@project
.
project_members
.
find_by
(
user_id:
current_user
).
destroy
...
...
app/controllers/projects/services_controller.rb
View file @
d222ce8b
...
@@ -12,7 +12,7 @@ class Projects::ServicesController < Projects::ApplicationController
...
@@ -12,7 +12,7 @@ class Projects::ServicesController < Projects::ApplicationController
# Parameters to ignore if no value is specified
# Parameters to ignore if no value is specified
FILTER_BLANK_PARAMS
=
[
:password
]
FILTER_BLANK_PARAMS
=
[
:password
]
# Authorize
# Authorize
before_action
:authorize_admin_project!
before_action
:authorize_admin_project!
before_action
:service
,
only:
[
:edit
,
:update
,
:test
]
before_action
:service
,
only:
[
:edit
,
:update
,
:test
]
...
@@ -52,7 +52,7 @@ class Projects::ServicesController < Projects::ApplicationController
...
@@ -52,7 +52,7 @@ class Projects::ServicesController < Projects::ApplicationController
message
=
{
alert:
error_message
}
message
=
{
alert:
error_message
}
end
end
redirect_
to
:back
,
message
redirect_
back_or_default
(
options:
message
)
end
end
private
private
...
...
app/controllers/projects_controller.rb
View file @
d222ce8b
...
@@ -101,7 +101,7 @@ class ProjectsController < ApplicationController
...
@@ -101,7 +101,7 @@ class ProjectsController < ApplicationController
render
'projects/empty'
render
'projects/empty'
else
else
if
current_user
if
current_user
@membership
=
@project
.
project_member_by_id
(
current_user
.
id
)
@membership
=
@project
.
team
.
find_member
(
current_user
.
id
)
end
end
render
:show
render
:show
...
@@ -246,6 +246,8 @@ class ProjectsController < ApplicationController
...
@@ -246,6 +246,8 @@ class ProjectsController < ApplicationController
project
.
repository_exists?
&&
!
project
.
empty_repo?
project
.
repository_exists?
&&
!
project
.
empty_repo?
end
end
# Override get_id from ExtractsPath, which returns the branch and file path
# for the blob/tree, which in this case is just the root of the default branch.
def
get_id
def
get_id
project
.
repository
.
root_ref
project
.
repository
.
root_ref
end
end
...
...
app/finders/issuable_finder.rb
View file @
d222ce8b
...
@@ -53,15 +53,36 @@ class IssuableFinder
...
@@ -53,15 +53,36 @@ class IssuableFinder
end
end
end
end
def
project?
params
[
:project_id
].
present?
end
def
project
def
project
return
@project
if
defined?
(
@project
)
return
@project
if
defined?
(
@project
)
@project
=
if
project?
if
params
[
:project_id
].
present?
@project
=
Project
.
find
(
params
[
:project_id
])
Project
.
find
(
params
[
:project_id
])
else
unless
Ability
.
abilities
.
allowed?
(
current_user
,
:read_project
,
@project
)
nil
@project
=
nil
end
end
else
@project
=
nil
end
@project
end
def
projects
return
@projects
if
defined?
(
@projects
)
if
project?
project
elsif
current_user
&&
params
[
:authorized_only
].
presence
&&
!
current_user_related?
current_user
.
authorized_projects
else
ProjectsFinder
.
new
.
execute
(
current_user
)
end
end
end
def
search
def
search
...
@@ -72,7 +93,7 @@ class IssuableFinder
...
@@ -72,7 +93,7 @@ class IssuableFinder
params
[
:milestone_title
].
present?
params
[
:milestone_title
].
present?
end
end
def
no_milestones
?
def
filter_by_no_milestone
?
milestones?
&&
params
[
:milestone_title
]
==
Milestone
::
None
.
title
milestones?
&&
params
[
:milestone_title
]
==
Milestone
::
None
.
title
end
end
...
@@ -81,12 +102,22 @@ class IssuableFinder
...
@@ -81,12 +102,22 @@ class IssuableFinder
@milestones
=
@milestones
=
if
milestones?
if
milestones?
Milestone
.
where
(
title:
params
[
:milestone_title
])
scope
=
Milestone
.
where
(
project_id:
projects
)
scope
.
where
(
title:
params
[
:milestone_title
])
else
else
nil
nil
end
end
end
end
def
labels?
params
[
:label_name
].
present?
end
def
filter_by_no_label?
labels?
&&
params
[
:label_name
]
==
Label
::
None
.
title
end
def
assignee?
def
assignee?
params
[
:assignee_id
].
present?
params
[
:assignee_id
].
present?
end
end
...
@@ -120,19 +151,7 @@ class IssuableFinder
...
@@ -120,19 +151,7 @@ class IssuableFinder
private
private
def
init_collection
def
init_collection
table_name
=
klass
.
table_name
klass
.
all
if
project
if
Ability
.
abilities
.
allowed?
(
current_user
,
:read_project
,
project
)
project
.
send
(
table_name
)
else
[]
end
elsif
current_user
&&
params
[
:authorized_only
].
presence
&&
!
current_user_related?
klass
.
of_projects
(
current_user
.
authorized_projects
).
references
(
:project
)
else
klass
.
of_projects
(
ProjectsFinder
.
new
.
execute
(
current_user
)).
references
(
:project
)
end
end
end
def
by_scope
(
items
)
def
by_scope
(
items
)
...
@@ -170,7 +189,12 @@ class IssuableFinder
...
@@ -170,7 +189,12 @@ class IssuableFinder
end
end
def
by_project
(
items
)
def
by_project
(
items
)
items
=
items
.
of_projects
(
project
.
id
)
if
project
items
=
if
projects
items
.
of_projects
(
projects
).
references
(
:project
)
else
items
.
none
end
items
items
end
end
...
@@ -185,18 +209,6 @@ class IssuableFinder
...
@@ -185,18 +209,6 @@ class IssuableFinder
items
.
sort
(
params
[
:sort
])
items
.
sort
(
params
[
:sort
])
end
end
def
by_milestone
(
items
)
if
milestones?
if
no_milestones?
items
=
items
.
where
(
milestone_id:
[
-
1
,
nil
])
else
items
=
items
.
where
(
milestone_id:
milestones
.
try
(
:pluck
,
:id
))
end
end
items
end
def
by_assignee
(
items
)
def
by_assignee
(
items
)
if
assignee?
if
assignee?
items
=
items
.
where
(
assignee_id:
assignee
.
try
(
:id
))
items
=
items
.
where
(
assignee_id:
assignee
.
try
(
:id
))
...
@@ -213,20 +225,36 @@ class IssuableFinder
...
@@ -213,20 +225,36 @@ class IssuableFinder
items
items
end
end
def
by_label
(
items
)
def
by_milestone
(
items
)
if
params
[
:label_name
].
present?
if
milestones?
if
params
[
:label_name
]
==
Label
::
None
.
title
if
filter_by_no_milestone?
item_ids
=
LabelLink
.
where
(
target_type:
klass
.
name
).
pluck
(
:target_id
)
items
=
items
.
where
(
milestone_id:
[
-
1
,
nil
])
else
items
=
items
.
joins
(
:milestone
).
where
(
milestones:
{
title:
params
[
:milestone_title
]
})
if
projects
items
=
items
.
where
(
milestones:
{
project_id:
projects
})
end
end
end
items
end
items
=
items
.
where
(
'id NOT IN (?)'
,
item_ids
)
def
by_label
(
items
)
if
labels?
if
filter_by_no_label?
items
=
items
.
joins
(
"LEFT OUTER JOIN label_links ON label_links.target_type = '
#{
klass
.
name
}
' AND label_links.target_id =
#{
klass
.
table_name
}
.id"
).
where
(
label_links:
{
id:
nil
})
else
else
label_names
=
params
[
:label_name
].
split
(
","
)
label_names
=
params
[
:label_name
].
split
(
","
)
item_ids
=
LabelLink
.
joins
(
:label
).
items
=
items
.
joins
(
:labels
).
where
(
labels:
{
title:
label_names
})
where
(
'labels.title in (?)'
,
label_names
).
where
(
target_type:
klass
.
name
).
pluck
(
:target_id
)
items
=
items
.
where
(
id:
item_ids
)
if
projects
items
=
items
.
where
(
labels:
{
project_id:
projects
})
end
end
end
end
end
...
...
app/helpers/diff_helper.rb
View file @
d222ce8b
...
@@ -170,7 +170,8 @@ module DiffHelper
...
@@ -170,7 +170,8 @@ module DiffHelper
def
commit_for_diff
(
diff
)
def
commit_for_diff
(
diff
)
if
diff
.
deleted_file
if
diff
.
deleted_file
@merge_request
?
@merge_request
.
commits
.
last
:
@commit
.
parents
.
first
first_commit
=
@first_commit
||
@commit
first_commit
.
parent
else
else
@commit
@commit
end
end
...
...
app/mailers/abuse_report_mailer.rb
0 → 100644
View file @
d222ce8b
class
AbuseReportMailer
<
BaseMailer
include
Gitlab
::
CurrentSettings
def
notify
(
abuse_report_id
)
@abuse_report
=
AbuseReport
.
find
(
abuse_report_id
)
mail
(
to:
current_application_settings
.
admin_notification_email
,
subject:
"
#{
@abuse_report
.
user
.
name
}
(
#{
@abuse_report
.
user
.
username
}
) was reported for abuse"
)
end
end
app/models/application_setting.rb
View file @
d222ce8b
...
@@ -44,6 +44,10 @@ class ApplicationSetting < ActiveRecord::Base
...
@@ -44,6 +44,10 @@ class ApplicationSetting < ActiveRecord::Base
allow_blank:
true
,
allow_blank:
true
,
format:
{
with:
/\A
#{
URI
.
regexp
(
%w(http https)
)
}
\z/
,
message:
"should be a valid url"
}
format:
{
with:
/\A
#{
URI
.
regexp
(
%w(http https)
)
}
\z/
,
message:
"should be a valid url"
}
validates
:admin_notification_email
,
allow_blank:
true
,
email:
true
validates_each
:restricted_visibility_levels
do
|
record
,
attr
,
value
|
validates_each
:restricted_visibility_levels
do
|
record
,
attr
,
value
|
unless
value
.
nil?
unless
value
.
nil?
value
.
each
do
|
level
|
value
.
each
do
|
level
|
...
...
app/models/commit.rb
View file @
d222ce8b
...
@@ -164,6 +164,14 @@ class Commit
...
@@ -164,6 +164,14 @@ class Commit
@committer
||=
User
.
find_by_any_email
(
committer_email
)
@committer
||=
User
.
find_by_any_email
(
committer_email
)
end
end
def
parents
@parents
||=
parent_ids
.
map
{
|
id
|
project
.
commit
(
id
)
}
end
def
parent
@parent
||=
project
.
commit
(
self
.
parent_id
)
if
self
.
parent_id
end
def
notes
def
notes
project
.
notes
.
for_commit_id
(
self
.
id
)
project
.
notes
.
for_commit_id
(
self
.
id
)
end
end
...
@@ -181,10 +189,6 @@ class Commit
...
@@ -181,10 +189,6 @@ class Commit
@raw
.
short_id
(
7
)
@raw
.
short_id
(
7
)
end
end
def
parents
@parents
||=
Commit
.
decorate
(
super
,
project
)
end
def
ci_commit
def
ci_commit
project
.
ci_commit
(
sha
)
project
.
ci_commit
(
sha
)
end
end
...
...
app/models/merge_request.rb
View file @
d222ce8b
...
@@ -40,7 +40,7 @@ class MergeRequest < ActiveRecord::Base
...
@@ -40,7 +40,7 @@ class MergeRequest < ActiveRecord::Base
after_create
:create_merge_request_diff
after_create
:create_merge_request_diff
after_update
:update_merge_request_diff
after_update
:update_merge_request_diff
delegate
:commits
,
:diffs
,
:last_commit
,
:last_commit_short_sha
,
to: :merge_request_diff
,
prefix:
nil
delegate
:commits
,
:diffs
,
to: :merge_request_diff
,
prefix:
nil
# When this attribute is true some MR validation is ignored
# When this attribute is true some MR validation is ignored
# It allows us to close or modify broken merge requests
# It allows us to close or modify broken merge requests
...
@@ -157,6 +157,18 @@ class MergeRequest < ActiveRecord::Base
...
@@ -157,6 +157,18 @@ class MergeRequest < ActiveRecord::Base
reference
reference
end
end
def
last_commit
merge_request_diff
?
merge_request_diff
.
last_commit
:
compare_commits
.
last
end
def
first_commit
merge_request_diff
?
merge_request_diff
.
first_commit
:
compare_commits
.
first
end
def
last_commit_short_sha
last_commit
.
short_id
end
def
validate_branches
def
validate_branches
if
target_project
==
source_project
&&
target_branch
==
source_branch
if
target_project
==
source_project
&&
target_branch
==
source_branch
errors
.
add
:branch_conflict
,
"You can not use same project/branch for source and target"
errors
.
add
:branch_conflict
,
"You can not use same project/branch for source and target"
...
...
app/models/merge_request_diff.rb
View file @
d222ce8b
...
@@ -55,6 +55,10 @@ class MergeRequestDiff < ActiveRecord::Base
...
@@ -55,6 +55,10 @@ class MergeRequestDiff < ActiveRecord::Base
commits
.
first
commits
.
first
end
end
def
first_commit
commits
.
last
end
def
last_commit_short_sha
def
last_commit_short_sha
@last_commit_short_sha
||=
last_commit
.
short_id
@last_commit_short_sha
||=
last_commit
.
short_id
end
end
...
...
app/models/milestone.rb
View file @
d222ce8b
...
@@ -105,4 +105,36 @@ class Milestone < ActiveRecord::Base
...
@@ -105,4 +105,36 @@ class Milestone < ActiveRecord::Base
def
author_id
def
author_id
nil
nil
end
end
# Sorts the issues for the given IDs.
#
# This method runs a single SQL query using a CASE statement to update the
# position of all issues in the current milestone (scoped to the list of IDs).
#
# Given the ids [10, 20, 30] this method produces a SQL query something like
# the following:
#
# UPDATE issues
# SET position = CASE
# WHEN id = 10 THEN 1
# WHEN id = 20 THEN 2
# WHEN id = 30 THEN 3
# ELSE position
# END
# WHERE id IN (10, 20, 30);
#
# This method expects that the IDs given in `ids` are already Fixnums.
def
sort_issues
(
ids
)
pairs
=
[]
ids
.
each_with_index
do
|
id
,
index
|
pairs
<<
id
pairs
<<
index
+
1
end
conditions
=
'WHEN id = ? THEN ? '
*
ids
.
length
issues
.
where
(
id:
ids
).
update_all
([
"position = CASE
#{
conditions
}
ELSE position END"
,
*
pairs
])
end
end
end
app/models/repository.rb
View file @
d222ce8b
...
@@ -312,13 +312,7 @@ class Repository
...
@@ -312,13 +312,7 @@ class Repository
end
end
def
blob_for_diff
(
commit
,
diff
)
def
blob_for_diff
(
commit
,
diff
)
file
=
blob_at
(
commit
.
id
,
diff
.
new_path
)
blob_at
(
commit
.
id
,
diff
.
file_path
)
unless
file
file
=
prev_blob_for_diff
(
commit
,
diff
)
end
file
end
end
def
prev_blob_for_diff
(
commit
,
diff
)
def
prev_blob_for_diff
(
commit
,
diff
)
...
...
app/views/abuse_report_mailer/notify.html.haml
0 → 100644
View file @
d222ce8b
%p
#{
link_to
@abuse_report
.
user
.
name
,
user_url
(
@abuse_report
.
user
)
}
(@
#{
@abuse_report
.
user
.
username
}
) was reported for abuse by
#{
link_to
@abuse_report
.
reporter
.
name
,
user_url
(
@abuse_report
.
reporter
)
}
(@
#{
@abuse_report
.
reporter
.
username
}
).
%blockquote
=
@abuse_report
.
message
%p
=
link_to
"View details"
,
abuse_reports_url
app/views/abuse_report_mailer/notify.text.haml
0 → 100644
View file @
d222ce8b
#{
@abuse_report
.
user
.
name
}
(@
#{
@abuse_report
.
user
.
username
}
) was reported for abuse by
#{
@abuse_report
.
reporter
.
name
}
(@
#{
@abuse_report
.
reporter
.
username
}
).
\
>
#{
@abuse_report
.
message
}
\
View details:
#{
admin_abuse_reports_url
}
app/views/admin/application_settings/_form.html.haml
View file @
d222ce8b
...
@@ -47,6 +47,12 @@
...
@@ -47,6 +47,12 @@
=
f
.
label
:version_check_enabled
do
=
f
.
label
:version_check_enabled
do
=
f
.
check_box
:version_check_enabled
=
f
.
check_box
:version_check_enabled
Version check enabled
Version check enabled
.form-group
=
f
.
label
:admin_notification_email
,
class:
'control-label col-sm-2'
.col-sm-10
=
f
.
text_field
:admin_notification_email
,
class:
'form-control'
.help-block
Abuse reports will be sent to this address if it is set. Abuse reports are always available in the admin area.
%fieldset
%fieldset
%legend
Account and Limit Settings
%legend
Account and Limit Settings
...
...
app/views/users/_profile.html.haml
→
app/views/
admin/
users/_profile.html.haml
View file @
d222ce8b
File moved
app/views/admin/users/show.html.haml
View file @
d222ce8b
...
@@ -14,7 +14,7 @@
...
@@ -14,7 +14,7 @@
%strong
%strong
=
link_to
user_path
(
@user
)
do
=
link_to
user_path
(
@user
)
do
=
@user
.
username
=
@user
.
username
=
render
'users/profile'
,
user:
@user
=
render
'
admin/
users/profile'
,
user:
@user
.panel.panel-default
.panel.panel-default
.panel-heading
.panel-heading
...
...
app/views/layouts/notify.html.haml
View file @
d222ce8b
...
@@ -41,4 +41,8 @@
...
@@ -41,4 +41,8 @@
#{
link_to
"view it on GitLab"
,
@target_url
}
.
#{
link_to
"view it on GitLab"
,
@target_url
}
.
-
else
-
else
#{
link_to
"View it on GitLab"
,
@target_url
}
#{
link_to
"View it on GitLab"
,
@target_url
}
%br
You're receiving this email because of your account on
#{
link_to
Gitlab
.
config
.
gitlab
.
host
,
root_url
}
.
If you'd like to receive fewer emails, you can adjust your notification settings.
=
email_action
@target_url
=
email_action
@target_url
app/views/projects/buttons/_notifications.html.haml
View file @
d222ce8b
-
return
unless
@membership
-
case
@membership
-
when
ProjectMember
=
form_tag
profile_notifications_path
,
method: :put
,
remote:
true
,
class:
'inline'
,
id:
'notification-form'
do
=
hidden_field_tag
:notification_type
,
'project'
=
hidden_field_tag
:notification_id
,
@membership
.
id
=
hidden_field_tag
:notification_level
%span
.dropdown
%a
.dropdown-new.btn.btn-new
#notifications-button
{
href:
'#'
,
"data-toggle"
=>
"dropdown"
}
=
icon
(
'bell'
)
=
notification_label
(
@membership
)
=
icon
(
'angle-down'
)
%ul
.dropdown-menu.dropdown-menu-right.project-home-dropdown
-
Notification
.
project_notification_levels
.
each
do
|
level
|
=
notification_list_item
(
level
,
@membership
)
=
form_tag
profile_notifications_path
,
method: :put
,
remote:
true
,
class:
'inline'
,
id:
'notification-form'
do
-
when
GroupMember
=
hidden_field_tag
:notification_type
,
'project'
.btn.btn-new.disabled.has_tooltip
{
title:
"To change the notification level, you need to be a member of the project itself, not only its group."
}
=
hidden_field_tag
:notification_id
,
@membership
.
id
=
icon
(
'bell'
)
=
hidden_field_tag
:notification_level
=
notification_label
(
@membership
)
%span
.dropdown
=
icon
(
'angle-down'
)
%a
.dropdown-new.btn.btn-new
#notifications-button
{
href:
'#'
,
"data-toggle"
=>
"dropdown"
}
=
icon
(
'bell'
)
=
notification_label
(
@membership
)
=
icon
(
'angle-down'
)
%ul
.dropdown-menu.dropdown-menu-right.project-home-dropdown
-
Notification
.
project_notification_levels
.
each
do
|
level
|
=
notification_list_item
(
level
,
@membership
)
app/views/projects/diffs/_diffs.html.haml
View file @
d222ce8b
...
@@ -15,8 +15,8 @@
...
@@ -15,8 +15,8 @@
.files
.files
-
diff_files
.
each_with_index
do
|
diff_file
,
index
|
-
diff_files
.
each_with_index
do
|
diff_file
,
index
|
-
diff_commit
=
commit_for_diff
(
diff_file
.
diff
)
-
diff_commit
=
commit_for_diff
(
diff_file
)
-
blob
=
project
.
repository
.
blob_for_diff
(
diff_commit
,
diff_file
.
diff
)
-
blob
=
project
.
repository
.
blob_for_diff
(
diff_commit
,
diff_file
)
-
next
unless
blob
-
next
unless
blob
=
render
'projects/diffs/file'
,
i:
index
,
project:
project
,
=
render
'projects/diffs/file'
,
i:
index
,
project:
project
,
...
...
app/views/projects/diffs/_file.html.haml
View file @
d222ce8b
.diff-file
{
id:
"diff-#{i}"
,
data:
diff_file_html_data
(
project
,
diff_commit
,
diff_file
)}
.diff-file
{
id:
"diff-#{i}"
,
data:
diff_file_html_data
(
project
,
diff_commit
,
diff_file
)}
.diff-header
{
id:
"file-path-#{hexdigest(diff_file.
new_path || diff_file.old
_path)}"
}
.diff-header
{
id:
"file-path-#{hexdigest(diff_file.
file
_path)}"
}
-
if
diff_file
.
diff
.
submodule?
-
if
diff_file
.
diff
.
submodule?
%span
%span
-
submodule_item
=
project
.
repository
.
blob_at
(
@commit
.
id
,
diff_file
.
file_path
)
-
submodule_item
=
project
.
repository
.
blob_at
(
@commit
.
id
,
diff_file
.
file_path
)
...
@@ -38,7 +38,7 @@
...
@@ -38,7 +38,7 @@
-
else
-
else
=
render
"projects/diffs/text_file"
,
diff_file:
diff_file
,
index:
i
=
render
"projects/diffs/text_file"
,
diff_file:
diff_file
,
index:
i
-
elsif
blob
.
image?
-
elsif
blob
.
image?
-
old_file
=
project
.
repository
.
prev_blob_for_diff
(
@
commit
,
diff_file
)
-
old_file
=
project
.
repository
.
prev_blob_for_diff
(
diff_
commit
,
diff_file
)
=
render
"projects/diffs/image"
,
diff_file:
diff_file
,
old_file:
old_file
,
file:
blob
,
index:
i
=
render
"projects/diffs/image"
,
diff_file:
diff_file
,
old_file:
old_file
,
file:
blob
,
index:
i
-
else
-
else
.nothing-here-block
No preview for this file type
.nothing-here-block
No preview for this file type
...
...
app/views/projects/merge_requests/widget/_heading.html.haml
View file @
d222ce8b
-
if
@merge_request
.
has_ci?
-
ci_commit
=
@merge_request
.
source_project
.
ci_commit
(
@merge_request
.
source_sha
)
-
ci_commit
=
@merge_request
.
source_project
.
ci_commit
(
@merge_request
.
source_sha
)
-
if
ci_commit
-
if
ci_commit
-
status
=
ci_commit
.
status
-
status
=
ci_commit
.
status
.mr-widget-heading
.mr-widget-heading
.ci_widget
{
class:
"ci-#{status}"
}
.ci_widget
{
class:
"ci-#{status}"
}
=
ci_status_icon
(
ci_commit
)
=
ci_status_icon
(
ci_commit
)
%span
CI build
#{
status
}
for
#{
@merge_request
.
last_commit_short_sha
}
.
%span
.ci-coverage
=
link_to
"View build details"
,
ci_status_path
(
ci_commit
)
-
elsif
@merge_request
.
has_ci?
-
# Compatibility with old CI integrations (ex jenkins) when you request status from CI server via AJAX
-
# Remove in later versions when services like Jenkins will set CI status via Commit status API
.mr-widget-heading
-
[
:success
,
:skipped
,
:canceled
,
:failed
,
:running
,
:pending
].
each
do
|
status
|
.ci_widget
{
class:
"ci-#{status}"
,
style:
"display:none"
}
-
if
status
==
:success
-
status
=
"passed"
=
icon
(
"check-circle"
)
-
else
=
icon
(
"circle"
)
%span
CI build
#{
status
}
%span
CI build
#{
status
}
for
#{
@merge_request
.
last_commit_short_sha
}
.
for
#{
@merge_request
.
last_commit_short_sha
}
.
%span
.ci-coverage
%span
.ci-coverage
=
link_to
"View build details"
,
ci_status_path
(
ci_commit
)
-
if
ci_build_details_path
(
@merge_request
)
=
link_to
"View build details"
,
ci_build_details_path
(
@merge_request
),
:"data-no-turbolink"
=>
"data-no-turbolink"
-
else
-
# Compatibility with old CI integrations (ex jenkins) when you request status from CI server via AJAX
-
# Remove in later versions when services like Jenkins will set CI status via Commit status API
.mr-widget-heading
-
[
:success
,
:skipped
,
:canceled
,
:failed
,
:running
,
:pending
].
each
do
|
status
|
.ci_widget
{
class:
"ci-#{status}"
,
style:
"display:none"
}
-
if
status
==
:success
-
status
=
"passed"
=
icon
(
"check-circle"
)
-
else
=
icon
(
"circle"
)
%span
CI build
#{
status
}
for
#{
@merge_request
.
last_commit_short_sha
}
.
%span
.ci-coverage
-
if
ci_build_details_path
(
@merge_request
)
=
link_to
"View build details"
,
ci_build_details_path
(
@merge_request
),
:"data-no-turbolink"
=>
"data-no-turbolink"
.ci_widget
.ci_widget
=
icon
(
"spinner spin"
)
=
icon
(
"spinner spin"
)
Checking CI status for
#{
@merge_request
.
last_commit_short_sha
}
…
Checking CI status for
#{
@merge_request
.
last_commit_short_sha
}
…
.ci_widget.ci-not_found
{
style:
"display:none"
}
.ci_widget.ci-not_found
{
style:
"display:none"
}
=
icon
(
"times-circle"
)
=
icon
(
"times-circle"
)
Could not find CI status for
#{
@merge_request
.
last_commit_short_sha
}
.
Could not find CI status for
#{
@merge_request
.
last_commit_short_sha
}
.
.ci_widget.ci-error
{
style:
"display:none"
}
.ci_widget.ci-error
{
style:
"display:none"
}
=
icon
(
"times-circle"
)
=
icon
(
"times-circle"
)
Could not connect to the CI server. Please check your settings and try again.
Could not connect to the CI server. Please check your settings and try again.
:coffeescript
:coffeescript
$ ->
$ ->
merge_request_widget.getCiStatus()
merge_request_widget.getCiStatus()
app/views/shared/_clone_panel.html.haml
View file @
d222ce8b
...
@@ -6,7 +6,7 @@
...
@@ -6,7 +6,7 @@
type:
'button'
,
|
type:
'button'
,
|
class:
"btn #{ 'active' if default_clone_protocol == 'ssh' }#{ ' has_tooltip' if current_user && current_user.require_ssh_key? }"
,
|
class:
"btn #{ 'active' if default_clone_protocol == 'ssh' }#{ ' has_tooltip' if current_user && current_user.require_ssh_key? }"
,
|
:"data-clone"
=>
project
.
ssh_url_to_repo
,
|
:"data-clone"
=>
project
.
ssh_url_to_repo
,
|
:"data-title"
=>
"Add an SSH key to your profile<br> to pull or push via SSH"
,
:"data-title"
=>
"Add an SSH key to your profile<br> to pull or push via SSH
.
"
,
:"data-html"
=>
"true"
,
:"data-html"
=>
"true"
,
:"data-container"
=>
"body"
}
:"data-container"
=>
"body"
}
SSH
SSH
...
@@ -15,7 +15,7 @@
...
@@ -15,7 +15,7 @@
type:
'button'
,
|
type:
'button'
,
|
class:
"btn #{ 'active' if default_clone_protocol == 'http' }#{ ' has_tooltip' if current_user && current_user.require_password? }"
,
|
class:
"btn #{ 'active' if default_clone_protocol == 'http' }#{ ' has_tooltip' if current_user && current_user.require_password? }"
,
|
:"data-clone"
=>
project
.
http_url_to_repo
,
|
:"data-clone"
=>
project
.
http_url_to_repo
,
|
:"data-title"
=>
"Set a password on your account<br> to pull or push via #{gitlab_config.protocol.upcase}"
,
:"data-title"
=>
"Set a password on your account<br> to pull or push via #{gitlab_config.protocol.upcase}
.
"
,
:"data-html"
=>
"true"
,
:"data-html"
=>
"true"
,
:"data-container"
=>
"body"
}
:"data-container"
=>
"body"
}
=
gitlab_config
.
protocol
.
upcase
=
gitlab_config
.
protocol
.
upcase
...
...
app/views/users/calendar.html.haml
View file @
d222ce8b
%h4
Contributions calendar
.pull-right
%small
Issues, merge requests and push events
#cal-heatmap
.calendar
#cal-heatmap
.calendar
:javascript
:javascript
new
Calendar
(
new
Calendar
(
...
@@ -10,3 +6,5 @@
...
@@ -10,3 +6,5 @@
#{
@starting_month
}
,
#{
@starting_month
}
,
'
#{
user_calendar_activities_path
}
'
'
#{
user_calendar_activities_path
}
'
);
);
.calendar-hint
Summary of issues, merge requests and push events
app/views/users/show.html.haml
View file @
d222ce8b
...
@@ -6,47 +6,72 @@
...
@@ -6,47 +6,72 @@
=
render
'shared/show_aside'
=
render
'shared/show_aside'
.row
.cover-block
%section
.col-md-7
.avatar-holder
.header-with-avatar
=
link_to
avatar_icon
(
@user
,
400
),
target:
'_blank'
do
=
link_to
avatar_icon
(
@user
,
400
),
target:
'_blank'
do
=
image_tag
avatar_icon
(
@user
,
90
),
class:
"avatar s90"
,
alt:
''
=
image_tag
avatar_icon
(
@user
,
90
),
class:
"avatar avatar-tile s90"
,
alt:
''
.cover-title
%h3
=
@user
.
name
=
@user
.
name
-
if
@user
==
current_user
.cover-desc
.pull-right.hidden-xs
%span
=
link_to
profile_path
,
class:
'btn btn-sm'
do
@
#{
@user
.
username
}
.
=
icon
(
'user'
)
-
if
@user
.
bio
.
present?
Profile settings
%span
-
elsif
current_user
#{
@user
.
bio
}
.
.report_abuse.pull-right
%span
-
if
@user
.
abuse_report
Member since
#{
@user
.
created_at
.
stamp
(
"Aug 21, 2011"
)
}
%span
#report_abuse_btn
.light.btn.btn-sm.btn-close
{
title:
'Already reported for abuse'
,
data:
{
toggle:
'tooltip'
,
placement:
'right'
,
container:
'body'
}}
=
icon
(
'exclamation-circle'
)
.cover-desc
-
else
-
unless
@user
.
public_email
.
blank?
%a
.light.btn.btn-sm
{
href:
new_abuse_report_path
(
user_id:
@user
.
id
),
title:
'Report abuse'
,
data:
{
toggle:
'tooltip'
,
placement:
'right'
,
container:
'body'
}}
=
link_to
@user
.
public_email
,
"mailto:
#{
@user
.
public_email
}
"
=
icon
(
'exclamation-circle'
)
-
unless
@user
.
skype
.
blank?
·
=
link_to
"Skype"
,
"skype:
#{
@user
.
skype
}
"
-
unless
@user
.
linkedin
.
blank?
·
=
link_to
"LinkedIn"
,
"http://www.linkedin.com/in/
#{
@user
.
linkedin
}
"
-
unless
@user
.
twitter
.
blank?
·
=
link_to
"Twitter"
,
"http://www.twitter.com/
#{
@user
.
twitter
}
"
-
unless
@user
.
website_url
.
blank?
·
=
link_to
@user
.
short_website_url
,
@user
.
full_website_url
-
unless
@user
.
location
.
blank?
·
=
@user
.
location
.username
@
#{
@user
.
username
}
.description
-
if
@user
.
bio
.
present?
=
@user
.
bio
.clearfix
.cover-controls
-
if
@user
==
current_user
=
link_to
profile_path
,
class:
'btn btn-gray'
do
=
icon
(
'pencil'
)
-
elsif
current_user
.report-abuse
-
if
@user
.
abuse_report
%button
.btn.btn-danger
{
title:
'Already reported for abuse'
,
data:
{
toggle:
'tooltip'
,
placement:
'left'
,
container:
'body'
}}
=
icon
(
'exclamation-circle'
)
-
else
=
link_to
new_abuse_report_path
(
user_id:
@user
.
id
),
class:
'btn btn-gray'
,
title:
'Report abuse'
,
data:
{
toggle:
'tooltip'
,
placement:
'left'
,
container:
'body'
}
do
=
icon
(
'exclamation-circle'
)
.gray-content-block.second-block
.user-calendar
%h4
.center.light
%i
.fa.fa-spinner.fa-spin
.user-calendar-activities
.row.prepend-top-20
%section
.col-md-7
-
if
@groups
.
any?
-
if
@groups
.
any?
.prepend-top-20
.prepend-top-20
%h4
Groups
%h4
Groups
=
render
'groups'
,
groups:
@groups
=
render
'groups'
,
groups:
@groups
%hr
%hr
.hidden-xs
.user-calendar
%h4
.center.light
%i
.fa.fa-spinner.fa-spin
.user-calendar-activities
%hr
%h4
%h4
User Activity
User Activity
...
@@ -59,7 +84,6 @@
...
@@ -59,7 +84,6 @@
.content_list
.content_list
=
spinner
=
spinner
%aside
.col-md-5
%aside
.col-md-5
=
render
'profile'
,
user:
@user
=
render
'projects'
,
projects:
@projects
,
contributed_projects:
@contributed_projects
=
render
'projects'
,
projects:
@projects
,
contributed_projects:
@contributed_projects
:coffeescript
:coffeescript
...
...
db/fixtures/development/05_users.rb
View file @
d222ce8b
Gitlab
::
Seeder
.
quiet
do
Gitlab
::
Seeder
.
quiet
do
(
2
..
20
).
each
do
|
i
|
20
.
times
do
|
i
|
begin
begin
User
.
create!
(
User
.
create!
(
username:
FFaker
::
Internet
.
user_name
,
username:
FFaker
::
Internet
.
user_name
,
...
@@ -15,7 +15,7 @@ Gitlab::Seeder.quiet do
...
@@ -15,7 +15,7 @@ Gitlab::Seeder.quiet do
end
end
end
end
(
1
..
5
).
each
do
|
i
|
5
.
times
do
|
i
|
begin
begin
User
.
create!
(
User
.
create!
(
username:
"user
#{
i
}
"
,
username:
"user
#{
i
}
"
,
...
...
db/fixtures/development/07_milestones.rb
View file @
d222ce8b
Gitlab
::
Seeder
.
quiet
do
Gitlab
::
Seeder
.
quiet
do
Project
.
all
.
each
do
|
project
|
Project
.
all
.
each
do
|
project
|
(
1
..
5
).
each
do
|
i
|
5
.
times
do
|
i
|
milestone_params
=
{
milestone_params
=
{
title:
"v
#{
i
}
.0"
,
title:
"v
#{
i
}
.0"
,
description:
FFaker
::
Lorem
.
sentence
,
description:
FFaker
::
Lorem
.
sentence
,
...
...
db/fixtures/development/09_issues.rb
View file @
d222ce8b
Gitlab
::
Seeder
.
quiet
do
Gitlab
::
Seeder
.
quiet
do
Project
.
all
.
each
do
|
project
|
Project
.
all
.
each
do
|
project
|
(
1
..
10
).
each
do
|
i
|
10
.
times
do
issue_params
=
{
issue_params
=
{
title:
FFaker
::
Lorem
.
sentence
(
6
),
title:
FFaker
::
Lorem
.
sentence
(
6
),
description:
FFaker
::
Lorem
.
sentence
,
description:
FFaker
::
Lorem
.
sentence
,
...
...
db/fixtures/development/12_snippets.rb
View file @
d222ce8b
...
@@ -22,7 +22,7 @@ class Member < ActiveRecord::Base
...
@@ -22,7 +22,7 @@ class Member < ActiveRecord::Base
end
end
eos
eos
(
1
..
50
).
each
do
|
i
|
50
.
times
do
|
i
|
user
=
User
.
all
.
sample
user
=
User
.
all
.
sample
PersonalSnippet
.
seed
(
:id
,
[{
PersonalSnippet
.
seed
(
:id
,
[{
...
...
db/migrate/20151008143519_add_admin_notification_email_setting.rb
0 → 100644
View file @
d222ce8b
class
AddAdminNotificationEmailSetting
<
ActiveRecord
::
Migration
def
change
add_column
:application_settings
,
:admin_notification_email
,
:string
end
end
db/schema.rb
View file @
d222ce8b
...
@@ -46,6 +46,7 @@ ActiveRecord::Schema.define(version: 20151016195706) do
...
@@ -46,6 +46,7 @@ ActiveRecord::Schema.define(version: 20151016195706) do
t
.
integer
"session_expire_delay"
,
default:
10080
,
null:
false
t
.
integer
"session_expire_delay"
,
default:
10080
,
null:
false
t
.
text
"import_sources"
t
.
text
"import_sources"
t
.
text
"help_page_text"
t
.
text
"help_page_text"
t
.
string
"admin_notification_email"
end
end
create_table
"audit_events"
,
force:
true
do
|
t
|
create_table
"audit_events"
,
force:
true
do
|
t
|
...
...
doc/update/8.0-to-8.1.md
View file @
d222ce8b
...
@@ -70,7 +70,16 @@ sudo -u git -H git fetch
...
@@ -70,7 +70,16 @@ sudo -u git -H git fetch
sudo
-u
git
-H
git checkout v2.6.5
sudo
-u
git
-H
git checkout v2.6.5
```
```
### 5. Install libs, migrations, etc.
### 5. Update gitlab-git-http-server
```
bash
cd
/home/git/gitlab-git-http-server
sudo
-u
git
-H
git fetch origin
sudo
-u
git
-H
git checkout 0.3.0
sudo
-u
git
-H
make
```
### 6. Install libs, migrations, etc.
```
bash
```
bash
cd
/home/git/gitlab
cd
/home/git/gitlab
...
@@ -91,7 +100,7 @@ sudo -u git -H bundle exec rake assets:clean assets:precompile cache:clear RAILS
...
@@ -91,7 +100,7 @@ sudo -u git -H bundle exec rake assets:clean assets:precompile cache:clear RAILS
sudo cp
lib/support/init.d/gitlab /etc/init.d/gitlab
sudo cp
lib/support/init.d/gitlab /etc/init.d/gitlab
```
```
###
6
. Update configuration files
###
7
. Update configuration files
#### New configuration options for `gitlab.yml`
#### New configuration options for `gitlab.yml`
...
@@ -101,12 +110,33 @@ There are new configuration options available for [`gitlab.yml`](config/gitlab.y
...
@@ -101,12 +110,33 @@ There are new configuration options available for [`gitlab.yml`](config/gitlab.y
git diff origin/8-0-stable:config/gitlab.yml.example origin/8-1-stable:config/gitlab.yml.example
git diff origin/8-0-stable:config/gitlab.yml.example origin/8-1-stable:config/gitlab.yml.example
```
```
### 7. Start application
#### Nginx configuration
View changes between the previous recommended Nginx configuration and the
current one:
```
sh
# For HTTPS configurations
git diff origin/8-0-stable:lib/support/nginx/gitlab-ssl origin/8-1-stable:lib/support/nginx/gitlab-ssl
# For HTTP configurations
git diff origin/8-0-stable:lib/support/nginx/gitlab origin/8-1-stable:lib/support/nginx/gitlab
```
If you are using Apache instead of NGINX please see the updated [Apache templates].
Also note that because Apache does not support upstreams behind Unix sockets you
will need to let gitlab-git-http-server listen on a TCP port. You can do this
via [/etc/default/gitlab].
[
Apache templates
]:
https://gitlab.com/gitlab-org/gitlab-recipes/tree/master/web-server/apache
[
/etc/default/gitlab
]:
https://gitlab.com/gitlab-org/gitlab-ce/blob/8-1-stable/lib/support/init.d/gitlab.default.example#L34
### 8. Start application
sudo service gitlab start
sudo service gitlab start
sudo service nginx restart
sudo service nginx restart
###
8
. Check application status
###
9
. Check application status
Check if GitLab and its environment are configured correctly:
Check if GitLab and its environment are configured correctly:
...
...
doc/update/patch_versions.md
View file @
d222ce8b
...
@@ -49,9 +49,7 @@ sudo -u git -H bundle install --without development test mysql --deployment
...
@@ -49,9 +49,7 @@ sudo -u git -H bundle install --without development test mysql --deployment
sudo
-u
git
-H
bundle
install
--without
development
test
postgres
--deployment
sudo
-u
git
-H
bundle
install
--without
development
test
postgres
--deployment
sudo
-u
git
-H
bundle
exec
rake db:migrate
RAILS_ENV
=
production
sudo
-u
git
-H
bundle
exec
rake db:migrate
RAILS_ENV
=
production
sudo
-u
git
-H
bundle
exec
rake assets:clean
RAILS_ENV
=
production
sudo
-u
git
-H
bundle
exec
rake assets:clean assets:precompile cache:clear
RAILS_ENV
=
production
sudo
-u
git
-H
bundle
exec
rake assets:precompile
RAILS_ENV
=
production
sudo
-u
git
-H
bundle
exec
rake cache:clear
RAILS_ENV
=
production
```
```
### 5. Start application
### 5. Start application
...
...
features/steps/abuse_reports.rb
View file @
d222ce8b
...
@@ -23,7 +23,7 @@ class Spinach::Features::AbuseReports < Spinach::FeatureSteps
...
@@ -23,7 +23,7 @@ class Spinach::Features::AbuseReports < Spinach::FeatureSteps
end
end
step
'I should see a red "Report abuse" button'
do
step
'I should see a red "Report abuse" button'
do
expect
(
find
(
:css
,
'.report_abuse'
)).
to
have_selector
(
:css
,
'span.btn-close'
)
expect
(
page
).
to
have_button
(
"Already reported for abuse"
)
end
end
def
user_mike
def
user_mike
...
...
lib/gitlab/markdown/reference_filter.rb
View file @
d222ce8b
...
@@ -15,7 +15,7 @@ module Gitlab
...
@@ -15,7 +15,7 @@ module Gitlab
LazyReference
=
Struct
.
new
(
:klass
,
:ids
)
do
LazyReference
=
Struct
.
new
(
:klass
,
:ids
)
do
def
self
.
load
(
refs
)
def
self
.
load
(
refs
)
lazy_references
,
values
=
refs
.
partition
{
|
ref
|
ref
.
is_a?
(
self
)
}
lazy_references
,
values
=
refs
.
partition
{
|
ref
|
ref
.
is_a?
(
self
)
}
lazy_values
=
lazy_references
.
group_by
(
&
:klass
).
flat_map
do
|
klass
,
refs
|
lazy_values
=
lazy_references
.
group_by
(
&
:klass
).
flat_map
do
|
klass
,
refs
|
ids
=
refs
.
flat_map
(
&
:ids
)
ids
=
refs
.
flat_map
(
&
:ids
)
klass
.
where
(
id:
ids
)
klass
.
where
(
id:
ids
)
...
@@ -107,10 +107,10 @@ module Gitlab
...
@@ -107,10 +107,10 @@ module Gitlab
return
doc
if
project
.
nil?
return
doc
if
project
.
nil?
search_text_nodes
(
doc
).
each
do
|
node
|
search_text_nodes
(
doc
).
each
do
|
node
|
content
=
node
.
to_html
next
unless
content
.
match
(
pattern
)
next
if
ignored_ancestry?
(
node
)
next
if
ignored_ancestry?
(
node
)
next
unless
node
.
text
=~
pattern
content
=
node
.
to_html
html
=
yield
content
html
=
yield
content
...
...
lib/tasks/gitlab/check.rake
View file @
d222ce8b
...
@@ -335,7 +335,7 @@ namespace :gitlab do
...
@@ -335,7 +335,7 @@ namespace :gitlab do
print
"Redis version >=
#{
min_redis_version
}
? ... "
print
"Redis version >=
#{
min_redis_version
}
? ... "
redis_version
=
run
(
%W(redis-cli --version)
)
redis_version
=
run
(
%W(redis-cli --version)
)
redis_version
=
redis_version
.
try
(
:match
,
/redis-cli (
.*
)/
)
redis_version
=
redis_version
.
try
(
:match
,
/redis-cli (
\d+\.\d+\.\d+
)/
)
if
redis_version
&&
if
redis_version
&&
(
Gem
::
Version
.
new
(
redis_version
[
1
])
>
Gem
::
Version
.
new
(
min_redis_version
))
(
Gem
::
Version
.
new
(
redis_version
[
1
])
>
Gem
::
Version
.
new
(
min_redis_version
))
puts
"yes"
.
green
puts
"yes"
.
green
...
...
spec/benchmarks/lib/gitlab/markdown/reference_filter_spec.rb
0 → 100644
View file @
d222ce8b
require
'spec_helper'
describe
Gitlab
::
Markdown
::
ReferenceFilter
,
benchmark:
true
do
let
(
:input
)
do
html
=
<<-
EOF
<p>Hello @alice and @bob, how are you doing today?</p>
<p>This is simple @dummy text to see how the @ReferenceFilter class performs
when @processing HTML.</p>
EOF
Nokogiri
::
HTML
.
fragment
(
html
)
end
let
(
:project
)
{
create
(
:empty_project
)
}
let
(
:filter
)
{
described_class
.
new
(
input
,
project:
project
)
}
describe
'#replace_text_nodes_matching'
do
let
(
:iterations
)
{
6000
}
describe
'with identical input and output HTML'
do
benchmark_subject
do
filter
.
replace_text_nodes_matching
(
User
.
reference_pattern
)
do
|
content
|
content
end
end
it
{
is_expected
.
to
iterate_per_second
(
iterations
)
}
end
describe
'with different input and output HTML'
do
benchmark_subject
do
filter
.
replace_text_nodes_matching
(
User
.
reference_pattern
)
do
|
content
|
'@eve'
end
end
it
{
is_expected
.
to
iterate_per_second
(
iterations
)
}
end
end
end
spec/benchmarks/models/milestone_spec.rb
0 → 100644
View file @
d222ce8b
require
'spec_helper'
describe
Milestone
,
benchmark:
true
do
describe
'#sort_issues'
do
let
(
:milestone
)
{
create
(
:milestone
)
}
let
(
:issue1
)
{
create
(
:issue
,
milestone:
milestone
)
}
let
(
:issue2
)
{
create
(
:issue
,
milestone:
milestone
)
}
let
(
:issue3
)
{
create
(
:issue
,
milestone:
milestone
)
}
let
(
:issue_ids
)
{
[
issue3
.
id
,
issue2
.
id
,
issue1
.
id
]
}
benchmark_subject
{
milestone
.
sort_issues
(
issue_ids
)
}
it
{
is_expected
.
to
iterate_per_second
(
500
)
}
end
end
spec/controllers/abuse_reports_controller_spec.rb
0 → 100644
View file @
d222ce8b
require
'spec_helper'
describe
AbuseReportsController
do
let
(
:reporter
)
{
create
(
:user
)
}
let
(
:user
)
{
create
(
:user
)
}
let
(
:message
)
{
"This user is a spammer"
}
before
do
sign_in
(
reporter
)
end
describe
"POST create"
do
context
"with admin notification email set"
do
let
(
:admin_email
)
{
"admin@example.com"
}
before
(
:each
)
do
stub_application_setting
(
admin_notification_email:
admin_email
)
end
it
"sends a notification email"
do
post
:create
,
abuse_report:
{
user_id:
user
.
id
,
message:
message
}
email
=
ActionMailer
::
Base
.
deliveries
.
last
expect
(
email
.
to
).
to
eq
([
admin_email
])
expect
(
email
.
subject
).
to
include
(
user
.
username
)
expect
(
email
.
text_part
.
body
).
to
include
(
message
)
end
it
"saves the abuse report"
do
expect
do
post
:create
,
abuse_report:
{
user_id:
user
.
id
,
message:
message
}
end
.
to
change
{
AbuseReport
.
count
}.
by
(
1
)
end
end
context
"without admin notification email set"
do
before
(
:each
)
do
stub_application_setting
(
admin_notification_email:
nil
)
end
it
"does not send a notification email"
do
expect
do
post
:create
,
abuse_report:
{
user_id:
user
.
id
,
message:
message
}
end
.
not_to
change
{
ActionMailer
::
Base
.
deliveries
.
count
}
end
it
"saves the abuse report"
do
expect
do
post
:create
,
abuse_report:
{
user_id:
user
.
id
,
message:
message
}
end
.
to
change
{
AbuseReport
.
count
}.
by
(
1
)
end
end
end
end
spec/controllers/admin/users_controller_spec.rb
View file @
d222ce8b
...
@@ -37,6 +37,32 @@ describe Admin::UsersController do
...
@@ -37,6 +37,32 @@ describe Admin::UsersController do
end
end
end
end
describe
'PUT block/:id'
do
let
(
:user
)
{
create
(
:user
)
}
it
'blocks user'
do
put
:block
,
id:
user
.
username
user
.
reload
expect
(
user
.
blocked?
).
to
be_truthy
expect
(
flash
[
:notice
]).
to
eq
'Successfully blocked'
end
end
describe
'PUT unblock/:id'
do
let
(
:user
)
{
create
(
:user
)
}
before
do
user
.
block
end
it
'unblocks user'
do
put
:unblock
,
id:
user
.
username
user
.
reload
expect
(
user
.
blocked?
).
to
be_falsey
expect
(
flash
[
:notice
]).
to
eq
'Successfully unblocked'
end
end
describe
'PUT unlock/:id'
do
describe
'PUT unlock/:id'
do
let
(
:user
)
{
create
(
:user
)
}
let
(
:user
)
{
create
(
:user
)
}
...
...
spec/controllers/import/github_controller_spec.rb
View file @
d222ce8b
...
@@ -41,7 +41,7 @@ describe Import::GithubController do
...
@@ -41,7 +41,7 @@ describe Import::GithubController do
it
"assigns variables"
do
it
"assigns variables"
do
@project
=
create
(
:project
,
import_type:
'github'
,
creator_id:
user
.
id
)
@project
=
create
(
:project
,
import_type:
'github'
,
creator_id:
user
.
id
)
stub_client
(
repos:
[
@repo
],
orgs:
[
@org
],
org_repos:
[
@org_repo
])
stub_client
(
repos:
[
@repo
,
@org_repo
],
orgs:
[
@org
],
org_repos:
[
@org_repo
])
get
:status
get
:status
...
...
spec/controllers/invites_controller_spec.rb
0 → 100644
View file @
d222ce8b
require
'spec_helper'
describe
InvitesController
do
let
(
:token
)
{
'123456'
}
let
(
:user
)
{
create
(
:user
)
}
let
(
:member
)
{
create
(
:project_member
,
invite_token:
token
,
invite_email:
'test@abc.com'
,
user:
user
)
}
before
do
controller
.
instance_variable_set
(
:@member
,
member
)
sign_in
(
user
)
end
describe
'GET #accept'
do
it
'accepts user'
do
get
:accept
,
id:
token
member
.
reload
expect
(
response
.
status
).
to
eq
(
302
)
expect
(
member
.
user
).
to
eq
(
user
)
expect
(
flash
[
:notice
]).
to
include
'You have been granted'
end
end
describe
'GET #decline'
do
it
'declines user'
do
get
:decline
,
id:
token
expect
{
member
.
reload
}.
to
raise_error
ActiveRecord
::
RecordNotFound
expect
(
response
.
status
).
to
eq
(
302
)
expect
(
flash
[
:notice
]).
to
include
'You have declined the invitation to join'
end
end
end
spec/controllers/projects/services_controller_spec.rb
View file @
d222ce8b
...
@@ -10,26 +10,43 @@ describe Projects::ServicesController do
...
@@ -10,26 +10,43 @@ describe Projects::ServicesController do
project
.
team
<<
[
user
,
:master
]
project
.
team
<<
[
user
,
:master
]
controller
.
instance_variable_set
(
:@project
,
project
)
controller
.
instance_variable_set
(
:@project
,
project
)
controller
.
instance_variable_set
(
:@service
,
service
)
controller
.
instance_variable_set
(
:@service
,
service
)
request
.
env
[
"HTTP_REFERER"
]
=
"/"
end
end
describe
"#test"
do
shared_examples_for
'services controller'
do
|
referrer
|
context
'success'
do
before
do
it
"should redirect and show success message"
do
request
.
env
[
"HTTP_REFERER"
]
=
referrer
expect
(
service
).
to
receive
(
:test
).
and_return
({
success:
true
,
result:
'done'
})
get
:test
,
namespace_id:
project
.
namespace
.
id
,
project_id:
project
.
id
,
id:
service
.
id
,
format: :html
expect
(
response
.
status
).
to
redirect_to
(
'/'
)
expect
(
flash
[
:notice
]).
to
eq
(
'We sent a request to the provided URL'
)
end
end
end
context
'failure'
do
describe
"#test"
do
it
"should redirect and show failure message"
do
context
'success'
do
expect
(
service
).
to
receive
(
:test
).
and_return
({
success:
false
,
result:
'Bad test'
})
it
"should redirect and show success message"
do
get
:test
,
namespace_id:
project
.
namespace
.
id
,
project_id:
project
.
id
,
id:
service
.
id
,
format: :html
expect
(
service
).
to
receive
(
:test
).
and_return
({
success:
true
,
result:
'done'
})
expect
(
response
.
status
).
to
redirect_to
(
'/'
)
get
:test
,
namespace_id:
project
.
namespace
.
id
,
project_id:
project
.
id
,
id:
service
.
id
,
format: :html
expect
(
flash
[
:alert
]).
to
eq
(
'We tried to send a request to the provided URL but an error occurred: Bad test'
)
expect
(
response
.
status
).
to
redirect_to
(
'/'
)
expect
(
flash
[
:notice
]).
to
eq
(
'We sent a request to the provided URL'
)
end
end
context
'failure'
do
it
"should redirect and show failure message"
do
expect
(
service
).
to
receive
(
:test
).
and_return
({
success:
false
,
result:
'Bad test'
})
get
:test
,
namespace_id:
project
.
namespace
.
id
,
project_id:
project
.
id
,
id:
service
.
id
,
format: :html
expect
(
response
.
status
).
to
redirect_to
(
'/'
)
expect
(
flash
[
:alert
]).
to
eq
(
'We tried to send a request to the provided URL but an error occurred: Bad test'
)
end
end
end
end
end
end
end
describe
'referrer defined'
do
it_should_behave_like
'services controller'
do
let!
(
:referrer
)
{
"/"
}
end
end
describe
'referrer undefined'
do
it_should_behave_like
'services controller'
do
let!
(
:referrer
)
{
nil
}
end
end
end
end
spec/models/milestone_spec.rb
View file @
d222ce8b
...
@@ -140,4 +140,32 @@ describe Milestone do
...
@@ -140,4 +140,32 @@ describe Milestone do
end
end
end
end
describe
'#sort_issues'
do
let
(
:milestone
)
{
create
(
:milestone
)
}
let
(
:issue1
)
{
create
(
:issue
,
milestone:
milestone
,
position:
1
)
}
let
(
:issue2
)
{
create
(
:issue
,
milestone:
milestone
,
position:
2
)
}
let
(
:issue3
)
{
create
(
:issue
,
milestone:
milestone
,
position:
3
)
}
let
(
:issue4
)
{
create
(
:issue
,
position:
42
)
}
it
'sorts the given issues'
do
milestone
.
sort_issues
([
issue3
.
id
,
issue2
.
id
,
issue1
.
id
])
issue1
.
reload
issue2
.
reload
issue3
.
reload
expect
(
issue1
.
position
).
to
eq
(
3
)
expect
(
issue2
.
position
).
to
eq
(
2
)
expect
(
issue3
.
position
).
to
eq
(
1
)
end
it
'ignores issues not part of the milestone'
do
milestone
.
sort_issues
([
issue3
.
id
,
issue2
.
id
,
issue1
.
id
,
issue4
.
id
])
issue4
.
reload
expect
(
issue4
.
position
).
to
eq
(
42
)
end
end
end
end
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