# ChangeLog for sci-biology/tophat
# Copyright 1999-2016 Gentoo Foundation; Distributed under the GPL v2
# (auto-generated from git log)

*tophat-2.0.9 (09 Aug 2015)
*tophat-2.0.8 (09 Aug 2015)
*tophat-2.0.2 (09 Aug 2015)
*tophat-2.0.0 (09 Aug 2015)
*tophat-1.4.1 (09 Aug 2015)
*tophat-1.0.12 (09 Aug 2015)

  09 Aug 2015; Robin H. Johnson <robbat2@gentoo.org>
  +files/tophat-2.0.2-flags.patch, +files/tophat-2.0.8-flags.patch,
  +files/tophat-2.0.9-flags.patch, +metadata.xml, +tophat-1.0.12.ebuild,
  +tophat-1.4.1.ebuild, +tophat-2.0.0.ebuild, +tophat-2.0.2.ebuild,
  +tophat-2.0.8.ebuild, +tophat-2.0.9.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

  19 Oct 2015; Sergey Popov <pinkbyte@gentoo.org> tophat-2.0.8.ebuild,
  tophat-2.0.9.ebuild:
  correct dependency on sci-biology/seqan

  Gentoo-Bug: 546816

  Package-Manager: portage-2.2.20

  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)

*tophat-2.1.1 (09 Apr 2016)

  09 Apr 2016; David Seifert <soap@gentoo.org>
  +files/tophat-2.1.1-unbundle-seqan-samtools.patch, +tophat-2.1.1.ebuild:
  Version bump, use samtools:0.1-legacy

  Gentoo-Bug: 545154, 546816, 566494, 572054
  * EAPI=6
  * Unbundle samtools and SeqAn
  * Fix broken shebangs in python scripts

  Package-Manager: portage-2.2.28

  09 Apr 2016; David Seifert <soap@gentoo.org>
  -files/tophat-2.0.2-flags.patch, -files/tophat-2.0.8-flags.patch,
  -files/tophat-2.0.9-flags.patch, metadata.xml, -tophat-1.4.1.ebuild,
  -tophat-2.0.0.ebuild, -tophat-2.0.2.ebuild, -tophat-2.0.8.ebuild,
  -tophat-2.0.9.ebuild:
  Remove old and broken

  Package-Manager: portage-2.2.28

*tophat-2.1.1-r1 (03 Sep 2016)

  03 Sep 2016; David Seifert <soap@gentoo.org> -tophat-2.1.1.ebuild,
  +tophat-2.1.1-r1.ebuild:
  Various QA fixes, handle python properly

  * Add subslot operator := for dev-libs/boost
  * DEPEND on virtual/pkgconfig
  * Add missing ${PYTHON_REQUIRED_USE} and ${PYTHON_DEPS}
  * Install python scripts and modules properly using
    'python_doscript' and 'python_domodule'

  Package-Manager: portage-2.3.0

  22 Sep 2016; David Seifert <soap@gentoo.org>
  +files/tophat-2.1.1-fix-c++14.patch, tophat-2.1.1-r1.ebuild:
  Allow for compiling with GCC 6

  Gentoo-bug: 594544

  Package-Manager: portage-2.3.1

*tophat-2.1.1-r2 (25 Sep 2016)

  25 Sep 2016; David Seifert <soap@gentoo.org>
  files/tophat-2.1.1-unbundle-seqan-samtools.patch, -tophat-2.1.1-r1.ebuild,
  +tophat-2.1.1-r2.ebuild:
  USE="threads" dep on dev-libs/boost

  Gentoo-bug: 594810
  * Remove autoconf macros from archive, depend on
    sys-devel/autoconf instead for the latest versions.

  Package-Manager: portage-2.3.1

  27 Sep 2016; David Seifert <soap@gentoo.org> -tophat-1.0.12.ebuild:
  Remove old and ancient 1.0 ebuilds

  Package-Manager: portage-2.3.1

*tophat-2.1.1-r3 (03 Oct 2016)

  03 Oct 2016; David Seifert <soap@gentoo.org> -tophat-2.1.1-r2.ebuild,
  +tophat-2.1.1-r3.ebuild:
  Do not wrap scripts

  Package-Manager: portage-2.3.1

