ssync 0.1.0 → 0.2.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/README.md CHANGED
@@ -28,6 +28,16 @@ To sync, run `ssync sync` and away it goes.
28
28
  In the case of a corrupted/incomplete synchronisation, run `ssync sync -f`
29
29
  or `ssync sync --force` to force a checksum comparison.
30
30
 
31
+ ## Sync to Multiple Buckets
32
+
33
+ If you would like to sync to more than one S3 buckets, you may do so by:
34
+
35
+ ssync setup s3-bucket-name-1
36
+ ssync sync s3-bucket-name-1
37
+
38
+ ssync setup s3-bucket-name-2
39
+ ssync sync s3-bucket-name-2
40
+
31
41
  ## Why?
32
42
 
33
43
  This library was written because we needed to be able to back up loads of
@@ -19,6 +19,11 @@ module Ssync
19
19
  def initialize(action = :sync, *args)
20
20
  @@action = action.to_sym
21
21
  @@args = *args
22
+
23
+ if @@args[0] && @@args[0][0, 1] != "-"
24
+ Setup.default_config[:last_used_bucket] = @@args[0]
25
+ write_default_config!(Setup.default_config)
26
+ end
22
27
  end
23
28
 
24
29
  def run!
@@ -29,9 +34,7 @@ module Ssync
29
34
  private
30
35
 
31
36
  def pre_run_check!
32
- if action_eq?(:setup) && config_exists?
33
- e! "Cannot run the setup, there is already an Ssync configuration in '#{config_path}'."
34
- elsif action_eq?(:sync) && !config_exists?
37
+ if action_eq?(:sync) && !config_exists?(default_config_path) && !config_exists?
35
38
  e! "Cannot run the sync, there is no Ssync configuration, try 'ssync setup' to create one first."
36
39
  end
37
40
  end
@@ -39,7 +42,7 @@ module Ssync
39
42
  def perform_action!
40
43
  case @@action
41
44
  when :setup
42
- aquire_lock! { Ssync::Setup.run! }
45
+ Ssync::Setup.run!
43
46
  when :sync
44
47
  aquire_lock! { Ssync::Sync.run! }
45
48
  when :help
@@ -30,16 +30,24 @@ module Ssync
30
30
  Ssync::Command.action == action.to_sym
31
31
  end
32
32
 
33
- def config_exists?
34
- File.exist?(config_path)
33
+ def config_exists?(path = config_path)
34
+ File.exist?(path)
35
+ end
36
+
37
+ def ssync_filename
38
+ ".ssync-#{read_default_config[:last_used_bucket]}"
39
+ end
40
+
41
+ def default_config_path
42
+ "#{ENV['HOME']}/.ssync.defaults.yml"
35
43
  end
36
44
 
37
45
  def config_path
38
- ENV['HOME'] + "/.ssync.yml"
46
+ "#{ENV['HOME']}/#{ssync_filename}.yml"
39
47
  end
40
48
 
41
49
  def lock_path
42
- ENV['HOME'] + "/.ssync.lock"
50
+ "#{ENV['HOME']}/#{ssync_filename}.lock"
43
51
  end
44
52
 
45
53
  def aquire_lock!
@@ -62,10 +70,22 @@ module Ssync
62
70
  end
63
71
  end
64
72
 
73
+ def read_default_config
74
+ begin
75
+ open(default_config_path, "r") { |f| YAML::load(f) }
76
+ rescue
77
+ {}
78
+ end
79
+ end
80
+
65
81
  def write_config!(config)
66
82
  open(config_path, "w") { |f| YAML::dump(config, f) }
67
83
  end
68
84
 
85
+ def write_default_config!(config)
86
+ open(default_config_path, "w") { |f| YAML::dump(config, f) }
87
+ end
88
+
69
89
  def options_set?(*options)
70
90
  false
71
91
  [options].flatten.each do |option|
@@ -3,8 +3,16 @@ module Ssync
3
3
  class << self
4
4
  include Helpers
5
5
 
