frm 0.0.5 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
data/lib/frm/base.rb CHANGED
@@ -1,12 +1,5 @@
1
1
  module FRM
2
2
  class Base
3
- # my_dir = File.dirname __FILE__
4
- # require File.join my_dir, 's3'
5
- require 'zlib'
6
- require 'tempfile'
7
- require 'digest/md5'
8
- require 'digest/sha1'
9
- require 'digest/sha2'
10
3
 
11
4
  def compute_md5(string)
12
5
  Digest::MD5.hexdigest(string)
@@ -73,9 +66,56 @@ module FRM
73
66
 
74
67
  def merge_package_file(in_pipe,out_pipe,package_list)
75
68
  sorted_list = package_list.sort { |a,b| a['Package'] <=> b['Package'] }
76
- # while (next_stub = parse_package_stub in_pipe)
77
- # STDERR.puts "next_stub[0] = #{next_stub[0]}"
78
- # end
69
+ merge(in_pipe,out_pipe,sorted_list)
79
70
  end
71
+
72
+ private
73
+
74
+ def create_package_stub(package_hash)
75
+ return_value = ''
76
+ package_hash.each do |key,value|
77
+ return_value << "#{key}: #{value}\n"
78
+ end
79
+ return_value << "\n"
80
+ end
81
+
82
+ def merge(in_pipe,out_pipe,package_list)
83
+ return if out_pipe.closed?
84
+ return if in_pipe.closed? and package_list.empty
85
+
86
+ if package_list.empty?
87
+ while line = in_pipe.gets
88
+ out_pipe.puts line
89
+ end
90
+ in_pipe.close
91
+ out_pipe.close
92
+ return
93
+ end
94
+
95
+ if in_pipe.closed?
96
+ package_list.each {|package_hash| out_pipe.write(create_package_stub(package_hash)) }
97
+ out_pipe.close
98
+ return
99
+ end
100
+
101
+ current_package, stub = parse_package_stub in_pipe
102
+
103
+ if current_package['Package'] < package_list.first['Package']
104
+ out_pipe.puts stub
105
+ out_pipe.puts ""
106
+ merge(in_pipe,out_pipe,package_list)
107
+ return
108
+ elsif current_package['Package'] > package_list.first['Package']
109
+ while ( ! package_list.empty? ) and current_package['Package'] > package_list.first['Package']
110
+ out_pipe.write create_package_stub(package_list.shift)
111
+ end
112
+ elsif current_package['Package'] == package_list.first['Package']
113
+ out_pipe.write create_package_stub(package_list.shift)
114
+ end
115
+
116
+ merge(in_pipe,out_pipe,package_list)
117
+ return nil
118
+ end
119
+
80
120
  end
81
121
  end
data/lib/frm/deb.rb CHANGED
@@ -1,152 +1,5 @@
1
- DEFAULT_HOST = 's3-us-west-1.amazonaws.com' # stupid hack to point to
2
- # the right region
3
-
4
1
  module FRM
5
2
 
