dev 2.0.268 → 2.0.269

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,5 @@
1
1
  puts __FILE__ if defined?(DEBUG)
2
-
2
+ require_relative('command.rb')
3
3
 
4
4
  class Gemspec
5
5
  def self.update gemspec_file
@@ -19,11 +19,19 @@ class Gemspec
19
19
  return spec.version.to_s
20
20
  end
21
21
 
22
+ def self.latest_published_version gemname
23
+ scan=`gem list -r #{gemname}`.scan(/^dev\s*\(([\d.]+)\)/)
24
+ if(!scan.nil?)
25
+ return scan[0][0] if(scan.length > 0 && !scan[0].nil? && scan[0].length > 0)
26
+ end
27
+ ''
28
+ end
29
+
22
30
  def self.published_version gemspec_file
23
31
  published_version=''
24
32
  spec=Gem::Specification.load(gemspec_file)
25
33
  begin
26
- published_version = `gem list -r #{spec.name}`.scan(/\((\d+.\d+.\d+)\)/)[0][0]
34
+ published_version = latest_published_version spec.name# `gem list -r #{spec.name}`.scan(/\((\d+.\d+.\d+)\)/)[0][0]
27
35
  rescue
28
36
  published_version=''
29
37
  end
@@ -8,7 +8,32 @@ class History
8
8
  @dev=Dev.new if @dev.nil?
9
9
  end
10
10
 
11
- def get_work_command value
11
+ # .0. for 0 exit codes
12
+ # .X. for non 0 exit codes
13
+ # project name is contained in directory name
14
+ def get_commands pattern
15
+ commands=Array.new
16
+ Dir.chdir(@dev.log_dir) do
17
+ Dir.glob("*#{pattern.gsub('/','-')}*.*").each{|logfile|
18
+ commands << Command.new(JSON.parse(IO.read(logfile)))
19
+ }
20
+ end
21
+ commands
22
+ end
23
+
24
+ def add_command command
25
+ code="0"
26
+ code="X" if command[:exit_code] !=0
27
+ directory=command[:directory].gsub(@dev.root_dir,'').gsub('/','-')
28
+ name="#{command[:input]}.#{code}.#{directory}.json"
29
+ filename="#{@dev.log_dir}/#{name}"
30
+ puts "add command #{filename}" if @dev.debug?
31
+ File.open(filename,'w'){|f|f.write(command.to_json)}
32
+ end
33
+
34
+ def get_wrk_command project_fullname
35
+ commands=get_commands("#{project_fullname}".gsub('/','-'))
36
+ return commands[0] if commands.length > 0
12
37
  nil
13
38
  end
14
39
  end
@@ -2,10 +2,34 @@ puts __FILE__ if defined?(DEBUG)
2
2
 
3
3
  require 'json'
4
4
  require_relative('../apps/svn.rb')
5
+ require_relative('environment.rb')
5
6
  require_relative('string.rb')
6
7
 
7
8
  class Project < Hash
8
- attr_accessor :filename
9
+ attr_accessor :filename,:env
10
+
11
+ def initialize value='',fullname=''
12
+ @filename=''
13
+ @env=Environment.new
14
+ self[:url]=Project.get_url
15
+ self[:fullname]=Project.get_fullname_from_url self[:url] if self[:url].length > 0
16
+ self[:timeout]=60*5
17
+ if value.is_a?(String)
18
+ self[:url] = value if value.is_a?(String) && value.length > 0
19
+ self[:fullname] = Project.get_fullname_from_url self[:url]
20
+ elsif(value.is_a?(Hash))
21
+ value.each{|k,v|self[k.to_sym]=v}
22
+ else
23
+ self[:fullname]=Project.get_fullname_from_url self[:url] if self[:url].length > 0
24
+ end
25
+ self[:fullname] = fullname if fullname.length > 0
26
+ end
27
+
28
+ def set_timeout value
29
+ self[:timeout] = value if value.is_a? Numeric
30
+ self[:timeout] = value.gsub('m','').strip.to_f * 60 if value.include?('m')
31
+ self[:timeout] = value.gsub('s','').strip.to_f * 60 if value.include?('s')
32
+ end
9
33
 
