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

*python-systemd-230 (09 Aug 2015)

  09 Aug 2015; Robin H. Johnson <robbat2@gentoo.org> +metadata.xml,
  +python-systemd-230.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

  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

*python-systemd-231 (19 Dec 2015)

  19 Dec 2015; Mike Gilbert <floppym@gentoo.org>
  +files/231-test_daemon-SO_PASSCRED.patch, +python-systemd-231.ebuild:
  Bump to 231

  Package-Manager: portage-2.2.26_p32

  25 Dec 2015; Agostino Sarubbo <ago@gentoo.org> python-systemd-230.ebuild:
  amd64 stable wrt bug #568764

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

  25 Dec 2015; Agostino Sarubbo <ago@gentoo.org> python-systemd-230.ebuild:
  x86 stable wrt bug #568764

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

  26 Dec 2015; Agostino Sarubbo <ago@gentoo.org> python-systemd-230.ebuild:
  ppc stable wrt bug #568764

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

  09 Jan 2016; Agostino Sarubbo <ago@gentoo.org> python-systemd-230.ebuild:
  sparc stable wrt bug #568764

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

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

  17 Mar 2016; Agostino Sarubbo <ago@gentoo.org> python-systemd-230.ebuild:
  ppc64 stable wrt bug #568764

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

  23 Mar 2016; Mike Frysinger <vapier@gentoo.org> python-systemd-230.ebuild,
  python-systemd-231.ebuild:
  dev-python/systemd: add alpha love

*python-systemd-232 (24 Sep 2016)

  24 Sep 2016; Mike Gilbert <floppym@gentoo.org>
  +files/232-0001-tests-skip-fdstore-tests-if-not-implemented.patch,
  +files/232-0002-docs-fix-sphinx-format-warning.patch,
  +files/232-0003-build-sys-add-doc-sync-target.patch,
  +files/232-0004-tests-add-workaround-for-pre-232-system-returning-EI.patch,
  +files/232-0005-_reader-use-proper-ifdef-guard-for-sd_j_open_files_f.patch,
  +files/232-0006-build-sys-import-pytest-instead-of-py.test.patch,
  +python-systemd-232.ebuild:
  bump to 232

  Package-Manager: portage-2.3.1_p4

