gren 0.2.1 → 0.2.2

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,3 +1,14 @@
1
+ === 0.2.2 2010/09/14
2
+
3
+ * mkgrendb
4
+ * 複数引数に対応
5
+ * 引数に、.rb, .yamlどちらを渡しても正しく動作するように
6
+ * --ddb, --defaultオプションを追加 (GRENDB_DEFAULT_DBで指定されているデータベースを更新)
7
+ * --dump データベースの中身をダンプする
8
+ * --full データベースを一度削除してから再構築
9
+ * --delete データベースを削除(yamlは消さない)
10
+ * ファイルのタイムスタンプを比較して、すでに更新されているものは再生成しないように
11
+
1
12
  === 0.2.1 2010/09/13
2
13
 
3
14
  * デフォルトのignoreファイル追加 .d, .map, .MAP
@@ -7,5 +7,5 @@ require 'rubygems'
7
7
  require File.expand_path(File.dirname(__FILE__) + "/../lib/gren")
8
8
  require "mkgrendb/cli"
9
9
 
10
- Version = "0.2.1"
10
+ Version = "0.2.2"
11
11
  Mkgrendb::CLI.execute(STDOUT, ARGV)
@@ -2,5 +2,5 @@ $:.unshift(File.dirname(__FILE__)) unless
2
2
  $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
3
 
4
4
  module Gren
5
- VERSION = '0.2.1'
5
+ VERSION = '0.2.2'
6
6
  end
@@ -5,13 +5,38 @@ require File.join(File.dirname(__FILE__), 'mkgrendb')
5
5
  module Mkgrendb
6
6
  class CLI
7
7
  def self.execute(stdout, arguments=[])
8
+ input_yamls = []
9
+ isDump = false
10
+ isFull = false
11
+ isDelete = false
12
+
8
13
  opt = OptionParser.new "#{File.basename($0)} INPUT_YAML1 [INPUT_YAML2 ...]"
14
+ opt.on('--ddb', "--default-db", "Create or Update default DB. (Plase set ENV['GRENDB_DEFAULT_DB'])") {|v| input_yamls << ENV['GRENDB_DEFAULT_DB']}
15
+ opt.on('--full', "Full update DB. (Delete and create)") {|v| isFull = true }
16
+ opt.on('--delete', "Delete DB. (Not delete yaml)") {|v| isDelete = true }
17
+ opt.on('--dump', "Dump DB.") {|v| isDump = true }
9
18
  opt.parse!(arguments)
10
19
 
11
- if (arguments.size >= 1)
12
- # @todo 複数個引数に対応
13
- obj = Mkgrendb.new(arguments[0])
14
- obj.update
20
+ input_yamls.concat arguments
21
+
22
+ if (input_yamls.size >= 1)
23
+ input_yamls.each do |input_yaml|
24
+ obj = Mkgrendb.new(input_yaml)
25
+
26
+ if (isFull)
27
+ obj.full
28
+ stdout.puts
29
+ elsif (isDelete)
30
+ obj.delete
31
+ stdout.puts
32
+ elsif (isDump)
33
+ obj.dump
34
+ else
35
+ obj.update
36
+ stdout.puts
37
+ end
38
+
39
+ end
15
40
  else
16
41
  stdout.puts opt.help
17
42
  end
@@ -1,34 +1,52 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
3
  require 'yaml'
4
-
5
4
  require 'pathname'
6
-
7
- base_directory = Pathname(__FILE__).dirname + ".."
8
- $LOAD_PATH.unshift((base_directory + "ext").to_s)
9
- $LOAD_PATH.unshift((base_directory + "lib").to_s)
10
-
11
5
  require 'rubygems'
12
6
  require 'groonga'
13
-
14
7
  require File.join(File.dirname(__FILE__), '../common/grenfiletest')
15
8
 
16
9
  module Mkgrendb
17
10
  class Mkgrendb
18
- def initialize(input_yaml)
19
- @output_db = input_yaml.sub(/\.yaml$/, ".db")
20
- @src = YAML.load(open(input_yaml).read())
21
- db_create(@output_db)
11
+ def initialize(input)
12
+ @input_yaml = input.sub(/\.db$/, ".yaml")
13
+ @output_db = input.sub(/\.yaml$/, ".db")
14
+ puts "input_yaml : #{@input_yaml} found."
15
+ @src = YAML.load(open(@input_yaml).read())
16
+ @file_count = 0
22
17
  end
23
18
 
24
19
  def update
20
+ db_create(@output_db)
25
21
  db_open(@output_db)
26
-
27
22
  @src["directory"].each do |dir|
28
23
  db_add_dir(File.expand_path(dir))
29
24
  end
30
25
  end
31
26
 
