# ChangeLog for dev-python/simpletal
# Copyright 1999-2015 Gentoo Foundation; Distributed under the GPL v2
# $Header: /var/cvsroot/gentoo-x86/dev-python/simpletal/ChangeLog,v 1.14 2015/06/18 05:53:01 patrick Exp $

*simpletal-5.2 (18 Jun 2015)

  18 Jun 2015; Patrick Lauer <patrick@gentoo.org> +simpletal-5.2.ebuild:
  Bump

*simpletal-5.1-r1 (09 Jan 2015)
*simpletal-4.2-r1 (09 Jan 2015)

  09 Jan 2015; Ian Delaney <idella4@gentoo.org> +simpletal-4.2-r1.ebuild,
  +simpletal-5.1-r1.ebuild, -simpletal-4.2.ebuild, -simpletal-5.0.ebuild,
  -simpletal-5.1.ebuild:
  revbumps; conversion -> distutils-r1, rm old

  10 Aug 2014; Sergei Trofimovich <slyfox@gentoo.org> simpletal-4.2.ebuild,
  simpletal-5.0.ebuild, simpletal-5.1.ebuild:
  QA: drop trailing '.' from DESCRIPTION

  06 Nov 2013; Patrick Lauer <patrick@gentoo.org> simpletal-4.2.ebuild,
  simpletal-5.0.ebuild, simpletal-5.1.ebuild:
  Shorten description, make repoman happier

*simpletal-5.1 (09 Mar 2012)

  09 Mar 2012; Patrick Lauer <patrick@gentoo.org> +simpletal-5.1.ebuild:
  Bump

  29 Jun 2010; Arfrever Frehtes Taifersar Arahesis <arfrever@gentoo.org>
  simpletal-4.2.ebuild, simpletal-5.0.ebuild:
  Use PYTHON_DEPEND instead of NEED_PYTHON.

*simpletal-5.0 (22 Nov 2009)
*simpletal-4.2 (22 Nov 2009)

  22 Nov 2009; Arfrever Frehtes Taifersar Arahesis <arfrever@gentoo.org>
  -simpletal-4.1.ebuild, +simpletal-4.2.ebuild, +simpletal-5.0.ebuild:
  Version bump (4.2 is the last version supporting Python 2). Set SUPPORT_PYTHON_ABIS.

  21 Jul 2009; Arfrever Frehtes Taifersar Arahesis <arfrever@gentoo.org>
  simpletal-4.1.ebuild:
  Restrict tests (bug #276689).

*simpletal-4.1 (25 Jun 2007)

  25 Jun 2007; Lukasz Strzygowski <lucass@gentoo.org> -simpletal-3.9.ebuild,
  -simpletal-3.11.ebuild, -simpletal-3.13.ebuild, -simpletal-4.0.ebuild,
  +simpletal-4.1.ebuild:
  Version bump (bug #143817): cleanup, added examples use-flag, added dep
  on pyxml, marked ~amd64. Dropped old versions.

  21 Feb 2007; Lukasz Strzygowski <lucass@gentoo.org>
  files/digest-simpletal-3.9, files/digest-simpletal-3.11,
  files/digest-simpletal-3.13, Manifest:
  Convert to Manifest2.

*simpletal-4.0 (08 Feb 2006)

  08 Feb 2006; Marien Zwart <marienz@gentoo.org> +simpletal-4.0.ebuild:
  Bump to 4.0 (bug #116742), add src_test.

*simpletal-3.13 (16 Oct 2005)

  16 Oct 2005; Bryan Østergaard <kloeri@gentoo.org> +simpletal-3.13.ebuild:
  Version bump.

  26 Aug 2005; Aron Griffis <agriffis@gentoo.org> simpletal-3.11.ebuild:
  add ~ia64

*simpletal-3.11 (02 Jan 2005)

  02 Jan 2005; Bryan Østergaard <kloeri@gentoo.org> +metadata.xml,
  +simpletal-3.11.ebuild, +simpletal-3.9.ebuild:
  Move from net-zope to dev-python, bug 72252.

*simpletal-3.11 (09 Nov 2004)

  09 Nov 2004; Radoslaw Stachowiak <radek@gentoo.org>
  +simpletal-3.11.ebuild:
  New version release. Also added html documentation to ebuild.

  12 May 2004; Jodok Batlogg <batlogg@gentoo.org>; :
  initial import, user submitted ebuild, fixes #50278, thanks to Iain Smith
  <gentoo@iesmith.net>
