starscope 1.0.3 → 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -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