CHANGELOG
=========

1.2.0
-----

2014/02/08

### User Notes

Preliminary support for Puppetfile modules from SVN sources. SVN repositories
can track the latest available revision or may be pinned to a specific revision.

Forge modules can now track the latest available version. This can be enabled by
setting the module version to `:latest`.

Git based Puppetfile modules can now be specified as branches, tags, and
commits. When tags and commits are specified r10k can perform optimizations
when updating the given repositories to reduce network accesses.

Command execution has been greatly improved. The old library for executing
commands (systemu) had very high overhead and was 50 - 100 times slower than
%x[] or fork/exec. It's been replaced with a custom process execution
implementation.

Modules can swap out sources. When an existing module is changed from Forge to
Git, for instance, the existing module will be removed before the new module is
installed. (GH-30)

1.1.3
-----

2014-01-26

This is a backwards compatible maintenance release.

### Notes

  * (GH-82) Added all git managed files, including README.markdown, CHANGELOG,
    and LICENSE to the gemspec for better compatibility with non-gem packages.

1.1.2
-----

2014-01-06

This is a backwards compatible maintenance release.

### Developer notes

  * If Puppet and r10k are required in the same namespace, it's possible for
    the vendored copy of SemVer to conflict with the Puppet version. This was
    fixed by renaming the copy vendored in r10k and putting it under a namespace.

1.1.1
-----

2013-12-11

This is a backwards compatible bugfix release.

### User notes

  * (GH-48) Environment prefixing always defaults to off. Users were already
    using r10k with multiple sources but in different directories, and
    prefixing breaks this behavior. Since this was a backwards incompatible
    change this has to be rolled back.
  * (GH-64) Multiple sources in a single directory no longer purge each other.

### Thanks

Thanks to the following contributors for their help in 1.1.1:

  * Stig Sandbeck Mathisen
  * Gabriel M Schuyler

1.1.0
-----

2013-09-30

This is a backwards compatible bugfix and feature release.

### User notes

(GH-35) Puppetfiles can now specify a path to the moduledir, instead of assuming
'/modules'. It can be set with the Puppetfile `moduledir` directive. Note that
this is not compatible with librarian-puppet.

(GH-53) Multiple environment sources can now be specified in a single
directory. When multiple sources are specified, each environment will be
prefixed with the source name. This can be enabled and disabled with the
source `prefix` option.

(GH-45) Documentation has been greatly expanded.

(GH-56) New subcommand: `r10k puppetfile check` allows you to validate the
syntax of a Puppetfile.

(GH-66) Initial clones use `git checkout` when switching to a new branch
instead of just `git reset`; without this change it would look like the wrong
branch was checked out.

(GH-59) r10k can now pull from Pulp repositories for Forge based modules.

(GH-70) Handle unset HOME - in case that HOME is unset, assume that the current
user is root. This mainly occurs when r10k is being run as the `prerun` command
under Puppet.

### Developer notes

The method mocking framework has been switched from mocha to rspec-mocks. Mocha
is notoriously bad about breaking changes between versions and rspec-mocks is
very robust, so Mocha has been ripped out and dropped as a dependency.

Rspec expectations now use the `expect(thing).to` syntax instead `thing.should`

A quasi settings framework has been extracted to make application settings less
bad. In the long term a general application framework will be extracted from
r10k to handle generic 'application' problems like this, but for now the settings
framework is the way to handle singleton data.

R10K:Git::Cache object memoization has been extracted into a standalone class
instead of being grafted onto the class. All hail the single responsibility
principle!

R10K::Module code has been refactored. There's now a real base class instead of
a hacky mixin with some metadata magic on top.

### Thanks

Thanks to the following contributors for their help in 1.1.0:

  * Alex Linden Levy
  * Abhay Chrungoo
  * Adam Vessey
  * Chuck Schweizer
  * Elias Probst
  * Greg Baker
  * Jochen Schalanda
  * Theo Chatzimichos

1.0.0
-----

2013-05-30

This is a backwards incompatible bugfix and feature release.

### Configuration

The configuration file format of 0.0.9 should be compatible with 1.0.0, and any
issues with that should be considered a bug.

A longstanding issue was confusion between symbols and strings in r10k.yaml
(GH-18). To resolve this, symbols and strings will be treated equally and
should produce the same behavior. In the long run, symbols will probably be
deprecated for the sake of conformity.

### Command line invocation

A number of commands have been renamed. They still but will emit a deprecation
warning and will redirect to the new command implementation. The only
exceptions is the are the `r10k environment cache` and `r10k environment stale`
commands, but they were pretty much useless anyways.

Log level verbosity can now be specified by level name instead of level number.
If --verbose is passed without a level, it will set the log level to `info`.

### Puppetfile support

r10k can be used to deploy modules from a standalone Puppetfile. See
`r10k puppetfile` for more information.

Modules without a version in the format of 'foo/bar' will be assumed. (GH-21)

### API

r10k handles versioning according to SemVer; since this is a major release this
is a backwards incompatible API change. It's unlikely that this has had any
extensions written on top of it, but if you have, then heads up. However, all
versions of 1.x should be backwards compatible.

### Bugfixes

A number of bugs were due to underlying architecture flaws. Part of 1.0.0 has
been a significant architectural overhaul, so on top of all of the above
changes there should be a lot of other bugs that have been fixed.