summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrice Figureau <brice-puppet@daysofwonder.com>2010-07-10 18:52:28 +0200
committerMarkus Roberts <Markus@reality.com>2010-07-11 09:29:35 -0700
commit99d8323ece06ffde0ddfb5753ef94541d473a9d9 (patch)
tree5515bf74450cd1615cb8b85a0e3bad11000a79ac
parenta2115afbe2a5ab83ea5c84896492eaaf62a33507 (diff)
downloadpuppet-99d8323ece06ffde0ddfb5753ef94541d473a9d9.tar.gz
puppet-99d8323ece06ffde0ddfb5753ef94541d473a9d9.tar.xz
puppet-99d8323ece06ffde0ddfb5753ef94541d473a9d9.zip
Fix #4206 - import "path/*" tries to import files twice
Due to the glob pattern used, we are trying to import manifests twice. Since it isn't possible (see #4205), it is not possible to use a pattern in an import statement. This patch makes sure manifests are returned only once. Signed-off-by: Brice Figureau <brice-puppet@daysofwonder.com>
-rw-r--r--lib/puppet/parser/files.rb2
-rw-r--r--spec/unit/parser/files_spec.rb6
2 files changed, 7 insertions, 1 deletions
diff --git a/lib/puppet/parser/files.rb b/lib/puppet/parser/files.rb
index 749743493..9ef05e102 100644
--- a/lib/puppet/parser/files.rb
+++ b/lib/puppet/parser/files.rb
@@ -24,7 +24,7 @@ module Puppet::Parser::Files
# Than that would be a "no."
end
abspat = File::expand_path(start, cwd)
- [nil, Dir.glob(abspat + (File.extname(abspat).empty? ? '{,.pp,.rb}' : '' )).reject { |f| FileTest.directory?(f) }]
+ [nil, Dir.glob(abspat + (File.extname(abspat).empty? ? '{,.pp,.rb}' : '' )).uniq.reject { |f| FileTest.directory?(f) }]
end
# Find the concrete file denoted by +file+. If +file+ is absolute,
diff --git a/spec/unit/parser/files_spec.rb b/spec/unit/parser/files_spec.rb
index d1b5491a2..fcfbfa613 100644
--- a/spec/unit/parser/files_spec.rb
+++ b/spec/unit/parser/files_spec.rb
@@ -173,6 +173,12 @@ describe Puppet::Parser::Files do
FileTest.expects(:directory?).with(dir).returns(true)
Puppet::Parser::Files.find_manifests(pattern)[1].should == [file]
end
+
+ it "should return files once only" do
+ pattern = @basepath + "/fully/qualified/pattern/*"
+ Dir.expects(:glob).with(pattern+'{,.pp,.rb}').returns(%w{one two one})
+ Puppet::Parser::Files.find_manifests(pattern)[1].should == %w{one two}
+ end
end
describe "when searching for manifests in a found module" do