Class: Lazylead::Task::Svn::Diff
- Inherits:
-
Object
- Object
- Lazylead::Task::Svn::Diff
- Defined in:
- lib/lazylead/task/svn/diff.rb
Overview
Send notification about modification of svn files since particular
revision.
Instance Method Summary collapse
-
#initialize(log = Log.new) ⇒ Diff
constructor
A new instance of Diff.
- #run(_, postman, opts) ⇒ Object
-
#send_email(postman, opts) ⇒ Object
Send email with svn log as an attachment.
-
#to_f(path, opts) ⇒ Object
Wrap attachment content to a *.zip file and archive.
Constructor Details
Instance Method Details
#run(_, postman, opts) ⇒ Object
47 48 49 50 51 52 53 54 55 |
# File 'lib/lazylead/task/svn/diff.rb', line 47 def run(_, postman, opts) stdout = OS.new.run "svn log --diff --no-auth-cache", "--username #{opts.decrypt('svn_user', 'svn_salt')}", "--password #{opts.decrypt('svn_password', 'svn_salt')}", "-r#{opts['since_rev']}:HEAD #{opts['svn_url']}" return if stdout.blank? commits = Lazylead::Svn::Commits.new(stdout) send_email postman, opts.merge(commits: commits) unless commits.empty? end |
#send_email(postman, opts) ⇒ Object
Send email with svn log as an attachment. The attachment won’t be stored locally and we’ll be removed once
mail sent.
60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/lazylead/task/svn/diff.rb', line 60 def send_email(postman, opts) Dir.mktmpdir do |dir| name = "svn-log-#{Date.today.strftime('%d-%b-%Y')}.html" begin postman.send opts.merge(attachments: [to_f(File.join(dir, name), opts)]) ensure FileUtils.rm_rf("#{dir}/*") end rescue StandardError => e @log.error "ll-010: Can't send an email '#{opts['subject']}' to #{opts['to']} due to " \ "#{Backtrace.new(e)}'" end end |
#to_f(path, opts) ⇒ Object
Wrap attachment content to a *.zip file and archive.
to_f('my-content.html', opts) => my-content.html.zip
You may disable archiving option by passing option no_archive
to_f('my-content.html', "no_archive" => true)
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/lazylead/task/svn/diff.rb', line 79 def to_f(path, opts) if opts.key? "no_archive" f = File.open(path, "w") body = opts.msg_body("template-attachment") else f = File.new("#{path}.zip", "wb") bytes = Zip::OutputStream.write_buffer do |zio| zio.put_next_entry(File.basename(path)) zio.write opts.msg_body("template-attachment") end bytes.rewind # reposition buffer pointer to the beginning body = bytes.sysread end f.write body f.close f.path end |