starscope 1.0.3 → 1.0.4

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.
@@ -1,7 +1,13 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
- v1.0.3 (trunk)
4
+ v1.0.4 (trunk)
5
+ --------------------
6
+
7
+ Improvements:
8
+ * Optimized deleting stale records.
9
+
10
+ v1.0.3 (2014-06-10)
5
11
  --------------------
6
12
 
7
13
  Improvements:
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- starscope (1.0.3)
4
+ starscope (1.0.4)
5
5
  oj (~> 2.9)
6
6
  parser (~> 2.1)
7
7
  ruby-progressbar (~> 1.5)
@@ -76,14 +76,14 @@ class StarScope::DB
76
76
  paths = paths.map {|p| normalize_fnmatch(p)}
77
77
  @meta[:excludes] += paths
78
78
  @meta[:excludes].uniq!
79
+
80
+ deleted = []
79
81
  @meta[:files].delete_if do |name, record|
80
- if matches_exclude(paths, name)
81
- remove_file(name)
82
- true
83
- else
84
- false
85
- end
82
+ ret = matches_exclude(paths, name)
83
+ deleted << name if ret
84
+ ret
86
85
  end
86
+ remove_files(deleted)
87
87
  end
88
88
 
89
89
  def add_paths(paths)
@@ -102,15 +102,30 @@ class StarScope::DB
102
102
  def update
103
103
  new_files = (Dir.glob(@meta[:paths]).select {|f| File.file? f}) - @meta[:files].keys
104
104
  new_files.delete_if {|f| matches_exclude(@meta[:excludes], f)}
105
+
105
106
  @output.new_pbar("Updating", new_files.length + @meta[:files].length)
106
107
  changed = false
108
+ @tables, tmp_tbls = {}, @tables
109
+ to_prune = []
110
+
107
111
  @meta[:files].delete_if do |name, record|
108
112
  @output.log("Updating `#{name}`")
109
- ret = update_file(name)
113
+
114
+ event = file_event(name, record)
115
+ if event != :unchanged
116
+ to_prune << name
117
+ changed = true
118
+ parse_file(name) if event == :modified
119
+ end
120
+
110
121
  @output.inc_pbar
111
- changed = true if ret
112
- ret == :delete
122
+ event == :deleted
113
123
  end
124
+
125
+ @tables, tmp_tbls = tmp_tbls, @tables
126
+ remove_files(to_prune)
127
+ merge_db(tmp_tbls)
128
+
114
129
  add_new_files(new_files)
115
130
  @output.finish_pbar
116
131
  changed || !new_files.empty?
@@ -309,20 +324,27 @@ END
309
324
  end
310
325
  end
311
326
 
312
- def remove_file(file)
327
+ def merge_db(new_tbls)
328
+ new_tbls.each do |name, tbl|
329
+ @tables[name] ||= []
330
+ @tables[name].concat(tbl)
331
+ end
332
+ end
333
+
334
+ def remove_files(files)
335
+ check = Hash[files.map {|f| [f, true]}]
313
336
  @tables.each do |name, tbl|
314
- tbl.delete_if {|val| val[:file] == file}
337
+ tbl.delete_if {|val| check[val[:file]]}
315
338
  end
316
339
  end
317
340
 
318
- def update_file(file)
319
- if not File.exists?(file) or not File.file?(file)
320
- remove_file(file)
321
- :delete
322
- elsif @meta[:files][file][:last_updated] < File.mtime(file).to_i
323
- remove_file(file)
324
- parse_file(file)
325
- :update
341
+ def file_event(name, record)
342
+ if not File.exists?(name) or not File.file?(name)
343
+ :deleted
344
+ elsif record[:last_updated] < File.mtime(name).to_i
345
+ :modified
346
+ else
347
+ :unchanged
326
348
  end
327
349
  end
328
350
 
@@ -1,3 +1,3 @@
1
1
  module StarScope
2
- VERSION = "1.0.3"
2
+ VERSION = "1.0.4"
3
3
  end
@@ -17,6 +17,8 @@ describe StarScope::DB do
17
17
  assert defs.include? :load
18
18
  assert defs.include? :update
19
19
  assert defs.include? :files_from_path
20
+ assert defs.include? :single_var
21
+ assert defs.include? :single_const
20
22
  end
21
23
 
22
24
  before do
@@ -27,34 +29,53 @@ describe StarScope::DB do
27
29
  proc {@db.dump_table(:foo)}.must_raise StarScope::DB::NoTableError
28
30
  end
29
31
 
30
- it "must correctly add paths" do
32
+ it "must add paths" do
31
33
  paths = [GOLANG_SAMPLE, 'test/files/**/*']
32
34
  @db.add_paths(paths)
33
35
  @db.instance_eval('@meta[:paths]').must_equal paths
