Merge branch 'master' of dev.gitlab.org:gitlab/gitlabhq into ee-7-4

Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>

Conflicts:
	app/helpers/merge_requests_helper.rb
	doc/update/README.md
	lib/gitlab/reference_extractor.rb
This commit is contained in:
Dmitriy Zaporozhets
2014-10-03 16:18:40 +03:00
202 changed files with 654 additions and 468 deletions
+3
View File
@@ -12,6 +12,9 @@ v 7.4.0
- API: Add support for forking a project via the API (Bernhard Kaindl)
- API: filter project issues by milestone (Julien Bianchi)
- Fail harder in the backup script
- Zen mode for wiki and milestones (Robert Schilling)
- Move Emoji parsing to html-pipeline-gitlab (Robert Schilling)
- Font Awesome 4.2 integration (Sullivan Senechal)
v 7.3.2
- Fix creating new file via web editor
+2 -2
View File
@@ -90,7 +90,7 @@ gem "github-markup"
gem 'redcarpet', '~> 3.1.2'
gem 'RedCloth'
gem 'rdoc', '~>3.6'
gem 'org-ruby'
gem 'org-ruby', '= 0.9.9'
gem 'creole', '~>0.3.6'
gem 'wikicloth', '=0.8.1'
gem 'asciidoctor', '= 0.1.4'
@@ -181,7 +181,7 @@ gem "jquery-ui-rails"
gem "jquery-scrollto-rails"
gem "raphael-rails", "~> 2.1.2"
gem 'bootstrap-sass', '~> 3.0'
gem "font-awesome-rails", '~> 3.2'
gem "font-awesome-rails", '~> 4.2'
gem "gitlab_emoji", "~> 0.0.1.1"
gem "gon", '~> 5.0.0'
gem 'nprogress-rails'
+4 -4
View File
@@ -152,7 +152,7 @@ GEM
net-ssh (>= 2.1.3)
fog-json (1.0.0)
multi_json (~> 1.0)
font-awesome-rails (3.2.1.3)
font-awesome-rails (4.2.0.0)
railties (>= 3.2, < 5.0)
foreman (0.63.0)
dotenv (>= 0.7)
@@ -332,7 +332,7 @@ GEM
omniauth-twitter (1.0.1)
multi_json (~> 1.3)
omniauth-oauth (~> 1.0)
org-ruby (0.9.8)
org-ruby (0.9.9)
rubypants (~> 0.2)
orm_adapter (0.5.0)
pg (0.15.1)
@@ -614,7 +614,7 @@ DEPENDENCIES
factory_girl_rails
ffaker
fog (~> 1.14)
font-awesome-rails (~> 3.2)
font-awesome-rails (~> 4.2)
foreman
gemnasium-gitlab-service (~> 0.2)
github-markup
@@ -656,7 +656,7 @@ DEPENDENCIES
omniauth-google-oauth2
omniauth-shibboleth
omniauth-twitter
org-ruby
org-ruby (= 0.9.9)
pg
poltergeist (~> 1.5.1)
pry
+2 -2
View File
@@ -172,8 +172,8 @@ $ ->
# Show/hide comments on diff
$("body").on "click", ".js-toggle-diff-comments", (e) ->
$(@).find('i').
toggleClass('icon-chevron-down').
toggleClass('icon-chevron-up')
toggleClass('fa fa-chevron-down').
toggleClass('fa fa-chevron-up')
$(@).closest(".diff-file").find(".notes_holder").toggle()
e.preventDefault()
@@ -8,7 +8,7 @@ $ ->
#
$("body").on "click", ".js-toggle-button", (e) ->
$(@).find('i').
toggleClass('icon-chevron-down').
toggleClass('icon-chevron-up')
toggleClass('fa fa-chevron-down').
toggleClass('fa fa-chevron-up')
$(@).closest(".js-toggle-container").find(".js-toggle-content").toggle()
e.preventDefault()
@@ -27,6 +27,8 @@ class Dispatcher
new ZenMode()
when 'projects:milestones:show'
new Milestone()
when 'projects:milestones:new'
new ZenMode()
when 'projects:issues:new','projects:issues:edit'
GitLab.GfmAutoComplete.setup()
shortcut_handler = new ShortcutsNavigation()
@@ -87,6 +89,7 @@ class Dispatcher
when 'wikis'
new Wikis()
shortcut_handler = new ShortcutsNavigation()
new ZenMode()
when 'snippets', 'labels', 'graphs'
shortcut_handler = new ShortcutsNavigation()
when 'team_members', 'deploy_keys', 'hooks', 'services', 'protected_branches'
@@ -7,8 +7,8 @@ $(document).ready ->
divHover = "<div class=\"div-dropzone-hover\"></div>"
divSpinner = "<div class=\"div-dropzone-spinner\"></div>"
divAlert = "<div class=\"" + alertClass + "\"></div>"
iconPicture = "<i class=\"icon-picture div-dropzone-icon\"></i>"
iconSpinner = "<i class=\"icon-spinner icon-spin div-dropzone-icon\"></i>"
iconPicture = "<i class=\"fa fa-picture-o div-dropzone-icon\"></i>"
iconSpinner = "<i class=\"fa fa-spinner fa-spin div-dropzone-icon\"></i>"
btnAlert = "<button type=\"button\"" + alertAttr + ">&times;</button>"
project_image_path_upload = window.project_image_path_upload or null
@@ -15,7 +15,7 @@ class MergeRequest
modal = $('#modal_merge_info').modal(show: false)
disableButtonIfEmptyField '#merge_commit_message', '.accept_merge_request'
disableButtonIfEmptyField '#commit_message', '.accept_merge_request'
# Local jQuery finder
@@ -40,6 +40,8 @@ class MergeRequest
if @opts.ci_enable
$.get @opts.url_to_ci_check, (data) =>
this.showCiState data.status
if data.coverage
this.showCiCoverage data.coverage
, 'json'
bindEvents: ->
@@ -102,7 +104,11 @@ class MergeRequest
when "running", "pending"
$('.mr-state-widget').addClass("panel-warning")
showCiCoverage: (coverage) ->
cov_html = $('<span>')
cov_html.addClass('ci-coverage')
cov_html.text('Coverage ' + coverage + '%')
$('.ci_widget:visible').append(cov_html)
loadDiff: (event) ->
$.ajax
+20
View File
@@ -0,0 +1,20 @@
/**
* Styles that apply to all GFM related forms.
*/
.issue-form, .merge-request-form, .wiki-form {
.description {
height: 20em;
}
}
.wiki-form {
.description {
height: 26em;
}
}
.milestone-form {
.description {
height: 14em;
}
}
@@ -1,9 +0,0 @@
/**
* Styles that apply to both issues and merge requests.
*/
.issue-form, .merge-request-form {
.description {
height: 20em;
}
}
+1 -1
View File
@@ -124,7 +124,7 @@ $list-group-active-bg: $bg_primary;
color: #888;
text-shadow: 0 1px 1px #fff;
}
i[class^="icon-"] {
i[class~="fa"] {
line-height: 14px;
}
}
@@ -113,6 +113,10 @@
margin-bottom: 0;
}
}
.ci-coverage {
float: right;
}
}
.merge-request-show-labels .label {
+1 -2
View File
@@ -119,8 +119,7 @@ ul.notes {
display: none;
float: right;
[class^="icon-"],
[class*="icon-"] {
[class~="fa"] {
font-size: 16px;
line-height: 16px;
vertical-align: middle;
+1 -1
View File
@@ -62,7 +62,7 @@ class ApplicationController < ActionController::Base
end
end
def after_sign_in_path_for resource
def after_sign_in_path_for(resource)
if resource.is_a?(User) && resource.respond_to?(:blocked?) && resource.blocked?
sign_out resource
flash[:alert] = "Your account is blocked. Retry when an admin has unblocked it."
@@ -0,0 +1,17 @@
class ConfirmationsController < Devise::ConfirmationsController
protected
def after_confirmation_path_for(resource_name, resource)
if signed_in?(resource_name)
signed_in_root_path(resource)
else
sign_in(resource)
if signed_in?(resource_name)
signed_in_root_path(resource)
else
new_session_path(resource_name)
end
end
end
end
@@ -122,7 +122,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController
if @merge_request.open? && @merge_request.can_be_merged?
@merge_request.should_remove_source_branch = params[:should_remove_source_branch]
@merge_request.automerge!(current_user, params[:merge_commit_message])
@merge_request.automerge!(current_user, params[:commit_message])
@status = true
else
@status = false
@@ -150,8 +150,17 @@ class Projects::MergeRequestsController < Projects::ApplicationController
end
def ci_status
status = @merge_request.source_project.ci_service.commit_status(merge_request.last_commit.sha)
response = {status: status}
ci_service = @merge_request.source_project.ci_service
status = ci_service.commit_status(merge_request.last_commit.sha)
if ci_service.respond_to?(:commit_coverage)
coverage = ci_service.commit_coverage(merge_request.last_commit.sha)
end
response = {
status: status,
coverage: coverage
}
render json: response
end
+2 -2
View File
@@ -15,11 +15,11 @@ class RegistrationsController < Devise::RegistrationsController
super
end
def after_sign_up_path_for resource
def after_sign_up_path_for(resource)
new_user_session_path
end
def after_inactive_sign_up_path_for resource
def after_inactive_sign_up_path_for(resource)
new_user_session_path
end
+1 -1
View File
@@ -229,7 +229,7 @@ module ApplicationHelper
css_class << " hide" unless visible
content_tag :div, class: css_class do
content_tag(:i, nil, class: 'icon-spinner icon-spin') + text
content_tag(:i, nil, class: 'fa fa-spinner fa-spin') + text
end
end
+5 -5
View File
@@ -19,7 +19,7 @@ module EventsHelper
[event.action_name, target].join(" ")
end
def event_filter_link key, tooltip
def event_filter_link(key, tooltip)
key = key.to_s
inactive = if @event_filter.active? key
nil
@@ -36,10 +36,10 @@ module EventsHelper
def icon_for_event
{
EventFilter.push => "icon-upload-alt",
EventFilter.merged => "icon-check",
EventFilter.comments => "icon-comments",
EventFilter.team => "icon-user",
EventFilter.push => 'fa fa-upload',
EventFilter.merged => 'fa fa-check-square-o',
EventFilter.comments => 'fa fa-comments',
EventFilter.team => 'fa fa-user',
}
end
+5 -5
View File
@@ -1,21 +1,21 @@
module IconsHelper
def boolean_to_icon(value)
if value.to_s == "true"
content_tag :i, nil, class: 'icon-circle cgreen'
content_tag :i, nil, class: 'fa fa-circle cgreen'
else
content_tag :i, nil, class: 'icon-off clgray'
content_tag :i, nil, class: 'fa fa-power-off clgray'
end
end
def public_icon
content_tag :i, nil, class: 'icon-globe'
content_tag :i, nil, class: 'fa fa-globe'
end
def internal_icon
content_tag :i, nil, class: 'icon-shield'
content_tag :i, nil, class: 'fa fa-shield'
end
def private_icon
content_tag :i, nil, class: 'icon-lock'
content_tag :i, nil, class: 'fa fa-lock'
end
end
+2 -2
View File
@@ -1,5 +1,5 @@
module IssuesHelper
def issue_css_classes issue
def issue_css_classes(issue)
classes = "issue"
classes << " closed" if issue.closed?
classes << " today" if issue.today?
@@ -84,7 +84,7 @@ module IssuesHelper
'id', 'name', object.assignee_id)
end
def milestone_options object
def milestone_options(object)
options_from_collection_for_select(object.project.milestones.active,
'id', 'title', object.milestone_id)
end
+1 -1
View File
@@ -24,7 +24,7 @@ module MergeRequestsHelper
}
end
def mr_css_classes mr
def mr_css_classes(mr)
classes = "merge-request"
classes << " closed" if mr.closed?
classes << " merged" if mr.merged?
+1 -1
View File
@@ -69,7 +69,7 @@ module NotesHelper
button_tag class: 'btn reply-btn js-discussion-reply-button',
data: data, title: 'Add a reply' do
link_text = content_tag(:i, nil, class: 'icon-comment')
link_text = content_tag(:i, nil, class: 'fa fa-comment')
link_text << ' Reply'
end
end
+4 -4
View File
@@ -1,13 +1,13 @@
module NotificationsHelper
def notification_icon(notification)
if notification.disabled?
content_tag :i, nil, class: 'icon-volume-off ns-mute'
content_tag :i, nil, class: 'fa fa-volume-off ns-mute'
elsif notification.participating?
content_tag :i, nil, class: 'icon-volume-down ns-part'
content_tag :i, nil, class: 'fa fa-volume-down ns-part'
elsif notification.watch?
content_tag :i, nil, class: 'icon-volume-up ns-watch'
content_tag :i, nil, class: 'fa fa-volume-up ns-watch'
else
content_tag :i, nil, class: 'icon-circle-blank ns-default'
content_tag :i, nil, class: 'fa fa-circle-o ns-default'
end
end
end
+1 -1
View File
@@ -1,5 +1,5 @@
module ProfileHelper
def oauth_active_class provider
def oauth_active_class(provider)
if current_user.provider == provider.to_s
'active'
end
+4 -4
View File
@@ -3,7 +3,7 @@ module ProjectsHelper
"You are going to remove #{user.name} from #{project.name} project team. Are you sure?"
end
def link_to_project project
def link_to_project(project)
link_to project do
title = content_tag(:span, project.name, class: 'project-name')
@@ -39,7 +39,7 @@ module ProjectsHelper
end
end
def project_title project
def project_title(project)
if project.group
content_tag :span do
link_to(simple_sanitize(project.group.name), group_path(project.group)) + " / " + project.name
@@ -133,7 +133,7 @@ module ProjectsHelper
'Star'
end
content_tag('i', ' ', class: 'icon-star') + toggle_text
content_tag('i', ' ', class: 'fa fa-star') + toggle_text
end
count_html = content_tag('span', class: 'count') do
@@ -157,7 +157,7 @@ module ProjectsHelper
end
def link_to_toggle_fork
out = content_tag(:i, '', class: 'icon-code-fork')
out = content_tag(:i, '', class: 'fa fa-code-fork')
out << ' Fork'
out << content_tag(:span, class: 'count') do
@project.forks_count.to_s
+1 -1
View File
@@ -89,7 +89,7 @@ module TabHelper
end
# Use nav_tab for save controller/action but different params
def nav_tab key, value, &block
def nav_tab(key, value, &block)
o = {}
o[:class] = ""
+2 -2
View File
@@ -1,9 +1,9 @@
module TagsHelper
def tag_path tag
def tag_path(tag)
"/tags/#{tag}"
end
def tag_list project
def tag_list(project)
html = ''
project.tag_list.each do |tag|
html += link_to tag, tag_path(tag)
+3 -3
View File
@@ -36,9 +36,9 @@ module TreeHelper
# type - String type of the tree item; either 'folder' or 'file'
def tree_icon(type)
icon_class = if type == 'folder'
'icon-folder-close'
'fa fa-folder'
else
'icon-file-alt'
'fa fa-file-o'
end
content_tag :i, nil, class: icon_class
@@ -80,7 +80,7 @@ module TreeHelper
end
end
def up_dir_path tree
def up_dir_path(tree)
file = File.join(@path, "..")
tree_join(@ref, file)
end
+2 -2
View File
@@ -184,7 +184,7 @@ class Ability
]
end
def group_abilities user, group
def group_abilities(user, group)
rules = []
if user.admin? || group.users.include?(user) || ProjectsFinder.new.execute(user, group: group).any?
@@ -209,7 +209,7 @@ class Ability
rules.flatten
end
def namespace_abilities user, namespace
def namespace_abilities(user, namespace)
rules = []
# Only namespace owner and administrators can manage it
+16 -1
View File
@@ -88,9 +88,24 @@ class Commit
description.present?
end
def hook_attrs(project)
path_with_namespace = project.path_with_namespace
{
id: id,
message: safe_message,
timestamp: committed_date.xmlschema,
url: "#{Gitlab.config.gitlab.url}/#{path_with_namespace}/commit/#{id}",
author: {
name: author_name,
email: author_email
}
}
end
# Discover issues should be closed when this commit is pushed to a project's
# default branch.
def closes_issues project
def closes_issues(project)
Gitlab::ClosingIssueExtractor.closed_by_message_in_project(safe_message, project)
end
+1 -1
View File
@@ -134,7 +134,7 @@ module Issuable
def to_hook_data
{
object_kind: self.class.name.underscore,
object_attributes: self.attributes
object_attributes: hook_attrs
}
end
+5 -5
View File
@@ -10,7 +10,7 @@ module Mentionable
module ClassMethods
# Indicate which attributes of the Mentionable to search for GFM references.
def attr_mentionable *attrs
def attr_mentionable(*attrs)
mentionable_attrs.concat(attrs.map(&:to_s))
end
@@ -38,7 +38,7 @@ module Mentionable
# Determine whether or not a cross-reference Note has already been created between this Mentionable and
# the specified target.
def has_mentioned? target
def has_mentioned?(target)
Note.cross_reference_exists?(target, local_reference)
end
@@ -64,7 +64,7 @@ module Mentionable
end
# Extract GFM references to other Mentionables from this Mentionable. Always excludes its #local_reference.
def references p = project, text = mentionable_text
def references(p = project, text = mentionable_text)
return [] if text.blank?
ext = Gitlab::ReferenceExtractor.new
ext.analyze(text)
@@ -73,7 +73,7 @@ module Mentionable
end
# Create a cross-reference Note for each GFM reference to another Mentionable found in +mentionable_text+.
def create_cross_references! p = project, a = author, without = []
def create_cross_references!(p = project, a = author, without = [])
refs = references(p) - without
refs.each do |ref|
Note.create_cross_reference_note(ref, local_reference, a, p)
@@ -82,7 +82,7 @@ module Mentionable
# If the mentionable_text field is about to change, locate any *added* references and create cross references for
# them. Invoke from an observer's #before_save implementation.
def notice_added_references p = project, a = author
def notice_added_references(p = project, a = author)
ch = changed_attributes
original, mentionable_changed = "", false
self.class.mentionable_attrs.each do |attr|
+1
View File
@@ -21,6 +21,7 @@ class WebHook < ActiveRecord::Base
default_value_for :push_events, true
default_value_for :issues_events, false
default_value_for :merge_requests_events, false
default_value_for :tag_push_events, false
# HTTParty timeout
default_timeout Gitlab.config.gitlab.webhook_timeout
+4
View File
@@ -48,6 +48,10 @@ class Issue < ActiveRecord::Base
state :closed
end
def hook_attrs
attributes
end
# Mentionable overrides.
def gfm_reference
+1 -1
View File
@@ -77,7 +77,7 @@ class ProjectMember < Member
false
end
def truncate_team project
def truncate_team(project)
truncate_teams [project.id]
end
+14
View File
@@ -211,6 +211,20 @@ class MergeRequest < ActiveRecord::Base
Gitlab::Satellite::MergeAction.new(current_user, self).format_patch
end
def hook_attrs
attrs = {
source: source_project.hook_attrs,
target: target_project.hook_attrs,
last_commit: nil
}
unless last_commit.nil?
attrs.merge!(last_commit: last_commit.hook_attrs(source_project))
end
attributes.merge!(attrs)
end
def for_fork?
target_project != source_project
end
+1 -1
View File
@@ -38,7 +38,7 @@ class Namespace < ActiveRecord::Base
scope :root, -> { where('type IS NULL') }
def self.search query
def self.search(query)
where("name LIKE :query OR path LIKE :query", query: "%#{query}%")
end
+1 -1
View File
@@ -6,7 +6,7 @@ module Network
@max_count ||= 650
end
def initialize project, ref, commit, filter_ref
def initialize(project, ref, commit, filter_ref)
@project = project
@ref = ref
@commit = commit
+12 -2
View File
@@ -346,7 +346,7 @@ class Project < ActiveRecord::Base
path
end
def items_for entity
def items_for(entity)
case entity
when 'issue' then
issues
@@ -519,7 +519,7 @@ class Project < ActiveRecord::Base
end
# Check if current branch name is marked as protected in the system
def protected_branch? branch_name
def protected_branch?(branch_name)
protected_branches_names.include?(branch_name)
end
@@ -559,6 +559,16 @@ class Project < ActiveRecord::Base
end
end
def hook_attrs
{
name: name,
ssh_url: ssh_url_to_repo,
http_url: http_url_to_repo,
namespace: namespace.name,
visibility_level: visibility_level
}
end
# Reset events cache related to this project
#
# Since we do cache @event we need to reset cache in special cases:
@@ -27,12 +27,17 @@ class GitlabCiService < CiService
hook.save
end
def commit_status_path sha
def commit_status_path(sha)
project_url + "/builds/#{sha}/status.json?token=#{token}"
end
def commit_status sha
response = HTTParty.get(commit_status_path(sha), verify: false)
def get_ci_build(sha)
@ci_builds ||= {}
@ci_builds[sha] ||= HTTParty.get(commit_status_path(sha), verify: false)
end
def commit_status(sha)
response = get_ci_build(sha)
if response.code == 200 and response["status"]
response["status"]
@@ -41,7 +46,15 @@ class GitlabCiService < CiService
end
end
def build_page sha
def commit_coverage(sha)
response = get_ci_build(sha)
if response.code == 200 and response["coverage"]
response["coverage"]
end
end
def build_page(sha)
project_url + "/builds/#{sha}"
end
+1 -1
View File
@@ -11,7 +11,7 @@ class ProjectTeam
# @team << [@user, :master]
# @team << [@users, :master]
#
def << args
def <<(args)
users = args.first
if users.respond_to?(:each)
+7 -7
View File
@@ -204,7 +204,7 @@ class User < ActiveRecord::Base
User.where(name: name).first
end
def filter filter_name
def filter(filter_name)
case filter_name
when "admins"; self.admins
when "blocked"; self.blocked
@@ -214,7 +214,7 @@ class User < ActiveRecord::Base
end
end
def search query
def search(query)
where("lower(name) LIKE :query OR lower(email) LIKE :query OR lower(username) LIKE :query", query: "%#{query.downcase}%")
end
@@ -334,7 +334,7 @@ class User < ActiveRecord::Base
several_namespaces? || admin
end
def can? action, subject
def can?(action, subject)
abilities.allowed?(self, action, subject)
end
@@ -355,7 +355,7 @@ class User < ActiveRecord::Base
(personal_projects.count.to_f / projects_limit) * 100
end
def recent_push project_id = nil
def recent_push(project_id = nil)
# Get push events not earlier than 2 hours ago
events = recent_events.code_push.where("created_at > ?", Time.now - 2.hours)
events = events.where(project_id: project_id) if project_id
@@ -384,11 +384,11 @@ class User < ActiveRecord::Base
project.team_member_by_id(self.id)
end
def already_forked? project
def already_forked?(project)
!!fork_of(project)
end
def fork_of project
def fork_of(project)
links = ForkedProjectLink.where(forked_from_project_id: project, forked_to_project_id: personal_projects)
if links.any?
@@ -514,7 +514,7 @@ class User < ActiveRecord::Base
NotificationService.new
end
def log_info message
def log_info(message)
Gitlab::AppLogger.info message
end
+1 -1
View File
@@ -25,7 +25,7 @@ class BaseService
EventCreateService.new
end
def log_info message
def log_info(message)
Gitlab::AppLogger.info message
end
+8 -17
View File
@@ -75,7 +75,7 @@ class GitPushService
# Extract any GFM references from the pushed commit messages. If the configured issue-closing regex is matched,
# close the referenced Issue. Create cross-reference Notes corresponding to any other referenced Mentionables.
def process_commit_messages ref
def process_commit_messages(ref)
is_default_branch = is_default_branch?(ref)
@push_commits.each do |commit|
@@ -154,49 +154,40 @@ class GitPushService
# will be passed as post receive hook data.
#
push_commits_limited.each do |commit|
data[:commits] << {
id: commit.id,
message: commit.safe_message,
timestamp: commit.committed_date.xmlschema,
url: "#{Gitlab.config.gitlab.url}/#{project.path_with_namespace}/commit/#{commit.id}",
author: {
name: commit.author_name,
email: commit.author_email
}
}
data[:commits] << commit.hook_attrs(project)
end
data
end
def push_to_existing_branch? ref, oldrev
def push_to_existing_branch?(ref, oldrev)
ref_parts = ref.split('/')
# Return if this is not a push to a branch (e.g. new commits)
ref_parts[1] =~ /heads/ && oldrev != "0000000000000000000000000000000000000000"
end
def push_to_new_branch? ref, oldrev
def push_to_new_branch?(ref, oldrev)
ref_parts = ref.split('/')
ref_parts[1] =~ /heads/ && oldrev == "0000000000000000000000000000000000000000"
end
def push_remove_branch? ref, newrev
def push_remove_branch?(ref, newrev)
ref_parts = ref.split('/')
ref_parts[1] =~ /heads/ && newrev == "0000000000000000000000000000000000000000"
end
def push_to_branch? ref
def push_to_branch?(ref)
ref =~ /refs\/heads/
end
def is_default_branch? ref
def is_default_branch?(ref)
ref == "refs/heads/#{project.default_branch}"
end
def commit_user commit
def commit_user(commit)
User.find_for_commit(commit.author_email, commit.author_name) || user
end
end
@@ -8,7 +8,7 @@
.panel-body
- if @sidekiq_processes.empty?
%h4.cred
%i.icon-warning-sign
%i.fa.fa-exclamation-triangle
There are no running sidekiq processes. Please restart GitLab
- else
%table.table
@@ -32,10 +32,10 @@
.clearfix
%p
%i.icon-exclamation-sign
%i.fa.fa-exclamation-circle
If '[25 of 25 busy]' is shown, restart GitLab with 'sudo service gitlab reload'.
%p
%i.icon-exclamation-sign
%i.fa.fa-exclamation-circle
If more than one sidekiq process is listed, stop GitLab, kill the remaining sidekiq processes (sudo pkill -u #{Settings.gitlab.user} -f sidekiq) and restart GitLab.
@@ -3,7 +3,7 @@
%p.light
Broadcast messages are displayed for every user and can be used to notify users about scheduled maintenance, recent upgrades and more.
.broadcast-message-preview
%i.icon-bullhorn
%i.fa.fa-bullhorn
%span Your message here
= form_for [:admin, @broadcast_message], html: { class: 'broadcast-message-form form-horizontal'} do |f|
@@ -53,7 +53,7 @@
#{broadcast_message.ends_at.to_s(:short)}
&nbsp;
= link_to [:admin, broadcast_message], method: :delete, remote: true, class: 'remove-row btn btn-tiny' do
%i.icon-remove.cred
%i.fa.fa-times.cred
.message= broadcast_message.message
+1 -1
View File
@@ -17,7 +17,7 @@
= f.label :avatar, "Group avatar", class: 'control-label'
.col-sm-10
%a.choose-btn.btn.btn-small.js-choose-group-avatar-button
%i.icon-paper-clip
%i.fa.fa-paperclip
%span Choose File ...
&nbsp;
%span.file_name.js-avatar-filename File name...
+1 -1
View File
@@ -24,7 +24,7 @@
%h4
= link_to [:admin, group] do
%i.icon-folder-close
%i.fa.fa-folder
= group.name
&rarr;
+2 -2
View File
@@ -2,7 +2,7 @@
Group: #{@group.name}
= link_to edit_admin_group_path(@group), class: "btn pull-right" do
%i.icon-edit
%i.fa.fa-pencil-square-o
Edit
%hr
.row
@@ -108,6 +108,6 @@
%span.pull-right.light
= member.human_access
= link_to group_group_members_path(@group, member), data: { confirm: remove_user_from_group_message(@group, user) }, method: :delete, remote: true, class: "btn-tiny btn btn-remove", title: 'Remove user from group' do
%i.icon-minus.icon-white
%i.fa.fa-minus.fa-inverse
.panel-footer
= paginate @members, param_name: 'members_page', theme: 'gitlab'
+8 -8
View File
@@ -13,11 +13,11 @@
.tab-pane.active#githost
.file-holder#README
.file-title
%i.icon-file
%i.fa.fa-file
githost.log
.pull-right
= link_to '#', class: 'log-bottom' do
%i.icon-arrow-down
%i.fa.fa-arrow-down
Scroll down
.file-content.logs
%ol
@@ -27,11 +27,11 @@
.tab-pane#application
.file-holder#README
.file-title
%i.icon-file
%i.fa.fa-file
application.log
.pull-right
= link_to '#', class: 'log-bottom' do
%i.icon-arrow-down
%i.fa.fa-arrow-down
Scroll down
.file-content.logs
%ol
@@ -41,11 +41,11 @@
.tab-pane#production
.file-holder#README
.file-title
%i.icon-file
%i.fa.fa-file
production.log
.pull-right
= link_to '#', class: 'log-bottom' do
%i.icon-arrow-down
%i.fa.fa-arrow-down
Scroll down
.file-content.logs
%ol
@@ -55,11 +55,11 @@
.tab-pane#sidekiq
.file-holder#README
.file-title
%i.icon-file
%i.fa.fa-file
sidekiq.log
.pull-right
= link_to '#', class: 'log-bottom' do
%i.icon-arrow-down
%i.fa.fa-arrow-down
Scroll down
.file-content.logs
%ol
+4 -4
View File
@@ -1,7 +1,7 @@
%h3.page-title
Project: #{@project.name_with_namespace}
= link_to edit_project_path(@project), class: "btn pull-right" do
%i.icon-edit
%i.fa.fa-pencil-square-o
Edit
%hr
.row
@@ -98,7 +98,7 @@
group members (#{@group.group_members.count})
.pull-right
= link_to admin_group_path(@group), class: 'btn btn-small' do
%i.icon-edit
%i.fa.fa-pencil-square-o
%ul.well-list
- @group_members.each do |member|
= render 'groups/group_members/group_member', member: member, show_controls: false
@@ -112,7 +112,7 @@
(#{@project.users.count})
.pull-right
= link_to project_team_index_path(@project), class: "btn btn-tiny" do
%i.icon-edit
%i.fa.fa-pencil-square-o
Manage Access
%ul.well-list.team_members
- @project_members.each do |project_member|
@@ -127,6 +127,6 @@
- else
%span.light= project_member.human_access
= link_to project_team_member_path(@project, user), data: { confirm: remove_from_project_team_message(@project, user)}, method: :delete, remote: true, class: "btn btn-small btn-remove" do
%i.icon-remove
%i.fa.fa-times
.panel-footer
= paginate @project_members, param_name: 'project_members_page', theme: 'gitlab'
+4 -4
View File
@@ -23,7 +23,7 @@
.form-group
= search_field_tag :name, params[:name], placeholder: 'Name, email or username', class: 'form-control'
= button_tag class: 'btn btn-primary' do
%i.icon-search
%i.fa.fa-search
%hr
= link_to 'Reset', admin_users_path, class: "btn btn-cancel"
@@ -39,9 +39,9 @@
%li
.list-item-name
- if user.blocked?
%i.icon-lock.cred
%i.fa.fa-lock.cred
- else
%i.icon-user.cgreen
%i.fa.fa-user.cgreen
= link_to user.name, [:admin, user]
- if user.admin?
%strong.cred (Admin)
@@ -49,7 +49,7 @@
%span.cred It's you!
.pull-right
%span.light
%i.icon-envelope
%i.fa.fa-envelope
= mail_to user.email, user.email, class: 'light'
&nbsp;
= link_to 'Edit', edit_admin_user_path(user), id: "edit_#{dom_id(user)}", class: "btn btn-small"
+10 -5
View File
@@ -8,7 +8,7 @@
.pull-right
= link_to edit_admin_user_path(@user), class: "btn btn-grouped" do
%i.icon-edit
%i.fa.fa-pencil-square-o
Edit
%hr
%ul.nav.nav-tabs
@@ -45,7 +45,7 @@
%span.light Secondary email:
%strong= email.email
= link_to remove_email_admin_user_path(@user, email), data: { confirm: "Are you sure you want to remove #{email.email}?" }, method: :delete, class: "btn-tiny btn btn-remove pull-right", title: 'Remove secondary email', id: "remove_email_#{email.id}" do
%i.icon-remove
%i.fa.fa-times
%li
%span.light Can create groups:
@@ -86,6 +86,11 @@
- else
never
%li
%span.light Sign-in count:
%strong
= @user.sign_in_count
- if @user.ldap_user?
%li
%span.light LDAP uid:
@@ -171,8 +176,8 @@
.pull-right
%span.light= user_group.human_access
- unless user_group.owner?
= link_to group_users_group_path(group, user_group), data: { confirm: remove_user_from_group_message(group, @user) }, method: :delete, remote: true, class: "btn-tiny btn btn-remove", title: 'Remove user from group' do
%i.icon-remove.icon-white
= link_to group_group_member_path(group, user_group), data: { confirm: remove_user_from_group_message(group, @user) }, method: :delete, remote: true, class: "btn-tiny btn btn-remove", title: 'Remove user from group' do
%i.fa.fa-times.fa-inverse
- else
.nothing-here-block This user has no groups.
@@ -211,4 +216,4 @@
- if tm.respond_to? :project
= link_to project_team_member_path(project, @user), data: { confirm: remove_from_project_team_message(project, @user) }, remote: true, method: :delete, class: "btn-tiny btn btn-remove", title: 'Remove user from project' do
%i.icon-remove
%i.fa.fa-times
+2 -2
View File
@@ -3,7 +3,7 @@
= search_field_tag :filter_group, nil, placeholder: 'Filter by name', class: 'dash-filter form-control'
- if current_user.can_create_group?
= link_to new_group_path, class: "btn btn-new pull-right" do
%i.icon-plus
%i.fa.fa-plus
New group
%ul.well-list.dash-list
- groups.each do |group|
@@ -13,7 +13,7 @@
%span.group-name.filter-title
= truncate(group.name, length: 35)
%span.arrow
%i.icon-angle-right
%i.fa.fa-angle-right
- if groups.blank?
%li
.nothing-here-block You have no groups yet.
+1 -1
View File
@@ -9,4 +9,4 @@
%span.project-name.filter-title
= project.name
%span.arrow
%i.icon-angle-right
%i.fa.fa-angle-right
+2 -2
View File
@@ -3,7 +3,7 @@
= search_field_tag :filter_projects, nil, placeholder: 'Filter by name', class: 'dash-filter form-control'
- if current_user.can_create_project?
= link_to new_project_path, class: "btn btn-new pull-right" do
%i.icon-plus
%i.fa.fa-plus
New project
%ul.well-list.dash-list
@@ -21,4 +21,4 @@
.pull-right
= link_to projects_dashboard_path do
Show all
%i.icon-angle-right
%i.fa.fa-angle-right
@@ -37,7 +37,7 @@
- @groups.each do |group|
%li{ class: (group.name == params[:group]) ? 'active' : 'light' }
= link_to projects_dashboard_filter_path(group: group.name) do
%i.icon-folder-close-alt
%i.fa.fa-folder-o
= group.name
%small.pull-right
= group.projects.count
@@ -51,5 +51,5 @@
- @tags.each do |tag|
%li{ class: (tag.name == params[:tag]) ? 'active' : 'light' }
= link_to projects_dashboard_filter_path(scope: params[:scope], tag: tag.name) do
%i.icon-tag
%i.fa.fa-tag
= tag.name
+1 -1
View File
@@ -18,7 +18,7 @@
%span.rss-icon
= link_to dashboard_path(:atom, { private_token: current_user.private_token }) do
%strong
%i.icon-rss
%i.fa.fa-rss
News Feed
%hr
@@ -3,7 +3,7 @@
%hr
%div
.dashboard-intro-icon
%i.icon-bookmark-empty
%i.fa.fa-bookmark-o
%div
%p.slead
You don't have access to any projects right now.
@@ -23,7 +23,7 @@
%hr
%div
.dashboard-intro-icon
%i.icon-group
%i.fa.fa-users
%div
%p.slead
You can create a group for several dependent projects.
@@ -37,7 +37,7 @@
%hr
%div
.dashboard-intro-icon
%i.icon-globe
%i.fa.fa-globe
%div
%p.slead
There are
+1 -1
View File
@@ -7,7 +7,7 @@
.row
.fixed.sidebar-expand-button.hidden-lg.hidden-md
%i.icon-list.icon-2x
%i.fa.fa-list.fa-2x
.col-md-3.responsive-side
= render 'shared/filter', entity: 'issue'
.col-md-9
+1 -1
View File
@@ -7,7 +7,7 @@
%hr
.row
.fixed.sidebar-expand-button.hidden-lg.hidden-md
%i.icon-list.icon-2x
%i.fa.fa-list.fa-2x
.col-md-3.responsive-side
= render 'shared/filter', entity: 'merge_request'
.col-md-9
+4 -4
View File
@@ -40,23 +40,23 @@
- if current_user.can_leave_project?(project)
.pull-right
= link_to leave_project_team_members_path(project), data: { confirm: "Leave project?"}, method: :delete, remote: true, class: "btn-tiny btn remove-row", title: 'Leave project' do
%i.icon-signout
%i.fa.fa-sign-out
Leave
- if project.forked_from_project
%small.pull-right
%i.icon-code-fork
%i.fa.fa-code-fork
Forked from:
= link_to project.forked_from_project.name_with_namespace, project_path(project.forked_from_project)
.project-info
.pull-right
- if project.archived?
%span.label
%i.icon-archive
%i.fa.fa-archive
Archived
- project.tags.each do |tag|
%span.label.label-info
%i.icon-tag
%i.fa.fa-tag
= tag.name
- if project.description.present?
%p= truncate project.description, length: 100
+1 -1
View File
@@ -6,7 +6,7 @@
= render 'sidebar'
.fixed.sidebar-expand-button.hidden-lg.hidden-md
%i.icon-list.icon-2x
%i.fa.fa-list.fa-2x
- else
= render "zero_authorized_projects"
+2 -2
View File
@@ -9,7 +9,7 @@
.event-body
.event-note
.md
%i.icon-comment-alt.event-note-icon
%i.fa.fa-comment-o.event-note-icon
= event_note(event.target.note)
- note = event.target
- if note.attachment.url
@@ -18,5 +18,5 @@
= image_tag note.attachment.secure_url, class: 'note-image-attach'
- else
= link_to note.attachment.secure_url, target: "_blank", class: 'note-file-attach' do
%i.icon-paper-clip
%i.fa.fa-paperclip
= note.attachment_identifier
+1 -1
View File
@@ -36,7 +36,7 @@
.clearfix
%h4
= link_to group_path(id: group.path) do
%i.icon-group
%i.fa.fa-users
= group.name
.clearfix
%p
@@ -21,5 +21,5 @@
&middot;
= link_to pluralize(project.repository.tag_names.count, 'tag'), project_tags_path(project)
- else
%i.icon-warning-sign
%i.fa.fa-exclamation-triangle
Empty repository
+1 -1
View File
@@ -1,6 +1,6 @@
.explore-trending-block
%p.lead
%i.icon-comments-alt
%i.fa.fa-comments-o
See most starred projects
%hr
.public-projects
@@ -1,6 +1,6 @@
.explore-trending-block
%p.lead
%i.icon-comments-alt
%i.fa.fa-comments-o
See most discussed projects for last month
%hr
.public-projects
+2 -2
View File
@@ -4,7 +4,7 @@
- if can? current_user, :create_projects, @group
.panel-head-actions
= link_to new_project_path(namespace_id: @group.id), class: "btn btn-new" do
%i.icon-plus
%i.fa.fa-plus
New project
%ul.well-list
- if projects.blank?
@@ -18,4 +18,4 @@
%span.project-name
= project.name
%span.arrow
%i.icon-angle-right
%i.fa.fa-angle-right
+2 -2
View File
@@ -1,11 +1,11 @@
%ul.nav.nav-pills.nav-stacked.nav-stacked-menu
= nav_link(path: 'groups#edit') do
= link_to edit_group_path(@group) do
%i.icon-edit
%i.fa.fa-pencil-square-o
Group
= nav_link(path: 'groups#projects') do
= link_to projects_group_path(@group) do
%i.icon-folder-close
%i.fa.fa-folder
Projects
= nav_link(controller: :ldap_group_links) do
= link_to group_ldap_group_links_path(@group) do
+1 -1
View File
@@ -31,7 +31,7 @@
- else
You can upload a group avatar here
%a.choose-btn.btn.btn-small.js-choose-group-avatar-button
%i.icon-paper-clip
%i.fa.fa-paperclip
%span Choose File ...
&nbsp;
%span.file_name.js-avatar-filename File name...
@@ -15,14 +15,14 @@
- if show_controls
- if can?(current_user, :modify, member)
= link_to '#', class: "btn-tiny btn js-toggle-button", title: 'Edit access level' do
%i.icon-edit
%i.fa.fa-pencil-square-o
- if can?(current_user, :destroy, member)
- if current_user == member.user
= link_to leave_profile_group_path(@group), data: { confirm: leave_group_message(@group.name)}, method: :delete, class: "btn-tiny btn btn-remove", title: 'Remove user from group' do
%i.icon-minus.icon-white
%i.fa.fa-minus.fa-inverse
- else
= link_to group_group_member_path(@group, member), data: { confirm: remove_user_from_group_message(@group, user) }, method: :delete, remote: true, class: "btn-tiny btn btn-remove", title: 'Remove user from group' do
%i.icon-minus.icon-white
%i.fa.fa-minus.fa-inverse
.edit-member.hide.js-toggle-content
= form_for [@group, member], remote: true do |f|
+1 -1
View File
@@ -11,7 +11,7 @@
.row
.fixed.sidebar-expand-button.hidden-lg.hidden-md
%i.icon-list.icon-2x
%i.fa.fa-list.fa-2x
.col-md-3.responsive-side
= render 'shared/filter', entity: 'issue'
.col-md-9
+1 -1
View File
@@ -23,7 +23,7 @@
= link_to '#', class: 'btn btn-new js-toggle-button' do
Add members
%i.icon-chevron-down
%i.fa.fa-chevron-down
.js-toggle-content.hide.new-group-member-holder
= render "new_group_member"
+1 -1
View File
@@ -10,7 +10,7 @@
%hr
.row
.fixed.sidebar-expand-button.hidden-lg.hidden-md
%i.icon-list.icon-2x
%i.fa.fa-list.fa-2x
.col-md-3.responsive-side
= render 'shared/filter', entity: 'merge_request'
.col-md-9
+1 -1
View File
@@ -11,7 +11,7 @@
.row
.fixed.sidebar-expand-button.hidden-lg.hidden-md
%i.icon-list.icon-2x
%i.fa.fa-list.fa-2x
.col-md-3.responsive-side
= render 'groups/filter', entity: 'milestone'
.col-md-9
+1 -1
View File
@@ -17,7 +17,7 @@
= f.label :avatar, "Group avatar", class: 'control-label'
.col-sm-10
%a.choose-btn.btn.btn-small.js-choose-group-avatar-button
%i.icon-paper-clip
%i.fa.fa-paperclip
%span Choose File ...
&nbsp;
%span.file_name.js-avatar-filename File name...
+1 -1
View File
@@ -9,7 +9,7 @@
- if can? current_user, :manage_group, @group
.panel-head-actions
= link_to new_project_path(namespace_id: @group.id), class: "btn btn-new" do
%i.icon-plus
%i.fa.fa-plus
New Project
%ul.well-list
- @projects.each do |project|
+1 -1
View File
@@ -33,7 +33,7 @@
.prepend-top-20
= link_to group_path(@group, { format: :atom, private_token: current_user.private_token }), title: "Feed" do
%strong
%i.icon-rss
%i.fa.fa-rss
News Feed
%hr
+8 -8
View File
@@ -29,12 +29,12 @@
%tr
%td.shortcut
.key
%i.icon-arrow-up
%i.fa.fa-arrow-up
%td Move selection up
%tr
%td.shortcut
.key
%i.icon-arrow-down
%i.fa.fa-arrow-down
%td Move selection down
%tr
%td.shortcut
@@ -132,28 +132,28 @@
%tr
%td.shortcut
.key
%i.icon-arrow-left
%i.fa.fa-arrow-left
\/
.key h
%td Scroll left
%tr
%td.shortcut
.key
%i.icon-arrow-right
%i.fa.fa-arrow-right
\/
.key l
%td Scroll right
%tr
%td.shortcut
.key
%i.icon-arrow-up
%i.fa.fa-arrow-up
\/
.key k
%td Scroll up
%tr
%td.shortcut
.key
%i.icon-arrow-down
%i.fa.fa-arrow-down
\/
.key j
%td Scroll down
@@ -161,7 +161,7 @@
%td.shortcut
.key
shift
%i.icon-arrow-up
%i.fa.fa-arrow-up
\/
.key
shift k
@@ -170,7 +170,7 @@
%td.shortcut
.key
shift
%i.icon-arrow-down
%i.fa.fa-arrow-down
\/
.key
shift j
+1 -1
View File
@@ -1,4 +1,4 @@
- if broadcast_message.present?
.broadcast-message{ style: broadcast_styling(broadcast_message) }
%i.icon-bullhorn
%i.fa.fa-bullhorn
= broadcast_message.message
+9 -9
View File
@@ -10,7 +10,7 @@
%button.navbar-toggle{"data-target" => ".navbar-collapse", "data-toggle" => "collapse", type: "button"}
%span.sr-only Toggle navigation
%i.icon-reorder
%i.fa.fa-bars
.navbar-collapse.collapse
%ul.nav.navbar-nav
@@ -18,31 +18,31 @@
= render "layouts/search"
%li.visible-sm.visible-xs
= link_to search_path, title: "Search", class: 'has_bottom_tooltip', 'data-original-title' => 'Search area' do
%i.icon-search
%i.fa.fa-search
%li
= link_to help_path, title: 'Help', class: 'has_bottom_tooltip',
'data-original-title' => 'Help' do
%i.icon-question-sign
%i.fa.fa-question-circle
%li
= link_to explore_root_path, title: "Explore", class: 'has_bottom_tooltip', 'data-original-title' => 'Public area' do
%i.icon-globe
%i.fa.fa-globe
%li
= link_to user_snippets_path(current_user), title: "My snippets", class: 'has_bottom_tooltip', 'data-original-title' => 'My snippets' do
%i.icon-paste
%i.fa.fa-clipboard
- if current_user.is_admin?
%li
= link_to admin_root_path, title: "Admin area", class: 'has_bottom_tooltip', 'data-original-title' => 'Admin area' do
%i.icon-cogs
%i.fa.fa-cogs
- if current_user.can_create_project?
%li
= link_to new_project_path, title: "New project", class: 'has_bottom_tooltip', 'data-original-title' => 'New project' do
%i.icon-plus
%i.fa.fa-plus
%li
= link_to profile_path, title: "Profile settings", class: 'has_bottom_tooltip', 'data-original-title' => 'Profile settings"' do
%i.icon-user
%i.fa.fa-user
%li
= link_to destroy_user_session_path, class: "logout", method: :delete, title: "Logout", class: 'has_bottom_tooltip', 'data-original-title' => 'Logout' do
%i.icon-signout
%i.fa.fa-sign-out
%li.hidden-xs
= link_to current_user, class: "profile-pic", id: 'profile-pic' do
= image_tag avatar_icon(current_user.email, 26), alt: 'User activity'
@@ -10,7 +10,7 @@
%button.navbar-toggle{"data-target" => ".navbar-collapse", "data-toggle" => "collapse", type: "button"}
%span.sr-only Toggle navigation
%i.icon-reorder
%i.fa.fa-bars
.pull-right.hidden-xs
= link_to "Sign in", new_session_path(:user, redirect_to_referer: 'yes'), class: 'btn btn-sign-in btn-new'
+1 -1
View File
@@ -52,7 +52,7 @@
&nbsp;
.loading-gif.hide
%p
%i.icon-spinner.icon-spin
%i.fa.fa-spinner.fa-spin
Saving new username
%p.light
= user_url(@user)
+3 -3
View File
@@ -3,7 +3,7 @@
- if current_user.can_create_group?
%span.pull-right
= link_to new_group_path, class: "btn btn-new" do
%i.icon-plus
%i.fa.fa-plus
New Group
%p.light
Group members have access to all a group's projects
@@ -19,12 +19,12 @@
.pull-right
- if can?(current_user, :manage_group, group)
= link_to edit_group_path(group), class: "btn-small btn btn-grouped" do
%i.icon-cogs
%i.fa.fa-cogs
Settings
- if can?(current_user, :destroy, user_group)
= link_to leave_profile_group_path(group), data: { confirm: leave_group_message(group.name) }, method: :delete, class: "btn-small btn btn-grouped", title: 'Remove user from group' do
%i.icon-signout
%i.fa.fa-sign-out
Leave
= link_to group, class: 'group-name' do
@@ -1,5 +1,5 @@
%li
%span.notification-icon-holder
%span.notification.fa.fa-holder
- if notification.global?
= notification_icon(@notification)
- else
+1 -1
View File
@@ -78,7 +78,7 @@
or change it at #{link_to "gravatar.com", "http://gravatar.com"}
%hr
%a.choose-btn.btn.btn-small.js-choose-user-avatar-button
%i.icon-paper-clip
%i.fa.fa-paperclip
%span Choose File ...
&nbsp;
%span.file_name.js-avatar-filename File name...
+3 -3
View File
@@ -1,7 +1,7 @@
- if current_user
.dropdown.pull-right
%a.dropdown-toggle.btn.btn-new{href: '#', "data-toggle" => "dropdown"}
%i.icon-reorder
%i.fa.fa-bars
%ul.dropdown-menu
- if @project.issues_enabled && can?(current_user, :write_issue, @project)
%li
@@ -23,11 +23,11 @@
%li.divider
%li
= link_to new_project_branch_path(@project) do
%i.icon-code-fork
%i.fa.fa-code-fork
Git branch
%li
= link_to new_project_tag_path(@project) do
%i.icon-tag
%i.fa.fa-tag
Git tag
+17 -5
View File
@@ -29,7 +29,7 @@
.form-group
.issue-assignee
= f.label :assignee_id, class: 'control-label' do
%i.icon-user
%i.fa.fa-user
Assign to
.col-sm-10
= project_users_select_tag("#{issuable.class.model_name.param_key}[assignee_id]",
@@ -40,17 +40,29 @@
.form-group
.issue-milestone
= f.label :milestone_id, class: 'control-label' do
%i.icon-time
%i.fa.fa-clock-o
Milestone
.col-sm-10= f.select(:milestone_id, milestone_options(issuable),
{ include_blank: 'Select milestone' }, { class: 'select2' })
.col-sm-10
- if milestone_options(issuable).present?
= f.select(:milestone_id, milestone_options(issuable),
{ include_blank: 'Select milestone' }, { class: 'select2' })
- else
%span.light No open milestones available.
&nbsp;
= link_to 'Create new milestone', new_project_milestone_path(issuable.project)
.form-group
= f.label :label_ids, class: 'control-label' do
%i.icon-tag
Labels
.col-sm-10
= f.collection_select :label_ids, issuable.project.labels.all, :id, :name,
- if issuable.project.labels.any?
= f.collection_select :label_ids, issuable.project.labels.all, :id, :name,
{ selected: issuable.label_ids }, multiple: true, class: 'select2'
- else
%span.light No labels yet.
&nbsp;
= link_to 'Create new label', new_project_label_path(issuable.project)
.form-actions
- if issuable.new_record?
= f.submit "Submit new #{issuable.class.model_name.human.downcase}", class: 'btn btn-create'
+6 -6
View File
@@ -1,11 +1,11 @@
%ul.nav.nav-pills.nav-stacked.nav-stacked-menu.append-bottom-20.project-settings-nav
= nav_link(path: 'projects#edit') do
= link_to edit_project_path(@project), class: "stat-tab tab " do
%i.icon-edit
%i.fa.fa-pencil-square-o
Project
= nav_link(controller: [:team_members, :teams]) do
= link_to project_team_index_path(@project), class: "team-tab tab" do
%i.icon-group
%i.fa.fa-users
Members
= nav_link(controller: :group_links) do
= link_to project_group_links_path(@project) do
@@ -13,11 +13,11 @@
Groups
= nav_link(controller: :deploy_keys) do
= link_to project_deploy_keys_path(@project) do
%i.icon-key
%i.fa.fa-key
Deploy Keys
= nav_link(controller: :hooks) do
= link_to project_hooks_path(@project) do
%i.icon-link
%i.fa.fa-link
Web Hooks
= nav_link(controller: :git_hooks) do
= link_to project_git_hooks_path(@project) do
@@ -25,9 +25,9 @@
Git Hooks
= nav_link(controller: :services) do
= link_to project_services_path(@project) do
%i.icon-cogs
%i.fa.fa-cogs
Services
= nav_link(controller: :protected_branches) do
= link_to project_protected_branches_path(@project) do
%i.icon-lock
%i.fa.fa-lock
Protected branches
+1 -1
View File
@@ -3,7 +3,7 @@
#tree-holder.tree-holder
.file-holder
.file-title
%i.icon-file
%i.fa.fa-file
%span.file_name
= @path
%small= number_to_human_size @blob.size
+2 -2
View File
@@ -1,6 +1,6 @@
%ul.breadcrumb.repo-breadcrumb
%li
%i.icon-angle-right
%i.fa.fa-angle-right
= link_to project_tree_path(@project, @ref) do
= @project.path
- tree_breadcrumbs(@tree, 6) do |title, path|
@@ -22,7 +22,7 @@
%div#tree-content-holder.tree-content-holder
%article.file-holder
.file-title.clearfix
%i.icon-file
%i.fa.fa-file
%span.file_name
= blob.name
%small= number_to_human_size blob.size
+1 -1
View File
@@ -2,6 +2,6 @@
.center
= link_to project_raw_path(@project, @id) do
%h1.light
%i.icon-download-alt
%i.fa.fa-arrow-circle-o-down-alt
%h4
Download (#{number_to_human_size blob.size})
+2 -6
View File
@@ -10,12 +10,8 @@
.modal-body
= form_tag project_blob_path(@project, @id), method: :delete, class: 'form-horizontal' do
.form-group.commit_message-group
= label_tag 'commit_message', class: "control-label" do
Commit message
.col-sm-10
= render 'shared/commit_message_container', {textarea: text_area_tag('commit_message',
params[:commit_message], placeholder: "Removed this file because...", required: true, rows: 3, class: 'form-control')}
= render 'shared/commit_message_container', params: params,
placeholder: 'Removed this file because...'
.form-group
.col-sm-2
.col-sm-10
@@ -7,19 +7,19 @@
%span.label.label-info default
- if @project.protected_branch? branch.name
%span.label.label-success
%i.icon-lock
%i.fa.fa-lock
protected
.pull-right
- if can?(current_user, :download_code, @project)
= render 'projects/repositories/download_archive', ref: branch.name, btn_class: 'btn-grouped btn-group-small'
- if branch.name != @repository.root_ref
= link_to project_compare_index_path(@project, from: @repository.root_ref, to: branch.name), class: 'btn btn-grouped btn-small', method: :post, title: "Compare" do
%i.icon-copy
%i.fa.fa-files-o
Compare
- if can_remove_branch?(@project, branch.name)
= link_to project_branch_path(@project, branch.name), class: 'btn btn-grouped btn-small btn-remove remove-row', method: :delete, data: { confirm: 'Removed branch cannot be restored. Are you sure?'}, remote: true do
%i.icon-trash
%i.fa.fa-trash-o
- if commit
%ul.list-unstyled
+1 -1
View File
@@ -4,7 +4,7 @@
.pull-right
- if can? current_user, :push_code, @project
= link_to new_project_branch_path(@project), class: 'btn btn-create' do
%i.icon-add-sign
%i.fa.fa-add-sign
New branch
&nbsp;
.dropdown.inline
+1 -1
View File
@@ -3,7 +3,7 @@
%button{ type: "button", class: "close", "data-dismiss" => "alert"} &times;
= @error
%h3.page-title
%i.icon-code-fork
%i.fa.fa-code-fork
New branch
= form_tag project_branches_path, method: :post, class: "form-horizontal" do
.form-group
@@ -2,11 +2,11 @@
%div
- if @notes_count > 0
%span.btn.disabled.btn-grouped
%i.icon-comment
%i.fa.fa-comment
= @notes_count
.pull-left.btn-group
%a.btn.btn-grouped.dropdown-toggle{ data: {toggle: :dropdown} }
%i.icon-download-alt
%i.fa.fa-arrow-circle-o-down-alt
Download as
%span.caret
%ul.dropdown-menu
+1 -1
View File
@@ -18,7 +18,7 @@
- if note_count > 0
%span.label.label-gray
%i.icon-comment= note_count
%i.fa.fa-comment= note_count
- if commit.description?
.commit-row-description.js-toggle-content

Some files were not shown because too many files have changed in this diff Show More