Commit 7f3228ec authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Merge branch 'master' of github.com:gitlabhq/gitlabhq

parents b8d48ca8 01af2c98
Please view this file on the master branch, on stable branches it's out of date. Please view this file on the master branch, on stable branches it's out of date.
v 7.14.0 (unreleased) v 7.14.0 (unreleased)
- Fix corrupted binary files when using API files endpoint (Stan Hu)
- Show incompatible projects in Bitbucket import status (Stan Hu) - Show incompatible projects in Bitbucket import status (Stan Hu)
- Fix coloring of diffs on MR Discussion-tab (Gert Goet) - Fix coloring of diffs on MR Discussion-tab (Gert Goet)
- Fix "Network" and "Graphs" pages for branches with encoded slashes (Stan Hu) - Fix "Network" and "Graphs" pages for branches with encoded slashes (Stan Hu)
...@@ -47,6 +48,10 @@ v 7.14.0 (unreleased) ...@@ -47,6 +48,10 @@ v 7.14.0 (unreleased)
- Improve MR merge widget text and UI consistency. - Improve MR merge widget text and UI consistency.
- Improve text in MR "How To Merge" modal. - Improve text in MR "How To Merge" modal.
- Cache all events - Cache all events
- Order commits by date when comparing branches
- Fix bug causing error when the target branch of a symbolic ref was deleted
- Include branch/tag name in archive file and directory name
- Add dropzone upload progress
v 7.13.3 v 7.13.3
- Fix bug causing Bitbucket importer to crash when OAuth application had been removed. - Fix bug causing Bitbucket importer to crash when OAuth application had been removed.
......
...@@ -38,7 +38,7 @@ gem "browser", '~> 0.8.0' ...@@ -38,7 +38,7 @@ gem "browser", '~> 0.8.0'
# Extracting information from a git repository # Extracting information from a git repository
# Provide access to Gitlab::Git library # Provide access to Gitlab::Git library
gem "gitlab_git", '~> 7.2.6' gem "gitlab_git", '~> 7.2.11'
# Ruby/Rack Git Smart-HTTP Server Handler # Ruby/Rack Git Smart-HTTP Server Handler
# GitLab fork with a lot of changes (improved thread-safety, better memory usage etc) # GitLab fork with a lot of changes (improved thread-safety, better memory usage etc)
......
...@@ -271,7 +271,7 @@ GEM ...@@ -271,7 +271,7 @@ GEM
mime-types (~> 1.19) mime-types (~> 1.19)
gitlab_emoji (0.1.0) gitlab_emoji (0.1.0)
gemojione (~> 2.0) gemojione (~> 2.0)
gitlab_git (7.2.6) gitlab_git (7.2.11)
activesupport (~> 4.0) activesupport (~> 4.0)
charlock_holmes (~> 0.6) charlock_holmes (~> 0.6)
gitlab-linguist (~> 3.0) gitlab-linguist (~> 3.0)
...@@ -783,7 +783,7 @@ DEPENDENCIES ...@@ -783,7 +783,7 @@ DEPENDENCIES
gitlab-grack (~> 2.0.2) gitlab-grack (~> 2.0.2)
gitlab-linguist (~> 3.0.1) gitlab-linguist (~> 3.0.1)
gitlab_emoji (~> 0.1) gitlab_emoji (~> 0.1)
gitlab_git (~> 7.2.6) gitlab_git (~> 7.2.11)
gitlab_meta (= 7.0) gitlab_meta (= 7.0)
gitlab_omniauth-ldap (= 1.2.1) gitlab_omniauth-ldap (= 1.2.1)
gollum-lib (~> 4.0.2) gollum-lib (~> 4.0.2)
......
...@@ -67,7 +67,7 @@ module API ...@@ -67,7 +67,7 @@ module API
file_path: blob.path, file_path: blob.path,
size: blob.size, size: blob.size,
encoding: "base64", encoding: "base64",
content: Base64.encode64(blob.data), content: Base64.strict_encode64(blob.data),
ref: ref, ref: ref,
blob_id: blob.id, blob_id: blob.id,
commit_id: commit.id, commit_id: commit.id,
......
...@@ -93,16 +93,27 @@ module Rouge ...@@ -93,16 +93,27 @@ module Rouge
end end
def process_tokens(tokens) def process_tokens(tokens)
num_lines = 0 rendered = []
last_val = '' current_line = ''
rendered = ''
tokens.each do |tok, val| tokens.each do |tok, val|
last_val = val # In the case of multi-line values (e.g. comments), we need to apply
num_lines += val.scan(/\n/).size # styling to each line since span elements are inline.
rendered << span(tok, val) val.lines.each do |line|
stripped = line.chomp
current_line << span(tok, stripped)
if line.end_with?("\n")
rendered << current_line
current_line = ''
end
end
end end
# Add leftover text
rendered << current_line if current_line.present?
num_lines = rendered.size
numbers = (@linenostart..num_lines + @linenostart - 1).to_a numbers = (@linenostart..num_lines + @linenostart - 1).to_a
{ numbers: numbers, code: rendered } { numbers: numbers, code: rendered }
...@@ -117,9 +128,8 @@ module Rouge ...@@ -117,9 +128,8 @@ module Rouge
numbers.join("\n") numbers.join("\n")
end end
def wrap_lines(rendered) def wrap_lines(lines)
if @lineanchors if @lineanchors
lines = rendered.split("\n")
lines = lines.each_with_index.map do |line, index| lines = lines.each_with_index.map do |line, index|
number = index + @linenostart number = index + @linenostart
...@@ -136,24 +146,17 @@ module Rouge ...@@ -136,24 +146,17 @@ module Rouge
lines.join("\n") lines.join("\n")
else else
if @linenos == 'inline' if @linenos == 'inline'
lines = rendered.split("\n")
lines = lines.each_with_index.map do |line, index| lines = lines.each_with_index.map do |line, index|
number = index + @linenostart number = index + @linenostart
"<span class=\"linenos\">#{number}</span>#{line}" "<span class=\"linenos\">#{number}</span>#{line}"
end end
lines.join("\n") lines.join("\n")
else else
rendered lines.join("\n")
end end
end end
end end
def wrap_values(val, element)
lines = val.split("\n")
lines = lines.map{ |x| "<span #{element}>#{x}</span>" }
lines.join("\n")
end
def span(tok, val) def span(tok, val)
# http://stackoverflow.com/a/1600584/2587286 # http://stackoverflow.com/a/1600584/2587286
val = CGI.escapeHTML(val) val = CGI.escapeHTML(val)
...@@ -161,13 +164,11 @@ module Rouge ...@@ -161,13 +164,11 @@ module Rouge
if tok.shortname.empty? if tok.shortname.empty?
val val
else else
# In the case of multi-line values (e.g. comments), we need to apply
# styling to each line since span elements are inline.
if @inline_theme if @inline_theme
rules = @inline_theme.style_for(tok).rendered_rules rules = @inline_theme.style_for(tok).rendered_rules
wrap_values(val, "style=\"#{rules.to_a.join(';')}\"") "<span style=\"#{rules.to_a.join(';')}\"#{val}</span>"
else else
wrap_values(val, "class=\"#{tok.shortname}\"") "<span class=\"#{tok.shortname}\">#{val}</span>"
end end
end end
end end
......
...@@ -47,5 +47,21 @@ describe BlobHelper do ...@@ -47,5 +47,21 @@ describe BlobHelper do
expect(lines[1].text).to eq(' This is line 2.') expect(lines[1].text).to eq(' This is line 2.')
expect(lines[2].text).to eq(' """') expect(lines[2].text).to eq(' """')
end end
context 'diff highlighting' do
let(:blob_name) { 'test.diff' }
let(:blob_content) { "+aaa\n+bbb\n- ccc\n ddd\n"}
let(:expected) do
%q(<span id="LC1" class="line"><span class="gi">+aaa</span></span>
<span id="LC2" class="line"><span class="gi">+bbb</span></span>
<span id="LC3" class="line"><span class="gd">- ccc</span></span>
<span id="LC4" class="line"> ddd</span>)
end
it 'should highlight each line properly' do
result = highlight(blob_name, blob_content, nowrap: true, continue: false)
expect(result).to eq(expected)
end
end
end end
end end
...@@ -58,7 +58,7 @@ describe EventsHelper do ...@@ -58,7 +58,7 @@ describe EventsHelper do
expected = '<pre class="code highlight white ruby">' \ expected = '<pre class="code highlight white ruby">' \
"<code><span class=\"k\">def</span> <span class=\"nf\">test</span>\n" \ "<code><span class=\"k\">def</span> <span class=\"nf\">test</span>\n" \
" <span class=\"s1\">\'hello world\'</span>\n" \ " <span class=\"s1\">\'hello world\'</span>\n" \
"<span class=\"k\">end</span>\n" \ "<span class=\"k\">end</span>" \
'</code></pre>' '</code></pre>'
expect(event_note(input)).to eq(expected) expect(event_note(input)).to eq(expected)
end end
......
...@@ -117,4 +117,35 @@ describe API::API, api: true do ...@@ -117,4 +117,35 @@ describe API::API, api: true do
expect(response.status).to eq(400) expect(response.status).to eq(400)
end end
end end
describe "POST /projects/:id/repository/files with binary file" do
let(:file_path) { 'test.bin' }
let(:put_params) do
{
file_path: file_path,
branch_name: 'master',
content: 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAApJREFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=',
commit_message: 'Binary file with a \n should not be touched',
encoding: 'base64'
}
end
let(:get_params) do
{
file_path: file_path,
ref: 'master',
}
end
before do
post api("/projects/#{project.id}/repository/files", user), put_params
end
it "remains unchanged" do
get api("/projects/#{project.id}/repository/files", user), get_params
expect(response.status).to eq(200)
expect(json_response['file_path']).to eq(file_path)
expect(json_response['file_name']).to eq(file_path)
expect(json_response['content']).to eq(put_params[:content])
end
end
end end
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