milkode 0.7.1 → 0.8.0
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.
- data/Gemfile +17 -4
- data/HISTORY.ja.rdoc +27 -0
- data/HISTORY.rdoc +27 -0
- data/LICENSE.txt +23 -1
- data/Rakefile +1 -16
- data/VERSION +1 -1
- data/bin/gmilk +1 -1
- data/bin/milk +1 -1
- data/lib/milkode/cdstk/cdstk.rb +171 -168
- data/lib/milkode/cdstk/milkode_yaml.rb +1 -1
- data/lib/milkode/cdweb/app.rb +11 -3
- data/lib/milkode/cdweb/lib/command.rb +43 -0
- data/lib/milkode/cdweb/lib/database.rb +58 -210
- data/lib/milkode/cdweb/lib/mkurl.rb +10 -1
- data/lib/milkode/cdweb/lib/package_list.rb +61 -0
- data/lib/milkode/cdweb/lib/search_files.rb +2 -1
- data/lib/milkode/cdweb/public/css/bootstrap-responsive.min.css +9 -0
- data/lib/milkode/cdweb/public/css/bootstrap.min.css +9 -0
- data/lib/milkode/cdweb/public/css/milkode.css +44 -9
- data/lib/milkode/cdweb/public/img/glyphicons-halflings-white.png +0 -0
- data/lib/milkode/cdweb/public/img/glyphicons-halflings.png +0 -0
- data/lib/milkode/cdweb/public/js/bootstrap.min.js +6 -0
- data/lib/milkode/cdweb/views/index.haml +52 -16
- data/lib/milkode/cdweb/views/packages.haml +11 -0
- data/lib/milkode/cli.rb +8 -0
- data/lib/milkode/common/array_diff.rb +18 -0
- data/lib/milkode/common/util.rb +16 -0
- data/lib/milkode/database/document_record.rb +64 -0
- data/lib/milkode/database/document_table.rb +341 -0
- data/lib/milkode/database/groonga_database.rb +105 -0
- data/lib/milkode/database/package_table.rb +98 -0
- data/lib/milkode/findgrep/findgrep.rb +20 -124
- data/lib/milkode/grep/cli_grep.rb +3 -1
- data/milkode.gemspec +32 -2
- data/test/data/.gitignore +4 -0
- data/test/data/c_project/a.txt +1 -0
- data/test/data/c_project/abc.c +2 -0
- data/test/data/c_project/abc.h +3 -0
- data/test/data/c_project/b.txt +1 -0
- data/test/data/c_project/c.txt +1 -0
- data/test/data/c_project/cc.txt +1 -0
- data/test/data/c_project/to/file.rb +1 -0
- data/test/test_cdstk.rb +4 -4
- data/test/test_cli.rb +9 -2
- data/test/test_database.rb +5 -14
- data/test/test_document_record.rb +77 -0
- data/test/test_document_table.rb +317 -0
- data/test/test_groonga_database.rb +58 -0
- data/test/test_mkurl.rb +2 -0
- data/test/test_package_list.rb +21 -0
- data/test/test_package_table.rb +215 -0
- data/test/test_util.rb +8 -0
- metadata +57 -5
data/Gemfile
CHANGED
@@ -1,11 +1,24 @@
|
|
1
1
|
source "http://rubygems.org"
|
2
|
+
|
2
3
|
# Add dependencies required to use your gem here.
|
3
4
|
# Example:
|
4
5
|
# gem "activesupport", ">= 2.3.5"
|
5
6
|
# gemspec
|
7
|
+
gem 'termcolor','>= 1.2.0'
|
8
|
+
gem 'rroonga','>= 1.1.0'
|
9
|
+
gem 'rack','>=1.3.4'
|
10
|
+
gem 'sinatra', '>=1.2.6'
|
11
|
+
gem 'launchy', '>=0.3.7'
|
12
|
+
gem 'coderay', '>=1.0.5'
|
13
|
+
gem 'thin', '>=1.2.10'
|
14
|
+
gem 'archive-zip', '>=0.4.0'
|
15
|
+
gem 'haml', '>=3.1.2'
|
16
|
+
gem 'sass', '>=3.1.3'
|
17
|
+
gem 'thor', '~> 0.15.0'
|
18
|
+
|
6
19
|
# Add dependencies to develop your gem here.
|
7
20
|
# Include everything needed to run rake, tests, features, etc.
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
21
|
+
group :development do
|
22
|
+
gem "bundler"
|
23
|
+
gem "jeweler"
|
24
|
+
end
|
data/HISTORY.ja.rdoc
CHANGED
@@ -1,3 +1,30 @@
|
|
1
|
+
=== 0.8.0 2012/06/20
|
2
|
+
|
3
|
+
* milk web
|
4
|
+
* ホームから 最近使った、追加、更新、お気に入り のパッケージに直接ジャンプ出来るように
|
5
|
+
* パッケージ一覧のソート種類を指定可能に
|
6
|
+
* Twitter bootstrap に対応
|
7
|
+
|
8
|
+
* database
|
9
|
+
* groongaデータベースのアクセスを一元化
|
10
|
+
* DocumentTable
|
11
|
+
* shorpath -> restpath
|
12
|
+
* Add package column
|
13
|
+
* 拡張子の検索は完全一致に
|
14
|
+
* PackageTable
|
15
|
+
* 新規追加
|
16
|
+
|
17
|
+
* milk
|
18
|
+
* 'milk fav' コマンドを追加。お気に入りを設定可能に
|
19
|
+
* milk update 時に cleanup も行うように
|
20
|
+
* invoke_task を再定義して help option を処理 (thanks tomykaira)
|
21
|
+
* milk add 出来るスキーマを追加
|
22
|
+
* ssh:foo@bar/baz.git (Support gitolite, thanks hazy_moon)
|
23
|
+
* git@example.com:foo/bar.git
|
24
|
+
|
25
|
+
* build
|
26
|
+
* 依存関係の記述をGemfileに移動
|
27
|
+
|
1
28
|
=== 0.7.0 2012/05/05
|
2
29
|
|
3
30
|
* milk
|
data/HISTORY.rdoc
CHANGED
@@ -1,3 +1,30 @@
|
|
1
|
+
=== 0.8.0 2012/06/20
|
2
|
+
|
3
|
+
* milk web
|
4
|
+
* Can jump to package from home. [Recent, add, update, favorite]
|
5
|
+
* Can specify the package list sorting type
|
6
|
+
* Support Twitter bootstrap
|
7
|
+
|
8
|
+
* database
|
9
|
+
* Centralized groonga database access
|
10
|
+
* DocumentTable
|
11
|
+
* shorpath -> restpath
|
12
|
+
* Add package column
|
13
|
+
* Extension searches exact matches
|
14
|
+
* PackageTable
|
15
|
+
* New
|
16
|
+
|
17
|
+
* milk
|
18
|
+
* Add 'milk fav' command
|
19
|
+
* Also cleanup do the milk update
|
20
|
+
* Redefining invoke_task and handle the help option (thanks tomykaira)
|
21
|
+
* Add milk add 'schema'
|
22
|
+
* ssh:foo@bar/baz.git (Support gitolite, thanks hazy_moon)
|
23
|
+
* git@example.com:foo/bar.git
|
24
|
+
|
25
|
+
* build
|
26
|
+
* Move description of the dependencies to the Gemfile
|
27
|
+
|
1
28
|
=== 0.7.0 2012/05/05
|
2
29
|
|
3
30
|
* milk
|
data/LICENSE.txt
CHANGED
@@ -1,4 +1,8 @@
|
|
1
|
-
|
1
|
+
=================
|
2
|
+
Milkode
|
3
|
+
=================
|
4
|
+
|
5
|
+
Copyright (c) 2011, 2012 ongaeshi
|
2
6
|
|
3
7
|
Permission is hereby granted, free of charge, to any person obtaining
|
4
8
|
a copy of this software and associated documentation files (the
|
@@ -18,3 +22,21 @@ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
18
22
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
23
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
24
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
25
|
+
|
26
|
+
=================
|
27
|
+
Twitter Bootstrap
|
28
|
+
=================
|
29
|
+
|
30
|
+
Copyright 2012 Twitter, Inc.
|
31
|
+
|
32
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
33
|
+
you may not use this file except in compliance with the License.
|
34
|
+
You may obtain a copy of the License at
|
35
|
+
|
36
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
37
|
+
|
38
|
+
Unless required by applicable law or agreed to in writing, software
|
39
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
40
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
41
|
+
See the License for the specific language governing permissions and
|
42
|
+
limitations under the License.
|
data/Rakefile
CHANGED
@@ -20,22 +20,7 @@ Jeweler::Tasks.new do |gem|
|
|
20
20
|
gem.description = %Q{Line based local source code search engine & grep-command & web-app.}
|
21
21
|
gem.email = "ongaeshi0621@gmail.com"
|
22
22
|
gem.authors = ["ongaeshi"]
|
23
|
-
|
24
|
-
# Include your dependencies below. Runtime dependencies are required when using your gem,
|
25
|
-
gem.add_runtime_dependency 'termcolor','>= 1.2.0'
|
26
|
-
gem.add_runtime_dependency 'rroonga','>= 1.1.0'
|
27
|
-
gem.add_runtime_dependency 'rack','>=1.3.4'
|
28
|
-
gem.add_runtime_dependency 'sinatra', '>=1.2.6'
|
29
|
-
gem.add_runtime_dependency 'launchy', '>=0.3.7'
|
30
|
-
gem.add_runtime_dependency 'coderay', '>=1.0.5'
|
31
|
-
gem.add_runtime_dependency 'thin', '>=1.2.10'
|
32
|
-
gem.add_runtime_dependency 'archive-zip', '>=0.4.0'
|
33
|
-
gem.add_runtime_dependency 'haml', '>=3.1.2'
|
34
|
-
gem.add_runtime_dependency 'sass', '>=3.1.3'
|
35
|
-
gem.add_runtime_dependency 'thor', '~> 0.15.0'
|
36
|
-
|
37
|
-
# and development dependencies are only needed for development (ie running rake tasks, tests, etc)
|
38
|
-
# gem.add_development_dependency 'rspec', '> 1.2.3'
|
23
|
+
# Dependencies move to 'Gemfile'
|
39
24
|
end
|
40
25
|
Jeweler::RubygemsDotOrgTasks.new
|
41
26
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.8.0
|
data/bin/gmilk
CHANGED
data/bin/milk
CHANGED
data/lib/milkode/cdstk/cdstk.rb
CHANGED
@@ -3,13 +3,11 @@
|
|
3
3
|
require 'yaml'
|
4
4
|
require 'pathname'
|
5
5
|
require 'rubygems'
|
6
|
-
require 'groonga'
|
7
6
|
require 'fileutils'
|
8
7
|
require 'pathname'
|
9
8
|
require 'milkode/common/grenfiletest'
|
10
9
|
require 'milkode/common/util'
|
11
10
|
require 'milkode/common/dir'
|
12
|
-
require 'milkode/findgrep/findgrep'
|
13
11
|
include Milkode
|
14
12
|
require 'kconv'
|
15
13
|
begin
|
@@ -17,14 +15,14 @@ begin
|
|
17
15
|
rescue LoadError
|
18
16
|
$no_readline = true
|
19
17
|
end
|
20
|
-
require 'milkode/cdweb/lib/database'
|
21
18
|
require 'open-uri'
|
22
|
-
|
23
19
|
require 'milkode/cdstk/cdstk_command'
|
24
|
-
|
25
20
|
require 'milkode/cdstk/yaml_file_wrapper'
|
26
21
|
require 'milkode/cdstk/package'
|
27
22
|
require 'milkode/common/ignore_checker'
|
23
|
+
require 'milkode/database/groonga_database'
|
24
|
+
require 'milkode/database/document_record'
|
25
|
+
require 'milkode/common/array_diff'
|
28
26
|
|
29
27
|
module Milkode
|
30
28
|
class IgnoreError < RuntimeError ; end
|
@@ -40,7 +38,6 @@ module Milkode
|
|
40
38
|
|
41
39
|
def initialize(io = $stdout, db_dir = ".")
|
42
40
|
@db_dir = db_dir
|
43
|
-
Database.setup(@db_dir)
|
44
41
|
@out = io
|
45
42
|
# @out = $stdout # 強制出力
|
46
43
|
@is_display_info = false # alert_info の表示
|
@@ -60,7 +57,7 @@ module Milkode
|
|
60
57
|
if Dir.emptydir?(@db_dir)
|
61
58
|
@yaml = YamlFileWrapper.create(@db_dir)
|
62
59
|
@out.puts "create : #{yaml_file}"
|
63
|
-
db_create
|
60
|
+
db_create
|
64
61
|
setdb([@db_dir], {}) if (options[:setdb])
|
65
62
|
else
|
66
63
|
@out.puts "Can't create milkode db (Because not empty in #{db_dir_expand})"
|
@@ -68,24 +65,24 @@ module Milkode
|
|
68
65
|
end
|
69
66
|
|
70
67
|
def assert_compatible
|
71
|
-
db_open
|
68
|
+
db_open
|
72
69
|
end
|
73
70
|
|
74
|
-
def update_all
|
71
|
+
def update_all(options)
|
75
72
|
print_result do
|
76
|
-
db_open
|
73
|
+
db_open
|
77
74
|
|
78
75
|
@yaml.contents.each do |package|
|
79
|
-
update_package_in(package)
|
76
|
+
update_package_in(package, options)
|
80
77
|
end
|
81
78
|
end
|
82
79
|
end
|
83
80
|
|
84
81
|
def update(args, options)
|
85
82
|
update_display_info(options)
|
86
|
-
|
83
|
+
|
87
84
|
if (options[:all])
|
88
|
-
update_all
|
85
|
+
update_all(options)
|
89
86
|
else
|
90
87
|
if (args.empty?)
|
91
88
|
path = File.expand_path('.')
|
@@ -93,19 +90,19 @@ module Milkode
|
|
93
90
|
|
94
91
|
if (package)
|
95
92
|
print_result do
|
96
|
-
db_open
|
97
|
-
update_package_in(package)
|
93
|
+
db_open
|
94
|
+
update_package_in(package, options)
|
98
95
|
end
|
99
96
|
else
|
100
97
|
@out.puts "Not registered. If you want to add, 'milk add #{path}'."
|
101
98
|
end
|
102
99
|
else
|
103
100
|
print_result do
|
104
|
-
db_open
|
101
|
+
db_open
|
105
102
|
args.each do |name|
|
106
103
|
package = @yaml.find_name(name)
|
107
104
|
if (package)
|
108
|
-
update_package_in(package)
|
105
|
+
update_package_in(package, options)
|
109
106
|
else
|
110
107
|
@out.puts "Not found package '#{name}'."
|
111
108
|
return
|
@@ -117,7 +114,7 @@ module Milkode
|
|
117
114
|
end
|
118
115
|
|
119
116
|
def update_for_grep(dir)
|
120
|
-
db_open
|
117
|
+
db_open
|
121
118
|
update_dir_in(dir)
|
122
119
|
end
|
123
120
|
|
@@ -126,7 +123,7 @@ module Milkode
|
|
126
123
|
|
127
124
|
print_result do
|
128
125
|
# データベースを開く
|
129
|
-
db_open
|
126
|
+
db_open
|
130
127
|
|
131
128
|
# メイン処理
|
132
129
|
begin
|
@@ -183,7 +180,7 @@ module Milkode
|
|
183
180
|
|
184
181
|
def add_dir(dir, no_yaml = false)
|
185
182
|
add_yaml(Package.create(dir)) unless no_yaml
|
186
|
-
db_open
|
183
|
+
db_open
|
187
184
|
update_dir_in(dir)
|
188
185
|
end
|
189
186
|
|
@@ -204,6 +201,12 @@ module Milkode
|
|
204
201
|
# YAML更新
|
205
202
|
@yaml.add(package)
|
206
203
|
@yaml.save
|
204
|
+
|
205
|
+
# データベースを開く
|
206
|
+
db_open
|
207
|
+
|
208
|
+
# yamlファイルと同期する
|
209
|
+
@grndb.yaml_sync(@yaml.contents)
|
207
210
|
end
|
208
211
|
|
209
212
|
def convert_content(src)
|
@@ -251,7 +254,7 @@ module Milkode
|
|
251
254
|
end
|
252
255
|
|
253
256
|
def git_url?(src)
|
254
|
-
(src
|
257
|
+
Util::git_url?(src)
|
255
258
|
end
|
256
259
|
private :git_url?
|
257
260
|
|
@@ -294,7 +297,7 @@ module Milkode
|
|
294
297
|
list([], {:verbose => true})
|
295
298
|
|
296
299
|
if yes_or_no("Remove #{@yaml.contents.size} contents? (yes/no)")
|
297
|
-
db_open
|
300
|
+
db_open
|
298
301
|
|
299
302
|
@yaml.contents.each do |package|
|
300
303
|
remove_dir(package.directory)
|
@@ -317,7 +320,7 @@ module Milkode
|
|
317
320
|
|
318
321
|
if (package)
|
319
322
|
print_result do
|
320
|
-
db_open
|
323
|
+
db_open
|
321
324
|
remove_dir(package.directory)
|
322
325
|
end
|
323
326
|
else
|
@@ -325,7 +328,7 @@ module Milkode
|
|
325
328
|
end
|
326
329
|
else
|
327
330
|
print_result do
|
328
|
-
db_open
|
331
|
+
db_open
|
329
332
|
args.each do |name|
|
330
333
|
package = @yaml.find_name(name)
|
331
334
|
if (package)
|
@@ -359,6 +362,11 @@ module Milkode
|
|
359
362
|
end
|
360
363
|
|
361
364
|
def list(args, options)
|
365
|
+
if options[:check]
|
366
|
+
check_integrity
|
367
|
+
return
|
368
|
+
end
|
369
|
+
|
362
370
|
match_p = @yaml.contents.find_all do |p|
|
363
371
|
args.all? {|k| p.name.include? k }
|
364
372
|
end
|
@@ -386,6 +394,62 @@ module Milkode
|
|
386
394
|
end
|
387
395
|
end
|
388
396
|
|
397
|
+
def fav(args, options)
|
398
|
+
db_open
|
399
|
+
|
400
|
+
if (args.empty?)
|
401
|
+
@out.puts @grndb.packages.favs.map{|r| r.name}
|
402
|
+
else
|
403
|
+
is_dirty = false
|
404
|
+
|
405
|
+
args.each do |v|
|
406
|
+
# database
|
407
|
+
time = options[:delete] ? Time.at(0) : Time.now
|
408
|
+
|
409
|
+
if @grndb.packages.touch_if(v, :favtime, time)
|
410
|
+
# milkode_yaml
|
411
|
+
package = @yaml.find_name(v)
|
412
|
+
dst = package.options
|
413
|
+
unless options[:delete]
|
414
|
+
dst[:fav] = true
|
415
|
+
else
|
416
|
+
dst.delete(:fav)
|
417
|
+
end
|
418
|
+
package.set_options(dst)
|
419
|
+
@yaml.update(package)
|
420
|
+
is_dirty = true
|
421
|
+
else
|
422
|
+
@out.puts "Not found package '#{v}'"
|
423
|
+
end
|
424
|
+
end
|
425
|
+
|
426
|
+
@yaml.save if is_dirty
|
427
|
+
end
|
428
|
+
end
|
429
|
+
|
430
|
+
def check_integrity
|
431
|
+
db_open
|
432
|
+
|
433
|
+
@out.puts "Check integrity ..."
|
434
|
+
|
435
|
+
yaml = @yaml.contents.map {|p| p.name}.sort
|
436
|
+
grndb = @grndb.packages.map {|p| p.name}.sort
|
437
|
+
|
438
|
+
d = yaml.diff grndb
|
439
|
+
|
440
|
+
unless d[0].empty?
|
441
|
+
@out.puts "'milkode.yaml' has #{d[0]}, but 'PackageTable' don't have."
|
442
|
+
end
|
443
|
+
|
444
|
+
unless d[1].empty?
|
445
|
+
@out.puts "'PackageTable' has #{d[1]}, but 'milkode.yaml' don't have."
|
446
|
+
end
|
447
|
+
|
448
|
+
if d[0].empty? && d[1].empty?
|
449
|
+
@out.puts 'ok'
|
450
|
+
end
|
451
|
+
end
|
452
|
+
|
389
453
|
def pwd(options)
|
390
454
|
dir = options[:default] ? Dbdir.default_dir : db_dir_expand
|
391
455
|
|
@@ -403,9 +467,6 @@ module Milkode
|
|
403
467
|
end
|
404
468
|
|
405
469
|
def cleanup(options)
|
406
|
-
# 互換性テスト
|
407
|
-
db_open(db_file)
|
408
|
-
|
409
470
|
# cleanup開始
|
410
471
|
if (options[:force] or yes_or_no("cleanup contents? (yes/no)"))
|
411
472
|
print_result do
|
@@ -416,9 +477,15 @@ module Milkode
|
|
416
477
|
@package_count += 1
|
417
478
|
end
|
418
479
|
@yaml.save
|
480
|
+
|
481
|
+
# データベースを開く
|
482
|
+
db_open
|
483
|
+
|
484
|
+
# yamlファイルと同期する
|
485
|
+
@grndb.yaml_sync(@yaml.contents)
|
419
486
|
|
420
487
|
# データベースのクリーンアップ
|
421
|
-
|
488
|
+
@documents.cleanup do |record|
|
422
489
|
alert("rm_record", record.path)
|
423
490
|
@file_count += 1
|
424
491
|
end
|
@@ -430,9 +497,10 @@ module Milkode
|
|
430
497
|
update_display_info(options)
|
431
498
|
|
432
499
|
if (options[:all])
|
433
|
-
db_delete
|
434
|
-
db_create
|
435
|
-
|
500
|
+
db_delete
|
501
|
+
db_create
|
502
|
+
@grndb.yaml_sync(@yaml.contents)
|
503
|
+
update_all({})
|
436
504
|
else
|
437
505
|
if (args.empty?)
|
438
506
|
path = File.expand_path('.')
|
@@ -440,7 +508,7 @@ module Milkode
|
|
440
508
|
|
441
509
|
if (package)
|
442
510
|
print_result do
|
443
|
-
db_open
|
511
|
+
db_open
|
444
512
|
remove_dir(package.directory, true)
|
445
513
|
add_dir(package.directory, true)
|
446
514
|
end
|
@@ -452,7 +520,7 @@ module Milkode
|
|
452
520
|
args.each do |name|
|
453
521
|
package = @yaml.find_name(name)
|
454
522
|
if (package)
|
455
|
-
db_open
|
523
|
+
db_open
|
456
524
|
remove_dir(package.directory, true)
|
457
525
|
add_dir(package.directory, true)
|
458
526
|
else
|
@@ -466,11 +534,11 @@ module Milkode
|
|
466
534
|
end
|
467
535
|
|
468
536
|
def dump
|
469
|
-
db_open
|
470
|
-
|
471
|
-
documents
|
472
|
-
|
473
|
-
|
537
|
+
db_open
|
538
|
+
|
539
|
+
@documents.each do |grnrcd|
|
540
|
+
record = DocumentRecord.new grnrcd
|
541
|
+
|
474
542
|
@out.puts record.inspect
|
475
543
|
@out.puts "path : #{record.path}"
|
476
544
|
@out.puts "shortpath : #{record.shortpath}"
|
@@ -479,7 +547,8 @@ module Milkode
|
|
479
547
|
@out.puts "content :", record.content ? record.content[0..64] : nil
|
480
548
|
@out.puts
|
481
549
|
end
|
482
|
-
|
550
|
+
|
551
|
+
@out.puts "total #{@documents.size} record."
|
483
552
|
end
|
484
553
|
|
485
554
|
def dir(args, options)
|
@@ -586,7 +655,7 @@ EOF
|
|
586
655
|
|
587
656
|
if options[:dry_run]
|
588
657
|
# Test mode
|
589
|
-
db_open
|
658
|
+
db_open
|
590
659
|
@is_display_info = true
|
591
660
|
@is_silent = true
|
592
661
|
update_dir_in(package.directory)
|
@@ -634,30 +703,31 @@ EOF
|
|
634
703
|
Dbdir.expand_groonga_path(@db_dir)
|
635
704
|
end
|
636
705
|
|
637
|
-
def db_file_expand
|
638
|
-
File.expand_path(db_file)
|
639
|
-
end
|
640
|
-
|
641
706
|
def db_dir_expand
|
642
707
|
File.expand_path(@db_dir)
|
643
708
|
end
|
644
709
|
|
645
|
-
def custom_db?
|
646
|
-
db_dir_expand != Dbdir.default_dir
|
647
|
-
end
|
648
|
-
|
649
710
|
def yaml_file
|
650
711
|
YamlFileWrapper.yaml_file @db_dir
|
651
712
|
end
|
652
713
|
|
653
|
-
def update_package_in(package)
|
714
|
+
def update_package_in(package, options)
|
654
715
|
if package.options[:update_with_git_pull]
|
655
716
|
Dir.chdir(package.directory) { system("git pull") }
|
656
717
|
end
|
657
718
|
|
719
|
+
unless options[:no_clean]
|
720
|
+
cleanup_package_in(package)
|
721
|
+
end
|
722
|
+
|
658
723
|
update_dir_in(package.directory)
|
659
724
|
end
|
660
725
|
|
726
|
+
def cleanup_package_in(package)
|
727
|
+
db_open
|
728
|
+
@documents.cleanup_package_name(package.name)
|
729
|
+
end
|
730
|
+
|
661
731
|
def update_dir_in(dir)
|
662
732
|
alert("package", File.basename(dir) )
|
663
733
|
@package_count += 1
|
@@ -669,24 +739,33 @@ EOF
|
|
669
739
|
elsif (FileTest.directory? dir)
|
670
740
|
db_add_dir(dir)
|
671
741
|
else
|
672
|
-
db_add_file(STDOUT, dir, File.basename(dir))
|
742
|
+
db_add_file(STDOUT, File.dirname(dir), File.basename(dir), File.basename(dir)) # .bashrc/.bashrc のようになる
|
673
743
|
end
|
674
744
|
end
|
675
745
|
|
676
746
|
def remove_dir(dir, no_yaml = false)
|
677
|
-
# yamlから削除
|
678
747
|
unless (no_yaml)
|
679
|
-
@yaml.
|
748
|
+
package = @yaml.find_dir(dir)
|
749
|
+
|
750
|
+
# yamlから削除
|
751
|
+
@yaml.remove(package)
|
680
752
|
@yaml.save
|
753
|
+
|
754
|
+
# PackageTableから削除
|
755
|
+
db_open
|
756
|
+
@grndb.packages.remove package.name
|
681
757
|
end
|
682
|
-
|
758
|
+
|
759
|
+
# データベース開く
|
760
|
+
db_open
|
761
|
+
|
683
762
|
# データベースからも削除
|
684
763
|
# dir = File.expand_path(dir)
|
685
764
|
|
686
765
|
alert("rm_package", dir)
|
687
766
|
@package_count += 1
|
688
767
|
|
689
|
-
|
768
|
+
@documents.remove_match_path(dir) do |record|
|
690
769
|
alert_info("rm_record", record.path)
|
691
770
|
@file_count += 1
|
692
771
|
end
|
@@ -716,17 +795,15 @@ EOF
|
|
716
795
|
end
|
717
796
|
|
718
797
|
def milkode_info
|
719
|
-
|
798
|
+
db_open
|
799
|
+
alert('*milkode*', "#{@yaml.contents.size} packages, #{@documents.size} records in #{db_file}.")
|
720
800
|
end
|
721
801
|
|
722
|
-
def db_create
|
723
|
-
|
724
|
-
dbdir = dbfile.dirname
|
725
|
-
dbdir.mkpath unless dbdir.exist?
|
802
|
+
def db_create
|
803
|
+
filename = db_file
|
726
804
|
|
727
|
-
unless
|
728
|
-
|
729
|
-
db_define
|
805
|
+
unless File.exist? filename
|
806
|
+
db_open
|
730
807
|
@out.puts "create : #{filename} created."
|
731
808
|
else
|
732
809
|
@out.puts "message : #{filename} already exist."
|
@@ -734,60 +811,29 @@ EOF
|
|
734
811
|
end
|
735
812
|
|
736
813
|
def list_info(packages)
|
737
|
-
|
738
|
-
|
739
|
-
option.isSilent = true
|
740
|
-
option.packages = packages.map{|p| p.directory}
|
741
|
-
findGrep = FindGrep::FindGrep.new([], option)
|
742
|
-
records = findGrep.pickupRecords
|
743
|
-
|
814
|
+
db_open
|
815
|
+
records = @documents.search(:packages => packages.map{|p| p.name})
|
744
816
|
alert('*milk_list*', "#{packages.size} packages, #{records.size} records in #{db_file}.")
|
745
817
|
end
|
746
818
|
|
747
|
-
def
|
748
|
-
|
749
|
-
|
750
|
-
|
751
|
-
|
752
|
-
table.text("content")
|
753
|
-
table.time("timestamp")
|
754
|
-
table.text("suffix")
|
755
|
-
end
|
756
|
-
|
757
|
-
schema.create_table("terms",
|
758
|
-
:type => :patricia_trie,
|
759
|
-
:key_normalize => true,
|
760
|
-
:default_tokenizer => DEFAULT_TOKENIZER) do |table|
|
761
|
-
table.index("documents.path", :with_position => true)
|
762
|
-
table.index("documents.shortpath", :with_position => true)
|
763
|
-
table.index("documents.content", :with_position => true)
|
764
|
-
table.index("documents.suffix", :with_position => true)
|
765
|
-
end
|
819
|
+
def db_open
|
820
|
+
if !@grndb || @grndb.closed?
|
821
|
+
@grndb = GroongaDatabase.new
|
822
|
+
@grndb.open(@db_dir)
|
823
|
+
@documents = @grndb.documents
|
766
824
|
end
|
767
825
|
end
|
768
826
|
|
769
|
-
def
|
770
|
-
|
771
|
-
|
772
|
-
if dbfile.exist?
|
773
|
-
# データベースを開く
|
774
|
-
Groonga::Database.open(dbfile.to_s)
|
775
|
-
|
776
|
-
# 互換性テスト
|
777
|
-
db_compatible?
|
778
|
-
else
|
779
|
-
raise "error : #{dbfile.to_s} not found!!"
|
780
|
-
end
|
781
|
-
end
|
827
|
+
def db_delete
|
828
|
+
filename = db_file
|
782
829
|
|
783
|
-
def db_delete(filename)
|
784
830
|
raise "Illegal file name : #{filename}." unless filename =~ /\.db$/
|
831
|
+
|
785
832
|
Dir.glob("#{filename}*").each do |f|
|
786
833
|
@out.puts "delete : #{f}"
|
787
834
|
FileUtils.rm_r(f)
|
788
835
|
end
|
789
836
|
end
|
790
|
-
private :db_delete
|
791
837
|
|
792
838
|
def db_add_dir(dir)
|
793
839
|
@current_package = @yaml.package_root(dir)
|
@@ -797,57 +843,30 @@ EOF
|
|
797
843
|
end
|
798
844
|
private :db_add_dir
|
799
845
|
|
800
|
-
def db_add_file(stdout,
|
846
|
+
def db_add_file(stdout, package_dir, restpath, package_name = nil)
|
801
847
|
# サイレントモード
|
802
848
|
return if @is_silent
|
803
|
-
|
804
|
-
# ファイル名を全てUTF-8に変換
|
805
|
-
filename_utf8 = Util::filename_to_utf8(filename)
|
806
|
-
shortpath_utf8 = Util::filename_to_utf8(shortpath)
|
807
|
-
suffix_utf8 = File::extname(filename_utf8)
|
808
|
-
|
809
|
-
# 格納するデータ
|
810
|
-
values = {
|
811
|
-
:path => filename_utf8,
|
812
|
-
:shortpath => shortpath_utf8,
|
813
|
-
:content => nil,
|
814
|
-
:timestamp => File.mtime(filename),
|
815
|
-
:suffix => suffix_utf8,
|
816
|
-
}
|
817
|
-
|
818
|
-
# 検索するデータベース
|
819
|
-
documents = Groonga::Context.default["documents"]
|
820
|
-
|
821
|
-
record = documents[ values[:path] ]
|
822
|
-
isNewFile = false
|
823
849
|
|
824
|
-
|
825
|
-
|
826
|
-
|
827
|
-
|
828
|
-
|
829
|
-
|
830
|
-
|
831
|
-
|
832
|
-
|
833
|
-
|
834
|
-
|
835
|
-
|
836
|
-
|
837
|
-
|
838
|
-
|
839
|
-
|
840
|
-
|
841
|
-
|
842
|
-
|
843
|
-
|
844
|
-
else
|
845
|
-
@update_count += 1
|
846
|
-
alert_info("update", value)
|
847
|
-
end
|
848
|
-
end
|
849
|
-
document[key] = value
|
850
|
-
end
|
850
|
+
# データベースには先頭の'/'を抜いて登録する
|
851
|
+
# 最初から'/'を抜いておけば高速化の余地あり?
|
852
|
+
# ignore設定との互換性保持が必要
|
853
|
+
restpath = restpath.sub(/^\//, "")
|
854
|
+
|
855
|
+
# パッケージ名を設定
|
856
|
+
package_name = package_name || File.basename(package_dir)
|
857
|
+
|
858
|
+
# レコードの追加
|
859
|
+
result = @documents.add(package_dir, restpath, package_name)
|
860
|
+
|
861
|
+
# メッセージの表示
|
862
|
+
case result
|
863
|
+
when :newfile
|
864
|
+
@add_count += 1
|
865
|
+
alert_info("add_record", File.join(package_dir, restpath))
|
866
|
+
when :update
|
867
|
+
@grndb.packages.touch(package_name, :updatetime)
|
868
|
+
@update_count += 1
|
869
|
+
alert_info("update", File.join(package_dir, restpath))
|
851
870
|
end
|
852
871
|
end
|
853
872
|
|
@@ -875,7 +894,7 @@ EOF
|
|
875
894
|
searchDirectory(stdout, dirname, packname, next_path, depth + 1)
|
876
895
|
when "file"
|
877
896
|
unless ignoreFile?(fpath, next_path)
|
878
|
-
db_add_file(stdout,
|
897
|
+
db_add_file(stdout, dirname, next_path) # shortpathの先頭に'/'が付いているのが気になる
|
879
898
|
@file_count += 1
|
880
899
|
# @out.puts "file_count : #{@file_count}" if (@file_count % 100 == 0)
|
881
900
|
end
|
@@ -934,22 +953,6 @@ EOF
|
|
934
953
|
@out.puts "[fatal] #{msg}"
|
935
954
|
end
|
936
955
|
|
937
|
-
def db_compatible?
|
938
|
-
begin
|
939
|
-
db_define
|
940
|
-
rescue Groonga::Schema::Error => e
|
941
|
-
puts <<EOF
|
942
|
-
Milkode repository is old -> #{db_dir_expand}.
|
943
|
-
Please rebuild repository,
|
944
|
-
|
945
|
-
milk rebuild
|
946
|
-
|
947
|
-
See 'milk --help' or http://milkode.ongaeshi.me .
|
948
|
-
EOF
|
949
|
-
exit -1
|
950
|
-
end
|
951
|
-
end
|
952
|
-
|
953
956
|
def update_display_info(options)
|
954
957
|
@is_display_info = true if (options[:verbose])
|
955
958
|
end
|