27
+ def delete
28
+ db_delete(@output_db)
29
+ end
30
+
31
+ def full
32
+ delete
33
+ update
34
+ end
35
+
36
+ def dump()
37
+ db_open(@output_db)
38
+
39
+ documents = Groonga::Context.default["documents"]
40
+ records = documents.select
41
+ records.each do |record|
42
+ puts "path : #{record.path}"
43
+ puts "timestamp : #{record.timestamp.strftime('%Y/%m/%d %H:%M:%S')}"
44
+ puts "content :", record.content[0..64]
45
+ puts
46
+ end
47
+
48
+ end
49
+
32
50
  def db_create(filename)
33
51
  dbfile = Pathname(File.expand_path(filename))
34
52
  dbdir = dbfile.dirname
@@ -40,6 +58,7 @@ module Mkgrendb
40
58
  schema.create_table("documents") do |table|
41
59
  table.string("path")
42
60
  table.text("content")
61
+ table.time("timestamp")
43
62
  end
44
63
 
45
64
  schema.create_table("terms",
@@ -48,23 +67,33 @@ module Mkgrendb
48
67
  :default_tokenizer => "TokenBigram") do |table|
49
68
  table.index("documents.path")
50
69
  table.index("documents.content")
70
+ table.index("documents.timestamp")
51
71
  end
52
72
  end
53
- puts "create : #{dbfile.to_s} created."
73
+ puts "create : #{filename} created."
54
74
  else
55
- puts "message : #{dbfile.to_s} already exist."
75
+ puts "message : #{filename} already exist."
56
76
  end
57
77
  end
58
78
  private :db_create
79
+
80
+ def db_delete(filename)
81
+ raise "Illegal file name : #{filename}." unless filename =~ /\.db$/
82
+ Dir.glob("#{filename}*").each do |f|
83
+ puts "delete : #{f}"
84
+ File.unlink(f)
85
+ end
86
+ end
87
+ private :db_delete
59
88
 
60
89
  def db_open(filename)
61
90
  dbfile = Pathname(File.expand_path(filename))
62
91
 
63
92
  if dbfile.exist?
64
93
  Groonga::Database.open(dbfile.to_s)
65
- puts "open : #{dbfile} open."
94
+ puts "open : #{dbfile} open."
66
95
  else
67
- raise "error : #{dbfile.to_s} not found!!"
96
+ raise "error : #{dbfile.to_s} not found!!"
68
97
  end
69
98
  end
70
99
  private :db_open
@@ -78,25 +107,43 @@ module Mkgrendb
78
107
  # 格納するデータ
79
108
  values = {
80
109
  :path => filename,
81
- :content => open(filename).read
110
+ :content => nil,
111
+ :timestamp => File.mtime(filename),
82
112
  }
83
113
 
84
- # 既に登録されているファイルならばそれを上書き、そうでなければ新規レコードを作成
114
+ # 検索するデータベース
85
115
  documents = Groonga::Context.default["documents"]
116
+
117
+ # 既に登録されているファイルならばそれを上書き、そうでなければ新規レコードを作成
86
118
  _documents = documents.select do |record|
87
119
  record["path"] == values[:path]
88
120
  end
89
121
 
122
+ isNewFile = false
123
+
90
124
  if _documents.size.zero?
91
125
  document = documents.add
126
+ isNewFile = true
92
127
  else
93
128
  document = _documents.to_a[0].key
94
129
  end
95
130
 
96
- # データベースに格納
97
- values.each do |key, value|
98
- puts value if (key == :path)
99
- document[key] = value
131
+ # タイムスタンプが新しければデータベースに格納
132
+ if (document[:timestamp] < values[:timestamp])
133
+ # 実際に使うタイミングでファイルの内容を読み込み
134
+ values[:content] = open(filename).read
135
+
136
+ # データベースに格納
137
+ values.each do |key, value|
138
+ if (key == :path)
139
+ if (isNewFile)
140
+ puts "add_file : #{value}"
141
+ else
142
+ puts "update : #{value}"
143
+ end
144
+ end
145
+ document[key] = value
146
+ end
100
147
  end
101
148
 
102
149
  end
@@ -121,6 +168,8 @@ module Mkgrendb
121
168
  when "file"
122
169
  unless ignoreFile?(fpath)
123
170
  db_add_file(stdout, fpath)
171
+ @file_count += 1
172
+ puts "file_count : #{@file_count}" if (@file_count % 100 == 0)
124
173
  end
125
174
  end
126
175
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 2
8
- - 1
9
- version: 0.2.1
8
+ - 2
9
+ version: 0.2.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - ongaeshi
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-09-13 00:00:00 +09:00
17
+ date: 2010-09-17 00:00:00 +09:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency