summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Smith <tsmith@chef.io>2018-09-10 10:27:09 -0700
committerGitHub <noreply@github.com>2018-09-10 10:27:09 -0700
commit2c9c9a0bc9bc088b7441acf22fcea4318373bdc8 (patch)
treed3c8ae068a791e278df8ce85039ee2a25d6a7e9d
parentcdb214840fb60fa91977e54531b8f642895b7bfd (diff)
parent7ccfb96bacbfe7c5aa3bc19eb79653701fbf04ab (diff)
downloadchef-2c9c9a0bc9bc088b7441acf22fcea4318373bdc8.tar.gz
Merge pull request #7551 from thechile/fix-cookbook-version-regex
Fix remote_directory does not obey removal of file specificity
-rw-r--r--lib/chef/cookbook_version.rb4
-rw-r--r--spec/unit/cookbook_version_file_specificity_spec.rb20
2 files changed, 22 insertions, 2 deletions
diff --git a/lib/chef/cookbook_version.rb b/lib/chef/cookbook_version.rb
index 343b037c8b..07ee501ff7 100644
--- a/lib/chef/cookbook_version.rb
+++ b/lib/chef/cookbook_version.rb
@@ -296,9 +296,9 @@ class Chef
# we're just going to make cookbook_files out of these and make the
# cookbook find them by filespecificity again. but it's the shortest
# path to "success" for now.
- if manifest_record_path =~ /(#{Regexp.escape(segment.to_s)}\/[^\/]+\/#{Regexp.escape(dirname)})\/.+$/
+ if manifest_record_path =~ /(#{Regexp.escape(segment.to_s)}\/[^\/]*\/?#{Regexp.escape(dirname)})\/.+$/
specificity_dirname = $1
- non_specific_path = manifest_record_path[/#{Regexp.escape(segment.to_s)}\/[^\/]+\/#{Regexp.escape(dirname)}\/(.+)$/, 1]
+ non_specific_path = manifest_record_path[/#{Regexp.escape(segment.to_s)}\/[^\/]*\/?#{Regexp.escape(dirname)}\/(.+)$/, 1]
# Record the specificity_dirname only if it's in the list of
# valid preferences
if filenames_by_pref[specificity_dirname]
diff --git a/spec/unit/cookbook_version_file_specificity_spec.rb b/spec/unit/cookbook_version_file_specificity_spec.rb
index b7d5a9b288..d5ecbe4d62 100644
--- a/spec/unit/cookbook_version_file_specificity_spec.rb
+++ b/spec/unit/cookbook_version_file_specificity_spec.rb
@@ -95,6 +95,13 @@ describe Chef::CookbookVersion, "file specificity" do
# directory adirectory
{
name: "files/anotherfile1.rb",
+ path: "files/root_directory/anotherfile1.rb.root",
+ checksum: "csum-root-directory",
+ specificity: "root_directory",
+ },
+
+ {
+ name: "files/anotherfile1.rb",
path: "files/host-examplehost.example.org/adirectory/anotherfile1.rb.host",
full_path: "/cookbook-folder/files/host-examplehost.example.org/adirectory/anotherfile1.rb.host",
checksum: "csum-host-1",
@@ -483,6 +490,19 @@ describe Chef::CookbookVersion, "file specificity" do
## Globbing the relative paths out of the manifest records ##
describe "when globbing for relative file paths based on filespecificity" do
+ it "should return a list of relative paths based on priority preference: root directory" do
+ node = Chef::Node.new
+ node.automatic_attrs[:platform] = "ubuntu"
+ node.automatic_attrs[:platform_version] = "9.10"
+ node.automatic_attrs[:fqdn] = "examplehost.example.org"
+
+ filenames = @cookbook.relative_filenames_in_preferred_directory(node, :files, "root_directory")
+ expect(filenames).not_to be_nil
+ expect(filenames.size).to eq(1)
+
+ expect(filenames.sort).to eq(["anotherfile1.rb.root"])
+ end
+
it "should return a list of relative paths based on priority preference: host" do
node = Chef::Node.new
node.automatic_attrs[:platform] = "ubuntu"