Merge branch 'master' of gitlab.com:gitlab-org/gitlab-ce

This commit is contained in:
Dmitriy Zaporozhets 2015-04-14 11:55:10 +03:00
commit 6b479b6cb0
20 changed files with 22 additions and 137 deletions

View file

@ -19,7 +19,6 @@ v 7.10.0 (unreleased)
- Disable reference creation for comments surrounded by code/preformatted blocks (Stan Hu) - Disable reference creation for comments surrounded by code/preformatted blocks (Stan Hu)
- Reduce Rack Attack false positives causing 403 errors during HTTP authentication (Stan Hu) - Reduce Rack Attack false positives causing 403 errors during HTTP authentication (Stan Hu)
- enable line wrapping per default and remove the checkbox to toggle it (Hannes Rosenögger) - enable line wrapping per default and remove the checkbox to toggle it (Hannes Rosenögger)
- extend the commit calendar to show the actual commits made on a date (Hannes Rosenögger)
- Fix a link in the patch update guide - Fix a link in the patch update guide
- Add a service to support external wikis (Hannes Rosenögger) - Add a service to support external wikis (Hannes Rosenögger)
- Omit the "email patches" link and fix plain diff view for merge commits - Omit the "email patches" link and fix plain diff view for merge commits
@ -73,6 +72,8 @@ v 7.10.0 (unreleased)
- Fix git over ssh errors 'fatal: protocol error: bad line length character' - Fix git over ssh errors 'fatal: protocol error: bad line length character'
- Automatically setup GitLab CI project for forks if origin project has GitLab CI enabled - Automatically setup GitLab CI project for forks if origin project has GitLab CI enabled
- Bust group page project list cache when namespace name or path changes. - Bust group page project list cache when namespace name or path changes.
- Explicitly set image alt-attribute to prevent graphical glitches if gravatars could not be loaded
- Fix stuck Merge Request merging events from old installations (Ben Bodenmiller)
v 7.9.3 v 7.9.3
- Contains no changes - Contains no changes
@ -80,9 +81,11 @@ v 7.9.3
- Allow admin to create public deploy keys that are accessible to any project. - Allow admin to create public deploy keys that are accessible to any project.
- Warn when gitlab-shell version doesn't match requirement. - Warn when gitlab-shell version doesn't match requirement.
- Skip email confirmation when set by admin or via LDAP. - Skip email confirmation when set by admin or via LDAP.
- Only allow users to reference groups, projects, issues, MRs, commits they have access to. - Only allow users to reference groups, projects, issues, MRs, commits they have access to.
v 7.9.3
- Contains no changes
v 7.9.2 v 7.9.2
- Contains no changes - Contains no changes

View file

@ -1,6 +1,3 @@
require 'html/pipeline'
require 'html/pipeline/gitlab'
module EmailsHelper module EmailsHelper
# Google Actions # Google Actions
@ -38,26 +35,4 @@ module EmailsHelper
lexer = Rugments::Lexers::Diff.new lexer = Rugments::Lexers::Diff.new
raw formatter.format(lexer.lex(diffcontent)) raw formatter.format(lexer.lex(diffcontent))
end end
def replace_image_links_with_base64(text, project)
# Used pipelines in GitLab:
# GitlabEmailImageFilter - replaces images that have been uploaded as attachments with inline images in emails.
#
# see https://gitlab.com/gitlab-org/html-pipeline-gitlab for more filters
filters = [
HTML::Pipeline::Gitlab::GitlabEmailImageFilter
]
context = {
base_url: File.join(Gitlab.config.gitlab.url, project.path_with_namespace, 'uploads'),
upload_path: File.join(Rails.root, 'public', 'uploads', project.path_with_namespace),
}
pipeline = HTML::Pipeline::Gitlab.new(filters).pipeline
result = pipeline.call(text, context)
text = result[:output].to_html(save_with: 0)
text.html_safe
end
end end

View file

@ -361,6 +361,6 @@ class MergeRequest < ActiveRecord::Base
end end
def locked_long_ago? def locked_long_ago?
locked_at && locked_at < (Time.now - 1.day) locked_at.nil? || locked_at < (Time.now - 1.day)
end end
end end

View file

@ -4,7 +4,7 @@
%li{class: "#{dom_class(member)} js-toggle-container", id: dom_id(member)} %li{class: "#{dom_class(member)} js-toggle-container", id: dom_id(member)}
%span{class: ("list-item-name" if show_controls)} %span{class: ("list-item-name" if show_controls)}
= image_tag avatar_icon(user.email, 16), class: "avatar s16" = image_tag avatar_icon(user.email, 16), class: "avatar s16", alt: ''
%strong= user.name %strong= user.name
%span.cgray= user.username %span.cgray= user.username
- if user == current_user - if user == current_user

View file

@ -7,4 +7,4 @@
= link_to_gfm issue.title, [project.namespace.becomes(Namespace), project, issue], title: issue.title = link_to_gfm issue.title, [project.namespace.becomes(Namespace), project, issue], title: issue.title
.pull-right.assignee-icon .pull-right.assignee-icon
- if issue.assignee - if issue.assignee
= image_tag avatar_icon(issue.assignee.email, 16), class: "avatar s16" = image_tag avatar_icon(issue.assignee.email, 16), class: "avatar s16", alt: ''

View file

@ -7,4 +7,4 @@
= link_to_gfm merge_request.title, [project.namespace.becomes(Namespace), project, merge_request], title: merge_request.title = link_to_gfm merge_request.title, [project.namespace.becomes(Namespace), project, merge_request], title: merge_request.title
.pull-right.assignee-icon .pull-right.assignee-icon
- if merge_request.assignee - if merge_request.assignee
= image_tag avatar_icon(merge_request.assignee.email, 16), class: "avatar s16" = image_tag avatar_icon(merge_request.assignee.email, 16), class: "avatar s16", alt: ''

View file

@ -31,8 +31,3 @@
%span %span
Merge Requests Merge Requests
%span.count= current_user.assigned_merge_requests.opened.count %span.count= current_user.assigned_merge_requests.opened.count
= nav_link(controller: :help) do
= link_to help_path, title: 'Help' do
%i.fa.fa-question-circle
%span
Help

View file

@ -1,2 +1,2 @@
%div %div
= replace_image_links_with_base64(markdown(@note.note, reference_only_path: false), @note.project) = markdown(@note.note, reference_only_path: false)

View file

@ -1,5 +1,5 @@
-if @issue.description -if @issue.description
= replace_image_links_with_base64(markdown(@issue.description, reference_only_path: false), @issue.project) = markdown(@issue.description, reference_only_path: false)
- if @issue.assignee_id.present? - if @issue.assignee_id.present?
%p %p

View file

@ -6,4 +6,4 @@
Assignee: #{@merge_request.author_name} &rarr; #{@merge_request.assignee_name} Assignee: #{@merge_request.author_name} &rarr; #{@merge_request.assignee_name}
-if @merge_request.description -if @merge_request.description
= replace_image_links_with_base64(markdown(@merge_request.description, reference_only_path: false), @merge_request.project) = markdown(@merge_request.description, reference_only_path: false)

View file

@ -5,5 +5,5 @@
= link_to_gfm issue.title, [@project.namespace.becomes(Namespace), @project, issue], title: issue.title = link_to_gfm issue.title, [@project.namespace.becomes(Namespace), @project, issue], title: issue.title
.pull-right.assignee-icon .pull-right.assignee-icon
- if issue.assignee - if issue.assignee
= image_tag avatar_icon(issue.assignee.email, 16), class: "avatar s16" = image_tag avatar_icon(issue.assignee.email, 16), class: "avatar s16", alt: ''

View file

@ -5,4 +5,4 @@
= link_to_gfm merge_request.title, [@project.namespace.becomes(Namespace), @project, merge_request], title: merge_request.title = link_to_gfm merge_request.title, [@project.namespace.becomes(Namespace), @project, merge_request], title: merge_request.title
.pull-right.assignee-icon .pull-right.assignee-icon
- if merge_request.assignee - if merge_request.assignee
= image_tag avatar_icon(merge_request.assignee.email, 16), class: "avatar s16" = image_tag avatar_icon(merge_request.assignee.email, 16), class: "avatar s16", alt: ''

View file

@ -5,7 +5,7 @@
%span.fa.fa-circle %span.fa.fa-circle
- else - else
= link_to user_path(note.author) do = link_to user_path(note.author) do
= image_tag avatar_icon(note.author_email), class: "avatar s40" = image_tag avatar_icon(note.author_email), class: "avatar s40", alt: ''
.timeline-content .timeline-content
.note-header .note-header
.note-actions .note-actions
@ -23,7 +23,7 @@
Remove Remove
- if note.system - if note.system
= link_to user_path(note.author) do = link_to user_path(note.author) do
= image_tag avatar_icon(note.author_email), class: "avatar s16" = image_tag avatar_icon(note.author_email), class: "avatar s16", alt: ''
= link_to_member(@project, note.author, avatar: false) = link_to_member(@project, note.author, avatar: false)
%span.author-username %span.author-username
= '@' + note.author.username = '@' + note.author.username

