librarian-puppet 0.0.1.pre

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 (107) hide show
  1. data/.gitignore +1 -0
  2. data/LICENSE +20 -0
  3. data/README.md +0 -0
  4. data/bin/librarian-puppet +9 -0
  5. data/lib/librarian/puppet.rb +7 -0
  6. data/lib/librarian/puppet/cli.rb +30 -0
  7. data/lib/librarian/puppet/dsl.rb +14 -0
  8. data/lib/librarian/puppet/environment.rb +18 -0
  9. data/lib/librarian/puppet/extension.rb +9 -0
  10. data/lib/librarian/puppet/source.rb +2 -0
  11. data/lib/librarian/puppet/source/git.rb +12 -0
  12. data/lib/librarian/puppet/source/local.rb +46 -0
  13. data/lib/librarian/puppet/source/path.rb +12 -0
  14. data/lib/librarian/puppet/templates/Puppetfile +6 -0
  15. data/librarian-puppet.gemspec +126 -0
  16. data/vendor/librarian/.rspec +1 -0
  17. data/vendor/librarian/.travis.yml +6 -0
  18. data/vendor/librarian/CHANGELOG.md +168 -0
  19. data/vendor/librarian/Gemfile +4 -0
  20. data/vendor/librarian/MIT-LICENSE +20 -0
  21. data/vendor/librarian/README.md +318 -0
  22. data/vendor/librarian/Rakefile +34 -0
  23. data/vendor/librarian/bin/librarian-chef +7 -0
  24. data/vendor/librarian/bin/librarian-mock +7 -0
  25. data/vendor/librarian/config/cucumber.yaml +1 -0
  26. data/vendor/librarian/features/chef/cli/init.feature +10 -0
  27. data/vendor/librarian/features/chef/cli/install.feature +64 -0
  28. data/vendor/librarian/features/chef/cli/show.feature +65 -0
  29. data/vendor/librarian/features/chef/cli/version.feature +11 -0
  30. data/vendor/librarian/features/support/env.rb +9 -0
  31. data/vendor/librarian/lib/librarian.rb +19 -0
  32. data/vendor/librarian/lib/librarian/action.rb +5 -0
  33. data/vendor/librarian/lib/librarian/action/base.rb +22 -0
  34. data/vendor/librarian/lib/librarian/action/clean.rb +44 -0
  35. data/vendor/librarian/lib/librarian/action/ensure.rb +24 -0
  36. data/vendor/librarian/lib/librarian/action/install.rb +95 -0
  37. data/vendor/librarian/lib/librarian/action/resolve.rb +81 -0
  38. data/vendor/librarian/lib/librarian/action/update.rb +78 -0
  39. data/vendor/librarian/lib/librarian/chef.rb +1 -0
  40. data/vendor/librarian/lib/librarian/chef/cli.rb +27 -0
  41. data/vendor/librarian/lib/librarian/chef/dsl.rb +15 -0
  42. data/vendor/librarian/lib/librarian/chef/environment.rb +19 -0
  43. data/vendor/librarian/lib/librarian/chef/extension.rb +9 -0
  44. data/vendor/librarian/lib/librarian/chef/integration/knife.rb +42 -0
  45. data/vendor/librarian/lib/librarian/chef/manifest_reader.rb +47 -0
  46. data/vendor/librarian/lib/librarian/chef/source.rb +3 -0
  47. data/vendor/librarian/lib/librarian/chef/source/git.rb +12 -0
  48. data/vendor/librarian/lib/librarian/chef/source/local.rb +63 -0
  49. data/vendor/librarian/lib/librarian/chef/source/path.rb +12 -0
  50. data/vendor/librarian/lib/librarian/chef/source/site.rb +434 -0
  51. data/vendor/librarian/lib/librarian/chef/templates/Cheffile +15 -0
  52. data/vendor/librarian/lib/librarian/cli.rb +175 -0
  53. data/vendor/librarian/lib/librarian/cli/manifest_presenter.rb +79 -0
  54. data/vendor/librarian/lib/librarian/dependency.rb +95 -0
  55. data/vendor/librarian/lib/librarian/dsl.rb +105 -0
  56. data/vendor/librarian/lib/librarian/dsl/receiver.rb +48 -0
  57. data/vendor/librarian/lib/librarian/dsl/target.rb +176 -0
  58. data/vendor/librarian/lib/librarian/environment.rb +129 -0
  59. data/vendor/librarian/lib/librarian/error.rb +4 -0
  60. data/vendor/librarian/lib/librarian/helpers.rb +13 -0
  61. data/vendor/librarian/lib/librarian/helpers/debug.rb +35 -0
  62. data/vendor/librarian/lib/librarian/lockfile.rb +33 -0
  63. data/vendor/librarian/lib/librarian/lockfile/compiler.rb +70 -0
  64. data/vendor/librarian/lib/librarian/lockfile/parser.rb +104 -0
  65. data/vendor/librarian/lib/librarian/manifest.rb +140 -0
  66. data/vendor/librarian/lib/librarian/manifest_set.rb +153 -0
  67. data/vendor/librarian/lib/librarian/mock.rb +1 -0
  68. data/vendor/librarian/lib/librarian/mock/cli.rb +19 -0
  69. data/vendor/librarian/lib/librarian/mock/dsl.rb +15 -0
  70. data/vendor/librarian/lib/librarian/mock/environment.rb +24 -0
  71. data/vendor/librarian/lib/librarian/mock/extension.rb +9 -0
  72. data/vendor/librarian/lib/librarian/mock/source.rb +1 -0
  73. data/vendor/librarian/lib/librarian/mock/source/mock.rb +97 -0
  74. data/vendor/librarian/lib/librarian/mock/source/mock/registry.rb +83 -0
  75. data/vendor/librarian/lib/librarian/resolution.rb +44 -0
  76. data/vendor/librarian/lib/librarian/resolver.rb +73 -0
  77. data/vendor/librarian/lib/librarian/resolver/implementation.rb +122 -0
  78. data/vendor/librarian/lib/librarian/source.rb +2 -0
  79. data/vendor/librarian/lib/librarian/source/git.rb +150 -0
  80. data/vendor/librarian/lib/librarian/source/git/repository.rb +213 -0
  81. data/vendor/librarian/lib/librarian/source/local.rb +51 -0
  82. data/vendor/librarian/lib/librarian/source/path.rb +74 -0
  83. data/vendor/librarian/lib/librarian/spec.rb +13 -0
  84. data/vendor/librarian/lib/librarian/spec_change_set.rb +170 -0
  85. data/vendor/librarian/lib/librarian/specfile.rb +22 -0
  86. data/vendor/librarian/lib/librarian/support/abstract_method.rb +21 -0
  87. data/vendor/librarian/lib/librarian/ui.rb +64 -0
  88. data/vendor/librarian/lib/librarian/version.rb +3 -0
  89. data/vendor/librarian/librarian.gemspec +33 -0
  90. data/vendor/librarian/spec/functional/chef/source/git_spec.rb +432 -0
  91. data/vendor/librarian/spec/functional/chef/source/site_spec.rb +215 -0
  92. data/vendor/librarian/spec/unit/action/base_spec.rb +18 -0
  93. data/vendor/librarian/spec/unit/action/clean_spec.rb +102 -0
  94. data/vendor/librarian/spec/unit/action/ensure_spec.rb +37 -0
  95. data/vendor/librarian/spec/unit/action/install_spec.rb +111 -0
  96. data/vendor/librarian/spec/unit/dependency_spec.rb +30 -0
  97. data/vendor/librarian/spec/unit/dsl_spec.rb +194 -0
  98. data/vendor/librarian/spec/unit/environment_spec.rb +9 -0
  99. data/vendor/librarian/spec/unit/lockfile/parser_spec.rb +162 -0
  100. data/vendor/librarian/spec/unit/lockfile_spec.rb +65 -0
  101. data/vendor/librarian/spec/unit/manifest_set_spec.rb +202 -0
  102. data/vendor/librarian/spec/unit/manifest_spec.rb +30 -0
  103. data/vendor/librarian/spec/unit/mock/source/mock_spec.rb +22 -0
  104. data/vendor/librarian/spec/unit/resolver_spec.rb +192 -0
  105. data/vendor/librarian/spec/unit/source/git_spec.rb +29 -0
  106. data/vendor/librarian/spec/unit/spec_change_set_spec.rb +169 -0
  107. metadata +163 -0
