Fixed command not found error during tests on windows
Factor out a newBackupID function.
Add an alternate ID generator.
Add tests.
state: Life no longer depends on apiserver/params

`state.Life` is a small integer, however it relies on params.State for its string representation. Apart from the coupling, this is nuts because common/life.go doesn't check the results of `state.Life.String()`, it just converts it to a `params.Life` and stuffs it back to the client.
Merge pull request #753 from davecheney/200-state-life-does-not-depend-on-apiserver-params

state: Life no longer depends on apiserver/params

`state.Life` is a small integer, however it relies on params.State for its string representation. Apart from the coupling, this is nuts because common/life.go doesn't check the results of `state.Life.String()`, it just converts it to a `params.Life` and stuffs it back to the client.
Serve charm archives from the API server

Charm archives are now stored in the blobstore,
and served over HTTPS. The uniter client is
modified to construct URLs using the API server
URL.
Migrate charm archives to environment storage on upgrade

We introdue a new database-master upgrade step which
migrates existing charm archives from provider storage
to environment storage. The final step of the migration
is to update the charm's document in state to record
the storage path.
api: move charms base URL construction to api/uniter
Address review comments
upgrades: read charms from disk in local/manual

Local and manual provider storage is httpstorage
layered on filestorage serving from a location
specified in agent config. The storage is served
by a "localstorage" worker, which does not start
until after upgrades complete. We shortcut the
httpstorage and go straight to disk if the provider
is local or manual.
Merge pull request #741 from axw/charms-environment-storage

Serve charm archives from the API server

Charm archives are now stored in the blobstore, and served over HTTPS.
The uniter client is modified to construct URLs using the API server URL.

We also introduce a new database-master upgrade step which migrates existing
charm archives from provider storage to environment storage. The final step
of the migration is to update the charm's document in state to record the
storage path.
Hook tool for sending metrics from charm.
Merge pull request #640 from tasdomas/metrics-in-hook-context

Hook tool for sending metrics from charm.

A hook tool metric-add is made available to charm authors for sending metrics to state.
Merge pull request #658 from bogdanteleaga/uniter

Fixed command not found error during tests on windows

Added missing cmdSuffix in tests. Previously it was used only in the actual code. This fixes quite a number of tests on Windows.
Remove the old implementation.
Merge pull request #750 from ericsnowcurrently/backups-human-readable-ID

Make backup IDs more human-readable.

Currently we just use the current UUID.  This patch changes it to "<timestamp>.<env ID>".  A more human-readable ID will help juju users.
apiserver/client: Migrated SetEnvironAgentVersion test to serverSuite
Merge pull request #762 from wallyworld/sshstorage-not-found

Tweak bash used for sshstorage.Get()

Fixes: https://bugs.launchpad.net/juju-core/+bug/1367695

Return fixed, locale independent string when file is not found.
cmd/juju: created interface for upgrade-juju's client API

To allow mocking in tests.