6
- class Package < Base
7
- attr_accessor :repo_filename
8
- attr_reader :path, :content, :md5, :sha1, :sha2 , :size, :release
9
- def initialize(path,release='natty')
10
- raise "you need to specify a path!!!" if path.nil?
11
- @path = path
12
- raise "Can not find file '#{path}'" unless File.exists?(path)
13
- @release = release
14
- begin
15
- @content = File.read(path)
16
- rescue Object => o
17
- STDERR.puts "Could not open file '#{path}'. Exiting..."
18
- STDERR.puts o.inspect
19
- STDERR.puts o.backtrace
20
- raise "Could not open file '#{path}'. Exiting..."
21
- end
22
- @size = File.size(@path)
23
- @md5 = compute_md5(@content)
24
- @sha1 = compute_sha1(@content)
25
- @sha2 = compute_sha2(@content)
26
- end
27
- end
28
-
29
- class PackageRelease < Base
30
- attr_reader :packages, :standards_version, :priority, :package_file, :gzipped_package_file, :release_file, :short_release_file, :component, :release
31
- def initialize(packages={},release='natty',component='main/binary-amd64')
32
- @release = release
33
- @component = component
34
- @standards_version = standards_version
35
- @priority = priority
36
- @packages = []
37
- packages.each { |package| @packages << Package.new(package,@release) }
38
- @package_file = generate_package_file
39
- @gzipped_package_file = generate_gzip_pipe(@package_file).read
40
- @short_release_file = generate_short_release_file
41
- @release_file = generate_release_file
42
- end
43
-
44
- private
45
-
46
- def generate_release_file()
47
- partial_release_file = "Origin: apt.cloudscaling.com
48
- Label: apt repository #{@release}
49
- Codename: #{@release}
50
- Date: Thu, 22 Dec 2011 00:29:55 UTC
51
- Architectures: amd64
52
- Components: main universe multiverse
53
- Description: Cloudscaling APT repository
54
- MD5Sum:
55
- #{compute_md5(@package_file)} #{@package_file.size} #{@component}/Packages
56
- #{compute_md5(@gzipped_package_file)} #{@gzipped_package_file.size} #{@component}/Packages.gz
57
- #{compute_md5(@short_release_file)} #{@short_release_file.size} #{@component}/Release
58
- SHA1:
59
- #{compute_sha1(@package_file)} #{@package_file.size} #{@component}/Packages
60
- #{compute_sha1(@gzipped_package_file)} #{@gzipped_package_file.size} #{@component}/Packages.gz
61
- #{compute_sha1(@short_release_file)} #{@short_release_file.size} #{@component}/Release
62
- SHA256:
63
- #{compute_sha2(@package_file)} #{@package_file.size} #{@component}/Packages
64
- #{compute_sha2(@gzipped_package_file)} #{@gzipped_package_file.size} #{@component}/Packages.gz
65
- #{compute_sha2(@short_release_file)} #{@short_release_file.size} #{@component}/Release
66
- "
67
- return partial_release_file
68
- end
69
-
70
- def generate_short_release_file
71
- "Component: main
72
- Origin: apt.cloudscaling.com
73
- Label: apt repository #{@release}
74
- Architecture: amd64
75
- Description: Cloudscaling APT repository
76
- "
77
- end
78
-
79
-
80
- def filename(package)
81
- filename = File.basename package.path
82
- shortname = `dpkg --field #{package.path} Package`.chomp
83
- first_letter = shortname[0]
84
- package.repo_filename = "pool/main/#{first_letter}/#{shortname}/#{filename}"
85
- end
86
-
87
- def generate_package_file()
88
- package_file = ''
89
- @packages.each { |package| package_file << generate_package_stub(package) }
90
- return package_file
91
- end
92
-
93
- def generate_package_stub(package)
94
- package_stub = ''
95
- package_stub << `dpkg --field #{package.path}`
96
- package_stub << "Filename: #{filename(package)}\n"
97
- package_stub << "Size: #{package.size}\n"
98
- package_stub << "MD5sum: #{package.md5}\n"
99
- package_stub << "SHA1: #{package.sha1}\n"
100
- package_stub << "SHA256: #{package.sha2}\n"
101
- package_stub << "\n"
102
- return package_stub
103
- end
104
- end
105
-
106
- class ReleasePusher < Base
107
- def initialize(package_release,access_key,secret_key,bucket,prefix,server='s3-us-west-1.amazonaws.com')
108
- @release = package_release.release
109
- @bucket = bucket
110
- @prefix = prefix
111
- @s3 = FRM::S3.new(access_key,secret_key,server)
112
- push_packages(package_release.packages)
113
- push_release_files(package_release)
114
- end
115
-
116
- private
117
-
118
-
119
- def push_release_files(package_release)
120
- # TODO: un-hardcode this
121
- release_path = @prefix + "/dists/#{@release}/Release"
122
- @s3.put(release_path,package_release.release_file,@bucket)
123
-
124
- in_release_path = @prefix + "/dists/#{@release}/InRelease"
125
- @s3.put(in_release_path,gpg_clearsign(package_release.release_file),@bucket)
126
-
127
- gpg_release_path = @prefix + "/dists/#{@release}/Release.gpg"
128
- @s3.put(gpg_release_path,gpg_detached(package_release.release_file),@bucket)
129
-
130
- release_file_path = @prefix + "/dists/#{@release}/" + package_release.component
131
- @s3.put(release_file_path + '/Release',package_release.short_release_file,@bucket)
132
- @s3.put(release_file_path + '/Packages',package_release.package_file,@bucket)
133
- @s3.put(release_file_path + '/Packages.gz',package_release.gzipped_package_file,@bucket)
134
- end
135
-
136
-
137
- def push_packages(packages)
138
- packages.each { |package| push_package(package) }
139
- end
140
-
141
- def push_package(package)
142
- remote_path = @prefix + '/' + package.repo_filename
143
- @s3.put(remote_path,package.content,@bucket)
144
- end
145
-
146
-
147
- end
148
-
149
-
150
3
 
