Issue #4483 has been updated by Jesse Wolfe.

Status changed from Accepted to Available In Testing Branch
Assigned to changed from Paul Berry to Jesse Wolfe
Target version set to Statler
Branch set to http://github.com/reductivelabs/puppet/tree/next

Available in `next` as 16f701edd89a320ad73b5468d883dfb017fe6e96
----------------------------------------
Bug #4483: Already-loaded classes shadow autoloaded classes, violating 
namespace resolution order
http://projects.puppetlabs.com/issues/4483

Author: Paul Berry
Status: Available In Testing Branch
Priority: Normal
Assigned to: Jesse Wolfe
Category: 
Target version: Statler
Affected version: 2.6.1rc1
Keywords: 
Branch: http://github.com/reductivelabs/puppet/tree/next


I found this bug while investigating issue #4211.  The failure applies to 
0.25.5 as well as 2.6.1rc1.

If I run "puppet init.pp", supplying the following source files:

init.pp:
<pre>
class test::foo {
  include bar
}
include test::foo
</pre>

test/foo/bar.pp:
<pre>
class test::foo::bar {
  notify {"test::foo::bar": }
}
</pre>

I get this output:

<pre>
notice: test::foo::bar
notice: /Stage[main]/Test::Foo::Bar/Notify[test::foo::bar]/message: defined 
'message' as 'test::foo::bar'
</pre>

This is expected; the statement "include bar" is interpreted as referring to 
"test::foo::bar", so it causes "test/foo/bar.pp" to be autoloaded.

However, if I change init.pp to this:
<pre>
class test::bar {
  notify {"test::bar": }
}
class test::foo {
  include bar
}
include test::foo
</pre>

I now get this output:

<pre>
notice: test::bar
notice: /Stage[main]/Test::Bar/Notify[test::bar]/message: defined 'message' as 
'test::bar'
</pre>

This is unexpected.  The statement "include bar" should be resolved by looking 
first in test::foo, then in test, then at toplevel.  So it should still resolve 
to "test::foo::bar".

Further experimentation reveals that the shadowing effect only occurs because 
"test/foo/bar.pp" hasn't been loaded yet.  If you manually force that file to 
be loaded by changing init.pp to this:
<pre>
import "test/foo/bar.pp"
class test::bar {
  notify {"test::bar": }
}
class test::foo {
  include bar
}
include test::foo
</pre>

Then the expected behavior is restored.



-- 
You have received this notification because you have either subscribed to it, 
or are involved in it.
To change your notification preferences, please click here: 
http://projects.puppetlabs.com/my/account

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Bugs" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/puppet-bugs?hl=en.

Reply via email to