(#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 }
(Maint) Remove disused puppet.gemspec

The puppet.gemspec that sat at the top level of the puppet project was
not needed for anything other than the version information when using
bundler with puppet when doing development. The gemspec actually caused
a warning to be issued about duplicate definition of PUPPETVERSION
because of the way the gemspec required the puppet/version file.

This updates the Gemfile to force a fake version for the locally used
code and removes the gemspec which isn't needed.
(#11276) Add minitar feature

This commit adds a `minitar` feature, which depends on the minitar gem.
Updated the Gemfile so that Windows depends on minitar.

Note, a similar change will need to be made to the installer.
(#11276) Select tar command or minitar

Previously, the module tool relied on GNU versions of tar and gzip/gunzip
to build and install modules, which isn't portable on Windows in
particular.

This commit adds Gnu, Solaris, and Mini tar implementations for packing
and unpacking tar.gz format.

It modifies the module tool to select the appropriate implementation for
the platform it's currently running on.

Paired-with: Andy Parker <andy@puppetlabs.com>
(#11276) Enable module tool on Windows

This commit allows the module tool to run on windows and updates the spec
tests as they are no longer pending.
(#11276) Execute puppet module tool pack & unpack on agents

Previously, all of the module tool acceptance tests run on the master,
which is never windows.

This commit adds two acceptance tests to ensure the module tool can
generate, build, and install modules from the pmtacceptance forge, which
exercise the pack & unpack functionality.
(#11276) Fix require ordering issue on Windows

Make sure we require msvcrt/buffer is required before using it.
Merge pull request #1599 from hlindberg/issue-reject-select-hash

(maint) Make select and reject produce result of same class as receiver.
Merge pull request #1601 from joshcooper/ticket/master/11276-windows-module-tool

Support module tool on Windows
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
(#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/stable/11276-chdir-fix' into stable

* joshcooper-ticket/stable/11276-chdir-fix:
  (#11276) Tarball entries should be relative to the `pkg` directory
(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]
(maint) Fix puppet module build empty tar issue on Solaris

Without this patch `puppet module build` produces an empty tar file when
run on Solaris.  This is obviously a problem.  The root cause is that
tar defaults to writing the archive to the tape device instead of STDOUT
as was expected.

This patch fixes the problem by explicitly using `tar cf - ...` to write
the archive to STDOUT.

Paired-with: Andrew Parker <andy@puppetlabs.com>
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
(maint) Fix failing puppet module build test

cd4d720 fixed the issue with `puppet module build` on Solaris, but did
not update the spec test to reflect the new command being executed.

This patch updates the spec test.