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
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
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
83 additions
and
80 deletions
+83
-80
snippets_helper.rb
app/helpers/snippets_helper.rb
+75
-0
issue.rb
app/models/issue.rb
+1
-0
project.rb
app/models/project.rb
+4
-0
project_wiki.rb
app/models/project_wiki.rb
+1
-0
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