Commit b96d049e authored by Alfredo Sumaran's avatar Alfredo Sumaran

Merge branch 'master' into issue_3400_port

parents 3898bffd 18fc7c66
......@@ -43,6 +43,7 @@ v 8.6.0 (unreleased)
- Increase the notes polling timeout over time (Roberto Dip)
- Add shortcut to toggle markdown preview (Florent Baldino)
- Show labels in dashboard and group milestone views
- Fix an issue when the target branch of a MR had been deleted
- Add main language of a project in the list of projects (Tiago Botelho)
- Add #upcoming filter to Milestone filter (Tiago Botelho)
- Add ability to show archived projects on dashboard, explore and group pages
......
......@@ -111,14 +111,17 @@ ul.content-list {
> li {
border-color: $table-border-color;
color: $list-text-color;
font-size: $list-font-size;
color: $list-text-color;
.title {
color: $list-title-color;
font-weight: 600;
}
a {
color: $gl-dark-link-color;
}
.description {
p {
@include str-truncated;
......
......@@ -20,13 +20,14 @@ $background-color: #faf9f9;
$gl-font-size: 15px;
$gl-title-color: #333;
$gl-text-color: #555;
$gl-placeholder-color: #8f8f8f;
$gl-text-green: #4a2;
$gl-text-red: #d12f19;
$gl-text-orange: #d90;
$gl-header-color: $gl-title-color;
$gl-link-color: #333c48;
$gl-link-color: #3084bb;
$gl-dark-link-color: #333;
$gl-placeholder-color: #8f8f8f;
$gl-gray: $gl-text-color;
$gl-header-color: $gl-title-color;
/*
* Lists
......@@ -38,8 +39,8 @@ $list-text-color: $gl-text-color;
/*
* Markdown
*/
$md-text-color: #444;
$md-link-color: #3084bb;
$md-text-color: $gl-text-color;
$md-link-color: $gl-link-color;
/*
* Code
......
......@@ -55,7 +55,7 @@ li.commit {
}
.commit-row-message {
color: $gl-link-color;
color: $gl-dark-link-color;
&:hover {
text-decoration: underline;
......
......@@ -21,7 +21,7 @@
}
a {
color: #4c4e54;
color: $gl-dark-link-color;
}
.avatar {
......@@ -31,11 +31,7 @@
.event-title {
@include str-truncated(calc(100% - 174px));
font-weight: 600;
color: $list-title-color;
a {
color: $list-title-color;
}
color: $list-text-color;
}
.event-body {
......
......@@ -3,7 +3,7 @@
padding: 10px $gl-padding;
position: relative;
.issue-title {
.title {
margin-bottom: 2px;
}
......
......@@ -14,26 +14,8 @@
}
.todo-item {
font-size: $gl-font-size;
padding-left: $gl-avatar-size + $gl-padding-top;
color: $gl-text-color;
a {
color: #4c4e54;
}
.avatar {
margin-left: -($gl-avatar-size + $gl-padding-top);
}
.todo-title {
@include str-truncated(calc(100% - 174px));
font-weight: 600;
color: $list-title-color;
a {
color: $list-title-color;
}
}
.todo-body {
......
......@@ -41,7 +41,7 @@
vertical-align: middle;
i, a {
color: $gl-link-color;
color: $gl-dark-link-color;
}
img {
......
......@@ -21,17 +21,24 @@ class DashboardController < Dashboard::ApplicationController
end
def labels
labels = Label.where(project_id: @projects).select(:title, :color).uniq(:title)
respond_to do |format|
format.json do
render json: view_context.projects_labels_options
render json: labels
end
end
end
def milestones
milestones = Milestone.where(project_id: @projects).active
epoch = DateTime.parse('1970-01-01')
grouped_milestones = GlobalMilestone.build_collection(milestones)
grouped_milestones = grouped_milestones.sort_by { |x| x.due_date.nil? ? epoch : x.due_date }
respond_to do |format|
format.json do
render json: view_context.projects_milestones_options
render json: grouped_milestones
end
end
end
......
......@@ -109,14 +109,6 @@ module LabelsHelper
end
end
def projects_labels_options
if @project
@project.labels
else
Label.where(project_id: @projects)
end
end
def labels_filter_path
if @project
namespace_project_labels_path(@project.namespace, @project, :json)
......
......@@ -46,19 +46,6 @@ module MilestonesHelper
end
end
def projects_milestones_options
milestones =
if @project
@project.milestones
else
Milestone.where(project_id: @projects)
end.active
epoch = DateTime.parse('1970-01-01')
grouped_milestones = GlobalMilestone.build_collection(milestones)
grouped_milestones.sort_by { |x| x.due_date.nil? ? epoch : x.due_date }
end
def milestones_filter_dropdown_path
if @project
namespace_project_milestones_path(@project.namespace, @project, :json)
......
......@@ -516,7 +516,7 @@ class MergeRequest < ActiveRecord::Base
end
def target_sha
@target_sha ||= target_project.repository.commit(target_branch).sha
@target_sha ||= target_project.repository.commit(target_branch).try(:sha)
end
def source_sha
......@@ -572,8 +572,11 @@ class MergeRequest < ActiveRecord::Base
end
def compute_diverged_commits_count
return 0 unless source_sha && target_sha
Gitlab::Git::Commit.between(target_project.repository.raw_repository, source_sha, target_sha).size
end
private :compute_diverged_commits_count
def diverged_from_target_branch?
diverged_commits_count > 0
......
......@@ -24,7 +24,7 @@ module Projects
def execute
raise LeaseTaken if !try_obtain_lease
GitlabShellWorker.perform_async(:gc, @project.path_with_namespace)
GitlabShellOneShotWorker.perform_async(:gc, @project.path_with_namespace)
ensure
@project.update_column(:pushes_since_gc, 0)
end
......
......@@ -2,7 +2,7 @@
.todo-item.todo-block
= image_tag avatar_icon(todo.author_email, 40), class: 'avatar s40', alt:''
.todo-title
.todo-title.title
%span.author-name
- if todo.author
= link_to_author(todo)
......
......@@ -51,7 +51,7 @@
.panel-heading
= link_to project.name_with_namespace, namespace_project_path(project.namespace, project)
%ul.well-list.todos-list
%ul.content-list.todos-list
= render group[1]
= paginate @todos, theme: "gitlab"
- else
......
......@@ -3,11 +3,11 @@
.issue-check
= check_box_tag dom_id(issue,"selected"), nil, false, 'data-id' => issue.id, class: "selected_issue"
.issue-title
.issue-title.title
%span.issue-title-text
= confidential_icon(issue)
= link_to_gfm issue.title, issue_path(issue), class: "title"
%ul.controls.light
= link_to_gfm issue.title, issue_path(issue)
%ul.controls
- if issue.closed?
%li
CLOSED
......
%li{ class: mr_css_classes(merge_request) }
.merge-request-title
.merge-request-title.title
%span.merge-request-title-text
= link_to_gfm merge_request.title, merge_request_path(merge_request), class: "title"
%ul.controls.light
= link_to_gfm merge_request.title, merge_request_path(merge_request)
%ul.controls
- if merge_request.merged?
%li
MERGED
......
......@@ -10,7 +10,7 @@
%i.fa.fa-cogs
= link_to leave_group_group_members_path(group), data: { confirm: leave_group_message(group.name) }, method: :delete, class: "btn-sm btn btn-grouped", title: 'Leave this group' do
%i.fa.fa-sign-out
= icon('sign-out')
.stats
%span
......@@ -22,7 +22,8 @@
= number_with_delimiter(group.users.count)
= image_tag group_icon(group), class: "avatar s40 hidden-xs"
= link_to group, class: 'group-name title' do
.title
= link_to group, class: 'group-name' do
= group.name
- if group_member
......
......@@ -7,26 +7,11 @@
- show_last_commit_as_description = false unless local_assigns[:show_last_commit_as_description] == true && project.commit
- css_class += " no-description" if project.description.blank? && !show_last_commit_as_description
- ci_commit = project.ci_commit(project.commit.sha) if ci && !project.empty_repo? && project.commit
- cache_key = [project.namespace, project, controller.controller_name, controller.action_name, current_application_settings, 'v2.2']
- cache_key = [project.namespace, project, controller.controller_name, controller.action_name, current_application_settings, 'v2.3']
- cache_key.push(ci_commit.status) if ci_commit
%li.project-row{ class: css_class }
= cache(cache_key) do
= link_to project_path(project), class: dom_class(project) do
- if avatar
.dash-project-avatar
- if use_creator_avatar
= image_tag avatar_icon(project.creator.email, 40), class: "avatar s40", alt:''
- else
= project_icon(project, alt: '', class: 'avatar project-avatar s40')
%span.project-full-name.title
%span.namespace-name
- if project.namespace && !skip_namespace
= project.namespace.human_name
\/
%span.project-name.filter-title
= project.name
.controls
- if project.main_language
%span
......@@ -45,6 +30,23 @@
%span.visibility-icon.has_tooltip{data: { container: 'body', placement: 'left' },
title: "#{visibility_level_label(project.visibility_level)} - #{project_visibility_level_description(project.visibility_level)}"}
= visibility_level_icon(project.visibility_level, fw: false)
.title
= link_to project_path(project), class: dom_class(project) do
- if avatar
.dash-project-avatar
- if use_creator_avatar
= image_tag avatar_icon(project.creator.email, 40), class: "avatar s40", alt:''
- else
= project_icon(project, alt: '', class: 'avatar project-avatar s40')
%span.project-full-name
%span.namespace-name
- if project.namespace && !skip_namespace
= project.namespace.human_name
\/
%span.project-name.filter-title
= project.name
- if show_last_commit_as_description
.description
= link_to_gfm project.commit.title, namespace_project_commit_path(project.namespace, project, project.commit),
......
%li.snippet-row
= image_tag avatar_icon(snippet.author_email), class: "avatar s40 hidden-xs", alt: ''
.snippet-title
= link_to reliable_snippet_path(snippet), class: 'title' do
.title
= link_to reliable_snippet_path(snippet) do
= truncate(snippet.title, length: 60)
- if snippet.private?
%span.label.label-gray
......
class GitlabShellOneShotWorker
include Sidekiq::Worker
include Gitlab::ShellAdapter
sidekiq_options queue: :gitlab_shell, retry: false
def perform(action, *arg)
gitlab_shell.send(action, *arg)
end
end
......@@ -86,6 +86,16 @@ describe MergeRequest, models: true do
end
end
describe '#target_sha' do
context 'when the target branch does not exist anymore' do
subject { create(:merge_request).tap { |mr| mr.update_attribute(:target_branch, 'deleted') } }
it 'returns nil' do
expect(subject.target_sha).to be_nil
end
end
end
describe '#source_sha' do
let(:last_branch_commit) { subject.source_project.repository.commit(subject.source_branch) }
......@@ -310,6 +320,18 @@ describe MergeRequest, models: true do
let(:project) { create(:project) }
let(:fork_project) { create(:project, forked_from_project: project) }
context 'when the target branch does not exist anymore' do
subject { create(:merge_request).tap { |mr| mr.update_attribute(:target_branch, 'deleted') } }
it 'does not crash' do
expect{ subject.diverged_commits_count }.not_to raise_error
end
it 'returns 0' do
expect(subject.diverged_commits_count).to eq(0)
end
end
context 'diverged on same repository' do
subject(:merge_request_with_divergence) { create(:merge_request, :diverged, source_project: project, target_project: project) }
......
......@@ -12,7 +12,7 @@ describe Projects::HousekeepingService do
it 'enqueues a sidekiq job' do
expect(subject).to receive(:try_obtain_lease).and_return(true)
expect(GitlabShellWorker).to receive(:perform_async).with(:gc, project.path_with_namespace)
expect(GitlabShellOneShotWorker).to receive(:perform_async).with(:gc, project.path_with_namespace)
subject.execute
expect(project.pushes_since_gc).to eq(0)
......@@ -20,7 +20,7 @@ describe Projects::HousekeepingService do
it 'does not enqueue a job when no lease can be obtained' do
expect(subject).to receive(:try_obtain_lease).and_return(false)
expect(GitlabShellWorker).not_to receive(:perform_async)
expect(GitlabShellOneShotWorker).not_to receive(:perform_async)
expect { subject.execute }.to raise_error(Projects::HousekeepingService::LeaseTaken)
expect(project.pushes_since_gc).to eq(0)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment