devstructure 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/devstructure/blueprint.rb +48 -8
  2. metadata +4 -4
@@ -38,14 +38,56 @@ class DevStructure::Blueprint < Hash
38
38
  end
39
39
 
40
40
  def -(other)
41
- b = self.dup
41
+ b = Marshal.load(Marshal.dump(self))
42
+
43
+ # First pass removes all duplicates except managers.
42
44
  other.walk(
43
45
  :package => lambda { |manager, command, package, version|
44
- unless b.packages[package]
45
- b.packages[manager]["_packages"].delete package
46
+ return if b.packages[package]
47
+ b.packages[manager]["_packages"].delete package
48
+ }
49
+ )
50
+
51
+ # Second pass removes managers that manage no packages.
52
+ # For RubyGems we have to dig a little deeper to see what is managed
53
+ # by rubygems-update.
54
+ b.walk(
55
+ :package => lambda { |manager, command, package, version|
56
+ return unless b.packages[package]
57
+ test = if package =~ /^rubygems(\d+\.\d+)$/
58
+ b.packages["rubygems-update"]
59
+ else
60
+ b.packages[package]
46
61
  end
62
+ if test
63
+ case test["_packages"].length
64
+ when 0
65
+ when 1
66
+ return unless test["_packages"]["rubygems-update"]
67
+ else
68
+ return
69
+ end
70
+ end
71
+ p = b.packages[manager]["_packages"]
72
+ p.delete package
73
+ b.packages.delete manager if 0 == p.length
47
74
  }
48
75
  )
76
+
77
+ # Third pass adds back special dependencies like ruby*-dev.
78
+ b.walk(
79
+ :after => lambda { |manager, command|
80
+ case manager
81
+
82
+ # Match a version of ruby*-dev to a version of rubygems*.
83
+ when /^rubygems(\d+\.\d+)$/
84
+ b.packages["apt"]["_packages"]["ruby#{$1}-dev"] =
85
+ packages["apt"]["_packages"]["ruby#{$1}-dev"]
86
+
87
+ end
88
+ }
89
+ )
90
+
49
91
  b
50
92
  end
51
93
 
@@ -76,7 +118,7 @@ EOF
76
118
  # Packages.
77
119
  walk(
78
120
  :package => lambda { |manager, command, package, version|
79
- return if "rubygems-update" == manager && manager == package
121
+ return if manager == package
80
122
  printf "#{command}\n", package, version
81
123
  if "rubygems-update" == package && command =~ /gem(\d+\.\d+) install/
82
124
  puts "PATH=\"$PATH:/var/lib/gems/#{$1}/bin\" update_rubygems"
@@ -117,7 +159,7 @@ EOF
117
159
  walk(
118
160
  :before => lambda { |manager, command|
119
161
  p = packages[manager]["_packages"]
120
- return if 0 == p.length || 1 == p.length && manager == p.keys.first
162
+ return if 0 == p.length || 1 == p.length && p[manager]
121
163
  puts "\n\t# Packages that depend on #{manager}."
122
164
  case manager
123
165
  when /rubygems|rip/
@@ -166,9 +208,7 @@ EOF
166
208
 
167
209
  # Debian packages get no special treatment.
168
210
  else
169
- if manager == package
170
- puts Package.partial(package, :ensure => version)
171
- else
211
+ unless manager == package
172
212
  puts Package.partial(package,
173
213
  :require => Package[manager],
174
214
  :ensure => version
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: devstructure
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
4
+ hash: 15
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 7
10
- version: 0.0.7
9
+ - 8
10
+ version: 0.0.8
11
11
  platform: ruby
12
12
  authors:
13
13
  - Richard Crowley
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-06-14 00:00:00 +00:00
18
+ date: 2010-06-16 00:00:00 +00:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency