Issue #2053 has been updated by Nick Fagerlund.

I think deprecation would look like: 

* Implement a slightly more aggressive version of #5208 -- this is a feature 
request for smart warnings, so you'd ONLY get warned about "`include nagios`" 
if there were a relatively-named `<something>::nagios` class within the current 
chain of namespaces. (By "slightly more aggressive," I mean we should warn 
whenever relative namespacing finds something, not just when the relatively 
named class blocks an absolutely named class.)
* Provide a temporary pref (off by default) that turns on "strict mode" for 
absolute names (include nagios always means include nagios), so anyone who has 
investigated their warnings can start living in the future immediately. 

I think this would:

* Prevent anyone from having to use the ::nagios idiom, and free up anyone who 
currently has to use it.
* Alert people who didn't even KNOW that their namespaces were getting resolved 
relatively. 
* Give anyone who actually USES relative naming in their modules a clear idea 
of what they need to do and at which lines in their code to do it.

This is obviously more work than the scope warnings were, but hey, if it's 
worth doing...
----------------------------------------
Bug #2053: Relative namespacing of class/define names results in big surprises
https://projects.puppetlabs.com/issues/2053#change-68775

Author: Lawrence Ludwig
Status: Needs Decision
Priority: Normal
Assignee: eric sorenson
Category: modules
Target version: 
Affected Puppet version: 0.24.7
Keywords: telly deprecation modules classes namespaces names
Branch: 


Due to Puppet's relative namespacing of class names, `include bar` does not 
mean "declare class `bar`." It actually means "try to declare class `<current 
namespace>::bar`, class `<parent of current namespace>::bar`, and so on, 
declaring class `bar` only as a last result."

    class bar {
      notice("From class bar")
    }
    class foo::bar {
      notice("From class foo::bar")
    }
    class foo {
      include bar
    }
    include foo

This is maximally surprising, especially considering the prevalence of things 
like:

    class apache::nagios {
      include nagios # joke's on you, because this just includes apache::nagios 
again
    }

(Test code from original report: <http://pastie.org/409446>)


-- 
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