milkode 0.7.0 → 0.7.1

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.
Files changed (6) hide show
  1. data/Gemfile +5 -5
  2. data/VERSION +1 -1
  3. data/lib/milkode/cli.rb +47 -105
  4. data/milkode.gemspec +2 -17
  5. data/test/test_cli.rb +6 -18
  6. metadata +26 -96
data/Gemfile CHANGED
@@ -2,10 +2,10 @@ source "http://rubygems.org"
2
2
  # Add dependencies required to use your gem here.
3
3
  # Example:
4
4
  # gem "activesupport", ">= 2.3.5"
5
- gemspec
5
+ # gemspec
6
6
  # Add dependencies to develop your gem here.
7
7
  # Include everything needed to run rake, tests, features, etc.
8
- group :development do
9
- gem "bundler"
10
- gem "jeweler"
11
- end
8
+ # group :development do
9
+ # gem "bundler"
10
+ # gem "jeweler"
11
+ # end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.7.0
1
+ 0.7.1
@@ -7,18 +7,15 @@ require 'milkode/grep/cli_grep'
7
7
 
8
8
  module Milkode
9
9
  class CLI < Thor
10
+ class_option :help, :type => :boolean, :aliases => '-h', :desc => 'Help message.'
11
+
10
12
  desc "init [db_dir]", "Initialize database directory. If db_dir is omitted"
11
13
  option :default, :type => :boolean, :desc => "Init default db, ENV['MILKODE_DEFAULT_DIR'] or ~/.milkode."
12
14
  option :setdb, :type => :boolean, :aliases => '-s', :desc => 'Run setdb after initialization.'
13
- option :help, :type => :boolean, :aliases => '-h', :desc => 'Help message.'
14
15
  def init(db_dir = nil)
15
- if options[:help]
16
- CLI.task_help(shell, "init")
17
- else
18
- db_dir = db_dir || Dbdir.default_dir
19
- FileUtils.mkdir_p db_dir
20
- cdstk(db_dir).init(options)
21
- end
16
+ db_dir = db_dir || Dbdir.default_dir
17
+ FileUtils.mkdir_p db_dir
18
+ cdstk(db_dir).init(options)
22
19
  end
23
20
 
24
21
  desc "add PATH", <<EOF
@@ -36,9 +33,9 @@ EOF
36
33
  option :ignore, :type => :array, :aliases => '-i', :desc => 'Ignore path.'
37
34
  option :no_auto_ignore, :type => :boolean, :desc => 'Disable auto ignore (.gitignore).'
38
35
  option :verbose, :type => :boolean, :aliases => '-v', :desc => 'Be verbose.'
39
- option :help, :type => :boolean, :aliases => '-h', :desc => 'Help message.'
36
+
40
37
  def add(*args)
41
- if options[:help] || args.empty?
38
+ if args.empty?
42
39
  CLI.task_help(shell, "add")
43
40
  else
44
41
  cdstk.add(args, options)
@@ -48,124 +45,69 @@ EOF
48
45
  desc "update [keyword1 keyword2 ...]", "Update database"
49
46
  option :all, :type => :boolean, :desc => "Update all."
50
47
  option :verbose, :type => :boolean, :aliases => '-v', :desc => 'Be verbose.'
51
- option :help, :type => :boolean, :aliases => '-h', :desc => 'Help message.'
52
48
  def update(*args)
53
- if options[:help]
54
- CLI.task_help(shell, "update")
55
- else
56
- cdstk.update(args, options)
57
- end
49
+ cdstk.update(args, options)
58
50
  end
59
51
 
60
52
  desc "remove keyword1 [keyword2 ...]", "Remove package"
61
53
  option :all, :type => :boolean, :desc => 'Remove all.'
62
54
  option :force, :type => :boolean, :aliases => '-f', :desc => 'Force remove.'
63
55
  option :verbose, :type => :boolean, :aliases => '-v', :desc => 'Be verbose.'
64
- option :help, :type => :boolean, :aliases => '-h', :desc => 'Help message.'
65
56
  def remove(*args)
