# ChangeLog for net-libs/gupnp
# Copyright 1999-2016 Gentoo Foundation; Distributed under the GPL v2
# (auto-generated from git log)

*gupnp-0.20.14 (09 Aug 2015)
*gupnp-0.20.13 (09 Aug 2015)

  09 Aug 2015; Robin H. Johnson <robbat2@gentoo.org> +gupnp-0.20.13.ebuild,
  +gupnp-0.20.14.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

  28 Sep 2015; Jeroen Roovers <jer@gentoo.org> gupnp-0.20.14.ebuild:
  Stable for PPC64 (bug #551826).

  Package-Manager: portage-2.2.20.1
  RepoMan-Options: --ignore-arches

  22 Oct 2015; Justin Lecher <jlec@gentoo.org> gupnp-0.20.13.ebuild,
  gupnp-0.20.14.ebuild:
  Drop deprecated usage of parallel python eclass functions

  Python eclasses dropped parallel execution support some while ago.
  python_parallel_foreach_impl was an alias for python_foreach_impl for some
  time already.

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

*gupnp-0.20.15 (05 Jan 2016)

  05 Jan 2016; Gilles Dartiguelongue <eva@gentoo.org> +gupnp-0.20.15.ebuild:
  version bump to 0.20.15

  Package-Manager: portage-2.2.26

  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)

  20 Feb 2016; Pacho Ramos <pacho@gentoo.org> -gupnp-0.20.13.ebuild:
  Drop old

  Package-Manager: portage-2.2.27

*gupnp-0.20.16 (20 Feb 2016)

  20 Feb 2016; Pacho Ramos <pacho@gentoo.org> +gupnp-0.20.16.ebuild:
  Version bump

  Package-Manager: portage-2.2.27

  21 Feb 2016; Pacho Ramos <pacho@gentoo.org> gupnp-0.20.16.ebuild:
  amd64 stable, bug 566378

  Package-Manager: portage-2.2.27
  RepoMan-Options: --include-arches="amd64"

  06 Mar 2016; Mikle Kolyada <zlogene@gentoo.org> gupnp-0.20.16.ebuild:
  x86 stable wrt bug #566378

  Package-Manager: portage-2.2.26

  07 Apr 2016; Jeroen Roovers <jer@gentoo.org> gupnp-0.20.16.ebuild:
  Stable for HPPA PPC64 (bug #566378).

  Package-Manager: portage-2.2.28
  RepoMan-Options: --ignore-arches

  28 May 2016; Pacho Ramos <pacho@gentoo.org> -gupnp-0.20.14.ebuild,
  -gupnp-0.20.15.ebuild:
  Drop old

  Package-Manager: portage-2.3.0_rc1

*gupnp-0.20.17 (28 May 2016)

  28 May 2016; Pacho Ramos <pacho@gentoo.org> +gupnp-0.20.17.ebuild:
  Version bump

  Package-Manager: portage-2.3.0_rc1

  11 Jun 2016; Pacho Ramos <pacho@gentoo.org> gupnp-0.20.17.ebuild:
  amd64 stable, bug 584468

  Package-Manager: portage-2.3.0_rc1
  RepoMan-Options: --include-arches="amd64"

  11 Jun 2016; Pacho Ramos <pacho@gentoo.org> gupnp-0.20.17.ebuild:
  x86 stable, bug 584468

  Package-Manager: portage-2.3.0_rc1
  RepoMan-Options: --include-arches="x86"

*gupnp-0.20.18 (03 Jul 2016)

  03 Jul 2016; Pacho Ramos <pacho@gentoo.org> +gupnp-0.20.18.ebuild:
  Version bump

  Package-Manager: portage-2.3.0_rc1

  30 Jul 2016; Jeroen Roovers <jer@gentoo.org> gupnp-0.20.17.ebuild:
  Stable for HPPA PPC64 (bug #584468).

  Package-Manager: portage-2.3.0
  RepoMan-Options: --ignore-arches

  01 Oct 2016; Pacho Ramos <pacho@gentoo.org> gupnp-0.20.18.ebuild:
  amd64 stable, bug 587010

  Package-Manager: portage-2.3.0
  RepoMan-Options: --include-arches="amd64"

  01 Oct 2016; Pacho Ramos <pacho@gentoo.org> gupnp-0.20.18.ebuild:
  x86 stable, bug 587010

  Package-Manager: portage-2.3.0
  RepoMan-Options: --include-arches="x86"

  03 Oct 2016; Jeroen Roovers <jer@gentoo.org> gupnp-0.20.18.ebuild:
  Stable for HPPA (bug #587010).

  Package-Manager: portage-2.3.1
  RepoMan-Options: --ignore-arches

