frm 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +3 -0
- data/Rakefile +5 -2
- data/bin/frm +5 -2
- data/frm.gemspec +5 -0
- data/lib/frm/base.rb +81 -0
- data/lib/frm/deb.rb +1 -123
- data/lib/frm/s3.rb +1 -1
- data/lib/frm/version.rb +1 -1
- data/lib/frm.rb +3 -3
- data/test/Packages.txt +155 -0
- data/test/{deb_test2.rb → deb.rb} +4 -9
- data/test/deb_test.rb +53 -172
- data/test/debs/frm_bar-1.0.0.deb +0 -0
- data/test/debs/frm_foo-1.0.0.deb +0 -0
- data/test/lib/test.rb +13 -0
- data/test/rake.rb +27 -0
- data/test/s3.rb +2 -4
- metadata +38 -9
data/.gitignore
CHANGED
data/Rakefile
CHANGED
@@ -1,13 +1,16 @@
|
|
1
1
|
require 'bundler'
|
2
2
|
Bundler::GemHelper.install_tasks
|
3
3
|
|
4
|
-
frm_base = File.dirname __FILE__
|
4
|
+
@frm_base = File.dirname __FILE__
|
5
|
+
|
6
|
+
require File.join @frm_base, 'test', 'rake'
|
7
|
+
|
5
8
|
|
6
9
|
namespace :bump do
|
7
10
|
|
8
11
|
desc "bump the patch version number"
|
9
12
|
task :patch do
|
10
|
-
version_file_path = File.join frm_base, 'lib', 'frm', 'version.rb'
|
13
|
+
version_file_path = File.join @frm_base, 'lib', 'frm', 'version.rb'
|
11
14
|
current_version_file = File.read version_file_path
|
12
15
|
current_version_file =~ /VERSION[^\d]+(\d+)\.(\d+)\.(\d+)(\.([^'"]*))?/
|
13
16
|
major,minor,patch = $1, $2, $3
|
data/bin/frm
CHANGED
@@ -19,7 +19,10 @@ def print_and_exit(message)
|
|
19
19
|
end
|
20
20
|
|
21
21
|
optparse = OptionParser.new do|opts|
|
22
|
-
opts.banner = "
|
22
|
+
opts.banner = "Welcome to Effin Repo Manager
|
23
|
+
FRM allows you to easily create debian repos on S3
|
24
|
+
|
25
|
+
Usage: frm [options] package1 [package2] ..."
|
23
26
|
|
24
27
|
options[:access_key] = nil
|
25
28
|
opts.on( '-a', '--access-key ACCESS_KEY', 'S3 public access key' ) do |key|
|
@@ -80,7 +83,7 @@ end
|
|
80
83
|
Dir.chdir(File.dirname(File.dirname(__FILE__)))
|
81
84
|
|
82
85
|
# require the necessary FRM libs
|
83
|
-
require File.join Dir.pwd, 'lib', '
|
86
|
+
require File.join Dir.pwd, 'lib', 'frm'
|
84
87
|
|
85
88
|
puts "creating release..."
|
86
89
|
package_release = FRM::PackageRelease.new(packages)
|
data/frm.gemspec
CHANGED
@@ -19,4 +19,9 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
20
|
s.require_paths = ["bin"]
|
21
21
|
s.require_paths = ["lib"]
|
22
|
+
|
23
|
+
s.add_dependency('aws-s3')
|
24
|
+
|
25
|
+
s.add_development_dependency('mock-aws-s3')
|
22
26
|
end
|
27
|
+
|
data/lib/frm/base.rb
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
module FRM
|
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
|
+
|
11
|
+
def compute_md5(string)
|
12
|
+
Digest::MD5.hexdigest(string)
|
13
|
+
end
|
14
|
+
|
15
|
+
def compute_sha1(string)
|
16
|
+
Digest::SHA1.hexdigest(string)
|
17
|
+
end
|
18
|
+
|
19
|
+
def compute_sha2(string)
|
20
|
+
Digest::SHA2.hexdigest(string)
|
21
|
+
end
|
22
|
+
|
23
|
+
# TODO:
|
24
|
+
# there has to be a better way to use gpg withen ruby. found many
|
25
|
+
# broken solutions :\
|
26
|
+
def gpg_clearsign(message)
|
27
|
+
`echo "#{message}" | gpg --clearsign`
|
28
|
+
end
|
29
|
+
|
30
|
+
# TODO: same as above
|
31
|
+
def gpg_detached(message)
|
32
|
+
`echo "#{message}" | gpg -abs`
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
def generate_gzip_pipe(contents)
|
37
|
+
read_buffer, write_buffer = IO.pipe
|
38
|
+
gzip_writer = Zlib::GzipWriter.new write_buffer
|
39
|
+
gzip_writer.mtime = 1 # ensure that the header is determinstic
|
40
|
+
gzip_writer.write contents
|
41
|
+
gzip_writer.close
|
42
|
+
read_buffer
|
43
|
+
end
|
44
|
+
|
45
|
+
def gunzip_pipe(gziped_pipe)
|
46
|
+
gzip_reader = Zlib::GzipReader.new gziped_pipe
|
47
|
+
unzipped_string = gzip_reader.read
|
48
|
+
gzip_reader.close
|
49
|
+
return unzipped_string
|
50
|
+
end
|
51
|
+
|
52
|
+
def parse_package_stub(read_buffer)
|
53
|
+
package = {}
|
54
|
+
stub = ""
|
55
|
+
while line = read_buffer.gets
|
56
|
+
return nil if line.strip.empty?
|
57
|
+
raise "bad input" unless (match = line.match /^\w+\-?\w+?: /)
|
58
|
+
stub << line
|
59
|
+
key = match[0].delete ': ' # if match
|
60
|
+
value = match.post_match.strip
|
61
|
+
package[key] = value
|
62
|
+
if key == 'Description'
|
63
|
+
while (line = read_buffer.gets).strip != ""
|
64
|
+
package['Description'] << line
|
65
|
+
stub << line
|
66
|
+
end
|
67
|
+
package['Description'].rstrip!
|
68
|
+
return package, stub
|
69
|
+
end
|
70
|
+
end
|
71
|
+
nil
|
72
|
+
end
|
73
|
+
|
74
|
+
def merge_package_file(in_pipe,out_pipe,package_list)
|
75
|
+
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
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
data/lib/frm/deb.rb
CHANGED
@@ -2,93 +2,12 @@ DEFAULT_HOST = 's3-us-west-1.amazonaws.com' # stupid hack to point to
|
|
2
2
|
# the right region
|
3
3
|
|
4
4
|
module FRM
|
5
|
-
|
6
|
-
|
7
|
-
class Base
|
8
|
-
my_dir = File.dirname __FILE__
|
9
|
-
require File.join my_dir, 's3'
|
10
|
-
require 'zlib'
|
11
|
-
require 'tempfile'
|
12
|
-
require 'digest/md5'
|
13
|
-
require 'digest/sha1'
|
14
|
-
require 'digest/sha2'
|
15
|
-
|
16
|
-
def compute_md5(string)
|
17
|
-
Digest::MD5.hexdigest(string)
|
18
|
-
end
|
19
|
-
|
20
|
-
def compute_sha1(string)
|
21
|
-
Digest::SHA1.hexdigest(string)
|
22
|
-
end
|
23
|
-
|
24
|
-
def compute_sha2(string)
|
25
|
-
Digest::SHA2.hexdigest(string)
|
26
|
-
end
|
27
|
-
|
28
|
-
# TODO:
|
29
|
-
# there has to be a better way to use gpg withen ruby. found many
|
30
|
-
# broken solutions :\
|
31
|
-
def gpg_clearsign(message)
|
32
|
-
`echo "#{message}" | gpg --clearsign`
|
33
|
-
end
|
34
|
-
|
35
|
-
# TODO: same as above
|
36
|
-
def gpg_detached(message)
|
37
|
-
`echo "#{message}" | gpg -abs`
|
38
|
-
end
|
39
|
-
|
40
|
-
|
41
|
-
def generate_gzip_pipe(contents)
|
42
|
-
read_buffer, write_buffer = IO.pipe
|
43
|
-
gzip_writer = Zlib::GzipWriter.new write_buffer
|
44
|
-
gzip_writer.mtime = 1 # ensure that the header is determinstic
|
45
|
-
gzip_writer.write contents
|
46
|
-
gzip_writer.close
|
47
|
-
read_buffer
|
48
|
-
end
|
49
|
-
|
50
|
-
def gunzip_pipe(gziped_pipe)
|
51
|
-
gzip_reader = Zlib::GzipReader.new gziped_pipe
|
52
|
-
unzipped_string = gzip_reader.read
|
53
|
-
gzip_reader.close
|
54
|
-
return unzipped_string
|
55
|
-
end
|
56
|
-
|
57
|
-
def parse_package_stub(read_buffer)
|
58
|
-
package = {}
|
59
|
-
stub = ""
|
60
|
-
while line = read_buffer.gets
|
61
|
-
return nil if line.strip.empty?
|
62
|
-
raise "bad input" unless (match = line.match /^\w+\-?\w+?: /)
|
63
|
-
stub << line
|
64
|
-
key = match[0].delete ': ' # if match
|
65
|
-
value = match.post_match.strip
|
66
|
-
package[key] = value
|
67
|
-
if key == 'Description'
|
68
|
-
while (line = read_buffer.gets).strip != ""
|
69
|
-
package['Description'] << line
|
70
|
-
stub << line
|
71
|
-
end
|
72
|
-
package['Description'].rstrip!
|
73
|
-
return package, stub
|
74
|
-
end
|
75
|
-
end
|
76
|
-
nil
|
77
|
-
end
|
78
|
-
|
79
|
-
def merge_package_file(in_pipe,out_pipe,package_list)
|
80
|
-
sorted_list = package_list.sort { |a,b| a['Package'] <=> b['Package'] }
|
81
|
-
while (next_stub = parse_package_stub in_pipe)
|
82
|
-
STDERR.puts "next_stub[0] = #{next_stub[0]}"
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
5
|
|
88
6
|
class Package < Base
|
89
7
|
attr_accessor :repo_filename
|
90
8
|
attr_reader :path, :content, :md5, :sha1, :sha2 , :size
|
91
9
|
def initialize(path)
|
10
|
+
raise "you need to specify a path!!!" if path.nil?
|
92
11
|
@path = path
|
93
12
|
raise "Can not find file '#{path}'" unless File.exists?(path)
|
94
13
|
begin
|
@@ -267,47 +186,6 @@ Description: Cloudscaling APT repository
|
|
267
186
|
end
|
268
187
|
|
269
188
|
|
270
|
-
def generate_release
|
271
|
-
return "Origin: apt.cloudscaling.com
|
272
|
-
Label: apt repository natty
|
273
|
-
Codename: natty
|
274
|
-
Date: Thu, 22 Dec 2011 00:29:55 UTC
|
275
|
-
Architectures: amd64
|
276
|
-
Components: main universe multiverse
|
277
|
-
Description: Cloudscaling APT repository
|
278
|
-
MD5Sum:
|
279
|
-
a4b943ff89790ccdc186875dad67827b 5813 main/binary-amd64/Packages
|
280
|
-
004fd3f868ebbe7501fb2e1c0c54e2a7 2148 main/binary-amd64/Packages.gz
|
281
|
-
79dd2fee35fba7255dcd40e1f6529591 134 main/binary-amd64/Release
|
282
|
-
d41d8cd98f00b204e9800998ecf8427e 0 universe/binary-amd64/Packages
|
283
|
-
7029066c27ac6f5ef18d660d5741979a 20 universe/binary-amd64/Packages.gz
|
284
|
-
018c8e37146b908a6bde46012a83d4ba 138 universe/binary-amd64/Release
|
285
|
-
d41d8cd98f00b204e9800998ecf8427e 0 multiverse/binary-amd64/Packages
|
286
|
-
7029066c27ac6f5ef18d660d5741979a 20 multiverse/binary-amd64/Packages.gz
|
287
|
-
4680f88c741bad22529909db5be4f608 140 multiverse/binary-amd64/Release
|
288
|
-
SHA1:
|
289
|
-
6e03924030eab56cb9735a52ec710537e682bcfc 5813 main/binary-amd64/Packages
|
290
|
-
5f2989bae96e148cb5f18accc4357305926ab1e1 2148 main/binary-amd64/Packages.gz
|
291
|
-
6d932af9af761f418e5374f73dcd09badb4fe57e 134 main/binary-amd64/Release
|
292
|
-
da39a3ee5e6b4b0d3255bfef95601890afd80709 0 universe/binary-amd64/Packages
|
293
|
-
46c6643f07aa7f6bfe7118de926b86defc5087c4 20 universe/binary-amd64/Packages.gz
|
294
|
-
4d428e7ad434df47cffc40cabf8e238ee76ea434 138 universe/binary-amd64/Release
|
295
|
-
da39a3ee5e6b4b0d3255bfef95601890afd80709 0 multiverse/binary-amd64/Packages
|
296
|
-
46c6643f07aa7f6bfe7118de926b86defc5087c4 20 multiverse/binary-amd64/Packages.gz
|
297
|
-
c8a7d2eb24ece57d460106506fcff99cb2ada015 140 multiverse/binary-amd64/Release
|
298
|
-
SHA256:
|
299
|
-
dd8283f06beb4a5fc06ac62d3ae098e5ba2717daef2a15b5f3e9233eb64e0227 5813 main/binary-amd64/Packages
|
300
|
-
b197c5a3c1fe6a6d286e9f066a0cade289e3a2fc485c90407179951634788aa8 2148 main/binary-amd64/Packages.gz
|
301
|
-
690b44df6fe65f40f260b73394e87804df78c9ccf13999889259faeed3eec40d 134 main/binary-amd64/Release
|
302
|
-
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 universe/binary-amd64/Packages
|
303
|
-
59869db34853933b239f1e2219cf7d431da006aa919635478511fabbfc8849d2 20 universe/binary-amd64/Packages.gz
|
304
|
-
32f35b1fc2bdc5a11b53abeadaaa77771b15acb5305777484bf4390d697ae5bd 138 universe/binary-amd64/Release
|
305
|
-
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 multiverse/binary-amd64/Packages
|
306
|
-
59869db34853933b239f1e2219cf7d431da006aa919635478511fabbfc8849d2 20 multiverse/binary-amd64/Packages.gz
|
307
|
-
f29816e3a4f90a8b4c688fdb2ac3056d5fb7349857c9ea8da2fbccf8e931baca 140 multiverse/binary-amd64/Release"
|
308
|
-
end
|
309
|
-
|
310
|
-
|
311
189
|
def generate_package_line(key='',value='')
|
312
190
|
valid_options = %w{Package Version Architecture Maintainer Standards-Version Homepage Priority Depends Filename Size SHA256 SHA1 MD5sum Description}
|
313
191
|
raise "Bogus option passed: #{key}" unless valid_options.include?(key)
|
data/lib/frm/s3.rb
CHANGED
data/lib/frm/version.rb
CHANGED
data/lib/frm.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
require File.join @frm_base, 'lib', 'frm', 'base'
|
2
|
+
require File.join @frm_base, 'lib', 'frm', 's3'
|
3
|
+
require File.join @frm_base, 'lib', 'frm', 'deb'
|
data/test/Packages.txt
ADDED
@@ -0,0 +1,155 @@
|
|
1
|
+
Package: kyotocabinet
|
2
|
+
Version: 1.2.68
|
3
|
+
Architecture: amd64
|
4
|
+
Maintainer: <jenkins@ci>
|
5
|
+
Standards-Version: 3.9.1
|
6
|
+
Homepage: http://nourlgiven.example.com/no/url/given
|
7
|
+
Priority: extra
|
8
|
+
Section: default
|
9
|
+
Filename: pool/main/k/kyotocabinet/kyotocabinet_1.2.68_amd64.deb
|
10
|
+
Size: 3718964
|
11
|
+
SHA256: 0646abf6c54a00afd213272386fb58ca777357bee99a53464b6f9a6e79344fde
|
12
|
+
SHA1: 6d2fb30095bb6ca876ca2ffc22523911aede9dfa
|
13
|
+
MD5sum: f1fc7e4c0bc8e3874d37c8df668c6fb3
|
14
|
+
Description: no description given
|
15
|
+
|
16
|
+
Package: pod-services
|
17
|
+
Version: 0.0.4
|
18
|
+
Architecture: amd64
|
19
|
+
Maintainer: <jenkins@ci>
|
20
|
+
Depends: zeromq, kyotocabinet, ruby1.9.2-full, libavahi-compat-libdnssd1, rubygem-bundler
|
21
|
+
Standards-Version: 3.9.1
|
22
|
+
Homepage: http://nourlgiven.example.com/no/url/given
|
23
|
+
Priority: extra
|
24
|
+
Section: default
|
25
|
+
Filename: pool/main/p/pod-services/pod-services_0.0.4_amd64.deb
|
26
|
+
Size: 59230358
|
27
|
+
SHA256: 6c5e8044d13dfb1c337767474a8094416c0913650aff71a2fe4aaec4d0f8ee9d
|
28
|
+
SHA1: 467fcc65ed729c845bad981743b5774e359a40df
|
29
|
+
MD5sum: 4b6ed193ca6d4d8002e39413b8966cca
|
30
|
+
Description: no description given
|
31
|
+
|
32
|
+
Package: python-kyotocabinet
|
33
|
+
Version: 1.1
|
34
|
+
Architecture: amd64
|
35
|
+
Maintainer: <jenkins@ci>
|
36
|
+
Depends: kyotocabinet
|
37
|
+
Standards-Version: 3.9.1
|
38
|
+
Homepage: http://fallabs.com/kyotocabinet/
|
39
|
+
Priority: extra
|
40
|
+
Section: default
|
41
|
+
Filename: pool/main/p/python-kyotocabinet/python-kyotocabinet_1.1_amd64.deb
|
42
|
+
Size: 1309704
|
43
|
+
SHA256: f71dcafe4074bbbe68105d9dcd4700313f2543147a88e10392761736719b83a1
|
44
|
+
SHA1: b0772977ec9c1d4b8313b76f20188b24646ea8fb
|
45
|
+
MD5sum: cf02d0adc90e110893165834a0993c0d
|
46
|
+
Description: a straightforward implementation of DBM
|
47
|
+
|
48
|
+
Package: python-netifaces
|
49
|
+
Version: 0.5
|
50
|
+
Architecture: amd64
|
51
|
+
Maintainer: <jenkins@ci>
|
52
|
+
Standards-Version: 3.9.1
|
53
|
+
Homepage: http://alastairs-place.net/netifaces
|
54
|
+
Priority: extra
|
55
|
+
Section: default
|
56
|
+
Filename: pool/main/p/python-netifaces/python-netifaces_0.5_amd64.deb
|
57
|
+
Size: 14126
|
58
|
+
SHA256: 433969c5ff6e56a5c5ca9925c01ecc1df591080e95544d4f0ee61fa9d263abf4
|
59
|
+
SHA1: 512bc3b46bbc8d7b45fda8ff496c6cee6208bf03
|
60
|
+
MD5sum: 66e6739aadb3c6e3def550b36ac10eeb
|
61
|
+
Description: Portable network interface information.
|
62
|
+
|
63
|
+
Package: python-pybonjour
|
64
|
+
Version: 1.1.1
|
65
|
+
Architecture: all
|
66
|
+
Maintainer: <jenkins@ci>
|
67
|
+
Depends: libavahi-compat-libdnssd1
|
68
|
+
Standards-Version: 3.9.1
|
69
|
+
Homepage: http://o2s.csail.mit.edu/o2s-wiki/pybonjour
|
70
|
+
Priority: extra
|
71
|
+
Section: default
|
72
|
+
Filename: pool/main/p/python-pybonjour/python-pybonjour_1.1.1_all.deb
|
73
|
+
Size: 30490
|
74
|
+
SHA256: 7e23aeb59599f60da61acd3275038d5603515e00b215a2dd94a222c648c2bc8a
|
75
|
+
SHA1: ae97584f4471165306fea16d9cd0628f1b7f797f
|
76
|
+
MD5sum: efa7004bbffc372abeb99070997e295b
|
77
|
+
Description: Pure-Python interface to Apple Bonjour and compatible DNS-SD libraries
|
78
|
+
|
79
|
+
Package: python-pyzmq
|
80
|
+
Version: 2.1.7.1
|
81
|
+
Architecture: amd64
|
82
|
+
Maintainer: <jenkins@ci>
|
83
|
+
Depends: zeromq
|
84
|
+
Standards-Version: 3.9.1
|
85
|
+
Homepage: http://github.com/zeromq/pyzmq
|
86
|
+
Priority: extra
|
87
|
+
Section: default
|
88
|
+
Filename: pool/main/p/python-pyzmq/python-pyzmq_2.1.7.1_amd64.deb
|
89
|
+
Size: 1198458
|
90
|
+
SHA256: 039fac7f7dbf0c5c8da6179a13756a216cf8c7d192c8c451631a005a10e6085d
|
91
|
+
SHA1: 6f34087234c6c64d5563249bcbe0ae789807cf50
|
92
|
+
MD5sum: bd0364643376bce244b87f6cc4824896
|
93
|
+
Description: Python bindings for 0MQ.
|
94
|
+
|
95
|
+
Package: python-thlayli
|
96
|
+
Version: 0.3
|
97
|
+
Architecture: all
|
98
|
+
Maintainer: <jenkins@ci>
|
99
|
+
Depends: python-netifaces (>= 0), python-kyotocabinet (>= 0), python-pybonjour (>= 0), python-pyzmq (>= 0)
|
100
|
+
Standards-Version: 3.9.1
|
101
|
+
Homepage: http://clouldscaling.com/
|
102
|
+
Priority: extra
|
103
|
+
Section: default
|
104
|
+
Filename: pool/main/p/python-thlayli/python-thlayli_0.3_all.deb
|
105
|
+
Size: 13426
|
106
|
+
SHA256: f860439b4db71b5bd85d103b4460dce8464c468d00a8632e3ae1a0a32cc35c57
|
107
|
+
SHA1: a457cfbc4737acbe1def6c49c0ca56ff5d425479
|
108
|
+
MD5sum: 3dd096d608ad55b04754bc1ad4ac3457
|
109
|
+
Description: Thlayli is a simple tuplespace for coordinating distributed work.
|
110
|
+
|
111
|
+
Package: ruby1.9.2-full
|
112
|
+
Version: 1.9.2
|
113
|
+
Architecture: amd64
|
114
|
+
Maintainer: <jenkins@ci>
|
115
|
+
Standards-Version: 3.9.1
|
116
|
+
Homepage: http://nourlgiven.example.com/no/url/given
|
117
|
+
Priority: extra
|
118
|
+
Section: default
|
119
|
+
Filename: pool/main/r/ruby1.9.2-full/ruby1.9.2-full_1.9.2_amd64.deb
|
120
|
+
Size: 10923378
|
121
|
+
SHA256: 1640650ad27b765681d9148f0e23f40b5d86ba6e60370f63bf6402fb0fec4f6f
|
122
|
+
SHA1: d9748b34ca4d2a284bac86ec3040f685adc4964c
|
123
|
+
MD5sum: 2baa87f011d61b8a884ded2a0ccf43d8
|
124
|
+
Description: no description given
|
125
|
+
|
126
|
+
Package: rubygem-bundler
|
127
|
+
Version: 1.0.18
|
128
|
+
Architecture: all
|
129
|
+
Maintainer: André Arko
|
130
|
+
Standards-Version: 3.9.1
|
131
|
+
Homepage: http://gembundler.com
|
132
|
+
Priority: extra
|
133
|
+
Section: Languages/Development/Ruby
|
134
|
+
Filename: pool/main/r/rubygem-bundler/rubygem-bundler_1.0.18_all.deb
|
135
|
+
Size: 341144
|
136
|
+
SHA256: b2e51a45a90707261ed36648847409783542fc092bc18a11a63a1db0b76ca4b3
|
137
|
+
SHA1: ca3d01e1e0e3608b785562bc5d31d413e74e0d77
|
138
|
+
MD5sum: 13d7db51446b5bbed40f8db407597733
|
139
|
+
Description: Bundler manages an application's dependencies through its entire life, across many machines, systematically and repeatably
|
140
|
+
|
141
|
+
Package: zeromq
|
142
|
+
Version: 2.1.7
|
143
|
+
Architecture: amd64
|
144
|
+
Maintainer: <jenkins@ci>
|
145
|
+
Standards-Version: 3.9.1
|
146
|
+
Homepage: http://nourlgiven.example.com/no/url/given
|
147
|
+
Priority: extra
|
148
|
+
Section: default
|
149
|
+
Filename: pool/main/z/zeromq/zeromq_2.1.7_amd64.deb
|
150
|
+
Size: 1899468
|
151
|
+
SHA256: e41fcb46155591beb120a95f11a574e39e7a4e60e61f373ba1843d5fea63f280
|
152
|
+
SHA1: d25801f69462a1b9d1a91c396de98d9a7b4c2e95
|
153
|
+
MD5sum: 48b46e195bd4ea7d6140e1ca1520a199
|
154
|
+
Description: no description given
|
155
|
+
|
@@ -1,9 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require 'minitest/autorun'
|
4
|
-
|
5
|
-
my_dir = File.dirname __FILE__
|
6
|
-
require File.join my_dir, 'deb'
|
4
|
+
require 'mock-aws-s3'
|
7
5
|
|
8
6
|
class TestReleasePusher < MiniTest::Unit::TestCase
|
9
7
|
def setup
|
@@ -11,12 +9,9 @@ class TestReleasePusher < MiniTest::Unit::TestCase
|
|
11
9
|
@tempfile2 = File.open('/tmp/bar_1.2.3.4_amd64.deb','w+') { |f| f.write 'bar' }
|
12
10
|
@tempfile3 = File.open('/tmp/martin_1.2.3.4_amd64.deb','w+') { |f| f.write 'martin' }
|
13
11
|
|
14
|
-
hashes =
|
15
|
-
|
16
|
-
|
17
|
-
/home/martin/sheep/modules/substratum/debs/ruby1.9.2-1-amd64.deb
|
18
|
-
}
|
19
|
-
|
12
|
+
hashes = []
|
13
|
+
hashes << File.join(@@frm_test_base, 'debs', 'frm_foo-1.0.0.deb')
|
14
|
+
hashes << File.join(@@frm_test_base, 'debs', 'frm_bar-1.0.0.deb')
|
20
15
|
|
21
16
|
@package_release = FRM::PackageRelease.new(hashes)
|
22
17
|
@release_pusher = FRM::ReleasePusher.new(@package_release,'1234','abcd',\
|
data/test/deb_test.rb
CHANGED
@@ -11,52 +11,9 @@ class TestReleasePusher < MiniTest::Unit::TestCase
|
|
11
11
|
@tempfile2 = File.open('/tmp/bar_1.2.3.4_amd64.deb','w+') { |f| f.write 'bar' }
|
12
12
|
@tempfile3 = File.open('/tmp/martin_1.2.3.4_amd64.deb','w+') { |f| f.write 'martin' }
|
13
13
|
|
14
|
-
hashes = [
|
15
|
-
|
16
|
-
|
17
|
-
"Architecture" => "amd64",
|
18
|
-
"Maintainer" => "support@cloudscaling.com",
|
19
|
-
"Homepage" => "http://www.cloudscaling.com",
|
20
|
-
"Priority" => "extra",
|
21
|
-
"Depends" => %w{one two three},
|
22
|
-
"section" => "main",
|
23
|
-
"path_to_deb" => '/tmp/foo_1.2.68_amd64.deb',
|
24
|
-
"Description" => 'some
|
25
|
-
multiline
|
26
|
-
description'
|
27
|
-
},
|
28
|
-
{
|
29
|
-
"Package" => "bar",
|
30
|
-
"Version" => "1.2.3.4",
|
31
|
-
"Architecture" => "amd64",
|
32
|
-
"Maintainer" => "support@cloudscaling.com",
|
33
|
-
"Homepage" => "http://www.cloudscaling.com",
|
34
|
-
"Priority" => "extra",
|
35
|
-
"Depends" => %w{one two three},
|
36
|
-
"section" => "main",
|
37
|
-
"path_to_deb" => '/tmp/bar_1.2.3.4_amd64.deb'
|
38
|
-
},
|
39
|
-
{
|
40
|
-
"Package" => "martin",
|
41
|
-
"Version" => "1.2.3.4",
|
42
|
-
"Architecture" => "amd64",
|
43
|
-
"Maintainer" => "support@cloudscaling.com",
|
44
|
-
"Homepage" => "http://www.cloudscaling.com",
|
45
|
-
"Priority" => "extra",
|
46
|
-
"section" => "main",
|
47
|
-
"path_to_deb" => '/tmp/martin_1.2.3.4_amd64.deb'
|
48
|
-
},
|
49
|
-
{
|
50
|
-
"Package" => "cs-chef",
|
51
|
-
"Version" => "1.2.3.4",
|
52
|
-
"Architecture" => "amd64",
|
53
|
-
"Maintainer" => "support@cloudscaling.com",
|
54
|
-
"Homepage" => "http://www.cloudscaling.com",
|
55
|
-
"Priority" => "extra",
|
56
|
-
"section" => "main",
|
57
|
-
"path_to_deb" => '/tmp/debs/cs-chef-0.9.1-1782-all.deb'
|
58
|
-
}
|
59
|
-
]
|
14
|
+
hashes = []
|
15
|
+
hashes << File.join(@@frm_test_base, 'debs', 'frm_foo-1.0.0.deb')
|
16
|
+
hashes << File.join(@@frm_test_base, 'debs', 'frm_bar-1.0.0.deb')
|
60
17
|
|
61
18
|
@package_release = FRM::PackageRelease.new(hashes)
|
62
19
|
@release_pusher = FRM::ReleasePusher.new(@package_release,'abcd','1234',\
|
@@ -64,7 +21,7 @@ class TestReleasePusher < MiniTest::Unit::TestCase
|
|
64
21
|
end
|
65
22
|
|
66
23
|
def test
|
67
|
-
puts "@release_pusher.inspect = #{@release_pusher.inspect}"
|
24
|
+
# puts "@release_pusher.inspect = #{@release_pusher.inspect}"
|
68
25
|
end
|
69
26
|
|
70
27
|
end
|
@@ -74,68 +31,49 @@ end
|
|
74
31
|
@tempfile1 = File.open('/tmp/foo_1.2.68_amd64.deb','w+') { |f| f.write 'foo' }
|
75
32
|
@tempfile2 = File.open('/tmp/bar_1.2.3.4_amd64.deb','w+') { |f| f.write 'bar' }
|
76
33
|
|
77
|
-
hashes = [
|
78
|
-
|
79
|
-
|
80
|
-
"Architecture" => "amd64",
|
81
|
-
"Maintainer" => "support@cloudscaling.com",
|
82
|
-
"Homepage" => "http://www.cloudscaling.com",
|
83
|
-
"Priority" => "extra",
|
84
|
-
"Depends" => %w{one two three},
|
85
|
-
"section" => "main",
|
86
|
-
"path_to_deb" => '/tmp/foo_1.2.68_amd64.deb',
|
87
|
-
"Description" => 'some
|
88
|
-
multiline
|
89
|
-
description'
|
90
|
-
},
|
91
|
-
{
|
92
|
-
"Package" => "bar",
|
93
|
-
"Version" => "1.2.3.4",
|
94
|
-
"Architecture" => "amd64",
|
95
|
-
"Maintainer" => "support@cloudscaling.com",
|
96
|
-
"Homepage" => "http://www.cloudscaling.com",
|
97
|
-
"Priority" => "extra",
|
98
|
-
"Depends" => %w{one two three},
|
99
|
-
"section" => "main",
|
100
|
-
"path_to_deb" => '/tmp/bar_1.2.3.4_amd64.deb'
|
101
|
-
}
|
102
|
-
]
|
34
|
+
hashes = []
|
35
|
+
hashes << File.join(@@frm_test_base, 'debs', 'frm_foo-1.0.0.deb')
|
36
|
+
hashes << File.join(@@frm_test_base, 'debs', 'frm_bar-1.0.0.deb')
|
103
37
|
|
104
38
|
@package_release = FRM::PackageRelease.new(hashes)
|
105
39
|
end
|
106
40
|
|
107
41
|
def test()
|
108
|
-
correct_output = "Package: foo
|
109
|
-
Version: 1.
|
42
|
+
correct_output = "Package: frm-foo
|
43
|
+
Version: 1.0
|
44
|
+
License: unknown
|
45
|
+
Vendor: martin@host-c1e5ea34
|
110
46
|
Architecture: amd64
|
111
|
-
Maintainer: <
|
112
|
-
|
113
|
-
|
47
|
+
Maintainer: <martin@host-c1e5ea34>
|
48
|
+
Installed-Size: 0
|
49
|
+
#Pre-Depends:
|
50
|
+
Section: default
|
114
51
|
Priority: extra
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
52
|
+
Homepage: http://example.com/no-uri-given
|
53
|
+
Description: no description given
|
54
|
+
Filename: pool/main/f/frm-foo/frm_foo-1.0.0.deb
|
55
|
+
Size: 716
|
56
|
+
MD5sum: 0faf8cabf49a615adacbe6d80c4aee3b
|
57
|
+
SHA1: 78c6be70488c78d63b6eb233f891e80d3af0b779
|
58
|
+
SHA256: 5f0de3c65226c13e9c215478ba784afe54b0592aa46766ff19b1140644bbda71
|
59
|
+
|
60
|
+
Package: frm-bar
|
61
|
+
Version: 1.0
|
62
|
+
License: unknown
|
63
|
+
Vendor: martin@host-c1e5ea34
|
127
64
|
Architecture: amd64
|
128
|
-
Maintainer: <
|
129
|
-
|
130
|
-
|
65
|
+
Maintainer: <martin@host-c1e5ea34>
|
66
|
+
Installed-Size: 0
|
67
|
+
#Pre-Depends:
|
68
|
+
Section: default
|
131
69
|
Priority: extra
|
132
|
-
|
133
|
-
Filename: pool/main/b/bar/bar_1.2.3.4_amd64.deb
|
134
|
-
Size: 3
|
135
|
-
MD5sum: 37b51d194a7513e45b56f6524f2d51f2
|
136
|
-
SHA1: 62cdb7020ff920e5aa642c3d4066950dd1f01f4d
|
137
|
-
SHA256: fcde2b2edba56bf408601fb721fe9b5c338d10ee429ea04fae5511b68fbf8fb9
|
70
|
+
Homepage: http://example.com/no-uri-given
|
138
71
|
Description: no description given
|
72
|
+
Filename: pool/main/f/frm-bar/frm_bar-1.0.0.deb
|
73
|
+
Size: 716
|
74
|
+
MD5sum: b21df912829a23f9846ddd022fc74c74
|
75
|
+
SHA1: 0592c2eb2f3f5a830109d63b83ab438c7c258d14
|
76
|
+
SHA256: 131f5d16fdd7ddf8bf9c4983d77022b268c02b2864ce9a9f841704631417515d
|
139
77
|
|
140
78
|
"
|
141
79
|
assert @package_release.package_file == correct_output
|
@@ -152,7 +90,6 @@ Description: Cloudscaling APT repository
|
|
152
90
|
end
|
153
91
|
|
154
92
|
def test_generate_release
|
155
|
-
# skip 'need to finish generate_release function'
|
156
93
|
correct_release_file = "Origin: apt.cloudscaling.com
|
157
94
|
Label: apt repository natty
|
158
95
|
Codename: natty
|
@@ -161,16 +98,16 @@ Architectures: amd64
|
|
161
98
|
Components: main universe multiverse
|
162
99
|
Description: Cloudscaling APT repository
|
163
100
|
MD5Sum:
|
164
|
-
|
165
|
-
|
101
|
+
c0ff97432f4ac04c99b2ddee0a1d5fed 986 main/binary-amd64/Packages
|
102
|
+
5bfa5912649f52c32d2e740fc727ebd5 462 main/binary-amd64/Packages.gz
|
166
103
|
79dd2fee35fba7255dcd40e1f6529591 134 main/binary-amd64/Release
|
167
104
|
SHA1:
|
168
|
-
|
169
|
-
|
105
|
+
2ecb580a151f0cf625016352b2a474b787cc0ac3 986 main/binary-amd64/Packages
|
106
|
+
80a6c1f004fb7b6bcb1ce3f86d16e53b5735ac84 462 main/binary-amd64/Packages.gz
|
170
107
|
6d932af9af761f418e5374f73dcd09badb4fe57e 134 main/binary-amd64/Release
|
171
108
|
SHA256:
|
172
|
-
|
173
|
-
|
109
|
+
ae8b50085f2405febff78f86fe7d89d93d9ff94ceccfbfa975c0bd79e63ce385 986 main/binary-amd64/Packages
|
110
|
+
cb8501ace11b9bdbfd0d65006a116313f5c6fda625d6383a549e80b982fc6eac 462 main/binary-amd64/Packages.gz
|
174
111
|
690b44df6fe65f40f260b73394e87804df78c9ccf13999889259faeed3eec40d 134 main/binary-amd64/Release
|
175
112
|
"
|
176
113
|
assert @package_release.release_file == correct_release_file
|
@@ -184,55 +121,24 @@ class TestPackage < MiniTest::Unit::TestCase
|
|
184
121
|
@tempfile1 = File.open('/tmp/foo','w+') { |f| f.write 'foo' }
|
185
122
|
@tempfile2 = File.open('/tmp/bar','w+') { |f| f.write 'bar' }
|
186
123
|
|
187
|
-
|
188
|
-
"Package" => "foo",
|
189
|
-
"Version" => "1.2.68",
|
190
|
-
"Architecture" => "amd64",
|
191
|
-
"Maintainer" => "support@cloudscaling.com",
|
192
|
-
"Homepage" => "http://www.cloudscaling.com",
|
193
|
-
"Priority" => "extra",
|
194
|
-
"Depends" => %w{one two three},
|
195
|
-
"section" => "main",
|
196
|
-
"path_to_deb" => '/tmp/foo',
|
197
|
-
"Description" => 'some
|
198
|
-
multiline
|
199
|
-
description'
|
200
|
-
}
|
124
|
+
package = File.join(@@frm_test_base, 'debs', 'frm_foo-1.0.0.deb')
|
201
125
|
|
202
|
-
@package1 = FRM::Package.new(
|
126
|
+
@package1 = FRM::Package.new(package)
|
203
127
|
end
|
204
128
|
|
205
|
-
def test()
|
206
|
-
assert @package1.name == 'foo'
|
207
|
-
assert @package1.content == 'foo'
|
208
|
-
end
|
209
|
-
|
210
129
|
def test_bad_file()
|
211
|
-
|
212
|
-
|
213
|
-
"Version" => "1.2.68",
|
214
|
-
"Architecture" => "amd64",
|
215
|
-
"Maintainer" => "support@cloudscaling.com",
|
216
|
-
"Homepage" => "http://www.cloudscaling.com",
|
217
|
-
"Priority" => "extra",
|
218
|
-
"Depends" => %w{one two three},
|
219
|
-
"section" => "main",
|
220
|
-
"path_to_deb" => '/some/bad/path',
|
221
|
-
"Description" => 'some
|
222
|
-
multiline
|
223
|
-
description'
|
224
|
-
}
|
225
|
-
assert_raises(RuntimeError) { FRM::Package.new(bad_hash) }
|
130
|
+
bad_package = "/some/bad/path"
|
131
|
+
assert_raises(RuntimeError) { FRM::Package.new(bad_package) }
|
226
132
|
end
|
227
133
|
|
228
134
|
def test_good_file()
|
229
|
-
assert @package1.content == '
|
135
|
+
assert Digest::MD5.hexdigest(@package1.content) == '0faf8cabf49a615adacbe6d80c4aee3b'
|
230
136
|
end
|
231
137
|
|
232
138
|
def test_hashes()
|
233
|
-
assert @package1.md5 == '
|
234
|
-
assert @package1.sha1 == '
|
235
|
-
assert @package1.sha2 == '
|
139
|
+
assert @package1.md5 == '0faf8cabf49a615adacbe6d80c4aee3b'
|
140
|
+
assert @package1.sha1 == '78c6be70488c78d63b6eb233f891e80d3af0b779'
|
141
|
+
assert @package1.sha2 == '5f0de3c65226c13e9c215478ba784afe54b0592aa46766ff19b1140644bbda71'
|
236
142
|
|
237
143
|
end
|
238
144
|
|
@@ -374,32 +280,7 @@ Description: Cloudscaling APT repository
|
|
374
280
|
"
|
375
281
|
assert @deb.generate_package_release == package_release_file
|
376
282
|
end
|
377
|
-
|
378
|
-
def test_generate_release
|
379
|
-
skip 'need to finish generate_release function'
|
380
|
-
release_file = "Origin: apt.cloudscaling.com
|
381
|
-
Label: apt repository natty
|
382
|
-
Codename: natty
|
383
|
-
Date: Thu, 22 Dec 2011 00:29:55 UTC
|
384
|
-
Architectures: amd64
|
385
|
-
;Components: main universe multiverse
|
386
|
-
Description: Cloudscaling APT repository
|
387
|
-
MD5Sum:
|
388
|
-
a4b943ff89790ccdc186875dad67827b 5813 main/binary-amd64/Packages
|
389
|
-
004fd3f868ebbe7501fb2e1c0c54e2a7 2148 main/binary-amd64/Packages.gz
|
390
|
-
79dd2fee35fba7255dcd40e1f6529591 134 main/binary-amd64/Release
|
391
|
-
SHA1:
|
392
|
-
6e03924030eab56cb9735a52ec710537e682bcfc 5813 main/binary-amd64/Packages
|
393
|
-
5f2989bae96e148cb5f18accc4357305926ab1e1 2148 main/binary-amd64/Packages.gz
|
394
|
-
6d932af9af761f418e5374f73dcd09badb4fe57e 134 main/binary-amd64/Release
|
395
|
-
SHA256:
|
396
|
-
dd8283f06beb4a5fc06ac62d3ae098e5ba2717daef2a15b5f3e9233eb64e0227 5813 main/binary-amd64/Packages
|
397
|
-
b197c5a3c1fe6a6d286e9f066a0cade289e3a2fc485c90407179951634788aa8 2148 main/binary-amd64/Packages.gz
|
398
|
-
690b44df6fe65f40f260b73394e87804df78c9ccf13999889259faeed3eec40d 134 main/binary-amd64/Release
|
399
|
-
"
|
400
|
-
assert @deb.generate_release == release_file
|
401
|
-
end
|
402
|
-
|
283
|
+
|
403
284
|
def generate_random_string
|
404
285
|
rand(36**rand(50)).to_s(36)
|
405
286
|
end
|
@@ -446,7 +327,7 @@ Description: no description given
|
|
446
327
|
|
447
328
|
|
448
329
|
def test_merge_package_file
|
449
|
-
package_file = File.open 'Packages.txt'
|
330
|
+
package_file = File.open File.join @@frm_test_base, 'Packages.txt'
|
450
331
|
read_buffer, write_buffer = IO.pipe
|
451
332
|
|
452
333
|
@deb.merge_package_file(package_file,write_buffer,@hash)
|
Binary file
|
Binary file
|
data/test/lib/test.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# this is the place to put common testing code
|
2
|
+
|
3
|
+
def compare_line_by_line(chunk1,chunk2)
|
4
|
+
arr1=chunk1.split("\n")
|
5
|
+
arr2=chunk2.split("\n")
|
6
|
+
arr1.each_with_index do |line,i|
|
7
|
+
unless line == arr2[i]
|
8
|
+
puts "line number #{i} is different:"
|
9
|
+
puts " #{line}"
|
10
|
+
puts " #{arr2[i]}"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
data/test/rake.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
@@frm_test_base = File.join @frm_base, 'test'
|
2
|
+
|
3
|
+
require File.join @@frm_test_base, 'lib', 'test'
|
4
|
+
|
5
|
+
namespace :test do
|
6
|
+
|
7
|
+
desc "run the s3 test"
|
8
|
+
task :s3 do
|
9
|
+
require File.join @frm_base, 'lib', 'frm'
|
10
|
+
require File.join @@frm_test_base, 's3'
|
11
|
+
end
|
12
|
+
|
13
|
+
desc "run the deb test"
|
14
|
+
task :deb do
|
15
|
+
require File.join @frm_base, 'lib', 'frm'
|
16
|
+
require File.join @@frm_test_base, 'deb'
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
desc "run the old deb test"
|
21
|
+
task :old_deb do
|
22
|
+
require File.join @frm_base, 'lib', 'frm'
|
23
|
+
require File.join @@frm_test_base, 'deb_test'
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
data/test/s3.rb
CHANGED
@@ -1,9 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require 'minitest/autorun'
|
4
|
-
|
5
|
-
require File.join my_dir, 's3'
|
6
|
-
|
4
|
+
require 'mock-aws-s3'
|
7
5
|
|
8
6
|
# this is a stupid hack to get the @@bucket region set properly
|
9
7
|
DEFAULT_HOST = 's3-us-west-1.amazonaws.com'
|
@@ -14,7 +12,7 @@ class TestFRM < MiniTest::Unit::TestCase
|
|
14
12
|
@@access_key_id = 'abcd'
|
15
13
|
@@secret_key_id = '1234'
|
16
14
|
@@bucket = 'some-bucket'
|
17
|
-
@@prefix = 'testing/
|
15
|
+
@@prefix = 'testing/'
|
18
16
|
@@server = 's3-us-west-1.amazonaws.com'
|
19
17
|
@@timestamp = rand(9999).to_s
|
20
18
|
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 4
|
9
|
+
version: 0.0.4
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Martin Rhoads
|
@@ -16,8 +16,33 @@ cert_chain: []
|
|
16
16
|
|
17
17
|
date: 2012-03-31 00:00:00 -07:00
|
18
18
|
default_executable:
|
19
|
-
dependencies:
|
20
|
-
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: aws-s3
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
segments:
|
29
|
+
- 0
|
30
|
+
version: "0"
|
31
|
+
type: :runtime
|
32
|
+
version_requirements: *id001
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: mock-aws-s3
|
35
|
+
prerelease: false
|
36
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
37
|
+
none: false
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
segments:
|
42
|
+
- 0
|
43
|
+
version: "0"
|
44
|
+
type: :development
|
45
|
+
version_requirements: *id002
|
21
46
|
description: FRM makes it easy to build package repositories on S3
|
22
47
|
email:
|
23
48
|
- ermal14@gmail.com
|
@@ -35,11 +60,17 @@ files:
|
|
35
60
|
- bin/frm
|
36
61
|
- frm.gemspec
|
37
62
|
- lib/frm.rb
|
63
|
+
- lib/frm/base.rb
|
38
64
|
- lib/frm/deb.rb
|
39
65
|
- lib/frm/s3.rb
|
40
66
|
- lib/frm/version.rb
|
67
|
+
- test/Packages.txt
|
68
|
+
- test/deb.rb
|
41
69
|
- test/deb_test.rb
|
42
|
-
- test/
|
70
|
+
- test/debs/frm_bar-1.0.0.deb
|
71
|
+
- test/debs/frm_foo-1.0.0.deb
|
72
|
+
- test/lib/test.rb
|
73
|
+
- test/rake.rb
|
43
74
|
- test/s3.rb
|
44
75
|
has_rdoc: true
|
45
76
|
homepage: https://github.com/ermal14/frm
|
@@ -73,7 +104,5 @@ rubygems_version: 1.3.7
|
|
73
104
|
signing_key:
|
74
105
|
specification_version: 3
|
75
106
|
summary: Effin Repo Manager
|
76
|
-
test_files:
|
77
|
-
|
78
|
-
- test/deb_test2.rb
|
79
|
-
- test/s3.rb
|
107
|
+
test_files: []
|
108
|
+
|