10
34
  def self.get_url directory=Rake.application.original_dir
11
35
  url=''
@@ -17,46 +41,26 @@ class Project < Hash
17
41
  end
18
42
 
19
43
  def self.get_fullname directory
20
- directory.gsub(Environment.dev_root,'').gsub('/wrk','')
44
+ directory.gsub(@env.wrk_dir,'')
21
45
  end
22
46
 
23
47
  def self.get_fullname_from_url url
24
48
  return url.gsub('http://','').gsub('https://','').gsub('.com/','/').gsub('.git','')
25
49
  end
26
50
 
27
- def initialize value=''
28
- @filename=''
29
-
30
- self[:url]=Project.get_url
31
- self[:fullname]=Project.get_fullname_from_url self[:url] if self[:url].length > 0
32
- if value.is_a?(String)
33
- self[:url] = value if value.is_a?(String) && value.length > 0
34
- self[:fullname] = Project.get_fullname_from_url self[:url]
35
- elsif(value.is_a?(Hash))
36
- value.each{|k,v|self[k.to_sym]=v}
37
- else
38
- self[:fullname]=Project.get_fullname_from_url self[:url] if self[:url].length > 0
39
- end
40
-
41
- #self[:fullname]=Project.get_fullname Rake.application.original_dir if(self.fullname.include?(':') && Rake.application.original_dir.include?('/wrk/'))
42
- end
43
-
44
- def url
45
- self[:url]
46
- end
47
- def fullname
48
- self[:fullname]
49
- end
51
+ def url; self[:url]; end
52
+ def fullname; self[:fullname]; end
50
53
 
51
54
  def name
52
55
  parts=fullname.split('/')
53
56
  parts[parts.length-1]
54
57
  end
55
58
 
56
- def wrk_dir
57
- FileUtils.mkdir("#{Environment.dev_root}/wrk") if !File.exists? "#{Environment.dev_root}/wrk"
58
- "#{Environment.dev_root}/wrk/#{self.fullname}"
59
- end
59
+ def wrk_dir; "#{@env.wrk_dir}/#{self.fullname}"; end
60
+ def make_dir tag=''
61
+ "#{@env.make_dir}/#{self.fullname}" if tag.length==0
62
+ "#{@env.make_dir}/#{self.fullname}-#{tag}"
63
+ end
60
64
 
61
65
  def pull
62
66
  if(File.exists?(wrk_dir) && File.exists?("#{wrk_dir}/.git"))
@@ -69,15 +73,19 @@ class Project < Hash
69
73
 
70
74
  def clone
71
75
  if(!File.exists?(wrk_dir) && self[:url].include?('.git'))
72
- puts "cloning #{self[:url]} to #{self.wrk_dir}"
73
- puts `git clone #{self[:url]} #{self.wrk_dir}`
76
+ cmd=Command.new({ :input => "git clone #{self[:url]} #{self.wrk_dir}", :quiet => true,:ignore_failure => true})
77
+ cmd.execute
78
+ @env.out cmd.summary
74
79
  end
75
80
  end
76
81
 
77
82
  def checkout
78
83
  if(!File.exists?(wrk_dir) && self[:url].include?('svn'))
79
- puts "checkout #{self.url} to #{self.wrk_dir}"
80
- puts `svn checkout #{self.url} #{self.wrk_dir}`
84
+ #puts "checkout #{self.url} to #{self.wrk_dir}"
85
+ #puts `svn checkout #{self.url} #{self.wrk_dir}`
86
+ cmd=Command.new({ :input => "svn checkout #{self.url} #{self.wrk_dir}", :quiet => true,:ignore_failure => true})
87
+ cmd.execute
88
+ @env.out cmd.summary
81
89
  end
82
90
  end
83
91
 
