summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/puppet/util/rdoc/parser.rb15
-rw-r--r--spec/integration/application/doc_spec.rb48
-rwxr-xr-xspec/unit/util/rdoc/parser_spec.rb2
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")