cliaws 1.2.5 → 1.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/History.txt CHANGED
@@ -1,3 +1,9 @@
1
+ == 1.3.0 2008-10-01
2
+
3
+ * Rewrote the algorithm for "clis3 put". The new algorithm is saner, and prevents writing
4
+ 0 byte files when the input's size is unknown and cannot be determined.
5
+ * Return an exit status of 0 on normal exit on clis3 put.
6
+
1
7
  == 1.2.5 2008-09-15
2
8
 
3
9
  * More testing for "clis3 put - S3_OBJECT" and "cat x | clis3 put S3_OBJECT" highlighted
data/bin/clis3 CHANGED
@@ -71,36 +71,53 @@ Main {
71
71
  paths = params["files_or_s3_path"].values
72
72
  s3_object = paths.pop
73
73
 
74
+ single_put_mapper = lambda do |source, s3_path|
75
+ 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)
76
+ s3_path
77
+ end
78
+
79
+ multi_put_mapper = lambda do |source, s3_path|
80
+ if source.respond_to?(:path) then
81
+ File.join(s3_path, File.basename(source.path))
82
+ else
83
+ raise ArgumentError, "Cannot write to a directory when one or more sources are not files: #{source.inspect}"
84
+ end
85
+ end
86
+
74
87
  if params["data"].given? && !paths.empty? then
75
88
  raise ArgumentError, "Cannot specify both --data and filename(s) to send."
76
89
  elsif params["data"].given? then
77
- source = params["data"].value
90
+ sources = [StringIO.new(params["data"].value)]
91
+ mapper = single_put_mapper
78
92
  elsif paths == ["-"] then
79
- source = STDIN
93
+ sources = [STDIN]
94
+ mapper = single_put_mapper
80
95
  else
81
96
  targets = paths.map {|filename| filename.to_s}
82
97
  case targets.length
83
98
  when 0
84
- source = STDIN
99
+ sources = [STDIN]
100
+ mapper = single_put_mapper
85
101
  when 1
86
- File.open(targets.first, "rb") do |source|
87
- Cliaws.s3.put(source, s3_object)
88
- end
89
- exit 0
102
+ sources = targets.map {|target| File.open(target, "rb")}
103
+ mapper = single_put_mapper
90
104
  else
91
- targets.each do |local_file|
92
- File.open(local_file, "rb") do |source|
93
- remote_file = File.join(s3_object, File.basename(local_file))
94
- puts "%-30s => %s" % [local_file, remote_file]
95
- Cliaws.s3.put(source, remote_file)
96
- end
97
- end
98
- exit 0
105
+ sources = targets.map {|target| File.open(target, "rb")}
106
+ mapper = multi_put_mapper
99
107
  end
100
108
  end
101
109
 
102
- raise ArgumentError, "Target is a directory, but input is not a local file -- cannot proceed" if s3_object =~ /\/$/
103
- Cliaws.s3.put(source, s3_object)
110
+ sources.each do |source|
111
+ target = mapper.call(source, s3_object)
112
+ if source.respond_to?(:path) then
113
+ puts "#{source.path} => #{target}"
114
+ else
115
+ puts "STDIN => #{target}"
116
+ end
117
+
118
+ Cliaws.s3.put(source, target)
119
+ end
120
+ exit_success!
104
121
 
105
122
  rescue Cliaws::S3::UnknownBucket
106
123
  abort "Could not find bucket named #{$!.bucket_name}"
data/bin/clisqs CHANGED
File without changes
data/lib/cliaws/s3.rb CHANGED
@@ -45,8 +45,8 @@ module Cliaws
45
45
  puts headers.merge(key.meta_headers).to_yaml
46
46
  end
47
47
 
48
- def put(source, s3_object)
49
- bucket, keyname = bucket_and_key_name(s3_object)
48
+ def put(source, s3_object, create=true)
49
+ bucket, keyname = bucket_and_key_name(s3_object, create)
50
50
  bucket.put(keyname, source)
51
51
  end
52
52
 
@@ -56,9 +56,9 @@ module Cliaws
56
56
  end
57
57
 
58
58
  protected
59
- def bucket_and_key_name(full_name)
59
+ def bucket_and_key_name(full_name, create=true)
60
60
  bucket_name, path = full_name.split("/", 2)
61
- bucket = s3.bucket(bucket_name, false)
61
+ bucket = s3.bucket(bucket_name, create)
62
62
  raise UnknownBucket.new(bucket_name) unless bucket
63
63
  [bucket, path]
64
64
  end
@@ -1,8 +1,8 @@
1
1
  module Cliaws #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 1
4
- MINOR = 2
5
- TINY = 5
4
+ MINOR = 3
5
+ TINY = 0
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  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.2.5
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - "Fran\xC3\xA7ois Beausoleil"
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-09-15 00:00:00 -04:00
12
+ date: 2008-10-01 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency