gitlab-elasticsearch-git 0.0.15 → 0.0.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitlab-ci.yml +16 -0
- data/CHANGELOG +3 -0
- data/Gemfile.lock +1 -1
- data/lib/elasticsearch/git/model.rb +9 -16
- data/lib/elasticsearch/git/repository.rb +41 -24
- data/lib/elasticsearch/git/version.rb +1 -1
- data/spec/main_spec.rb +21 -17
- data/spec/spec_helper.rb +1 -1
- data/spec/support/elastic_helper.rb +3 -2
- data/spec/support/seed_helper.rb +2 -2
- data/spec/support/test_repository.rb +10 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 054efbf7262d71c052ff192800e9bc22920085b4
|
4
|
+
data.tar.gz: c49f66ffa207e47d68527065a7c0cc656a3b658d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fe1ff8b03b42c23ebf79210a2b7e0ee576e5d60934dbafd8b5d08c3371ac74c916d3308d294b7d23f766c9673a38f4563e767baa512439c8f86eaa77aa6eb6ec
|
7
|
+
data.tar.gz: 2e04673c2d31379398109e8cf2534bc9b2880dd3c603334fd12eb1e063cb4d83add0a9ce25ab8baf3561f23a7d4ded9daef672be68c23ee3bd85f73aad091b06
|
data/.gitlab-ci.yml
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
image: "ruby:2.3"
|
2
|
+
|
3
|
+
services:
|
4
|
+
- elasticsearch:latest
|
5
|
+
|
6
|
+
variables:
|
7
|
+
ELASTICSEARCH_HOST: "elasticsearch"
|
8
|
+
|
9
|
+
before_script:
|
10
|
+
- apt-get update -yqqq; apt-get -o dir::cache::archives="vendor/apt" install -y -qq --force-yes libicu-dev cmake
|
11
|
+
- gem install bundler # Bundler is not installed with the image
|
12
|
+
- bundle install -j $(nproc) # Install dependencies
|
13
|
+
|
14
|
+
rspec:
|
15
|
+
script:
|
16
|
+
- rspec
|
data/CHANGELOG
CHANGED
data/Gemfile.lock
CHANGED
@@ -24,11 +24,6 @@ module Elasticsearch
|
|
24
24
|
index: {
|
25
25
|
analysis: {
|
26
26
|
analyzer: {
|
27
|
-
human_analyzer: {
|
28
|
-
type: 'custom',
|
29
|
-
tokenizer: 'human_tokenizer',
|
30
|
-
filter: %w(lowercase asciifolding)
|
31
|
-
},
|
32
27
|
path_analyzer: {
|
33
28
|
type: 'custom',
|
34
29
|
tokenizer: 'path_tokenizer',
|
@@ -42,32 +37,30 @@ module Elasticsearch
|
|
42
37
|
code_analyzer: {
|
43
38
|
type: 'custom',
|
44
39
|
tokenizer: 'standard',
|
45
|
-
filter: %w(lowercase asciifolding
|
40
|
+
filter: %w(code lowercase asciifolding),
|
46
41
|
char_filter: ["code_mapping"]
|
47
42
|
}
|
48
43
|
},
|
49
44
|
tokenizer: {
|
50
45
|
sha_tokenizer: {
|
51
46
|
type: "edgeNGram",
|
52
|
-
min_gram:
|
47
|
+
min_gram: 5,
|
53
48
|
max_gram: 40,
|
54
49
|
token_chars: %w(letter digit)
|
55
50
|
},
|
56
|
-
human_tokenizer: {
|
57
|
-
type: "nGram",
|
58
|
-
min_gram: 1,
|
59
|
-
max_gram: 20,
|
60
|
-
token_chars: %w(letter digit)
|
61
|
-
},
|
62
51
|
path_tokenizer: {
|
63
52
|
type: 'path_hierarchy',
|
64
53
|
reverse: true
|
65
54
|
},
|
66
55
|
},
|
67
56
|
filter: {
|
68
|
-
|
69
|
-
type: "
|
70
|
-
|
57
|
+
code: {
|
58
|
+
type: "pattern_capture",
|
59
|
+
preserve_original: 1,
|
60
|
+
patterns: [
|
61
|
+
"(\\p{Ll}+|\\p{Lu}\\p{Ll}+|\\p{Lu}+)",
|
62
|
+
"(\\d+)"
|
63
|
+
]
|
71
64
|
}
|
72
65
|
},
|
73
66
|
char_filter: {
|
@@ -23,34 +23,51 @@ module Elasticsearch
|
|
23
23
|
|
24
24
|
mapping _timestamp: { enabled: true } do
|
25
25
|
indexes :blob do
|
26
|
-
indexes :id, type: :string,
|
27
|
-
|
28
|
-
|
29
|
-
indexes :
|
30
|
-
|
31
|
-
indexes :
|
32
|
-
|
33
|
-
|
26
|
+
indexes :id, type: :string,
|
27
|
+
index_options: 'offsets',
|
28
|
+
analyzer: :sha_analyzer
|
29
|
+
indexes :rid, type: :string,
|
30
|
+
index: :not_analyzed
|
31
|
+
indexes :oid, type: :string,
|
32
|
+
index_options: 'offsets',
|
33
|
+
analyzer: :sha_analyzer
|
34
|
+
indexes :commit_sha, type: :string,
|
35
|
+
index_options: 'offsets',
|
36
|
+
analyzer: :sha_analyzer
|
37
|
+
indexes :path, type: :string,
|
38
|
+
analyzer: :path_analyzer
|
39
|
+
indexes :file_name, type: :string,
|
40
|
+
analyzer: :code_analyzer
|
41
|
+
indexes :content, type: :string,
|
42
|
+
index_options: 'offsets',
|
43
|
+
analyzer: :code_analyzer
|
44
|
+
indexes :language, type: :string,
|
45
|
+
index: :not_analyzed
|
34
46
|
end
|
35
47
|
|
36
48
|
indexes :commit do
|
37
|
-
indexes :id, type: :string,
|
38
|
-
|
39
|
-
|
49
|
+
indexes :id, type: :string,
|
50
|
+
index_options: 'offsets',
|
51
|
+
analyzer: :sha_analyzer
|
52
|
+
indexes :rid, type: :string,
|
53
|
+
index: :not_analyzed
|
54
|
+
indexes :sha, type: :string,
|
55
|
+
index_options: 'offsets',
|
56
|
+
analyzer: :sha_analyzer
|
40
57
|
|
41
58
|
indexes :author do
|
42
|
-
indexes :name, type: :string, index_options: 'offsets'
|
43
|
-
indexes :email, type: :string, index_options: 'offsets'
|
59
|
+
indexes :name, type: :string, index_options: 'offsets'
|
60
|
+
indexes :email, type: :string, index_options: 'offsets'
|
44
61
|
indexes :time, type: :date, format: :basic_date_time_no_millis
|
45
62
|
end
|
46
63
|
|
47
64
|
indexes :commiter do
|
48
|
-
indexes :name, type: :string, index_options: 'offsets'
|
49
|
-
indexes :email, type: :string, index_options: 'offsets'
|
65
|
+
indexes :name, type: :string, index_options: 'offsets'
|
66
|
+
indexes :email, type: :string, index_options: 'offsets'
|
50
67
|
indexes :time, type: :date, format: :basic_date_time_no_millis
|
51
68
|
end
|
52
69
|
|
53
|
-
indexes :message, type: :string, index_options: 'offsets'
|
70
|
+
indexes :message, type: :string, index_options: 'offsets'
|
54
71
|
end
|
55
72
|
end
|
56
73
|
|
@@ -331,11 +348,6 @@ module Elasticsearch
|
|
331
348
|
@repository_id
|
332
349
|
end
|
333
350
|
|
334
|
-
# For Overwrite
|
335
|
-
def self.repositories_count
|
336
|
-
10
|
337
|
-
end
|
338
|
-
|
339
351
|
unless defined?(path_to_repo)
|
340
352
|
def path_to_repo
|
341
353
|
if @path_to_repo.blank?
|
@@ -359,8 +371,15 @@ module Elasticsearch
|
|
359
371
|
def client_for_indexing
|
360
372
|
@client_for_indexing ||= Elasticsearch::Client.new retry_on_failure: 5
|
361
373
|
end
|
374
|
+
end
|
362
375
|
|
363
|
-
|
376
|
+
module ClassMethods
|
377
|
+
# For Overwrite
|
378
|
+
def repositories_count
|
379
|
+
10
|
380
|
+
end
|
381
|
+
|
382
|
+
def search(query, type: :all, page: 1, per: 20, options: {})
|
364
383
|
results = { blobs: [], commits: []}
|
365
384
|
|
366
385
|
case type.to_sym
|
@@ -375,9 +394,7 @@ module Elasticsearch
|
|
375
394
|
|
376
395
|
results
|
377
396
|
end
|
378
|
-
end
|
379
397
|
|
380
|
-
module ClassMethods
|
381
398
|
def search_commit(query, page: 1, per: 20, options: {})
|
382
399
|
page ||= 1
|
383
400
|
|
data/spec/main_spec.rb
CHANGED
@@ -3,18 +3,16 @@ require 'spec_helper'
|
|
3
3
|
describe TestRepository do
|
4
4
|
before do
|
5
5
|
remove_index(TestRepository.index_name)
|
6
|
+
TestRepository.__elasticsearch__.create_index!
|
6
7
|
end
|
7
8
|
|
8
|
-
|
9
|
-
expect(index_exist?(TestRepository.index_name)).to be_falsey
|
10
|
-
|
11
|
-
TestRepository.__elasticsearch__.create_index!
|
9
|
+
let(:repo) { TestRepository.new }
|
12
10
|
|
11
|
+
it "creates an index" do
|
13
12
|
expect(index_exist?(TestRepository.index_name)).to be_truthy
|
14
13
|
end
|
15
14
|
|
16
15
|
it "indexes all blobs and searches" do
|
17
|
-
repo = TestRepository.new
|
18
16
|
repo.index_blobs
|
19
17
|
|
20
18
|
TestRepository.__elasticsearch__.refresh_index!
|
@@ -23,27 +21,24 @@ describe TestRepository do
|
|
23
21
|
end
|
24
22
|
|
25
23
|
it "indexes all commits and searches" do
|
26
|
-
repo = TestRepository.new
|
27
24
|
repo.index_commits
|
28
25
|
|
29
26
|
TestRepository.__elasticsearch__.refresh_index!
|
30
27
|
|
31
|
-
expect(repo.search('test', type: :commit)[:commits][:total_count]).to eq(
|
28
|
+
expect(repo.search('test', type: :commit)[:commits][:total_count]).to eq(3)
|
32
29
|
end
|
33
30
|
|
34
31
|
it "searches through all types" do
|
35
|
-
repo = TestRepository.new
|
36
32
|
repo.index_commits
|
37
33
|
repo.index_blobs
|
38
34
|
|
39
35
|
TestRepository.__elasticsearch__.refresh_index!
|
40
36
|
|
41
|
-
expect(repo.search('test')[:commits][:total_count]).to eq(
|
37
|
+
expect(repo.search('test')[:commits][:total_count]).to eq(3)
|
42
38
|
expect(repo.search('def')[:blobs][:total_count]).to eq(4)
|
43
39
|
end
|
44
40
|
|
45
41
|
it "searches through filename" do
|
46
|
-
repo = TestRepository.new
|
47
42
|
repo.index_blobs
|
48
43
|
|
49
44
|
TestRepository.__elasticsearch__.refresh_index!
|
@@ -55,8 +50,20 @@ describe TestRepository do
|
|
55
50
|
expect(found_version_file).to be_truthy
|
56
51
|
end
|
57
52
|
|
53
|
+
it "searches through camel cased words" do
|
54
|
+
TestRepository.__elasticsearch__.create_index!(force: true)
|
55
|
+
repo.index_blobs
|
56
|
+
|
57
|
+
TestRepository.__elasticsearch__.refresh_index!
|
58
|
+
|
59
|
+
found_version_file = repo.search('Hip')[:blobs][:results].any? do |result|
|
60
|
+
result["_source"]["blob"]["file_name"] == "camelCase.rb"
|
61
|
+
end
|
62
|
+
|
63
|
+
expect(found_version_file).to be_truthy
|
64
|
+
end
|
65
|
+
|
58
66
|
it "indexes specified commits" do
|
59
|
-
repo = TestRepository.new
|
60
67
|
repo.index_commits(
|
61
68
|
from_rev: '40f4a7a617393735a95a0bb67b08385bc1e7c66d',
|
62
69
|
to_rev: '732401c65e924df81435deb12891ef570167d2e2'
|
@@ -68,7 +75,6 @@ describe TestRepository do
|
|
68
75
|
end
|
69
76
|
|
70
77
|
it "indexes specified blobs" do
|
71
|
-
repo = TestRepository.new
|
72
78
|
repo.index_blobs(
|
73
79
|
from_rev: '40f4a7a617393735a95a0bb67b08385bc1e7c66d',
|
74
80
|
to_rev: '732401c65e924df81435deb12891ef570167d2e2'
|
@@ -80,7 +86,6 @@ describe TestRepository do
|
|
80
86
|
end
|
81
87
|
|
82
88
|
it "applies repository_id filter for blobs" do
|
83
|
-
repo = TestRepository.new
|
84
89
|
repo.index_blobs
|
85
90
|
|
86
91
|
TestRepository.new("repo_second").index_blobs
|
@@ -92,14 +97,13 @@ describe TestRepository do
|
|
92
97
|
end
|
93
98
|
|
94
99
|
it "applies repository_id filter for commits" do
|
95
|
-
repo = TestRepository.new
|
96
100
|
repo.index_commits
|
97
101
|
|
98
102
|
TestRepository.new("repo_second").index_commits
|
99
103
|
|
100
104
|
TestRepository.__elasticsearch__.refresh_index!
|
101
105
|
|
102
|
-
expect(TestRepository.__elasticsearch__.search('test').results.count).to eq(
|
103
|
-
expect(repo.search('test')[:commits][:total_count]).to eq(
|
106
|
+
expect(TestRepository.__elasticsearch__.search('test').results.count).to eq(6)
|
107
|
+
expect(repo.search('test')[:commits][:total_count]).to eq(3)
|
104
108
|
end
|
105
|
-
end
|
109
|
+
end
|
data/spec/spec_helper.rb
CHANGED
data/spec/support/seed_helper.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'fileutils'
|
2
2
|
|
3
3
|
module SeedHelper
|
4
|
-
GITLAB_URL = "
|
4
|
+
GITLAB_URL = "https://gitlab.com/gitlab-org/gitlab-elasticsearch-git-test.git"
|
5
5
|
|
6
6
|
def ensure_seeds
|
7
7
|
if File.exists?(SUPPORT_PATH)
|
@@ -22,4 +22,4 @@ module SeedHelper
|
|
22
22
|
def git_env
|
23
23
|
{'GIT_TEMPLATE_DIR' => ''}
|
24
24
|
end
|
25
|
-
end
|
25
|
+
end
|
@@ -1,10 +1,20 @@
|
|
1
1
|
class TestRepository
|
2
2
|
include Elasticsearch::Git::Repository
|
3
3
|
|
4
|
+
CLIENT = Elasticsearch::Client.new(
|
5
|
+
host: (ENV['ELASTICSEARCH_HOST'] || 'localhost')
|
6
|
+
)
|
7
|
+
|
8
|
+
self.__elasticsearch__.client = CLIENT
|
9
|
+
|
4
10
|
def initialize(id = 'test_1')
|
5
11
|
@repo_id = id
|
6
12
|
end
|
7
13
|
|
14
|
+
def client_for_indexing
|
15
|
+
CLIENT
|
16
|
+
end
|
17
|
+
|
8
18
|
def repository_id
|
9
19
|
@repo_id
|
10
20
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gitlab-elasticsearch-git
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.16
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrey Kumanyaev
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2016-
|
13
|
+
date: 2016-08-09 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: elasticsearch-model
|
@@ -119,6 +119,7 @@ extensions: []
|
|
119
119
|
extra_rdoc_files: []
|
120
120
|
files:
|
121
121
|
- ".gitignore"
|
122
|
+
- ".gitlab-ci.yml"
|
122
123
|
- ".rspec"
|
123
124
|
- CHANGELOG
|
124
125
|
- Gemfile
|