wcc 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,15 +1,15 @@
1
1
 
2
- WCC::Filters.add 'only_changes_of' do |data,args|
2
+ WCC::Filters.add 'changes_of' do |data,args|
3
3
  case args['t'] || args['type']
4
- when 'lines',nil
4
+ when 'line','lines',nil
5
5
  cmp_val = data.diff.nlinesc
6
- when 'chars'
6
+ when 'char','chars'
7
7
  cmp_val = data.diff.ncharsc
8
8
  when 'ins','insertions'
9
9
  cmp_val = data.diff.ninsertions
10
10
  when 'del','deletions'
11
11
  cmp_val = data.diff.ndeletions
12
- when 'hunks'
12
+ when 'hunk','hunks'
13
13
  cmp_val = data.diff.nhunks
14
14
  end
15
15
  next (cmp_val >= args['at_least']) if args.key?('at_least')
@@ -0,0 +1,21 @@
1
+
2
+ # NOTE: the percentage may easily go above 100% when there are more
3
+ # changes than the whole site has lines.
4
+
5
+ WCC::Filters.add 'rel_changes_of' do |data,args|
6
+ case args['percent_of']
7
+ when 'all_lines',nil
8
+ percent = data.diff.nlinesc.to_f / data.site.content.count("\n").+(1).to_f * 100
9
+ # when 'all_chars','all_characters'
10
+ # percent = ...
11
+ # when 'nonblank_lines'
12
+ # percent = ...
13
+ end
14
+ next (percent >= args['at_least']) if args.key?('at_least')
15
+ next (percent > args['more_than']) if args.key?('more_than')
16
+ next (percent <= args['at_most']) if args.key?('at_most')
17
+ next (percent < args['fewer_then']) if args.key?('fewer_than')
18
+ next (percent == args['exactly']) if args.key?('exactly')
19
+ next (percent != args['not_quite']) if args.key('not_quite')
20
+ true
21
+ end
data/lib/wcc/mail.rb CHANGED
@@ -41,9 +41,9 @@ module WCC
41
41
  # does plain SMTP to host:port using [Net::SMTP].
42
42
  class SmtpMailer
43
43
  def initialize(host, port)
44
- WCC.logger.info "Send mail via SMTP to #{@host}:#{@port}"
45
44
  @host = host
46
45
  @port = port
46
+ WCC.logger.info "Send mail via SMTP to #{@host}:#{@port}"
47
47
  end
48
48
 
49
49
  # Sends a mail built up from some [ERB] templates to the
data/lib/wcc.rb CHANGED
@@ -45,7 +45,7 @@ end
45
45
 
46
46
  module WCC
47
47
 
48
- VERSION = "1.1.0"
48
+ VERSION = "1.2.0"
49
49
 
50
50
  DIFF_TIME_FMT = '%Y-%m-%d %H:%M:%S %Z'
51
51
 
@@ -105,7 +105,6 @@ module WCC
105
105
  opts.on('-f', '--from MAIL', 'Set From: mail address') do |m| self[:from_mail] = m end
106
106
  opts.on('--host HOST', 'Set SMTP host') do |h| self[:host] = h end
107
107
  opts.on('--port PORT', 'Set SMTP port') do |p| self[:port] = p end
108
- #opts.on('--init', '--initialize')
109
108
  opts.on('--show-config', 'Show config after loading config file (debug purposes)') do self[:show_config] = true end
110
109
  opts.on('-h', '-?', '--help', 'Display this screen') do
111
110
  puts opts
@@ -171,19 +170,6 @@ module WCC
171
170
  exit 0
172
171
  end
173
172
 
174
- # create cache dir for hash and diff files
175
- Dir.mkdir(self[:cache_dir]) unless File.directory?(self[:cache_dir])
176
-
177
- if(self[:clean])
178
- WCC.logger.warn "Cleanup hash and diff files"
179
- Dir.foreach(self[:cache_dir]) do |f|
180
- File.delete(self.file(f)) if f =~ /^.*\.(md5|site)$/
181
- end
182
- end
183
-
184
- # read filter.d
185
- Dir[File.join(self[:filter_dir], '*.rb')].each { |file| require file }
186
-
187
173
  # attach --no-mails filter
