devstructure 0.0.7 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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