class Statistrano::Deployment::Releaser::Revisions
Attributes
release_name[R]
Public Class Methods
new()
click to toggle source
# File lib/statistrano/deployment/releaser/revisions.rb, line 10 def initialize @release_name = Time.now.to_i.to_s end
Public Instance Methods
add_release_to_manifest(remote, build_data={})
click to toggle source
# File lib/statistrano/deployment/releaser/revisions.rb, line 83 def add_release_to_manifest remote, build_data={} manifest = new_manifest remote manifest.push build_data.merge(release: release_name) manifest.save! end
create_release(remote, build_data={})
click to toggle source
# File lib/statistrano/deployment/releaser/revisions.rb, line 14 def create_release remote, build_data={} setup_release_path remote rsync_to_remote remote invoke_pre_symlink_task remote symlink_release remote add_release_to_manifest remote, build_data prune_releases remote end
current_release_data(remote)
click to toggle source
merge of manifest & log data (if a log)
# File lib/statistrano/deployment/releaser/revisions.rb, line 60 def current_release_data remote release_data = new_manifest(remote).data.last if remote.config.log_file_path release_data.merge! log_file(remote).last_entry end release_data end
list_releases(remote)
click to toggle source
# File lib/statistrano/deployment/releaser/revisions.rb, line 50 def list_releases remote manifest = new_manifest remote manifest.data.keep_if do |rel| rel.has_key?(:release) end.sort_by do |rel| rel[:release] end.reverse end
prune_releases(remote)
click to toggle source
# File lib/statistrano/deployment/releaser/revisions.rb, line 45 def prune_releases remote remove_untracked_releases remote remove_releases_beyond_release_count remote end
rollback_release(remote)
click to toggle source
# File lib/statistrano/deployment/releaser/revisions.rb, line 70 def rollback_release remote manifest = new_manifest remote releases = tracked_releases remote, manifest unless releases.length > 1 return Log.error "There is only one release, best not to remove it" end symlink_release remote, releases[1] remove_release releases[0], remote, manifest manifest.save! end
rsync_to_remote(remote)
click to toggle source
# File lib/statistrano/deployment/releaser/revisions.rb, line 34 def rsync_to_remote remote resp = remote.rsync_to_remote local_path(remote), release_path(remote) unless resp.success? abort() end end
setup_release_path(remote)
click to toggle source
# File lib/statistrano/deployment/releaser/revisions.rb, line 23 def setup_release_path remote current_release = current_release remote remote.create_remote_dir releases_path(remote) if current_release.empty? remote.create_remote_dir release_path(remote) else remote.run "cp -a #{release_path(remote, current_release)} #{release_path(remote)}" end end
symlink_release(remote, release=nil)
click to toggle source
# File lib/statistrano/deployment/releaser/revisions.rb, line 41 def symlink_release remote, release=nil remote.run "ln -nfs #{release_path(remote, release)} #{public_path(remote)}" end
Private Instance Methods
current_release(remote)
click to toggle source
# File lib/statistrano/deployment/releaser/revisions.rb, line 125 def current_release remote resp = remote.run("readlink #{public_path(remote)}") resp.stdout.sub( /#{releases_path(remote)}\/?/, '' ).strip end
local_path(remote=nil)
click to toggle source
# File lib/statistrano/deployment/releaser/revisions.rb, line 142 def local_path remote=nil File.join( Dir.pwd, remote.config.local_dir ) end
log_file(remote)
click to toggle source
# File lib/statistrano/deployment/releaser/revisions.rb, line 95 def log_file remote Deployment::LogFile.new remote.config.log_file_path, remote end
new_manifest(remote)
click to toggle source
# File lib/statistrano/deployment/releaser/revisions.rb, line 91 def new_manifest remote Deployment::Manifest.new remote.config.remote_dir, remote end
public_path(remote=nil)
click to toggle source
# File lib/statistrano/deployment/releaser/revisions.rb, line 155 def public_path remote=nil File.join( remote.config.remote_dir, remote.config.public_dir ) end
release_path(remote=nil, release=nil)
click to toggle source
# File lib/statistrano/deployment/releaser/revisions.rb, line 150 def release_path remote=nil, release=nil release ||= release_name File.join( releases_path(remote), release ) end
releases_path(remote=nil)
click to toggle source
# File lib/statistrano/deployment/releaser/revisions.rb, line 146 def releases_path remote=nil File.join( remote.config.remote_dir, remote.config.release_dir ) end
remote_releases(remote)
click to toggle source
# File lib/statistrano/deployment/releaser/revisions.rb, line 130 def remote_releases remote remote.run("ls -m #{releases_path(remote)}").stdout .split(',').map(&:strip) end
remove_release(release_name, remote, manifest)
click to toggle source
# File lib/statistrano/deployment/releaser/revisions.rb, line 108 def remove_release release_name, remote, manifest if release_name == current_release(remote) Log.warn "did not remove release '#{release_name}' because it is current" return end manifest.remove_if { |r| r[:release] == release_name } remote.run("rm -rf #{File.join(releases_path(remote), release_name)}") end
remove_releases_beyond_release_count(remote)
click to toggle source
# File lib/statistrano/deployment/releaser/revisions.rb, line 99 def remove_releases_beyond_release_count remote manifest = new_manifest remote beyond = tracked_releases(remote, manifest)[remote.config.release_count..-1] Array(beyond).each do |beyond| remove_release beyond, remote, manifest end manifest.save! end
remove_untracked_releases(remote)
click to toggle source
# File lib/statistrano/deployment/releaser/revisions.rb, line 118 def remove_untracked_releases remote manifest = new_manifest remote (remote_releases(remote) - tracked_releases(remote)).each do |untracked_release| remove_release untracked_release, remote, manifest end end
tracked_releases(remote, manifest=nil)
click to toggle source
# File lib/statistrano/deployment/releaser/revisions.rb, line 135 def tracked_releases remote, manifest=nil manifest ||= new_manifest remote manifest.data.map do |data| data.fetch(:release, nil) end.compact.sort.reverse end