cliaws 1.7.4 → 1.7.6
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/Rakefile +1 -1
- data/VERSION +1 -1
- data/cliaws.gemspec +4 -4
- data/lib/cliaws/cli/s3.rb +115 -115
- metadata +5 -2
data/Rakefile
CHANGED
@@ -11,7 +11,7 @@ begin
|
|
11
11
|
gemspec.executables = %w(clis3 clisqs cliec2)
|
12
12
|
gemspec.extra_rdoc_files = %w(History.txt License.txt vendor/right_http_connection-1.2.1/README.txt)
|
13
13
|
|
14
|
-
gemspec.add_dependency "thor", "< 0.
|
14
|
+
gemspec.add_dependency "thor", "> 0.11", "< 0.12"
|
15
15
|
gemspec.add_dependency "right_aws", "~> 1.10"
|
16
16
|
end
|
17
17
|
rescue LoadError
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.7.
|
1
|
+
1.7.6
|
data/cliaws.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{cliaws}
|
5
|
-
s.version = "1.7.
|
5
|
+
s.version = "1.7.6"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Fran\303\247ois Beausoleil"]
|
@@ -46,14 +46,14 @@ Gem::Specification.new do |s|
|
|
46
46
|
s.specification_version = 3
|
47
47
|
|
48
48
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
49
|
-
s.add_runtime_dependency(%q<thor>, ["< 0.
|
49
|
+
s.add_runtime_dependency(%q<thor>, ["> 0.11", "< 0.12"])
|
50
50
|
s.add_runtime_dependency(%q<right_aws>, ["~> 1.10"])
|
51
51
|
else
|
52
|
-
s.add_dependency(%q<thor>, ["< 0.
|
52
|
+
s.add_dependency(%q<thor>, ["> 0.11", "< 0.12"])
|
53
53
|
s.add_dependency(%q<right_aws>, ["~> 1.10"])
|
54
54
|
end
|
55
55
|
else
|
56
|
-
s.add_dependency(%q<thor>, ["< 0.
|
56
|
+
s.add_dependency(%q<thor>, ["> 0.11", "< 0.12"])
|
57
57
|
s.add_dependency(%q<right_aws>, ["~> 1.10"])
|
58
58
|
end
|
59
59
|
end
|
data/lib/cliaws/cli/s3.rb
CHANGED
@@ -2,9 +2,9 @@ require "thor"
|
|
2
2
|
require "cliaws"
|
3
3
|
|
4
4
|
module Cliaws
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
module Cli
|
6
|
+
class S3 < Thor
|
7
|
+
map ["-h", "--help"] => :help
|
8
8
|
|
9
9
|
desc "buckets", <<EOD
|
10
10
|
Returns a list of bucket names.
|
@@ -32,16 +32,16 @@ EOD
|
|
32
32
|
bucket.delete(options[:force])
|
33
33
|
end
|
34
34
|
|
35
|
-
|
35
|
+
desc "url S3_OBJECT_PATH", <<EOD
|
36
36
|
Returns a signed, private, URL to the given S3 object that is valid for 24 hours.
|
37
37
|
EOD
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
38
|
+
def url(s3_object)
|
39
|
+
puts Cliaws.s3.url(s3_object)
|
40
|
+
rescue Cliaws::S3::UnknownBucket
|
41
|
+
abort "Could not find bucket named #{$!.bucket_name}"
|
42
|
+
end
|
43
43
|
|
44
|
-
|
44
|
+
desc "list [S3_OBJECT_PATH_PREFIX]", <<EOD
|
45
45
|
Lists all S3 objects that start with the given string.
|
46
46
|
|
47
47
|
EXAMPLES
|
@@ -61,24 +61,24 @@ photos/johnson_and_us.jpg
|
|
61
61
|
$ clis3 list vacation/p
|
62
62
|
photos/johnson_and_us.jpg
|
63
63
|
EOD
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
64
|
+
def list(prefix="")
|
65
|
+
puts Cliaws.s3.list(prefix)
|
66
|
+
rescue Cliaws::S3::UnknownBucket
|
67
|
+
abort "Could not find bucket named #{$!.bucket_name}"
|
68
|
+
end
|
69
69
|
|
70
|
-
|
70
|
+
desc "touch S3_OBJECT_PATH", <<EOD
|
71
71
|
Creates or OVERWRITES a named file at the specified path.
|
72
72
|
|
73
73
|
WARNING: If the file already exists, IT WILL BE OVERWRITTEN with no content.
|
74
74
|
EOD
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
75
|
+
def touch(s3_object)
|
76
|
+
Cliaws.s3.put("", s3_object)
|
77
|
+
rescue Cliaws::S3::UnknownBucket
|
78
|
+
abort "Could not find bucket named #{$!.bucket_name}"
|
79
|
+
end
|
80
80
|
|
81
|
-
|
81
|
+
desc "put [LOCAL_FILE [LOCAL_FILE ...]] S3_PATH", <<EOD
|
82
82
|
Puts one or more named local files, or a simple string, to a path.
|
83
83
|
|
84
84
|
This method has the same interface as cp(1).
|
@@ -91,108 +91,108 @@ $ clis3 put photos/peter.jpg photos/sarah.jpg vacation/2009/photos/hosts
|
|
91
91
|
$ clis3 put movies vacation/2009/movies
|
92
92
|
EOD
|
93
93
|
method_options :data => :string
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
94
|
+
def put(*args)
|
95
|
+
paths = args
|
96
|
+
s3_object = paths.pop
|
97
|
+
|
98
|
+
single_put_mapper = lambda do |source, s3_path|
|
99
|
+
raise ArgumentError, "Writing directly from STDIN is forbidden when STDIN's size is unknown. The RightAws library will write a zero-byte file to Amazon's servers." unless source.respond_to?(:lstat) || source.respond_to?(:size)
|
100
|
+
s3_path
|
101
|
+
end
|
102
|
+
|
103
|
+
multi_put_mapper = lambda do |source, s3_path|
|
104
|
+
if source.respond_to?(:path) then
|
105
|
+
File.join(s3_path, File.basename(source.path))
|
106
|
+
else
|
107
|
+
raise ArgumentError, "Cannot write to a directory when one or more sources are not files: #{source.inspect}"
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
if options[:data] && !paths.empty? then
|
112
|
+
raise ArgumentError, "Cannot specify both --data and filename(s) to send."
|
113
|
+
elsif options[:data] then
|
114
|
+
sources = [StringIO.new(options[:data])]
|
115
|
+
mapper = single_put_mapper
|
116
|
+
elsif paths == ["-"] then
|
117
|
+
sources = [STDIN]
|
118
|
+
mapper = single_put_mapper
|
119
|
+
else
|
120
|
+
targets = paths.map {|filename| filename.to_s}
|
121
|
+
case targets.length
|
122
|
+
when 0
|
123
|
+
sources = [STDIN]
|
124
|
+
mapper = single_put_mapper
|
125
|
+
when 1
|
126
|
+
sources = targets.map {|target| File.open(target, "rb")}
|
127
|
+
mapper = single_put_mapper
|
128
|
+
else
|
129
|
+
sources = targets.map {|target| File.open(target, "rb")}
|
130
|
+
mapper = multi_put_mapper
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
sources.each do |source|
|
135
|
+
target = mapper.call(source, s3_object)
|
136
|
+
if source.respond_to?(:path) then
|
137
|
+
puts "#{source.path} => #{target}"
|
138
|
+
else
|
139
|
+
puts "STDIN => #{target}"
|
140
|
+
end
|
141
|
+
|
142
|
+
Cliaws.s3.put(source, target)
|
143
|
+
end
|
144
|
+
rescue Cliaws::S3::UnknownBucket
|
145
|
+
abort "Could not find bucket named #{$!.bucket_name}"
|
146
|
+
end
|
147
|
+
|
148
|
+
desc "rm S3_OBJECT [S3_OBJECT ...]", <<EOD
|
149
149
|
Deletes one or more S3 objects.
|
150
150
|
|
151
151
|
Does not accept wildcards: each path to delete must be named individually.
|
152
152
|
EOD
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
153
|
+
def rm(*paths)
|
154
|
+
paths.each do |path|
|
155
|
+
puts "rm #{path}"
|
156
|
+
Cliaws.s3.rm(path)
|
157
|
+
end
|
158
|
+
rescue Cliaws::S3::UnknownBucket
|
159
|
+
abort "Could not find bucket named #{$!.bucket_name}"
|
160
|
+
end
|
161
|
+
|
162
|
+
desc "cat S3_OBJECT", <<EOD
|
163
163
|
Prints the contents of the named object to STDOUT.
|
164
164
|
A single new line (\n) will be appended to the output.
|
165
165
|
EOD
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
166
|
+
def cat(s3_object)
|
167
|
+
print Cliaws.s3.get(s3_object, STDOUT)
|
168
|
+
puts
|
169
|
+
rescue Cliaws::S3::UnknownBucket
|
170
|
+
abort "Could not find bucket named #{$!.bucket_name}"
|
171
|
+
end
|
172
|
+
|
173
|
+
desc "get S3_OBJECT [LOCAL_FILE]", <<EOD
|
174
174
|
Returns the raw contents of the named object.
|
175
175
|
|
176
176
|
If LOCAL_FILE is unspecified, it will default to STDOUT.
|
177
177
|
EOD
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
178
|
+
def get(s3_object, local_path=nil)
|
179
|
+
out = if local_path then
|
180
|
+
File.open(local_path, "wb")
|
181
|
+
else
|
182
|
+
STDOUT
|
183
|
+
end
|
184
|
+
|
185
|
+
Cliaws.s3.get(s3_object, out)
|
186
|
+
rescue Cliaws::S3::UnknownBucket
|
187
|
+
abort "Could not find bucket named #{$!.bucket_name}"
|
188
|
+
end
|
189
|
+
|
190
|
+
desc "head S3_OBJECT", "Returns a YAML representation of meta data that Amazon keeps about the named object"
|
191
|
+
def head(s3_object)
|
192
|
+
puts Cliaws.s3.head(s3_object).to_yaml
|
193
|
+
rescue Cliaws::S3::UnknownBucket
|
194
|
+
abort "Could not find bucket named #{$!.bucket_name}"
|
195
|
+
end
|
196
196
|
|
197
197
|
desc "grants BUCKET|KEY", <<EOD
|
198
198
|
Returns a YAML representation of grants assigned to a bucket or key.
|
@@ -249,6 +249,6 @@ EOD
|
|
249
249
|
Cliaws.s3.grant(thing, who => permissions.map {|perm| perm.gsub('_', '-')})
|
250
250
|
grants(thing)
|
251
251
|
end
|
252
|
-
|
253
|
-
|
252
|
+
end
|
253
|
+
end
|
254
254
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cliaws
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.7.
|
4
|
+
version: 1.7.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- "Fran\xC3\xA7ois Beausoleil"
|
@@ -18,9 +18,12 @@ dependencies:
|
|
18
18
|
version_requirement:
|
19
19
|
version_requirements: !ruby/object:Gem::Requirement
|
20
20
|
requirements:
|
21
|
+
- - ">"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0.11"
|
21
24
|
- - <
|
22
25
|
- !ruby/object:Gem::Version
|
23
|
-
version: "0.
|
26
|
+
version: "0.12"
|
24
27
|
version:
|
25
28
|
- !ruby/object:Gem::Dependency
|
26
29
|
name: right_aws
|