diff -Nru glance-2012.1/Authors glance-2012.1+stable~20120608-5462295/Authors --- glance-2012.1/Authors 2012-04-03 17:51:59.000000000 +0000 +++ glance-2012.1+stable~20120608-5462295/Authors 2012-06-08 14:33:14.000000000 +0000 @@ -20,6 +20,7 @@ Gabriel Hurley Hengqing Hu Isaku Yamahata +J. Daniel Schmidt Jason Koelker Jay Pipes James E. Blair diff -Nru glance-2012.1/bin/glance-control glance-2012.1+stable~20120608-5462295/bin/glance-control --- glance-2012.1/bin/glance-control 2012-04-03 17:51:59.000000000 +0000 +++ glance-2012.1+stable~20120608-5462295/bin/glance-control 2012-06-08 14:33:14.000000000 +0000 @@ -133,7 +133,7 @@ pass def redirect_to_syslog(fds, server): - log_cmd = '/usr/bin/logger -t "%s[%d]"' % (server, os.getpid()) + log_cmd = 'logger -t "%s[%d]"' % (server, os.getpid()) process = subprocess.Popen(log_cmd, shell=True, stdin=subprocess.PIPE) diff -Nru glance-2012.1/debian/changelog glance-2012.1+stable~20120608-5462295/debian/changelog --- glance-2012.1/debian/changelog 2012-05-24 21:22:36.000000000 +0000 +++ glance-2012.1+stable~20120608-5462295/debian/changelog 2012-06-08 14:55:21.000000000 +0000 @@ -1,10 +1,24 @@ -glance (2012.1-0ubuntu2.1) precise-proposed; urgency=low +glance (2012.1+stable~20120608-5462295-0ubuntu2.2) precise-proposed; urgency=low - * debian/patches/swift_auth_url_trailing_slash.patch: Ensure swift auth URL - includes trailing slash (LP: #979745). Backported from stable/essex, can - be dropped with first upstream stable update. + * New usptream snapshot. (LP: #1010473) + * Resynchronize with stable/essex: + - 5462295 Fix i18n in glance.notifier.notify_kombu. (LP: #983829) + - 7a9e3a7 Omit Content-Length on chunked transfer. (LP: #981332) + - 5838b63 Fix content type for qpid notifier. (LP: #980872) + - 98913da search for logger in PATH. Fixes (LP: #978907) + - f136e7e Ensure swift auth URL includes trailing slash. Fixes (LP: #979745) + * debian/rules: Add ability to build tarballs from a git snapshot. + * debian/patches/fix-pep8-ubuntu.patch: Fix pep8 errors. + + -- Chuck Short Tue, 05 Jun 2012 10:43:12 -0400 + +glance (2012.1-0ubuntu2.1) precise; urgency=low + + * debian/patches/disable-swift-tests.patch: Fix indentation, allowing tests + to pass when not run on buildds or other constrained environments, + refreshed. - -- Adam Gandelman Wed, 23 May 2012 16:19:50 -0700 + -- Adam Gandelman Tue, 29 May 2012 10:20:52 -0700 glance (2012.1-0ubuntu2) precise; urgency=low diff -Nru glance-2012.1/debian/patches/disable-swift-tests.patch glance-2012.1+stable~20120608-5462295/debian/patches/disable-swift-tests.patch --- glance-2012.1/debian/patches/disable-swift-tests.patch 2012-05-24 21:06:21.000000000 +0000 +++ glance-2012.1+stable~20120608-5462295/debian/patches/disable-swift-tests.patch 2012-06-05 14:38:18.000000000 +0000 @@ -1,29 +1,29 @@ Description: Make the testsuite run in the buildds. Author: Chuck Short Forwarded: no -diff -Naurp glance-2012.1.orig/glance/tests/unit/test_clients.py glance-2012.1/glance/tests/unit/test_clients.py ---- glance-2012.1.orig/glance/tests/unit/test_clients.py 2012-03-30 09:12:40.000000000 -0400 -+++ glance-2012.1/glance/tests/unit/test_clients.py 2012-04-02 08:41:16.613253324 -0400 -@@ -1863,8 +1863,13 @@ class TestClient(base.IsolatedUnitTest): +Index: glance/glance/tests/unit/test_clients.py +=================================================================== +--- glance.orig/glance/tests/unit/test_clients.py 2012-05-29 10:18:38.763981464 -0700 ++++ glance/glance/tests/unit/test_clients.py 2012-05-29 10:20:07.127985283 -0700 +@@ -1866,7 +1866,12 @@ tmp_file.write(image_data_fixture) tmp_file.close() - new_image = self.client.add_image(fixture, open(tmp_image_filepath)) -- new_image_id = new_image['id'] + try: + new_image = self.client.add_image(fixture, + open(tmp_image_filepath)) + except: + return False + -+ new_image_id = new_image['id'] + new_image_id = new_image['id'] if os.path.exists(tmp_image_filepath): - os.unlink(tmp_image_filepath) -diff -Naurp glance-2012.1.orig/glance/tests/unit/test_swift_store.py glance-2012.1/glance/tests/unit/test_swift_store.py ---- glance-2012.1.orig/glance/tests/unit/test_swift_store.py 2012-03-30 09:12:40.000000000 -0400 -+++ glance-2012.1/glance/tests/unit/test_swift_store.py 2012-04-02 08:41:48.733252657 -0400 -@@ -184,9 +184,14 @@ def stub_out_swift_common_client(stubs, +Index: glance/glance/tests/unit/test_swift_store.py +=================================================================== +--- glance.orig/glance/tests/unit/test_swift_store.py 2012-05-29 10:18:38.783981465 -0700 ++++ glance/glance/tests/unit/test_swift_store.py 2012-05-29 10:18:40.939981558 -0700 +@@ -184,9 +184,14 @@ stubs.Set(swift.common.client, 'http_connection', fake_http_connection) @@ -38,7 +38,7 @@ def test_get_size(self): """ Test that we can get the size of an object in the swift store -@@ -196,6 +201,7 @@ class SwiftTests(object): +@@ -196,6 +201,7 @@ image_size = self.store.get_size(loc) self.assertEqual(image_size, 5120) @@ -46,7 +46,7 @@ def test_get(self): """Test a "normal" retrieval of an image in chunks""" uri = "swift://user:key@auth_address/glance/%s" % FAKE_UUID -@@ -210,6 +216,7 @@ class SwiftTests(object): +@@ -210,6 +216,7 @@ data += chunk self.assertEqual(expected_data, data) @@ -54,7 +54,7 @@ def test_get_with_http_auth(self): """ Test a retrieval from Swift with an HTTP authurl. This is -@@ -228,6 +235,7 @@ class SwiftTests(object): +@@ -228,6 +235,7 @@ data += chunk self.assertEqual(expected_data, data) @@ -62,7 +62,7 @@ def test_get_non_existing(self): """ Test that trying to retrieve a swift that doesn't exist -@@ -238,6 +246,7 @@ class SwiftTests(object): +@@ -238,6 +246,7 @@ self.store.get, loc) @@ -70,7 +70,7 @@ def test_add(self): """Test that we can add an image via the swift backend""" expected_swift_size = FIVE_KB -@@ -269,6 +278,7 @@ class SwiftTests(object): +@@ -269,6 +278,7 @@ self.assertEquals(expected_swift_contents, new_image_contents) self.assertEquals(expected_swift_size, new_image_swift_size) @@ -78,7 +78,7 @@ def test_add_auth_url_variations(self): """ Test that we can add an image via the swift backend with -@@ -325,6 +335,7 @@ class SwiftTests(object): +@@ -325,6 +335,7 @@ self.assertEquals(expected_swift_contents, new_image_contents) self.assertEquals(expected_swift_size, new_image_swift_size) @@ -86,7 +86,7 @@ def test_add_no_container_no_create(self): """ Tests that adding an image with a non-existing container -@@ -351,6 +362,7 @@ class SwiftTests(object): +@@ -351,6 +362,7 @@ self.assertTrue(exception_caught) self.assertEquals(SWIFT_PUT_OBJECT_CALLS, 0) @@ -94,7 +94,7 @@ def test_add_no_container_and_create(self): """ Tests that adding an image with a non-existing container -@@ -387,6 +399,7 @@ class SwiftTests(object): +@@ -387,6 +399,7 @@ self.assertEquals(expected_swift_contents, new_image_contents) self.assertEquals(expected_swift_size, new_image_swift_size) @@ -102,7 +102,7 @@ def test_add_large_object(self): """ Tests that adding a very large image. We simulate the large -@@ -434,6 +447,7 @@ class SwiftTests(object): +@@ -434,6 +447,7 @@ self.assertEquals(expected_swift_contents, new_image_contents) self.assertEquals(expected_swift_size, new_image_swift_size) @@ -110,7 +110,7 @@ def test_add_large_object_zero_size(self): """ Tests that adding an image to Swift which has both an unknown size and -@@ -494,6 +508,7 @@ class SwiftTests(object): +@@ -494,6 +508,7 @@ self.assertEquals(expected_swift_contents, new_image_contents) self.assertEquals(expected_swift_size, new_image_swift_size) @@ -118,7 +118,7 @@ def test_add_already_existing(self): """ Tests that adding an image with an existing identifier -@@ -526,12 +541,14 @@ class SwiftTests(object): +@@ -526,12 +541,14 @@ """ self.assertTrue(self._option_required('swift_store_key')) @@ -133,7 +133,7 @@ def test_delete(self): """ Test we can delete an existing image in the swift store -@@ -542,6 +559,7 @@ class SwiftTests(object): +@@ -542,6 +559,7 @@ self.assertRaises(exception.NotFound, self.store.get, loc) diff -Nru glance-2012.1/debian/patches/fix-pep8-ubuntu.patch glance-2012.1+stable~20120608-5462295/debian/patches/fix-pep8-ubuntu.patch --- glance-2012.1/debian/patches/fix-pep8-ubuntu.patch 1970-01-01 00:00:00.000000000 +0000 +++ glance-2012.1+stable~20120608-5462295/debian/patches/fix-pep8-ubuntu.patch 2012-06-08 14:54:54.000000000 +0000 @@ -0,0 +1,27 @@ +diff -Naurp glance-2012.1.orig/glance/common/auth.py glance-2012.1/glance/common/auth.py +--- glance-2012.1.orig/glance/common/auth.py 2012-06-08 10:33:14.000000000 -0400 ++++ glance-2012.1/glance/common/auth.py 2012-06-08 10:50:38.726539916 -0400 +@@ -133,7 +133,7 @@ class KeystoneStrategy(BaseStrategy): + # 3. In some configurations nova makes redirection to + # v2.0 keystone endpoint. Also, new location does not + # contain real endpoint, only hostname and port. +- if 'v2.0' not in auth_url: ++ if 'v2.0' not in auth_url: + auth_url = urlparse.urljoin(auth_url, 'v2.0/') + else: + # If we sucessfully auth'd, then memorize the correct auth_url +diff -Naurp glance-2012.1.orig/glance/common/client.py glance-2012.1/glance/common/client.py +--- glance-2012.1.orig/glance/common/client.py 2012-06-08 10:33:14.000000000 -0400 ++++ glance-2012.1/glance/common/client.py 2012-06-08 10:52:51.062540249 -0400 +@@ -572,9 +572,9 @@ class BaseClient(object): + return (e.errno != errno.ESPIPE) + + def _sendable(self, body): +- return (SENDFILE_SUPPORTED and ++ return (SENDFILE_SUPPORTED and + hasattr(body, 'fileno') and +- self._seekable(body) and ++ self._seekable(body) and + not self.use_ssl) + + def _iterable(self, body): diff -Nru glance-2012.1/debian/patches/series glance-2012.1+stable~20120608-5462295/debian/patches/series --- glance-2012.1/debian/patches/series 2012-05-24 21:08:00.000000000 +0000 +++ glance-2012.1+stable~20120608-5462295/debian/patches/series 2012-06-08 14:55:04.000000000 +0000 @@ -4,4 +4,4 @@ disable_db_table_auto_create.patch fix_migration_012_foreign_keys.patch convert_properties_to_uuid.patch -swift_auth_url_trailing_slash.patch +fix-pep8-ubuntu.patch diff -Nru glance-2012.1/debian/patches/swift_auth_url_trailing_slash.patch glance-2012.1+stable~20120608-5462295/debian/patches/swift_auth_url_trailing_slash.patch --- glance-2012.1/debian/patches/swift_auth_url_trailing_slash.patch 2012-05-24 21:08:00.000000000 +0000 +++ glance-2012.1+stable~20120608-5462295/debian/patches/swift_auth_url_trailing_slash.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,37 +0,0 @@ -From: Adam Gandelman -Author: Eoghan Glynn -Date: Wed May 23 16:15:58 PDT 2012 -Origin, upstream: https://review.openstack.org/#/c/6480/1 -Bug: https://launchpad.net/glance/+bug/979745 -Subject: Ensure swift auth URL includes trailing slash - -Fixes bug 979745 - -Image objects in swift were previously leaked post-deletion -due to a silent auth failure caused by the absense of the -trailing forward slash on the swift connection auth URL. - -NOTE(adam_g): This can be dropped with the first stable branch update -to this package. (05/23/2012) - -diff --git a/glance/store/swift.py b/glance/store/swift.py -index 2659daa..6db54c4 100644 ---- a/glance/store/swift.py -+++ b/glance/store/swift.py -@@ -303,12 +303,14 @@ class Store(glance.store.base.Store): - """ - snet = self.snet - auth_version = self.auth_version -+ full_auth_url = (auth_url if not auth_url or auth_url.endswith('/') -+ else auth_url + '/') - logger.debug(_("Creating Swift connection with " -- "(auth_address=%(auth_url)s, user=%(user)s, " -+ "(auth_address=%(full_auth_url)s, user=%(user)s, " - "snet=%(snet)s, auth_version=%(auth_version)s)") % - locals()) - return swift_client.Connection( -- authurl=auth_url, user=user, key=key, snet=snet, -+ authurl=full_auth_url, user=user, key=key, snet=snet, - auth_version=auth_version) - - def _option_get(self, param): diff -Nru glance-2012.1/debian/rules glance-2012.1+stable~20120608-5462295/debian/rules --- glance-2012.1/debian/rules 2012-05-24 21:06:21.000000000 +0000 +++ glance-2012.1+stable~20120608-5462295/debian/rules 2012-06-08 14:33:30.000000000 +0000 @@ -11,6 +11,17 @@ get-orig-source: uscan --verbose --force-download --rename --destdir=../build-area +UPSTREAM_GIT=git://github.com/openstack/glance.git +DEBIAN_VERSION=$(shell dpkg-parsechangelog | sed -n 's/^Version: \(.*\)-[^-]*/\1/p') +DEBIAN_NAME=glance + +get-orig-source-git: + git clone $(UPSTREAM_GIT) $(DEBIAN_NAME) + cd $(DEBIAN_NAME) ; \ + git checkout stable/essex ; \ + python setup.py sdist ; \ + mv dist/glance-2012.1.tar.gz ../glance_$(DEBIAN_VERSION).orig.tar.gz + override_dh_install: dh_install diff -Nru glance-2012.1/glance/common/client.py glance-2012.1+stable~20120608-5462295/glance/common/client.py --- glance-2012.1/glance/common/client.py 2012-04-03 17:51:59.000000000 +0000 +++ glance-2012.1+stable~20120608-5462295/glance/common/client.py 2012-06-08 14:33:14.000000000 +0000 @@ -506,12 +506,17 @@ elif _filelike(body) or self._iterable(body): c.putrequest(method, path) + use_sendfile = self._sendable(body) + + # According to HTTP/1.1, Content-Length and Transfer-Encoding + # conflict. for header, value in headers.items(): - c.putheader(header, value) + if use_sendfile or header.lower() != 'content-length': + c.putheader(header, value) iter = self.image_iterator(c, headers, body) - if self._sendable(body): + if use_sendfile: # send actual file without copying into userspace _sendbody(c, iter) else: diff -Nru glance-2012.1/glance/notifier/notify_kombu.py glance-2012.1+stable~20120608-5462295/glance/notifier/notify_kombu.py --- glance-2012.1/glance/notifier/notify_kombu.py 2012-04-03 17:51:59.000000000 +0000 +++ glance-2012.1+stable~20120608-5462295/glance/notifier/notify_kombu.py 2012-06-08 14:33:14.000000000 +0000 @@ -166,8 +166,9 @@ def log_failure(self, msg, priority): """Fallback to logging when we can't send to rabbit.""" - logger.error(_('Notification with priority %(priority)s failed; ' - 'msg=%s') % msg) + message = _('Notification with priority %(priority)s failed: ' + 'msg=%(msg)s') + logger.error(message % {'msg': msg, 'priority': priority}) def _send_message(self, msg, routing_key): """Send a message. Caller needs to catch exceptions for retry.""" diff -Nru glance-2012.1/glance/notifier/notify_qpid.py glance-2012.1+stable~20120608-5462295/glance/notifier/notify_qpid.py --- glance-2012.1/glance/notifier/notify_qpid.py 2012-04-03 17:51:59.000000000 +0000 +++ glance-2012.1+stable~20120608-5462295/glance/notifier/notify_qpid.py 2012-06-08 14:33:14.000000000 +0000 @@ -135,16 +135,13 @@ return self.session.sender(address) def warn(self, msg): - qpid_msg = qpid.messaging.Message(content=msg, - content_type='application/json') + qpid_msg = qpid.messaging.Message(content=msg) self.sender_warn.send(qpid_msg) def info(self, msg): - qpid_msg = qpid.messaging.Message(content=msg, - content_type='application/json') + qpid_msg = qpid.messaging.Message(content=msg) self.sender_info.send(qpid_msg) def error(self, msg): - qpid_msg = qpid.messaging.Message(content=msg, - content_type='application/json') + qpid_msg = qpid.messaging.Message(content=msg) self.sender_error.send(qpid_msg) diff -Nru glance-2012.1/glance/store/swift.py glance-2012.1+stable~20120608-5462295/glance/store/swift.py --- glance-2012.1/glance/store/swift.py 2012-04-03 17:51:59.000000000 +0000 +++ glance-2012.1+stable~20120608-5462295/glance/store/swift.py 2012-06-08 14:33:14.000000000 +0000 @@ -303,12 +303,14 @@ """ snet = self.snet auth_version = self.auth_version + full_auth_url = (auth_url if not auth_url or auth_url.endswith('/') + else auth_url + '/') logger.debug(_("Creating Swift connection with " - "(auth_address=%(auth_url)s, user=%(user)s, " + "(auth_address=%(full_auth_url)s, user=%(user)s, " "snet=%(snet)s, auth_version=%(auth_version)s)") % locals()) return swift_client.Connection( - authurl=auth_url, user=user, key=key, snet=snet, + authurl=full_auth_url, user=user, key=key, snet=snet, auth_version=auth_version) def _option_get(self, param): diff -Nru glance-2012.1/glance/tests/stubs.py glance-2012.1+stable~20120608-5462295/glance/tests/stubs.py --- glance-2012.1/glance/tests/stubs.py 2012-04-03 17:51:59.000000000 +0000 +++ glance-2012.1+stable~20120608-5462295/glance/tests/stubs.py 2012-06-08 14:33:14.000000000 +0000 @@ -59,7 +59,7 @@ def close(self): return True - def request(self, method, url, body=None, headers={}): + def request(self, method, url, body=None, headers=None): self.req = webob.Request.blank("/" + url.lstrip("/")) self.req.method = method if headers: @@ -110,7 +110,8 @@ def __init__(self, *args, **kwargs): self.sock = FakeSocket() - pass + self.stub_force_sendfile = kwargs.get('stub_force_sendfile', + SENDFILE_SUPPORTED) def connect(self): return True @@ -120,7 +121,7 @@ def putrequest(self, method, url): self.req = webob.Request.blank("/" + url.lstrip("/")) - if SENDFILE_SUPPORTED: + if self.stub_force_sendfile: fake_sendfile = FakeSendFile(self.req) stubs.Set(sendfile, 'sendfile', fake_sendfile.sendfile) self.req.method = method @@ -129,7 +130,10 @@ self.req.headers[key] = value def endheaders(self): - pass + hl = [i.lower() for i in self.req.headers.keys()] + assert not ('content-length' in hl and + 'transfer-encoding' in hl), \ + 'Content-Length and Transfer-Encoding are mutually exclusive' def send(self, data): # send() is called during chunked-transfer encoding, and @@ -137,7 +141,7 @@ # only write the actual data in tests. self.req.body += data.split("\r\n")[1] - def request(self, method, url, body=None, headers={}): + def request(self, method, url, body=None, headers=None): self.req = webob.Request.blank("/" + url.lstrip("/")) self.req.method = method if headers: @@ -187,8 +191,21 @@ for i in self.source.app_iter: yield i + def fake_sendable(self, body): + force = getattr(self, 'stub_force_sendfile', None) + if force is None: + return self._stub_orig_sendable(body) + else: + if force: + assert glance.common.client.SENDFILE_SUPPORTED + return force + stubs.Set(glance.common.client.BaseClient, 'get_connection_type', fake_get_connection_type) + setattr(glance.common.client.BaseClient, '_stub_orig_sendable', + glance.common.client.BaseClient._sendable) + stubs.Set(glance.common.client.BaseClient, '_sendable', + fake_sendable) stubs.Set(glance.common.client.ImageBodyIterator, '__iter__', fake_image_iter) @@ -211,7 +228,7 @@ def close(self): return True - def request(self, method, url, body=None, headers={}): + def request(self, method, url, body=None, headers=None): self.req = webob.Request.blank("/" + url.lstrip("/")) self.req.method = method if headers: diff -Nru glance-2012.1/glance/tests/unit/test_clients.py glance-2012.1+stable~20120608-5462295/glance/tests/unit/test_clients.py --- glance-2012.1/glance/tests/unit/test_clients.py 2012-04-03 17:51:59.000000000 +0000 +++ glance-2012.1+stable~20120608-5462295/glance/tests/unit/test_clients.py 2012-06-08 14:33:14.000000000 +0000 @@ -26,7 +26,7 @@ import webob from glance import client -from glance.common import context +from glance.common import client as base_client from glance.common import exception from glance.common import utils from glance.registry.db import api as db_api @@ -36,6 +36,7 @@ from glance.tests import stubs from glance.tests import utils as test_utils from glance.tests.unit import base +from glance.tests import utils as test_utils CONF = {'sql_connection': 'sqlite://'} @@ -1842,7 +1843,7 @@ for k, v in fixture.items(): self.assertEquals(v, new_meta[k]) - def test_add_image_with_image_data_as_file(self): + def add_image_with_image_data_as_file(self, sendfile): """Tests can add image by passing image data as file""" fixture = {'name': 'fake public image', 'is_public': True, @@ -1852,6 +1853,8 @@ 'properties': {'distro': 'Ubuntu 10.04 LTS'}, } + self.client.stub_force_sendfile = sendfile + image_data_fixture = r"chunk00000remainder" tmp_image_filepath = '/tmp/rubbish-image' @@ -1879,6 +1882,14 @@ for k, v in fixture.items(): self.assertEquals(v, new_meta[k]) + @test_utils.skip_if(not base_client.SENDFILE_SUPPORTED, + 'sendfile not supported') + def test_add_image_with_image_data_as_file_with_sendfile(self): + self.add_image_with_image_data_as_file(sendfile=True) + + def test_add_image_with_image_data_as_file_without_sendfile(self): + self.add_image_with_image_data_as_file(sendfile=False) + def _add_image_as_iterable(self): fixture = {'name': 'fake public image', 'is_public': True, diff -Nru glance-2012.1/glance/tests/unit/test_notifier.py glance-2012.1+stable~20120608-5462295/glance/tests/unit/test_notifier.py --- glance-2012.1/glance/tests/unit/test_notifier.py 2012-04-03 17:51:59.000000000 +0000 +++ glance-2012.1+stable~20120608-5462295/glance/tests/unit/test_notifier.py 2012-06-08 14:33:14.000000000 +0000 @@ -316,7 +316,7 @@ super(TestQpidNotifier, self).tearDown() def _test_notify(self, priority): - test_msg = json.dumps({'a': 'b'}) + test_msg = {'a': 'b'} self.mock_connection = self.mocker.CreateMock(self.orig_connection) self.mock_session = self.mocker.CreateMock(self.orig_session) diff -Nru glance-2012.1/glance/vcsversion.py glance-2012.1+stable~20120608-5462295/glance/vcsversion.py --- glance-2012.1/glance/vcsversion.py 2012-04-03 17:54:27.000000000 +0000 +++ glance-2012.1+stable~20120608-5462295/glance/vcsversion.py 2012-06-08 14:33:14.000000000 +0000 @@ -1,7 +1,7 @@ # This file is automatically generated by setup.py, So don't edit it. :) version_info = { - 'branch_nick': '(no', - 'revision_id': 'f460a99baee6e37b624c070527f70d4a868b6223', - 'revno': 1419 + 'branch_nick': 'stable/essex', + 'revision_id': 'f6bacea93e8fe4f484f5da8993684af9b4c6b9cc', + 'revno': 1425 } diff -Nru glance-2012.1/glance.egg-info/PKG-INFO glance-2012.1+stable~20120608-5462295/glance.egg-info/PKG-INFO --- glance-2012.1/glance.egg-info/PKG-INFO 2012-04-03 17:54:27.000000000 +0000 +++ glance-2012.1+stable~20120608-5462295/glance.egg-info/PKG-INFO 2012-06-08 14:33:14.000000000 +0000 @@ -1,4 +1,4 @@ -Metadata-Version: 1.0 +Metadata-Version: 1.1 Name: glance Version: 2012.1 Summary: The Glance project provides services for discovering, registering, and retrieving virtual machine images diff -Nru glance-2012.1/PKG-INFO glance-2012.1+stable~20120608-5462295/PKG-INFO --- glance-2012.1/PKG-INFO 2012-04-03 17:54:28.000000000 +0000 +++ glance-2012.1+stable~20120608-5462295/PKG-INFO 2012-06-08 14:33:15.000000000 +0000 @@ -1,4 +1,4 @@ -Metadata-Version: 1.0 +Metadata-Version: 1.1 Name: glance Version: 2012.1 Summary: The Glance project provides services for discovering, registering, and retrieving virtual machine images