gem2pkg 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +4 -1
- data/gem2pkg.gemspec +1 -1
- data/lib/gem2pkg.rb +31 -27
- metadata +3 -3
data/README.md
CHANGED
@@ -6,7 +6,9 @@ My primary motivation for creating this was to bundle the 'chef' gem and its dep
|
|
6
6
|
|
7
7
|
## Requirements
|
8
8
|
|
9
|
-
This gem requires rubygems 1.
|
9
|
+
This gem requires rubygems 1.3.6 to be installed. While it will probably work with older versions of rubygems, and hasn't been tested with them yet, so the requirement is set high for now
|
10
|
+
|
11
|
+
If rvm is installed, use gem2pkg with the system ruby (rvm use system). Since we're building packages to be installed on OSX systems that do not not have RVM installed, we want to be safe and use the same environment to build the package.
|
10
12
|
|
11
13
|
## Usage
|
12
14
|
|
@@ -31,3 +33,4 @@ The package will be outputted in the current folder, named chef-0.10.4.pkg (if t
|
|
31
33
|
## Known Issues
|
32
34
|
|
33
35
|
* Does not build flat packages
|
36
|
+
* Only tested so far on OSX Lion
|
data/gem2pkg.gemspec
CHANGED
data/lib/gem2pkg.rb
CHANGED
@@ -7,6 +7,35 @@ require 'erb'
|
|
7
7
|
require 'tmpdir'
|
8
8
|
|
9
9
|
class Gem2Pkg
|
10
|
+
def gather_dependencies(specs)
|
11
|
+
dependency_list = Gem::DependencyList.new
|
12
|
+
dependency_list.add(*specs)
|
13
|
+
|
14
|
+
to_do = specs.dup
|
15
|
+
seen = {}
|
16
|
+
|
17
|
+
until to_do.empty? do
|
18
|
+
spec = to_do.shift
|
19
|
+
next if spec.nil? or seen[spec.name]
|
20
|
+
seen[spec.name] = true
|
21
|
+
|
22
|
+
deps = spec.runtime_dependencies
|
23
|
+
deps.each do |dep|
|
24
|
+
result = dep.to_spec
|
25
|
+
if result == nil
|
26
|
+
puts "Could not find local gem to satisfy dependency #{dep.name} (#{dep.requirement})"
|
27
|
+
next
|
28
|
+
end
|
29
|
+
next if seen[result.name]
|
30
|
+
to_do.push(result)
|
31
|
+
dependency_list.add result
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
dependency_list.dependency_order.reverse
|
36
|
+
end
|
37
|
+
|
38
|
+
|
10
39
|
def build(gemname)
|
11
40
|
if gemname == nil
|
12
41
|
puts "Please specify the name of the gem to package."
|
@@ -41,32 +70,6 @@ class Gem2Pkg
|
|
41
70
|
|
42
71
|
puts "Building dependency list from dependency tree..."
|
43
72
|
|
44
|
-
def gather_dependencies(specs)
|
45
|
-
dependency_list = Gem::DependencyList.new
|
46
|
-
dependency_list.add(*specs)
|
47
|
-
|
48
|
-
to_do = specs.dup
|
49
|
-
seen = {}
|
50
|
-
|
51
|
-
until to_do.empty? do
|
52
|
-
spec = to_do.shift
|
53
|
-
next if spec.nil? or seen[spec.name]
|
54
|
-
seen[spec.name] = true
|
55
|
-
|
56
|
-
deps = spec.runtime_dependencies
|
57
|
-
deps.each do |dep|
|
58
|
-
result = dep.to_spec
|
59
|
-
if result == nil
|
60
|
-
puts "Could not find local gem to satisfy dependency #{dep.name} (#{dep.requirement})"
|
61
|
-
end
|
62
|
-
next if seen[result.name]
|
63
|
-
dependency_list.add result
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
dependency_list.dependency_order.reverse
|
68
|
-
end
|
69
|
-
|
70
73
|
puts "We will be bundling up the following gems into our installer:"
|
71
74
|
dependencies = gather_dependencies([gemspec])
|
72
75
|
dependencies.each do |dependency|
|
@@ -91,7 +94,8 @@ class Gem2Pkg
|
|
91
94
|
`mkbom #{payload_staging_dir} #{pkg_name}.pkg/Contents/Archive.bom`
|
92
95
|
|
93
96
|
puts "Archiving payload..."
|
94
|
-
`pax -wz -x cpio
|
97
|
+
`cd #{payload_staging_dir} && pax -wz -x cpio . > Archive.pax.gz`
|
98
|
+
`cp #{payload_staging_dir}/Archive.pax.gz #{pkg_name}.pkg/Contents/Archive.pax.gz`
|
95
99
|
|
96
100
|
installed_size = (`/usr/bin/du -k -s #{payload_staging_dir}`.split(' ')[0]).to_i * 1024
|
97
101
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gem2pkg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 29
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 3
|
10
|
+
version: 0.1.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Justin Schumacher
|