right_publish 0.4.2 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md ADDED
@@ -0,0 +1,2 @@
1
+ ### 0.5.0
2
+ * Add mutex to separate right_publish from overwriting the same repo
data/Gemfile CHANGED
@@ -18,5 +18,5 @@ group :development do
18
18
  gem "flexmock", "~> 0.9"
19
19
  gem "simplecov"
20
20
  gem "ruby-debug", ">= 0.10", :platforms => :ruby_18
21
- gem "ruby-debug19", ">= 0.11.6", :platforms => :ruby_19
21
+ gem 'debugger', :platforms => :ruby_19
22
22
  end
data/Gemfile.lock CHANGED
@@ -19,16 +19,21 @@ GEM
19
19
  activesupport (= 2.3.18)
20
20
  rack (~> 1.1.0)
21
21
  activesupport (2.3.18)
22
- archive-tar-minitar (0.5.2)
23
22
  builder (3.2.0)
24
- columnize (0.3.6)
23
+ columnize (0.8.9)
25
24
  cucumber (1.2.5)
26
25
  builder (>= 2.1.2)
27
26
  diff-lcs (>= 1.1.3)
28
27
  gherkin (~> 2.11.7)
29
28
  multi_json (~> 1.3)
29
+ debugger (1.6.7)
30
+ columnize (>= 0.3.1)
31
+ debugger-linecache (~> 1.2.0)
32
+ debugger-ruby_core_source (~> 1.3.5)
33
+ debugger-linecache (1.2.0)
34
+ debugger-ruby_core_source (1.3.5)
30
35
  diff-lcs (1.2.3)
31
- excon (0.20.1)
36
+ excon (0.25.3)
32
37
  flexmock (0.9.0)
33
38
  fog (1.10.1)
34
39
  builder
@@ -52,8 +57,6 @@ GEM
52
57
  json (1.7.7)
53
58
  linecache (0.46)
54
59
  rbx-require-relative (> 0.0.4)
55
- linecache19 (0.5.12)
56
- ruby_core_source (>= 0.1.4)
57
60
  mime-types (1.22)
58
61
  multi_json (1.7.2)
59
62
  net-scp (1.1.0)
@@ -79,17 +82,7 @@ GEM
79
82
  ruby-debug-base (~> 0.10.4.0)
80
83
  ruby-debug-base (0.10.4)
81
84
  linecache (>= 0.3)
82
- ruby-debug-base19 (0.11.25)
83
- columnize (>= 0.3.1)
84
- linecache19 (>= 0.5.11)
85
- ruby_core_source (>= 0.1.4)
86
- ruby-debug19 (0.11.6)
87
- columnize (>= 0.3.1)
88
- linecache19 (>= 0.5.11)
89
- ruby-debug-base19 (>= 0.11.19)
90
85
  ruby-hmac (0.4.0)
91
- ruby_core_source (0.1.5)
92
- archive-tar-minitar (>= 0.5.2)
93
86
  simplecov (0.7.1)
94
87
  multi_json (~> 1.0)
95
88
  simplecov-html (~> 0.7.1)
@@ -101,6 +94,7 @@ PLATFORMS
101
94
 
102
95
  DEPENDENCIES
103
96
  builder
97
+ debugger
104
98
  excon (<= 0.25.3)
105
99
  flexmock (~> 0.9)
106
100
  fog (~> 1.9)
@@ -111,6 +105,5 @@ DEPENDENCIES
111
105
  right_develop (~> 1.0)!
112
106
  rspec (~> 2.0)
113
107
  ruby-debug (>= 0.10)
114
- ruby-debug19 (>= 0.11.6)
115
108
  simplecov
116
109
  trollop (~> 2.0)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.2
1
+ 0.5.0
data/bin/right_publish CHANGED
@@ -1,4 +1,5 @@
1
1
  #! /usr/bin/env ruby
2
-
2
+ libdir = File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+ $LOAD_PATH.unshift(libdir) unless $LOAD_PATH.include?(libdir)
3
4
  require 'right_publish'
4
5
  RightPublish::CLI.run()
@@ -1,5 +1,6 @@
1
1
  require 'right_publish/profile'
2
2
  require 'right_publish/storage'
3
+ require 'time'
3
4
 
4
5
  module RightPublish
5
6
 
