s3cp 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,4 +1,8 @@
1
- === 0.1.4 / (Pending)
1
+ === 0.1.5 / (Pending)
2
+
3
+ === 0.1.4 / 2011-10-17
4
+
5
+ * Added: s3rm command
2
6
 
3
7
  === 0.1.3 / 2011-09-29
4
8
 
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require 's3cp/s3rm'
3
+
@@ -0,0 +1,132 @@
1
+ require 'rubygems'
2
+ require 'extensions/kernel' if RUBY_VERSION =~ /1.8/
3
+ require 'right_aws'
4
+ require 'optparse'
5
+ require 'date'
6
+ require 'highline/import'
7
+
8
+ require 's3cp/utils'
9
+
10
+ # Parse arguments
11
+ options = {}
12
+ options[:recursive] = false
13
+ options[:include_regex] = nil
14
+ options[:exclude_regex] = nil
15
+ options[:test] = false
16
+ options[:silent] = false
17
+ options[:fail_if_not_exist] = false
18
+
19
+ op = OptionParser.new do |opts|
20
+ opts.banner = "s3rm [path]"
21
+ opts.separator ''
22
+
23
+ opts.on("-r", "--recursive", "Delete S3 keys matching provided prefix.") do
24
+ options[:recursive] = true
25
+ end
26
+
27
+ opts.on("-i REGEX", "--include REGEX", "Delete only S3 objects matching the following regular expression.") do |regex|
28
+ options[:include_regex] = regex
29
+ end
30
+
31
+ opts.on("-x REGEX", "--exclude REGEX", "Do not delete any S3 objects matching provided regular expression.") do |regex|
32
+ options[:exclude_regex] = regex
33
+ end
34
+
35
+ opts.on("-F", "--fail-if-not-exist", "Fail if no S3 object match provided key, prefix and/or regex") do
36
+ options[:fail_if_not_exist] = true
37
+ end
38
+
39
+ opts.on("-t", "--test", "Only display matching keys; do not actually delete anything.") do
40
+ options[:test] = true
41
+ end
42
+
43
+ opts.on("--silent", "Do not display keys as they are deleted.") do
44
+ options[:silent] = true
45
+ end
46
+
47
+ opts.on("--verbose", "Verbose mode") do
48
+ options[:verbose] = true
49
+ end
50
+
51
+ opts.on_tail("-h", "--help", "Show this message") do
52
+ puts op
53
+ exit
54
+ end
55
+ end
56
+ op.parse!(ARGV)
57
+
58
+ unless ARGV.size > 0
59
+ puts op
60
+ exit(1)
61
+ end
62
+
63
+ if options[:include_regex] && !options[:recursive]
64
+ puts "-i (--include regex) option requires -r (recursive) option."
65
+ exit(1)
66
+ end
67
+
68
+ if options[:exclude_regex] && !options[:recursive]
69
+ puts "-x (--exclude regex) option requires -r (recursive) option."
70
+ exit(1)
71
+ end
72
+
73
+ url = ARGV[0]
74
+
75
+ if options[:verbose]
76
+ puts "URL: #{url}"
77
+ puts "Options: #{options.inspect}"
78
+ end
79
+
80
+ @bucket, @key = S3CP.bucket_and_key(url)
81
+ fail "Your URL looks funny, doesn't it?" unless @bucket
82
+
83
+ if options[:verbose]
84
+ puts "bucket #{@bucket}"
85
+ puts "key #{@key}"
86
+ end
87
+
88
+ include_regex = options[:include_regex] ? Regexp.new(options[:include_regex]) : nil
89
+ exclude_regex = options[:exclude_regex] ? Regexp.new(options[:exclude_regex]) : nil
90
+
91
+ @s3 = S3CP.connect()
92
+
93
+ if options[:recursive]
94
+ total_matching = 0
95
+
96
+ @s3.interface.incrementally_list_bucket(@bucket, :prefix => @key) do |page|
97
+ page[:contents].each do |entry|
98
+ key = "s3://#{@bucket}/#{entry[:key]}"
99
+
100
+ matching = true
101
+ matching = false if include_regex && !include_regex.match(entry[:key])
102
+ matching = false if exclude_regex && exclude_regex.match(entry[:key])
103
+
104
+ puts "#{key} => #{matching}" if options[:verbose]
105
+
106
+ if matching
107
+ total_matching += 1
108
+ puts key unless options[:silent] || options[:verbose]
109
+ @s3.interface.delete(@bucket, entry[:key]) unless options[:test]
110
+ end
111
+ end
112
+ end
113
+
114
+ if options[:fail_if_not_exist] && total_matching == 0
115
+ puts "No matching keys."
116
+ exit(1)
117
+ end
118
+ else
119
+ # delete a single file; check if it exists
120
+ if options[:fail_if_not_exist] && @s3.interface.head(@bucket, @key) == nil
121
+ key = "s3://#{@bucket}/#{@key}"
122
+ puts "#{key} does not exist."
123
+ exit(1)
124
+ end
125
+
126
+ begin
127
+ @s3.interface.delete(@bucket, @key) unless options[:test]
128
+ rescue => e
129
+ puts e.to_s
130
+ raise e unless e.to_s =~ /Not Found/
131
+ end
132
+ end
@@ -1,4 +1,4 @@
1
1
 
2
2
  module S3CP
3
- VERSION = "0.1.3"
3
+ VERSION = "0.1.4"
4
4
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: s3cp
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 3
10
- version: 0.1.3
9
+ - 4
10
+ version: 0.1.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Alex Boisvert
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-09-29 00:00:00 Z
18
+ date: 2011-10-18 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  version_requirements: &id001 !ruby/object:Gem::Requirement
@@ -120,6 +120,7 @@ executables:
120
120
  - s3cp
121
121
  - s3cat
122
122
  - s3mod
123
+ - s3rm
123
124
  extensions: []
124
125
 
125
126
  extra_rdoc_files:
@@ -131,6 +132,7 @@ files:
131
132
  - lib/s3cp/s3cp.rb
132
133
  - lib/s3cp/version.rb
133
134
  - lib/s3cp/utils.rb
135
+ - lib/s3cp/s3rm.rb
134
136
  - lib/s3cp/s3cat.rb
135
137
  - History.txt
136
138
  - README.md
@@ -138,6 +140,7 @@ files:
138
140
  - bin/s3cat
139
141
  - bin/s3ls
140
142
  - bin/s3mod
143
+ - bin/s3rm
141
144
  homepage:
142
145
  licenses: []
143
146