(#15989) Allow setting arity on functions

The arity value works the same way as for blocks in Ruby.
(#15989) Set arity on functions

Set the arity on builtin functions.
(#15989) Tests for function arity

Test that setting arity on functions work as it should.
(#4695) Puppet should not reset locale for services

Don't reset locale when starting services, we don't parse their output
so there is no need.

This avoids having different locales for services depending on if they
are started on boot or started by puppet.
Replace dashes with dots for gem version

When switching out to using git-describe for versioning from
source, gem versioning breaks because dashes are not allowed.
This simple fix replaces the dashes with dots, which are.
Note that in a merge-up to 3.0.x, this commit will conflict.
Default to 'ours' in a merge-up, this file does not even exist
in 3.0.x and shouldn't.

Signed-off-by: Moses Mendoza <moses@puppetlabs.com>
Preserve timestamps when installing files

Without the preserve option, ruby's FileUtils.install method uses the
current time for all installed files.  For backup systems, package
installs, and general pedantic sysadmins, preserving timestamps makes a
small improvement in the world.
(#15513) Clarify target attribute for cron

Without this patch applied the behavior of `target` in the cron type isn't made clear.
This is a problem because users report trying to use a file as the target instead of
the intended username, producing unexpected results.

This patch clarifies the behavior of `target` by improving the description docstring.
Merge branch 'pdxmph-cron_type' into 3.0.x

* pdxmph-cron_type:
  (#15513) Clarify target attribute for cron
Merge pull request #1247 from MosesMendoza/maint/2.7.x/preserve_timestamps_install.rb

Preserve timestamps when installing files
Merge pull request #1254 from MosesMendoza/maint/2.7.x/fixup_gem_task

Replace dashes with dots for gem version
Fix build targets for 2.7.x

This commit revises the lists of cows and mocks to build against to remove
redundant and unnecessary targets given Puppet is noarch.

Signed-off-by: Moses Mendoza <moses@puppetlabs.com>
rm packaging artifacts in rpm spec, debian rules

The 2.7.x packaging will include misc packaging artifacts we shouldn't
ship. This commit removes them in packaging.

Signed-off-by: Moses Mendoza <moses@puppetlabs.com>
Merge pull request #1255 from MosesMendoza/maint/2.7.x/packaging_fixes

Maint/2.7.x/packaging fixes
Removing -e options from pip provider.

-e causes a few problems with puppet:

1. it tries to install to /root/src.
2. It makes the items editable, which isn't useful.
3. reapplying puppet will cause pip to re-install.

Removing -e should help.
Maint: Improve explanation of exec type's "creates" parameter

The "creates" parameter was still causing user confusion (see re-opening
of issue #8612), so this commit revises it to be more wordy and
hopefully totally unambiguous.
Merge pull request #1258 from nfagerlund/exec_creates_param

Maint: Improve explanation of exec type's "creates" parameter
(#7422) Support arrow syntax with metaparams

Attempts to combine the arrow syntax with
metaparams lead to the following error message:

Error: undefined method `<<' for {}:Hash

For example, the following code:

  Notify['one'] -> Notify['three']

  notify { 'one':
    before => Notify['two']
  }
  notify { 'two': }

  notify { ['three', 'four']: }

Causes this issue. This is because relationships
appended with the -> syntax assume that the current
list of dependencies are an array.

Given that, it is not surprising that the following
code is valid at the moment:

  Notify['one'] -> Notify['three']

  notify { 'one':
    before => Notify['two', 'four']
  }
  notify { 'two': }

  notify { ['three', 'four']: }

In this case, the dependency resources are already
expressed as an array before the arrow syntax appends
the additional dep.

This commit converts everything to an array before
trying to append additional relationships to that
array. The fact that the second code snippet already
works demonstrates that Puppet already supports
appending additional refs to an array of refs.
Merge branch 'fix/2.7.x/7422_fix_relationship_append' into 2.7.x

* fix/2.7.x/7422_fix_relationship_append:
  (#7422) Support arrow syntax with metaparams
Merge branch '2.7.x' into 3.0.x

* 2.7.x:
  (#7422) Support arrow syntax with metaparams
  rm packaging artifacts in rpm spec, debian rules
  Fix build targets for 2.7.x
  Preserve timestamps when installing files
  Replace dashes with dots for gem version

Conflicts:
	ext/build_defaults.yaml
	ext/debian/rules
	ext/redhat/puppet.spec.erb
	tasks/rake/gem.rake
Merge branch '3.0.x'

* 3.0.x:
  (#7422) Support arrow syntax with metaparams
  rm packaging artifacts in rpm spec, debian rules
  Fix build targets for 2.7.x
  (#15513) Clarify target attribute for cron
  Preserve timestamps when installing files
  Replace dashes with dots for gem version