@@ -0,0 +1,213 @@
1
+ require 'open3'
2
+
3
+ require 'librarian/helpers/debug'
4
+
5
+ module Librarian
6
+ module Source
7
+ class Git
8
+ class Repository
9
+
10
+ class << self
11
+ def clone!(environment, path, repository_url)
12
+ path = Pathname.new(path)
13
+ path.mkpath
14
+ git = new(environment, path)
15
+ git.clone!(repository_url)
16
+ git
17
+ end
18
+
19
+ def bin
20
+ @bin ||= which("git") or raise Error, "cannot find git"
21
+ end
22
+
23
+ private
24
+
25
+ # Cross-platform way of finding an executable in the $PATH.
26
+ #
27
+ # which('ruby') #=> /usr/bin/ruby
28
+ #
29
+ # From:
30
+ # https://github.com/defunkt/hub/commit/353031307e704d860826fc756ff0070be5e1b430#L2R173
31
+ def which(cmd)
32
+ exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
33
+ ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
34
+ path = File.expand_path(path)
35
+ exts.each do |ext|
36
+ exe = File.join(path, cmd + ext)
37
+ return exe if File.executable?(exe)
38
+ end
39
+ end
40
+ nil
41
+ end
42
+ end
43
+
44
+ include Helpers::Debug
45
+
46
+ attr_accessor :environment, :path
47
+ private :environment=, :path=
48
+
49
+ def initialize(environment, path)
50
+ self.environment = environment
51
+ self.path = Pathname.new(path)
52
+ end
53
+
54
+ def git?
55
+ path.join('.git').exist?
56
+ end
57
+
58
+ def default_remote
59
+ "origin"
60
+ end
61
+
62
+ def version(options = { })
63
+ version!(options).strip
64
+ end
65
+
66
+ def version!(options = { })
67
+ silent = options.delete(:silent)
68
+
69
+ command = %w(--version)
70
+ run!(command, :silent => silent)
71
+ end
72
+
73
+ def clone!(repository_url)
74
+ command = %W(clone #{repository_url} . --quiet)
75
+ run!(command, :chdir => true)
76
+ end
77
+
78
+ def checkout!(reference, options ={ })
79
+ command = %W(checkout #{reference} --quiet)
80
+ command << "--force" if options[:force]
81
+ run!(command, :chdir => true)
82
+ end
83
+
84
+ def fetch!(remote, options = { })
85
+ command = %W(fetch #{remote} --quiet)
86
+ command << "--tags" if options[:tags]
87
+ run!(command, :chdir => true)
88
+ end
89
+
90
+ def reset_hard!
91
+ command = %W(reset --hard --quiet)
92
+ run!(command, :chdir => true)
93
+ end
94
+
95
+ def clean!
96
+ command = %w(clean -x -d --force --force)
97
+ run!(command, :chdir => true)
98
+ end
99
+
100
+ def checked_out?(sha)
101
+ current_commit_hash == sha
102
+ end
103
+
104
+ def remote_names
105
+ command = %W(remote)
106
+ run!(command, :chdir => true).strip.lines.map(&:strip)
107
+ end
108
+
109
+ def remote_branch_names
110
+ remotes = remote_names.sort_by(&:length).reverse
111
+
112
+ command = %W(branch -r)
113
+ names = run!(command, :chdir => true).strip.lines.map(&:strip).to_a
114
+ names.each{|n| n.gsub!(/\s*->.*$/, "")}
115
+ names.reject!{|n| n =~ /\/HEAD$/}
116
+ Hash[remotes.map do |r|
117
+ matching_names = names.select{|n| n.start_with?("#{r}/")}
118
+ matching_names.each{|n| names.delete(n)}
119
+ matching_names.each{|n| n.slice!(0, r.size + 1)}
120
+ [r, matching_names]
121
+ end]
122
+ end
123
+
124
+ def hash_from(remote, reference)
125
+ branch_names = remote_branch_names[remote]
126
+ if branch_names.include?(reference)
127
+ reference = "#{remote}/#{reference}"
128
+ end
129
+
130
+ command = %W(rev-parse #{reference} --quiet)
131
+ run!(command, :chdir => true).strip
132
+ end
133
+
134
+ def current_commit_hash
135
+ command = %W(rev-parse HEAD --quiet)
136
+ run!(command, :chdir => true).strip!
137
+ end
138
+
139
+ private
140
+
141
+ def bin
142
+ self.class.bin
143
+ end
144
+
145
+ def run!(args, options = { })
146
+ chdir = options.delete(:chdir)
147
+ chdir = path.to_s if chdir == true
148
+
149
+ silent = options.delete(:silent)
150
+
151
+ command = [bin]
152
+ command.concat(args)
153
+
154
+ maybe_within(chdir) do
155
+ logging_command(command, :silent => silent) do
156
+ run_command_internal(command)
157
+ end
158
+ end
159
+ end
160
+
161
+ def maybe_within(path)
162
+ if path
163
+ Dir.chdir(path) { with_env_var("GIT_DIR", nil) { yield } }
164
+ else
165
+ yield
166
+ end
167
+ end
168
+
169
+ def with_env_var(name, value)
170
+ original_value = ENV[name]
171
+ begin
172
+ ENV[name] = value
173
+ yield
174
+ ensure
175
+ ENV[name] = original_value
176
+ end
177
+ end
178
+
179
+ def logging_command(command, options)
180
+ silent = options.delete(:silent)
181
+
182
+ pwd = Dir.pwd
183
+
184
+ unless silent
185
+ debug { "Running `#{command.join(' ')}` in #{relative_path_to(pwd)}" }
186
+ end
187
+
188
+ out = yield
189
+
190
+ unless silent
191
+ if out.size > 0
192
+ out.lines.each do |line|
193
+ debug { " --> #{line}" }
194
+ end
195
+ else
196
+ debug { " --- No output" }
197
+ end
198
+ end
199
+
200
+ out
201
+ end
202
+
203
+ def run_command_internal(command)
204
+ Open3.popen3(*command) do |i, o, e, t|
205
+ raise StandardError, e.read unless (t ? t.value : $?).success?
206
+ o.read
207
+ end
208
+ end
209
+
210
+ end
211
+ end
212
+ end
213
+ end
@@ -0,0 +1,51 @@
1
+ require 'librarian/helpers/debug'
2
+ require 'librarian/support/abstract_method'
3
+
4
+ module Librarian
5
+ module Source
6
+ # Requires that the including source class have methods:
7
+ # #path
8
+ # #environment
9
+ module Local
10
+
11
+ include Helpers::Debug
12
+ include Support::AbstractMethod
13
+
14
+ abstract_method :path, :fetch_version, :fetch_dependencies
15
+
16
+ def manifests(name)
17
+ manifest = Manifest.new(self, name)
18
+ [manifest].compact
19
+ end
20
+
21
+ def manifest(name, version, dependencies)
22
+ manifest = Manifest.new(self, name)
23
+ manifest.version = version
24
+ manifest.dependencies = dependencies
25
+ manifest
26
+ end
27
+
28
+ def manifest_search_paths(name)
29
+ @manifest_search_paths ||= { }
30
+ @manifest_search_paths[name] ||= begin
31
+ cache!
32
+ paths = [filesystem_path, filesystem_path.join(name)]
33
+ paths.select{|s| s.exist?}
34
+ end
35
+ end
36
+
37
+ def found_path(name)
38
+ @_found_paths ||= { }
39
+ @_found_paths[name] ||= begin
40
+ paths = manifest_search_paths(name)
41
+ paths.find{|p| manifest?(name, p)}
42
+ end
43
+ end
44
+
45
+ private
46
+
47
+ abstract_method :manifest? # (name, path) -> boolean
48
+
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,74 @@
1
+ require 'librarian/source/local'
2
+
3
+ module Librarian
4
+ module Source
5
+ class Path
6
+
7
+ include Local
8
+
9
+ class << self
10
+
11
+ LOCK_NAME = 'PATH'
12
+
13
+ def lock_name
14
+ LOCK_NAME
15
+ end
16
+
17
+ def from_lock_options(environment, options)
18
+ new(environment, options[:remote], options.reject{|k, v| k == :remote})
19
+ end
20
+
21
+ def from_spec_args(environment, path, options)
22
+ recognized_options = []
23
+ unrecognized_options = options.keys - recognized_options
24
+ unrecognized_options.empty? or raise Error, "unrecognized options: #{unrecognized_options.join(", ")}"
25
+
26
+ new(environment, path, options)
27
+ end
28
+
29
+ end
30
+
31
+ attr_accessor :environment
32
+ private :environment=
33
+ attr_reader :path
34
+
35
+ def initialize(environment, path, options)
36
+ self.environment = environment
37
+ @path = path
38
+ end
39
+
40
+ def to_s
41
+ path.to_s
42
+ end
43
+
44
+ def ==(other)
45
+ other &&
46
+ self.class == other.class &&
47
+ self.path == other.path
48
+ end
49
+
50
+ def to_spec_args
51
+ [path.to_s, {}]
52
+ end
53
+
54
+ def to_lock_options
55
+ {:remote => path}
56
+ end
57
+
58
+ def pinned?
59
+ false
60
+ end
61
+
62
+ def unpin!
63
+ end
64
+
65
+ def cache!
66
+ end
67
+
68
+ def filesystem_path
69
+ @filesystem_path ||= Pathname.new(path).expand_path(environment.project_path)
70
+ end
71
+
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,13 @@
1
+ module Librarian
2
+ class Spec
3
+
4
+ attr_accessor :source, :dependencies
5
+ private :source=, :dependencies=
6
+
7
+ def initialize(source, dependencies)
8
+ self.source = source
9
+ self.dependencies = dependencies
10
+ end
11
+
12
+ end
13
+ end
@@ -0,0 +1,170 @@
1
+ require 'librarian/helpers'
2
+ require 'librarian/helpers/debug'
3
+
4
+ require 'librarian/manifest_set'
5
+ require 'librarian/resolution'
6
+ require 'librarian/spec'
7
+
8
+ module Librarian
9
+ class SpecChangeSet
10
+
11
+ include Helpers::Debug
12
+
13
+ attr_accessor :environment
14
+ private :environment=
15
+ attr_reader :spec, :lock
16
+
17
+ def initialize(environment, spec, lock)
18
+ self.environment = environment
19
+ raise TypeError, "can't convert #{spec.class} into #{Spec}" unless Spec === spec
20
+ raise TypeError, "can't convert #{lock.class} into #{Resolution}" unless Resolution === lock
21
+ @spec, @lock = spec, lock
22
+ end
23
+
24
+ def same?
25
+ @same ||= spec.dependencies.sort_by{|d| d.name} == lock.dependencies.sort_by{|d| d.name}
26
+ end
27
+
28
+ def changed?
29
+ !same?
30
+ end
31
+
32
+ def spec_dependencies
33
+ @spec_dependencies ||= spec.dependencies
34
+ end
35
+ def spec_dependency_names
36
+ @spec_dependency_names ||= Set.new(spec_dependencies.map{|d| d.name})
37
+ end
38
+ def spec_dependency_index
39
+ @spec_dependency_index ||= Hash[spec_dependencies.map{|d| [d.name, d]}]
40
+ end
41
+
42
+ def lock_dependencies
43
+ @lock_dependencies ||= lock.dependencies
44
+ end
45
+ def lock_dependency_names
46
+ @lock_dependency_names ||= Set.new(lock_dependencies.map{|d| d.name})
47
+ end
48
+ def lock_dependency_index
49
+ @lock_dependency_index ||= Hash[lock_dependencies.map{|d| [d.name, d]}]
50
+ end
51
+
52
+ def lock_manifests
53
+ @lock_manifests ||= lock.manifests
54
+ end
55
+ def lock_manifests_index
56
+ @lock_manifests_index ||= ManifestSet.new(lock_manifests).to_hash
57
+ end
58
+
59
+ def removed_dependency_names
60
+ @removed_dependency_names ||= lock_dependency_names - spec_dependency_names
61
+ end
62
+
63
+ # A dependency which is deleted from the specfile will, in the general case,
64
+ # be removed conservatively. This means it might not actually be removed.
65
+ # But if the dependency originally declared a source which is now non-
66
+ # default, it must be removed, even if another dependency has a transitive
67
+ # dependency on the one that was removed (which is the scenario in which
68
+ # a conservative removal would not remove it). In this case, we must also
69
+ # remove it explicitly so that it can be re-resolved from the default
70
+ # source.
71
+ def explicit_removed_dependency_names
72
+ @explicit_removed_dependency_names ||= removed_dependency_names.reject do |name|
73
+ lock_manifest = lock_manifests_index[name]
74
+ lock_manifest.source == spec.source
75
+ end.to_set
76
+ end
77
+
78
+ def added_dependency_names
79
+ @added_dependency_names ||= spec_dependency_names - lock_dependency_names
80
+ end
81
+
82
+ def nonmatching_added_dependency_names
83
+ @nonmatching_added_dependency_names ||= added_dependency_names.reject do |name|
84
+ spec_dependency = spec_dependency_index[name]
85
+ lock_manifest = lock_manifests_index[name]
86
+ if lock_manifest
87
+ matching = true
88
+ matching &&= spec_dependency.satisfied_by?(lock_manifest)
89
+ matching &&= spec_dependency.source == lock_manifest.source
90
+ matching
91
+ else
92
+ false
93
+ end
94
+ end.to_set
95
+ end
96
+
97
+ def common_dependency_names
98
+ @common_dependency_names ||= lock_dependency_names & spec_dependency_names
99
+ end
100
+
101
+ def changed_dependency_names
102
+ @changed_dependency_names ||= common_dependency_names.reject do |name|
103
+ spec_dependency = spec_dependency_index[name]
104
+ lock_dependency = lock_dependency_index[name]
105
+ lock_manifest = lock_manifests_index[name]
106
+ same = true
107
+ same &&= spec_dependency.satisfied_by?(lock_manifest)
108
+ same &&= spec_dependency.source == lock_dependency.source
109
+ same
110
+ end.to_set
111
+ end
112
+
113
+ def deep_keep_manifest_names
114
+ @deep_keep_manifest_names ||= begin
115
+ lock_dependency_names - (
116
+ removed_dependency_names +
117
+ changed_dependency_names +
118
+ nonmatching_added_dependency_names
119
+ )
120
+ end
121
+ end
122
+
123
+ def shallow_strip_manifest_names
124
+ @shallow_strip_manifest_names ||= begin
125
+ explicit_removed_dependency_names + changed_dependency_names
126
+ end
127
+ end
128
+
129
+ def inspect
130
+ Helpers.strip_heredoc(<<-INSPECT)
131
+ <##{self.class.name}:
132
+ Removed: #{removed_dependency_names.to_a.join(", ")}
133
+ ExplicitRemoved: #{explicit_removed_dependency_names.to_a.join(", ")}
134
+ Added: #{added_dependency_names.to_a.join(", ")}
135
+ NonMatchingAdded: #{nonmatching_added_dependency_names.to_a.join(", ")}
136
+ Changed: #{changed_dependency_names.to_a.join(", ")}
137
+ DeepKeep: #{deep_keep_manifest_names.to_a.join(", ")}
138
+ ShallowStrip: #{shallow_strip_manifest_names.to_a.join(", ")}
139
+ >
140
+ INSPECT
141
+ end
142
+
143
+ # Returns an array of those manifests from the previous spec which should be kept,
144
+ # based on inspecting the new spec against the locked resolution from the previous spec.
145
+ def analyze
146
+ @analyze ||= begin
147
+ debug { "Analyzing spec and lock:" }
148
+
149
+ if same?
150
+ debug { " Same!" }
151
+ return lock.manifests
152
+ end
153
+
154
+ debug { " Removed:" } ; removed_dependency_names.each { |name| debug { " #{name}" } }
155
+ debug { " ExplicitRemoved:" } ; explicit_removed_dependency_names.each { |name| debug { " #{name}" } }
156
+ debug { " Added:" } ; added_dependency_names.each { |name| debug { " #{name}" } }
157
+ debug { " NonMatchingAdded:" } ; nonmatching_added_dependency_names.each { |name| debug { " #{name}" } }
158
+ debug { " Changed:" } ; changed_dependency_names.each { |name| debug { " #{name}" } }
159
+ debug { " DeepKeep:" } ; deep_keep_manifest_names.each { |name| debug { " #{name}" } }
160
+ debug { " ShallowStrip:" } ; shallow_strip_manifest_names.each { |name| debug { " #{name}" } }
161
+
162
+ manifests = ManifestSet.new(lock_manifests)
163
+ manifests.deep_keep!(deep_keep_manifest_names)
164
+ manifests.shallow_strip!(shallow_strip_manifest_names)
165
+ manifests.to_a
166
+ end
167
+ end
168
+
169
+ end
170
+ end