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

*libdbusmenu-qt-0.9.3_pre20140619-r1 (09 Aug 2015)
*libdbusmenu-qt-0.9.3_pre20140619 (09 Aug 2015)
*libdbusmenu-qt-0.9.2 (09 Aug 2015)

  09 Aug 2015; Robin H. Johnson <robbat2@gentoo.org>
  +files/libdbusmenu-qt-0.9.2-optionaltests.patch,
  +files/libdbusmenu-qt-0.9.3_pre20140619-optionaltests.patch,
  +libdbusmenu-qt-0.9.2.ebuild, +libdbusmenu-qt-0.9.3_pre20140619.ebuild,
  +libdbusmenu-qt-0.9.3_pre20140619-r1.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> libdbusmenu-qt-0.9.2.ebuild,
  libdbusmenu-qt-0.9.3_pre20140619.ebuild,
  libdbusmenu-qt-0.9.3_pre20140619-r1.ebuild, 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; Justin Lecher <jlec@gentoo.org> libdbusmenu-qt-0.9.2.ebuild,
  libdbusmenu-qt-0.9.3_pre20140619.ebuild,
  libdbusmenu-qt-0.9.3_pre20140619-r1.ebuild:
  Convert all URIs for launchpad.net 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

  25 Aug 2015; Mikle Kolyada <zlogene@gentoo.org>
  libdbusmenu-qt-0.9.3_pre20140619-r1.ebuild:
  amd64 stable wrt bug #558660

  Package-Manager: portage-2.2.20.1

  22 Sep 2015; Jeroen Roovers <jer@gentoo.org>
  libdbusmenu-qt-0.9.3_pre20140619-r1.ebuild:
  Stable for PPC64 (bug #558660).

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

  11 Nov 2015; Agostino Sarubbo <ago@gentoo.org>
  libdbusmenu-qt-0.9.3_pre20140619-r1.ebuild:
  x86 stable wrt bug #564336

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

  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:
  Remove explicit uses of disbanded herd e-mails from metadata.xml

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

  27 Mar 2016; Agostino Sarubbo <ago@gentoo.org>
  libdbusmenu-qt-0.9.3_pre20140619-r1.ebuild:
  ppc stable wrt bug #568150

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

  27 Mar 2016; Michael Palimaka <kensington@gentoo.org>
  -files/libdbusmenu-qt-0.9.2-optionaltests.patch,
  -libdbusmenu-qt-0.9.2.ebuild, -libdbusmenu-qt-0.9.3_pre20140619.ebuild:
  remove old

  Package-Manager: portage-2.2.28

  27 Mar 2016; Michael Palimaka <kensington@gentoo.org> metadata.xml:
  whitespace

  Package-Manager: portage-2.2.28

*libdbusmenu-qt-0.9.3_pre20160218 (20 Jul 2016)

  20 Jul 2016; Michael Palimaka <kensington@gentoo.org>
  +libdbusmenu-qt-0.9.3_pre20160218.ebuild:
  version bump

  Gentoo-bug: 589116

  Package-Manager: portage-2.3.0

