# ChangeLog for dev-python/docker-py
# Copyright 1999-2016 Gentoo Foundation; Distributed under the GPL v2
# (auto-generated from git log)

*docker-py-1.3.1 (09 Aug 2015)
*docker-py-1.3.0 (09 Aug 2015)
*docker-py-1.2.3 (09 Aug 2015)
*docker-py-1.2.2 (09 Aug 2015)
*docker-py-1.1.0-r2 (09 Aug 2015)

  09 Aug 2015; Robin H. Johnson <robbat2@gentoo.org>
  +docker-py-1.1.0-r2.ebuild, +docker-py-1.2.2.ebuild,
  +docker-py-1.2.3.ebuild, +docker-py-1.3.0.ebuild, +docker-py-1.3.1.ebuild,
  +metadata.xml:
  proj/gentoo: Initial commit

  This commit represents a new era for Gentoo:
  Storing the gentoo-x86 tree in Git, as converted from CVS.

  This commit is the start of the NEW history.
  Any historical data is intended to be grafted onto this point.

  Creation process:
  1. Take final CVS checkout snapshot
  2. Remove ALL ChangeLog* files
  3. Transform all Manifests to thin
  4. Remove empty Manifests
  5. Convert all stale $Header$/$Id$ CVS keywords to non-expanded Git $Id$
  5.1. Do not touch files with -kb/-ko keyword flags.

  Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
  X-Thanks: Alec Warner <antarus@gentoo.org> - did the GSoC 2006 migration
  tests
  X-Thanks: Robin H. Johnson <robbat2@gentoo.org> - infra guy, herding this
  project
  X-Thanks: Nguyen Thai Ngoc Duy <pclouds@gentoo.org> - Former Gentoo
  developer, wrote Git features for the migration
  X-Thanks: Brian Harring <ferringb@gentoo.org> - wrote much python to improve
  cvs2svn
  X-Thanks: Rich Freeman <rich0@gentoo.org> - validation scripts
  X-Thanks: Patrick Lauer <patrick@gentoo.org> - Gentoo dev, running new 2014
  work in migration
  X-Thanks: Michał Górny <mgorny@gentoo.org> - scripts, QA, nagging
  X-Thanks: All of other Gentoo developers - many ideas and lots of paint on
  the bikeshed

  24 Aug 2015; Justin Lecher <jlec@gentoo.org> metadata.xml:
  Use https by default

  Convert all URLs for sites supporting encrypted connections from http to
  https

  Signed-off-by: Justin Lecher <jlec@gentoo.org>

  24 Aug 2015; Mike Gilbert <floppym@gentoo.org> metadata.xml:
  Revert DOCTYPE SYSTEM https changes in metadata.xml

  repoman does not yet accept the https version.
  This partially reverts eaaface92ee81f30a6ac66fe7acbcc42c00dc450.

  Bug: https://bugs.gentoo.org/552720

*docker-py-1.4.0 (13 Sep 2015)

  13 Sep 2015; Alex Brandt <alunduil@gentoo.org> +docker-py-1.4.0.ebuild:
  add version 1.4.0

  Package-Manager: portage-2.2.20.1

  13 Sep 2015; Alex Brandt <alunduil@gentoo.org> -docker-py-1.2.3.ebuild:
  remove version 1.2.3

  Package-Manager: portage-2.2.20.1

  13 Sep 2015; Alex Brandt <alunduil@gentoo.org> -docker-py-1.3.0.ebuild:
  remove version 1.3.0

  Package-Manager: portage-2.2.20.1

*docker-py-1.5.0 (24 Oct 2015)

  24 Oct 2015; Alex Brandt <alunduil@gentoo.org> +docker-py-1.5.0.ebuild:
  add version 1.5.0

  Package-Manager: portage-2.2.23

  24 Jan 2016; Michał Górny <mgorny@gentoo.org> metadata.xml:
  Replace all herds with appropriate projects (GLEP 67)

  Replace all uses of herd with appropriate project maintainers, or no
  maintainers in case of herds requested to be disbanded.

  24 Jan 2016; Michał Górny <mgorny@gentoo.org> metadata.xml:
  Set appropriate maintainer types in metadata.xml (GLEP 67)

*docker-py-1.7.0 (17 Feb 2016)

  17 Feb 2016; Justin Lecher <jlec@gentoo.org> +docker-py-1.7.0.ebuild,
  metadata.xml:
  Version Bump

  Package-Manager: portage-2.2.27
  Signed-off-by: Justin Lecher <jlec@gentoo.org>

*docker-py-1.7.2 (20 Mar 2016)

  20 Mar 2016; Alex Brandt <alunduil@gentoo.org> +docker-py-1.7.2.ebuild:
  add version 1.7.2

  Package-Manager: portage-2.2.28

  20 Mar 2016; Alex Brandt <alunduil@gentoo.org> -docker-py-1.1.0-r2.ebuild:
  remove version 1.1.0-r2

  Package-Manager: portage-2.2.28

*docker-py-1.8.0_rc2 (03 Apr 2016)

  03 Apr 2016; Alex Brandt <alunduil@gentoo.org> +docker-py-1.8.0_rc2.ebuild:
  add version 1.8.0_rc2

  Package-Manager: portage-2.2.28

  03 Apr 2016; Alex Brandt <alunduil@gentoo.org> -docker-py-1.3.1.ebuild:
  remove version 1.3.1

  Package-Manager: portage-2.2.28

  03 Apr 2016; Alex Brandt <alunduil@gentoo.org> -docker-py-1.4.0.ebuild:
  remove version 1.4.0

  Package-Manager: portage-2.2.28

  03 Apr 2016; Alex Brandt <alunduil@gentoo.org> -docker-py-1.5.0.ebuild:
  remove version 1.5.0

  Package-Manager: portage-2.2.28

*docker-py-1.8.0_rc5 (10 Apr 2016)

  10 Apr 2016; Alex Brandt <alunduil@gentoo.org> +docker-py-1.8.0_rc5.ebuild:
  add version 1.8.0_rc5

  Package-Manager: portage-2.2.28

  10 Apr 2016; Alex Brandt <alunduil@gentoo.org> -docker-py-1.7.0.ebuild:
  remove version 1.7.0

  Package-Manager: portage-2.2.28

*docker-py-1.8.0 (15 Apr 2016)

  15 Apr 2016; Zac Medico <zmedico@gentoo.org> +docker-py-1.8.0.ebuild:
  version bump to 1.8.0

  Package-Manager: portage-2.2.28

  17 Apr 2016; Alex Brandt <alunduil@gentoo.org> docker-py-1.8.0.ebuild:
  add version 1.8.0

  Package-Manager: portage-2.2.28

  17 Apr 2016; Alex Brandt <alunduil@gentoo.org> -docker-py-1.7.2.ebuild:
  remove version 1.7.2

  Package-Manager: portage-2.2.28

*docker-py-1.8.0-r1 (23 Apr 2016)

  23 Apr 2016; Alex Brandt <alunduil@gentoo.org> +docker-py-1.8.0-r1.ebuild:
  add version 1.8.0-r1

  Due to bug #580388, I've removed python2_7 support from docker-py.  This
  shouldn't be a problem.  This removes the conflict due to py2-ipaddress and
  makes the question of which package to keep moot.  With py2-ipaddress no
  longer
  required by anything in the tree I will be running it through the last-rites
  process.

  Package-Manager: portage-2.2.28

  23 Apr 2016; Alex Brandt <alunduil@gentoo.org> -docker-py-1.8.0.ebuild:
  remove version 1.8.0

  Again, due to bug #580388, I am removing this version of docker-py to finish
  the
  solution of py2-ipaddress causing collisions.

  Package-Manager: portage-2.2.28

  15 May 2016; Alex Brandt <alunduil@gentoo.org> -docker-py-1.8.0_rc5.ebuild:
  remove version 1.8.0_rc5

  The removal of python2_7 in docker-py happened during this release, not the
  proper release.  Removing this version fixes #582300.

  Package-Manager: portage-2.2.28

*docker-py-1.8.1 (18 Jun 2016)

  18 Jun 2016; Alex Brandt <alunduil@gentoo.org> +docker-py-1.8.1.ebuild:
  add version 1.8.1

  Package-Manager: portage-2.3.0_rc1

*docker-py-1.9.0_rc2 (16 Jul 2016)

  16 Jul 2016; Alex Brandt <alunduil@gentoo.org> +docker-py-1.9.0_rc2.ebuild:
  add version 1.9.0_rc2

  Package-Manager: portage-2.3.0

  16 Jul 2016; Alex Brandt <alunduil@gentoo.org> -docker-py-1.8.0_rc2.ebuild:
  remove version 1.8.0_rc2

  Package-Manager: portage-2.3.0

*docker-py-1.9.0 (06 Aug 2016)

  06 Aug 2016; Alex Brandt <alunduil@gentoo.org> +docker-py-1.9.0.ebuild:
  add version 1.9.0

  Package-Manager: portage-2.3.0

  06 Aug 2016; Alex Brandt <alunduil@gentoo.org> -docker-py-1.8.0-r1.ebuild:
  remove version 1.8.0-r1

  Package-Manager: portage-2.3.0

