BigW Consortium Gitlab
Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
gitlab-ce
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Forest Godfrey
gitlab-ce
Commits
181c2582
Commit
181c2582
authored
Mar 14, 2017
by
Sean McGivern
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'nonewline-parser' into 'master'
Take nonewline context into account in diff parser Closes #28128 and #22636 See merge request !9705
parents
270e15f1
985af1a6
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
59 additions
and
7 deletions
+59
-7
_line.html.haml
app/views/projects/diffs/_line.html.haml
+1
-1
_parallel_view.html.haml
app/views/projects/diffs/_parallel_view.html.haml
+2
-2
line.rb
lib/gitlab/diff/line.rb
+3
-3
parser.rb
lib/gitlab/diff/parser.rb
+5
-1
parser_spec.rb
spec/lib/gitlab/diff/parser_spec.rb
+48
-0
No files found.
app/views/projects/diffs/_line.html.haml
View file @
181c2582
...
...
@@ -9,7 +9,7 @@
-
case
type
-
when
'match'
=
diff_match_line
line
.
old_pos
,
line
.
new_pos
,
text:
line
.
text
-
when
'nonewline'
-
when
'
old-nonewline'
,
'new-
nonewline'
%td
.old_line.diff-line-num
%td
.new_line.diff-line-num
%td
.line_content.match
=
line
.
text
...
...
app/views/projects/diffs/_parallel_view.html.haml
View file @
181c2582
...
...
@@ -12,7 +12,7 @@
-
case
left
.
type
-
when
'match'
=
diff_match_line
left
.
old_pos
,
nil
,
text:
left
.
text
,
view: :parallel
-
when
'nonewline'
-
when
'
old-nonewline'
,
'new-
nonewline'
%td
.old_line.diff-line-num
%td
.line_content.match
=
left
.
text
-
else
...
...
@@ -31,7 +31,7 @@
-
case
right
.
type
-
when
'match'
=
diff_match_line
nil
,
right
.
new_pos
,
text:
left
.
text
,
view: :parallel
-
when
'nonewline'
-
when
'
old-nonewline'
,
'new-
nonewline'
%td
.new_line.diff-line-num
%td
.line_content.match
=
right
.
text
-
else
...
...
lib/gitlab/diff/line.rb
View file @
181c2582
...
...
@@ -38,11 +38,11 @@ module Gitlab
end
def
added?
type
==
'new'
type
==
'new'
||
type
==
'new-nonewline'
end
def
removed?
type
==
'old'
type
==
'old'
||
type
==
'old-nonewline'
end
def
rich_text
...
...
@@ -52,7 +52,7 @@ module Gitlab
end
def
meta?
type
==
'match'
||
type
==
'nonewline'
type
==
'match'
end
def
as_json
(
opts
=
nil
)
...
...
lib/gitlab/diff/parser.rb
View file @
181c2582
...
...
@@ -11,6 +11,7 @@ module Gitlab
line_old
=
1
line_new
=
1
type
=
nil
context
=
nil
# By returning an Enumerator we make it possible to search for a single line (with #find)
# without having to instantiate all the others that come after it.
...
...
@@ -31,7 +32,8 @@ module Gitlab
line_obj_index
+=
1
next
elsif
line
[
0
]
==
'\\'
type
=
'nonewline'
type
=
"
#{
context
}
-nonewline"
yielder
<<
Gitlab
::
Diff
::
Line
.
new
(
full_line
,
type
,
line_obj_index
,
line_old
,
line_new
)
line_obj_index
+=
1
else
...
...
@@ -43,8 +45,10 @@ module Gitlab
case
line
[
0
]
when
"+"
line_new
+=
1
context
=
:new
when
"-"
line_old
+=
1
context
=
:old
when
"
\\
"
# rubocop:disable Lint/EmptyWhen
# No increment
else
...
...
spec/lib/gitlab/diff/parser_spec.rb
View file @
181c2582
...
...
@@ -91,6 +91,54 @@ eos
end
end
describe
'\ No newline at end of file'
do
it
"parses nonewline in one file correctly"
do
first_nonewline_diff
=
<<~
END
--- a/test
+++ b/test
@@ -1,2 +1,2 @@
+ipsum
lorem
-ipsum
\\
No newline at end of file
END
lines
=
parser
.
parse
(
first_nonewline_diff
.
lines
).
to_a
expect
(
lines
[
0
].
type
).
to
eq
(
'new'
)
expect
(
lines
[
0
].
text
).
to
eq
(
'+ipsum'
)
expect
(
lines
[
2
].
type
).
to
eq
(
'old'
)
expect
(
lines
[
3
].
type
).
to
eq
(
'old-nonewline'
)
expect
(
lines
[
1
].
old_pos
).
to
eq
(
1
)
expect
(
lines
[
1
].
new_pos
).
to
eq
(
2
)
end
it
"parses nonewline in two files correctly"
do
both_nonewline_diff
=
<<~
END
--- a/test
+++ b/test
@@ -1,2 +1,2 @@
-lorem
-ipsum
\\
No newline at end of file
+ipsum
+lorem
\\
No newline at end of file
END
lines
=
parser
.
parse
(
both_nonewline_diff
.
lines
).
to_a
expect
(
lines
[
0
].
type
).
to
eq
(
'old'
)
expect
(
lines
[
1
].
type
).
to
eq
(
'old'
)
expect
(
lines
[
2
].
type
).
to
eq
(
'old-nonewline'
)
expect
(
lines
[
5
].
type
).
to
eq
(
'new-nonewline'
)
expect
(
lines
[
3
].
text
).
to
eq
(
'+ipsum'
)
expect
(
lines
[
3
].
old_pos
).
to
eq
(
3
)
expect
(
lines
[
3
].
new_pos
).
to
eq
(
1
)
expect
(
lines
[
4
].
text
).
to
eq
(
'+lorem'
)
expect
(
lines
[
4
].
old_pos
).
to
eq
(
3
)
expect
(
lines
[
4
].
new_pos
).
to
eq
(
2
)
end
end
context
'when lines is empty'
do
it
{
expect
(
parser
.
parse
([])).
to
eq
([])
}
it
{
expect
(
parser
.
parse
(
nil
)).
to
eq
([])
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment