zeiger 0.0.3 → 0.0.7
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 +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
|