6
+ def default_config
7
+ @default_config ||= read_default_config
8
+ end
9
+
10
+ def default_config=(config)
11
+ @default_config = config
12
+ end
13
+
6
14
  def config
7
- @config
15
+ @config ||= read_config
8
16
  end
9
17
 
10
18
  def config=(config)
@@ -12,9 +20,7 @@ module Ssync
12
20
  end
13
21
 
14
22
  def run!
15
- display "Welcome to Ssync! You will now be asked a few questions, the results will be stored at '#{config_path}'."
16
-
17
- config = read_config
23
+ display "Welcome to Ssync! You will now be asked for a few questions."
18
24
 
19
25
  config[:aws_access_key] = ask config[:aws_access_key], "What is the AWS Access Key ID?"
20
26
  config[:aws_secret_key] = ask config[:aws_secret_key], "What is the AWS Secret Access Key?"
@@ -24,7 +30,7 @@ module Ssync
24
30
  if aws_credentials_is_valid?(config)
25
31
  display "Successfully connected to AWS."
26
32
 
27
- config[:aws_dest_bucket] = ask config[:aws_dest_bucket], "Which bucket would you like to put your backups in? Ssync will create the bucket for you if it doesn't exist."
33
+ default_config[:last_used_bucket] = config[:aws_dest_bucket] = ask(config[:aws_dest_bucket], "Which bucket would you like to put your backups in? Ssync will create the bucket for you if it doesn't exist.")
28
34
 
29
35
  if bucket_exists?(config)
30
36
  if bucket_empty?(config)
@@ -53,9 +59,11 @@ module Ssync
53
59
 
54
60
  config[:find_options] = ask config[:find_options], "Do you have any options for 'find'? (e.g. \! -path *.git*)."
55
61
 
56
- display "Writing the supplied details to '#{config_path}' for future reference ..."
62
+ display "Saving configuration data ..."
63
+ write_default_config!(default_config)
57
64
  write_config!(config)
58
- display "All done! You may now use 'ssync sync' to syncronise your files to the S3 bucket."
65
+ display "All done! The configuration file is stored in '#{config_path}'."
66
+ display "You may now use 'ssync sync' to syncronise your files to the S3 bucket."
59
67
  end
60
68
 
61
69
  def aws_credentials_is_valid?(config = read_config)
@@ -45,11 +45,11 @@ module Ssync
45
45
  end
46
46
 
47
47
  def last_sync_started
48
- ENV['HOME'] + "/.ssync.last-sync.started"
48
+ ENV['HOME'] + "/#{ssync_filename}.last-sync.started"
49
49
  end
50
50
 
51
51
  def last_sync_completed
52
- ENV['HOME'] + "/.ssync.last-sync.completed"
52
+ ENV['HOME'] + "/#{ssync_filename}.last-sync.completed"
53
53
  end
54
54
 
55
55
  def last_sync_recorded?
@@ -99,19 +99,17 @@ module Ssync
99
99
  end
100
100
 
101
101
  def local_manifest_path
102
- "/tmp/ssync.manifest.local"
102
+ "/tmp/#{ssync_filename}.manifest.local"
103
103
  end
104
104
 
105
105
  def parse_manifest(location)
106
106
  []
107
- if File.exist?(location)
108
- open(location, "r") do |file|
109
- file.collect do |line|
110
- path, checksum = *line.chomp.match(/^MD5\((.*)\)= (.*)$/).captures
111
- { :path => path, :checksum => checksum }
112
- end
107
+ open(location, "r") do |file|
108
+ file.collect do |line|
109
+ path, checksum = *line.chomp.match(/^MD5\((.*)\)= (.*)$/).captures
110
+ { :path => path, :checksum => checksum }
113
111
  end
114
- end
112
+ end if File.exist?(location)
115
113
  end
116
114
 
117
115
  def push_file(file)
@@ -1,3 +1,3 @@
1
1
  module Ssync
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 1
7
+ - 2
8
8
  - 0
9
- version: 0.1.0
9
+ version: 0.2.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Fred Wu