Class: Synco::Methods::RSyncSnapshot

Inherits:
RSync show all
Defined in:
lib/synco/methods/rsync.rb

Instance Attribute Summary

Attributes inherited from Synco::Method

#arguments, #options

Attributes inherited from Controller

#events

Instance Method Summary collapse

Methods inherited from RSync

#connect_arguments, #default_command, #escape

Methods inherited from Controller

#abort!, build, #fire, #freeze, #on, #try

Constructor Details

#initialize(*command, arguments: [], archive: true, stats: true, **options) ⇒ RSyncSnapshot

Returns a new instance of RSyncSnapshot.



113
114
115
# File 'lib/synco/methods/rsync.rb', line 113

def initialize(*command, arguments: [], archive: true, stats: true, **options)
	super
end

Instance Method Details

#call(scope) ⇒ Object



137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
# File 'lib/synco/methods/rsync.rb', line 137

def call(scope)
	master_server = scope.master_server
	target_server = scope.target_server
	
	directory = scope.directory
	incremental_path = compute_incremental_path(directory)
	link_arguments = compute_link_arguments(directory, incremental_path)
	
	# Create the destination backup directory
	target_server.run('mkdir', '-p', target_server.full_path(incremental_path))
	
	master_server.run(
		*@command,
		*@arguments,
		*directory.arguments,
		*connect_arguments(master_server, target_server),
		*link_arguments,
		master_server.connection_string(directory, on: master_server),
		target_server.connection_string(incremental_path, on: master_server)
	)
rescue CommandFailure => failure
	raise unless failure.status.to_i == 24
end

#compute_incremental_path(directory) ⇒ Object



125
126
127
# File 'lib/synco/methods/rsync.rb', line 125

def compute_incremental_path(directory)
	File.join(snapshot_name, directory.path)
end


129
130
131
132
133
134
135
# File 'lib/synco/methods/rsync.rb', line 129

def compute_link_arguments(directory, incremental_path)
	depth = Directory.depth(incremental_path)
	
	latest_path = File.join("../" * depth, latest_name, directory.path)
	
	return ['--link-dest', latest_path]
end

#latest_nameObject



121
122
123
# File 'lib/synco/methods/rsync.rb', line 121

def latest_name
	@options[:latest_name] || LATEST_NAME
end

#snapshot_nameObject



117
118
119
# File 'lib/synco/methods/rsync.rb', line 117

def snapshot_name
	@options[:snapshot_name] || SNAPSHOT_NAME
end