151
4
  class Deb < Base
152
5
 
@@ -154,7 +7,7 @@ Description: Cloudscaling APT repository
154
7
  end
155
8
 
156
9
  def generate_package_file(in_packages=[])
157
- packages = in_packages.dup
10
+ packages = in_packages.sort { |a,b| a['Package'] <=> b['Package'] }
158
11
  package_file = ''
159
12
  packages.each { |package| package_file << generate_package_stub(package) }
160
13
  return package_file
@@ -0,0 +1,24 @@
1
+ module FRM
2
+ class Package < Base
3
+ attr_accessor :repo_filename
4
+ attr_reader :path, :content, :md5, :sha1, :sha2 , :size, :release
5
+ def initialize(path,release='natty')
6
+ raise "you need to specify a path!!!" if path.nil?
7
+ @path = path
8
+ raise "Can not find file '#{path}'" unless File.exists?(path)
9
+ @release = release
10
+ begin
11
+ @content = File.read(path)
12
+ rescue Object => o
13
+ STDERR.puts "Could not open file '#{path}'. Exiting..."
14
+ STDERR.puts o.inspect
15
+ STDERR.puts o.backtrace
16
+ raise "Could not open file '#{path}'. Exiting..."
17
+ end
18
+ @size = File.size(@path)
19
+ @md5 = compute_md5(@content)
20
+ @sha1 = compute_sha1(@content)
21
+ @sha2 = compute_sha2(@content)
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,107 @@
1
+ module FRM
2
+
3
+ class PackageRelease < Base
4
+ attr_reader :packages, :standards_version, :priority, :package_file, :gzipped_package_file, :release_file, :short_release_file, :component, :release, :i386_release_file, :i386_packages_file, :gzipped_i386_packages_file
5
+ def initialize(packages={},release='natty',component='main/binary-amd64')
6
+ @release = release
7
+ @component = component
8
+ @standards_version = standards_version
9
+ @priority = priority
10
+ @packages = []
11
+ packages.each { |package| @packages << Package.new(package,@release) }
12
+ if component == 'main/binary-amd64'
13
+ generate_i386_stubs
14
+ end
15
+ @i386_release_file = <<EOF
16
+ Component: main
17
+ Origin: apt.cloudscaling.com
18
+ Label: apt repository #{@release}
19
+ Architecture: i386
20
+ Description: Cloudscaling APT repository
21
+ EOF
22
+ @i386_packages_file = ""
23
+ @gzipped_i386_packages_file = generate_gzip_pipe(@i386_packages_file).read
24
+ @package_file = generate_package_file
25
+ @gzipped_package_file = generate_gzip_pipe(@package_file).read
26
+ @short_release_file = generate_short_release_file
27
+ @release_file = generate_release_file
28
+ end
29
+
30
+ private
31
+
32
+
33
+ # ubuntu precicse 64 wants i386 debs by default :\
34
+ def generate_i386_stubs()
35
+ end
36
+
37
+
38
+ def generate_release_file()
39
+ partial_release_file = "Origin: apt.cloudscaling.com
40
+ Label: apt repository #{@release}
41
+ Codename: #{@release}
42
+ Date: Thu, 22 Dec 2011 00:29:55 UTC
43
+ Architectures: amd64 i386
44
+ Components: main universe multiverse
45
+ Description: Cloudscaling APT repository
46
+ MD5Sum:
47
+ #{compute_md5(@package_file)} #{@package_file.size} #{@component}/Packages
48
+ #{compute_md5(@gzipped_package_file)} #{@gzipped_package_file.size} #{@component}/Packages.gz
49
+ #{compute_md5(@short_release_file)} #{@short_release_file.size} #{@component}/Release
50
+ #{compute_md5(@i386_packages_file)} #{@i386_packages_file.size} main/binary-i386/Packages
51
+ #{compute_md5(@gzipped_i386_packages_file)} #{@gzipped_i386_packages_file.size} main/binary-i386/Packages.gz
52
+ #{compute_md5(@i386_release_file)} #{@i386_release_file.size} main/binary-i386/Release
53
+ SHA1:
54
+ #{compute_sha1(@package_file)} #{@package_file.size} #{@component}/Packages
55
+ #{compute_sha1(@gzipped_package_file)} #{@gzipped_package_file.size} #{@component}/Packages.gz
56
+ #{compute_sha1(@short_release_file)} #{@short_release_file.size} #{@component}/Release
57
+ #{compute_sha1(@i386_packages_file)} #{@i386_packages_file.size} main/binary-i386/Packages
58
+ #{compute_sha1(@gzipped_i386_packages_file)} #{@gzipped_i386_packages_file.size} main/binary-i386/Packages.gz
59
+ #{compute_sha1(@i386_release_file)} #{@i386_release_file.size} main/binary-i386/Release
60
+ SHA256:
61
+ #{compute_sha2(@package_file)} #{@package_file.size} #{@component}/Packages
62
+ #{compute_sha2(@gzipped_package_file)} #{@gzipped_package_file.size} #{@component}/Packages.gz
63
+ #{compute_sha2(@short_release_file)} #{@short_release_file.size} #{@component}/Release
64
+ #{compute_sha2(@i386_packages_file)} #{@i386_packages_file.size} main/binary-i386/Packages
65
+ #{compute_sha2(@gzipped_i386_packages_file)} #{@gzipped_i386_packages_file.size} main/binary-i386/Packages.gz
66
+ #{compute_sha2(@i386_release_file)} #{@i386_release_file.size} main/binary-i386/Release
67
+ "
68
+ return partial_release_file
69
+ end
70
+
71
+
72
+ def generate_short_release_file
73
+ "Component: main
74
+ Origin: apt.cloudscaling.com
75
+ Label: apt repository #{@release}
76
+ Architecture: amd64
77
+ Description: Cloudscaling APT repository
78
+ "
79
+ end
80
+
81
+
82
+ def filename(package)
83
+ filename = File.basename package.path
84
+ shortname = `dpkg --field #{package.path} Package`.chomp
85
+ first_letter = shortname[0]
86
+ package.repo_filename = "pool/main/#{first_letter}/#{shortname}/#{filename}"
87
+ end
88
+
89
+ def generate_package_file()
90
+ package_file = ''
91
+ @packages.each { |package| package_file << generate_package_stub(package) }
92
+ return package_file
93
+ end
94
+
95
+ def generate_package_stub(package)
96
+ package_stub = ''
97
+ package_stub << `dpkg --field #{package.path}`
98
+ package_stub << "Filename: #{filename(package)}\n"
99
+ package_stub << "Size: #{package.size}\n"
100
+ package_stub << "MD5sum: #{package.md5}\n"
101
+ package_stub << "SHA1: #{package.sha1}\n"
102
+ package_stub << "SHA256: #{package.sha2}\n"
103
+ package_stub << "\n"
104
+ return package_stub
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,52 @@
1
+ module FRM
2
+
3
+ class ReleasePusher < Base
4
+ def initialize(package_release,access_key,secret_key,bucket,prefix,server='s3-us-west-1.amazonaws.com')
5
+ @release = package_release.release
6
+ @bucket = bucket
7
+ @prefix = prefix
8
+ @s3 = FRM::S3.new(access_key,secret_key,server)
9
+ push_packages(package_release.packages)
10
+ push_release_files(package_release)
11
+ end
12
+
13
+ private
14
+
15
+
16
+ def push_release_files(package_release)
17
+ # TODO: un-hardcode this
18
+ release_path = @prefix + "/dists/#{@release}/Release"
19
+ @s3.put(release_path,package_release.release_file,@bucket)
20
+
21
+ in_release_path = @prefix + "/dists/#{@release}/InRelease"
22
+ @s3.put(in_release_path,gpg_clearsign(package_release.release_file),@bucket)
23
+
24
+ gpg_release_path = @prefix + "/dists/#{@release}/Release.gpg"
25
+ @s3.put(gpg_release_path,gpg_detached(package_release.release_file),@bucket)
26
+
27
+ release_file_path = @prefix + "/dists/#{@release}/" + package_release.component
28
+ @s3.put(release_file_path + '/Release',package_release.short_release_file,@bucket)
29
+ @s3.put(release_file_path + '/Packages',package_release.package_file,@bucket)
30
+ @s3.put(release_file_path + '/Packages.gz',package_release.gzipped_package_file,@bucket)
31
+
32
+
33
+ i386_release_file_path = @prefix + "/dists/#{@release}/" + 'main/binary-i386'
34
+ @s3.put(i386_release_file_path + '/Release',package_release.i386_release_file,@bucket)
35
+ @s3.put(i386_release_file_path + '/Packages',package_release.i386_packages_file,@bucket)
36
+ @s3.put(i386_release_file_path + '/Packages.gz',package_release.gzipped_i386_packages_file,@bucket)
37
+ end
38
+
39
+
40
+ def push_packages(packages)
41
+ packages.each { |package| push_package(package) }
42
+ end
43
+
44
+ def push_package(package)
45
+ remote_path = @prefix + '/' + package.repo_filename
46
+ @s3.put(remote_path,package.content,@bucket)
47
+ end
48
+
49
+
50
+ end
51
+
52
+ end
data/lib/frm/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Frm
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.7"
3
3
  end