@@ -90,25 +98,19 @@ class Project < Hash
90
98
  Dir.chdir(self.wrk_dir) do
91
99
  rake = Command.new({ :input => 'rake', :timeout => 300, :ignore_failure => true })
92
100
  rake.execute
93
- puts rake.summary
101
+ @env.out rake.summary
94
102
  end
95
103
  end
96
104
  end
97
105
 
98
- def info
99
- puts "Project #{name}"
100
- puts "#{'fullname'.fix(13)}: #{self.fullname}"
101
- puts "#{'url'.fix(13)}: #{self[:url]}"
102
- puts "#{'version'.fix(13)}: #{VERSION}" if defined? VERSION
103
- end
106
+
104
107
 
105
108
  def latest_tag update=false
106
- FileUtils.mkdir("#{Environment.dev_root}/make") if !File.exists? "#{Environment.dev_root}/make"
107
- makedir="#{Environment.dev_root}/make/#{self.fullname}"
109
+ makedir="#{@env.make_dir}/#{self.fullname}"
108
110
  FileUtils.mkdir_p(File.dirname(makedir)) if !File.exists?(File.dirname(makedir))
109
111
  if(File.exists?(makedir))
110
112
  Dir.chdir(makedir) do
111
- Command.exit_code('git pull')
113
+ Command.exit_code('git pull') if update
112
114
  end
113
115
  else
114
116
  if(update)
@@ -129,49 +131,212 @@ class Project < Hash
129
131
  ''
130
132
  end
131
133
 
132
- def make_dir tag
133
- "#{Environment.dev_root}/make/#{self.fullname}-#{tag}"
134
+
135
+
136
+ def log_filenames tags=nil
137
+ tags=Array.new if tags.nil?
138
+ filenames=Array.new
139
+ Dir.chdir(@env.log_dir) do
140
+ dotname=fullname.gsub('/','.')
141
+ Dir.glob("#{dotname}*.json").each{|f|
142
+ if(tags.length==0)
143
+ filenames << "#{@env.log_dir}/#{f}"
144
+ else
145
+ has_tags=true
146
+ tags.each{|tag|
147
+ has_tags=false if !f.include? tag
148
+ }
149
+ filenames << "#{@env.log_dir}/#{f}" if has_tags
150
+ end
151
+ }
152
+ end
153
+ filenames
134
154
  end
135
155
 
