s3sync 2.0.0 → 2.0.1

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 8737f906e6e83042d2edb667c33705fe96f24bbd
4
+ data.tar.gz: c0d333e0b488014eb6e2273933019ba0ec58c9fb
5
+ SHA512:
6
+ metadata.gz: d94b3ec845ed9e48966045120a8c2292e5df64852c71d50eb3f0dec8d32e46d31082d8fd2380c7225aa856b98673cd20a02e119f2396aeaed5e6b5eb35490196
7
+ data.tar.gz: 3d22969a836de20ad4326ad5a134b3a221fa26a573ea4e0424186f6effb69ad63c7800f40fb49fecfc6ab616d306de489d54fd9c88b0edaf0c91042e6c413f12
@@ -63,6 +63,32 @@ module S3Sync
63
63
  u.join ''
64
64
  end
65
65
 
66
+ def execute(args)
67
+ # Connecting to amazon
68
+ s3 = AWS::S3.new
69
+
70
+ # From the command line
71
+ key, file = args
72
+
73
+ # Parsing the bucket name
74
+ bucket = nil
75
+ bucket, key = key.split(':') if key
76
+
77
+ # Running our custom method inside of the command class, taking care
78
+ # of the common errors here, saving duplications in each command;
79
+ begin
80
+ run s3, bucket, key, file, args
81
+ rescue AWS::S3::Errors::AccessDenied
82
+ raise FailureFeedback.new("Access Denied")
83
+ rescue AWS::S3::Errors::NoSuchBucket
84
+ raise FailureFeedback.new("There's no bucket named `#{bucket}'")
85
+ rescue AWS::S3::Errors::NoSuchKey
86
+ raise FailureFeedback.new("There's no key named `#{key}' in the bucket `#{bucket}'")
87
+ rescue AWS::S3::Errors::Base => exc
88
+ raise FailureFeedback.new("Error: `#{exc.message}'")
89
+ end
90
+ end
91
+
66
92
  protected
67
93
 
68
94
  def parse_acl(opt)
@@ -432,40 +458,7 @@ END
432
458
  cmd.add_command CmdParse::HelpCommand.new
433
459
  cmd.add_command CmdParse::VersionCommand.new
434
460
 
435
- # Defining the `execute` method as a closure, so we can forward the
436
- # arguments needed to run the instance of the chosen command.
437
- CmdParse::Command.class_eval do
438
- define_method :execute, lambda { |args|
439
-
440
- # Connecting to amazon
441
- s3 = AWS::S3.new(
442
- :access_key_id => conf[:AWS_ACCESS_KEY_ID],
443
- :secret_access_key => conf[:AWS_SECRET_ACCESS_KEY],
444
- )
445
-
446
- # From the command line
447
- key, file = args
448
-
449
- # Parsing the bucket name
450
- bucket = nil
451
- bucket, key = key.split(':') if key
452
-
453
- # Running our custom method inside of the command class, taking care
454
- # of the common errors here, saving duplications in each command;
455
- begin
456
- run s3, bucket, key, file, args
457
- rescue AWS::S3::Errors::AccessDenied
458
- raise FailureFeedback.new("Access Denied")
459
- rescue AWS::S3::Errors::NoSuchBucket
460
- raise FailureFeedback.new("There's no bucket named `#{bucket}'")
461
- rescue AWS::S3::Errors::NoSuchKey
462
- raise FailureFeedback.new("There's no key named `#{key}' in the bucket `#{bucket}'")
463
- rescue AWS::S3::Errors::Base => exc
464
- raise FailureFeedback.new("Error: `#{exc.message}'")
465
- end
466
- }
467
- end
468
-
461
+ # Boom! Execute it
469
462
  cmd.parse
470
463
  end
471
464
 
@@ -63,7 +63,7 @@ module S3Sync
63
63
  if File.exists? path
64
64
  config = YAML.load_file path
65
65
  config.each_pair do |key, value|
66
- self[key.upcase.to_sym] = value
66
+ self[key.upcase.to_s] = value
67
67
  end
68
68
  return
69
69
  end
@@ -83,13 +83,12 @@ module S3Sync
83
83
  paths_checked = read_from_file
84
84
  read_from_env
85
85
 
86
+ # Update the environment with the latest values
87
+ ENV.update(self.to_hash)
88
+
86
89
  # Checking which variables we have
87
90
  not_found = []
88
91
 
89
- REQUIRED_VARS.each {|v|
90
- not_found << v if self[v].nil?
91
- }
92
-
93
92
  # Cleaning possibly empty env var from CONFIG_PATH
94
93
  paths = (paths_checked || CONFIG_PATHS).select {|e| !e.empty?}
95
94
  raise NoConfigFound.new(not_found, paths) if not_found.count > 0
@@ -111,6 +111,16 @@ module S3Sync
111
111
 
112
112
  def list_files
113
113
  nodes = {}
114
+
115
+ # Create the directory if it does not exist
116
+ if not File.exists?(@source)
117
+ FileUtils.mkdir_p(@source)
118
+ return nodes
119
+ end
120
+
121
+ # The path declared in `@source` exists, yay! Now we need read
122
+ # the whole directory and add all the readable files to the
123
+ # `nodes` hash.
114
124
  Find.find(@source) do |file|
115
125
  begin
116
126
  st = File.stat file # Might fail
@@ -331,6 +341,7 @@ module S3Sync
331
341
  end
332
342
 
333
343
  def download_files destination, source, list