data/lib/frm.rb CHANGED
@@ -1,3 +1,15 @@
1
+ DEFAULT_HOST = 's3-us-west-1.amazonaws.com' # stupid hack to point to the right s3 region
2
+
3
+ require 'zlib'
4
+ require 'tempfile'
5
+ require 'digest/md5'
6
+ require 'digest/sha1'
7
+ require 'digest/sha2'
8
+
1
9
  require 'frm/base'
2
10
  require 'frm/s3'
11
+ require 'frm/package'
12
+ require 'frm/release'
13
+ require 'frm/release_pusher'
3
14
  require 'frm/deb'
15
+
data/test/deb_test.rb CHANGED
@@ -94,7 +94,7 @@ Description: Cloudscaling APT repository
94
94
  Label: apt repository natty
95
95
  Codename: natty
96
96
  Date: Thu, 22 Dec 2011 00:29:55 UTC
97
- Architectures: amd64
97
+ Architectures: amd64 i386
98
98
  Components: main universe multiverse
99
99
  Description: Cloudscaling APT repository
100
100
  MD5Sum:
@@ -178,6 +178,17 @@ class TestDeb < MiniTest::Unit::TestCase
178
178
  "Depends" => %w{one two three},
179
179
  "section" => "main",
180
180
  "path_to_deb" => '/tmp/bar_1.2.3.4_amd64.deb'
