Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Boxiang Sun
gitlab-ce
Commits
be7bc9d9
Commit
be7bc9d9
authored
Jan 22, 2016
by
Valery Sizov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Backport some changes from EE
parent
5f0d7e2e
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
83 additions
and
80 deletions
+83
-80
app/helpers/snippets_helper.rb
app/helpers/snippets_helper.rb
+75
-0
app/models/issue.rb
app/models/issue.rb
+1
-0
app/models/project.rb
app/models/project.rb
+4
-0
app/models/project_wiki.rb
app/models/project_wiki.rb
+1
-0
lib/gitlab/snippet_search_results.rb
lib/gitlab/snippet_search_results.rb
+2
-80
No files found.
app/helpers/snippets_helper.rb
View file @
be7bc9d9
...
...
@@ -17,4 +17,79 @@ module SnippetsHelper
snippet_path
(
snippet
)
end
end
# Get an array of line numbers surrounding a matching
# line, bounded by min/max.
#
# @returns Array of line numbers
def
bounded_line_numbers
(
line
,
min
,
max
,
surrounding_lines
)
lower
=
line
-
surrounding_lines
>
min
?
line
-
surrounding_lines
:
min
upper
=
line
+
surrounding_lines
<
max
?
line
+
surrounding_lines
:
max
(
lower
..
upper
).
to_a
end
# Returns a sorted set of lines to be included in a snippet preview.
# This ensures matching adjacent lines do not display duplicated
# surrounding code.
#
# @returns Array, unique and sorted.
def
matching_lines
(
lined_content
,
surrounding_lines
)
used_lines
=
[]
lined_content
.
each_with_index
do
|
line
,
line_number
|
used_lines
.
concat
bounded_line_numbers
(
line_number
,
0
,
lined_content
.
size
,
surrounding_lines
)
if
line
.
include?
(
query
)
end
used_lines
.
uniq
.
sort
end
# 'Chunkify' entire snippet. Splits the snippet data into matching lines +
# surrounding_lines() worth of unmatching lines.
#
# @returns a hash with {snippet_object, snippet_chunks:{data,start_line}}
def
chunk_snippet
(
snippet
,
surrounding_lines
=
3
)
lined_content
=
snippet
.
content
.
split
(
"
\n
"
)
used_lines
=
matching_lines
(
lined_content
,
surrounding_lines
)
snippet_chunk
=
[]
snippet_chunks
=
[]
snippet_start_line
=
0
last_line
=
-
1
# Go through each used line, and add consecutive lines as a single chunk
# to the snippet chunk array.
used_lines
.
each
do
|
line_number
|
if
last_line
<
0
# Start a new chunk.
snippet_start_line
=
line_number
snippet_chunk
<<
lined_content
[
line_number
]
elsif
last_line
==
line_number
-
1
# Consecutive line, continue chunk.
snippet_chunk
<<
lined_content
[
line_number
]
else
# Non-consecutive line, add chunk to chunk array.
snippet_chunks
<<
{
data:
snippet_chunk
.
join
(
"
\n
"
),
start_line:
snippet_start_line
+
1
}
# Start a new chunk.
snippet_chunk
=
[
lined_content
[
line_number
]]
snippet_start_line
=
line_number
end
last_line
=
line_number
end
# Add final chunk to chunk array
snippet_chunks
<<
{
data:
snippet_chunk
.
join
(
"
\n
"
),
start_line:
snippet_start_line
+
1
}
# Return snippet with chunk array
{
snippet_object:
snippet
,
snippet_chunks:
snippet_chunks
}
end
end
app/models/issue.rb
View file @
be7bc9d9
...
...
@@ -38,6 +38,7 @@ class Issue < ActiveRecord::Base
scope
:cared
,
->
(
user
)
{
where
(
assignee_id:
user
)
}
scope
:open_for
,
->
(
user
)
{
opened
.
assigned_to
(
user
)
}
scope
:in_projects
,
->
(
project_ids
)
{
where
(
project_id:
project_ids
)
}
state_machine
:state
,
initial: :opened
do
event
:close
do
...
...
app/models/project.rb
View file @
be7bc9d9
...
...
@@ -904,4 +904,8 @@ class Project < ActiveRecord::Base
def
runners_token
ensure_runners_token!
end
def
wiki
@wiki
||=
ProjectWiki
.
new
(
self
,
self
.
owner
)
end
end
app/models/project_wiki.rb
View file @
be7bc9d9
...
...
@@ -12,6 +12,7 @@ class ProjectWiki
# Returns a string describing what went wrong after
# an operation fails.
attr_reader
:error_message
attr_reader
:project
def
initialize
(
project
,
user
=
nil
)
@project
=
project
...
...
lib/gitlab/snippet_search_results.rb
View file @
be7bc9d9
module
Gitlab
class
SnippetSearchResults
<
SearchResults
include
SnippetsHelper
attr_reader
:limit_snippet_ids
def
initialize
(
limit_snippet_ids
,
query
)
...
...
@@ -47,85 +49,5 @@ module Gitlab
def
default_scope
'snippet_blobs'
end
# Get an array of line numbers surrounding a matching
# line, bounded by min/max.
#
# @returns Array of line numbers
def
bounded_line_numbers
(
line
,
min
,
max
)
lower
=
line
-
surrounding_lines
>
min
?
line
-
surrounding_lines
:
min
upper
=
line
+
surrounding_lines
<
max
?
line
+
surrounding_lines
:
max
(
lower
..
upper
).
to_a
end
# Returns a sorted set of lines to be included in a snippet preview.
# This ensures matching adjacent lines do not display duplicated
# surrounding code.
#
# @returns Array, unique and sorted.
def
matching_lines
(
lined_content
)
used_lines
=
[]
lined_content
.
each_with_index
do
|
line
,
line_number
|
used_lines
.
concat
bounded_line_numbers
(
line_number
,
0
,
lined_content
.
size
)
if
line
.
include?
(
query
)
end
used_lines
.
uniq
.
sort
end
# 'Chunkify' entire snippet. Splits the snippet data into matching lines +
# surrounding_lines() worth of unmatching lines.
#
# @returns a hash with {snippet_object, snippet_chunks:{data,start_line}}
def
chunk_snippet
(
snippet
)
lined_content
=
snippet
.
content
.
split
(
"
\n
"
)
used_lines
=
matching_lines
(
lined_content
)
snippet_chunk
=
[]
snippet_chunks
=
[]
snippet_start_line
=
0
last_line
=
-
1
# Go through each used line, and add consecutive lines as a single chunk
# to the snippet chunk array.
used_lines
.
each
do
|
line_number
|
if
last_line
<
0
# Start a new chunk.
snippet_start_line
=
line_number
snippet_chunk
<<
lined_content
[
line_number
]
elsif
last_line
==
line_number
-
1
# Consecutive line, continue chunk.
snippet_chunk
<<
lined_content
[
line_number
]
else
# Non-consecutive line, add chunk to chunk array.
snippet_chunks
<<
{
data:
snippet_chunk
.
join
(
"
\n
"
),
start_line:
snippet_start_line
+
1
}
# Start a new chunk.
snippet_chunk
=
[
lined_content
[
line_number
]]
snippet_start_line
=
line_number
end
last_line
=
line_number
end
# Add final chunk to chunk array
snippet_chunks
<<
{
data:
snippet_chunk
.
join
(
"
\n
"
),
start_line:
snippet_start_line
+
1
}
# Return snippet with chunk array
{
snippet_object:
snippet
,
snippet_chunks:
snippet_chunks
}
end
# Defines how many unmatching lines should be
# included around the matching lines in a snippet
def
surrounding_lines
3
end
end
end
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