34
36
  validate(@db)
35
37
  end
36
38
 
37
- it "must correctly pick up new files in old paths" do
39
+ it "must add excludes" do
40
+ paths = [GOLANG_SAMPLE, 'test/files/**/*']
41
+ @db.add_paths(paths)
42
+ @db.add_excludes(['test/files/**'])
43
+ files = @db.instance_eval('@meta[:files]').keys
44
+ files.wont_include RUBY_SAMPLE
45
+ files.wont_include GOLANG_SAMPLE
46
+ tbls = @db.instance_eval('@tables')
47
+ tbls[:defs].must_be_empty
48
+ tbls[:end].must_be_empty
49
+ end
50
+
51
+ it "must pick up new files in old paths" do
38
52
  @db.instance_eval('@meta[:paths] = ["test/files/**/*"]')
39
53
  @db.update
40
54
  validate(@db)
41
55
  end
42
56
 
43
- it "must correctly remove old files in existing paths" do
44
- @db.instance_eval('@meta[:paths] = ["test/files"]')
45
- @db.instance_eval('@meta[:files] = {"test/files/foo" => {:last_update=>1}}')
46
- @db.instance_eval('@meta[:files]').keys.must_include 'test/files/foo'
57
+ it "must remove old files in existing paths" do
58
+ @db.instance_eval('@meta[:paths] = ["test/files/**/*"]')
59
+ @db.instance_eval('@meta[:files] = {"test/files/foo" => {:last_updated=>1}}')
47
60
  @db.update
48
61
  @db.instance_eval('@meta[:files]').keys.wont_include 'test/files/foo'
49
62
  end
50
63
 
51
- it "must correctly load an old DB file" do
64
+ it "must update stale existing files" do
65
+ @db.instance_eval('@meta[:paths] = ["test/files/**/*"]')
66
+ @db.instance_eval("@meta[:files] = {\"#{GOLANG_SAMPLE}\" => {:last_updated=>1}}")
67
+ @db.instance_eval("@tables[:defs] = [{:file => \"#{GOLANG_SAMPLE}\"}]")
68
+ @db.update
69
+ validate(@db)
70
+ end
71
+
72
+ it "must load an old DB file" do
52
73
  @db.load('test/files/db_old.json.gz')
53
74
  @db.instance_eval('@meta[:paths]').must_equal ['test/files/**/*']
54
75
  validate(@db)
55
76
  end
56
77
 
57
- it "must correctly round-trip a database" do
78
+ it "must round-trip a database" do
58
79
  file = Tempfile.new('starscope_test')
59
80
  begin
60
81
  @db.add_paths(['test/files'])
@@ -68,7 +89,7 @@ describe StarScope::DB do
68
89
  end
69
90
  end
70
91
 
71
- it "must correctly export to ctags" do
92
+ it "must export to ctags" do
72
93
  file = Tempfile.new('starscope_test')
73
94
  begin
74
95
  @db.add_paths(['test/files'])
@@ -82,7 +103,7 @@ describe StarScope::DB do
82
103
  end
83
104
  end
84
105
 
85
- it "must correctly export to cscope" do
106
+ it "must export to cscope" do
86
107
  file = Tempfile.new('starscope_test')
87
108
  begin
88
109
  @db.add_paths(['test/files'])
@@ -98,7 +119,7 @@ describe StarScope::DB do
98
119
  end
99
120
  end
100
121
 
101
- it "must correctly run queries" do
122
+ it "must run queries" do
102
123
  @db.add_paths(['test/files'])
103
124
  @db.query(:calls, "abc").must_equal []
104
125
  @db.query(:defs, "xyz").must_equal []
metadata CHANGED
@@ -1,18 +1,20 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: starscope
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.0.4
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Evan Huus
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2014-06-10 00:00:00.000000000 Z
12
+ date: 2014-06-11 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: oj
15
16
  requirement: !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
19
  - - ~>
18
20
  - !ruby/object:Gem::Version
@@ -20,6 +22,7 @@ dependencies:
20
22
  type: :runtime
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
23
26
  requirements:
24
27
  - - ~>
25
28
  - !ruby/object:Gem::Version
@@ -27,6 +30,7 @@ dependencies:
27
30
  - !ruby/object:Gem::Dependency
28
31
  name: parser
29
32
  requirement: !ruby/object:Gem::Requirement
33
+ none: false
30
34
  requirements:
31
35
  - - ~>
32
36
  - !ruby/object:Gem::Version
@@ -34,6 +38,7 @@ dependencies:
34
38
  type: :runtime
35
39
  prerelease: false
36
40
  version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
37
42
  requirements:
38
43
  - - ~>
39
44
  - !ruby/object:Gem::Version