66
- if options[:help]
67
- CLI.task_help(shell, "remove")
68
- else
69
- cdstk.remove(args, options)
70
- end
57
+ cdstk.remove(args, options)
71
58
  end
72
59
 
73
60
  desc "list [package1 package2 ...]", "List package"
74
61
  option :verbose, :type => :boolean, :aliases => '-v', :desc => 'Be verbose.'
75
- option :help, :type => :boolean, :aliases => '-h', :desc => 'Help message.'
76
62
  def list(*args)
77
- if options[:help]
78
- CLI.task_help(shell, "list")
79
- else
80
- cdstk.list(args, options)
81
- end
63
+ cdstk.list(args, options)
82
64
  end
83
65
 
84
66
  desc "pwd", "Display the current database"
85
67
  option :default, :type => :boolean, :desc => 'Show default db, ENV[\'MILKODE_DEFAULT_DIR\'] or ~/.milkode.'
86
- option :help, :type => :boolean, :aliases => '-h', :desc => 'Help message.'
87
68
  def pwd()
88
- if options[:help]
89
- CLI.task_help(shell, "pwd")
90
- else
91
- cdstk.pwd(options)
92
- end
69
+ cdstk.pwd(options)
93
70
  end
94
71
 
95
72
  desc "cleanup", "Creanup garbage recoeds"
96
73
  option :force, :type => :boolean, :aliases => '-f', :desc => 'Force cleanup.'
97
- option :help, :type => :boolean, :aliases => '-h', :desc => 'Help message.'
98
74
  def cleanup
99
- if options[:help]
100
- CLI.task_help(shell, "cleanup")
101
- else
102
- cdstk.cleanup(options)
103
- end
75
+ cdstk.cleanup(options)
104
76
  end
105
77
 
106
78
  desc "rebuild [keyword1 keyword2]", "Rebuild database"
107
79
  option :all, :type => :boolean, :desc => 'Rebuild all.'
108
80
  option :verbose, :type => :boolean, :aliases => '-v', :desc => 'Be verbose.'
109
- option :help, :type => :boolean, :aliases => '-h', :desc => 'Help message.'
110
81
  def rebuild(*args)
111
- if options[:help]
112
- CLI.task_help(shell, "rebuild")
113
- else
114
- cdstk.rebuild(args, options)
115
- end
82
+ cdstk.rebuild(args, options)
116
83
  end
117
84
 
118
85
  desc "dump", "Dump records"
119
- option :help, :type => :boolean, :aliases => '-h', :desc => 'Help message.'
120
86
  def dump
121
- if options[:help]
122
- CLI.task_help(shell, "dump")
123
- else
124
- cdstk.dump
125
- end
87
+ cdstk.dump
126
88
  end
127
89
 
128
90
  desc "dir [package1 package2]", "Print project root directory"
129
91
  option :top, :type => :boolean
130
- option :help, :type => :boolean, :aliases => '-h', :desc => 'Help message.'
131
92
  def dir(*args)
132
- if options[:help]
133
- CLI.task_help(shell, "dir")
134
- else
135
- cdstk.dir(args, options)
136
- end
93
+ cdstk.dir(args, options)
137
94
  end
138
95
 
139
96
  desc "setdb [dbpath]", "Set default db to dbpath"
140
97
  option :reset, :type => :boolean, :aliases => '--default', :desc => 'Reset to the system default database.'
141
- option :help, :type => :boolean, :aliases => '-h', :desc => 'Help message.'
142
98
  def setdb(dbpath = nil)
143
- if options[:help]
144
- CLI.task_help(shell, "setdb")
145
- else
146
- cdstk.setdb(dbpath, options)
147
- end
99
+ cdstk.setdb(dbpath, options)
148
100
  end
149
101
 
150
102
  desc "mcd", "Generate `mcd' command"
151
103
  option :shell, :desc => 'Type of shell. bash or cygwin'
152
- option :help, :type => :boolean, :aliases => '-h', :desc => 'Help message.'
153
104
  def mcd
154
- if options[:help]
155
- CLI.task_help(shell, "mcd")
156
- else
157
- cdstk.mcd(options)
158
- end
105
+ cdstk.mcd(options)
159
106
  end
160
107
 