View file

@ -3,7 +3,7 @@
%li{class: "#{dom_class(member)} js-toggle-container project_member_row access-#{member.human_access.downcase}", id: dom_id(member)} %li{class: "#{dom_class(member)} js-toggle-container project_member_row access-#{member.human_access.downcase}", id: dom_id(member)}
%span.list-item-name %span.list-item-name
= image_tag avatar_icon(user.email, 16), class: "avatar s16" = image_tag avatar_icon(user.email, 16), class: "avatar s16", alt: ''
%strong= user.name %strong= user.name
%span.cgray= user.username %span.cgray= user.username
- if user == current_user - if user == current_user

View file

@ -17,7 +17,7 @@
%span.light %span.light
by by
= link_to user_snippets_path(@snippet.author) do = link_to user_snippets_path(@snippet.author) do
= image_tag avatar_icon(@snippet.author_email), class: "avatar avatar-inline s16" = image_tag avatar_icon(@snippet.author_email), class: "avatar avatar-inline s16", alt: ''
= @snippet.author_name = @snippet.author_name
.back-link .back-link

View file

@ -11,7 +11,7 @@ RUN apt-get update -q \
# If the Omnibus package version below is outdated please contribute a merge request to update it. # If the Omnibus package version below is outdated please contribute a merge request to update it.
# If you run GitLab Enterprise Edition point it to a location where you have downloaded it. # If you run GitLab Enterprise Edition point it to a location where you have downloaded it.
RUN TMP_FILE=$(mktemp); \ RUN TMP_FILE=$(mktemp); \
wget -q -O $TMP_FILE https://downloads-packages.s3.amazonaws.com/ubuntu-14.04/gitlab_7.9.1-omnibus.1-1_amd64.deb \ wget -q -O $TMP_FILE https://downloads-packages.s3.amazonaws.com/ubuntu-14.04/gitlab_7.9.2-omnibus-1_amd64.deb \
&& dpkg -i $TMP_FILE \ && dpkg -i $TMP_FILE \
&& rm -f $TMP_FILE && rm -f $TMP_FILE

View file

@ -17,8 +17,3 @@ Feature: Dashboard Active Tab
Given I visit dashboard merge requests page Given I visit dashboard merge requests page
Then the active main tab should be Merge Requests Then the active main tab should be Merge Requests
And no other main tabs should be active And no other main tabs should be active
Scenario: On Dashboard Help
Given I visit dashboard help page
Then the active main tab should be Help
And no other main tabs should be active

View file

@ -3,7 +3,4 @@ class Spinach::Features::DashboardActiveTab < Spinach::FeatureSteps
include SharedPaths include SharedPaths
include SharedActiveTab include SharedActiveTab
step 'the active main tab should be Help' do
ensure_active_main_tab('Help')
end
end end

View file

@ -83,10 +83,6 @@ module SharedPaths
visit search_path visit search_path
end end
step 'I visit dashboard help page' do
visit help_path
end
step 'I visit dashboard groups page' do step 'I visit dashboard groups page' do
visit dashboard_groups_path visit dashboard_groups_path
end end

View file