344
+ puts list
334
345
  list.each {|e|
335
346
  path = File.join destination.path, e.path
336
347
 
@@ -344,10 +355,23 @@ module S3Sync
344
355
  # Making sure this new file will have a safe shelter
345
356
  FileUtils.mkdir_p File.dirname(path)
346
357
 
347
- # Downloading and saving the files
348
- File.open(path, 'wb') do |file|
349
- obj.read do |chunk|
350
- file.write chunk
358
+ # in some cases the s3 object will have a trailing '/' indicating
359
+ # a folder (this behavior noticed when the s3 folder is
360
+ # created by Transmit)
361
+ if path[-1] == '/'
362
+ FileUtils.mkdir_p path
363
+ else
364
+ # Downloading and saving the files
365
+ File.open(path, 'wb') do |file|
366
+ begin
367
+ obj.read do |chunk|
368
+ file.write chunk
369
+ end
370
+ rescue AWS::Core::Http::NetHttpHandler::TruncatedBodyError => e
371
+ $stderr.puts "WARNING: (retryable) TruncatedBodyError occured, retrying in a second #{file.basename}"
372
+ sleep 1
373
+ retry
374
+ end
351
375
  end
352
376
  end
353
377
  end
@@ -23,5 +23,5 @@
23
23
  # THE SOFTWARE.
24
24
 
25
25
  module S3Sync
26
- VERSION = "2.0.0"
26
+ VERSION = "2.0.1"
27
27
  end
metadata CHANGED
@@ -1,142 +1,111 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: s3sync
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
5
- prerelease:
4
+ version: 2.0.1
6
5
  platform: ruby
7
6
  authors:
8
7
  - Lincoln de Sousa
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-09-25 00:00:00.000000000 Z
11
+ date: 2014-01-22 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: aws-sdk
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - ">="
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: cmdparse
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - ">="
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: '0'
46
- - !ruby/object:Gem::Dependency
47
- name: debugger
48
- requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
51
- - - ! '>='
52
- - !ruby/object:Gem::Version
53
- version: '0'
54
- type: :development
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ! '>='
38
+ - - ">="
60
39
  - !ruby/object:Gem::Version
61
40
  version: '0'
62
41
  - !ruby/object:Gem::Dependency
63
42
  name: simplecov
64
43
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
44
  requirements:
67
- - - ! '>='
45
+ - - ">="
68
46
  - !ruby/object:Gem::Version
69
47
  version: '0'
70
48
  type: :development
71
49
  prerelease: false
72
50
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
51
  requirements:
75
- - - ! '>='
52
+ - - ">="
76
53
  - !ruby/object:Gem::Version
77
54
  version: '0'
78
55
  - !ruby/object:Gem::Dependency
79
56
  name: rspec
80
57
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
58
  requirements:
83
- - - ! '>='
59
+ - - ">="
84
60
  - !ruby/object:Gem::Version
85
61
  version: '0'
86
62
  type: :development
87
63
  prerelease: false
88
64
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
65
  requirements:
91
- - - ! '>='
66
+ - - ">="
92
67
  - !ruby/object:Gem::Version
93
68
  version: '0'
94
69
  - !ruby/object:Gem::Dependency
95
70
  name: bundler
96
71
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
72
  requirements:
99
- - - ~>
73
+ - - "~>"
100
74
  - !ruby/object:Gem::Version
101
75
  version: '1.3'
102
76
  type: :development
103
77
  prerelease: false
104
78
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
79
  requirements:
107
- - - ~>
80
+ - - "~>"
108
81
  - !ruby/object:Gem::Version
109
82
  version: '1.3'
110
83
  - !ruby/object:Gem::Dependency
111
84
  name: rake
112
85
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
86
  requirements:
115
- - - ! '>='
87
+ - - ">="
116
88
  - !ruby/object:Gem::Version
117
89
  version: '0'
118
90
  type: :development
119
91
  prerelease: false
120
92
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
93
  requirements:
123
- - - ! '>='
94
+ - - ">="
124
95
  - !ruby/object:Gem::Version
125
96
  version: '0'
126
97
  - !ruby/object:Gem::Dependency
127
98
  name: bump
128
99
  requirement: !ruby/object:Gem::Requirement
129
- none: false
130
100
  requirements:
131
- - - ! '>='
101
+ - - ">="
132
102
  - !ruby/object:Gem::Version
133
103
  version: '0'
134
104
  type: :development
135
105
  prerelease: false
136
106
  version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
107
  requirements:
139
- - - ! '>='
108
+ - - ">="
140
109
  - !ruby/object:Gem::Version
141
110
  version: '0'
142
111
  description: Tool belt for managing your S3 buckets
@@ -158,33 +127,26 @@ files:
158
127
  homepage: https://github.com/clarete/s3sync
159
128
  licenses:
160
129
  - MIT
130
+ metadata: {}
161
131
  post_install_message:
162
132
  rdoc_options: []
163
133
  require_paths:
164
134
  - lib
165
135
  required_ruby_version: !ruby/object:Gem::Requirement
166
- none: false
167
136
  requirements:
168
- - - ! '>='
137
+ - - ">="
169
138
  - !ruby/object:Gem::Version
170
139
  version: '0'
171
- segments:
172
- - 0
173
- hash: -1067117693450592295
174
140
  required_rubygems_version: !ruby/object:Gem::Requirement
175
- none: false
176
141
  requirements:
177
- - - ! '>='
142
+ - - ">="
178
143
  - !ruby/object:Gem::Version
179
144
  version: '0'
180
- segments:
181
- - 0
182
- hash: -1067117693450592295
183
145
  requirements: []
184
146
  rubyforge_project:
185
- rubygems_version: 1.8.24
147
+ rubygems_version: 2.2.0
186
148
  signing_key:
187
- specification_version: 3
149
+ specification_version: 4
188
150
  summary: s3sync is a library that aggregates a good range of features for managing
189
151
  your Amazon S3 buckets. It also provides basic interactive client
190
152
  test_files: []