Avoid circular requirement in FileMetadata indirection
Try again to avoid circular dependency in file indirections

Requiring the model at the end of the file seems the best approach for now.
Merge remote-tracking branch 'upstream/2.7.x' into 2.7rc
(#15264) Custom title patterns can fail cryptically.

If a type uses a composite namevar and none of the supplied title
patterns matched, #parse_title would return a nonsensical array value.
This would lead to unexpected behavior like output like:

    /usr/lib/ruby/1.8/puppet/puppet/resource.rb:235:in `to_hash': undefined method `merge' for #<Array:0x007ffba3d80d78> (NoMethodError)

If a type overrides the title_patterns method and nothing matched,
there's no possible way to recover from this. To prevent misleading
errors from being thrown, this patch raises an error if none of the
title patterns matched.
15547 : use a clean env for builtin check

solaris has /bin/cd as a command to ensure posix compatibility. So
we need to avoid using '/bin' in path if we want to ensure that we
are looking at shell builtin cd.
15547 : valid locales as sentinel and check

Using spurious values for LC_ALL and LANG values in solaris causes
some commands to barf. Since we are only checking for overrides, we
can aswell use a valid locale.
15547 : Add home environemnt to pkgutil

pkgutil expects home to be set when run as non-user. Add $HOME when
invoking pkgutil
(#15547) remove the spaec between method and ()
(Maint) Clarify which branches changes should be based on

Priror to this commit, CONTRIBUTING.md did not reflect our current
process in regards to where changes should be targeted. Now it is
clear on these issues so that it will be easier for community
members to target their submissions to the right location, and
prevent us from frequently having to kick back pull requests that
need to be rebased and retargeted.

<hailee@puppetlabs.com>
(Maint) Clarify that Redmine tickets are mandatory

Prior to this commit, it was unclear if it was required to have
a Redmine ticket before submitting a pull request. Now it is clear
that this is a requirement in order to help us keep track of
submissions.

Also add details about looking for already existing tickets that
are either duplicates or related. This should help with the issue
of having tons of tickets all related to one bigger issue which
cannot be tracked easily.

<hailee@puppetlabs.com>
(Maint) Be more honest about submission methods

While CONTRIBUTING.md makes it clear that GitHub is the best method
for submitting changes, it's important that we be honest about the
fact that Redmine and email patches have a tendency to get lost
(sometimes forever). Hopefuly this change will encourage people
even more to use GitHub as apposed to other methods of contributing.

<hailee@puppetlabs.com>
(#15676) Fix puppet module face SSL acceptance tests to use masters real hostname

Previously we had been using 'localhost' as the location of the master, which
is a dangerous assumption with systest, since the master may be located on
another host or 'localhost' may not give us the expected results.

This patch changes the usage of localhost to use the variable 'master' which
should point to the canonical hostname of the master each and every time.
(#15668) Don't pluginsync for apply

After trying out having apply pluginsync there have been several
unwanted side effects. This commit removes the apply command from
pluginsyncing and so leaves only agent and device still performing
pluginsync.
(#15668) Use only one way of triggering pluginsync

Previously the Configurer took a parameter, :skip_plugin_download, which
whould cause it to not trigger a pluginsync. At the same time the
pluginsync code (Downloader) would look at Puppet[:pluginsync] to decide
whether it should actually pluginsync or not.

This changes it so that there is only Pupppet[:pluginsync] which is
passed through to the Configurer as a :pluginsync parameter when the
Configurer is called. Now all callers can be explicit about doing the
pluginsync and the Configurer is less dependent on Puppet settings.
(Maint) Remove some more ambiguity

Remove the pieces of the document that say we support email and
Redmine patches, instead of just saying that we strongly
discourage these. Also change the places where we say "we recommend"
when what we really mean is "we require". Lastly, make a few small
changes that were brought up on the PR.

<hailee@puppetlabs.com>
Update CONTRIBUTING.md
Merge pull request #966 from kbarber/ticket/3.x/15676-ssl_acceptance_test_uses_localhost

(#15676) Fix puppet module face SSL acceptance tests to use masters real hostname
(#15595) Offer better errors for certificate validation errors

The verify_callback callback gets an OpenSSL::SSL::SSLContext for each
certificate in the chain that's verified.  If the verification failed,
then SSL provides a nice error to the callback, but that error doesn't
appear in the subsequent OpenSSL::SSL::SSLError.

This patch uses a technique similar to that used for peer_certs to
collect those errors and then add them to the Puppet::Error message
later.

Remove the guess at the error (time sync).
updates as requested

* combine conditionals in verify_callback
* change formatting of verify errors
use error_message instead of error