@ -191,13 +191,6 @@ describe Notify do
context 'for issues' do context 'for issues' do
let(:issue) { create(:issue, author: current_user, assignee: assignee, project: project) } let(:issue) { create(:issue, author: current_user, assignee: assignee, project: project) }
let(:issue_with_description) { create(:issue, author: current_user, assignee: assignee, project: project, description: Faker::Lorem.sentence) } let(:issue_with_description) { create(:issue, author: current_user, assignee: assignee, project: project, description: Faker::Lorem.sentence) }
let(:issue_with_image) do
create(:issue,
author: current_user,
assignee: assignee,
project: project,
description: "![test](#{Gitlab.config.gitlab.url}/#{project.path_with_namespace}/uploads/12345/test.jpg)")
end
describe 'that are new' do describe 'that are new' do
subject { Notify.new_issue_email(issue.assignee_id, issue.id) } subject { Notify.new_issue_email(issue.assignee_id, issue.id) }
@ -222,22 +215,6 @@ describe Notify do
end end
end end
describe 'that contain images' do
let(:png) { File.read("#{Rails.root}/spec/fixtures/dk.png") }
let(:png_encoded) { Base64::encode64(png) }
before :each do
file_path = File.join(Rails.root, 'public', 'uploads', issue_with_image.project.path_with_namespace, '12345/test.jpg')
allow(File).to receive(:file?).with(file_path).and_return(true)
allow(File).to receive(:read).with(file_path).and_return(png)
end
subject { Notify.new_issue_email(issue_with_image.assignee_id, issue_with_image.id) }
it 'replaces attached images with inline images' do
is_expected.to have_body_text URI.encode(png_encoded)
end
end
describe 'that have been reassigned' do 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) }
@ -302,14 +279,6 @@ describe Notify do
let(:merge_author) { create(:user) } let(:merge_author) { create(:user) }
let(:merge_request) { create(:merge_request, author: current_user, assignee: assignee, source_project: project, target_project: project) } let(:merge_request) { create(:merge_request, author: current_user, assignee: assignee, source_project: project, target_project: project) }
let(:merge_request_with_description) { create(:merge_request, author: current_user, assignee: assignee, source_project: project, target_project: project, description: Faker::Lorem.sentence) } let(:merge_request_with_description) { create(:merge_request, author: current_user, assignee: assignee, source_project: project, target_project: project, description: Faker::Lorem.sentence) }
let(:merge_request_with_image) do
create(:merge_request,
author: current_user,
assignee: assignee,
source_project: project,
target_project: project,
description: "![test](#{Gitlab.config.gitlab.url}/#{project.path_with_namespace}/uploads/12345/test.jpg)")
end
describe 'that are new' do describe 'that are new' do
subject { Notify.new_merge_request_email(merge_request.assignee_id, merge_request.id) } subject { Notify.new_merge_request_email(merge_request.assignee_id, merge_request.id) }
@ -346,22 +315,6 @@ describe Notify do
end end
end end
describe 'that are new and contain contain images in the description' do
let(:png) {File.read("#{Rails.root}/spec/fixtures/dk.png")}
let(:png_encoded) { Base64::encode64(png) }
before :each do
file_path = File.join(Rails.root, 'public', 'uploads', merge_request_with_image.project.path_with_namespace, '/12345/test.jpg')
allow(File).to receive(:file?).with(file_path).and_return(true)
allow(File).to receive(:read).with(file_path).and_return(png)
end
subject { Notify.new_merge_request_email(merge_request_with_image.assignee_id, merge_request_with_image.id) }
it 'replaces attached images with inline images' do
is_expected.to have_body_text URI.encode(png_encoded)
end
end
describe 'that are reassigned' do describe 'that are reassigned' do
subject { Notify.reassigned_merge_request_email(recipient.id, merge_request.id, previous_assignee.id, current_user.id) } subject { Notify.reassigned_merge_request_email(recipient.id, merge_request.id, previous_assignee.id, current_user.id) }
@ -470,12 +423,9 @@ describe Notify do
describe 'project access changed' do describe 'project access changed' do
let(:project) { create(:project) } let(:project) { create(:project) }
let(:user) { create(:user) } let(:user) { create(:user) }
let(:project_member) do let(:project_member) { create(:project_member,
create(:project_member, project: project,
project: project, user: user) }
user: user)
end
subject { Notify.project_access_granted_email(project_member.id) } subject { Notify.project_access_granted_email(project_member.id) }
it_behaves_like 'an email sent from GitLab' it_behaves_like 'an email sent from GitLab'
@ -515,32 +465,6 @@ describe Notify do
end end
end end
describe 'on a commit that contains an image' do
let(:commit) { project.repository.commit }
let(:note_with_image) do
create(:note,
project: project,
author: note_author,
note: "![test](#{Gitlab.config.gitlab.url}/#{project.path_with_namespace}/uploads/12345/test.jpg)")
end
let(:png) {File.read("#{Rails.root}/spec/fixtures/dk.png")}
let(:png_encoded) { Base64::encode64(png) }
before :each do
file_path = File.join(Rails.root, 'public', 'uploads', note_with_image.project.path_with_namespace, '12345/test.jpg')
allow(File).to receive(:file?).with(file_path).and_return(true)
allow(File).to receive(:read).with(file_path).and_return(png)
allow(Note).to receive(:find).with(note_with_image.id).and_return(note_with_image)
allow(note_with_image).to receive(:noteable).and_return(commit)
end
subject { Notify.note_commit_email(recipient.id, note_with_image.id) }
it 'replaces attached images with inline images' do
is_expected.to have_body_text URI.encode(png_encoded)
end
end
describe 'on a commit' do describe 'on a commit' do
let(:commit) { project.repository.commit } let(:commit) { project.repository.commit }