@@ -32,19 +33,21 @@ module RightPublish
32
33
  end
33
34
 
34
35
  class Repo
36
+
37
+ LOCK_FILE_NAME = 'lock.txt'
38
+ LOCK_PERIOD = 30 * 60 # 30 minutes
39
+ LOCK_RETRY_INTERVAL = 1 * 60 # 1 minute
40
+
35
41
  def initialize(option_key)
36
42
  @repository_type ||= option_key
37
43
  end
38
44
 
39
45
  # Sync files from remote to local storage
40
46
  def pull()
41
- Profile.log("Fetching #{repo_human_name(@repository_type)} files from remote...")
47
+ Profile.log("Fetching #{repo_human_name} files from remote...")
42
48
 
43
49
  begin
44
- sync_dirs(
45
- get_storage(Profile.config[:remote_storage][:provider]),
46
- get_storage(Profile.config[:local_storage][:provider]),
47
- Profile.config[@repository_type][:subdir])
50
+ sync_dirs(remote_storage, local_storage, repo_config[:subdir])
48
51
  rescue Exception => e
49
52
  RightPublish::Profile.log("Could not synchronize storage:\n\t#{e}", :error)
50
53
  raise RuntimeError, "pull from remote failed."
@@ -53,13 +56,10 @@ module RightPublish
53
56
 
54
57
  # Sync files from local to remote storage
55
58
  def push()
56
- Profile.log("Committing local #{repo_human_name(@repository_type)} files to remote...")
59
+ Profile.log("Committing local #{repo_human_name} files to remote...")
57
60
 
58
61
  begin
59
- sync_dirs(
60
- get_storage(Profile.config[:local_storage][:provider]),
61
- get_storage(Profile.config[:remote_storage][:provider]),
62
- Profile.config[@repository_type][:subdir])
62
+ sync_dirs(local_storage, remote_storage, repo_config[:subdir])
63
63
  rescue Exception => e
64
64
  RightPublish::Profile.log("Could not sychronize storage:\n\t#{e}", :error)
65
65
  raise RuntimeError, "push to remote failed."
@@ -70,14 +70,12 @@ module RightPublish
70
70
  # @option options [String] :subdir a subdirectory (common prefix); only files matching this prefix will be included
71
71
  # @option options [Array] :filter a whitelist of String glob patterns to filter files, i.e. ["*.rpm", "*.deb"]
72
72
  def annotate(options={})
73
- Profile.log("Creating HTML directory listing for #{repo_human_name(@repository_type)} files...")
73
+ Profile.log("Creating HTML directory listing for #{repo_human_name} files...")
74
74
 
75
75
  options[:subdir] ||= repo_config[:subdir]
76
76
 
77
77
  files = []
78
- RightPublish::Storage.ls(
79
- get_storage(Profile.config[:local_storage][:provider]),
80
- :subdir => options[:subdir]) do |file|
78
+ RightPublish::Storage.ls(local_storage, :subdir => options[:subdir]) do |file|
81
79
  files << file
82
80
  end
83
81
 
@@ -90,17 +88,19 @@ module RightPublish
90
88
  html = RightPublish::Annotation.generate_html(files, strip, html_options)
91
89
 
92
90
  output = File.join(repo_config[:subdir], 'index.html')
93
- local_dir = get_storage(Profile.config[:local_storage][:provider]).get_directories
91
+ local_dir = local_storage.get_directories
94
92
  local_dir.files.create(:key => output, :body => html)
95
93
  end
96
94
 
97
95
  # Perform one-shot publish of one or more packages.
98
96
  # "One-shot" means: pull, add, annotate and push.
99
97
  def publish(file_or_dir, target)
100
- pull
101
- add(file_or_dir, target)
102
- annotate
103
- push
98
+ lock do
99
+ pull
100
+ add(file_or_dir, target)
101
+ annotate
102
+ push
103
+ end
104
104
  end
105
105
 
106
106
  # Add a new package to local storage and reindex if necessary
@@ -110,6 +110,40 @@ module RightPublish
110
110
 
111
111
  private
112
112
 