161
108
  desc "info", "Information of milkode status"
162
- option :help, :type => :boolean, :aliases => '-h', :desc => 'Help message.'
163
109
  def info
164
- if options[:help]
165
- CLI.task_help(shell, "info")
166
- else
167
- cdstk.info
168
- end
110
+ cdstk.info
169
111
  end
170
112
 
171
113
  desc "ignore [path ...]", "Ignore a file or directory"
@@ -173,16 +115,11 @@ EOF
173
115
  option :delete, :type => :boolean, :aliases => '-d', :desc => "Delete ignore setting."
174
116
  option :delete_all, :type => :boolean, :desc => "Delete all ignore setting."
175
117
  option :dry_run, :type => :boolean, :aliases => '-n', :desc => "Ignore setting test."
176
- option :help, :type => :boolean, :aliases => '-h', :desc => 'Help message.'
177
118
  def ignore(*paths)
178
- if options[:help]
179
- CLI.task_help(shell, "ignore")
180
- else
181
- begin
182
- cdstk.ignore(paths, options)
183
- rescue IgnoreError => e
184
- $stdout.puts e.message
185
- end
119
+ begin
120
+ cdstk.ignore(paths, options)
121
+ rescue IgnoreError => e
122
+ $stdout.puts e.message
186
123
  end
187
124
  end
188
125
 
@@ -193,27 +130,22 @@ EOF
193
130
  option :server, :default => 'thin', :aliases => '-s'
194
131
  option :no_browser, :type => :boolean, :default => false, :aliases => '-n', :type => :boolean, :desc => 'Do not launch browser.'
195
132
  option :customize, :type => :boolean, :desc => 'Create customize file.'
196
- option :help, :type => :boolean, :aliases => '-h', :desc => 'Help message.'
197
133
  def web
198
- if options[:help]
199
- CLI.task_help(shell, "web")
200
- else
201
- opts = {
202
- :environment => ENV['RACK_ENV'] || "development",
203
- :pid => nil,
204
- :Port => options[:port],
205
- :Host => options[:host],
206
- :AccessLog => [],
207
- :config => "config.ru",
208
- # ----------------------------
209
- :server => options[:server],
210
- :LaunchBrowser => !options[:no_browser],
211
- :DbDir => options[:db],
212
- }
213
- opts[:customize] = options[:customize]
214
- cdstk(opts[:DbDir]).assert_compatible
215
- Milkode::CLI_Cdweb.execute_with_options($stdout, opts)
216
- end
134
+ opts = {
135
+ :environment => ENV['RACK_ENV'] || "development",
136
+ :pid => nil,
137
+ :Port => options[:port],
138
+ :Host => options[:host],
139
+ :AccessLog => [],
140
+ :config => "config.ru",
141
+ # ----------------------------
142
+ :server => options[:server],
143
+ :LaunchBrowser => !options[:no_browser],
144
+ :DbDir => options[:db],
145
+ }
146
+ opts[:customize] = options[:customize]
147
+ cdstk(opts[:DbDir]).assert_compatible
148
+ Milkode::CLI_Cdweb.execute_with_options($stdout, opts)
217
149
  end
218
150
 
219
151
  desc "grep", "Search projects"
@@ -228,6 +160,16 @@ EOF
228
160
  def shell
229
161
  @shell ||= Thor::Base.shell.new
230
162
  end
163
+
164
+ # デフォルトメソッドを上書きして -h を処理
165
+ # defined in /lib/thor/invocation.rb
166
+ def invoke_task(task, *args)
167
+ if options[:help] && task.name != 'grep'
168
+ CLI.task_help(shell, task.name)
169
+ else
170
+ super
171
+ end
172
+ end
231
173
  end
232
174
 
233
175
  private
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{milkode}
8
- s.version = "0.7.0"
8
+ s.version = "0.7.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["ongaeshi"]
12
- s.date = %q{2012-05-06}
12
+ s.date = %q{2012-05-15}
13
13
  s.description = %q{Line based local source code search engine & grep-command & web-app.}
14
14
  s.email = %q{ongaeshi0621@gmail.com}
15
15
  s.executables = ["gmilk", "milk"]
