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

*coccinelle-1.0.1 (09 Aug 2015)
*coccinelle-1.0.0 (09 Aug 2015)

  09 Aug 2015; Robin H. Johnson <robbat2@gentoo.org> +coccinelle-1.0.0.ebuild,
  +coccinelle-1.0.1.ebuild, +files/50coccinelle-gentoo.el,
  +files/coccinelle-1.0.0_rc16-findtool.patch, +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

*coccinelle-1.0.2 (24 Aug 2015)

  24 Aug 2015; Alexis Ballier <aballier@gentoo.org> +coccinelle-1.0.2.ebuild:
  bump to 1.0.2.

  Package-Manager: portage-2.2.20.1

  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

*coccinelle-1.0.4 (30 Oct 2015)

  30 Oct 2015; Alexis Ballier <aballier@gentoo.org> +coccinelle-1.0.4.ebuild:
  Bump to 1.0.4.

  Package-Manager: portage-2.2.23

  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)

  21 Jun 2016; Michał Górny <mgorny@gentoo.org> coccinelle-1.0.0.ebuild,
  coccinelle-1.0.1.ebuild, coccinelle-1.0.2.ebuild, coccinelle-1.0.4.ebuild:
  Remove := op from || dep, #586304

  23 Jun 2016; Alexis Ballier <aballier@gentoo.org> coccinelle-1.0.0.ebuild,
  coccinelle-1.0.1.ebuild, coccinelle-1.0.2.ebuild, coccinelle-1.0.4.ebuild:
  Revert "dev-util/coccinelle: Remove := op from || dep, #586304"

  This reverts commit 23c0a5e66e44e35d9854ee94dc0e3b41a2f15035.

  This commit is wrong in several aspects:
    - Such changes should come with a revbump
    - Removing := deps causes packages not to be rebuilt on upgrades, causing
      barely understandable build failures when upgrading, later on.
      Thanks to this commit, people that have installed those packages will
      likely experience those failures with the upcoming ocaml 4.03 unmask.
    - This is a non maintainer commit where no discussion at all happened with
  the
      maintainers during the 3 days between bug report and mass commit.
      Such discussion could have prevented the above mentioned breakage.

  Proper fix is to drop the backward compatibility part of the || () dep. This
  fix
  was slowly moving forward whenever possible and noticed. Main blocker for
  this is
  bug #463018 which requires taking extra care for not breaking the stable
  tree
  nor needlessly preventing future stabilization of packages.

*coccinelle-1.0.5 (23 Jun 2016)

  23 Jun 2016; Alexis Ballier <aballier@gentoo.org> +coccinelle-1.0.5.ebuild:
  bump to 1.0.5.

  Cleanup a bit ebuild.
  Remove backward compat dep for camlp4.

  Package-Manager: portage-2.3.0_rc1

  28 Jun 2016; Michał Górny <mgorny@gentoo.org> -coccinelle-1.0.0.ebuild,
  -coccinelle-1.0.1.ebuild, -coccinelle-1.0.2.ebuild,
  -coccinelle-1.0.4.ebuild, -files/coccinelle-1.0.0_rc16-findtool.patch:
  Remove old, #586930