113
+ def lock(&block)
114
+ while( (_lock_time = lock_time) != nil && Time.now.utc <= _lock_time ) do
115
+ Profile.log "Lock is set to expire at #{_lock_time}, waiting for #{LOCK_RETRY_INTERVAL} second(s) ..."
116
+ sleep LOCK_RETRY_INTERVAL
117
+ end
118
+ file = update_lock_time(LOCK_PERIOD)
119
+ Profile.log "#{repo_human_name} has been locked for #{LOCK_PERIOD/60} minute(s)."
120
+ yield
121
+ file.destroy
122
+ Profile.log "#{repo_human_name} has been unlocked."
123
+ end
124
+
125
+ def lock_time
126
+ if lock_file
127
+ return Time.parse(lock_file.body)
128
+ else
129
+ nil
130
+ end
131
+ end
132
+
133
+ def update_lock_time(timeout)
134
+ remote_storage.get_directories.files.create(:key => lock_file_path, :body => (Time.now.utc + timeout).to_s, :acl=>'public-read', :content_type => 'text/plain')
135
+ end
136
+
137
+ def lock_file
138
+ remote_storage.get_directories.files.get(lock_file_path)
139
+ rescue Excon::Errors::NotFound
140
+ nil
141
+ end
142
+
143
+ def lock_file_path
144
+ File.join(repo_config[:subdir], LOCK_FILE_NAME)
145
+ end
146
+
113
147
  def build_glob(ext)
114
148
  # Transform array into glob compliant pattern
115
149
  '{'.concat Array(ext).join(',').concat '}'
@@ -161,6 +195,16 @@ module RightPublish
161
195
  system("#{autosign} #{cmd}")
162
196
  end
163
197
 
198
+ # proxy method
199
+ def remote_storage
200
+ get_storage(Profile.config[:remote_storage][:provider])
201
+ end
202
+
203
+ # proxy method
204
+ def local_storage
205
+ get_storage(Profile.config[:local_storage][:provider])
206
+ end
207
+
164
208
  def get_storage(provider)
165
209
  type = RightPublish::StorageManager.storage_types[provider]
166
210
  RightPublish::StorageManager.get_storage(type)
@@ -168,7 +212,7 @@ module RightPublish
168
212
 
169
213
  def install_file(file, dest)
170
214
  Profile.log("#{file} => #{dest}")
171
- local_dir = get_storage(Profile.config[:local_storage][:provider]).get_directories
215
+ local_dir = local_storage.get_directories
172
216
  File.open(file, "rb") { |chunk| local_dir.files.create(:key => File.join(dest, File.basename(file)), :body => chunk) }
173
217
  end
174
218
 
@@ -181,8 +225,8 @@ module RightPublish
181
225
  Profile.config[@repository_type]
182
226
  end
183
227
 
184
- def repo_human_name(type)
185
- type.to_s.sub(/_/, ' ')
228
+ def repo_human_name
229
+ @repository_type.to_s.sub(/_/, ' ')
186
230
  end
187
231
 
188
232
  def sync_dirs(src, dest, subdir='')
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "right_publish"
8
- s.version = "0.4.2"
8
+ s.version = "0.5.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Brian Szmyd", "Tony Spataro"]
12
- s.date = "2013-11-01"
12
+ s.date = "2014-05-28"
13
13
  s.description = "A tool for maintaining S3-based DEB, GEM and RPM packages."
14
14
  s.email = "support@rightscale.com"
15
15
  s.executables = ["autosign.expect", "right_publish"]
