s3sync-cf 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/docs/README.txt ADDED
@@ -0,0 +1,184 @@
1
+
2
+
3
+ Change Log:
4
+ -----------
5
+
6
+ 2006-09-29:
7
+ Added support for --expires and --cache-control. Eg:
8
+ --expires="Thu, 01 Dec 2007 16:00:00 GMT"
9
+ --cache-control="no-cache"
10
+
11
+ Thanks to Charles for pointing out the need for this, and supplying a patch
12
+ proving that it would be trivial to add =) Apologies for not including the short
13
+ form (-e) for the expires. I have a rule that options taking arguments should
14
+ use the long form.
15
+ ----------
16
+
17
+ 2006-10-04
18
+ Several minor debugs and edge cases.
19
+ Fixed a bug where retries didn't rewind the stream to start over.
20
+ ----------
21
+
22
+ 2006-10-12
23
+ Version 1.0.5
24
+ Finally figured out and fixed bug of trying to follow local symlink-to-directory.
25
+ Fixed a really nasty sorting discrepancy that caused problems when files started
26
+ with the same name as a directory.
27
+ Retry on connection-reset on the S3 side.
28
+ Skip files that we can't read instead of dying.
29
+ ----------
30
+
31
+ 2006-10-12
32
+ Version 1.0.6
33
+ Some GC voodoo to try and keep a handle on the memory footprint a little better.
34
+ There is still room for improvement here.
35
+ ----------
36
+
37
+ 2006-10-13
38
+ Version 1.0.7
39
+ Fixed symlink dirs being stored to S3 as real dirs (and failing with 400)
40
+ Added a retry catch for connection timeout error.
41
+ (Hopefully) caught a bug that expected every S3 listing to contain results
42
+ ----------
43
+
44
+ 2006-10-14
45
+ Version 1.0.8
46
+ Was testing for file? before symlink? in localnode.stream. This meant that for
47
+ symlink files it was trying to shove the real file contents into the symlink
48
+ body on s3.
49
+ ----------
50
+
51
+ 2006-10-14
52
+ Version 1.0.9
53
+ Woops, I was using "max-entries" for some reason but the proper header is
54
+ "max-keys". Not a big deal.
55
+ Broke out the S3try stuff into a separate file so I could re-use it for s3cmd.rb
56
+ ----------
57
+
58
+ 2006-10-16
59
+ Added a couple debug lines; not even enough to call it a version revision.
60
+ ----------
61
+
62
+ 2006-10-25
63
+ Version 1.0.10
64
+ UTF-8 fixes.
65
+ Catching a couple more retry-able errors in s3try (instead of aborting the
66
+ program).
67
+ ----------
68
+
69
+ 2006-10-26
70
+ Version 1.0.11
71
+ Revamped some details of the generators and comparator so that directories are
72
+ handled in a more exact and uniform fashion across local and S3.
73
+ ----------
74
+
75
+ 2006-11-28
76
+ Version 1.0.12
77
+ Added a couple more error catches to s3try.
78
+ ----------
79
+
80
+ 2007-01-08
81
+ Version 1.0.13
82
+ Numerous small changes to slash and path handling, in order to catch several
83
+ cases where "root" directory nodes were not being created on S3.
84
+ This makes restores work a lot more intuitively in many cases.
85
+ ----------
86
+
87
+ 2007-01-25
88
+ Version 1.0.14
89
+ Peter Fales' marker fix.
90
+ Also, markers should be decoded into native charset (because that's what s3
91
+ expects to see).
92
+ ----------
93
+
94
+ 2007-02-19
95
+ Version 1.1.0
96
+ *WARNING* Lots of path-handling changes. *PLEASE* test safely before you just
97
+ swap this in for your working 1.0.x version.
98
+
99
+ - Adding --exclude (and there was much rejoicing).
100
+ - Found Yet Another Leading Slash Bug with respect to local nodes. It was always
101
+ "recursing" into the first folder even if there was no trailing slash and -r
102
+ wasn't specified. What it should have done in this case is simply create a node
103
+ for the directory itself, then stop (not check the dir's contents).
104
+ - Local node canonicalization was (potentially) stripping the trailing slash,
105
+ which we need in order to make some decisios in the local generator.
106
+ - Fixed problem where it would prepend a "/" to s3 key names even with blank
107
+ prefix.
108
+ - Fixed S3->local when there's no "/" in the source so it doesn't try to create
109
+ a folder with the bucket name.
110
+ - Updated s3try and s3_s3sync_mod to allow SSL_CERT_FILE
111
+ ----------
112
+
113
+ 2007-02-22
114
+ Version 1.1.1
115
+ Fixed dumb regression bug caused by the S3->local bucket name fix in 1.1.0
116
+ ----------
117
+
118
+ 2007-02-25
119
+ Version 1.1.2
120
+ Added --progress
121
+ ----------
122
+
123
+ 2007-06-02
124
+ Version 1.1.3
125
+ IMPORTANT!
126
+ Pursuant to http://s3sync.net/forum/index.php?topic=49.0 , the tar.gz now
127
+ expands into its own sub-directory named "s3sync" instead of dumping all the
128
+ files into the current directory.
129
+
130
+ In the case of commands of the form:
131
+ s3sync -r somedir somebucket:
132
+ The root directory node in s3 was being stored as "somedir/" instead of "somedir"
133
+ which caused restores to mess up when you say:
134
+ s3sync -r somebucket: restoredir
135
+ The fix to this, by coincidence, actually makes s3fox work even *less* well with
136
+ s3sync. I really need to build my own xul+javascript s3 GUI some day.
137
+
138
+ Also fixed some of the NoMethodError stuff for when --progress is used
139
+ and caught Errno::ETIMEDOUT
140
+ ----------
141
+
142
+ 2007-07-12
143
+ Version 1.1.4
144
+ Added Alastair Brunton's yaml config code.
145
+ ----------
146
+
147
+ 2007-11-17
148
+ Version 1.2.1
149
+ Compatibility for S3 API revisions.
150
+ When retries are exhausted, emit an error.
151
+ Don't ever try to delete the 'root' local dir.
152
+ ----------
153
+
154
+ 2007-11-20
155
+ Version 1.2.2
156
+ Handle EU bucket 307 redirects (in s3try.rb)
157
+ --make-dirs added
158
+ ----------
159
+
160
+ 2007-11-20
161
+ Version 1.2.3
162
+ Fix SSL verification settings that broke in new S3 API.
163
+ ----------
164
+
165
+ 2008-01-06
166
+ Version 1.2.4
167
+ Run from any dir (search "here" for includes).
168
+ Search out s3config.yml in some likely places.
169
+ Reset connection (properly) on retry-able non-50x errors.
170
+ Fix calling format bug preventing it from working from yml.
171
+ Added http proxy support.
172
+ ----------
173
+
174
+ 2008-05-11
175
+ Version 1.2.5
176
+ Added option --no-md5
177
+ ----------
178
+
179
+ 2008-06-16
180
+ Version 1.2.6
181
+ Catch connect errors and retry.
182
+ ----------
183
+
184
+ FNORD
@@ -0,0 +1,172 @@
1
+ Welcome to s3cmd.rb
2
+ -------------------
3
+ This is a ruby program that wraps S3 operations into a simple command-line tool.
4
+ It is inspired by things like rsh3ll, #sh3ll, etc., but shares no code from
5
+ them. It's meant as a companion utility to s3sync.rb but could be used on its
6
+ own (provided you have read the other readme file and know how to use s3sync in
7
+ theory).
8
+
9
+ I made this even though lots of other "shell"s exist, because I wanted a
10
+ single-operation utility, instead of a shell "environment". This lends itself
11
+ more to scripting, etc. Also the delete operation on rsh3ll seems to be borken
12
+ at the moment? =(
13
+
14
+ Users not yet familiar with s3sync should read about that first, since s3cmd and
15
+ s3sync share a tremendous amount of conventions and syntax. Particularly you
16
+ have to set up environment variables prior to calling s3cmd, and s3cmd also uses
17
+ the "bucket:key" syntax popularized by s3sync. Many of the options are the same
18
+ too. Really, go read the other readme first if you haven't used s3sync yet.
19
+ Otherwise you will become confused. It's OK, I'll wait.
20
+
21
+ ....
22
+
23
+ In general, s3sync and s3cmd complement each other. s3sync is useful to perform
24
+ serious synchronization operations, and s3cmd allows you to do simple things
25
+ such as bucket management, listing, transferring single files, and the like.
26
+
27
+ Here is the usage, with examples to follow.
28
+
29
+ s3cmd.rb [options] <command> [arg(s)] version 1.0.0
30
+ --help -h --verbose -v --dryrun -n
31
+ --ssl -s --debug -d
32
+
33
+ Commands:
34
+ s3cmd.rb listbuckets [headers]
35
+ s3cmd.rb createbucket|deletebucket <bucket> [headers]
36
+ s3cmd.rb list <bucket>[:prefix] [max/page] [delimiter] [headers]
37
+ s3cmd.rb delete <bucket>:key [headers]
38
+ s3cmd.rb deleteall <bucket>[:prefix] [headers]
39
+ s3cmd.rb get|put <bucket>:key <file> [headers]
40
+
41
+
42
+ A note about [headers]
43
+ ----------------------
44
+ For some S3 operations, such as "put", you might want to specify certain headers
45
+ to the request such as Cache-Control, Expires, x-amz-acl, etc. Rather than
46
+ supporting a load of separate command-line options for these, I just allow
47
+ header specification. So to upload a file with public-read access you could
48
+ say:
49
+ s3cmd.rb put MyBucket:TheFile.txt x-amz-acl:public-read
50
+
51
+ If you don't need to add any particular headers then you can just ignore this
52
+ whole [headers] thing and pretend it's not there. This is somewhat of an
53
+ advanced option.
54
+
55
+
56
+ Examples
57
+ --------
58
+ List all the buckets your account owns:
59
+ s3cmd.rb listbuckets
60
+
61
+ Create a new bucket:
62
+ s3cmd.rb createbucket BucketName
63
+
64
+ Create a new bucket in the EU:
65
+ s3cmd.rb createbucket BucketName EU
66
+
67
+ Find out the location constraint of a bucket:
68
+ s3cmd.rb location BucketName
69
+
70
+ Delete an old bucket you don't want any more:
71
+ s3cmd.rb deletebucket BucketName
72
+
73
+ Find out what's in a bucket, 10 lines at a time:
74
+ s3cmd.rb list BucketName 10
75
+
76
+ Only look in a particular prefix:
77
+ s3cmd.rb list BucketName:startsWithThis
78
+
79
+ Look in the virtual "directory" named foo;
80
+ lists sub-"directories" and keys that are at this level.
81
+ Note that if you specify a delimiter you must specify a max before it.
82
+ (until I make the options parsing smarter)
83
+ s3cmd.rb list BucketName:foo/ 10 /
84
+
85
+ Delete a key:
86
+ s3cmd.rb delete BucketName:AKey
87
+
88
+ Delete all keys that match (like a combo between list and delete):
89
+ s3cmd.rb deleteall BucketName:SomePrefix
90
+
91
+ Only pretend you're going to delete all keys that match, but list them:
92
+ s3cmd.rb --dryrun deleteall BucketName:SomePrefix
93
+
94
+ Delete all keys in a bucket (leaving the bucket):
95
+ s3cmd.rb deleteall BucketName
96
+
97
+ Get a file from S3 and store it to a local file
98
+ s3cmd.rb get BucketName:TheFileOnS3.txt ALocalFile.txt
99
+
100
+ Put a local file up to S3
101
+ Note we don't automatically set mime type, etc.
102
+ NOTE that the order of the options doesn't change. S3 stays first!
103
+ s3cmd.rb put BucketName:TheFileOnS3.txt ALocalFile.txt
104
+
105
+
106
+ Change Log:
107
+ -----------
108
+ 2006-10-14:
109
+ Created.
110
+ -----------
111
+
112
+ 2006-10-16
113
+ Version 1.0.1
114
+ Force content length to a string value since some ruby's don't convert it right.
115
+ -----------
116
+
117
+ 2006-10-25
118
+ UTF-8 fixes.
119
+ -----------
120
+
121
+ 2006-11-28
122
+ Version 1.0.3
123
+ Added a couple more error catches to s3try.
124
+ ----------
125
+
126
+ 2007-01-25
127
+ Version 1.0.4
128
+ Peter Fales' marker fix.
129
+ Also, markers should be decoded into native charset (because that's what s3
130
+ expects to see).
131
+ ----------
132
+
133
+ 2007-02-19
134
+ - Updated s3try and s3_s3sync_mod to allow SSL_CERT_FILE
135
+ ----------
136
+
137
+ 2007-2-25
138
+ Added --progress
139
+ ----------
140
+
141
+ 2007-07-12
142
+ Version 1.0.6
143
+ Added Alastair Brunton's yaml config code.
144
+ ----------
145
+
146
+ 2007-11-17
147
+ Version 1.2.1
148
+ Compatibility for S3 API revisions.
149
+ When retries are exhausted, emit an error.
150
+ ----------
151
+
152
+ 2007-11-20
153
+ Version 1.2.2
154
+ Handle EU bucket 307 redirects (in s3try.rb)
155
+ ----------
156
+
157
+ 2007-11-20
158
+ Version 1.2.3
159
+ Fix SSL verification settings that broke in new S3 API.
160
+ ----------
161
+
162
+ 2008-01-06
163
+ Version 1.2.4
164
+ Run from any dir (search "here" for includes).
165
+ Search out s3config.yml in some likely places.
166
+ Reset connection (properly) on retry-able non-50x errors.
167
+ Fix calling format bug preventing it from working from yml.
168
+ Added http proxy support.
169
+ ----------
170
+
171
+
172
+ FNORD
@@ -0,0 +1,3 @@
1
+ aws_access_key_id: 11111111111111111111111
2
+ aws_secret_access_key: 222222222222222222222
3
+ ssl_cert_dir: /home/user/s3sync/certs
@@ -0,0 +1,107 @@
1
+ # This software code is made available "AS IS" without warranties of any
2
+ # kind. You may copy, display, modify and redistribute the software
3
+ # code either by itself or as incorporated into your code; provided that
4
+ # you do not remove any proprietary notices. Your use of this software
5
+ # code is at your own risk and you waive any claim against the author
6
+ # with respect to your use of this software code.
7
+ # (c) 2007 s3sync.net
8
+ #
9
+
10
+ # The purpose of this file is to overlay the net/http library
11
+ # to add some functionality
12
+ # (without changing the file itself or requiring a specific version)
13
+ # It still isn't perfectly robust, i.e. if radical changes are made
14
+ # to the underlying lib this stuff will need updating.
15
+
16
+ require 'net/http'
17
+
18
+ module Net
19
+
20
+ $HTTPStreamingDebug = false
21
+
22
+ # Allow request body to be an IO stream
23
+ # Allow an IO stream argument to stream the response body out
24
+ class HTTP
25
+ alias _HTTPStreaming_request request
26
+
27
+ def request(req, body = nil, streamResponseBodyTo = nil, &block)
28
+ if not block_given? and streamResponseBodyTo and streamResponseBodyTo.respond_to?(:write)
29
+ $stderr.puts "Response using streaming" if $HTTPStreamingDebug
30
+ # this might be a retry, we should make sure the stream is at its beginning
31
+ streamResponseBodyTo.rewind if streamResponseBodyTo.respond_to?(:rewind) and streamResponseBodyTo != $stdout
32
+ block = proc do |res|
33
+ res.read_body do |chunk|
34
+ streamResponseBodyTo.write(chunk)
35
+ end
36
+ end
37
+ end
38
+ if body != nil && body.respond_to?(:read)
39
+ $stderr.puts "Request using streaming" if $HTTPStreamingDebug
40
+ # this might be a retry, we should make sure the stream is at its beginning
41
+ body.rewind if body.respond_to?(:rewind)
42
+ req.body_stream = body
43
+ return _HTTPStreaming_request(req, nil, &block)
44
+ else
45
+ return _HTTPStreaming_request(req, body, &block)
46
+ end
47
+ end
48
+ end
49
+
50
+ end #module
51
+
52
+ module S3sync
53
+ class ProgressStream < SimpleDelegator
54
+ def initialize(s, size=0)
55
+ @start = @last = Time.new
56
+ @total = size
57
+ @transferred = 0
58
+ @closed = false
59
+ @printed = false
60
+ @innerStream = s
61
+ super(@innerStream)
62
+ __setobj__(@innerStream)
63
+ end
64
+ # need to catch reads and writes so we can count what's being transferred
65
+ def read(i)
66
+ res = @innerStream.read(i)
67
+ @transferred += res.respond_to?(:length) ? res.length : 0
68
+ now = Time.new
69
+ if(now - @last > 1) # don't do this oftener than once per second
70
+ @printed = true
71
+ begin
72
+ $stdout.printf("\rProgress: %db %db/s %s ", @transferred, (@transferred/(now - @start)).floor,
73
+ @total > 0? (100 * @transferred/@total).floor.to_s + "%" : ""
74
+ )
75
+ rescue FloatDomainError
76
+ #wtf?
77
+ end
78
+ $stdout.flush
79
+ @last = now
80
+ end
81
+ res
82
+ end
83
+ def write(s)
84
+ @transferred += s.length
85
+ res = @innerStream.write(s)
86
+ now = Time.new
87
+ if(now -@last > 1) # don't do this oftener than once per second
88
+ @printed = true
89
+ $stdout.printf("\rProgress: %db %db/s %s ", @transferred, (@transferred/(now - @start)).floor,
90
+ @total > 0? (100 * @transferred/@total).floor.to_s + "%" : ""
91
+ )
92
+ $stdout.flush
93
+ @last = now
94
+ end
95
+ res
96
+ end
97
+ def rewind()
98
+ @transferred = 0
99
+ @innerStream.rewind if @innerStream.respond_to?(:rewind)
100
+ end
101
+ def close()
102
+ $stdout.printf("\n") if @printed and not @closed
103
+ @closed = true
104
+ @innerStream.close
105
+ end
106
+ end
107
+ end #module