@@ -128,11 +128,6 @@ Gem::Specification.new do |s|
128
128
  s.specification_version = 3
129
129
 
130
130
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
131
- s.add_runtime_dependency(%q<milkode>, [">= 0"])
132
- s.add_development_dependency(%q<bundler>, [">= 0"])
133
- s.add_development_dependency(%q<jeweler>, [">= 0"])
134
- s.add_development_dependency(%q<bundler>, [">= 0"])
135
- s.add_development_dependency(%q<jeweler>, [">= 0"])
136
131
  s.add_runtime_dependency(%q<termcolor>, [">= 1.2.0"])
137
132
  s.add_runtime_dependency(%q<rroonga>, [">= 1.1.0"])
138
133
  s.add_runtime_dependency(%q<rack>, [">= 1.3.4"])
@@ -145,11 +140,6 @@ Gem::Specification.new do |s|
145
140
  s.add_runtime_dependency(%q<sass>, [">= 3.1.3"])
146
141
  s.add_runtime_dependency(%q<thor>, ["~> 0.15.0"])
147
142
  else
148
- s.add_dependency(%q<milkode>, [">= 0"])
149
- s.add_dependency(%q<bundler>, [">= 0"])
150
- s.add_dependency(%q<jeweler>, [">= 0"])
151
- s.add_dependency(%q<bundler>, [">= 0"])
152
- s.add_dependency(%q<jeweler>, [">= 0"])
153
143
  s.add_dependency(%q<termcolor>, [">= 1.2.0"])
154
144
  s.add_dependency(%q<rroonga>, [">= 1.1.0"])
155
145
  s.add_dependency(%q<rack>, [">= 1.3.4"])
@@ -163,11 +153,6 @@ Gem::Specification.new do |s|
163
153
  s.add_dependency(%q<thor>, ["~> 0.15.0"])
164
154
  end
165
155
  else
166
- s.add_dependency(%q<milkode>, [">= 0"])
167
- s.add_dependency(%q<bundler>, [">= 0"])
168
- s.add_dependency(%q<jeweler>, [">= 0"])
169
- s.add_dependency(%q<bundler>, [">= 0"])
170
- s.add_dependency(%q<jeweler>, [">= 0"])
171
156
  s.add_dependency(%q<termcolor>, [">= 1.2.0"])
172
157
  s.add_dependency(%q<rroonga>, [">= 1.1.0"])
173
158
  s.add_dependency(%q<rack>, [">= 1.3.4"])
@@ -61,24 +61,12 @@ class TestCLI_Cdstk < Test::Unit::TestCase
61
61
  assert_equal @first_default_dir, Dbdir.default_dir
62
62
  end
63
63
 
64
- # def test_list_help
65
- # command("init -h")
66
- # command("add -h")
67
- # command("update -h")
68
- # command("remove -h")
69
- # command("list -h")
70
- # command("pwd -h")
71
- # command("cleanup -h")
72
- # command("rebuild -h")
73
- # command("dump -h")
74
- # command("dir -h")
75
- # command("setdb -h")
76
- # command("mcd -h")
77
- # command("info -h")
78
- # command("ignore -h")
79
- # command("web -h")
80
- # command("grep -h")
81
- # end
64
+ def test_help_with_h_option
65
+ commands = ["init", "add", "update", "remove", "list", "pwd", "cleanup", "rebuild", "dump", "dir", "setdb", "mcd", "info", "ignore", "web"]
66
+ commands.each do |cmd|
67
+ assert_match "Usage:", command("#{ cmd } -h")
68
+ end
69
+ end
82
70
 
83
71
  private
84
72
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: milkode
3
3
  version: !ruby/object:Gem::Version
4
- hash: 3
4
+ hash: 1
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 7
9
- - 0
10
- version: 0.7.0
9
+ - 1
10
+ version: 0.7.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - ongaeshi
@@ -15,84 +15,14 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-05-06 00:00:00 +09:00
18
+ date: 2012-05-15 00:00:00 +09:00
19
19
  default_executable:
20
20
  dependencies:
21
- - !ruby/object:Gem::Dependency
22
- type: :runtime
23
- prerelease: false
24
- name: milkode
25
- version_requirements: &id001 !ruby/object:Gem::Requirement
26
- none: false
27
- requirements:
28
- - - ">="
29
- - !ruby/object:Gem::Version
30
- hash: 3
31
- segments:
32
- - 0
33
- version: "0"
34
- requirement: *id001
35
- - !ruby/object:Gem::Dependency
36
- type: :development
37
- prerelease: false
38
- name: bundler
39
- version_requirements: &id002 !ruby/object:Gem::Requirement
40
- none: false
41
- requirements:
42
- - - ">="
43
- - !ruby/object:Gem::Version
44
- hash: 3
45
- segments:
46
- - 0
47
- version: "0"
48
- requirement: *id002
49
- - !ruby/object:Gem::Dependency
50
- type: :development
51
- prerelease: false
52
- name: jeweler
53
- version_requirements: &id003 !ruby/object:Gem::Requirement
54
- none: false
55
- requirements:
56
- - - ">="
57
- - !ruby/object:Gem::Version
58
- hash: 3
59
- segments:
60
- - 0
61
- version: "0"
62
- requirement: *id003
63
- - !ruby/object:Gem::Dependency
64
- type: :development
65
- prerelease: false
66
- name: bundler
67
- version_requirements: &id004 !ruby/object:Gem::Requirement
68
- none: false
69
- requirements:
70
- - - ">="
71
- - !ruby/object:Gem::Version
72
- hash: 3
73
- segments:
74
- - 0
75
- version: "0"
76
- requirement: *id004
77
- - !ruby/object:Gem::Dependency
78
- type: :development
79
- prerelease: false
80
- name: jeweler
81
- version_requirements: &id005 !ruby/object:Gem::Requirement
82
- none: false
83
- requirements:
84
- - - ">="
85
- - !ruby/object:Gem::Version
86
- hash: 3
87
- segments:
88
- - 0
89
- version: "0"
90
- requirement: *id005
91
21
  - !ruby/object:Gem::Dependency
92
22
  type: :runtime
93
23
  prerelease: false
94
24
  name: termcolor
95
- version_requirements: &id006 !ruby/object:Gem::Requirement
25
+ version_requirements: &id001 !ruby/object:Gem::Requirement
96
26
  none: false
97
27
  requirements:
98
28
  - - ">="
@@ -103,12 +33,12 @@ dependencies:
103
33
  - 2
104
34
  - 0
105
35
  version: 1.2.0
106
- requirement: *id006
36
+ requirement: *id001
107
37
  - !ruby/object:Gem::Dependency
108
38
  type: :runtime
109
39
  prerelease: false
110
40
  name: rroonga
111
- version_requirements: &id007 !ruby/object:Gem::Requirement
41
+ version_requirements: &id002 !ruby/object:Gem::Requirement
112
42
  none: false
113
43
  requirements:
114
44
  - - ">="
@@ -119,12 +49,12 @@ dependencies:
119
49
  - 1
120
50
  - 0
121
51
  version: 1.1.0
122
- requirement: *id007
52
+ requirement: *id002
123
53
  - !ruby/object:Gem::Dependency
124
54
  type: :runtime
125
55
  prerelease: false
126
56
  name: rack
127
- version_requirements: &id008 !ruby/object:Gem::Requirement
57
+ version_requirements: &id003 !ruby/object:Gem::Requirement
128
58
  none: false
129
59
  requirements:
130
60
  - - ">="
@@ -135,12 +65,12 @@ dependencies:
135
65
  - 3
136
66
  - 4
137
67
  version: 1.3.4
138
- requirement: *id008
68
+ requirement: *id003
139
69
  - !ruby/object:Gem::Dependency
140
70
  type: :runtime
141
71
  prerelease: false
142
72
  name: sinatra
143
- version_requirements: &id009 !ruby/object:Gem::Requirement
73
+ version_requirements: &id004 !ruby/object:Gem::Requirement
144
74
  none: false
145
75
  requirements:
146
76
  - - ">="
@@ -151,12 +81,12 @@ dependencies:
151
81
  - 2
152
82
  - 6
153
83
  version: 1.2.6
154
- requirement: *id009
84
+ requirement: *id004
155
85
  - !ruby/object:Gem::Dependency
156
86
  type: :runtime
157
87
  prerelease: false
158
88
  name: launchy
159
- version_requirements: &id010 !ruby/object:Gem::Requirement
89
+ version_requirements: &id005 !ruby/object:Gem::Requirement
160
90
  none: false
161
91
  requirements:
162
92
  - - ">="
@@ -167,12 +97,12 @@ dependencies:
167
97
  - 3
168
98
  - 7
169
99
  version: 0.3.7
170
- requirement: *id010
100
+ requirement: *id005
171
101
  - !ruby/object:Gem::Dependency
172
102
  type: :runtime
173
103
  prerelease: false
174
104
  name: coderay
175
- version_requirements: &id011 !ruby/object:Gem::Requirement
105
+ version_requirements: &id006 !ruby/object:Gem::Requirement
176
106
  none: false
177
107
  requirements:
178
108
  - - ">="
@@ -183,12 +113,12 @@ dependencies:
183
113
  - 0
184
114
  - 5
185
115
  version: 1.0.5
186
- requirement: *id011
116
+ requirement: *id006
187
117
  - !ruby/object:Gem::Dependency
188
118
  type: :runtime
189
119
  prerelease: false
190
120
  name: thin
191
- version_requirements: &id012 !ruby/object:Gem::Requirement
121
+ version_requirements: &id007 !ruby/object:Gem::Requirement
192
122
  none: false
193
123
  requirements:
194
124
  - - ">="
@@ -199,12 +129,12 @@ dependencies:
199
129
  - 2
200
130
  - 10
201
131
  version: 1.2.10
202
- requirement: *id012
132
+ requirement: *id007
203
133
  - !ruby/object:Gem::Dependency
204
134
  type: :runtime
205
135
  prerelease: false
206
136
  name: archive-zip
207
- version_requirements: &id013 !ruby/object:Gem::Requirement
137
+ version_requirements: &id008 !ruby/object:Gem::Requirement
208
138
  none: false
209
139
  requirements:
210
140
  - - ">="
@@ -215,12 +145,12 @@ dependencies:
215
145
  - 4
216
146
  - 0
217
147
  version: 0.4.0
218
- requirement: *id013
148
+ requirement: *id008
219
149
  - !ruby/object:Gem::Dependency
220
150
  type: :runtime
221
151
  prerelease: false
222
152
  name: haml
223
- version_requirements: &id014 !ruby/object:Gem::Requirement
153
+ version_requirements: &id009 !ruby/object:Gem::Requirement
224
154
  none: false
225
155
  requirements:
226
156
  - - ">="
@@ -231,12 +161,12 @@ dependencies:
231
161
  - 1
232
162
  - 2
233
163
  version: 3.1.2
234
- requirement: *id014
164
+ requirement: *id009
235
165
  - !ruby/object:Gem::Dependency
236
166
  type: :runtime
237
167
  prerelease: false
238
168
  name: sass
239
- version_requirements: &id015 !ruby/object:Gem::Requirement
169
+ version_requirements: &id010 !ruby/object:Gem::Requirement
240
170
  none: false
241
171
  requirements:
242
172
  - - ">="
@@ -247,12 +177,12 @@ dependencies:
247
177
  - 1
248
178
  - 3
249
179
  version: 3.1.3
250
- requirement: *id015
180
+ requirement: *id010
251
181
  - !ruby/object:Gem::Dependency
252
182
  type: :runtime
253
183
  prerelease: false
254
184
  name: thor
255
- version_requirements: &id016 !ruby/object:Gem::Requirement
185
+ version_requirements: &id011 !ruby/object:Gem::Requirement
256
186
  none: false
257
187
  requirements:
258
188
  - - ~>
@@ -263,7 +193,7 @@ dependencies:
263
193
  - 15
264
194
  - 0
265
195
  version: 0.15.0
266
- requirement: *id016
196
+ requirement: *id011
267
197
  description: Line based local source code search engine & grep-command & web-app.
268
198
  email: ongaeshi0621@gmail.com
269
199
  executables: