# ChangeLog for net-misc/lldpd
# Copyright 1999-2016 Gentoo Foundation; Distributed under the GPL v2
# (auto-generated from git log)

*lldpd-0.7.13 (09 Aug 2015)
*lldpd-0.7.11-r3 (09 Aug 2015)

  09 Aug 2015; Robin H. Johnson <robbat2@gentoo.org>
  +files/lldpd-0.7.11-bash-completion-dir.patch,
  +files/lldpd-0.7.11-zsh-completion-dir.patch, +files/lldpd-confd-1,
  +files/lldpd-initd-4, +files/lldpd.service, +lldpd-0.7.11-r3.ebuild,
  +lldpd-0.7.13.ebuild, +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

  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; Justin Lecher <jlec@gentoo.org> lldpd-0.7.11-r3.ebuild,
  lldpd-0.7.13.ebuild:
  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

  24 Jan 2016; Michał Górny <mgorny@gentoo.org> metadata.xml:
  Unify quoting in metadata.xml files for machine processing

  Force unified quoting in all metadata.xml files since lxml does not
  preserve original use of single and double quotes. Ensuring unified
  quoting before the process allows distinguishing the GLEP 67-related
  metadata.xml changes from unrelated quoting changes.

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

*lldpd-0.9.1 (03 Mar 2016)

  03 Mar 2016; Patrick McLean <chutzpah@gentoo.org> +files/lldpd-initd-5,
  +files/tmpfilesd, +lldpd-0.9.1.ebuild, metadata.xml:
  Version bump to 0.9.1

  Package-Manager: portage-2.2.27

  18 May 2016; Austin English <wizardedit@gentoo.org> files/lldpd-initd-4:
  use #!/sbin/openrc-run instead of #!/sbin/runscript

*lldpd-0.9.3 (07 Jun 2016)

  07 Jun 2016; Patrick McLean <chutzpah@gentoo.org>
  +files/lldpd-0.9-seccomp-missing-syscalls.patch, files/lldpd-initd-5,
  +files/lldpd.conf, +lldpd-0.9.3.ebuild, metadata.xml:
  Version bump, add patch for seccomp stuff (bug #577576)

  Package-Manager: portage-2.3.0_rc1

*lldpd-0.9.3-r1 (10 Jun 2016)

  10 Jun 2016; Patrick McLean <chutzpah@gentoo.org>
  files/lldpd-0.9-seccomp-missing-syscalls.patch, +lldpd-0.9.3-r1.ebuild:
  Revision bump, update seccomp patch to add missing syscalls

  Gentoo-bug: 564566

  Package-Manager: portage-2.3.0_rc1

  10 Jun 2016; Patrick McLean <chutzpah@gentoo.org> -lldpd-0.9.3.ebuild:
  Clear out old ebuild for 0.9.3

  Package-Manager: portage-2.3.0_rc1

*lldpd-0.9.4 (14 Jul 2016)

  14 Jul 2016; Patrick McLean <chutzpah@gentoo.org> +lldpd-0.9.4.ebuild:
  Version bump to 0.9.4

  Package-Manager: portage-2.3.0

  26 Sep 2016; Agostino Sarubbo <ago@gentoo.org> lldpd-0.9.3-r1.ebuild:
  amd64 stable wrt bug #588852

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

