Merge branch 'master' into ui/issuable-list-item
This commit is contained in:
commit
00ebe2239b
88 changed files with 381 additions and 349 deletions
21
Gemfile.lock
21
Gemfile.lock
|
@ -116,23 +116,8 @@ GEM
|
|||
activemodel (>= 3.2.0)
|
||||
activesupport (>= 3.2.0)
|
||||
json (>= 1.7)
|
||||
celluloid (0.17.2)
|
||||
celluloid-essentials
|
||||
celluloid-extras
|
||||
celluloid-fsm
|
||||
celluloid-pool
|
||||
celluloid-supervision
|
||||
timers (>= 4.1.1)
|
||||
celluloid-essentials (0.20.5)
|
||||
timers (>= 4.1.1)
|
||||
celluloid-extras (0.20.5)
|
||||
timers (>= 4.1.1)
|
||||
celluloid-fsm (0.20.5)
|
||||
timers (>= 4.1.1)
|
||||
celluloid-pool (0.20.5)
|
||||
timers (>= 4.1.1)
|
||||
celluloid-supervision (0.20.5)
|
||||
timers (>= 4.1.1)
|
||||
celluloid (0.16.0)
|
||||
timers (~> 4.0.0)
|
||||
charlock_holmes (0.7.3)
|
||||
chunky_png (1.3.5)
|
||||
cliver (0.3.2)
|
||||
|
@ -757,7 +742,7 @@ GEM
|
|||
thor (0.19.1)
|
||||
thread_safe (0.3.5)
|
||||
tilt (1.4.1)
|
||||
timers (4.1.1)
|
||||
timers (4.0.4)
|
||||
hitimes
|
||||
timfel-krb5-auth (0.8.3)
|
||||
tinder (1.10.1)
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
@import "framework/fonts";
|
||||
@import "framework/variables";
|
||||
@import "framework/mixins";
|
||||
@import "framework/layout";
|
||||
@import 'framework/tw_bootstrap_variables';
|
||||
@import 'framework/tw_bootstrap';
|
||||
@import "framework/layout";
|
||||
|
||||
@import "framework/avatar.scss";
|
||||
@import "framework/blocks.scss";
|
||||
|
@ -25,6 +25,7 @@
|
|||
@import "framework/markdown_area.scss";
|
||||
@import "framework/mobile.scss";
|
||||
@import "framework/pagination.scss";
|
||||
@import "framework/panels.scss";
|
||||
@import "framework/selects.scss";
|
||||
@import "framework/sidebar.scss";
|
||||
@import "framework/tables.scss";
|
||||
|
|
|
@ -68,6 +68,10 @@
|
|||
.oneline {
|
||||
line-height: 42px;
|
||||
}
|
||||
|
||||
> p:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.cover-block {
|
||||
|
@ -114,3 +118,7 @@
|
|||
right: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.block-connector {
|
||||
margin-top: -1px;
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
/** COMMON CLASSES **/
|
||||
.prepend-top-10 { margin-top:10px }
|
||||
.prepend-top-default { margin-top: $gl-padding; }
|
||||
.prepend-top-default { margin-top: $gl-padding !important; }
|
||||
.prepend-top-20 { margin-top:20px }
|
||||
.prepend-left-10 { margin-left:10px }
|
||||
.prepend-left-20 { margin-left:20px }
|
||||
|
@ -52,6 +52,10 @@ pre {
|
|||
}
|
||||
}
|
||||
|
||||
hr {
|
||||
margin: $gl-padding 0;
|
||||
}
|
||||
|
||||
.dropdown-menu > li > a {
|
||||
text-shadow: none;
|
||||
}
|
||||
|
@ -429,3 +433,7 @@ table {
|
|||
.space-right {
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.alert, .progress {
|
||||
margin-bottom: $gl-padding;
|
||||
}
|
||||
|
|
|
@ -8,7 +8,6 @@
|
|||
border: none;
|
||||
border-top: 1px solid #E7E9EE;
|
||||
border-bottom: 1px solid #E7E9EE;
|
||||
margin-bottom: 1em;
|
||||
|
||||
&.readme-holder {
|
||||
border-bottom: 0;
|
||||
|
@ -25,7 +24,7 @@
|
|||
text-shadow: 0 1px 1px #fff;
|
||||
margin: 0;
|
||||
text-align: left;
|
||||
padding: 10px 15px;
|
||||
padding: 10px $gl-padding;
|
||||
|
||||
.file-actions {
|
||||
float: right;
|
||||
|
@ -171,4 +170,3 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -22,9 +22,10 @@ input[type='text'].danger {
|
|||
}
|
||||
|
||||
.form-actions {
|
||||
padding: 17px 20px 18px;
|
||||
margin-top: 18px;
|
||||
margin-bottom: 18px;
|
||||
margin: -$gl-padding;
|
||||
margin-top: 0;
|
||||
margin-bottom: -$gl-padding;
|
||||
padding: $gl-padding;
|
||||
background-color: $background-color;
|
||||
border-top: 1px solid $border-color;
|
||||
}
|
||||
|
@ -73,6 +74,8 @@ label {
|
|||
|
||||
.form-control {
|
||||
@include box-shadow(none);
|
||||
height: 42px;
|
||||
padding: 8px $gl-padding;
|
||||
}
|
||||
|
||||
.wiki-content {
|
||||
|
@ -92,3 +95,7 @@ label {
|
|||
background-color: #f7f8fa;
|
||||
}
|
||||
}
|
||||
|
||||
.help-block {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
|
|
@ -7,8 +7,9 @@
|
|||
.issue-box {
|
||||
@include border-radius(2px);
|
||||
|
||||
display: inline-block;
|
||||
padding: 10px $gl-padding;
|
||||
display: block;
|
||||
float: left;
|
||||
padding: 0 $gl-padding;
|
||||
font-weight: normal;
|
||||
margin-right: 10px;
|
||||
font-size: $gl-font-size;
|
||||
|
|
|
@ -2,10 +2,10 @@ html {
|
|||
overflow-y: scroll;
|
||||
|
||||
&.touch .tooltip { display: none !important; }
|
||||
}
|
||||
|
||||
body {
|
||||
padding-top: $header-height;
|
||||
}
|
||||
background-color: #EAEBEC !important;
|
||||
}
|
||||
|
||||
.container {
|
||||
|
@ -18,6 +18,7 @@ html {
|
|||
}
|
||||
|
||||
.navless-container {
|
||||
padding-top: $header-height;
|
||||
margin-top: 30px;
|
||||
}
|
||||
|
||||
|
|
15
app/assets/stylesheets/framework/panels.scss
Normal file
15
app/assets/stylesheets/framework/panels.scss
Normal file
|
@ -0,0 +1,15 @@
|
|||
.panel {
|
||||
margin-bottom: $gl-padding;
|
||||
|
||||
.panel-heading {
|
||||
padding: 10px $gl-padding;
|
||||
}
|
||||
.panel-body {
|
||||
padding: $gl-padding;
|
||||
|
||||
.form-actions {
|
||||
margin: -$gl-padding;
|
||||
margin-top: $gl-padding;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,4 +1,6 @@
|
|||
.page-with-sidebar {
|
||||
padding-top: $header-height;
|
||||
|
||||
.sidebar-wrapper {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
|
@ -18,15 +20,12 @@
|
|||
}
|
||||
|
||||
.content-wrapper {
|
||||
min-height: 100vh;
|
||||
width: 100%;
|
||||
padding: 20px;
|
||||
background: #EAEBEC;
|
||||
|
||||
.container-fluid {
|
||||
background: #FFF;
|
||||
padding: $gl-padding;
|
||||
min-height: 90vh;
|
||||
|
||||
&.container-blank {
|
||||
background: none;
|
||||
|
|
|
@ -6,6 +6,8 @@
|
|||
|
||||
table {
|
||||
&.table {
|
||||
margin-bottom: $gl-padding;
|
||||
|
||||
.dropdown-menu a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
|
|
@ -181,6 +181,10 @@ body {
|
|||
line-height: 1.3;
|
||||
font-size: 1.25em;
|
||||
font-weight: 600;
|
||||
|
||||
&:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.page-title-empty {
|
||||
|
|
|
@ -2,10 +2,6 @@
|
|||
display: block;
|
||||
}
|
||||
|
||||
.commit-title{
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.commit-author, .commit-committer{
|
||||
display: block;
|
||||
color: #999;
|
||||
|
@ -41,6 +37,8 @@
|
|||
.commit-box {
|
||||
.commit-title {
|
||||
margin: 0;
|
||||
font-size: 23px;
|
||||
color: #313236;
|
||||
}
|
||||
|
||||
.commit-description {
|
||||
|
@ -108,16 +106,3 @@
|
|||
z-index: 2;
|
||||
}
|
||||
}
|
||||
|
||||
.commit-ci-menu {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
list-style: none;
|
||||
margin-top: 5px;
|
||||
height: 56px;
|
||||
margin: -16px;
|
||||
padding: 16px;
|
||||
text-align: center;
|
||||
margin-top: 0px;
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
|
|
|
@ -19,48 +19,38 @@
|
|||
color: #B94A48;
|
||||
}
|
||||
}
|
||||
.commit-button-annotation {
|
||||
display: inline-block;
|
||||
margin: 0;
|
||||
padding: 2px;
|
||||
|
||||
> * {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.message {
|
||||
display: inline-block;
|
||||
margin: 5px 8px 0 8px;
|
||||
}
|
||||
}
|
||||
|
||||
.file-title {
|
||||
@extend .monospace;
|
||||
|
||||
line-height: 42px;
|
||||
padding-top: 7px;
|
||||
padding-bottom: 7px;
|
||||
}
|
||||
|
||||
.editor-ref {
|
||||
background: $background-color;
|
||||
padding: 11px 15px;
|
||||
padding-right: $gl-padding;
|
||||
border-right: 1px solid $border-color;
|
||||
display: inline-block;
|
||||
margin: -5px -5px;
|
||||
display: block;
|
||||
float: left;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.editor-file-name {
|
||||
@extend .monospace;
|
||||
|
||||
float: left;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.new-file-name {
|
||||
display: inline-block;
|
||||
width: 450px;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.form-control {
|
||||
margin-top: -3px;
|
||||
}
|
||||
}
|
||||
|
||||
.form-actions {
|
||||
margin: -$gl-padding;
|
||||
margin-top: 0;
|
||||
padding: $gl-padding
|
||||
.select2 {
|
||||
float: right;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -51,11 +51,12 @@
|
|||
|
||||
.issuable-details {
|
||||
.page-title {
|
||||
margin-top: -15px;
|
||||
padding: 10px 0;
|
||||
margin-top: -$gl-padding;
|
||||
padding: 7px 0;
|
||||
margin-bottom: 0;
|
||||
color: #5c5d5e;
|
||||
font-size: 16px;
|
||||
line-height: 42px;
|
||||
|
||||
.author {
|
||||
color: #5c5d5e;
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
/* Login Page */
|
||||
.login-page {
|
||||
background-color: white;
|
||||
|
||||
.container {
|
||||
max-width: 960px;
|
||||
}
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
*/
|
||||
.mr-state-widget {
|
||||
background: #F7F8FA;
|
||||
margin-bottom: 20px;
|
||||
color: $gl-gray;
|
||||
border: 1px solid #dce0e6;
|
||||
@include border-radius(2px);
|
||||
|
@ -87,7 +86,7 @@
|
|||
.mr-widget-body,
|
||||
.ci_widget,
|
||||
.mr-widget-footer {
|
||||
padding: 15px;
|
||||
padding: $gl-padding;
|
||||
}
|
||||
|
||||
.normal {
|
||||
|
@ -116,26 +115,8 @@
|
|||
}
|
||||
}
|
||||
|
||||
.merge-request .merge-request-tabs {
|
||||
@include nav-menu;
|
||||
margin: -$gl-padding;
|
||||
padding: $gl-padding;
|
||||
text-align: center;
|
||||
margin-bottom: 1px;
|
||||
}
|
||||
|
||||
// Mobile
|
||||
@media (max-width: 480px) {
|
||||
.merge-request .merge-request-tabs {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
|
||||
li {
|
||||
a {
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
.merge-request-details {
|
||||
margin-bottom: $gl-padding;
|
||||
}
|
||||
|
||||
.mr_source_commit,
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
}
|
||||
.reply-btn {
|
||||
@extend .btn-primary;
|
||||
margin: 10px $gl-padding;
|
||||
}
|
||||
.diff-file .diff-content {
|
||||
tr.line_holder:hover {
|
||||
|
@ -38,9 +39,8 @@
|
|||
}
|
||||
|
||||
.new_note, .edit_note {
|
||||
.buttons {
|
||||
margin-top: 8px;
|
||||
margin-bottom: 3px;
|
||||
.note-form-actions {
|
||||
margin-top: $gl-padding;
|
||||
}
|
||||
|
||||
.note-preview-holder {
|
||||
|
@ -79,8 +79,8 @@
|
|||
padding: $gl-padding;
|
||||
margin-left: -$gl-padding;
|
||||
margin-right: -$gl-padding;
|
||||
border-right: 1px solid #ECEEF1;
|
||||
border-top: 1px solid #ECEEF1;
|
||||
border-right: 1px solid $border-color;
|
||||
border-top: 1px solid $border-color;
|
||||
margin-bottom: -$gl-padding;
|
||||
}
|
||||
|
||||
|
@ -150,7 +150,6 @@
|
|||
|
||||
.discussion-reply-holder {
|
||||
background: $background-color;
|
||||
padding: 10px 15px;
|
||||
border-top: 1px solid $border-color;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,10 +18,6 @@
|
|||
}
|
||||
}
|
||||
|
||||
.project-edit-content {
|
||||
padding: 7px;
|
||||
}
|
||||
|
||||
.project-name-holder {
|
||||
.help-inline {
|
||||
vertical-align: top;
|
||||
|
@ -30,12 +26,6 @@
|
|||
}
|
||||
|
||||
.project-home-panel {
|
||||
text-align: center;
|
||||
background: #f7f8fa;
|
||||
margin: -$gl-padding;
|
||||
padding: $gl-padding;
|
||||
padding: 44px 0 17px 0;
|
||||
|
||||
.project-identicon-holder {
|
||||
margin-bottom: 16px;
|
||||
|
||||
|
@ -105,7 +95,6 @@
|
|||
display: inline-table;
|
||||
position: relative;
|
||||
top: 17px;
|
||||
margin-bottom: 44px;
|
||||
}
|
||||
|
||||
.project-repo-buttons {
|
||||
|
@ -376,7 +365,7 @@ table.table.protected-branches-list tr.no-border {
|
|||
|
||||
.project-stats {
|
||||
text-align: center;
|
||||
margin-top: 15px;
|
||||
margin-top: $gl-padding;
|
||||
margin-bottom: 0;
|
||||
padding-top: 10px;
|
||||
padding-bottom: 4px;
|
||||
|
|
|
@ -27,56 +27,22 @@
|
|||
}
|
||||
|
||||
.snippet-holder {
|
||||
.snippet-details {
|
||||
.page-title {
|
||||
margin-top: -15px;
|
||||
padding: 10px 0;
|
||||
margin-bottom: 0;
|
||||
color: #5c5d5e;
|
||||
font-size: 16px;
|
||||
|
||||
.author {
|
||||
color: #5c5d5e;
|
||||
}
|
||||
|
||||
.snippet-id {
|
||||
color: #5c5d5e;
|
||||
}
|
||||
}
|
||||
|
||||
.snippet-title {
|
||||
margin: 0;
|
||||
font-size: 23px;
|
||||
color: #313236;
|
||||
}
|
||||
|
||||
@media (max-width: $screen-md-max) {
|
||||
.new-snippet-link {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: $screen-sm-max) {
|
||||
.creator,
|
||||
.page-title .btn-close {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
margin-bottom: -$gl-padding;
|
||||
|
||||
.file-holder {
|
||||
border-top: 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.snippet-box {
|
||||
@include border-radius(2px);
|
||||
|
||||
display: inline-block;
|
||||
padding: 10px $gl-padding;
|
||||
display: block;
|
||||
float: left;
|
||||
padding: 0 $gl-padding;
|
||||
font-weight: normal;
|
||||
margin-right: 10px;
|
||||
font-size: $gl-font-size;
|
||||
border: 1px solid;
|
||||
line-height: 40px;
|
||||
}
|
||||
|
|
|
@ -5,8 +5,13 @@ class Admin::ImpersonationController < Admin::ApplicationController
|
|||
before_action :authorize_impersonator!
|
||||
|
||||
def create
|
||||
if @user.blocked?
|
||||
flash[:alert] = "You cannot impersonate a blocked user"
|
||||
|
||||
redirect_to admin_user_path(@user)
|
||||
else
|
||||
session[:impersonator_id] = current_user.username
|
||||
session[:impersonator_return_to] = request.env['HTTP_REFERER']
|
||||
session[:impersonator_return_to] = admin_user_path(@user)
|
||||
|
||||
warden.set_user(user, scope: 'user')
|
||||
|
||||
|
@ -14,6 +19,7 @@ class Admin::ImpersonationController < Admin::ApplicationController
|
|||
|
||||
redirect_to root_path
|
||||
end
|
||||
end
|
||||
|
||||
def destroy
|
||||
redirect = session[:impersonator_return_to]
|
||||
|
|
|
@ -60,7 +60,7 @@ module BlobHelper
|
|||
if Gitlab::MarkupHelper.previewable?(filename)
|
||||
'Preview'
|
||||
else
|
||||
'Preview changes'
|
||||
'Preview Changes'
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -109,7 +109,7 @@ module CommitsHelper
|
|||
)
|
||||
elsif @path.present?
|
||||
return link_to(
|
||||
"Browse Dir »",
|
||||
"Browse Directory »",
|
||||
namespace_project_tree_path(project.namespace, project,
|
||||
tree_join(commit.id, @path)),
|
||||
class: "pull-right"
|
||||
|
@ -117,7 +117,7 @@ module CommitsHelper
|
|||
end
|
||||
end
|
||||
link_to(
|
||||
"Browse Code »",
|
||||
"Browse Files »",
|
||||
namespace_project_tree_path(project.namespace, project, commit),
|
||||
class: "pull-right"
|
||||
)
|
||||
|
|
|
@ -146,9 +146,9 @@ module DiffHelper
|
|||
def submodule_link(blob, ref, repository = @repository)
|
||||
tree, commit = submodule_links(blob, ref, repository)
|
||||
commit_id = if commit.nil?
|
||||
blob.id[0..10]
|
||||
Commit.truncate_sha(blob.id)
|
||||
else
|
||||
link_to "#{blob.id[0..10]}", commit
|
||||
link_to Commit.truncate_sha(blob.id), commit
|
||||
end
|
||||
|
||||
[
|
||||
|
|
|
@ -37,7 +37,7 @@ class BuildkiteService < CiService
|
|||
def compose_service_hook
|
||||
hook = service_hook || build_service_hook
|
||||
hook.url = webhook_url
|
||||
hook.enable_ssl_verification = enable_ssl_verification
|
||||
hook.enable_ssl_verification = !!enable_ssl_verification
|
||||
hook.save
|
||||
end
|
||||
|
||||
|
|
|
@ -34,7 +34,7 @@ class DroneCiService < CiService
|
|||
hook = service_hook || build_service_hook
|
||||
# If using a service template, project may not be available
|
||||
hook.url = [drone_url, "/api/hook", "?owner=#{project.namespace.path}", "&name=#{project.path}", "&access_token=#{token}"].join if project
|
||||
hook.enable_ssl_verification = enable_ssl_verification
|
||||
hook.enable_ssl_verification = !!enable_ssl_verification
|
||||
hook.save
|
||||
end
|
||||
|
||||
|
|
|
@ -690,7 +690,7 @@ class User < ActiveRecord::Base
|
|||
end
|
||||
|
||||
def starred?(project)
|
||||
starred_projects.exists?(project)
|
||||
starred_projects.exists?(project.id)
|
||||
end
|
||||
|
||||
def toggle_star(project)
|
||||
|
@ -794,4 +794,9 @@ class User < ActiveRecord::Base
|
|||
Gitlab::SQL::Union.new([personal_projects.select(:id), groups.select(:id),
|
||||
other.select(:id)])
|
||||
end
|
||||
|
||||
# Added according to https://github.com/plataformatec/devise/blob/7df57d5081f9884849ca15e4fde179ef164a575f/README.md#activejob-integration
|
||||
def send_devise_notification(notification, *args)
|
||||
devise_mailer.send(notification, self, *args).deliver_later
|
||||
end
|
||||
end
|
||||
|
|
|
@ -2,4 +2,4 @@
|
|||
= render_colored_label(label)
|
||||
.pull-right
|
||||
= link_to 'Edit', edit_admin_label_path(label), class: 'btn btn-sm'
|
||||
= link_to 'Remove', admin_label_path(label), class: 'btn btn-sm btn-remove remove-row', method: :delete, remote: true, data: {confirm: "Remove this label? Are you sure?"}
|
||||
= link_to 'Delete', admin_label_path(label), class: 'btn btn-sm btn-remove remove-row', method: :delete, remote: true, data: {confirm: "Delete this label? Are you sure?"}
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
%span.cred (Admin)
|
||||
|
||||
.pull-right
|
||||
- unless @user == current_user
|
||||
- unless @user == current_user || @user.blocked?
|
||||
= link_to 'Impersonate', impersonate_admin_user_path(@user), method: :post, class: "btn btn-grouped btn-info"
|
||||
= link_to edit_admin_user_path(@user), class: "btn btn-grouped" do
|
||||
%i.fa.fa-pencil-square-o
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
= @project.name
|
||||
|
||||
%p
|
||||
Commit: #{link_to @build.short_sha, namespace_project_commit_path(@build.gl_project.namespace, @build.gl_project, @build.sha)}
|
||||
Commit: #{link_to @build.short_sha, namespace_project_commit_url(@build.gl_project.namespace, @build.gl_project, @build.sha)}
|
||||
%p
|
||||
Author: #{@build.commit.git_author_name}
|
||||
%p
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
= link_to new_group_path, class: "btn btn-new" do
|
||||
%i.fa.fa-plus
|
||||
New Group
|
||||
.title Welcome to the groups!
|
||||
.oneline
|
||||
Group members have access to all group projects.
|
||||
|
||||
%ul.content-list
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
.form-group
|
||||
= search_field_tag :search, params[:search], placeholder: "Filter by name", class: "form-control search-text-input", id: "projects_search", spellcheck: false
|
||||
.form-group
|
||||
= button_tag 'Search', class: "btn btn-success"
|
||||
= button_tag 'Search', class: "btn"
|
||||
|
||||
.pull-right.hidden-sm.hidden-xs
|
||||
- if current_user
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
- page_title "Bitbucket import"
|
||||
- header_title "Projects", root_path
|
||||
%h3.page-title
|
||||
%i.fa.fa-bitbucket
|
||||
Import projects from Bitbucket
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
- page_title "FogBugz Import"
|
||||
- header_title "Projects", root_path
|
||||
%h3.page-title
|
||||
%i.fa.fa-bug
|
||||
Import projects from FogBugz
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
- page_title 'User map', 'FogBugz import'
|
||||
- header_title "Projects", root_path
|
||||
%h3.page-title
|
||||
%i.fa.fa-bug
|
||||
Import projects from FogBugz
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
- page_title "FogBugz import"
|
||||
- header_title "Projects", root_path
|
||||
%h3.page-title
|
||||
%i.fa.fa-bug
|
||||
Import projects from FogBugz
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
- page_title "GitHub import"
|
||||
- header_title "Projects", root_path
|
||||
%h3.page-title
|
||||
%i.fa.fa-github
|
||||
Import projects from GitHub
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
- page_title "GitLab.com import"
|
||||
- header_title "Projects", root_path
|
||||
%h3.page-title
|
||||
%i.fa.fa-heart
|
||||
Import projects from GitLab.com
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
- page_title "Gitorious import"
|
||||
- header_title "Projects", root_path
|
||||
%h3.page-title
|
||||
%i.icon-gitorious.icon-gitorious-big
|
||||
Import projects from Gitorious.org
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
- page_title "Google Code import"
|
||||
- header_title "Projects", root_path
|
||||
%h3.page-title
|
||||
%i.fa.fa-google
|
||||
Import projects from Google Code
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
- page_title "User map", "Google Code import"
|
||||
- header_title "Projects", root_path
|
||||
%h3.page-title
|
||||
%i.fa.fa-google
|
||||
Import projects from Google Code
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
- page_title "Google Code import"
|
||||
- header_title "Projects", root_path
|
||||
%h3.page-title
|
||||
%i.fa.fa-google
|
||||
Import projects from Google Code
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
.pull-right
|
||||
= link_to 'New Application', new_oauth_application_path, class: 'btn btn-success'
|
||||
- if @applications.any?
|
||||
.table-holder
|
||||
%table.table.table-striped
|
||||
%thead
|
||||
%tr
|
||||
|
@ -40,6 +41,7 @@
|
|||
Authorized applications
|
||||
|
||||
- if @authorized_tokens.any?
|
||||
.table-holder
|
||||
%table.table.table-striped
|
||||
%thead
|
||||
%tr
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
- is_admin = defined?(admin) ? true : false
|
||||
.panel.panel-default
|
||||
- if @keys.any?
|
||||
.table-holder
|
||||
%table.table
|
||||
%thead.panel-heading
|
||||
%tr
|
||||
|
|
|
@ -3,7 +3,9 @@
|
|||
|
||||
.gray-content-block.top-block
|
||||
.pull-right
|
||||
= link_to "Add SSH Key", new_profile_key_path, class: "btn btn-new"
|
||||
= link_to new_profile_key_path, class: "btn btn-new" do
|
||||
= icon('plus')
|
||||
Add SSH Key
|
||||
.oneline
|
||||
Before you can add an SSH key you need to
|
||||
= link_to "generate it.", help_page_path("ssh", "README")
|
||||
|
|
|
@ -50,12 +50,10 @@
|
|||
Watch
|
||||
%p You will receive notifications for any activity
|
||||
|
||||
.form-actions
|
||||
.gray-content-block
|
||||
= f.submit 'Save changes', class: "btn btn-create"
|
||||
|
||||
.clearfix
|
||||
%hr
|
||||
.row.all-notifications
|
||||
.row.all-notifications.prepend-top-default
|
||||
.col-md-6
|
||||
%p
|
||||
You can also specify notification level per group or per project.
|
||||
|
|
|
@ -7,15 +7,16 @@
|
|||
= cache(readme_cache_key) do
|
||||
= render_readme(readme)
|
||||
- else
|
||||
.gray-content-block.second-block.center
|
||||
%h3.page-title
|
||||
This project does not have README yet
|
||||
- if can?(current_user, :push_code, @project)
|
||||
%p.slead
|
||||
%p
|
||||
A
|
||||
%code README
|
||||
file contains information about other files in a repository and is commonly
|
||||
distributed with computer software, forming part of its documentation.
|
||||
%br
|
||||
%p
|
||||
We recommend you to
|
||||
= link_to "add README", new_readme_path, class: 'underlined-link'
|
||||
file to the repository and GitLab will render it here instead of this message.
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
#tree-holder.tree-holder
|
||||
.file-holder
|
||||
.file-title
|
||||
%i.fa.fa-file
|
||||
= blob_icon @blob.mode, @blob.name
|
||||
%strong
|
||||
= @path
|
||||
%small= number_to_human_size @blob.size
|
||||
|
@ -43,4 +43,3 @@
|
|||
- blame_group[:lines].each do |line|
|
||||
:erb
|
||||
<%= highlight(@blob.name, line, nowrap: true, continue: true).html_safe %>
|
||||
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
.file-holder.file
|
||||
.file-title
|
||||
.file-holder.file.append-bottom-default
|
||||
.file-title.clearfix
|
||||
.editor-ref
|
||||
%i.fa.fa-code-fork
|
||||
= icon('code-fork')
|
||||
= ref
|
||||
%span.editor-file-name
|
||||
- if @path
|
||||
%span.monospace
|
||||
= @path
|
||||
|
||||
- if current_action?(:new) || current_action?(:create)
|
||||
%span.editor-file-name
|
||||
\/
|
||||
= text_field_tag 'file_name', params[:file_name], placeholder: "File name",
|
||||
required: true, class: 'form-control new-file-name js-quick-submit'
|
||||
|
||||
.pull-right
|
||||
= select_tag :encoding, options_for_select([ "base64", "text" ], "text"), class: 'form-control'
|
||||
= select_tag :encoding, options_for_select([ "base64", "text" ], "text"), class: 'select2'
|
||||
|
||||
.file-content.code
|
||||
%pre.js-edit-mode-pane#editor
|
||||
|
|
|
@ -5,12 +5,12 @@
|
|||
%ul.center-top-menu.no-bottom.js-edit-mode
|
||||
%li.active
|
||||
= link_to '#editor' do
|
||||
%i.fa.fa-edit
|
||||
Edit file
|
||||
= icon('edit')
|
||||
Edit File
|
||||
|
||||
%li
|
||||
= link_to '#preview', 'data-preview-url' => namespace_project_preview_blob_path(@project.namespace, @project, @id) do
|
||||
%i.fa.fa-eye
|
||||
= icon('eye')
|
||||
= editing_preview_title(@blob.name)
|
||||
|
||||
= form_tag(namespace_project_update_blob_path(@project.namespace, @project, @id), method: :put, class: 'form-horizontal js-requires-input js-edit-blob-form') do
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
.branch-commit
|
||||
= link_to commit.short_id, namespace_project_commit_path(project.namespace, project, commit), class: "commit-id"
|
||||
= link_to commit.short_id, namespace_project_commit_path(project.namespace, project, commit), class: "commit-id monospace"
|
||||
·
|
||||
%span.str-truncated
|
||||
= link_to_gfm commit.title, namespace_project_commit_path(project.namespace, project, commit.id), class: "commit-row-message"
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
.pull-right
|
||||
- if can? current_user, :push_code, @project
|
||||
= link_to new_namespace_project_branch_path(@project.namespace, @project), class: 'btn btn-create' do
|
||||
%i.fa.fa-add-sign
|
||||
= icon('plus')
|
||||
New branch
|
||||
|
||||
.dropdown.inline
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
%ul.center-top-menu.commit-ci-menu
|
||||
%ul.center-top-menu.no-top.no-bottom.commit-ci-menu
|
||||
= nav_link(path: 'commit#show') do
|
||||
= link_to namespace_project_commit_path(@project.namespace, @project, @commit.id) do
|
||||
Changes
|
||||
|
|
|
@ -13,8 +13,9 @@
|
|||
- unless @commit.parents.length > 1
|
||||
%li= link_to "Email Patches", namespace_project_commit_path(@project.namespace, @project, @commit, format: :patch)
|
||||
%li= link_to "Plain Diff", namespace_project_commit_path(@project.namespace, @project, @commit, format: :diff)
|
||||
= link_to namespace_project_tree_path(@project.namespace, @project, @commit), class: "btn btn-primary btn-grouped" do
|
||||
%span Browse Code »
|
||||
= link_to namespace_project_tree_path(@project.namespace, @project, @commit), class: "btn btn-grouped" do
|
||||
= icon('files-o')
|
||||
Browse Files
|
||||
%div
|
||||
|
||||
%p
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
- page_title "#{@commit.title} (#{@commit.short_id})", "Commits"
|
||||
= render "projects/commits/header_title"
|
||||
= render "commit_box"
|
||||
= render "ci_menu" if @ci_commit
|
||||
- if @ci_commit
|
||||
= render "ci_menu"
|
||||
- else
|
||||
%div.block-connector
|
||||
= render "projects/diffs/diffs", diffs: @diffs, project: @project
|
||||
= render "projects/notes/notes_with_form"
|
||||
|
|
|
@ -7,11 +7,11 @@
|
|||
= render "form"
|
||||
|
||||
- if @commits.present?
|
||||
.prepend-top-20
|
||||
.prepend-top-default
|
||||
= render "projects/commits/commit_list"
|
||||
= render "projects/diffs/diffs", diffs: @diffs, project: @project
|
||||
- else
|
||||
.light-well.prepend-top-20
|
||||
.light-well.prepend-top-default
|
||||
.center
|
||||
%h4
|
||||
There isn't anything to compare.
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
- diff_files = safe_diff_files(diffs)
|
||||
|
||||
.gray-content-block.second-block.oneline-block
|
||||
.gray-content-block.middle-block.oneline-block
|
||||
.inline-parallel-buttons
|
||||
.btn-group
|
||||
= inline_diff_btn
|
||||
|
|
|
@ -2,19 +2,27 @@
|
|||
.diff-header{id: "file-path-#{hexdigest(diff_file.file_path)}"}
|
||||
- if diff_file.diff.submodule?
|
||||
%span
|
||||
= icon('archive fw')
|
||||
- submodule_item = project.repository.blob_at(@commit.id, diff_file.file_path)
|
||||
%strong
|
||||
= submodule_link(submodule_item, @commit.id, project.repository)
|
||||
- else
|
||||
%span
|
||||
- if diff_file.deleted_file
|
||||
= "#{diff_file.old_path} deleted"
|
||||
- elsif diff_file.renamed_file
|
||||
= "#{diff_file.old_path} renamed to #{diff_file.new_path}"
|
||||
- else
|
||||
= blob_icon blob.mode, blob.name
|
||||
= link_to "#diff-#{i}" do
|
||||
%strong
|
||||
= diff_file.new_path
|
||||
|
||||
- if diff_file.deleted_file
|
||||
deleted
|
||||
- elsif diff_file.renamed_file
|
||||
renamed from
|
||||
%strong
|
||||
= diff_file.old_path
|
||||
|
||||
- if diff_file.mode_changed?
|
||||
%span.file-mode= "#{diff_file.diff.a_mode} → #{diff_file.diff.b_mode}"
|
||||
%small
|
||||
= "#{diff_file.diff.a_mode} → #{diff_file.diff.b_mode}"
|
||||
|
||||
.diff-controls
|
||||
- if blob.text?
|
||||
|
|
|
@ -5,14 +5,13 @@
|
|||
|
||||
= render "home_panel"
|
||||
|
||||
.gray-content-block.center
|
||||
.gray-content-block.second-block.center
|
||||
%h3.page-title
|
||||
The repository for this project is empty
|
||||
- if can?(current_user, :download_code, @project)
|
||||
- if can?(current_user, :push_code, @project)
|
||||
%p
|
||||
If you already have files you can push them using command line instructions below.
|
||||
%br
|
||||
- if can?(current_user, :push_code, @project)
|
||||
%p
|
||||
Otherwise you can start with
|
||||
= link_to "adding README", new_readme_path, class: 'underlined-link'
|
||||
file to this project.
|
||||
|
|
|
@ -7,4 +7,4 @@
|
|||
|
||||
- if can? current_user, :admin_label, @project
|
||||
= link_to 'Edit', edit_namespace_project_label_path(@project.namespace, @project, label), class: 'btn btn-sm'
|
||||
= link_to 'Remove', namespace_project_label_path(@project.namespace, @project, label), class: 'btn btn-sm btn-remove remove-row', method: :delete, remote: true, data: {confirm: "Remove this label? Are you sure?"}
|
||||
= link_to 'Delete', namespace_project_label_path(@project.namespace, @project, label), class: 'btn btn-sm btn-remove remove-row', method: :delete, remote: true, data: {confirm: "Remove this label? Are you sure?"}
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
.gray-content-block.top-block
|
||||
- if can? current_user, :admin_label, @project
|
||||
= link_to new_namespace_project_label_path(@project.namespace, @project), class: "pull-right btn btn-new" do
|
||||
= icon('plus')
|
||||
New label
|
||||
.oneline
|
||||
Labels can be applied to issues and merge requests.
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
= render 'shared/show_aside'
|
||||
|
||||
.gray-content-block.second-block.oneline-block
|
||||
.gray-content-block.middle-block.oneline-block
|
||||
.row
|
||||
.col-md-9
|
||||
.votes-holder.pull-right
|
||||
|
|
|
@ -37,7 +37,7 @@
|
|||
%h4 Compare failed
|
||||
%p We can't compare selected branches. It may be because of huge diff. Please try again or select different branches.
|
||||
- else
|
||||
.light-well.append-bottom-10
|
||||
.light-well.append-bottom-default
|
||||
.center
|
||||
%h4
|
||||
There isn't anything to merge.
|
||||
|
@ -86,4 +86,3 @@
|
|||
return;
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
= f.hidden_field :target_branch
|
||||
|
||||
.mr-compare.merge-request
|
||||
%ul.merge-request-tabs
|
||||
%ul.merge-request-tabs.center-top-menu.no-top.no-bottom
|
||||
%li.commits-tab
|
||||
= link_to url_for(params), data: {target: '#commits', action: 'commits', toggle: 'tab'} do
|
||||
Commits
|
||||
|
@ -31,7 +31,7 @@
|
|||
|
||||
.tab-content
|
||||
#commits.commits.tab-pane
|
||||
= render "projects/commits/commits", project: @project
|
||||
= render "projects/merge_requests/show/commits"
|
||||
#diffs.diffs.tab-pane.active
|
||||
- if @diffs.present?
|
||||
= render "projects/diffs/diffs", diffs: @diffs, project: @project
|
||||
|
@ -57,4 +57,3 @@
|
|||
diffs_loaded: true,
|
||||
commits_loaded: true
|
||||
});
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
.merge-request-details.issuable-details
|
||||
= render "projects/merge_requests/show/mr_title"
|
||||
= render "projects/merge_requests/show/mr_box"
|
||||
.append-bottom-20.mr-source-target.prepend-top-default
|
||||
.append-bottom-default.mr-source-target.prepend-top-default
|
||||
- if @merge_request.open?
|
||||
.pull-right
|
||||
- if @merge_request.source_branch_exists?
|
||||
|
@ -40,7 +40,7 @@
|
|||
= link_to "command line", "#modal_merge_info", class: "how_to_merge_link vlink", title: "How To Merge", "data-toggle" => "modal"
|
||||
|
||||
- if @commits.present?
|
||||
%ul.merge-request-tabs
|
||||
%ul.merge-request-tabs.center-top-menu.no-top.no-bottom
|
||||
%li.notes-tab
|
||||
= link_to namespace_project_merge_request_path(@project.namespace, @project, @merge_request), data: {target: '#notes', action: 'notes', toggle: 'tab'} do
|
||||
Discussion
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
.gray-content-block.second-block.oneline-block
|
||||
.gray-content-block.middle-block.oneline-block
|
||||
= icon("sort-amount-desc")
|
||||
Most recent commits displayed first
|
||||
|
||||
|
|
|
@ -31,4 +31,4 @@
|
|||
= link_to 'Close Milestone', namespace_project_milestone_path(@project.namespace, @project, milestone, milestone: {state_event: :close }), method: :put, remote: true, class: "btn btn-xs btn-close"
|
||||
= link_to namespace_project_milestone_path(milestone.project.namespace, milestone.project, milestone), data: { confirm: 'Are you sure?' }, method: :delete, class: "btn btn-xs btn-remove" do
|
||||
%i.fa.fa-trash-o
|
||||
Remove
|
||||
Delete
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
= link_to 'Reopen Milestone', namespace_project_milestone_path(@project.namespace, @project, @milestone, milestone: {state_event: :activate }), method: :put, class: "btn btn-reopen btn-grouped"
|
||||
= link_to namespace_project_milestone_path(@project.namespace, @project, @milestone), data: { confirm: 'Are you sure?' }, method: :delete, class: "btn btn-grouped btn-remove" do
|
||||
%i.fa.fa-trash-o
|
||||
Remove
|
||||
Delete
|
||||
|
||||
%hr
|
||||
- if @milestone.issues.any? && @milestone.can_be_closed?
|
||||
|
|
|
@ -14,6 +14,6 @@
|
|||
= render 'projects/zen', f: f, attr: :description, classes: 'description js-quick-submit form-control'
|
||||
= render 'projects/notes/hints'
|
||||
.error-alert
|
||||
.prepend-top-default
|
||||
.form-actions.prepend-top-default
|
||||
= f.submit 'Save changes', class: 'btn btn-save'
|
||||
= link_to "Cancel", namespace_project_tag_path(@project.namespace, @project, @tag.name), class: "btn btn-default btn-cancel"
|
||||
|
|
|
@ -3,10 +3,10 @@
|
|||
- split_button = split_button || false
|
||||
- if split_button == true
|
||||
%span.btn-group{class: btn_class}
|
||||
= link_to archive_namespace_project_repository_path(@project.namespace, @project, ref: ref, format: 'zip'), class: 'btn btn-success col-xs-10', rel: 'nofollow' do
|
||||
= link_to archive_namespace_project_repository_path(@project.namespace, @project, ref: ref, format: 'zip'), class: 'btn col-xs-10', rel: 'nofollow' do
|
||||
%i.fa.fa-download
|
||||
%span Download zip
|
||||
%a.col-xs-2.btn.btn-success.dropdown-toggle{ 'data-toggle' => 'dropdown' }
|
||||
%a.col-xs-2.btn.dropdown-toggle{ 'data-toggle' => 'dropdown' }
|
||||
%span.caret
|
||||
%span.sr-only
|
||||
Select Archive Format
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
= render "home_panel"
|
||||
|
||||
.project-stats.gray-content-block
|
||||
.project-stats.gray-content-block.second-block
|
||||
%ul.nav.nav-pills
|
||||
%li
|
||||
= link_to namespace_project_commits_path(@project.namespace, @project, current_ref) do
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
- if can? current_user, :push_code, @project
|
||||
.pull-right
|
||||
= link_to new_namespace_project_tag_path(@project.namespace, @project), class: 'btn btn-create new-tag-btn' do
|
||||
%i.fa.fa-add-sign
|
||||
= icon('plus')
|
||||
New tag
|
||||
.oneline
|
||||
Tags give the ability to mark specific points in history as being important
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
%i.fa.fa-angle-right
|
||||
|
||||
%small.light
|
||||
= link_to @commit.short_id, namespace_project_commit_path(@project.namespace, @project, @commit)
|
||||
= link_to @commit.short_id, namespace_project_commit_path(@project.namespace, @project, @commit), class: "monospace"
|
||||
–
|
||||
= truncate(@commit.title, length: 50)
|
||||
= link_to 'History', namespace_project_commits_path(@project.namespace, @project, @id), class: 'pull-right'
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
= form_for [@project.namespace.becomes(Namespace), @project, issuable], remote: true, html: {class: 'issuable-context-form inline-update js-issuable-update'} do |f|
|
||||
%div.prepend-top-20
|
||||
%div.prepend-top-default
|
||||
.issuable-context-title
|
||||
%label
|
||||
Assignee:
|
||||
|
@ -11,7 +11,7 @@
|
|||
- if can?(current_user, :"admin_#{issuable.to_ability_name}", @project)
|
||||
= users_select_tag("#{issuable.class.table_name.singularize}[assignee_id]", placeholder: 'Select assignee', class: 'custom-form-control js-select2 js-assignee', selected: issuable.assignee_id, project: @target_project, null_user: true, current_user: true)
|
||||
|
||||
%div.prepend-top-20.clearfix
|
||||
%div.prepend-top-default.clearfix
|
||||
.issuable-context-title
|
||||
%label
|
||||
Milestone:
|
||||
|
@ -31,7 +31,7 @@
|
|||
|
||||
- if current_user
|
||||
- subscribed = issuable.subscribed?(current_user)
|
||||
%div.prepend-top-20.clearfix
|
||||
%div.prepend-top-default.clearfix
|
||||
.issuable-context-title
|
||||
%label
|
||||
Subscription:
|
||||
|
|
|
@ -93,7 +93,8 @@
|
|||
%p.help-block
|
||||
= link_to 'Change branches', mr_change_branches_path(@merge_request)
|
||||
|
||||
.form-actions
|
||||
- is_footer = !(issuable.is_a?(MergeRequest) && issuable.new_record?)
|
||||
.gray-content-block{class: (is_footer ? "footer-block" : "middle-block")}
|
||||
- if !issuable.project.empty_repo? && (guide_url = contribution_guide_path(issuable.project)) && !issuable.persisted?
|
||||
%p
|
||||
Please review the
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
.snippet-details
|
||||
.issuable-details
|
||||
.page-title
|
||||
.snippet-box{class: visibility_level_color(@snippet.visibility_level)}
|
||||
= visibility_level_icon(@snippet.visibility_level)
|
||||
= visibility_level_label(@snippet.visibility_level)
|
||||
%span.snippet-id Snippet ##{@snippet.id}
|
||||
Snippet ##{@snippet.id}
|
||||
%span.creator
|
||||
· created by #{link_to_member(@project, @snippet.author, size: 24)}
|
||||
·
|
||||
|
@ -19,6 +19,7 @@
|
|||
= render "projects/snippets/actions"
|
||||
- else
|
||||
= render "snippets/actions"
|
||||
|
||||
.gray-content-block.middle-block
|
||||
%h2.snippet-title
|
||||
%h2.issue-title
|
||||
= gfm escape_once(@snippet.title)
|
||||
|
|
|
@ -32,7 +32,7 @@ Rails.application.configure do
|
|||
# config.force_ssl = true
|
||||
|
||||
# See everything in the log (default is :info)
|
||||
# config.log_level = :debug
|
||||
config.log_level = :info
|
||||
|
||||
# Suppress 'Rendered template ...' messages in the log
|
||||
# source: http://stackoverflow.com/a/16369363
|
||||
|
|
|
@ -6,6 +6,9 @@ If a user is both in a project group and in the project itself, the highest perm
|
|||
|
||||
If a user is a GitLab administrator they receive all permissions.
|
||||
|
||||
On public projects the Guest role is not enforced.
|
||||
All users will be able to create issues, leave comments, and pull or download the project code.
|
||||
|
||||
To add or import a user, you can follow the [project users and members
|
||||
documentation](doc/workflow/add-user/add-user.md).
|
||||
|
||||
|
@ -15,8 +18,8 @@ documentation](doc/workflow/add-user/add-user.md).
|
|||
|---------------------------------------|---------|------------|-------------|----------|--------|
|
||||
| Create new issue | ✓ | ✓ | ✓ | ✓ | ✓ |
|
||||
| Leave comments | ✓ | ✓ | ✓ | ✓ | ✓ |
|
||||
| Pull project code | ✓ | ✓ | ✓ | ✓ | ✓ |
|
||||
| Download project | ✓ | ✓ | ✓ | ✓ | ✓ |
|
||||
| Pull project code | | ✓ | ✓ | ✓ | ✓ |
|
||||
| Download project | | ✓ | ✓ | ✓ | ✓ |
|
||||
| Create code snippets | | ✓ | ✓ | ✓ | ✓ |
|
||||
| Manage issue tracker | | ✓ | ✓ | ✓ | ✓ |
|
||||
| Manage labels | | ✓ | ✓ | ✓ | ✓ |
|
||||
|
|
|
@ -6,7 +6,8 @@ For example from 7.14.0 to 7.14.3, also see the [semantic versioning specificati
|
|||
### 0. Backup
|
||||
|
||||
It's useful to make a backup just in case things go south:
|
||||
(With MySQL, this may require granting "LOCK TABLES" privileges to the GitLab user on the database version)
|
||||
(With MySQL, this may require granting "LOCK TABLES" privileges to the GitLab
|
||||
user on the database version)
|
||||
|
||||
```bash
|
||||
cd /home/git/gitlab
|
||||
|
@ -15,19 +16,23 @@ sudo -u git -H bundle exec rake gitlab:backup:create RAILS_ENV=production
|
|||
|
||||
### 1. Stop server
|
||||
|
||||
```bash
|
||||
sudo service gitlab stop
|
||||
```
|
||||
|
||||
### 2. Get latest code for the stable branch
|
||||
|
||||
In the commands below, replace `LATEST_TAG` with the latest GitLab tag you want
|
||||
to update to, for example `v8.0.3`. Use `git tag -l 'v*.[0-9]' --sort='v:refname'`
|
||||
to see a list of all tags. Make sure to update patch versions only (check your
|
||||
current version with `cat VERSION`).
|
||||
|
||||
```bash
|
||||
cd /home/git/gitlab
|
||||
sudo -u git -H git fetch --all
|
||||
sudo -u git -H git checkout -- Gemfile.lock db/schema.rb
|
||||
sudo -u git -H git checkout LATEST_TAG -b LATEST_TAG
|
||||
```
|
||||
Replace `LATEST_TAG` with the latest GitLab tag you want to update to, for example `v8.0.3`.
|
||||
Use `git tag -l 'v*.[0-9]' --sort='v:refname'` to see a list of all tags.
|
||||
Make sure to update patch versions only (check your current version with `cat VERSION`)
|
||||
|
||||
### 3. Update gitlab-shell to the corresponding version
|
||||
|
||||
|
@ -37,7 +42,15 @@ sudo -u git -H git fetch
|
|||
sudo -u git -H git checkout v`cat /home/git/gitlab/GITLAB_SHELL_VERSION` -b v`cat /home/git/gitlab/GITLAB_SHELL_VERSION`
|
||||
```
|
||||
|
||||
### 4. Install libs, migrations, etc.
|
||||
### 4. Update gitlab-workhorse to the corresponding version
|
||||
|
||||
```bash
|
||||
cd /home/git/gitlab-workhorse
|
||||
sudo -u git -H git fetch
|
||||
sudo -u git -H git checkout v`cat /home/git/gitlab/GITLAB_WORKHORSE_VERSION` -b v`cat /home/git/gitlab/GITLAB_WORKHORSE_VERSION`
|
||||
```
|
||||
|
||||
### 5. Install libs, migrations, etc.
|
||||
|
||||
```bash
|
||||
cd /home/git/gitlab
|
||||
|
@ -52,19 +65,25 @@ sudo -u git -H bundle exec rake db:migrate RAILS_ENV=production
|
|||
sudo -u git -H bundle exec rake assets:clean assets:precompile cache:clear RAILS_ENV=production
|
||||
```
|
||||
|
||||
### 5. Start application
|
||||
### 6. Start application
|
||||
|
||||
```bash
|
||||
sudo service gitlab start
|
||||
sudo service nginx restart
|
||||
```
|
||||
|
||||
### 6. Check application status
|
||||
### 7. Check application status
|
||||
|
||||
Check if GitLab and its environment are configured correctly:
|
||||
|
||||
```bash
|
||||
sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production
|
||||
```
|
||||
|
||||
To make sure you didn't miss anything run a more thorough check with:
|
||||
|
||||
```bash
|
||||
sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=production
|
||||
```
|
||||
|
||||
If all items are green, then congratulations upgrade complete!
|
||||
|
|
|
@ -17,7 +17,7 @@ class Spinach::Features::AdminIssuesLabels < Spinach::FeatureSteps
|
|||
|
||||
step 'I remove label \'bug\'' do
|
||||
page.within "#label_#{bug_label.id}" do
|
||||
click_link 'Remove'
|
||||
click_link 'Delete'
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ class Spinach::Features::ProjectIssuesLabels < Spinach::FeatureSteps
|
|||
|
||||
step 'I remove label \'bug\'' do
|
||||
page.within "#label_#{bug_label.id}" do
|
||||
click_link 'Remove'
|
||||
click_link 'Delete'
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -63,7 +63,7 @@ class Spinach::Features::ProjectIssuesMilestones < Spinach::FeatureSteps
|
|||
end
|
||||
|
||||
step 'I click link to remove milestone' do
|
||||
click_link 'Remove'
|
||||
click_link 'Delete'
|
||||
end
|
||||
|
||||
step 'I should see no milestones' do
|
||||
|
|
|
@ -87,7 +87,7 @@ class Spinach::Features::ProjectSourceBrowseFiles < Spinach::FeatureSteps
|
|||
end
|
||||
|
||||
step 'I click link "Diff"' do
|
||||
click_link 'Preview changes'
|
||||
click_link 'Preview Changes'
|
||||
end
|
||||
|
||||
step 'I click on "Commit Changes"' do
|
||||
|
@ -192,7 +192,7 @@ class Spinach::Features::ProjectSourceBrowseFiles < Spinach::FeatureSteps
|
|||
end
|
||||
|
||||
step 'I see Browse dir link' do
|
||||
expect(page).to have_link 'Browse Dir »'
|
||||
expect(page).to have_link 'Browse Directory »'
|
||||
expect(page).not_to have_link 'Browse Code »'
|
||||
end
|
||||
|
||||
|
@ -204,13 +204,13 @@ class Spinach::Features::ProjectSourceBrowseFiles < Spinach::FeatureSteps
|
|||
|
||||
step 'I see Browse file link' do
|
||||
expect(page).to have_link 'Browse File »'
|
||||
expect(page).not_to have_link 'Browse Code »'
|
||||
expect(page).not_to have_link 'Browse Files »'
|
||||
end
|
||||
|
||||
step 'I see Browse code link' do
|
||||
expect(page).to have_link 'Browse Code »'
|
||||
expect(page).to have_link 'Browse Files »'
|
||||
expect(page).not_to have_link 'Browse File »'
|
||||
expect(page).not_to have_link 'Browse Dir »'
|
||||
expect(page).not_to have_link 'Browse Directory »'
|
||||
end
|
||||
|
||||
step 'I click on Permalink' do
|
||||
|
|
|
@ -260,7 +260,7 @@ module Gitlab
|
|||
end
|
||||
|
||||
def link_to_project(object)
|
||||
if object && !object.projects.exists?(@project)
|
||||
if object && !object.projects.exists?(@project.id)
|
||||
object.projects << @project
|
||||
object.save
|
||||
end
|
||||
|
|
19
spec/controllers/admin/impersonation_controller_spec.rb
Normal file
19
spec/controllers/admin/impersonation_controller_spec.rb
Normal file
|
@ -0,0 +1,19 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Admin::ImpersonationController do
|
||||
let(:admin) { create(:admin) }
|
||||
|
||||
before do
|
||||
sign_in(admin)
|
||||
end
|
||||
|
||||
describe 'CREATE #impersonation when blocked' do
|
||||
let(:blocked_user) { create(:user, state: :blocked) }
|
||||
|
||||
it 'does not allow impersonation' do
|
||||
post :create, id: blocked_user.username
|
||||
|
||||
expect(flash[:alert]).to eq 'You cannot impersonate a blocked user'
|
||||
end
|
||||
end
|
||||
end
|
|
@ -128,6 +128,16 @@ describe "Admin::Users", feature: true do
|
|||
|
||||
expect(page).not_to have_content('Impersonate')
|
||||
end
|
||||
|
||||
it 'should not show impersonate button for blocked user' do
|
||||
another_user.block
|
||||
|
||||
visit admin_user_path(another_user)
|
||||
|
||||
expect(page).not_to have_content('Impersonate')
|
||||
|
||||
another_user.activate
|
||||
end
|
||||
end
|
||||
|
||||
context 'when impersonating' do
|
||||
|
|
|
@ -247,7 +247,7 @@ describe Notify do
|
|||
end
|
||||
|
||||
describe 'that have been reassigned' do
|
||||
subject { Notify.reassigned_issue_email(recipient.id, issue.id, previous_assignee.id, current_user) }
|
||||
subject { Notify.reassigned_issue_email(recipient.id, issue.id, previous_assignee.id, current_user.id) }
|
||||
|
||||
it_behaves_like 'a multiple recipients email'
|
||||
it_behaves_like 'an answer to an existing thread', 'issue'
|
||||
|
@ -278,7 +278,7 @@ describe Notify do
|
|||
|
||||
describe 'status changed' do
|
||||
let(:status) { 'closed' }
|
||||
subject { Notify.issue_status_changed_email(recipient.id, issue.id, status, current_user) }
|
||||
subject { Notify.issue_status_changed_email(recipient.id, issue.id, status, current_user.id) }
|
||||
|
||||
it_behaves_like 'an answer to an existing thread', 'issue'
|
||||
it_behaves_like 'it should show Gmail Actions View Issue link'
|
||||
|
@ -382,7 +382,7 @@ describe Notify do
|
|||
|
||||
describe 'status changed' do
|
||||
let(:status) { 'reopened' }
|
||||
subject { Notify.merge_request_status_email(recipient.id, merge_request.id, status, current_user) }
|
||||
subject { Notify.merge_request_status_email(recipient.id, merge_request.id, status, current_user.id) }
|
||||
|
||||
it_behaves_like 'an answer to an existing thread', 'merge_request'
|
||||
it_behaves_like 'it should show Gmail Actions View Merge request link'
|
||||
|
@ -597,9 +597,11 @@ describe Notify do
|
|||
let(:user) { create(:user, email: 'old-email@mail.com') }
|
||||
|
||||
before do
|
||||
perform_enqueued_jobs do
|
||||
user.email = "new-email@mail.com"
|
||||
user.save
|
||||
end
|
||||
end
|
||||
|
||||
subject { ActionMailer::Base.deliveries.last }
|
||||
|
||||
|
|
|
@ -444,7 +444,9 @@ describe Project do
|
|||
|
||||
before do
|
||||
2.times do
|
||||
create(:note_on_commit, project: project2, created_at: date)
|
||||
# Little fix for special issue related to Fractional Seconds support for MySQL.
|
||||
# See: https://github.com/rails/rails/pull/14359/files
|
||||
create(:note_on_commit, project: project2, created_at: date + 1)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue