Naive mirroring implementation
keys and secrets
Added config entry for source_index
Reworked source_lookup, storing json/ancestry/etc locally, removed decorator (obsolete)
tags: Factor get_tags out of the _get_tags endpoint

Gettings a nicely-parsed list of tags is useful internally, so pull
the tag-listing logic out into it's own function.  The decorated
endpoint behind GET /v1/repositories/<path:repository>/tags is *not*
useful internally, so prefix that function with an underscore.

To convert the get_tags iterator to a dictionary, I've used a dict
comprehension [1], which landed in Python 2.7 and 3.0.  I couldn't
find any docs on docker-registry's minimal supported Python version,
so I imagine compatibility with ancient Pythons is not high on the
agenda.

[1]: http://www.python.org/dev/peps/pep-0274/
tags: Factor delete_tag out of the _delete_tag endpoint

Deleting a tag (and raising the associated signal) is useful
internally, so pull the tag-deleting logic out into it's own function.
The decorated endpoint behind
DELETE /v1/repositories/<path:repository>/tags/<tag> is *not* useful
internally, so prefix that function with an underscore.
Tags are mutable, they shouldn't be stored on mirrors
Added tags caching support (with TTL)
pep8 fix
Tags cache ttl expressed in seconds, small bugfixes, minor improvements
added ignore files
Reimplemented cleaned up mirror decorator
Applied source_lookup decorator on relevant methods
Added tags lookup decorator (and caching logic). Cleanup.
Merge branch 'master' of github.com:dotcloud/docker-registry
The secret_key is not generated automatically.

This "feature" introduced too many configuration bugs. Gunicorn now
set the pass the key automatically in the environment. If the key is not
set, the registry will not start.

Fixes #261

Docker-DCO-1.1-Signed-off-by: Sam Alba <sam.alba@gmail.com> (github: samalba)
tags: Extend delete_tag to remove additional metadata files

Storage.repository_tag_json_path and (if the tag == 'latest')
Storage.repository_json_path are both created by put_tag, so we should
remove them in delete_tag.
storage: Add Storage.repository_path

Besides factoring out a bunch of repetitive

  {self.repositories}/{namespace}/{repository}

construction, this gives us a path to recursively remove when we want
to delete a repository.
signals: Add repository-* signals

These aren't wired up yet; I'll do that in subsequent commits.
index: Trigger repository-created and repository-updated signals

Passing in the parsed JSON image data (ids and checksums).