# ChangeLog for games-puzzle/tanglet
# Copyright 1999-2015 Gentoo Foundation; Distributed under the GPL v2
# $Header: /var/cvsroot/gentoo-x86/games-puzzle/tanglet/ChangeLog,v 1.22 2015/03/12 21:23:59 mr_bones_ Exp $

  12 Mar 2015; Michael Sterrett <mr_bones_@gentoo.org> tanglet-1.2.1.ebuild,
  tanglet-1.3.1.ebuild:
  EAPI=5

  19 Feb 2015; Michael Sterrett <mr_bones_@gentoo.org>
  -files/tanglet-1.2.2-datadir.patch, -tanglet-1.2.2.ebuild:
  old

*tanglet-1.3.1 (11 Feb 2015)

  11 Feb 2015; Michael Sterrett <mr_bones_@gentoo.org>
  +files/tanglet-1.3.1-datadir.patch, +tanglet-1.3.1.ebuild,
  files/tanglet-1.2.1-datadir.patch, files/tanglet-1.2.2-datadir.patch,
  tanglet-1.2.2.ebuild:
  version bump

  28 Aug 2014; Michael Sterrett <mr_bones_@gentoo.org> tanglet-1.2.2.ebuild:
  tidy

  28 Aug 2014; Michael Sterrett <mr_bones_@gentoo.org>
  -files/tanglet-1.2.0-datadir.patch, -tanglet-1.2.0.ebuild:
  old

*tanglet-1.2.2 (19 May 2014)

  19 May 2014; Tupone Alfredo <tupone@gentoo.org> +tanglet-1.2.2.ebuild,
  +files/tanglet-1.2.2-datadir.patch:
  Version bump to 1.2.2. Bug #500194 by Julian Ospald (hasufell)

  02 Mar 2013; Markos Chandras <hwoarang@gentoo.org> tanglet-1.2.0.ebuild,
  tanglet-1.2.1.ebuild:
  Move Qt dependencies to the new category

  25 Feb 2013; Agostino Sarubbo <ago@gentoo.org> tanglet-1.2.1.ebuild:
  Stable for x86, wrt bug #458526

  21 Feb 2013; Sergey Popov <pinkbyte@gentoo.org> tanglet-1.2.1.ebuild:
  Stable on amd64, wrt bug #458526

*tanglet-1.2.1 (22 Jan 2013)

  22 Jan 2013; Michael Sterrett <mr_bones_@gentoo.org>
  +files/tanglet-1.2.1-datadir.patch, +tanglet-1.2.1.ebuild,
  -files/tanglet-1.1.0-datadir.patch:
  version bump (bug #452278)

  27 Mar 2012; Michael Sterrett <mr_bones_@gentoo.org> -tanglet-1.1.0.ebuild:
  old

  28 Jan 2012; Pawel Hajdan jr <phajdan.jr@gentoo.org> tanglet-1.2.0.ebuild:
  x86 stable wrt bug #400813

  26 Jan 2012; Agostino Sarubbo <ago@gentoo.org> tanglet-1.2.0.ebuild:
  Stable for amd64, wrt bug #400813

*tanglet-1.2.0 (22 Dec 2011)

  22 Dec 2011; Michael Sterrett <mr_bones_@gentoo.org>
  files/tanglet-1.1.0-datadir.patch, +tanglet-1.2.0.ebuild,
  +files/tanglet-1.2.0-datadir.patch:
  version bump with patch from Michael (kensington) (bug #395583)

  01 Jun 2010; Pawel Hajdan jr <phajdan.jr@gentoo.org> tanglet-1.1.0.ebuild:
  x86 stable wrt bug #320821

  25 May 2010; Pacho Ramos <pacho@gentoo.org> tanglet-1.1.0.ebuild:
  stable amd64, bug 320821

  21 Apr 2010; Samuli Suominen <ssuominen@gentoo.org> tanglet-1.0.1.ebuild:
  amd64 stable wrt #305669

*tanglet-1.1.0 (21 Apr 2010)

  21 Apr 2010; Michael Sterrett <mr_bones_@gentoo.org>
  +tanglet-1.1.0.ebuild, +files/tanglet-1.1.0-datadir.patch:
  version bump

  28 Feb 2010; Pawel Hajdan jr <phajdan.jr@gentoo.org> tanglet-1.0.1.ebuild:
  x86 stable wrt bug #305669

  27 Feb 2010; Michael Sterrett <mr_bones_@gentoo.org> tanglet-1.0.1.ebuild,
  +files/tanglet-1.0.1-datadir.patch:
  fix initial data locating

*tanglet-1.0.1 (14 Jan 2010)

  14 Jan 2010; Samuli Suominen <ssuominen@gentoo.org> +tanglet-1.0.1.ebuild:
  Version bump.

*tanglet-1.0.0 (06 Jan 2010)

  06 Jan 2010; Samuli Suominen <ssuominen@gentoo.org> +tanglet-1.0.0.ebuild:
  Initial commit.