136
- def make tag=''
137
- tag=latest_tag if tag.length==0
156
+ def command_history tags=nil
157
+ commands=Array.new
158
+ log_filenames(tags).each{|logfile|
159
+ commands << Command.new(JSON.parse(IO.read(logfile)))
160
+ }
161
+ commands
162
+ end
163
+
164
+ def get_logfile tags
165
+ tagstring=''
166
+ tagstring=tags if tags.kind_of?(String)
167
+ tagstring=tags.join('.') if tags.kind_of?(Array)
168
+ name="#{self.fullname}.#{tagstring}.json".gsub('/','.')
169
+ "#{@env.log_dir}/#{name}"
170
+ end
171
+
172
+ def list
173
+ history=command_history
174
+ if(history.length==0)
175
+ @env.out "? #{fullname}"
176
+ else
177
+ status=0
178
+ history.each{|c|
179
+ status=c.exit_code if c.exit_code != 0
180
+ }
181
+ if(status==0)
182
+ @env.out " #{fullname}"
183
+ else
184
+ if(@env.colorize?)
185
+ require 'ansi/code'
186
+ @env.out ANSI.red + ANSI.bright + "X #{fullname}" + ANSI.reset
187
+ else
188
+ @env.out "X #{fullname}"
189
+ end
190
+ end
191
+ end
192
+ end
193
+
194
+ def out_brackets message
195
+ if(@env.colorize?)
196
+ require 'ansi/code'
197
+ @env.out "[" + ANSI.blue + ANSI.bright + message + ANSI.reset + ']'
198
+ else
199
+ @env.out "[#{message}]"
200
+ end
201
+ end
202
+
203
+ def out_cyan message
204
+ if(@env.colorize?)
205
+ require 'ansi/code'
206
+ @env.out ANSI.cyan + ANSI.bright + message + ANSI.reset
207
+ else
208
+ @env.out "#{message}"
209
+ end
210
+ end
211
+
212
+ def out_property name,value
213
+ if(@env.colorize?)
214
+ require 'ansi/code'
215
+ @env.out "#{name}: " + ANSI.white + ANSI.bold + value.to_s.strip + ANSI.reset
216
+ else
217
+ @env.out "#{name}: #{value}"
218
+ end
219
+ end
220
+
221
+ #def info
222
+ # @env.out "Project #{name}"
223
+ # @env.out "#{'fullname'.fix(13)}: #{self.fullname}"
224
+ # @env.out "#{'url'.fix(13)}: #{self[:url]}"
225
+ # @env.out "#{'version'.fix(13)}: #{VERSION}" if defined? VERSION
226
+ #end
227
+ def info
228
+ infoCmd=Command.new({ :input => 'info', :exit_code => 0 })
229
+ #out_cyan '========================================================='
230
+ #out_cyan fullname
231
+ out_property "fullname".fix(15), fullname
232
+ out_property "url".fix(15), url
233
+ wrk_history=command_history ['work']
234
+ out_property "work status".fix(15), "?" if wrk_history.length == 0
235
+ out_property "work status".fix(15), wrk_history[0].summary if wrk_history.length > 0
236
+ if(wrk_history.length > 0)
237
+ @env.out wrk_history[0].info
238
+ end
239
+ make_history=command_history ['make', latest_tag]
240
+ out_property "make status".fix(15),"?" if make_history.length == 0
241
+ out_property "make status".fix(15), make_history[0].summary if make_history.length > 0
242
+ if(make_history.length >0)
243
+ @env.out make_history[0].info
244
+ end
245
+ infoCmd
246
+ end
247
+
248
+ def clobber
249
+ clobberCmd=Command.new('clobber')
250
+ clobberCmd[:exit_code]=0
251
+ if(File.exists?(wrk_dir))
252
+ Dir.remove wrk_dir,true
253
+ @env.out "removed #{wrk_dir}"
254
+ end
255
+ if(File.exists?(make_dir))
256
+ Dir.remove make_dir,true
257
+ @env.out "removed #{make_dir}"
258
+ end
259
+ clobberCmd
260
+ end
138
261
 
139
- return if tag.length==0
262
+ def work
263
+ clone
264
+ checkout
265
+ logfile=get_logfile ['work']
266
+ if(File.exists?(wrk_dir))
267
+ rake_default=Command.new({:input =>'rake default',:quiet => true,:ignore_failure => true})
268
+ if(last_work_mtime.nil? || last_work_mtime < Environment.get_latest_mtime(wrk_dir))
269
+ Dir.chdir(wrk_dir) do
270
+
271
+ @env.out fullname
272
+
273
+ if(!File.exists?'rakefile.rb')
274
+ rake_default[:exit_code]=1
275
+ rake_default[:error]="rakefile.rb not found."
276
+ rake_default[:start_time]=Time.now
277
+ rake_default[:end_time]=Time.now
278
+ else
279
+ #rake_default[:timeout] = self[:timeout]
280
+ rake_default.execute
281
+ end
282
+ rake_default.save logfile
283
+ update_status
284
+ @env.out rake_default.summary true
285
+ return rake_default
286
+ end
287
+ else
288
+ if(File.exists?(logfile))
289
+ rake_default.open logfile
290
+ @env.out rake_default.summary true if(rake_default[:exit_code] != 0 || @env.show_success?)
291
+ end
292
+ end
293
+ rake_default
294
+ end
295
+ end
296
+
297
+ def make tag=''
298
+ tag=latest_tag true if tag.length==0
299
+ #return if tag.length==0
140
300
  raise 'no tag specified' if tag.length==0
141
301
 
142
- rake_default=nil
143
- logfile="#{Environment.dev_root}/log/#{self.fullname}/#{tag}/#{Environment.user}@#{Environment.machine}.json"
302
+ rake_default=Command.new({:input => 'rake default',:quiet => true,:ignore_failure => true})
303
+ logfile=get_logfile ['make',tag]
144
304
  if(File.exists?(logfile))
145
- # load hash from json
146
- rake_default=Command.new(JSON.parse(IO.read(logfile)))
147
- #puts rake_default.summary
305
+ rake_default.open logfile
306
+ @env.out rake_default.summary true if(rake_default[:exit_code] != 0) || @env.show_success?
307
+ rake_default
148
308
  else
149
- FileUtils.mkdir("#{Environment.dev_root}/make") if !File.exists? "#{Environment.dev_root}/make"
150
- makedir="#{Environment.dev_root}/make/#{self.fullname}-#{tag}"
309
+ makedir=make_dir tag
151
310
  FileUtils.mkdir_p(File.dirname(makedir)) if !File.exists? File.dirname(makedir)
152
311
  if(self[:url].include?('.git'))
153
312
  if(!File.exists?(makedir))
154
313
  clone=Command.new({:input=>"git clone #{self[:url]} #{makedir}",:quiet=>true})
155
314
  clone.execute
156
315
  end
157
- if(File.exists?(makedir))
316
+ end
317
+ if(File.exists?(makedir))
158
318
  Dir.chdir(makedir) do
159
- #puts "making #{self.fullname}"
160
319
  checkout=Command.new({:input=>"git checkout #{tag}",:quiet=>true})
161
320
  checkout.execute
162
321
  FileUtils.rm_r '.git'
163
- rake_default=Command.new('rake default')
164
- rake_default[:quiet]=true
165
- rake_default[:ignore_failure]=true
166
- #rake_default[:timeout]=5*60*1000
167
- rake_default.execute
168
- FileUtils.mkdir_p(File.dirname(logfile)) if !File.exists?(File.dirname(logfile))
169
- File.open(logfile,'w'){|f|f.write(rake_default.to_json)}
322
+ if(!File.exists?'rakefile.rb')
323
+ rake_default[:exit_code]=1
324
+ rake_default[:error]="rakefile.rb not found."
325
+ rake_default[:start_time]=Time.now
326
+ rake_default[:end_time]=Time.now
327
+ else
328
+ #rake_default[:timeout] = self[:timeout]
329
+ rake_default.execute
330
+ end
331
+ rake_default.save logfile
170
332
  update_status
333
+ @env.out rake_default.summary true
171
334
  rake_default
172
335
  end
173
- end
336
+ else
337
+ puts "Project make make_dir #{makedir} does not exist." if @env.debug?
174
338
  end
339
+
175
340
  begin
176
341
  FileUtils.rm_r makedir
177
342
  rescue
@@ -181,24 +346,22 @@ class Project < Hash
181
346
  end
182
347
 
183
348
  def last_work_mtime
184
- logfile="#{Environment.dev_root}/log/#{self.fullname}/#{Environment.user}@#{Environment.machine}.json"
185
- if File.exists? logfile
186
- return File.mtime(logfile)
187
- end
349
+ logfile=get_logfile ['work']
350
+ return File.mtime(logfile) if File.exists? logfile
188
351
  nil
189
352
  end
190
353
 
191
354
  def update_status
192
- status_logfile="#{Environment.dev_root}/log/#{self.fullname}/#{Environment.user}@#{Environment.machine}.status.json"
355
+ status_logfile="#{@env.root_dir}/log/#{self.fullname}/#{@env.user}@#{@env.machine}.status.json"
193
356
  status=Hash.new({'status'=>'?'})
194
- wrk_logfile="#{Environment.dev_root}/log/#{self.fullname}/#{Environment.user}@#{Environment.machine}.json"
357
+ wrk_logfile="#{@env.root_dir}/log/#{self.fullname}/#{@env.user}@#{@env.machine}.json"
195
358
  if(File.exists?(wrk_logfile))
