cloudstack (4.9.3.1) unstable; urgency=low

  * Update the version to 4.9.3.1

 -- the Apache CloudStack project <dev@cloudstack.apache.org>  Thu, 22 Mar 2018 11:37:50 +0530

cloudstack (4.9.3.0) unstable; urgency=low

  * Update the version to 4.9.3.0

 -- the Apache CloudStack project <dev@cloudstack.apache.org>  Mon, 28 Aug 2017 14:52:37 +0200

cloudstack (4.9.3.0-SNAPSHOT) unstable; urgency=low

  * Update the version to 4.9.3.0-SNAPSHOT

 -- the Apache CloudStack project <dev@cloudstack.apache.org>  Fri, 06 Dec 2016 10:38:00 +0530

cloudstack (4.9.2.0) unstable; urgency=low

  * Update the version to 4.9.2.0

 -- the Apache CloudStack project <dev@cloudstack.apache.org>  Tue, 03 Jan 2017 12:28:47 +0530

cloudstack (4.9.2.0-SNAPSHOT) unstable; urgency=low

  * Update the version to 4.9.2.0-SNAPSHOT

 -- the Apache CloudStack project <dev@cloudstack.apache.org>  Sat, 10 Dec 2016 08:38:03 +0530

cloudstack (4.9.2.0-SNAPSHOT) unstable; urgency=low

  * Update the version to 4.9.2.0-SNAPSHOT

 -- the Apache CloudStack project <dev@cloudstack.apache.org>  Fri, 19 Aug 2016 13:48:00 +0530

cloudstack (4.9.0) unstable; urgency=low

  * Update the version to 4.9.0

 -- the Apache CloudStack project <dev@cloudstack.apache.org>  Mon, 25 Jul 2016 16:56:03 -0400

cloudstack (4.9.0-SNAPSHOT) unstable; urgency=low

  [ Remi Bergsma ]
  * Update the version to 4.9.0.snapshot

 -- the Apache CloudStack project <dev@cloudstack.apache.org>  Wed, 20 Jan 2016 23:43:35 +0100

cloudstack (4.8.0-SNAPSHOT) unstable; urgency=low

  [ Remi Bergsma ]
  * Update the version to 4.8.0.snapshot

 -- the Apache CloudStack project <dev@cloudstack.apache.org>  Sun, 21 Dec 2015 22:11:55 +0100

cloudstack (4.7.0-SNAPSHOT) unstable; urgency=low

  [ Remi Bergsma ]
  * Update the version to 4.7.0.snapshot

 -- the Apache CloudStack project <dev@cloudstack.apache.org>  Sun, 15 Nov 2015 21:28:33 +0100

cloudstack (4.6.0-SNAPSHOT) unstable; urgency=low

  [ Hugo Trippaers ]
  * Update the version to 4.6.0.snapshot

  [ Rafael da Fonseca ]
  * Switch to dpkg-source 3.0 (native) format

 -- the Apache CloudStack project <dev@cloudstack.apache.org>  Thu, 18 Jun 2015 11:17:09 +0200

cloudstack (4.5.0-snapshot) unstable; urgency=low

  * Update the version to 4.5.0.snapshot

 -- Hugo Trippaers <hugo@apache.org>  Thu, 21 Nov 2013 12:00:00 -0400

cloudstack (4.4.0-snapshot) unstable; urgency=low

  * Update the version to 4.4.0.snapshot

 -- Hugo Trippaers <hugo@apache.org>  Thu, 21 Nov 2013 12:00:00 -0400

cloudstack (4.3.0-snapshot) unstable; urgency=low

  * Update the version to 4.3.0.snapshot

 -- Chip Childers <chipchilders@apache.org>  Thu, 1 Aug 2013 12:00:00 -0400

cloudstack (4.2.0) unstable; urgency=low

  * Update the version to 4.2.0 to be in sync with Maven (again)

 -- Wido den Hollander <wido@widodh.nl>  Tue, 14 May 2013 15:56:42 +0200

cloudstack (4.2.0-incubating-0.0.snapshot) unstable; urgency=low

  * Update the version to 4.2.0 to be in sync with Maven

 -- Wido den Hollander <wido@widodh.nl>  Wed, 13 Mar 2013 19:15:00 +0100