@@ -41,6 +46,7 @@ dependencies:
41
46
  - !ruby/object:Gem::Dependency
42
47
  name: ruby-progressbar
43
48
  requirement: !ruby/object:Gem::Requirement
49
+ none: false
44
50
  requirements:
45
51
  - - ~>
46
52
  - !ruby/object:Gem::Version
@@ -48,6 +54,7 @@ dependencies:
48
54
  type: :runtime
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
51
58
  requirements:
52
59
  - - ~>
53
60
  - !ruby/object:Gem::Version
@@ -55,6 +62,7 @@ dependencies:
55
62
  - !ruby/object:Gem::Dependency
56
63
  name: bundler
57
64
  requirement: !ruby/object:Gem::Requirement
65
+ none: false
58
66
  requirements:
59
67
  - - ~>
60
68
  - !ruby/object:Gem::Version
@@ -62,6 +70,7 @@ dependencies:
62
70
  type: :development
63
71
  prerelease: false
64
72
  version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
65
74
  requirements:
66
75
  - - ~>
67
76
  - !ruby/object:Gem::Version
@@ -69,43 +78,49 @@ dependencies:
69
78
  - !ruby/object:Gem::Dependency
70
79
  name: rake
71
80
  requirement: !ruby/object:Gem::Requirement
81
+ none: false
72
82
  requirements:
73
- - - '>='
83
+ - - ! '>='
74
84
  - !ruby/object:Gem::Version
75
85
  version: '0'
76
86
  type: :development
77
87
  prerelease: false
78
88
  version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
79
90
  requirements:
80
- - - '>='
91
+ - - ! '>='
81
92
  - !ruby/object:Gem::Version
82
93
  version: '0'
83
94
  - !ruby/object:Gem::Dependency
84
95
  name: pry
85
96
  requirement: !ruby/object:Gem::Requirement
97
+ none: false
86
98
  requirements:
87
- - - '>='
99
+ - - ! '>='
88
100
  - !ruby/object:Gem::Version
89
101
  version: '0'
90
102
  type: :development
91
103
  prerelease: false
92
104
  version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
93
106
  requirements:
94
- - - '>='
107
+ - - ! '>='
95
108
  - !ruby/object:Gem::Version
96
109
  version: '0'
97
110
  - !ruby/object:Gem::Dependency
98
111
  name: minitest
99
112
  requirement: !ruby/object:Gem::Requirement
113
+ none: false
100
114
  requirements:
101
- - - '>='
115
+ - - ! '>='
102
116
  - !ruby/object:Gem::Version
103
117
  version: '0'
104
118
  type: :development
105
119
  prerelease: false
106
120
  version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
107
122
  requirements:
108
- - - '>='
123
+ - - ! '>='
109
124
  - !ruby/object:Gem::Version
110
125
  version: '0'
111
126
  description: A tool like the venerable cscope, but for ruby, golang and other languages
@@ -148,26 +163,30 @@ files:
148
163
  homepage: https://github.com/eapache/starscope
149
164
  licenses:
150
165
  - MIT
151
- metadata: {}
152
166
  post_install_message:
153
167
  rdoc_options: []
154
168
  require_paths:
155
169
  - lib
156
170
  required_ruby_version: !ruby/object:Gem::Requirement
171
+ none: false
157
172
  requirements:
158
- - - '>='
173
+ - - ! '>='
159
174
  - !ruby/object:Gem::Version
160
175
  version: 1.8.7
161
176
  required_rubygems_version: !ruby/object:Gem::Requirement
177
+ none: false
162
178
  requirements:
163
- - - '>='
179
+ - - ! '>='
164
180
  - !ruby/object:Gem::Version
165
181
  version: '0'
182
+ segments:
183
+ - 0
184
+ hash: -1535830419513548498
166
185
  requirements: []
167
186
  rubyforge_project:
168
- rubygems_version: 2.0.14
187
+ rubygems_version: 1.8.23
169
188
  signing_key:
170
- specification_version: 4
189
+ specification_version: 3
171
190
  summary: A code indexer and analyzer
172
191
  test_files:
173
192
  - test/files/db_old.json.gz
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: 38376cc70ae8d935176b3b428d6b82acb2e9ed28
4
- data.tar.gz: eb7761acf9adc1aef79eaf1e2e74b04d7be51ca2
5
- SHA512:
6
- metadata.gz: b2df9c55e2e0ca2ab3c0aeb825f7a9e9f3dec274216256a9e712eb60ea3176c4851925799b5621220fa59eca32ff67ba5813699eec056aa285840397f91775db
7
- data.tar.gz: c5159b4997e35cd23f29ffee1a17da99e298dcdb7a02789a5b64435cd645e1af56788c5666c1ef5ac3dccfd5fdc250e48c62e7c170a8aaf71009e62138590d19