ssync 0.3.3 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile.lock +3 -0
- data/README.md +10 -4
- data/bin/ssync +1 -1
- data/lib/ssync/command.rb +33 -45
- data/lib/ssync/helpers.rb +5 -19
- data/lib/ssync/sync.rb +2 -2
- data/lib/ssync/version.rb +1 -1
- data/ssync.gemspec +1 -0
- metadata +18 -3
data/Gemfile.lock
CHANGED
@@ -3,6 +3,7 @@ PATH
|
|
3
3
|
specs:
|
4
4
|
ssync (0.3.3)
|
5
5
|
aws-s3 (~> 0.6.2)
|
6
|
+
thor (~> 0.14.4)
|
6
7
|
|
7
8
|
GEM
|
8
9
|
remote: http://rubygems.org/
|
@@ -13,6 +14,7 @@ GEM
|
|
13
14
|
xml-simple
|
14
15
|
builder (2.1.2)
|
15
16
|
mime-types (1.16)
|
17
|
+
thor (0.14.4)
|
16
18
|
xml-simple (1.0.12)
|
17
19
|
|
18
20
|
PLATFORMS
|
@@ -21,3 +23,4 @@ PLATFORMS
|
|
21
23
|
DEPENDENCIES
|
22
24
|
aws-s3 (~> 0.6.2)
|
23
25
|
ssync!
|
26
|
+
thor (~> 0.14.4)
|
data/README.md
CHANGED
@@ -31,14 +31,20 @@ or `ssync sync --force` to force a checksum comparison.
|
|
31
31
|
|
32
32
|
If you would like to sync to more than one S3 buckets, you may do so by:
|
33
33
|
|
34
|
-
ssync setup my-s3-bucket
|
35
|
-
ssync sync my-s3-bucket
|
34
|
+
ssync setup -b my-s3-bucket
|
35
|
+
ssync sync -b my-s3-bucket
|
36
36
|
|
37
|
-
ssync setup another-s3-bucket
|
38
|
-
ssync sync another-s3-bucket
|
37
|
+
ssync setup -b another-s3-bucket
|
38
|
+
ssync sync -b another-s3-bucket
|
39
39
|
|
40
40
|
Running `ssync setup` and `ssync sync` without any bucket names defaults to using the last bucket you used.
|
41
41
|
|
42
|
+
## Need Help?
|
43
|
+
|
44
|
+
Use the command below to get to the help screen.
|
45
|
+
|
46
|
+
ssync help
|
47
|
+
|
42
48
|
## Why?
|
43
49
|
|
44
50
|
This library was written because we needed to be able to back up loads of
|
data/bin/ssync
CHANGED
data/lib/ssync/command.rb
CHANGED
@@ -1,64 +1,52 @@
|
|
1
1
|
require "ssync"
|
2
|
+
require "thor"
|
2
3
|
|
3
4
|
module Ssync
|
4
|
-
class Command
|
5
|
+
class Command < ::Thor
|
5
6
|
include Helpers
|
6
7
|
|
7
|
-
|
8
|
-
@@action
|
9
|
-
end
|
8
|
+
default_task :sync
|
10
9
|
|
11
|
-
|
12
|
-
|
13
|
-
|
10
|
+
desc "setup", "Sets up a configuration file for syncing"
|
11
|
+
method_option "bucket", :aliases => "-b", :type => :string,
|
12
|
+
:banner => "The S3 bucket (configurated with Ssync) to sync to"
|
13
|
+
def setup
|
14
|
+
%w{find xargs openssl}.each do |util|
|
15
|
+
e! "You do not have '#{util}' installed on your operating system." if `which #{util}`.empty?
|
16
|
+
end
|
14
17
|
|
15
|
-
|
16
|
-
|
18
|
+
if options.bucket?
|
19
|
+
e! "The S3 bucket config for '#{options.bucket}' does not exist." unless config_exists?(config_path(options.bucket))
|
20
|
+
write_default_config(options.bucket)
|
21
|
+
end
|
22
|
+
aquire_lock! { Ssync::Setup.run! }
|
17
23
|
end
|
18
24
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
25
|
+
desc "sync", "Syncs to Amazon S3"
|
26
|
+
method_option "bucket", :aliases => "-b", :type => :string,
|
27
|
+
:banner => "The S3 bucket (configurated with Ssync) to sync to"
|
28
|
+
method_option "force", :aliases => "-f", :type => :boolean,
|
29
|
+
:banner => "Forces a recalculate of the checksum, useful when the previous sync was incomplete or corrupted"
|
30
|
+
def sync
|
31
|
+
unless config_exists?(default_config_path) || config_exists?
|
32
|
+
e! "Cannot run the sync, there is no Ssync configuration, try 'ssync setup' to create one first."
|
26
33
|
end
|
27
|
-
end
|
28
34
|
|
29
|
-
|
30
|
-
|
31
|
-
pre_run_check!
|
32
|
-
perform_action!
|
35
|
+
write_default_config(options.bucket) if options.bucket?
|
36
|
+
aquire_lock! { Ssync::Sync.run!(options) }
|
33
37
|
end
|
34
38
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
%w{find xargs openssl}.each do |util|
|
39
|
-
e! "You do not have '#{util}' installed on your operating system." if `which #{util}`.empty?
|
40
|
-
end
|
39
|
+
desc "version", "Prints Ssync's version information"
|
40
|
+
def version
|
41
|
+
puts "Ssync #{Ssync::VERSION}"
|
41
42
|
end
|
43
|
+
map %w{-v --version} => :version
|
42
44
|
|
43
|
-
|
44
|
-
if action_eq?(:sync) && !config_exists?(default_config_path) && !config_exists?
|
45
|
-
e! "Cannot run the sync, there is no Ssync configuration, try 'ssync setup' to create one first."
|
46
|
-
end
|
47
|
-
end
|
45
|
+
private
|
48
46
|
|
49
|
-
def
|
50
|
-
|
51
|
-
|
52
|
-
Ssync::Setup.run!
|
53
|
-
when :sync
|
54
|
-
aquire_lock! { Ssync::Sync.run! }
|
55
|
-
when :help, :"--help", :"-h"
|
56
|
-
display_help!
|
57
|
-
when :version, :"--version", :"-v"
|
58
|
-
puts Ssync::VERSION
|
59
|
-
else
|
60
|
-
e! "Cannot perform action '#{@action}', try 'ssync help' for usage."
|
61
|
-
end
|
47
|
+
def write_default_config(bucket)
|
48
|
+
Setup.default_config[:last_used_bucket] = bucket
|
49
|
+
write_default_config!(Setup.default_config)
|
62
50
|
end
|
63
51
|
end
|
64
52
|
end
|
data/lib/ssync/helpers.rb
CHANGED
@@ -1,9 +1,5 @@
|
|
1
1
|
module Ssync
|
2
2
|
module Helpers
|
3
|
-
def display_help!
|
4
|
-
display("Not implemented yet.")
|
5
|
-
end
|
6
|
-
|
7
3
|
def display(message)
|
8
4
|
puts("[#{Time.now}] #{message}")
|
9
5
|
end
|
@@ -26,10 +22,6 @@ module Ssync
|
|
26
22
|
a.empty? ? config_item : a
|
27
23
|
end
|
28
24
|
|
29
|
-
def action_eq?(action)
|
30
|
-
Ssync::Command.action == action.to_sym
|
31
|
-
end
|
32
|
-
|
33
25
|
def config_exists?(path = config_path)
|
34
26
|
File.exist?(path)
|
35
27
|
end
|
@@ -46,8 +38,8 @@ module Ssync
|
|
46
38
|
"#{ssync_homedir}/defaults.yml"
|
47
39
|
end
|
48
40
|
|
49
|
-
def config_path
|
50
|
-
"#{ssync_homedir}/#{ssync_filename}.yml"
|
41
|
+
def config_path(filename = nil)
|
42
|
+
"#{ssync_homedir}/#{filename || ssync_filename}.yml"
|
51
43
|
end
|
52
44
|
|
53
45
|
def lock_path
|
@@ -55,14 +47,15 @@ module Ssync
|
|
55
47
|
end
|
56
48
|
|
57
49
|
def aquire_lock!
|
50
|
+
return unless lock_path
|
58
51
|
# better way is to write out the pid ($$) and read it back in, to make sure it's the same
|
59
52
|
e! "Found a lock at #{lock_path}, is another instance of Ssync running?" if File.exist?(lock_path)
|
60
53
|
|
61
54
|
begin
|
62
|
-
system "touch #{lock_path}"
|
55
|
+
system "touch #{lock_path}" unless ssync_filename.empty?
|
63
56
|
yield
|
64
57
|
ensure
|
65
|
-
system "rm #{lock_path}"
|
58
|
+
system "rm -f #{lock_path}"
|
66
59
|
end
|
67
60
|
end
|
68
61
|
|
@@ -94,12 +87,5 @@ module Ssync
|
|
94
87
|
def create_homedir!
|
95
88
|
`mkdir #{ssync_homedir}` unless File.exists?(ssync_homedir)
|
96
89
|
end
|
97
|
-
|
98
|
-
def options_set?(*options)
|
99
|
-
false
|
100
|
-
[options].flatten.each do |option|
|
101
|
-
return true if Command.args.include?("#{option.to_s}")
|
102
|
-
end
|
103
|
-
end
|
104
90
|
end
|
105
91
|
end
|
data/lib/ssync/sync.rb
CHANGED
@@ -3,14 +3,14 @@ module Ssync
|
|
3
3
|
class << self
|
4
4
|
include Helpers
|
5
5
|
|
6
|
-
def run!
|
6
|
+
def run!(options)
|
7
7
|
display "Initialising Ssync, performing pre-sync checks ..."
|
8
8
|
|
9
9
|
e! "Couldn't connect to AWS with the credentials specified in '#{config_path}'." unless Setup.aws_credentials_is_valid?
|
10
10
|
e! "Couldn't find the S3 bucket specified in '#{config_path}'." unless Setup.bucket_exists?
|
11
11
|
e! "The local path specified in '#{config_path}' does not exist." unless Setup.local_file_path_exists?
|
12
12
|
|
13
|
-
if
|
13
|
+
if options.force?
|
14
14
|
display "Clearing previous sync state ..."
|
15
15
|
clear_sync_state
|
16
16
|
end
|
data/lib/ssync/version.rb
CHANGED
data/ssync.gemspec
CHANGED
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 0.
|
7
|
+
- 4
|
8
|
+
- 0
|
9
|
+
version: 0.4.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Fred Wu
|
@@ -33,6 +33,21 @@ dependencies:
|
|
33
33
|
version: 0.6.2
|
34
34
|
type: :runtime
|
35
35
|
version_requirements: *id001
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: thor
|
38
|
+
prerelease: false
|
39
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ~>
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
segments:
|
45
|
+
- 0
|
46
|
+
- 14
|
47
|
+
- 4
|
48
|
+
version: 0.14.4
|
49
|
+
type: :runtime
|
50
|
+
version_requirements: *id002
|
36
51
|
description: Ssync, an optimised S3 sync tool using the power of *nix!
|
37
52
|
email:
|
38
53
|
- fred@envato.com
|