181
+ },
182
+ {
183
+ "Package" => "qqq",
184
+ "Version" => "1.2.3.4",
185
+ "Architecture" => "amd64",
186
+ "Maintainer" => "support@cloudscaling.com",
187
+ "Homepage" => "http://www.cloudscaling.com",
188
+ "Priority" => "extra",
189
+ "Depends" => %w{one two three},
190
+ "section" => "main",
191
+ "path_to_deb" => '/tmp/bar_1.2.3.4_amd64.deb'
181
192
  }
182
193
  ]
183
194
  end
@@ -214,7 +225,21 @@ Description: some
214
225
 
215
226
 
216
227
  def test_generate_package_file
217
- correct_output = "Package: foo
228
+ correct_output = 'Package: bar
229
+ Version: 1.2.3.4
230
+ Architecture: amd64
231
+ Maintainer: <support@cloudscaling.com>
232
+ Homepage: http://www.cloudscaling.com
233
+ Priority: extra
234
+ Depends: one, two, three
235
+ Filename: pool/main/b/bar/bar_1.2.3.4_amd64.deb
236
+ Size: 3
237
+ MD5sum: 37b51d194a7513e45b56f6524f2d51f2
238
+ SHA1: 62cdb7020ff920e5aa642c3d4066950dd1f01f4d
239
+ SHA256: fcde2b2edba56bf408601fb721fe9b5c338d10ee429ea04fae5511b68fbf8fb9
240
+ Description: no description given
241
+
242
+ Package: foo
218
243
  Version: 1.2.68
219
244
  Architecture: amd64
220
245
  Maintainer: <support@cloudscaling.com>
@@ -230,21 +255,21 @@ Description: some
230
255
  multiline
231
256
  description
232
257
 
233
- Package: bar
258
+ Package: qqq
234
259
  Version: 1.2.3.4
235
260
  Architecture: amd64
236
261
  Maintainer: <support@cloudscaling.com>
237
262
  Homepage: http://www.cloudscaling.com
238
263
  Priority: extra
239
264
  Depends: one, two, three
240
- Filename: pool/main/b/bar/bar_1.2.3.4_amd64.deb
265
+ Filename: pool/main/q/qqq/qqq_1.2.3.4_amd64.deb
241
266
  Size: 3
242
267
  MD5sum: 37b51d194a7513e45b56f6524f2d51f2
