From 4476f47c7a7404356bdd64cb41f4d0f484872244 Mon Sep 17 00:00:00 2001 From: Nick Bertrand Date: Fri, 12 Oct 2018 15:22:53 -0500 Subject: [PATCH] Allow dependency cycles --- lib/librarian/puppet/action/install.rb | 4 ++++ lib/librarian/puppet/action/resolve.rb | 5 +++++ lib/librarian/puppet/lockfile.rb | 14 ++++++++++++++ lib/librarian/puppet/resolver.rb | 14 ++++++++++++++ 4 files changed, 37 insertions(+) create mode 100644 lib/librarian/puppet/resolver.rb diff --git a/lib/librarian/puppet/action/install.rb b/lib/librarian/puppet/action/install.rb index 0db9e3e2..51435f5c 100644 --- a/lib/librarian/puppet/action/install.rb +++ b/lib/librarian/puppet/action/install.rb @@ -20,6 +20,10 @@ def check_specfile # don't fail if Puppetfile doesn't exist as we'll use the Modulefile or metadata.json end + def sorted_manifests + lock.manifests + end + end end end diff --git a/lib/librarian/puppet/action/resolve.rb b/lib/librarian/puppet/action/resolve.rb index 9c39f6c6..c81c0849 100644 --- a/lib/librarian/puppet/action/resolve.rb +++ b/lib/librarian/puppet/action/resolve.rb @@ -1,4 +1,5 @@ require 'librarian/action/resolve' +require 'librarian/puppet/resolver' module Librarian module Puppet @@ -15,6 +16,10 @@ def run end end + def resolver + Resolver.new(environment, cyclic: true) + end + end end end diff --git a/lib/librarian/puppet/lockfile.rb b/lib/librarian/puppet/lockfile.rb index f2053eb8..01b4b657 100644 --- a/lib/librarian/puppet/lockfile.rb +++ b/lib/librarian/puppet/lockfile.rb @@ -28,6 +28,20 @@ class << manifests_index super(lines, manifests_index) end + def compile(sources_ast) + manifests = compile_placeholder_manifests(sources_ast) + manifests = manifests.map do |name, manifest| + dependencies = manifest.dependencies.map do |d| + environment.dsl_class.dependency_type.new(d.name, d.requirement, manifests[d.name].source) + end + real = Manifest.new(manifest.source, manifest.name) + real.version = manifest.version + real.dependencies = manifest.dependencies + real + end + manifests.sort_by(&:name) + end + end def load(string) diff --git a/lib/librarian/puppet/resolver.rb b/lib/librarian/puppet/resolver.rb new file mode 100644 index 00000000..0fb71aad --- /dev/null +++ b/lib/librarian/puppet/resolver.rb @@ -0,0 +1,14 @@ +require 'librarian/resolver' + +module Librarian + module Puppet + class Resolver < Librarian::Resolver + + def sort(manifests) + manifests = manifests.values if Hash === manifests + manifests.sort_by(&:name) + end + + end + end +end