188
174
  WCC::Filters.add '--no-mails' do |data|
189
175
  !self[:nomails]
@@ -367,6 +353,40 @@ module WCC
367
353
  # first use of Conf initializes it
368
354
  WCC.logger = Logger.new(STDOUT)
369
355
 
356
+ # make sure logger is correctly configured
357
+ Conf.instance
358
+
359
+ # create cache dir for hash and diff files
360
+ Dir.mkdir(Conf[:cache_dir]) unless File.directory?(Conf[:cache_dir])
361
+
362
+ if(Conf[:clean])
363
+ WCC.logger.warn "Cleanup hash and diff files"
364
+ Dir.foreach(Conf[:cache_dir]) do |f|
365
+ File.delete(Conf.file(f)) if f =~ /^.*\.(md5|site)$/
366
+ end
367
+ end
368
+
369
+ # read filter.d
370
+ Dir[File.join(Conf[:filter_dir], '*.rb')].each { |file| require file }
371
+
372
+ # timestamps
373
+ cache_file = Conf.file('cache.yml')
374
+ if File.exists?(cache_file)
375
+ WCC.logger.debug "Load timestamps from '#{cache_file}'"
376
+
377
+ # may be *false* if file is empty
378
+ yaml = YAML.load_file(cache_file)
379
+
380
+ if not yaml
381
+ WCC.logger.info "No timestamps loaded"
382
+ else
383
+ @@timestamps = yaml['timestamps']
384
+ end
385
+ else
386
+ @@timestamps = {}
387
+ end
388
+
389
+ # templates
370
390
  @@mail_plain = load_template('mail.alt.erb')
371
391
  @@mail_bodies = {
372
392
  :plain => load_template('mail-body.plain.erb'),
@@ -374,12 +394,23 @@ module WCC
374
394
  }
375
395
 
376
396
  Conf.sites.each do |site|
397
+ ts_old = get_timestamp(site)
398
+ ts_new = Time.now.to_i
399
+ if (ts_new-ts_old) < site.check_interval*60
400
+ ts_diff = (ts_new-ts_old)/60
401
+ WCC.logger.info "Skipping check for #{site.uri.host.to_s} due to check #{ts_diff} minute#{ts_diff == 1 ? '' : 's'} ago."
402
+ next
403
+ end
377
404
  if checkForUpdate(site)
378
405
  WCC.logger.warn "#{site.uri.host.to_s} has an update!"
379
406
  else
380
407
  WCC.logger.info "#{site.uri.host.to_s} is unchanged"
381
408
  end
409
+ update_timestamp(site, ts_new)
382
410
  end
411
+
412
+ # save timestamps
413
+ File.open(cache_file, 'w+') do |f| YAML.dump({"timestamps" => @@timestamps}, f) end
383
414
  end
384
415
 
385
416
  private
@@ -390,5 +421,13 @@ module WCC
390
421
  # <> omit newline for lines starting with <% and ending in %>
391
422
  ERB.new(t, 0, "<>")
392
423
  end
424
+
425
+ def self.get_timestamp(site)
426
+ @@timestamps[site.uri.to_s] || 0
427
+ end
428
+
429
+ def self.update_timestamp(site, t)
430
+ @@timestamps[site.uri.to_s] = t
431
+ end
393
432
  end
394
433
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wcc
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 31
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
- - 1
8
+ - 2
9
9
  - 0
10
- version: 1.1.0
10
+ version: 1.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Christian Nicolai
@@ -59,7 +59,8 @@ extra_rdoc_files:
59
59
  files:
60
60
  - assets/conf.yml
61
61
  - assets/filter.d/arg-test.rb
62
- - assets/filter.d/only_changes_of.rb
62
+ - assets/filter.d/changes_of.rb
63
+ - assets/filter.d/rel_changes_of.rb
63
64
  - assets/filter.d/test.rb
64
65
  - assets/template.d/mail.alt.erb
65
66
  - assets/template.d/mail-body.html.erb