243
268
  SHA1: 62cdb7020ff920e5aa642c3d4066950dd1f01f4d
244
269
  SHA256: fcde2b2edba56bf408601fb721fe9b5c338d10ee429ea04fae5511b68fbf8fb9
245
270
  Description: no description given
246
271
 
247
- "
272
+ '
248
273
  assert @deb.generate_package_file(@hash) == correct_output
249
274
  end
250
275
 
@@ -329,9 +354,8 @@ Description: no description given
329
354
  def test_merge_package_file
330
355
  package_file = File.open File.join @@frm_test_base, 'Packages.txt'
331
356
  read_buffer, write_buffer = IO.pipe
332
-
333
- @deb.merge_package_file(package_file,write_buffer,@hash)
334
-
357
+ merged_list = @deb.merge_package_file(package_file,write_buffer,@hash)
358
+ assert true
335
359
  end
336
360
 
337
361
 
metadata CHANGED
@@ -1,58 +1,56 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: frm
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 0
8
- - 5
9
- version: 0.0.5
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.7
5
+ prerelease:
10
6
  platform: ruby
11
- authors:
7
+ authors:
12
8
  - Martin Rhoads
13
9
  autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
-
17
- date: 2012-05-23 00:00:00 -07:00
18
- default_executable:
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2012-08-14 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: aws-s3
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- segments:
29
- - 0
30
- version: "0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
31
22
  type: :runtime
32
- version_requirements: *id001
33
- - !ruby/object:Gem::Dependency
34
- name: mock-aws-s3
35
23
  prerelease: false
36
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: mock-aws-s3
32
+ requirement: !ruby/object:Gem::Requirement
37
33
  none: false
38
- requirements:
39
- - - ">="
40
- - !ruby/object:Gem::Version
41
- segments:
42
- - 0
43
- version: "0"
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
44
38
  type: :development
45
- version_requirements: *id002
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
46
  description: FRM makes it easy to build package repositories on S3
47
- email:
47
+ email:
48
48
  - ermal14@gmail.com
49
- executables:
49
+ executables:
50
50
  - frm
51
51
  extensions: []
52
-
53
52
  extra_rdoc_files: []
54
-
55
- files:
53
+ files:
56
54
  - .gitignore
57
55
  - Gemfile
58
56
  - LICENSE
@@ -63,6 +61,9 @@ files:
63
61
  - lib/frm.rb
64
62
  - lib/frm/base.rb
65
63
  - lib/frm/deb.rb
64
+ - lib/frm/package.rb
65
+ - lib/frm/release.rb
66
+ - lib/frm/release_pusher.rb
66
67
  - lib/frm/s3.rb
67
68
  - lib/frm/version.rb
68
69
  - test/Packages.txt
@@ -73,37 +74,36 @@ files:
73
74
  - test/lib/test.rb
74
75
  - test/rake.rb
75
76
  - test/s3.rb
76
- has_rdoc: true
77
77
  homepage: https://github.com/ermal14/frm
78
78
  licenses: []
79
-
80
79
  post_install_message:
81
80
  rdoc_options: []
82
-
83
- require_paths:
81
+ require_paths:
84
82
  - lib
85
- required_ruby_version: !ruby/object:Gem::Requirement
83
+ required_ruby_version: !ruby/object:Gem::Requirement
86
84
  none: false
87
- requirements:
88
- - - ">="
89
- - !ruby/object:Gem::Version
90
- segments:
91
- - 0
92
- version: "0"
93
- required_rubygems_version: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ! '>='
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ required_rubygems_version: !ruby/object:Gem::Requirement
94
90
  none: false
95
- requirements:
96
- - - ">="
97
- - !ruby/object:Gem::Version
98
- segments:
99
- - 0
100
- version: "0"
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
101
95
  requirements: []
102
-
103
96
  rubyforge_project: frm
104
- rubygems_version: 1.3.7.1
97
+ rubygems_version: 1.8.23
105
98
  signing_key:
106
99
  specification_version: 3
107
100
  summary: Effin Repo Manager
108
- test_files: []
109
-
101
+ test_files:
102
+ - test/Packages.txt
103
+ - test/deb.rb
104
+ - test/deb_test.rb
105
+ - test/debs/frm_bar-1.0.0.deb
106
+ - test/debs/frm_foo-1.0.0.deb
107
+ - test/lib/test.rb
108
+ - test/rake.rb
109
+ - test/s3.rb