diff options
| -rw-r--r-- | lib/puppet/util/rdoc/parser.rb | 15 | ||||
| -rw-r--r-- | spec/integration/application/doc_spec.rb | 48 | ||||
| -rwxr-xr-x | spec/unit/util/rdoc/parser_spec.rb | 2 |
3 files changed, 58 insertions, 7 deletions
diff --git a/lib/puppet/util/rdoc/parser.rb b/lib/puppet/util/rdoc/parser.rb index 63df38ab9..841484322 100644 --- a/lib/puppet/util/rdoc/parser.rb +++ b/lib/puppet/util/rdoc/parser.rb @@ -33,13 +33,16 @@ class Parser # main entry point def scan - Puppet.info "rdoc: scanning #{@input_file_name}" - if @input_file_name =~ /\.pp$/ - @parser = Puppet::Parser::Parser.new(Puppet[:environment]) - @parser.file = @input_file_name - @ast = @parser.parse + env = Puppet::Node::Environment.new + unless env.known_resource_types.watching_file?(@input_file_name) + Puppet.info "rdoc: scanning #{@input_file_name}" + if @input_file_name =~ /\.pp$/ + @parser = Puppet::Parser::Parser.new(env) + @parser.file = @input_file_name + @ast = @parser.parse + end + scan_top_level(@top_level) end - scan_top_level(@top_level) @top_level end diff --git a/spec/integration/application/doc_spec.rb b/spec/integration/application/doc_spec.rb new file mode 100644 index 000000000..cb9f47868 --- /dev/null +++ b/spec/integration/application/doc_spec.rb @@ -0,0 +1,48 @@ +#!/usr/bin/env ruby + +require File.dirname(__FILE__) + '/../../spec_helper' +require 'puppet_spec/files' + +describe Puppet::Application::Doc do + include PuppetSpec::Files + + it "should not generate an error when module dir overlaps parent of site.pp (#4798)" do + begin + # Note: the directory structure below is more complex than it + # needs to be, but it's representative of the directory structure + # used in bug #4798. + old_dir = Dir.getwd # Note: can't use chdir with a block because it will generate bogus warnings + tmpdir = tmpfile('doc_spec') + Dir.mkdir(tmpdir) + Dir.chdir(tmpdir) + site_file = 'site.pp' + File.open(site_file, 'w') do |f| + f.puts '# A comment' + end + modules_dir = 'modules' + Dir.mkdir(modules_dir) + rt_dir = File.join(modules_dir, 'rt') + Dir.mkdir(rt_dir) + manifests_dir = File.join(rt_dir, 'manifests') + Dir.mkdir(manifests_dir) + rt_file = File.join(manifests_dir, 'rt.pp') + File.open(rt_file, 'w') do |f| + f.puts '# A class' + f.puts 'class foo { }' + f.puts '# A definition' + f.puts 'define bar { }' + end + + puppet = Puppet::Application[:doc] + Puppet[:modulepath] = modules_dir + Puppet[:manifest] = site_file + puppet.options[:mode] = :rdoc + puppet.expects(:exit).with(0) + puppet.run_command + + File.should be_exist('doc') + ensure + Dir.chdir(old_dir) + end + end +end diff --git a/spec/unit/util/rdoc/parser_spec.rb b/spec/unit/util/rdoc/parser_spec.rb index 79195e657..3614c0a3c 100755 --- a/spec/unit/util/rdoc/parser_spec.rb +++ b/spec/unit/util/rdoc/parser_spec.rb @@ -19,7 +19,7 @@ describe RDoc::Parser do it "should parse puppet files with the puppet parser" do @parser.stubs(:scan_top_level) parser = stub 'parser' - Puppet::Parser::Parser.expects(:new).returns(parser) + Puppet::Parser::Parser.stubs(:new).returns(parser) parser.expects(:parse) parser.expects(:file=).with("module/manifests/init.pp") |