cloudstack (4.1.0-incubating-0.0.snapshot) unstable; urgency=low

  * Incorporate incubating into version, remove epoch

 -- Noa Resare <noa@spotify.com>  Tue, 05 Feb 2013 18:05:28 +0000

cloud (1:4.0.0-1) unstable; urgency=low

  * Bumping the version to 4.0.0

 -- Chip Childers <chipchilders@apache.org>  Fri, 5 Oct 2012 16:00:00 -0500

cloud (1:4.0.0-beta6) unstable; urgency=low

  * Bumping the version to 4.0 Beta 6

 -- Wido den Hollander <wido@widodh.nl>  Fri, 5 Oct 2012 11:41:17 +0200

cloud (1:4.0.0-beta1) unstable; urgency=low

  * Bumping the version to 4.0 Beta 1

 -- Wido den Hollander <wido@widodh.nl>  Wed, 26 Sep 2012 21:14:48 +0200

cloud (4.0.0-rc2) unstable; urgency=low

  * Bumping the version to 4.0 RC2

 -- Wido den Hollander <wido@widodh.nl>  Mon, 24 Sep 2012 11:30:29 +0200
 
cloud (4.0.0-rc1) unstable; urgency=low

  * Bumping the version to 4.0 RC1

 -- Wido den Hollander <wido@widodh.nl>  Fri, 17 Aug 2012 11:10:41 +0200

cloud (3.0.2) unstable; urgency=low

  * Bumping the package version to the latest release.

 -- Wido den Hollander <wido@widodh.nl>  Wed, 25 Jul 2012 14:53:31 +0200

cloud (2.2.2) unstable; urgency=low

  * Bumping version number for next CloudStack release

 -- Engineering <info@cloud.com>  Mon, 7 Mar 2011 11:19:34 -0700

cloud (2.1.97) unstable; urgency=low

  * Bumping version number for next CloudStack release

 -- Rudd-O <manuel@cloud.com>  Sat, 31 Jul 2010 19:09:54 -0700

cloud (2.0.97) unstable; urgency=low

  * Bumping version number for next CloudStack release

 -- Rudd-O <manuel@cloud.com>  Mon, 12 Jul 2010 14:01:41 -0700

cloud (2.0.2) unstable; urgency=low

  * Bumping version number for next CloudStack release

 -- Rudd-O <manuel@cloud.com>  Fri, 2 Jul 2010 19:55:41 -0700

cloud (2.0.0) unstable; urgency=low

  * Bumping version number for next CloudStack release

 -- Rudd-O <manuel@cloud.com>  Tue, 15 Jun 2010 12:10:05 -0700

cloud (1.9.14) unstable; urgency=low

  * Bumping version number for next CloudStack release

 -- Rudd-O <manuel@cloud.com>  Tue, 11 May 2010 14:46:14 -0700

cloud (1.9.12) unstable; urgency=low

  * Bumping version number for CloudStack RC4 release

 -- Rudd-O <manuel@cloud.com>  Mon, 3 May 2010 14:46:14 -0700

cloud (1.9.11) unstable; urgency=low

  * Bumping version number for CloudStack release

 -- Rudd-O <manuel@cloud.com>  Fri, 30 Apr 2010 15:08:38 -0700

cloud (1.9.10) unstable; urgency=low

  * Bumping version number for FOSS release

 -- Rudd-O <manuel@vmops.com>  Wed, 28 Apr 2010 22:09:48 -0700

cloud (1.9.9) unstable; urgency=low

  * Bumping version number for new build prereleases

 -- Rudd-O <manuel@vmops.com>  Mon, 12 Apr 2010 17:39:44 -0700

cloud (1.9.8) unstable; urgency=low

  * Branching RC3

 -- Rudd-O <manuel@vmops.com>  Mon, 05 Apr 2010 12:46:06 -0700

cloud (1.9.7) unstable; urgency=low

  * Initial Release.

 -- Rudd-O <manuel@vmops.com>  Thu, 25 Mar 2010 15:12:06 -0700
