(#14288) gem provider should tolerate bad lines.

Previously, when the output of the gem command contained a line that didn't
match it was returned as `nil` - but the rest of the provider didn't handle
that value at all!

That led to any mismatch causing various failures to dereference `nil` as a
hash, and general failure.

This fixes this to behave significantly better by just omitting that entry in
the result, returning only the expected content.

Signed-off-by: Daniel Pittman <daniel@puppetlabs.com>
Update acceptance tests to use confine instead of skip_test loops

Now that the test harness supports confine :except, :platform = 'windows'
(and the like), update the tests to use that syntax.
Revert changes to symbolic_modes.rb -- this test should indeed be pending
(it should eventually work on Windows).
Remove EL-related test changes from this commit.

These changes will go to the 2.6.x branch instead.
(#14296) Improve template function error message.

The current template function does not provide sufficient detail for
troubleshooting. This patch uses the backtrace to provide the fully
qualified filepath and line number.

Previous error message:
Failed to parse template test/example.erb: undefined method `[]' for
nil:NilClass at /tmp/module/test/manifests/init.pp:2 on node example

New error message:
Failed to parse template test/example.erb:
  Filepath: /tmp/module/test/templates/example.erb
  Line: 10
  Detail: undefined method `[]' for nil:NilClass
 at /tmp/module/test/manifests/init.pp:2 on node example
Remove a bad test that can lead to random hangs...

Signed-off-by: Daniel Pittman <daniel@puppetlabs.com>
Merge pull request #735 from daniel-pittman/bug/2.7.x/14288-gem-provider-fails-on-bad-input

Bug/2.7.x/14288 gem provider fails on bad input
Don't use features to check for color in logging

The ansicolor feature was causing infinite recursion when it failed to load,
because it's used in logging and features tried to log when it failed to load.
Since logging should be usable at nearly any point in the system's life, it's
best to not depend on features at all.
Add Puppet::Util::Platform to abstract platform checks

This is different from the checks done in features, because sometimes we need
to check the platform before features are initialized.
Merge pull request #744 from pcarlisle/maint/2.7.x/ansicolor-recursion

fix ansicolor recursion
Fix a stub of ansicolor that I missed
Merge pull request #745 from pcarlisle/maint/2.7.x/ansicolor_log_spec

Fix a stub of ansicolor that I missed
Significantly improve compilation performance when using modules

When autoloading classes/defines, the typeloader constructs a set of
possible locations for the class, based on its name. Effectively, it
will look in the canonical locations corresponding to each namespace in
the fully-qualified name. So for each namespace, it will ask the
environment for a Puppet::Module instance for that module, to ask it
which of the module's potentially manifests match the class it's looking
for. To answer that request, the environment instantiates a
Puppet::Module.

This amounts to potentially thousands of Puppet::Module instances being
created, because it does this many times (based on nesting of the class
name) per include/autoload/import. When Puppet::Module instances are
created, they parse and load their metadata.json file, in part to
validate their use. This implies that each compilation results in
metadata.json being parsed thousands of times, which is extremely slow
(and obviously provides no actual benefit).

Fortunately, the environment object already keeps a list of
Puppet::Module instances for every module in its modulepath. The fix
applied here is simply to change the environment such that it provides
modules by looking them up in its cached list, resulting in up to an
order of magnitude improvement in compilation time.
maint: use relative paths to fixtures.

We used to return absolute paths to fixtures, rather than relative paths.

This made the test output uglier than it needed to be; we may as well do the
extra work to make them relative.

Signed-off-by: Daniel Pittman <daniel@puppetlabs.com>
(#10146) `-` is not legal in variable names.

When a bunch of refactoring went on to clean up the grammer and lexer, the `-`
character became a legal character in variable names.  This was not entirely
desired - and contravenes our existing rules for naming.

This adds testing for legal variable names, then applies that across the lexer
to ensure that legal names pass, and illegal names fail.

Signed-off-by: Daniel Pittman <daniel@puppetlabs.com>
Fix broken man page rake task

The mass static man page generator was broken! Something changed in commit
82e5fa9561e2d4cb1d699a41c14f50953d8f2d97 which broke the way we were passing
render_as to the man action; while that bears further investigation, we were
able to get the task working again by simply removing it, since the value we
were passing to option turned out to be redundant when using the action from
the API.

We also found that I had unwisely called the argument of the save action for
indirector faces "<object>", which Ronn confuses for an HTML tag of the same
name and then barfs on. This commit fixes that, too.
Merge pull request #758 from nfagerlund/maint/2.7.x/fix_man_pages

Fix broken man page rake task
Merge pull request #757 from daniel-pittman/bug/2.7.x/10146-don't-allow-dash-in-variables

Bug/2.7.x/10146 don't allow dash in variables
(#14440) Hack to allow help faces to be used as API

Because we have not done a good job of defining
state initialization life cycle when we try to use
puppet as API, we need to add a hack to the rake
manpage task so that it can generate man pages
for some faces that don't get properly initialized
w/o the hack.
Revert "maint: use relative paths to fixtures."

This reverts commit 7ce9e17cf1077604accc1a5cfe90ad7b1bb99a55.
The change to using Pathname in fixtures is not compatible with Windows.