PageRenderTime 82ms CodeModel.GetById 10ms RepoModel.GetById 0ms app.codeStats 0ms

/lib/agent_charlie/actions/upgrade.rb

https://bitbucket.org/atlassian/agent-charlie
Ruby | 62 lines | 47 code | 13 blank | 2 comment | 1 complexity | fe8b7946963c87d020f9d13fc4f874a2 MD5 | raw file
  1. require 'zlib'
  2. require 'rubygems/package'
  3. require 'open-uri'
  4. require 'fileutils'
  5. class AgentCharlie::Action::Upgrade
  6. def initialize(params = {})
  7. @branch = params[:branch]
  8. AgentCharlie::Logger.debug{"Initializing upgrade action with branch '#{@branch}'"}
  9. end
  10. def run_action(progress)
  11. @progress = progress
  12. charlie = AgentCharlie::Charlie.instance
  13. begin
  14. open("https://bitbucket.org/atlassian/agent-charlie/get/#{@branch}.tar.gz") do |io|
  15. z = Zlib::GzipReader.new(io)
  16. ungzip = StringIO.new(z.read)
  17. z.close
  18. tarreader = Gem::Package::TarReader.new(ungzip) do |tar|
  19. tar.each do |f|
  20. path_components = f.full_name.split(File::SEPARATOR)
  21. stripped = path_components[1, path_components.length-1]
  22. destination = File.join(AgentCharlie.charlie_root, stripped.join(File::SEPARATOR))
  23. if File.directory?(destination)
  24. FileUtils.mkdir_p destination
  25. else
  26. dir = File.dirname(destination)
  27. FileUtils.mkdir_p dir unless File.directory?(dir)
  28. File.open(destination, 'wb') do |output|
  29. output.print f.read
  30. end
  31. end
  32. progress.increment(f.full_name)
  33. end
  34. end
  35. end
  36. rescue => e
  37. AgentCharlie::Logger.error{"Failed to upgrade Agent Charlie: '#{$!}'"}
  38. AgentCharlie::Logger.error{$@.join("\n")}
  39. progress.failed("Could not upgrade Agent Charlie")
  40. return
  41. end
  42. # curl -o "$charlieTmp/charlie.tar.gz" "https://bitbucket.org/atlassian/agent-charlie/get/stable.tar.gz" &&
  43. # tar -C "$charlieRoot" -zxf "$charlieTmp/charlie.tar.gz" --strip-components 1 &&
  44. progress.complete("Upgrade was complete", nil)
  45. end
  46. def get_progress
  47. return @progress
  48. end
  49. end