s3ranger 0.2.1 → 0.3.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 +1 -1
- data/LICENSE.txt +1 -1
- data/bin/s3ranger +43 -9
- data/{README.txt → doc/old/README.txt} +0 -0
- data/{README_s3cmd.txt → doc/old/README_s3cmd.txt} +0 -0
- data/lib/s3ranger/cli.rb +139 -25
- data/lib/s3ranger/config.rb +61 -6
- data/lib/s3ranger/exceptions.rb +25 -8
- data/lib/s3ranger/sync.rb +27 -1
- data/lib/s3ranger/util.rb +24 -9
- data/lib/s3ranger/version.rb +25 -1
- data/s3ranger.yml.example +2 -0
- metadata +6 -6
- data/s3config.yml.example +0 -3
data/Gemfile.lock
CHANGED
data/LICENSE.txt
CHANGED
data/bin/s3ranger
CHANGED
@@ -1,4 +1,28 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# s3ranger - Tool belt for managing your S3 buckets
|
4
|
+
#
|
5
|
+
# The MIT License (MIT)
|
6
|
+
#
|
7
|
+
# Copyright (c) 2013 Lincoln de Sousa <lincoln@clarete.li>
|
8
|
+
#
|
9
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
10
|
+
# of this software and associated documentation files (the "Software"), to deal
|
11
|
+
# in the Software without restriction, including without limitation the rights
|
12
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
13
|
+
# copies of the Software, and to permit persons to whom the Software is
|
14
|
+
# furnished to do so, subject to the following conditions:
|
15
|
+
#
|
16
|
+
# The above copyright notice and this permission notice shall be included in
|
17
|
+
# all copies or substantial portions of the Software.
|
18
|
+
#
|
19
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
20
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
21
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
22
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
23
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
24
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
25
|
+
# THE SOFTWARE.
|
2
26
|
|
3
27
|
$:.unshift(File.dirname(__FILE__) + '/../lib') unless $:.include?(File.dirname(__FILE__) + '/../lib')
|
4
28
|
|
@@ -13,15 +37,26 @@ begin
|
|
13
37
|
conf.read
|
14
38
|
rescue S3Ranger::NoConfigFound => exc
|
15
39
|
# We can't proceed without having those two vars set
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
40
|
+
$stderr.puts "You didn't set up the following environment variables:"
|
41
|
+
$stderr.puts
|
42
|
+
exc.missing_vars.each {|var| $stderr.puts " * #{var}"}
|
43
|
+
$stderr.puts
|
20
44
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
45
|
+
$stderr.puts "I tried to load a config file from the following paths:"
|
46
|
+
$stderr.puts
|
47
|
+
exc.paths_checked.each {|path| $stderr.puts " * #{path}"}
|
48
|
+
$stderr.puts
|
49
|
+
|
50
|
+
$stderr.puts "You could try to set the `S3RANGER_PATH' environment variable"
|
51
|
+
$stderr.puts "pointing to a file to be loaded as your config file or just"
|
52
|
+
$stderr.puts "export those variables to your environment like this:"
|
53
|
+
$stderr.puts
|
54
|
+
exc.missing_vars.each {|var|
|
55
|
+
$stderr.puts " $ export #{var}=<value-provided-by-amazon>"
|
56
|
+
}
|
57
|
+
$stderr.puts
|
58
|
+
$stderr.puts "Learn how to do that here: https://github.com/clarete/s3ranger"
|
59
|
+
exit
|
25
60
|
end
|
26
61
|
|
27
62
|
# Step aside, the star of this show is here. Let's try to create the
|
@@ -33,7 +68,6 @@ rescue S3Ranger::FailureFeedback => exc
|
|
33
68
|
$stderr.puts exc.message
|
34
69
|
exit 1
|
35
70
|
rescue S3Ranger::WrongUsage => exc
|
36
|
-
name = $0.split('/').last
|
37
71
|
$stderr.puts "Error:\n #{exc.msg}\n" if exc.msg
|
38
72
|
exit exc.error_code
|
39
73
|
end
|
File without changes
|
File without changes
|
data/lib/s3ranger/cli.rb
CHANGED
@@ -1,3 +1,27 @@
|
|
1
|
+
# s3ranger - Tool belt for managing your S3 buckets
|
2
|
+
#
|
3
|
+
# The MIT License (MIT)
|
4
|
+
#
|
5
|
+
# Copyright (c) 2013 Lincoln de Sousa <lincoln@clarete.li>
|
6
|
+
#
|
7
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
8
|
+
# of this software and associated documentation files (the "Software"), to deal
|
9
|
+
# in the Software without restriction, including without limitation the rights
|
10
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
11
|
+
# copies of the Software, and to permit persons to whom the Software is
|
12
|
+
# furnished to do so, subject to the following conditions:
|
13
|
+
#
|
14
|
+
# The above copyright notice and this permission notice shall be included in
|
15
|
+
# all copies or substantial portions of the Software.
|
16
|
+
#
|
17
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
18
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
19
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
20
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
21
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
22
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
23
|
+
# THE SOFTWARE.
|
24
|
+
|
1
25
|
require 's3ranger/version'
|
2
26
|
require 's3ranger/exceptions'
|
3
27
|
require 's3ranger/sync'
|
@@ -12,7 +36,35 @@ module S3Ranger
|
|
12
36
|
|
13
37
|
AVAILABLE_METHODS = ['read', 'get', 'put', 'write', 'delete']
|
14
38
|
|
15
|
-
class
|
39
|
+
class BaseCmd < CmdParse::Command
|
40
|
+
|
41
|
+
@has_prefix = false
|
42
|
+
|
43
|
+
def has_options?
|
44
|
+
not options.instance_variables.empty?
|
45
|
+
end
|
46
|
+
|
47
|
+
def has_prefix?
|
48
|
+
@has_prefix
|
49
|
+
end
|
50
|
+
|
51
|
+
def usage
|
52
|
+
u = []
|
53
|
+
u << "Usage: #{File.basename commandparser.program_name} #{name} "
|
54
|
+
u << "[options] " if has_options?
|
55
|
+
u << "bucket" if has_args?
|
56
|
+
|
57
|
+
if has_prefix? == 'required'
|
58
|
+
u << ':prefix'
|
59
|
+
elsif has_prefix?
|
60
|
+
u << "[:prefix]"
|
61
|
+
end
|
62
|
+
|
63
|
+
u.join ''
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
class ListBuckets < BaseCmd
|
16
68
|
def initialize
|
17
69
|
super 'listbuckets', false, false, false
|
18
70
|
|
@@ -26,7 +78,7 @@ module S3Ranger
|
|
26
78
|
end
|
27
79
|
end
|
28
80
|
|
29
|
-
class CreateBucket <
|
81
|
+
class CreateBucket < BaseCmd
|
30
82
|
attr_accessor :acl
|
31
83
|
|
32
84
|
def initialize
|
@@ -60,7 +112,7 @@ module S3Ranger
|
|
60
112
|
end
|
61
113
|
end
|
62
114
|
|
63
|
-
class DeleteBucket <
|
115
|
+
class DeleteBucket < BaseCmd
|
64
116
|
attr_accessor :force
|
65
117
|
|
66
118
|
def initialize
|
@@ -92,7 +144,7 @@ module S3Ranger
|
|
92
144
|
end
|
93
145
|
end
|
94
146
|
|
95
|
-
class List <
|
147
|
+
class List < BaseCmd
|
96
148
|
attr_accessor :max_entries
|
97
149
|
|
98
150
|
def initialize
|
@@ -102,10 +154,18 @@ module S3Ranger
|
|
102
154
|
|
103
155
|
@max_entries = 0
|
104
156
|
|
157
|
+
@delimiter = "\t"
|
158
|
+
|
159
|
+
@has_prefix = true
|
160
|
+
|
105
161
|
self.options = CmdParse::OptionParserWrapper.new do |opt|
|
106
162
|
opt.on("-m", "--max-entries=NUM", "Limit the number of entries to output") {|m|
|
107
163
|
@max_entries = m
|
108
164
|
}
|
165
|
+
|
166
|
+
opt.on("-d", "--delimiter=D", "Charactere used to separate columns") {|d|
|
167
|
+
@delimiter = d
|
168
|
+
}
|
109
169
|
end
|
110
170
|
end
|
111
171
|
|
@@ -119,16 +179,24 @@ module S3Ranger
|
|
119
179
|
end
|
120
180
|
|
121
181
|
collection.each {|object|
|
122
|
-
|
182
|
+
o = []
|
183
|
+
o << object.key
|
184
|
+
o << @delimiter
|
185
|
+
o << object.content_length
|
186
|
+
o << @delimiter
|
187
|
+
o << object.last_modified
|
188
|
+
puts o.join
|
123
189
|
}
|
124
190
|
end
|
125
191
|
end
|
126
192
|
|
127
|
-
class Delete <
|
193
|
+
class Delete < BaseCmd
|
128
194
|
def initialize
|
129
|
-
super 'delete', false, false
|
195
|
+
super 'delete', false, false
|
130
196
|
|
131
197
|
@short_desc = "Delete a key from a bucket"
|
198
|
+
|
199
|
+
@has_prefix = 'required'
|
132
200
|
end
|
133
201
|
|
134
202
|
def run s3, bucket, key, file, args
|
@@ -138,23 +206,30 @@ module S3Ranger
|
|
138
206
|
end
|
139
207
|
end
|
140
208
|
|
141
|
-
class Url <
|
209
|
+
class Url < BaseCmd
|
142
210
|
attr_accessor :method
|
143
211
|
attr_accessor :secure
|
144
212
|
|
145
213
|
def initialize
|
146
214
|
super 'url', false, false
|
147
215
|
|
148
|
-
@short_desc = "Generates
|
149
|
-
@
|
216
|
+
@short_desc = "Generates public urls or authenticated endpoints for the object"
|
217
|
+
@description = "Notice that --method and --public are mutually exclusive"
|
218
|
+
@method = false
|
219
|
+
@public = false
|
150
220
|
@secure = true
|
151
221
|
@expires_in = false
|
222
|
+
@has_prefix = 'required'
|
152
223
|
|
153
224
|
self.options = CmdParse::OptionParserWrapper.new do |opt|
|
154
|
-
opt.on("-m", "--method", "Options: #{AVAILABLE_METHODS.join ', '}") {|m|
|
225
|
+
opt.on("-m", "--method=METHOD", "Options: #{AVAILABLE_METHODS.join ', '}") {|m|
|
155
226
|
@method = m
|
156
227
|
}
|
157
228
|
|
229
|
+
opt.on("-p", "--public", "Generates a public (not authenticated) URL for the object") {|p|
|
230
|
+
@public = p
|
231
|
+
}
|
232
|
+
|
158
233
|
opt.on("--no-ssl", "Generate an HTTP link, no HTTPS") {
|
159
234
|
@secure = false
|
160
235
|
}
|
@@ -180,20 +255,29 @@ module S3Ranger
|
|
180
255
|
def run s3, bucket, key, file, args
|
181
256
|
raise WrongUsage.new(nil, "You need to inform a bucket") if not bucket
|
182
257
|
raise WrongUsage.new(nil, "You need to inform a key") if not key
|
183
|
-
raise WrongUsage.new(nil, "
|
258
|
+
raise WrongUsage.new(nil, "Params --method and --public are mutually exclusive") if (@method and @public)
|
259
|
+
if not AVAILABLE_METHODS.include? method = @method || 'read'
|
260
|
+
raise WrongUsage.new(nil, "Unknown method #{method}")
|
261
|
+
end
|
184
262
|
|
185
263
|
opts = {}
|
186
264
|
opts.merge!({:secure => @secure})
|
187
|
-
|
188
|
-
|
265
|
+
|
266
|
+
if @public
|
267
|
+
puts (s3.buckets[bucket].objects[key].public_url opts).to_s
|
268
|
+
else
|
269
|
+
opts.merge!({:expires => @expires_in}) if @expires_in
|
270
|
+
puts (s3.buckets[bucket].objects[key].url_for method.to_sym, opts).to_s
|
271
|
+
end
|
189
272
|
end
|
190
273
|
end
|
191
274
|
|
192
|
-
class Put <
|
275
|
+
class Put < BaseCmd
|
193
276
|
def initialize
|
194
277
|
super 'put', false, false
|
195
278
|
|
196
279
|
@short_desc = 'Upload a file to a bucket under a certain prefix'
|
280
|
+
@has_prefix = true
|
197
281
|
end
|
198
282
|
|
199
283
|
def run s3, bucket, key, file, args
|
@@ -205,10 +289,11 @@ module S3Ranger
|
|
205
289
|
end
|
206
290
|
end
|
207
291
|
|
208
|
-
class Get <
|
292
|
+
class Get < BaseCmd
|
209
293
|
def initialize
|
210
294
|
super 'get', false, false
|
211
295
|
@short_desc = "Retrieve an object and save to the specified file"
|
296
|
+
@has_prefix = 'required'
|
212
297
|
end
|
213
298
|
|
214
299
|
def run s3, bucket, key, file, args
|
@@ -226,7 +311,7 @@ module S3Ranger
|
|
226
311
|
end
|
227
312
|
end
|
228
313
|
|
229
|
-
class Sync <
|
314
|
+
class Sync < BaseCmd
|
230
315
|
attr_accessor :s3
|
231
316
|
attr_accessor :exclude
|
232
317
|
attr_accessor :keep
|
@@ -244,7 +329,7 @@ module S3Ranger
|
|
244
329
|
@verbose = false
|
245
330
|
|
246
331
|
self.options = CmdParse::OptionParserWrapper.new do |opt|
|
247
|
-
opt.on("-x EXPR", "--exclude=EXPR", "") {|v|
|
332
|
+
opt.on("-x EXPR", "--exclude=EXPR", "Skip copying files that matches this pattern. (Ruby REs)") {|v|
|
248
333
|
@exclude = v
|
249
334
|
}
|
250
335
|
|
@@ -263,6 +348,33 @@ module S3Ranger
|
|
263
348
|
end
|
264
349
|
end
|
265
350
|
|
351
|
+
def usage
|
352
|
+
"Usage: #{File.basename commandparser.program_name} #{name} source destination"
|
353
|
+
end
|
354
|
+
|
355
|
+
def description
|
356
|
+
@description =<<END.strip
|
357
|
+
|
358
|
+
Where `source' and `description' might be either local or remote
|
359
|
+
addresses. A local address is simply a path in your local file
|
360
|
+
system. e.g:
|
361
|
+
|
362
|
+
/tmp/notes.txt
|
363
|
+
|
364
|
+
A remote address is a combination of the `bucket` name and
|
365
|
+
an optional `prefix`:
|
366
|
+
|
367
|
+
disc.company.com:reports/2013/08/30.html
|
368
|
+
|
369
|
+
So, a full example would be something like this
|
370
|
+
|
371
|
+
$ #{File.basename commandparser.program_name} sync Work/reports disc.company.com:reports/2013/08
|
372
|
+
|
373
|
+
The above line will update the remote folder `reports/2013/08` with the
|
374
|
+
contents of the local folder `Work/reports`.
|
375
|
+
END
|
376
|
+
end
|
377
|
+
|
266
378
|
def run s3, bucket, key, file, args
|
267
379
|
@s3 = s3
|
268
380
|
cmd = SyncCommand.new self, *args
|
@@ -272,6 +384,7 @@ module S3Ranger
|
|
272
384
|
|
273
385
|
def run conf
|
274
386
|
cmd = CmdParse::CommandParser.new true
|
387
|
+
cmd.program_name = File.basename $0
|
275
388
|
cmd.program_version = S3Ranger::VERSION
|
276
389
|
|
277
390
|
cmd.options = CmdParse::OptionParserWrapper.new do |opt|
|
@@ -279,13 +392,13 @@ module S3Ranger
|
|
279
392
|
end
|
280
393
|
|
281
394
|
cmd.main_command.short_desc = 'Tool belt for managing your S3 buckets'
|
282
|
-
cmd.main_command.description
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
<< "" \
|
287
|
-
<< " $ #{$0} sync --help" \
|
395
|
+
cmd.main_command.description =<<END.strip
|
396
|
+
S3Ranger provides a list of commands that will allow you to manage your content
|
397
|
+
stored in S3 buckets. To learn about each feature, please use the `help`
|
398
|
+
command:
|
288
399
|
|
400
|
+
$ #{File.basename $0} help sync"
|
401
|
+
END
|
289
402
|
# Commands used more often
|
290
403
|
cmd.add_command List.new
|
291
404
|
cmd.add_command Delete.new
|
@@ -299,7 +412,6 @@ module S3Ranger
|
|
299
412
|
cmd.add_command CreateBucket.new
|
300
413
|
cmd.add_command DeleteBucket.new
|
301
414
|
|
302
|
-
|
303
415
|
# Built-in commands
|
304
416
|
cmd.add_command CmdParse::HelpCommand.new
|
305
417
|
cmd.add_command CmdParse::VersionCommand.new
|
@@ -332,6 +444,8 @@ module S3Ranger
|
|
332
444
|
raise FailureFeedback.new("There's no bucket named `#{bucket}'")
|
333
445
|
rescue AWS::S3::Errors::NoSuchKey
|
334
446
|
raise FailureFeedback.new("There's no key named `#{key}' in the bucket `#{bucket}'")
|
447
|
+
rescue AWS::S3::Errors::Base => exc
|
448
|
+
raise FailureFeedback.new("Error: `#{exc.message}'")
|
335
449
|
end
|
336
450
|
}
|
337
451
|
end
|
data/lib/s3ranger/config.rb
CHANGED
@@ -1,3 +1,30 @@
|
|
1
|
+
# s3ranger - Tool belt for managing your S3 buckets
|
2
|
+
#
|
3
|
+
# The MIT License (MIT)
|
4
|
+
#
|
5
|
+
# Copyright (c) 2013 Lincoln de Sousa <lincoln@clarete.li>
|
6
|
+
#
|
7
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
8
|
+
# of this software and associated documentation files (the "Software"), to deal
|
9
|
+
# in the Software without restriction, including without limitation the rights
|
10
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
11
|
+
# copies of the Software, and to permit persons to whom the Software is
|
12
|
+
# furnished to do so, subject to the following conditions:
|
13
|
+
#
|
14
|
+
# The above copyright notice and this permission notice shall be included in
|
15
|
+
# all copies or substantial portions of the Software.
|
16
|
+
#
|
17
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
18
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
19
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
20
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
21
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
22
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
23
|
+
# THE SOFTWARE.
|
24
|
+
|
25
|
+
# Part of this software was inspired by the original s3sync, so here's their
|
26
|
+
# copyright notice:
|
27
|
+
|
1
28
|
# This software code is made available "AS IS" without warranties of any
|
2
29
|
# kind. You may copy, display, modify and redistribute the software
|
3
30
|
# code either by itself or as incorporated into your code; provided that
|
@@ -15,10 +42,15 @@ require 's3ranger/exceptions'
|
|
15
42
|
module S3Ranger
|
16
43
|
|
17
44
|
class Config < Hash
|
18
|
-
|
45
|
+
|
46
|
+
REQUIRED_VARS = [:AWS_ACCESS_KEY_ID, :AWS_SECRET_ACCESS_KEY]
|
47
|
+
|
48
|
+
CONFIG_PATHS = ["#{ENV['S3RANGER_PATH']}", "#{ENV['HOME']}/.s3ranger.yml", "/etc/s3ranger.yml"]
|
49
|
+
|
50
|
+
def read_from_file
|
19
51
|
paths_checked = []
|
20
52
|
|
21
|
-
|
53
|
+
CONFIG_PATHS.each do |path|
|
22
54
|
|
23
55
|
# Filtering some garbage
|
24
56
|
next if path.nil? or path.strip.empty?
|
@@ -28,16 +60,39 @@ module S3Ranger
|
|
28
60
|
|
29
61
|
# Time for the dirty work, let's parse the config file and feed our
|
30
62
|
# internal hash
|
31
|
-
if File.exists?
|
32
|
-
config = YAML.load_file
|
63
|
+
if File.exists? path
|
64
|
+
config = YAML.load_file path
|
33
65
|
config.each_pair do |key, value|
|
34
66
|
self[key.upcase.to_sym] = value
|
35
67
|
end
|
36
|
-
return
|
68
|
+
return
|
37
69
|
end
|
38
70
|
end
|
39
71
|
|
40
|
-
|
72
|
+
return paths_checked
|
73
|
+
end
|
74
|
+
|
75
|
+
def read_from_env
|
76
|
+
REQUIRED_VARS.each do |v|
|
77
|
+
self[v] = ENV[v.to_s] unless ENV[v.to_s].nil?
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def read
|
82
|
+
# Reading from file and then trying from env
|
83
|
+
paths_checked = read_from_file
|
84
|
+
read_from_env
|
85
|
+
|
86
|
+
# Checking which variables we have
|
87
|
+
not_found = []
|
88
|
+
|
89
|
+
REQUIRED_VARS.each {|v|
|
90
|
+
not_found << v if self[v].nil?
|
91
|
+
}
|
92
|
+
|
93
|
+
# Cleaning possibly empty env var from CONFIG_PATH
|
94
|
+
paths = (paths_checked || CONFIG_PATHS).select {|e| !e.empty?}
|
95
|
+
raise NoConfigFound.new(not_found, paths) if not_found.count > 0
|
41
96
|
end
|
42
97
|
end
|
43
98
|
end
|
data/lib/s3ranger/exceptions.rb
CHANGED
@@ -1,11 +1,26 @@
|
|
1
|
-
#
|
1
|
+
# s3ranger - Tool belt for managing your S3 buckets
|
2
2
|
#
|
3
|
-
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
#
|
3
|
+
# The MIT License (MIT)
|
4
|
+
#
|
5
|
+
# Copyright (c) 2013 Lincoln de Sousa <lincoln@clarete.li>
|
6
|
+
#
|
7
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
8
|
+
# of this software and associated documentation files (the "Software"), to deal
|
9
|
+
# in the Software without restriction, including without limitation the rights
|
10
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
11
|
+
# copies of the Software, and to permit persons to whom the Software is
|
12
|
+
# furnished to do so, subject to the following conditions:
|
13
|
+
#
|
14
|
+
# The above copyright notice and this permission notice shall be included in
|
15
|
+
# all copies or substantial portions of the Software.
|
16
|
+
#
|
17
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
18
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
19
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
20
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
21
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
22
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
23
|
+
# THE SOFTWARE.
|
9
24
|
|
10
25
|
module S3Ranger
|
11
26
|
|
@@ -14,9 +29,11 @@ module S3Ranger
|
|
14
29
|
|
15
30
|
class NoConfigFound < SyncException
|
16
31
|
|
32
|
+
attr_accessor :missing_vars
|
17
33
|
attr_accessor :paths_checked
|
18
34
|
|
19
|
-
def initialize
|
35
|
+
def initialize missing_vars, paths_checked
|
36
|
+
@missing_vars = missing_vars
|
20
37
|
@paths_checked = paths_checked
|
21
38
|
end
|
22
39
|
end
|
data/lib/s3ranger/sync.rb
CHANGED
@@ -1,4 +1,30 @@
|
|
1
|
-
#
|
1
|
+
# s3ranger - Tool belt for managing your S3 buckets
|
2
|
+
#
|
3
|
+
# The MIT License (MIT)
|
4
|
+
#
|
5
|
+
# Copyright (c) 2013 Lincoln de Sousa <lincoln@clarete.li>
|
6
|
+
#
|
7
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
8
|
+
# of this software and associated documentation files (the "Software"), to deal
|
9
|
+
# in the Software without restriction, including without limitation the rights
|
10
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
11
|
+
# copies of the Software, and to permit persons to whom the Software is
|
12
|
+
# furnished to do so, subject to the following conditions:
|
13
|
+
#
|
14
|
+
# The above copyright notice and this permission notice shall be included in
|
15
|
+
# all copies or substantial portions of the Software.
|
16
|
+
#
|
17
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
18
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
19
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
20
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
21
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
22
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
23
|
+
# THE SOFTWARE.
|
24
|
+
|
25
|
+
# Part of this software was inspired by the original s3sync, so here's their
|
26
|
+
# copyright notice:
|
27
|
+
|
2
28
|
# (c) 2007 s3sync.net
|
3
29
|
#
|
4
30
|
# This software code is made available "AS IS" without warranties of any
|
data/lib/s3ranger/util.rb
CHANGED
@@ -1,14 +1,29 @@
|
|
1
|
+
# s3ranger - Tool belt for managing your S3 buckets
|
2
|
+
#
|
3
|
+
# The MIT License (MIT)
|
4
|
+
#
|
5
|
+
# Copyright (c) 2013 Lincoln de Sousa <lincoln@clarete.li>
|
6
|
+
#
|
7
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
8
|
+
# of this software and associated documentation files (the "Software"), to deal
|
9
|
+
# in the Software without restriction, including without limitation the rights
|
10
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
11
|
+
# copies of the Software, and to permit persons to whom the Software is
|
12
|
+
# furnished to do so, subject to the following conditions:
|
13
|
+
#
|
14
|
+
# The above copyright notice and this permission notice shall be included in
|
15
|
+
# all copies or substantial portions of the Software.
|
16
|
+
#
|
17
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
18
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
19
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
20
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
21
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
22
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
23
|
+
# THE SOFTWARE.
|
24
|
+
|
1
25
|
module S3Ranger
|
2
26
|
def S3Ranger.safe_join(parts)
|
3
27
|
File.join *(parts.select {|v| !v.nil? && !v.empty? })
|
4
28
|
end
|
5
|
-
|
6
|
-
# class Object
|
7
|
-
# # note that this method is already defined in Ruby 1.9
|
8
|
-
# def define_singleton_method(name, callable = nil, &block)
|
9
|
-
# block ||= callable
|
10
|
-
# metaclass = class << self; self; end
|
11
|
-
# metaclass.send(:define_method, name, block)
|
12
|
-
# end
|
13
|
-
# end
|
14
29
|
end
|
data/lib/s3ranger/version.rb
CHANGED
@@ -1,3 +1,27 @@
|
|
1
|
+
# s3ranger - Tool belt for managing your S3 buckets
|
2
|
+
#
|
3
|
+
# The MIT License (MIT)
|
4
|
+
#
|
5
|
+
# Copyright (c) 2013 Lincoln de Sousa <lincoln@clarete.li>
|
6
|
+
#
|
7
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
8
|
+
# of this software and associated documentation files (the "Software"), to deal
|
9
|
+
# in the Software without restriction, including without limitation the rights
|
10
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
11
|
+
# copies of the Software, and to permit persons to whom the Software is
|
12
|
+
# furnished to do so, subject to the following conditions:
|
13
|
+
#
|
14
|
+
# The above copyright notice and this permission notice shall be included in
|
15
|
+
# all copies or substantial portions of the Software.
|
16
|
+
#
|
17
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
18
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
19
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
20
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
21
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
22
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
23
|
+
# THE SOFTWARE.
|
24
|
+
|
1
25
|
module S3Ranger
|
2
|
-
VERSION = "0.
|
26
|
+
VERSION = "0.3.0"
|
3
27
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: s3ranger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -136,10 +136,10 @@ files:
|
|
136
136
|
- Gemfile.lock
|
137
137
|
- LICENSE.txt
|
138
138
|
- README.md
|
139
|
-
- README.txt
|
140
|
-
- README_s3cmd.txt
|
141
139
|
- Rakefile
|
142
140
|
- bin/s3ranger
|
141
|
+
- doc/old/README.txt
|
142
|
+
- doc/old/README_s3cmd.txt
|
143
143
|
- lib/s3ranger.rb
|
144
144
|
- lib/s3ranger/cli.rb
|
145
145
|
- lib/s3ranger/config.rb
|
@@ -147,8 +147,8 @@ files:
|
|
147
147
|
- lib/s3ranger/sync.rb
|
148
148
|
- lib/s3ranger/util.rb
|
149
149
|
- lib/s3ranger/version.rb
|
150
|
-
- s3config.yml.example
|
151
150
|
- s3ranger.gemspec
|
151
|
+
- s3ranger.yml.example
|
152
152
|
- spec/fixtures/nodes/1.txt
|
153
153
|
- spec/local_source_spec.rb
|
154
154
|
- spec/main_spec.rb
|
@@ -168,7 +168,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
168
168
|
version: '0'
|
169
169
|
segments:
|
170
170
|
- 0
|
171
|
-
hash:
|
171
|
+
hash: 1697485139363659678
|
172
172
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
173
173
|
none: false
|
174
174
|
requirements:
|
@@ -177,7 +177,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
177
177
|
version: '0'
|
178
178
|
segments:
|
179
179
|
- 0
|
180
|
-
hash:
|
180
|
+
hash: 1697485139363659678
|
181
181
|
requirements: []
|
182
182
|
rubyforge_project:
|
183
183
|
rubygems_version: 1.8.24
|
data/s3config.yml.example
DELETED