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

*qtdbus-5.4.2 (09 Aug 2015)
*qtdbus-4.8.7 (09 Aug 2015)
*qtdbus-4.8.6-r1 (09 Aug 2015)
*qtdbus-4.8.5 (09 Aug 2015)

  09 Aug 2015; Robin H. Johnson <robbat2@gentoo.org>
  +files/qtdbus-4.7-qdbusintegrator-no-const.patch,
  +files/qtdbus-4.8.4-qdbusconnection-silence-warning.patch, +metadata.xml,
  +qtdbus-4.8.5.ebuild, +qtdbus-4.8.6-r1.ebuild, +qtdbus-4.8.7.ebuild,
  +qtdbus-5.4.2.ebuild:
  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

  23 Aug 2015; Jeroen Roovers <jer@gentoo.org> qtdbus-5.4.2.ebuild:
  Stable for HPPA (bug #558136).

  Package-Manager: portage-2.2.20.1

  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; Mikle Kolyada <zlogene@gentoo.org> qtdbus-5.4.2.ebuild:
  gentoo/dev-qt: amd64 stable wrt bug #543326

  Package-Manager: portage-2.2.20.1

  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

  25 Aug 2015; Davide Pesavento <pesa@gentoo.org> qtdbus-4.8.6-r1.ebuild,
  qtdbus-4.8.7.ebuild:
  dev-qt: drop all prefix keywords from 4.8.6 and later.

  See bug 529196 comment 17.

  26 Aug 2015; Mikle Kolyada <zlogene@gentoo.org> qtdbus-5.4.2.ebuild:
  arm stable wrt bug #543326

  Package-Manager: portage-2.2.20.1

  21 Sep 2015; Jeroen Roovers <jer@gentoo.org> qtdbus-5.4.2.ebuild:
  Stable for PPC64 (bug #543326).

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

*qtdbus-5.5.1 (17 Oct 2015)

  17 Oct 2015; Michael Palimaka <kensington@gentoo.org> +qtdbus-5.5.1.ebuild:
  dev-qt: version bump 5.5.1

  Package-Manager: portage-2.2.20.1

  18 Oct 2015; Mikle Kolyada <zlogene@gentoo.org> qtdbus-4.8.6-r1.ebuild:
  sparc stable wrt bug #530238

  Package-Manager: portage-2.2.20.1

  31 Oct 2015; Michael Palimaka <kensington@gentoo.org> -qtdbus-4.8.5.ebuild:
  dev-qt: remove 4.8.5

  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)

  05 Mar 2016; Mikle Kolyada <zlogene@gentoo.org> qtdbus-5.5.1.ebuild:
  amd64 stable wrt bug #569924

  Package-Manager: portage-2.2.26

  09 Mar 2016; Jeroen Roovers <jer@gentoo.org> qtdbus-5.5.1.ebuild:
  Stable for HPPA PPC64 (bug #569924).

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

  24 Mar 2016; Markus Meier <maekke@gentoo.org> qtdbus-5.5.1.ebuild:
  arm stable, bug #569924

  Package-Manager: portage-2.2.28
  RepoMan-Options: --include-arches="arm"

  27 Mar 2016; Agostino Sarubbo <ago@gentoo.org> qtdbus-5.5.1.ebuild:
  ppc stable wrt bug #569924

  Package-Manager: portage-2.2.26
  RepoMan-Options: --include-arches="ppc"
  Signed-off-by: Agostino Sarubbo <ago@gentoo.org>

  07 Apr 2016; Davide Pesavento <pesa@gentoo.org> -qtdbus-5.4.2.ebuild:
  dev-qt: remove Qt 5.4.2

*qtdbus-5.6.0 (23 Apr 2016)

  23 Apr 2016; Michael Palimaka <kensington@gentoo.org>
  +files/qtdbus-5.6.0-deadlock.patch, metadata.xml, +qtdbus-5.6.0.ebuild:
  dev-qt: version bump 5.6.0

  Package-Manager: portage-2.2.28

  01 Jun 2016; Michael Palimaka <kensington@gentoo.org> qtdbus-5.5.1.ebuild:
  dev-qt: stabilise 5.5.1 on x86

  Gentoo-bug: 569924

  Package-Manager: portage-2.3.0_rc1

*qtdbus-5.6.1 (14 Jun 2016)

  14 Jun 2016; Davide Pesavento <pesa@gentoo.org> +qtdbus-5.6.1.ebuild:
  dev-qt: Qt 5.6.1 version bump

  Package-Manager: portage-2.3.0_rc1

  22 Jul 2016; Michael Palimaka <kensington@gentoo.org> qtdbus-5.6.1.ebuild:
  dev-qt: stabilise 5.6.1 on amd64/x86

  Gentoo-bug: 586180

  Package-Manager: portage-2.3.0

*qtdbus-5.7.0 (12 Aug 2016)

  12 Aug 2016; Michael Palimaka <kensington@gentoo.org> +qtdbus-5.7.0.ebuild:
  dev-qt: version bump 5.7.0

  Package-Manager: portage-2.3.0

  15 Aug 2016; Jeroen Roovers <jer@gentoo.org> qtdbus-5.6.1.ebuild:
  Stable for HPPA PPC64 (bug #586180).

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

  18 Aug 2016; Michael Palimaka <kensington@gentoo.org>
  -files/qtdbus-5.6.0-deadlock.patch, -qtdbus-5.6.0.ebuild:
  dev-qt: remove 5.6.0

  Package-Manager: portage-2.3.0

  23 Aug 2016; Markus Meier <maekke@gentoo.org> qtdbus-5.6.1.ebuild:
  arm stable, bug #586180

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

*qtdbus-5.6.2 (12 Oct 2016)

  12 Oct 2016; Davide Pesavento <pesa@gentoo.org> +qtdbus-5.6.2.ebuild:
  dev-qt: Qt 5.6.2 version bump

  Package-Manager: portage-2.3.1

