(#3010) cron: allow the absent value for the "special" property

The crontab provider fails to apply the change to a cronjob if
the schedule has been a special schedule such as @daily. Paraphrasing
from the bug report, assuming this crontab:

@reboot /bin/true

this manifest won't work correctly:

cron{ "test": minute  => 50 }

even though puppet will correctly detect that the 'minute' property
needs changing from "absent". The special schedule will remain.

The fix allows this workaround:

cron{ "test": minute  => 50, special => absent }
Merge pull request #1577 from ffrank/ticket/master/3010-cron-allow-special-absent

(#3010) cron: allow the absent value for the "special" property
(#20121) Invoke chkconfig with --check on SuSE

On SuSE the `chkconfig` command needs to be passed the `--check` flag in order
to get exit codes that indicate if a service is enabled or not. Previously, we
were applying a regex to stderr but this was missing the case where the service
did not exist.

Ref: [#20121](https://projects.puppetlabs.com/issues/20121)
(#11276) Tarball entries should be relative to the `pkg` directory

Commit 94f2f0a9 removed the call to `Dir.chdir`, which is necessary so
that entries in the tarball are relative to the `pkg` directory, i.e.
each entry starts with the metadata release_name, which is of the form:

    myuser-mydir-X.Y.Z/

This issue was caught by the `loadable_from_modules` acceptance test as
the newly installed module did not install its metadata in the expected
locations.

This commit restores the `Dir.chdir` behavior and updates the test.
Merge branch 'joshcooper-ticket/master/11276-chdir-fix'

* joshcooper-ticket/master/11276-chdir-fix:
  (#11276) Tarball entries should be relative to the `pkg` directory

closes #1603
(maint) Update COMMITTERS with stable and master branch strategy

Without this patch the current branching strategy of creating unique
branches for each minor release requires CI systems be reconfigured for
each new minor release.  This is a problem because it is time consuming,
error prone, and expensive to reconfigure the CI system for each minor
release.  This, in turn, creates a road block to releasing more often.

This patch addresses the problem by documenting and prescribing a new
branching strategy for committers.  The strategy results in branch names
that do not change over time.  The `stable` branch always refers to the
current release which is receiving bug fixes.  The `master` branch
always refers to the next release which is receiving new functionality.

The release branches are no longer direct descendants (fast forwards) of
one another.  Instead, they are independent histories as in the git flow
model.  The security branch is special and receives change sets which
are then rebased and merged into specific branches for the specific
release versions which are affected by the vulnerability.

[ci skip]
Merge branch 'branch_strategy'

* branch_strategy:
  (maint) Update COMMITTERS with stable and master branch strategy

closes #1591
[ci skip]
Merge branch 'fix_solaris_module_pack'

* fix_solaris_module_pack:
  (maint) Fix puppet module build empty tar issue on Solaris
  (#11276) Tarball entries should be relative to the `pkg` directory
Merge branch 'fix_pmt_build'

* fix_pmt_build:
  (maint) Fix failing puppet module build test
Merge pull request #1602 from Sharpie/20121-fix-suse-chkconfig

(#20121) Invoke chkconfig with --check on SuSE
(#17811) Add test for group name to gid conversion

On OS X, the primary group for a user must be specified as a numeric id and not
a string. There was code to ensure this happens, but it was guarded by a faulty
logic statement and there was no test to catch the bug.
(#17811) Ensure PrimaryGroupID is converted to Int

On OS X, the PrimaryGroupID for a user must be an integer. Ensure this happens
by running `:gid` attributes through `Puppet::Util.gid`.
Maint: Lambda arity must match number of arguments

Running `puppet apply --parseonly` fails on ruby 1.9, because the arity
of the option method was 0, yet was being invoked with an argument, the
manifest to parse. Under ruby 1.8, this mismatch was allowed, but not
1.9.

See acceptance/tests/ticket_6928_puppet_master_parse_fails.rb
(#20284) Output one item per line for arrays in console output

To make it easier to read, pipe output and make shell loop from output
from faces it is good if they are printed one item per line for arrays.
Merge pull request #1606 from dalen/array_render_as_s

(#20284) Output one item per line for arrays in console output
Merge pull request #1600 from Sharpie/17811-os-x-fix-gid-conversion

(#17811) Fix group id conversion for OS X users
Revert "(Maint) Remove disused puppet.gemspec"

This reverts commit 588b874f2fc42cf1b9d21016aa36d98288df2479.

This commit is being reverted because the change to remove the gemspec
was based on incorrect information.  According to the commit message,
the gemspec file was removed for two reasons.  First, it was thought the
gemspec was not being used for anything other than local development of
Puppet.  Second, the gemspec produced a warning about redefining the
PUPPETVERSION constant.

The gemspec is actually being used in our automated testing of other
projects, specifically stdlib.  The standard library testing matrix uses
the gemspec located in Puppet to satisfy the dependency of stdlib on
Puppet.  The gemspec allows the `stable` and `master` branch to be used
in addition to the officially released Puppet gem on rubygems.org.

Second, the warning is a not a result of the gemspec itself but rather a
result of the way the gemspec is loading 'puppet/version'  We can avoid
the warning while also preserving the gemspec.
(maint) move puppet.gemspec to .gemspec

Without this patch some users assumed the puppet.gemspec is intended to
build the Puppet Gem.  This is a problem because the packaging rake
tasks are what actually build the official Gem.

This patch addresses the problem by moving the gemspec to a hidden file
so that other people are less likely to be confused by the presence of
the gemspec file.
(maint) Fix PUPPETVERSION warning from gemspec

Without this patch Ruby issues a warning about the redefinition of the
PUPPETVERSION constant.  This warning is caused by the gemspec using a
fully qualified require statement instead of a relative $LOAD_PATH based
require.

This patch fixes the problem by catching the LoadError and adding
Puppet's `lib` directory to the head of the $LOAD_PATH.  This change
causes the `require` statement to correctly load puppet/version only
once, which avoids the redefined constant message.

In addition, a comment about the intended use of the gemspec has been
added to help avoid confusion.  This gemspec is intended to allow third
party code to automatically satisfy their dependency on Puppet using
Bundler.  The gemspec is not intended to actually build the package.

Paired-with: Adrien Thebo <adrien@puppetlabs.com>
Merge branch 'restore_gemset_m'

* restore_gemset_m:
  (maint) Fix PUPPETVERSION warning from gemspec
  (maint) move puppet.gemspec to .gemspec
  Revert "(Maint) Remove disused puppet.gemspec"
  (#20284) Output one item per line for arrays in console output
  Maint: Lambda arity must match number of arguments
  (#17811) Ensure PrimaryGroupID is converted to Int
  (#17811) Add test for group name to gid conversion
  (maint) Update COMMITTERS with stable and master branch strategy
  (#11276) Tarball entries should be relative to the `pkg` directory
  (#20121) Invoke chkconfig with --check on SuSE
  (#3010) cron: allow the absent value for the "special" property