196
359
  rake_default=Command.new(JSON.parse(IO.read(wrk_logfile)))
197
360
  status[:work_logfile]=wrk_logfile
198
361
  status['status']='0'
199
362
  status['status']='X' if rake_default[:exit_code] != 0
200
363
  end
201
- make_logfile="#{Environment.dev_root}/log/#{self.fullname}/#{latest_tag}/#{Environment.user}@#{Environment.machine}.json"
364
+ make_logfile="#{@env.root_dir}/log/#{self.fullname}/#{latest_tag}/#{@env.user}@#{@env.machine}.json"
202
365
  if(File.exists?(make_logfile))
203
366
  rake_default=Command.new(JSON.parse(IO.read(make_logfile)))
204
367
  status[:make_logfile]=make_logfile
@@ -212,63 +375,18 @@ class Project < Hash
212
375
  end
213
376
 
214
377
  def status
215
- status_logfile="#{Environment.dev_root}/log/#{self.fullname}/#{Environment.user}@#{Environment.machine}.status.json"
378
+ status_logfile="#{@env.root_dir}/log/#{self.fullname}/#{@env.user}@#{@env.machine}.status.json"
216
379
  update_status if !File.exists? status_logfile
217
380
  if(File.exists?(status_logfile))
218
381
  statusHash=JSON.parse(IO.read(status_logfile))
219
382
  return statusHash['status'] if(statusHash.has_key?('status'))
220
383
  end
221
384
  '?'
222
- #status='?'
223
- #wrk_logfile="#{Environment.dev_root}/log/#{self.fullname}/#{Environment.user}@#{Environment.machine}.json"
224
- #if(File.exists?(wrk_logfile))
225
- # rake_default=Command.new(JSON.parse(IO.read(wrk_logfile)))
226
- # status='0'
227
- # return 'X' if rake_default[:exit_code] != 0
228
- #end
229
- #make_logfile="#{Environment.dev_root}/log/#{self.fullname}/#{latest_tag}/#{Environment.user}@#{Environment.machine}.json"
230
- #if(File.exists?(make_logfile))
231
- # rake_default=Command.new(JSON.parse(IO.read(make_logfile)))
232
- # status='0'
233
- # return 'X' if rake_default[:exit_code] != 0
234
- #else
235
- # return '?' # outstanding make
236
- #end
237
- #status
238
385
  end
239
386
 
240
387
  def report
241
388
  end
242
389
 
243
- def work
244
- clone
245
- checkout
246
- if(File.exists?(wrk_dir))
247
- if(last_work_mtime.nil? || last_work_mtime < Environment.get_latest_mtime(wrk_dir))
248
- Dir.chdir(wrk_dir) do
249
- puts "working #{self.fullname}"
250
- rake_default=Command.new('rake default')
251
- rake_default[:quiet]=true
252
- rake_default[:ignore_failure]=true
253
- rake_default.execute
254
- #Command.exit_code('rake default')
255
- logfile="#{Environment.dev_root}/log/#{self.fullname}/#{Environment.user}@#{Environment.machine}.json"
256
- FileUtils.mkdir_p(File.dirname(logfile)) if !File.exists?(File.dirname(logfile))
257
- File.open(logfile,'w'){|f|f.write(rake_default.to_json)}
258
- update_status
259
- puts rake_default.summary
260
- end
261
- else
262
- logfile="#{Environment.dev_root}/log/#{self.fullname}/#{Environment.user}@#{Environment.machine}.json"
263
- if(File.exists?(logfile))
264
- rake_default=Command.new('rake default')
265
- rake_default.open logfile
266
- puts rake_default.summary if(rake_default[:exit_code] != 0)
267
- end
268
- end
269
- end
270
- end
271
-
272
390
  def update
273
391
  clone
274
392
  checkout
@@ -301,8 +419,6 @@ class Project < Hash
301
419
  tags
302
420
  end
303
421
 
304
- def clobber
305
-
306
- end
422
+
307
423
  end
308
424