Fix bug where backslashes in inline diffs could be dropped
Closes #2253
This commit is contained in:
parent
cb6ad67f52
commit
c36adb98aa
|
|
@ -1,6 +1,7 @@
|
|||
Please view this file on the master branch, on stable branches it's out of date.
|
||||
|
||||
v 7.14.0 (unreleased)
|
||||
- Fix bug where backslashes in inline diffs could be dropped (Stan Hu)
|
||||
- Disable turbolinks when linking to Bitbucket import status (Stan Hu)
|
||||
- Fix broken code import and display error messages if something went wrong with creating project (Stan Hu)
|
||||
- Fix corrupted binary files when using API files endpoint (Stan Hu)
|
||||
|
|
|
|||
|
|
@ -46,8 +46,11 @@ module Gitlab
|
|||
end
|
||||
last_the_same_symbols += 1
|
||||
last_token = first_line[last_the_same_symbols..-1]
|
||||
diff_arr[index+1].sub!(/#{Regexp.escape(last_token)}$/, FINISH + last_token)
|
||||
diff_arr[index+2].sub!(/#{Regexp.escape(last_token)}$/, FINISH + last_token)
|
||||
# This is tricky: escape backslashes so that `sub` doesn't interpret them
|
||||
# as backreferences. Regexp.escape does NOT do the right thing.
|
||||
replace_token = FINISH + last_token.gsub(/\\/, '\&\&')
|
||||
diff_arr[index+1].sub!(/#{Regexp.escape(last_token)}$/, replace_token)
|
||||
diff_arr[index+2].sub!(/#{Regexp.escape(last_token)}$/, replace_token)
|
||||
end
|
||||
diff_arr
|
||||
end
|
||||
|
|
|
|||
|
|
@ -0,0 +1,39 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Gitlab::InlineDiff do
|
||||
describe '#processing' do
|
||||
let(:diff) do
|
||||
<<eos
|
||||
--- a/test.rb
|
||||
+++ b/test.rb
|
||||
@@ -1,6 +1,6 @@
|
||||
class Test
|
||||
def cleanup_string(input)
|
||||
return nil if input.nil?
|
||||
- input.sub(/[\\r\\n].+/,'').sub(/\\\\[rn].+/, '').strip
|
||||
+ input.to_s.sub(/[\\r\\n].+/,'').sub(/\\\\[rn].+/, '').strip
|
||||
end
|
||||
end
|
||||
eos
|
||||
end
|
||||
|
||||
let(:expected) do
|
||||
["--- a/test.rb\n",
|
||||
"+++ b/test.rb\n",
|
||||
"@@ -1,6 +1,6 @@\n",
|
||||
" class Test\n",
|
||||
" def cleanup_string(input)\n",
|
||||
" return nil if input.nil?\n",
|
||||
"- input.#!idiff-start!##!idiff-finish!#sub(/[\\r\\n].+/,'').sub(/\\\\[rn].+/, '').strip\n",
|
||||
"+ input.#!idiff-start!#to_s.#!idiff-finish!#sub(/[\\r\\n].+/,'').sub(/\\\\[rn].+/, '').strip\n",
|
||||
" end\n",
|
||||
" end\n"]
|
||||
end
|
||||
|
||||
let(:subject) { Gitlab::InlineDiff.processing(diff.lines) }
|
||||
|
||||
it 'should retain backslashes' do
|
||||
expect(subject).to eq(expected)
|
||||
end
|
||||
end
|
||||
end
|
||||
Loading…
Reference in New Issue