@@ -19,6 +19,7 @@ Gem::Specification.new do |s|
19
19
  s.files = [
20
20
  ".gitignore",
21
21
  ".rspec",
22
+ "CHANGELOG.md",
22
23
  "Gemfile",
23
24
  "Gemfile.lock",
24
25
  "README.rdoc",
@@ -75,7 +76,7 @@ Gem::Specification.new do |s|
75
76
  s.add_development_dependency(%q<flexmock>, ["~> 0.9"])
76
77
  s.add_development_dependency(%q<simplecov>, [">= 0"])
77
78
  s.add_development_dependency(%q<ruby-debug>, [">= 0.10"])
78
- s.add_development_dependency(%q<ruby-debug19>, [">= 0.11.6"])
79
+ s.add_development_dependency(%q<debugger>, [">= 0"])
79
80
  else
80
81
  s.add_dependency(%q<builder>, [">= 0"])
81
82
  s.add_dependency(%q<fog>, ["~> 1.9"])
@@ -90,7 +91,7 @@ Gem::Specification.new do |s|
90
91
  s.add_dependency(%q<flexmock>, ["~> 0.9"])
91
92
  s.add_dependency(%q<simplecov>, [">= 0"])
92
93
  s.add_dependency(%q<ruby-debug>, [">= 0.10"])
93
- s.add_dependency(%q<ruby-debug19>, [">= 0.11.6"])
94
+ s.add_dependency(%q<debugger>, [">= 0"])
94
95
  end
95
96
  else
96
97
  s.add_dependency(%q<builder>, [">= 0"])
@@ -106,7 +107,7 @@ Gem::Specification.new do |s|
106
107
  s.add_dependency(%q<flexmock>, ["~> 0.9"])
107
108
  s.add_dependency(%q<simplecov>, [">= 0"])
108
109
  s.add_dependency(%q<ruby-debug>, [">= 0.10"])
109
- s.add_dependency(%q<ruby-debug19>, [">= 0.11.6"])
110
+ s.add_dependency(%q<debugger>, [">= 0"])
110
111
  end
111
112
  end
112
113
 
@@ -13,6 +13,7 @@ describe RightPublish::AptRepo do
13
13
  obj.should_receive(:do_in_subdir).and_return {|dir,block| block.call}
14
14
  obj.should_receive(:prune_all)
15
15
  obj.should_receive(:write_conf_file)
16
+ obj.should_receive(:lock).and_yield
16
17
  end
17
18
 
18
19
  flexmock(RightPublish::Profile) do |obj|
@@ -10,6 +10,7 @@ describe RightPublish::GemRepo do
10
10
  obj.should_receive(:annotate)
11
11
  obj.should_receive(:push)
12
12
  obj.should_receive(:do_in_subdir).and_return {|dir,block| block.call}
13
+ obj.should_receive(:lock).and_yield
13
14
  end
14
15
 
15
16
  flexmock(File) { |obj| obj.should_receive(:file?).and_return(true) }
@@ -22,6 +22,7 @@ describe RightPublish::YumRepo do
22
22
  obj.should_receive(:do_in_subdir).and_return {|dir,block| block.call}
23
23
  obj.should_receive(:yum_prune)
24
24
  obj.should_receive(:pkg_parts).and_return { |pkg| pkg_parts(pkg) }
25
+ obj.should_receive(:lock).and_yield
25
26
  end
26
27
 
27
28
  flexmock(RightPublish::Profile) do |obj|
data/spec/spec_helper.rb CHANGED
@@ -22,7 +22,7 @@
22
22
  require 'rubygems'
23
23
  require 'bundler/setup'
24
24
  require 'flexmock'
25
- require 'ruby-debug'
25
+ require 'debugger'
26
26
  require 'simplecov' unless RUBY_VERSION =~ /1\.8/
27
27
 
28
28
  # This is a Jewelerized project; it won't be activated as a gem when invoked in situ.
metadata CHANGED
@@ -1,247 +1,253 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: right_publish
3
- version: !ruby/object:Gem::Version
4
- hash: 11
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.0
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 4
9
- - 2
10
- version: 0.4.2
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Brian Szmyd
14
9
  - Tony Spataro
15
10
  autorequire:
16
11
  bindir: bin
17
12
  cert_chain: []
18
-
19
- date: 2013-11-18 00:00:00 Z
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
22
- version_requirements: &id001 !ruby/object:Gem::Requirement
13
+ date: 2014-05-28 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: builder
17
+ requirement: !ruby/object:Gem::Requirement
23
18
  none: false
24
- requirements:
25
- - - ">="
26
- - !ruby/object:Gem::Version
27
- hash: 3
28
- segments:
29
- - 0
30
- version: "0"
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
31
23
  type: :runtime
32
- requirement: *id001
33
24
  prerelease: false
34
- name: builder
35
- - !ruby/object:Gem::Dependency
36
- version_requirements: &id002 !ruby/object:Gem::Requirement
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ! '>='
29
+ - !ruby/object:Gem::Version
30
+ version: '0'
31
+ - !ruby/object:Gem::Dependency
32
+ name: fog
33
+ requirement: !ruby/object:Gem::Requirement
37
34
  none: false
38
- requirements:
35
+ requirements:
39
36
  - - ~>
40
- - !ruby/object:Gem::Version
41
- hash: 29
42
- segments:
43
- - 1
44
- - 9
45
- version: "1.9"
37
+ - !ruby/object:Gem::Version
38
+ version: '1.9'
46
39
  type: :runtime
47
- requirement: *id002
48
40
  prerelease: false
49
- name: fog
50
- - !ruby/object:Gem::Dependency
51
- version_requirements: &id003 !ruby/object:Gem::Requirement
41
+ version_requirements: !ruby/object:Gem::Requirement
52
42
  none: false
53
- requirements:
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: '1.9'
47
+ - !ruby/object:Gem::Dependency
48
+ name: excon
49
+ requirement: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
54
52
  - - <=
55
- - !ruby/object:Gem::Version
56
- hash: 125
57
- segments:
58
- - 0
59
- - 25
60
- - 3
53
+ - !ruby/object:Gem::Version
61
54
  version: 0.25.3
62
55
  type: :runtime
63
- requirement: *id003
64
56
  prerelease: false
65
- name: excon
66
- - !ruby/object:Gem::Dependency
67
- version_requirements: &id004 !ruby/object:Gem::Requirement
57
+ version_requirements: !ruby/object:Gem::Requirement
68
58
  none: false
69
- requirements:
70
- - - ~>
71
- - !ruby/object:Gem::Version
72
- hash: 15
73
- segments:
74
- - 1
75
- - 0
76
- version: "1.0"
77
- type: :runtime
78
- requirement: *id004
79
- prerelease: false
59
+ requirements:
60
+ - - <=
61
+ - !ruby/object:Gem::Version
62
+ version: 0.25.3
63
+ - !ruby/object:Gem::Dependency
80
64
  name: mime-types
81
- - !ruby/object:Gem::Dependency
82
- version_requirements: &id005 !ruby/object:Gem::Requirement
65
+ requirement: !ruby/object:Gem::Requirement
83
66
  none: false
84
- requirements:
67
+ requirements:
85
68
  - - ~>
86
- - !ruby/object:Gem::Version
87
- hash: 3
88
- segments:
89
- - 2
90
- - 0
91
- version: "2.0"
69
+ - !ruby/object:Gem::Version
70
+ version: '1.0'
92
71
  type: :runtime
93
- requirement: *id005
94
72
  prerelease: false
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ~>
77
+ - !ruby/object:Gem::Version
78
+ version: '1.0'
79
+ - !ruby/object:Gem::Dependency
95
80
  name: trollop
96
- - !ruby/object:Gem::Dependency
97
- version_requirements: &id006 !ruby/object:Gem::Requirement
81
+ requirement: !ruby/object:Gem::Requirement
98
82
  none: false
99
- requirements:
83
+ requirements:
100
84
  - - ~>
101
- - !ruby/object:Gem::Version
102
- hash: 25
103
- segments:
104
- - 0
105
- - 9
106
- version: "0.9"
107
- type: :development
108
- requirement: *id006
85
+ - !ruby/object:Gem::Version
86
+ version: '2.0'
87
+ type: :runtime
109
88
  prerelease: false
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ~>
93
+ - !ruby/object:Gem::Version
94
+ version: '2.0'
95
+ - !ruby/object:Gem::Dependency
110
96
  name: rake
111
- - !ruby/object:Gem::Dependency
112
- version_requirements: &id007 !ruby/object:Gem::Requirement
97
+ requirement: !ruby/object:Gem::Requirement
113
98
  none: false
114
- requirements:
99
+ requirements:
115
100
  - - ~>
116
- - !ruby/object:Gem::Version
117
- hash: 49
118
- segments:
119
- - 1
120
- - 8
121
- - 3
122
- version: 1.8.3
101
+ - !ruby/object:Gem::Version
102
+ version: '0.9'
123
103
  type: :development
124
- requirement: *id007
125
104
  prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: '0.9'
111
+ - !ruby/object:Gem::Dependency
126
112
  name: jeweler
127
- - !ruby/object:Gem::Dependency
128
- version_requirements: &id008 !ruby/object:Gem::Requirement
113
+ requirement: !ruby/object:Gem::Requirement
129
114
  none: false
130
- requirements:
115
+ requirements:
131
116
  - - ~>
132
- - !ruby/object:Gem::Version
133
- hash: 15
134
- segments:
135
- - 1
136
- - 0
137
- version: "1.0"
117
+ - !ruby/object:Gem::Version
118
+ version: 1.8.3
138
119
  type: :development
139
- requirement: *id008
140
120
  prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ none: false
123
+ requirements:
124
+ - - ~>
125
+ - !ruby/object:Gem::Version
126
+ version: 1.8.3
127
+ - !ruby/object:Gem::Dependency
141
128
  name: right_develop
142
- - !ruby/object:Gem::Dependency
143
- version_requirements: &id009 !ruby/object:Gem::Requirement
129
+ requirement: !ruby/object:Gem::Requirement
144
130
  none: false
145
- requirements:
146
- - - ">="
147
- - !ruby/object:Gem::Version
148
- hash: 27
149
- segments:
150
- - 2
151
- - 4
152
- - 2
153
- version: 2.4.2
131
+ requirements:
132
+ - - ~>
133
+ - !ruby/object:Gem::Version
134
+ version: '1.0'
154
135
  type: :development
155
- requirement: *id009
156
136
  prerelease: false
157
- name: rdoc
158
- - !ruby/object:Gem::Dependency
159
- version_requirements: &id010 !ruby/object:Gem::Requirement
137
+ version_requirements: !ruby/object:Gem::Requirement
160
138
  none: false
161
- requirements:
139
+ requirements:
162
140
  - - ~>
163
- - !ruby/object:Gem::Version
164
- hash: 3
165
- segments:
166
- - 2
167
- - 0
168
- version: "2.0"
141
+ - !ruby/object:Gem::Version
142
+ version: '1.0'
143
+ - !ruby/object:Gem::Dependency
144
+ name: rdoc
145
+ requirement: !ruby/object:Gem::Requirement
146
+ none: false
147
+ requirements:
148
+ - - ! '>='
149
+ - !ruby/object:Gem::Version
150
+ version: 2.4.2
169
151
  type: :development
170
- requirement: *id010
171
152
  prerelease: false
153
+ version_requirements: !ruby/object:Gem::Requirement
154
+ none: false
155
+ requirements:
156
+ - - ! '>='
157
+ - !ruby/object:Gem::Version
158
+ version: 2.4.2
159
+ - !ruby/object:Gem::Dependency
172
160
  name: rspec
173
- - !ruby/object:Gem::Dependency
174
- version_requirements: &id011 !ruby/object:Gem::Requirement
161
+ requirement: !ruby/object:Gem::Requirement
175
162
  none: false
176
- requirements:
163
+ requirements:
177
164
  - - ~>
178
- - !ruby/object:Gem::Version
179
- hash: 25
180
- segments:
181
- - 0
182
- - 9
183
- version: "0.9"
165
+ - !ruby/object:Gem::Version
166
+ version: '2.0'
184
167
  type: :development
185
- requirement: *id011
186
168
  prerelease: false
169
+ version_requirements: !ruby/object:Gem::Requirement
170
+ none: false
171
+ requirements:
172
+ - - ~>
173
+ - !ruby/object:Gem::Version
174
+ version: '2.0'
175
+ - !ruby/object:Gem::Dependency
187
176
  name: flexmock
188
- - !ruby/object:Gem::Dependency
189
- version_requirements: &id012 !ruby/object:Gem::Requirement
177
+ requirement: !ruby/object:Gem::Requirement
190
178
  none: false
191
- requirements:
192
- - - ">="
193
- - !ruby/object:Gem::Version
194
- hash: 3
195
- segments:
196
- - 0
197
- version: "0"
179
+ requirements:
180
+ - - ~>
181
+ - !ruby/object:Gem::Version
182
+ version: '0.9'
198
183
  type: :development
199
- requirement: *id012
200
184
  prerelease: false
185
+ version_requirements: !ruby/object:Gem::Requirement
186
+ none: false
187
+ requirements:
188
+ - - ~>
189
+ - !ruby/object:Gem::Version
190
+ version: '0.9'
191
+ - !ruby/object:Gem::Dependency
201
192
  name: simplecov
202
- - !ruby/object:Gem::Dependency
203
- version_requirements: &id013 !ruby/object:Gem::Requirement
193
+ requirement: !ruby/object:Gem::Requirement
204
194
  none: false
205
- requirements:
206
- - - ">="
207
- - !ruby/object:Gem::Version
208
- hash: 31
209
- segments:
210
- - 0
211
- - 10
212
- version: "0.10"
195
+ requirements:
196
+ - - ! '>='
197
+ - !ruby/object:Gem::Version
198
+ version: '0'
213
199
  type: :development
214
- requirement: *id013
215
200
  prerelease: false
201
+ version_requirements: !ruby/object:Gem::Requirement
202
+ none: false
203
+ requirements:
204
+ - - ! '>='
205
+ - !ruby/object:Gem::Version
206
+ version: '0'
207
+ - !ruby/object:Gem::Dependency
216
208
  name: ruby-debug
217
- - !ruby/object:Gem::Dependency
218
- version_requirements: &id014 !ruby/object:Gem::Requirement
209
+ requirement: !ruby/object:Gem::Requirement
210
+ none: false
211
+ requirements:
212
+ - - ! '>='
213
+ - !ruby/object:Gem::Version
214
+ version: '0.10'
215
+ type: :development
216
+ prerelease: false
217
+ version_requirements: !ruby/object:Gem::Requirement
218
+ none: false
219
+ requirements:
220
+ - - ! '>='
221
+ - !ruby/object:Gem::Version
222
+ version: '0.10'
223
+ - !ruby/object:Gem::Dependency
224
+ name: debugger
225
+ requirement: !ruby/object:Gem::Requirement
219
226
  none: false
220
- requirements:
221
- - - ">="
222
- - !ruby/object:Gem::Version
223
- hash: 63
224
- segments:
225
- - 0
226
- - 11
227
- - 6
228
- version: 0.11.6
227
+ requirements:
228
+ - - ! '>='
229
+ - !ruby/object:Gem::Version
230
+ version: '0'
229
231
  type: :development
230
- requirement: *id014
231
232
  prerelease: false
232
- name: ruby-debug19
233
+ version_requirements: !ruby/object:Gem::Requirement
234
+ none: false
235
+ requirements:
236
+ - - ! '>='
237
+ - !ruby/object:Gem::Version
238
+ version: '0'
233
239
  description: A tool for maintaining S3-based DEB, GEM and RPM packages.
234
240
  email: support@rightscale.com
235
- executables:
236
- - right_publish
241
+ executables:
237
242
  - autosign.expect
243
+ - right_publish
238
244
  extensions: []
239
-
240
- extra_rdoc_files:
245
+ extra_rdoc_files:
241
246
  - README.rdoc
242
- files:
247
+ files:
243
248
  - .gitignore
244
249
  - .rspec
250
+ - CHANGELOG.md
245
251
  - Gemfile
246
252
  - Gemfile.lock
247
253
  - README.rdoc
@@ -275,37 +281,31 @@ files:
275
281
  - spec/stores/local_spec.rb
276
282
  - spec/stores/s3_spec.rb
277
283
  homepage: https://github.com/rightscale/right_publish
278
- licenses:
284
+ licenses:
279
285
  - Proprietary
280
286
  post_install_message:
281
287
  rdoc_options: []
282
-
283
- require_paths:
288
+ require_paths:
284
289
  - lib
285
- required_ruby_version: !ruby/object:Gem::Requirement
290
+ required_ruby_version: !ruby/object:Gem::Requirement
286
291
  none: false
287
- requirements:
288
- - - ">="
289
- - !ruby/object:Gem::Version
290
- hash: 3
291
- segments:
292
+ requirements:
293
+ - - ! '>='
294
+ - !ruby/object:Gem::Version
295
+ version: '0'
296
+ segments:
292
297
  - 0
293
- version: "0"
294
- required_rubygems_version: !ruby/object:Gem::Requirement
298
+ hash: 2556348436835479702
299
+ required_rubygems_version: !ruby/object:Gem::Requirement
295
300
  none: false
296
- requirements:
297
- - - ">="
298
- - !ruby/object:Gem::Version
299
- hash: 3
300
- segments:
301
- - 0
302
- version: "0"
301
+ requirements:
302
+ - - ! '>='
303
+ - !ruby/object:Gem::Version
304
+ version: '0'
303
305
  requirements: []
304
-
305
306
  rubyforge_project:
306
- rubygems_version: 1.8.15
307
+ rubygems_version: 1.8.23
307
308
  signing_key:
308
309
  specification_version: 3
309
310
  summary: Package publishing and indexing tool
310
311
  test_files: []
311
-