diff options
author | Lamont Granquist <lamont@scriptkiddie.org> | 2018-01-22 11:41:11 -0800 |
---|---|---|
committer | Lamont Granquist <lamont@scriptkiddie.org> | 2018-01-22 11:41:11 -0800 |
commit | e32c1733567455dc6f3ce0f702d981f261413b90 (patch) | |
tree | e445572574b7c4897a869c84a1c2e77c0bb89e4a /lib | |
parent | 9439fd6e5da8d87f48ebc1b6de4b7c09c8654c39 (diff) | |
download | chef-e32c1733567455dc6f3ce0f702d981f261413b90.tar.gz |
Convert node map to last-writer-wins for ties
We still bind preferentially by specificity, but for ties with
specificity we now prefer last-writer-wins instead of the alphabetic
by class name method we had before (that was never documented and I'm
pretty certain nobody understood).
So now `provides(:whatever) { true }` in a cookbook should always win
over core.
Signed-off-by: Lamont Granquist <lamont@scriptkiddie.org>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/chef/node_map.rb | 28 | ||||
-rw-r--r-- | lib/chef/resource/file.rb | 2 | ||||
-rw-r--r-- | lib/chef/resource/link.rb | 3 |
3 files changed, 8 insertions, 25 deletions
diff --git a/lib/chef/node_map.rb b/lib/chef/node_map.rb index dde93a437d..ecd5c9df8f 100644 --- a/lib/chef/node_map.rb +++ b/lib/chef/node_map.rb @@ -1,6 +1,6 @@ # # Author:: Lamont Granquist (<lamont@chef.io>) -# Copyright:: Copyright 2014-2017, Chef Software Inc. +# Copyright:: Copyright 2014-2018, Chef Software Inc. # License:: Apache License, Version 2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -192,8 +192,10 @@ class Chef !!canonical == !!matcher[:canonical] end - # @api private - def dispatch_compare_matchers(key, new_matcher, matcher) + # + # "provides" lines with identical filters sort by class name (ascending). + # + def compare_matchers(key, new_matcher, matcher) cmp = compare_matcher_properties(new_matcher[:block], matcher[:block]) return cmp if cmp != 0 cmp = compare_matcher_properties(new_matcher[:platform_version], matcher[:platform_version]) @@ -210,26 +212,6 @@ class Chef 0 end - # - # "provides" lines with identical filters sort by class name (ascending). - # - def compare_matchers(key, new_matcher, matcher) - cmp = dispatch_compare_matchers(key, new_matcher, matcher) - if cmp == 0 - # Sort by class name (ascending) as well, if all other properties - # are exactly equal - # XXX: remove this in Chef-14 and use last-writer-wins (prepend if they match) - if !new_matcher[:override] - # we only sort classes, which only sorts the handler array, this magically does not sort - # the priority array via the invisible else here. - if new_matcher[:klass].is_a?(Class) - cmp = compare_matcher_properties(new_matcher[:klass].name, matcher[:klass].name) - end - end - end - cmp - end - def compare_matcher_properties(a, b) # falsity comparisons here handle both "nil" and "false" return 1 if !a && b diff --git a/lib/chef/resource/file.rb b/lib/chef/resource/file.rb index 43d9c57150..787992fc24 100644 --- a/lib/chef/resource/file.rb +++ b/lib/chef/resource/file.rb @@ -1,7 +1,7 @@ # # Author:: Adam Jacob (<adam@chef.io>) # Author:: Seth Chisamore (<schisamo@chef.io>) -# Copyright:: Copyright 2008-2016 Chef Software, Inc. +# Copyright:: Copyright 2008-2018, Chef Software Inc. # License:: Apache License, Version 2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/lib/chef/resource/link.rb b/lib/chef/resource/link.rb index 7a106b1703..d51d42b506 100644 --- a/lib/chef/resource/link.rb +++ b/lib/chef/resource/link.rb @@ -1,7 +1,7 @@ # # Author:: Adam Jacob (<adam@chef.io>) # Author:: Tyler Cloke (<tyler@chef.io>) -# Copyright:: Copyright 2008-2016, Chef Software Inc. +# Copyright:: Copyright 2008-2018, Chef Software Inc. # License:: Apache License, Version 2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -34,6 +34,7 @@ class Chef # original file. class Link < Chef::Resource include Chef::Mixin::Securable + resource_name :link identity_attr :target_file |