zeiger 0.0.3 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +4 -0
- data/bin/zeiger +1 -0
- data/lib/zeiger/index.rb +36 -4
- data/lib/zeiger/monitor.rb +1 -1
- data/lib/zeiger/server.rb +21 -12
- data/lib/zeiger/version.rb +1 -1
- data/zeiger.gemspec +1 -1
- metadata +7 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f181861f454f2ab4812f3d9a2ec6d410967a2daf88f1c7d862a7bf6e4158bf87
|
4
|
+
data.tar.gz: ff327d5f231e04c7696e6abb7ec262ab7596e5285388a131a821de2415f7b461
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9c43b528593313f6a9cff99e4d938e1cd727dc5d485b149f7efce20b708b15f66e751c341091244d6fa2dad08004025ae9622ebda3436b7507a70db8d544b96c
|
7
|
+
data.tar.gz: 8c428d4830af1f08500ffdc10a8bc0b770467c9923f110ec778e6b39320aafc2c333665e0f08208c1ed5bd1c84eed601ac8a106a978917b7f351e6b85134b95c
|
data/README.md
CHANGED
@@ -50,6 +50,7 @@ ignore:
|
|
50
50
|
- .gif$
|
51
51
|
- .zip$
|
52
52
|
- .jpg$
|
53
|
+
- .ico$
|
53
54
|
- .xcf$
|
54
55
|
- .mpg$
|
55
56
|
```
|
@@ -60,6 +61,9 @@ When you invoke `zeiger search ...` or `zeiger files ...`, zeiger will consider
|
|
60
61
|
|
61
62
|
Zeiger considers a project root any directory containing any one of the following: `%w{ .zeiger.yml .git .hg Makefile Rakefile Gemfile build.xml }` (see `ROOT_FILES` constant in `index.rb`)
|
62
63
|
|
64
|
+
## TODO
|
65
|
+
|
66
|
+
Use `Listen` gem instead of manual filesystem scan
|
63
67
|
|
64
68
|
## Contributing
|
65
69
|
|
data/bin/zeiger
CHANGED
@@ -12,6 +12,7 @@ when "server" ; Zeiger::Server.new.run *$*
|
|
12
12
|
when "search" ; Zeiger::Client.new.send({ command: :search, pwd: pwd, search: query })
|
13
13
|
when "files" ; Zeiger::Client.new.send({ command: :files , pwd: pwd, files: query })
|
14
14
|
when "stats" ; Zeiger::Client.new.send({ command: :stats , pwd: pwd })
|
15
|
+
else puts "Zeiger version #{Zeiger::VERSION}, usage `zeiger server|search|files|stats`"
|
15
16
|
end
|
16
17
|
|
17
18
|
# define file groups
|
data/lib/zeiger/index.rb
CHANGED
@@ -2,7 +2,19 @@ module Zeiger
|
|
2
2
|
INDICES = { }
|
3
3
|
|
4
4
|
class Index
|
5
|
-
|
5
|
+
ROOT_GLOBS = [%w{ *.gemspec }]
|
6
|
+
ROOT_GROUPS = [%w{ .zeiger.yml },
|
7
|
+
%w{ .git },
|
8
|
+
%w{ .hg },
|
9
|
+
%w{ Makefile },
|
10
|
+
%w{ Rakefile },
|
11
|
+
%w{ Gemfile },
|
12
|
+
%w{ build.xml },
|
13
|
+
%w{ lib LICENSE },
|
14
|
+
%w{ lib spec },
|
15
|
+
%w{ lib MIT-LICENSE },
|
16
|
+
%w{ lib README.md },
|
17
|
+
]
|
6
18
|
NGRAM_SIZE = 3
|
7
19
|
|
8
20
|
attr_accessor :index, :dir, :name, :includes, :ignore, :files, :config, :monitor, :stats
|
@@ -33,7 +45,8 @@ module Zeiger
|
|
33
45
|
raise "no path! #{path.inspect}" if path == nil || path.strip == ''
|
34
46
|
return INDICES[path] if INDICES[path]
|
35
47
|
return nil if path == '/'
|
36
|
-
return (INDICES[path] = new(path)) if
|
48
|
+
return (INDICES[path] = new(path)) if ROOT_GROUPS.any? { |rg| rg.all? { |f| File.exist?(File.join path, f) } }
|
49
|
+
return (INDICES[path] = new(path)) if ROOT_GLOBS.any? { |rg| rg.all? { |f| Dir.glob(File.join path, f).size > 0 } }
|
37
50
|
return from_path(File.dirname path)
|
38
51
|
end
|
39
52
|
|
@@ -58,17 +71,36 @@ module Zeiger
|
|
58
71
|
}
|
59
72
|
|
60
73
|
puts "#{info.summary} : re-index"
|
74
|
+
rescue Exception => e
|
75
|
+
puts "Not able to read #{file}"
|
76
|
+
while e
|
77
|
+
puts e.message
|
78
|
+
puts e.backtrace.join("\n")
|
79
|
+
puts
|
80
|
+
e = e.cause
|
81
|
+
end
|
61
82
|
end
|
62
83
|
|
63
84
|
def glob pattern ; Dir.glob(File.join(dir, pattern)) ; end
|
64
85
|
def rescan ; monitor.build_index ; end
|
65
|
-
def get_ngram_lines ngrams ; ngrams.map { |ngram|
|
86
|
+
def get_ngram_lines ngrams ; ngrams.map { |ngram| index[ngram] || [] }.reduce(&:&) ; end
|
66
87
|
def exec_query regex, ngrams ; get_ngram_lines(ngrams).select { |line| line.matches? regex } ; end
|
67
88
|
def sort_by_filename lines ; lines.sort_by { |line| [line.file.local_filename, line.line_number] } ; end
|
89
|
+
def all_matching q ; index.keys.select { |k| k.match q }.map { |k| index[k] }.reduce(&:|) ; end
|
68
90
|
|
69
91
|
def query txt
|
70
92
|
puts "got query #{txt.inspect}"
|
71
|
-
|
93
|
+
|
94
|
+
lines = if (txt.strip.to_s == '')
|
95
|
+
puts "empty query, not searching!"
|
96
|
+
[]
|
97
|
+
elsif txt.length <= NGRAM_SIZE
|
98
|
+
all_matching Regexp.compile(Regexp.escape txt)
|
99
|
+
else
|
100
|
+
exec_query Regexp.compile(Regexp.escape txt), txt.ngrams(NGRAM_SIZE)
|
101
|
+
end
|
102
|
+
|
103
|
+
sort_by_filename(lines)
|
72
104
|
end
|
73
105
|
|
74
106
|
def file_list name
|
data/lib/zeiger/monitor.rb
CHANGED
@@ -5,7 +5,7 @@ module Zeiger
|
|
5
5
|
def initialize dir, index, attrs
|
6
6
|
@dir, @index, @stat = dir, index, Hash.new
|
7
7
|
@includes = attrs["search"] || %w{ app/**/* bin/**/* config/**/* lib/**/* spec/**/* test/**/* }
|
8
|
-
@ignore = attrs["ignore"] || %w{ .gz$ .png$ .jpg$ .pdf$ }
|
8
|
+
@ignore = attrs["ignore"] || %w{ .gz$ .png$ .jpg$ .pdf$ .ico$ }
|
9
9
|
end
|
10
10
|
|
11
11
|
def ignore? filename
|
data/lib/zeiger/server.rb
CHANGED
@@ -4,16 +4,19 @@ module Zeiger
|
|
4
4
|
SOCKET_NAME = "/tmp/zeiger-index"
|
5
5
|
|
6
6
|
class Server
|
7
|
-
def run command, *args
|
7
|
+
def run command, sleepytime=nil, *args
|
8
|
+
sleepytime = (sleepytime || 10).to_f
|
9
|
+
raise "sleep time must be greater than zero, got #{sleepytime.inspect}" unless sleepytime > 0.0
|
10
|
+
puts "starting server with sleep interval of #{sleepytime} seconds"
|
8
11
|
Thread.new do
|
9
12
|
begin
|
10
13
|
while true do
|
11
14
|
indices = Zeiger::INDICES.values
|
12
15
|
indices.each do |index|
|
13
|
-
puts "scanning #{index.name} at #{index.dir}"
|
16
|
+
puts "#{Time.now} scanning #{index.name} at #{index.dir}"
|
14
17
|
index.rescan
|
15
18
|
end
|
16
|
-
sleep
|
19
|
+
sleep sleepytime
|
17
20
|
end
|
18
21
|
rescue Exception => e
|
19
22
|
puts e.message
|
@@ -29,15 +32,21 @@ module Zeiger
|
|
29
32
|
puts incoming.to_yaml
|
30
33
|
|
31
34
|
index = Index.from_path incoming[:pwd]
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
35
|
+
|
36
|
+
if index
|
37
|
+
puts "querying index #{index.name}"
|
38
|
+
|
39
|
+
case incoming[:command]
|
40
|
+
when :search
|
41
|
+
index.query(incoming[:search]).each { |res| sock.puts res.to_s }
|
42
|
+
when :stats
|
43
|
+
sock.puts index.stats.stats.to_yaml
|
44
|
+
when :files
|
45
|
+
index.file_list(incoming[:files]).each { |f| sock.puts f.local_filename }
|
46
|
+
end
|
47
|
+
|
48
|
+
else
|
49
|
+
puts "no index found for path #{incoming[:pwd].inspect}"
|
41
50
|
end
|
42
51
|
|
43
52
|
ensure
|
data/lib/zeiger/version.rb
CHANGED
data/zeiger.gemspec
CHANGED
@@ -18,6 +18,6 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_development_dependency "bundler"
|
21
|
+
spec.add_development_dependency "bundler"
|
22
22
|
spec.add_development_dependency "rake", "~> 10.0"
|
23
23
|
end
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zeiger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- conanite
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-09-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -83,8 +83,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
83
83
|
- !ruby/object:Gem::Version
|
84
84
|
version: '0'
|
85
85
|
requirements: []
|
86
|
-
|
87
|
-
rubygems_version: 2.2.2
|
86
|
+
rubygems_version: 3.0.3
|
88
87
|
signing_key:
|
89
88
|
specification_version: 4
|
90
89
|
summary: Provide text index of files in current directory tree and a unix socket to
|