openSUSE Commits
Threads by month
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
September 2013
- 1 participants
- 2223 discussions
Hello community,
here is the log from the commit of package python-django-avatar for openSUSE:Factory checked in at 2013-09-29 19:28:31
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-django-avatar (Old)
and /work/SRC/openSUSE:Factory/.python-django-avatar.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-django-avatar"
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-django-avatar/python-django-avatar.changes 2012-03-16 13:22:16.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.python-django-avatar.new/python-django-avatar.changes 2013-09-29 19:28:33.000000000 +0200
@@ -1,0 +2,8 @@
+Fri Sep 27 13:31:55 UTC 2013 - p.drouand(a)gmail.com
+
+- Update to version 2.0
+ + No changelog available
+- Cleanup specfile
+- Replace python-ditribute with python-setuptools BuildRequires
+
+-------------------------------------------------------------------
Old:
----
django-avatar-1.0.5.tar.gz
New:
----
django-avatar-2.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-django-avatar.spec ++++++
--- /var/tmp/diff_new_pack.MDsNTc/_old 2013-09-29 19:28:34.000000000 +0200
+++ /var/tmp/diff_new_pack.MDsNTc/_new 2013-09-29 19:28:34.000000000 +0200
@@ -1,7 +1,7 @@
#
-# spec file for package python-django-avatar (Version 1.0.5)
+# spec file for package python-django-avatar
#
-# Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -17,15 +17,15 @@
Name: python-django-avatar
-Version: 1.0.5
+Version: 2.0
Release: 0
License: BSD-3-Clause
Summary: Django-avatar package
Url: http://github.com/ericflo/django-avatar
Group: Development/Libraries/Python
-Source: django-avatar-%{version}.tar.gz
+Source: https://pypi.python.org/packages/source/d/django-avatar/django-avatar-%{ver…
BuildRequires: python-devel
-BuildRequires: python-distribute
+BuildRequires: python-setuptools
Requires: python-django
BuildRoot: %{_tmppath}/%{name}-%{version}-build
%if 0%{?suse_version} && 0%{?suse_version} <= 1110
++++++ django-avatar-1.0.5.tar.gz -> django-avatar-2.0.tar.gz ++++++
++++ 4949 lines of diff (skipped)
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-commit+help(a)opensuse.org
1
0
Hello community,
here is the log from the commit of package python-dialog for openSUSE:Factory checked in at 2013-09-29 19:28:25
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-dialog (Old)
and /work/SRC/openSUSE:Factory/.python-dialog.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-dialog"
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-dialog/python-dialog.changes 2011-09-23 12:42:33.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.python-dialog.new/python-dialog.changes 2013-09-29 19:28:26.000000000 +0200
@@ -1,0 +2,13 @@
+Fri Sep 27 12:11:12 UTC 2013 - p.drouand(a)gmail.com
+
+- Update to version 2.11
+ + README: I thought I was adding a valuable precision in version 2.09
+ when I changed "LGPL" to "LGPL version 2.1" in the README file (after
+ looking at COPYING), but actually, the terms at the beginning of
+ dialog.py are "either version 2.1 of the License, or (at your option)
+ any later version". Sorry about that, fixed.
+ + demo.py: use "if <test> <expr1> else <expr2>" expressions more
+ often, since they are allowed in Python >= 2.5
+- Refactor specfile and cleanup
+
+-------------------------------------------------------------------
Old:
----
pythondialog-2.7.tar.bz2
New:
----
pythondialog-2.11.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-dialog.spec ++++++
--- /var/tmp/diff_new_pack.3Qtuo8/_old 2013-09-29 19:28:26.000000000 +0200
+++ /var/tmp/diff_new_pack.3Qtuo8/_new 2013-09-29 19:28:26.000000000 +0200
@@ -1,7 +1,7 @@
#
-# spec file for package python-dialog (Version 2.7)
+# spec file for package python-dialog
#
-# Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -15,23 +15,21 @@
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
-# norootforbuild
-
Name: python-dialog
BuildRequires: python-devel
%define tarname pythondialog
Summary: A Python interface to the Unix dialog utility
-Version: 2.7
-Release: 200
-Source0: %{tarname}-%{version}.tar.bz2
+Version: 2.11
+Release: 0
+Source0: https://pypi.python.org/packages/source/p/pythondialog/%{tarname}-%{version…
License: LGPL-2.1+
Group: Development/Libraries/Python
BuildRoot: %{_tmppath}/%{name}-%{version}-build
-Prefix: %{_prefix}
Url: http://pythondialog.sourceforge.net/
-%py_requires
-%if %{?suse_version: %{suse_version} > 1110} %{!?suse_version:1}
+%if 0%{?suse_version} && 0%{?suse_version} <= 1110
+%{!?python_sitelib: %global python_sitelib %(python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")}
+%else
BuildArch: noarch
%endif
@@ -40,30 +38,19 @@
easy, pythonic and as complete as possible way to use the dialog
features from Python code.
-
-
-Authors:
---------
- Peter Astrand <peter(a)cendio.se> (current maintainer)
- Robb Shecter <robb(a)acm.org>
- Sultanbek Tezadov (http://sultan.da.ru/)
- Florent Rougon <flo(a)via.ecp.fr>
-
%prep
%setup -n %{tarname}-%{version}
%build
rm setup.cfg
-CFLAGS="$RPM_OPT_FLAGS" python setup.py build
+python setup.py build
%install
-python setup.py install --prefix=%{_prefix} --root=$RPM_BUILD_ROOT --record-rpm=INSTALLED_FILES
-
-%clean
-rm -rf $RPM_BUILD_ROOT
+python setup.py install --prefix=%{_prefix} --root=%{buildroot}
-%files -f INSTALLED_FILES
+%files
%defattr(-,root,root)
%doc AUTHORS PKG-INFO TODO demo.py COPYING README
+%{python_sitelib}/*
%changelog
++++++ pythondialog-2.7.tar.bz2 -> pythondialog-2.11.tar.bz2 ++++++
++++ 3382 lines of diff (skipped)
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-commit+help(a)opensuse.org
1
0
Hello community,
here is the log from the commit of package pulseaudio for openSUSE:13.1 checked in at 2013-09-29 19:28:18
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:13.1/pulseaudio (Old)
and /work/SRC/openSUSE:13.1/.pulseaudio.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "pulseaudio"
Changes:
--------
--- /work/SRC/openSUSE:13.1/pulseaudio/pulseaudio.changes 2013-09-23 11:06:09.000000000 +0200
+++ /work/SRC/openSUSE:13.1/.pulseaudio.new/pulseaudio.changes 2013-09-29 19:28:19.000000000 +0200
@@ -1,0 +2,15 @@
+Wed Sep 25 17:48:30 UTC 2013 - dimstar(a)opensuse.org
+
+- bnc#840845: Update to git master (PA 5.0 on the way) (6f94c).
+ + Various code cleanups for inclusion of bluez5 stack.
+- No longer pass --enable-bluez5 --disable-bluez4 to configure:
+ master only speaks bluez5.
+
+-------------------------------------------------------------------
+Sat Sep 7 11:30:40 UTC 2013 - dimstar(a)opensuse.org
+
+- Update to git snapshot (rev: gbf9b3)/ bluez5 branch.
+ Note: this is not HEAD of the bluez5 branch, as in local tests,
+ this did fail to load the bluetooth modules.
+
+-------------------------------------------------------------------
Old:
----
pulseaudio-4.0.tar.xz
New:
----
pulseaudio-4.0-187-g6f94c.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ pulseaudio.spec ++++++
--- /var/tmp/diff_new_pack.ZhIB3D/_old 2013-09-29 19:28:19.000000000 +0200
+++ /var/tmp/diff_new_pack.ZhIB3D/_new 2013-09-29 19:28:19.000000000 +0200
@@ -17,8 +17,9 @@
Name: pulseaudio
-Version: 4.0
+Version: 4.0+git
Release: 0
+%define _version 4.0-187-g6f94c
%define drvver 4.0
%define soname 0
%define _udevrulesdir %(pkg-config --variable=udevdir udev)/rules.d
@@ -27,7 +28,8 @@
License: GPL-2.0+ and LGPL-2.1+
Group: System/Sound Daemons
Url: http://pulseaudio.org
-Source: http://www.freedesktop.org/software/pulseaudio/releases/%{name}-%{version}.…
+# git clone of http://cgit.freedesktop.org/pulseaudio/pulseaudio
+Source: %{name}-%{_version}.tar.xz
Source1: default.pa-for-gdm
Source2: setup-pulseaudio
Source3: sysconfig.sound-pulseaudio
@@ -40,7 +42,7 @@
BuildRequires: pkgconfig(systemd)
%endif
BuildRequires: alsa-devel >= 1.0.24
-BuildRequires: bluez-devel >= 4.99
+BuildRequires: bluez-devel >= 5
BuildRequires: doxygen
BuildRequires: fdupes
BuildRequires: gcc-c++
@@ -65,8 +67,6 @@
BuildRequires: translation-update-upstream
BuildRequires: update-desktop-files
BuildRequires: xorg-x11-devel
-# Only needed because we don't (and won't) support building xz tarballs by default... See bnc#697467
-BuildRequires: xz
BuildRequires: pkgconfig(dbus-1) >= 1.4.12
BuildRequires: pkgconfig(gconf-2.0)
BuildRequires: pkgconfig(glib-2.0)
@@ -162,7 +162,7 @@
Summary: Bluetooth support for the PulseAudio sound server
Group: System/Sound Daemons
Requires: %{name} = %{version}
-Requires: bluez >= 4.99
+Requires: bluez >= 5
%description module-bluetooth
pulseaudio is a networked sound server for Linux and other Unix like
@@ -263,14 +263,13 @@
%lang_package
%prep
-%setup -q -T -b0
-translation-update-upstream
+%setup -q -T -b0 -n %{name}-%{_version}
%patch0
%patch1 -p1
%patch2
%build
-autoreconf -fiv
+NOCONFIGURE=1 ./bootstrap.sh
%configure \
--disable-static \
--disable-rpath \
@@ -426,7 +425,9 @@
%{_libdir}/pulse-%{drvver}/modules/module-systemd-login.so
%endif
%{_libdir}/pulse-%{drvver}/modules/module-tunnel-sink.so
+%{_libdir}/pulse-%{drvver}/modules/module-tunnel-sink-new.so
%{_libdir}/pulse-%{drvver}/modules/module-tunnel-source.so
+%{_libdir}/pulse-%{drvver}/modules/module-tunnel-source-new.so
%{_libdir}/pulse-%{drvver}/modules/module-udev-detect.so
%{_libdir}/pulse-%{drvver}/modules/module-virtual-sink.so
%{_libdir}/pulse-%{drvver}/modules/module-virtual-source.so
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-commit+help(a)opensuse.org
1
0
Hello community,
here is the log from the commit of package pulseaudio for openSUSE:Factory checked in at 2013-09-29 19:28:15
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/pulseaudio (Old)
and /work/SRC/openSUSE:Factory/.pulseaudio.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "pulseaudio"
Changes:
--------
--- /work/SRC/openSUSE:Factory/pulseaudio/pulseaudio.changes 2013-09-17 16:09:40.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.pulseaudio.new/pulseaudio.changes 2013-09-29 19:28:16.000000000 +0200
@@ -1,0 +2,15 @@
+Wed Sep 25 17:48:30 UTC 2013 - dimstar(a)opensuse.org
+
+- bnc#840845: Update to git master (PA 5.0 on the way) (6f94c).
+ + Various code cleanups for inclusion of bluez5 stack.
+- No longer pass --enable-bluez5 --disable-bluez4 to configure:
+ master only speaks bluez5.
+
+-------------------------------------------------------------------
+Sat Sep 7 11:30:40 UTC 2013 - dimstar(a)opensuse.org
+
+- Update to git snapshot (rev: gbf9b3)/ bluez5 branch.
+ Note: this is not HEAD of the bluez5 branch, as in local tests,
+ this did fail to load the bluetooth modules.
+
+-------------------------------------------------------------------
Old:
----
pulseaudio-4.0.tar.xz
New:
----
pulseaudio-4.0-187-g6f94c.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ pulseaudio.spec ++++++
--- /var/tmp/diff_new_pack.A7P3Og/_old 2013-09-29 19:28:17.000000000 +0200
+++ /var/tmp/diff_new_pack.A7P3Og/_new 2013-09-29 19:28:17.000000000 +0200
@@ -17,8 +17,9 @@
Name: pulseaudio
-Version: 4.0
+Version: 4.0+git
Release: 0
+%define _version 4.0-187-g6f94c
%define drvver 4.0
%define soname 0
%define _udevrulesdir %(pkg-config --variable=udevdir udev)/rules.d
@@ -27,7 +28,8 @@
License: GPL-2.0+ and LGPL-2.1+
Group: System/Sound Daemons
Url: http://pulseaudio.org
-Source: http://www.freedesktop.org/software/pulseaudio/releases/%{name}-%{version}.…
+# git clone of http://cgit.freedesktop.org/pulseaudio/pulseaudio
+Source: %{name}-%{_version}.tar.xz
Source1: default.pa-for-gdm
Source2: setup-pulseaudio
Source3: sysconfig.sound-pulseaudio
@@ -40,7 +42,7 @@
BuildRequires: pkgconfig(systemd)
%endif
BuildRequires: alsa-devel >= 1.0.24
-BuildRequires: bluez-devel >= 4.99
+BuildRequires: bluez-devel >= 5
BuildRequires: doxygen
BuildRequires: fdupes
BuildRequires: gcc-c++
@@ -65,8 +67,6 @@
BuildRequires: translation-update-upstream
BuildRequires: update-desktop-files
BuildRequires: xorg-x11-devel
-# Only needed because we don't (and won't) support building xz tarballs by default... See bnc#697467
-BuildRequires: xz
BuildRequires: pkgconfig(dbus-1) >= 1.4.12
BuildRequires: pkgconfig(gconf-2.0)
BuildRequires: pkgconfig(glib-2.0)
@@ -162,7 +162,7 @@
Summary: Bluetooth support for the PulseAudio sound server
Group: System/Sound Daemons
Requires: %{name} = %{version}
-Requires: bluez >= 4.99
+Requires: bluez >= 5
%description module-bluetooth
pulseaudio is a networked sound server for Linux and other Unix like
@@ -263,14 +263,13 @@
%lang_package
%prep
-%setup -q -T -b0
-translation-update-upstream
+%setup -q -T -b0 -n %{name}-%{_version}
%patch0
%patch1 -p1
%patch2
%build
-autoreconf -fiv
+NOCONFIGURE=1 ./bootstrap.sh
%configure \
--disable-static \
--disable-rpath \
@@ -426,7 +425,9 @@
%{_libdir}/pulse-%{drvver}/modules/module-systemd-login.so
%endif
%{_libdir}/pulse-%{drvver}/modules/module-tunnel-sink.so
+%{_libdir}/pulse-%{drvver}/modules/module-tunnel-sink-new.so
%{_libdir}/pulse-%{drvver}/modules/module-tunnel-source.so
+%{_libdir}/pulse-%{drvver}/modules/module-tunnel-source-new.so
%{_libdir}/pulse-%{drvver}/modules/module-udev-detect.so
%{_libdir}/pulse-%{drvver}/modules/module-virtual-sink.so
%{_libdir}/pulse-%{drvver}/modules/module-virtual-source.so
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-commit+help(a)opensuse.org
1
0
Hello community,
here is the log from the commit of package poppler for openSUSE:13.1 checked in at 2013-09-29 19:27:49
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:13.1/poppler (Old)
and /work/SRC/openSUSE:13.1/.poppler.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "poppler"
Changes:
--------
--- /work/SRC/openSUSE:13.1/poppler/poppler-qt.changes 2013-09-23 11:05:48.000000000 +0200
+++ /work/SRC/openSUSE:13.1/.poppler.new/poppler-qt.changes 2013-09-29 19:27:50.000000000 +0200
@@ -1,0 +2,11 @@
+Sat Sep 28 15:11:00 UTC 2013 - zaitor(a)opensuse.org
+
+- Update to version 0.24.2:
+ + core:
+ - Windows: Fix CreateFile fails with ERROR_SHARING_VIOLATION
+ (fdo#69597).
+ + utils:
+ - pdfseparate: improve the path building.
+ - pdftocairo: check file opening failure in beginDocument().
+
+-------------------------------------------------------------------
poppler.changes: same change
Old:
----
poppler-0.24.1.tar.xz
New:
----
poppler-0.24.2.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ poppler-qt.spec ++++++
--- /var/tmp/diff_new_pack.M8B96q/_old 2013-09-29 19:27:50.000000000 +0200
+++ /var/tmp/diff_new_pack.M8B96q/_new 2013-09-29 19:27:50.000000000 +0200
@@ -21,7 +21,7 @@
Name: poppler-qt
%define _name poppler
-Version: 0.24.1
+Version: 0.24.2
Release: 0
# Actual version of poppler-data:
%define poppler_data_version 0.4.6
++++++ poppler.spec ++++++
--- /var/tmp/diff_new_pack.M8B96q/_old 2013-09-29 19:27:50.000000000 +0200
+++ /var/tmp/diff_new_pack.M8B96q/_new 2013-09-29 19:27:50.000000000 +0200
@@ -21,7 +21,7 @@
Name: poppler
%define _name poppler
-Version: 0.24.1
+Version: 0.24.2
Release: 0
# Actual version of poppler-data:
%define poppler_data_version 0.4.6
++++++ poppler-0.24.1.tar.xz -> poppler-0.24.2.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/poppler-0.24.1/CMakeLists.txt new/poppler-0.24.2/CMakeLists.txt
--- old/poppler-0.24.1/CMakeLists.txt 2013-08-26 21:58:36.000000000 +0200
+++ new/poppler-0.24.2/CMakeLists.txt 2013-09-27 12:40:52.000000000 +0200
@@ -18,7 +18,7 @@
set(POPPLER_MAJOR_VERSION "0")
set(POPPLER_MINOR_VERSION "24")
-set(POPPLER_MICRO_VERSION "1")
+set(POPPLER_MICRO_VERSION "2")
set(POPPLER_VERSION "${POPPLER_MAJOR_VERSION}.${POPPLER_MINOR_VERSION}.${POPPLER_MICRO_VERSION}")
# command line switches
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/poppler-0.24.1/ChangeLog new/poppler-0.24.2/ChangeLog
--- old/poppler-0.24.1/ChangeLog 2013-08-26 22:23:20.000000000 +0200
+++ new/poppler-0.24.2/ChangeLog 2013-09-27 12:51:04.000000000 +0200
@@ -1,3 +1,74 @@
+commit 06dabe1eed912e5f5c96fe9f371ab459516e5a99
+Author: Albert Astals Cid <aacid(a)kde.org>
+Date: Fri Sep 27 12:41:23 2013 +0200
+
+ 0.24.2
+
+ CMakeLists.txt | 2 +-
+ NEWS | 8 ++++++++
+ configure.ac | 2 +-
+ cpp/Doxyfile | 2 +-
+ qt4/src/Doxyfile | 2 +-
+ qt5/src/Doxyfile | 2 +-
+ 6 files changed, 13 insertions(+), 5 deletions(-)
+
+commit 78141da189c42a04b6a303767284de755a4a2d4d
+Author: Albert Astals Cid <aacid(a)kde.org>
+Date: Fri Sep 27 12:39:00 2013 +0200
+
+ Update copyrights
+
+ utils/pdfseparate.cc | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit dc344b410f49410174ee902b7649ebd8c2cb0fa2
+Author: Lu Wang <coolwanglu(a)gmail.com>
+Date: Sat Sep 21 10:37:30 2013 +0200
+
+ pdftocairo: check file opening failure in beginDocument()
+
+ utils/pdftocairo.cc | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+commit 1e612d331b79dabec66ad241d7ffe66674a10bc4
+Author: Thomas Freitag <Thomas.Freitag(a)alfa.de>
+Date: Sat Sep 21 10:10:16 2013 +0200
+
+ Windows: Fix CreateFile fails with ERROR_SHARING_VIOLATION
+
+ Bug #69597
+
+ goo/gfile.cc | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+commit b8682d868ddf7f741e93b791588af0932893f95c
+Author: Pino Toscano <pino(a)kde.org>
+Date: Mon Sep 16 19:46:55 2013 +0200
+
+ pdfseparate: improve the path building
+
+ Make use of snprintf to limit the output to the pathName buffer;
+ while I'm there, expand its size to 4096 (might help longer paths),
+ although a better fix would be dynamically allocate its length
+ (and/or using GooString, maybe).
+
+ utils/pdfseparate.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 563da2d375c003478d398897796ecbf45ce03482
+Author: Albert Astals Cid <aacid(a)kde.org>
+Date: Mon Aug 26 22:33:10 2013 +0200
+
+ 0.24.1
+
+ CMakeLists.txt | 2 +-
+ NEWS | 23 +++++++++++++++++++++++
+ configure.ac | 2 +-
+ cpp/Doxyfile | 2 +-
+ qt4/src/Doxyfile | 2 +-
+ qt5/src/Doxyfile | 2 +-
+ 6 files changed, 28 insertions(+), 5 deletions(-)
+
commit 2c73f1ea9116172692d8350cb7adf1b5376f795c
Author: Albert Astals Cid <aacid(a)kde.org>
Date: Mon Aug 26 21:50:51 2013 +0200
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/poppler-0.24.1/NEWS new/poppler-0.24.2/NEWS
--- old/poppler-0.24.1/NEWS 2013-08-26 21:54:18.000000000 +0200
+++ new/poppler-0.24.2/NEWS 2013-09-27 12:40:17.000000000 +0200
@@ -1,3 +1,11 @@
+Release 0.24.2
+ core:
+ * Windows: Fix CreateFile fails with ERROR_SHARING_VIOLATION. Bug #69597
+
+ utils:
+ * pdfseparate: improve the path building
+ * pdftocairo: check file opening failure in beginDocument()
+
Release 0.24.1
core:
* SplashOutputDev: use getRGBLine images if available. Bug #66928
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/poppler-0.24.1/configure new/poppler-0.24.2/configure
--- old/poppler-0.24.1/configure 2013-08-26 22:00:24.000000000 +0200
+++ new/poppler-0.24.2/configure 2013-09-27 12:42:18.000000000 +0200
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for poppler 0.24.1.
+# Generated by GNU Autoconf 2.69 for poppler 0.24.2.
#
# Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=poppler>.
#
@@ -591,8 +591,8 @@
# Identity of this package.
PACKAGE_NAME='poppler'
PACKAGE_TARNAME='poppler'
-PACKAGE_VERSION='0.24.1'
-PACKAGE_STRING='poppler 0.24.1'
+PACKAGE_VERSION='0.24.2'
+PACKAGE_STRING='poppler 0.24.2'
PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=poppler'
PACKAGE_URL=''
@@ -1526,7 +1526,7 @@
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures poppler 0.24.1 to adapt to many kinds of systems.
+\`configure' configures poppler 0.24.2 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1600,7 +1600,7 @@
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of poppler 0.24.1:";;
+ short | recursive ) echo "Configuration of poppler 0.24.2:";;
esac
cat <<\_ACEOF
@@ -1813,7 +1813,7 @@
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-poppler configure 0.24.1
+poppler configure 0.24.2
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2507,7 +2507,7 @@
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by poppler $as_me 0.24.1, which was
+It was created by poppler $as_me 0.24.2, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -3371,7 +3371,7 @@
# Define the identity of the package.
PACKAGE='poppler'
- VERSION='0.24.1'
+ VERSION='0.24.2'
cat >>confdefs.h <<_ACEOF
@@ -17684,7 +17684,7 @@
cat >>confdefs.h <<_ACEOF
-#define POPPLER_VERSION "0.24.1"
+#define POPPLER_VERSION "0.24.2"
_ACEOF
@@ -24773,9 +24773,9 @@
POPPLER_MINOR_VERSION=24
-POPPLER_MICRO_VERSION=1
+POPPLER_MICRO_VERSION=2
-POPPLER_VERSION=0.24.1
+POPPLER_VERSION=0.24.2
ac_config_files="$ac_config_files Makefile goo/Makefile fofi/Makefile splash/Makefile poppler/Makefile utils/Makefile glib/Makefile glib/poppler-features.h glib/reference/Makefile glib/reference/version.xml glib/demo/Makefile test/Makefile qt4/Makefile qt4/src/Makefile qt4/tests/Makefile qt4/demos/Makefile qt5/Makefile qt5/src/Makefile qt5/tests/Makefile qt5/demos/Makefile cpp/Makefile cpp/poppler-version.h cpp/tests/Makefile poppler.pc poppler-uninstalled.pc poppler-cairo.pc poppler-cairo-uninstalled.pc poppler-splash.pc poppler-splash-uninstalled.pc poppler-glib.pc poppler-glib-uninstalled.pc poppler-qt4.pc poppler-qt4-uninstalled.pc poppler-qt5.pc poppler-qt5-uninstalled.pc poppler-cpp.pc poppler-cpp-uninstalled.pc"
@@ -25423,7 +25423,7 @@
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by poppler $as_me 0.24.1, which was
+This file was extended by poppler $as_me 0.24.2, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -25489,7 +25489,7 @@
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-poppler config.status 0.24.1
+poppler config.status 0.24.2
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/poppler-0.24.1/configure.ac new/poppler-0.24.2/configure.ac
--- old/poppler-0.24.1/configure.ac 2013-08-26 21:58:31.000000000 +0200
+++ new/poppler-0.24.2/configure.ac 2013-09-27 12:40:27.000000000 +0200
@@ -1,6 +1,6 @@
m4_define([poppler_version_major],[0])
m4_define([poppler_version_minor],[24])
-m4_define([poppler_version_micro],[1])
+m4_define([poppler_version_micro],[2])
m4_define([poppler_version],[poppler_version_major.poppler_version_minor.poppler_version_micro])
AC_PREREQ(2.59)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/poppler-0.24.1/cpp/poppler-version.h new/poppler-0.24.2/cpp/poppler-version.h
--- old/poppler-0.24.1/cpp/poppler-version.h 2013-08-26 22:00:38.000000000 +0200
+++ new/poppler-0.24.2/cpp/poppler-version.h 2013-09-27 12:42:28.000000000 +0200
@@ -21,10 +21,10 @@
#include "poppler-global.h"
-#define POPPLER_VERSION "0.24.1"
+#define POPPLER_VERSION "0.24.2"
#define POPPLER_VERSION_MAJOR 0
#define POPPLER_VERSION_MINOR 24
-#define POPPLER_VERSION_MICRO 1
+#define POPPLER_VERSION_MICRO 2
namespace poppler
{
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/poppler-0.24.1/glib/Poppler-0.18.gir new/poppler-0.24.2/glib/Poppler-0.18.gir
--- old/poppler-0.24.1/glib/Poppler-0.18.gir 2013-08-26 22:01:24.000000000 +0200
+++ new/poppler-0.24.2/glib/Poppler-0.18.gir 2013-09-27 12:43:18.000000000 +0200
@@ -3815,7 +3815,7 @@
<type name="gint" c:type="gint"/>
</constant>
<constant name="MICRO_VERSION"
- value="1"
+ value="2"
c:type="POPPLER_MICRO_VERSION"
version="0.12">
<doc xml:space="preserve">The micro version number of the poppler header files (e.g. in poppler version
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/poppler-0.24.1/glib/reference/html/index.html new/poppler-0.24.2/glib/reference/html/index.html
--- old/poppler-0.24.1/glib/reference/html/index.html 2013-08-26 22:23:22.000000000 +0200
+++ new/poppler-0.24.2/glib/reference/html/index.html 2013-09-27 12:51:07.000000000 +0200
@@ -15,7 +15,7 @@
<div>
<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">Poppler Reference Manual</p></th></tr></table></div>
<div><p class="releaseinfo">
- for Poppler 0.24.1
+ for Poppler 0.24.2
</p></div>
</div>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/poppler-0.24.1/glib/reference/html/poppler-Version-and-Features-Information.html new/poppler-0.24.2/glib/reference/html/poppler-Version-and-Features-Information.html
--- old/poppler-0.24.1/glib/reference/html/poppler-Version-and-Features-Information.html 2013-08-26 22:23:22.000000000 +0200
+++ new/poppler-0.24.2/glib/reference/html/poppler-Version-and-Features-Information.html 2013-09-27 12:51:07.000000000 +0200
@@ -93,7 +93,7 @@
<hr>
<div class="refsect2">
<a name="POPPLER-MICRO-VERSION:CAPS"></a><h3>POPPLER_MICRO_VERSION</h3>
-<pre class="programlisting">#define POPPLER_MICRO_VERSION (1)
+<pre class="programlisting">#define POPPLER_MICRO_VERSION (2)
</pre>
<p>
The micro version number of the poppler header files (e.g. in poppler version
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/poppler-0.24.1/glib/reference/version.xml new/poppler-0.24.2/glib/reference/version.xml
--- old/poppler-0.24.1/glib/reference/version.xml 2013-08-26 22:00:38.000000000 +0200
+++ new/poppler-0.24.2/glib/reference/version.xml 2013-09-27 12:42:27.000000000 +0200
@@ -1 +1 @@
-0.24.1
+0.24.2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/poppler-0.24.1/goo/gfile.cc new/poppler-0.24.2/goo/gfile.cc
--- old/poppler-0.24.1/goo/gfile.cc 2013-08-17 01:20:41.000000000 +0200
+++ new/poppler-0.24.2/goo/gfile.cc 2013-09-21 10:11:21.000000000 +0200
@@ -24,6 +24,7 @@
// Copyright (C) 2013 Adam Reichold <adamreichold(a)myopera.com>
// Copyright (C) 2013 Adrian Johnson <ajohnson(a)redneon.com>
// Copyright (C) 2013 Peter Breitenlohner <peb(a)mppmu.mpg.de>
+// Copyright (C) 2013 Thomas Freitag <Thomas.Freitag(a)alfa.de>
//
// To see a description of the changes please see the Changelog file that
// came with your tarball or type make ChangeLog if you are building from git
@@ -621,7 +622,7 @@
GooFile* GooFile::open(const GooString *fileName) {
HANDLE handle = CreateFile(fileName->getCString(),
GENERIC_READ,
- FILE_SHARE_READ,
+ FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL);
@@ -632,7 +633,7 @@
GooFile* GooFile::open(const wchar_t *fileName) {
HANDLE handle = CreateFileW(fileName,
GENERIC_READ,
- FILE_SHARE_READ,
+ FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/poppler-0.24.1/utils/pdfseparate.cc new/poppler-0.24.2/utils/pdfseparate.cc
--- old/poppler-0.24.1/utils/pdfseparate.cc 2013-08-17 01:20:41.000000000 +0200
+++ new/poppler-0.24.2/utils/pdfseparate.cc 2013-09-27 12:38:43.000000000 +0200
@@ -6,6 +6,7 @@
//
// Copyright (C) 2011, 2012 Thomas Freitag <Thomas.Freitag(a)alfa.de>
// Copyright (C) 2012 Albert Astals Cid <aacid(a)kde.org>
+// Copyright (C) 2013 Pino Toscano <pino(a)kde.org>
//
//========================================================================
#include "config.h"
@@ -44,7 +45,7 @@
};
bool extractPages (const char *srcFileName, const char *destFileName) {
- char pathName[1024];
+ char pathName[4096];
GooString *gfileName = new GooString (srcFileName);
PDFDoc *doc = new PDFDoc (gfileName, NULL, NULL, NULL);
@@ -66,7 +67,7 @@
return false;
}
for (int pageNo = firstPage; pageNo <= lastPage; pageNo++) {
- sprintf (pathName, destFileName, pageNo);
+ snprintf (pathName, sizeof (pathName) - 1, destFileName, pageNo);
GooString *gpageName = new GooString (pathName);
int errCode = doc->savePageAs(gpageName, pageNo);
if ( errCode != errNone) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/poppler-0.24.1/utils/pdftocairo.cc new/poppler-0.24.2/utils/pdftocairo.cc
--- old/poppler-0.24.1/utils/pdftocairo.cc 2013-08-17 01:20:41.000000000 +0200
+++ new/poppler-0.24.2/utils/pdftocairo.cc 2013-09-21 10:38:08.000000000 +0200
@@ -26,6 +26,7 @@
// Copyright (C) 2011 Thomas Freitag <Thomas.Freitag(a)alfa.de>
// Copyright (C) 2011 Carlos Garcia Campos <carlosgc(a)gnome.org>
// Copyright (C) 2012 Koji Otani <sho(a)bbr.jp>
+// Copyright (C) 2013 Lu Wang <coolwanglu(a)gmail.com>
//
// To see a description of the changes please see the Changelog file that
// came with your tarball or type make ChangeLog if you are building from git
@@ -484,7 +485,13 @@
if (outputFileName->cmp("fd://0") == 0)
output_file = stdout;
else
+ {
output_file = fopen(outputFileName->getCString(), "wb");
+ if (!output_file) {
+ fprintf(stderr, "Error opening output file %s\n", outputFileName->getCString());
+ exit(2);
+ }
+ }
if (ps || eps) {
#if CAIRO_HAS_PS_SURFACE
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-commit+help(a)opensuse.org
1
0
Hello community,
here is the log from the commit of package poppler for openSUSE:Factory checked in at 2013-09-29 19:27:46
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/poppler (Old)
and /work/SRC/openSUSE:Factory/.poppler.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "poppler"
Changes:
--------
--- /work/SRC/openSUSE:Factory/poppler/poppler-qt.changes 2013-09-09 10:56:58.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.poppler.new/poppler-qt.changes 2013-09-29 19:27:47.000000000 +0200
@@ -1,0 +2,11 @@
+Sat Sep 28 15:11:00 UTC 2013 - zaitor(a)opensuse.org
+
+- Update to version 0.24.2:
+ + core:
+ - Windows: Fix CreateFile fails with ERROR_SHARING_VIOLATION
+ (fdo#69597).
+ + utils:
+ - pdfseparate: improve the path building.
+ - pdftocairo: check file opening failure in beginDocument().
+
+-------------------------------------------------------------------
poppler.changes: same change
Old:
----
poppler-0.24.1.tar.xz
New:
----
poppler-0.24.2.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ poppler-qt.spec ++++++
--- /var/tmp/diff_new_pack.dMedKZ/_old 2013-09-29 19:27:48.000000000 +0200
+++ /var/tmp/diff_new_pack.dMedKZ/_new 2013-09-29 19:27:48.000000000 +0200
@@ -21,7 +21,7 @@
Name: poppler-qt
%define _name poppler
-Version: 0.24.1
+Version: 0.24.2
Release: 0
# Actual version of poppler-data:
%define poppler_data_version 0.4.6
++++++ poppler.spec ++++++
--- /var/tmp/diff_new_pack.dMedKZ/_old 2013-09-29 19:27:48.000000000 +0200
+++ /var/tmp/diff_new_pack.dMedKZ/_new 2013-09-29 19:27:48.000000000 +0200
@@ -21,7 +21,7 @@
Name: poppler
%define _name poppler
-Version: 0.24.1
+Version: 0.24.2
Release: 0
# Actual version of poppler-data:
%define poppler_data_version 0.4.6
++++++ poppler-0.24.1.tar.xz -> poppler-0.24.2.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/poppler-0.24.1/CMakeLists.txt new/poppler-0.24.2/CMakeLists.txt
--- old/poppler-0.24.1/CMakeLists.txt 2013-08-26 21:58:36.000000000 +0200
+++ new/poppler-0.24.2/CMakeLists.txt 2013-09-27 12:40:52.000000000 +0200
@@ -18,7 +18,7 @@
set(POPPLER_MAJOR_VERSION "0")
set(POPPLER_MINOR_VERSION "24")
-set(POPPLER_MICRO_VERSION "1")
+set(POPPLER_MICRO_VERSION "2")
set(POPPLER_VERSION "${POPPLER_MAJOR_VERSION}.${POPPLER_MINOR_VERSION}.${POPPLER_MICRO_VERSION}")
# command line switches
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/poppler-0.24.1/ChangeLog new/poppler-0.24.2/ChangeLog
--- old/poppler-0.24.1/ChangeLog 2013-08-26 22:23:20.000000000 +0200
+++ new/poppler-0.24.2/ChangeLog 2013-09-27 12:51:04.000000000 +0200
@@ -1,3 +1,74 @@
+commit 06dabe1eed912e5f5c96fe9f371ab459516e5a99
+Author: Albert Astals Cid <aacid(a)kde.org>
+Date: Fri Sep 27 12:41:23 2013 +0200
+
+ 0.24.2
+
+ CMakeLists.txt | 2 +-
+ NEWS | 8 ++++++++
+ configure.ac | 2 +-
+ cpp/Doxyfile | 2 +-
+ qt4/src/Doxyfile | 2 +-
+ qt5/src/Doxyfile | 2 +-
+ 6 files changed, 13 insertions(+), 5 deletions(-)
+
+commit 78141da189c42a04b6a303767284de755a4a2d4d
+Author: Albert Astals Cid <aacid(a)kde.org>
+Date: Fri Sep 27 12:39:00 2013 +0200
+
+ Update copyrights
+
+ utils/pdfseparate.cc | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit dc344b410f49410174ee902b7649ebd8c2cb0fa2
+Author: Lu Wang <coolwanglu(a)gmail.com>
+Date: Sat Sep 21 10:37:30 2013 +0200
+
+ pdftocairo: check file opening failure in beginDocument()
+
+ utils/pdftocairo.cc | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+commit 1e612d331b79dabec66ad241d7ffe66674a10bc4
+Author: Thomas Freitag <Thomas.Freitag(a)alfa.de>
+Date: Sat Sep 21 10:10:16 2013 +0200
+
+ Windows: Fix CreateFile fails with ERROR_SHARING_VIOLATION
+
+ Bug #69597
+
+ goo/gfile.cc | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+commit b8682d868ddf7f741e93b791588af0932893f95c
+Author: Pino Toscano <pino(a)kde.org>
+Date: Mon Sep 16 19:46:55 2013 +0200
+
+ pdfseparate: improve the path building
+
+ Make use of snprintf to limit the output to the pathName buffer;
+ while I'm there, expand its size to 4096 (might help longer paths),
+ although a better fix would be dynamically allocate its length
+ (and/or using GooString, maybe).
+
+ utils/pdfseparate.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 563da2d375c003478d398897796ecbf45ce03482
+Author: Albert Astals Cid <aacid(a)kde.org>
+Date: Mon Aug 26 22:33:10 2013 +0200
+
+ 0.24.1
+
+ CMakeLists.txt | 2 +-
+ NEWS | 23 +++++++++++++++++++++++
+ configure.ac | 2 +-
+ cpp/Doxyfile | 2 +-
+ qt4/src/Doxyfile | 2 +-
+ qt5/src/Doxyfile | 2 +-
+ 6 files changed, 28 insertions(+), 5 deletions(-)
+
commit 2c73f1ea9116172692d8350cb7adf1b5376f795c
Author: Albert Astals Cid <aacid(a)kde.org>
Date: Mon Aug 26 21:50:51 2013 +0200
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/poppler-0.24.1/NEWS new/poppler-0.24.2/NEWS
--- old/poppler-0.24.1/NEWS 2013-08-26 21:54:18.000000000 +0200
+++ new/poppler-0.24.2/NEWS 2013-09-27 12:40:17.000000000 +0200
@@ -1,3 +1,11 @@
+Release 0.24.2
+ core:
+ * Windows: Fix CreateFile fails with ERROR_SHARING_VIOLATION. Bug #69597
+
+ utils:
+ * pdfseparate: improve the path building
+ * pdftocairo: check file opening failure in beginDocument()
+
Release 0.24.1
core:
* SplashOutputDev: use getRGBLine images if available. Bug #66928
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/poppler-0.24.1/configure new/poppler-0.24.2/configure
--- old/poppler-0.24.1/configure 2013-08-26 22:00:24.000000000 +0200
+++ new/poppler-0.24.2/configure 2013-09-27 12:42:18.000000000 +0200
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for poppler 0.24.1.
+# Generated by GNU Autoconf 2.69 for poppler 0.24.2.
#
# Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=poppler>.
#
@@ -591,8 +591,8 @@
# Identity of this package.
PACKAGE_NAME='poppler'
PACKAGE_TARNAME='poppler'
-PACKAGE_VERSION='0.24.1'
-PACKAGE_STRING='poppler 0.24.1'
+PACKAGE_VERSION='0.24.2'
+PACKAGE_STRING='poppler 0.24.2'
PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=poppler'
PACKAGE_URL=''
@@ -1526,7 +1526,7 @@
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures poppler 0.24.1 to adapt to many kinds of systems.
+\`configure' configures poppler 0.24.2 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1600,7 +1600,7 @@
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of poppler 0.24.1:";;
+ short | recursive ) echo "Configuration of poppler 0.24.2:";;
esac
cat <<\_ACEOF
@@ -1813,7 +1813,7 @@
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-poppler configure 0.24.1
+poppler configure 0.24.2
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2507,7 +2507,7 @@
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by poppler $as_me 0.24.1, which was
+It was created by poppler $as_me 0.24.2, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -3371,7 +3371,7 @@
# Define the identity of the package.
PACKAGE='poppler'
- VERSION='0.24.1'
+ VERSION='0.24.2'
cat >>confdefs.h <<_ACEOF
@@ -17684,7 +17684,7 @@
cat >>confdefs.h <<_ACEOF
-#define POPPLER_VERSION "0.24.1"
+#define POPPLER_VERSION "0.24.2"
_ACEOF
@@ -24773,9 +24773,9 @@
POPPLER_MINOR_VERSION=24
-POPPLER_MICRO_VERSION=1
+POPPLER_MICRO_VERSION=2
-POPPLER_VERSION=0.24.1
+POPPLER_VERSION=0.24.2
ac_config_files="$ac_config_files Makefile goo/Makefile fofi/Makefile splash/Makefile poppler/Makefile utils/Makefile glib/Makefile glib/poppler-features.h glib/reference/Makefile glib/reference/version.xml glib/demo/Makefile test/Makefile qt4/Makefile qt4/src/Makefile qt4/tests/Makefile qt4/demos/Makefile qt5/Makefile qt5/src/Makefile qt5/tests/Makefile qt5/demos/Makefile cpp/Makefile cpp/poppler-version.h cpp/tests/Makefile poppler.pc poppler-uninstalled.pc poppler-cairo.pc poppler-cairo-uninstalled.pc poppler-splash.pc poppler-splash-uninstalled.pc poppler-glib.pc poppler-glib-uninstalled.pc poppler-qt4.pc poppler-qt4-uninstalled.pc poppler-qt5.pc poppler-qt5-uninstalled.pc poppler-cpp.pc poppler-cpp-uninstalled.pc"
@@ -25423,7 +25423,7 @@
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by poppler $as_me 0.24.1, which was
+This file was extended by poppler $as_me 0.24.2, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -25489,7 +25489,7 @@
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-poppler config.status 0.24.1
+poppler config.status 0.24.2
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/poppler-0.24.1/configure.ac new/poppler-0.24.2/configure.ac
--- old/poppler-0.24.1/configure.ac 2013-08-26 21:58:31.000000000 +0200
+++ new/poppler-0.24.2/configure.ac 2013-09-27 12:40:27.000000000 +0200
@@ -1,6 +1,6 @@
m4_define([poppler_version_major],[0])
m4_define([poppler_version_minor],[24])
-m4_define([poppler_version_micro],[1])
+m4_define([poppler_version_micro],[2])
m4_define([poppler_version],[poppler_version_major.poppler_version_minor.poppler_version_micro])
AC_PREREQ(2.59)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/poppler-0.24.1/cpp/poppler-version.h new/poppler-0.24.2/cpp/poppler-version.h
--- old/poppler-0.24.1/cpp/poppler-version.h 2013-08-26 22:00:38.000000000 +0200
+++ new/poppler-0.24.2/cpp/poppler-version.h 2013-09-27 12:42:28.000000000 +0200
@@ -21,10 +21,10 @@
#include "poppler-global.h"
-#define POPPLER_VERSION "0.24.1"
+#define POPPLER_VERSION "0.24.2"
#define POPPLER_VERSION_MAJOR 0
#define POPPLER_VERSION_MINOR 24
-#define POPPLER_VERSION_MICRO 1
+#define POPPLER_VERSION_MICRO 2
namespace poppler
{
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/poppler-0.24.1/glib/Poppler-0.18.gir new/poppler-0.24.2/glib/Poppler-0.18.gir
--- old/poppler-0.24.1/glib/Poppler-0.18.gir 2013-08-26 22:01:24.000000000 +0200
+++ new/poppler-0.24.2/glib/Poppler-0.18.gir 2013-09-27 12:43:18.000000000 +0200
@@ -3815,7 +3815,7 @@
<type name="gint" c:type="gint"/>
</constant>
<constant name="MICRO_VERSION"
- value="1"
+ value="2"
c:type="POPPLER_MICRO_VERSION"
version="0.12">
<doc xml:space="preserve">The micro version number of the poppler header files (e.g. in poppler version
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/poppler-0.24.1/glib/reference/html/index.html new/poppler-0.24.2/glib/reference/html/index.html
--- old/poppler-0.24.1/glib/reference/html/index.html 2013-08-26 22:23:22.000000000 +0200
+++ new/poppler-0.24.2/glib/reference/html/index.html 2013-09-27 12:51:07.000000000 +0200
@@ -15,7 +15,7 @@
<div>
<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">Poppler Reference Manual</p></th></tr></table></div>
<div><p class="releaseinfo">
- for Poppler 0.24.1
+ for Poppler 0.24.2
</p></div>
</div>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/poppler-0.24.1/glib/reference/html/poppler-Version-and-Features-Information.html new/poppler-0.24.2/glib/reference/html/poppler-Version-and-Features-Information.html
--- old/poppler-0.24.1/glib/reference/html/poppler-Version-and-Features-Information.html 2013-08-26 22:23:22.000000000 +0200
+++ new/poppler-0.24.2/glib/reference/html/poppler-Version-and-Features-Information.html 2013-09-27 12:51:07.000000000 +0200
@@ -93,7 +93,7 @@
<hr>
<div class="refsect2">
<a name="POPPLER-MICRO-VERSION:CAPS"></a><h3>POPPLER_MICRO_VERSION</h3>
-<pre class="programlisting">#define POPPLER_MICRO_VERSION (1)
+<pre class="programlisting">#define POPPLER_MICRO_VERSION (2)
</pre>
<p>
The micro version number of the poppler header files (e.g. in poppler version
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/poppler-0.24.1/glib/reference/version.xml new/poppler-0.24.2/glib/reference/version.xml
--- old/poppler-0.24.1/glib/reference/version.xml 2013-08-26 22:00:38.000000000 +0200
+++ new/poppler-0.24.2/glib/reference/version.xml 2013-09-27 12:42:27.000000000 +0200
@@ -1 +1 @@
-0.24.1
+0.24.2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/poppler-0.24.1/goo/gfile.cc new/poppler-0.24.2/goo/gfile.cc
--- old/poppler-0.24.1/goo/gfile.cc 2013-08-17 01:20:41.000000000 +0200
+++ new/poppler-0.24.2/goo/gfile.cc 2013-09-21 10:11:21.000000000 +0200
@@ -24,6 +24,7 @@
// Copyright (C) 2013 Adam Reichold <adamreichold(a)myopera.com>
// Copyright (C) 2013 Adrian Johnson <ajohnson(a)redneon.com>
// Copyright (C) 2013 Peter Breitenlohner <peb(a)mppmu.mpg.de>
+// Copyright (C) 2013 Thomas Freitag <Thomas.Freitag(a)alfa.de>
//
// To see a description of the changes please see the Changelog file that
// came with your tarball or type make ChangeLog if you are building from git
@@ -621,7 +622,7 @@
GooFile* GooFile::open(const GooString *fileName) {
HANDLE handle = CreateFile(fileName->getCString(),
GENERIC_READ,
- FILE_SHARE_READ,
+ FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL);
@@ -632,7 +633,7 @@
GooFile* GooFile::open(const wchar_t *fileName) {
HANDLE handle = CreateFileW(fileName,
GENERIC_READ,
- FILE_SHARE_READ,
+ FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/poppler-0.24.1/utils/pdfseparate.cc new/poppler-0.24.2/utils/pdfseparate.cc
--- old/poppler-0.24.1/utils/pdfseparate.cc 2013-08-17 01:20:41.000000000 +0200
+++ new/poppler-0.24.2/utils/pdfseparate.cc 2013-09-27 12:38:43.000000000 +0200
@@ -6,6 +6,7 @@
//
// Copyright (C) 2011, 2012 Thomas Freitag <Thomas.Freitag(a)alfa.de>
// Copyright (C) 2012 Albert Astals Cid <aacid(a)kde.org>
+// Copyright (C) 2013 Pino Toscano <pino(a)kde.org>
//
//========================================================================
#include "config.h"
@@ -44,7 +45,7 @@
};
bool extractPages (const char *srcFileName, const char *destFileName) {
- char pathName[1024];
+ char pathName[4096];
GooString *gfileName = new GooString (srcFileName);
PDFDoc *doc = new PDFDoc (gfileName, NULL, NULL, NULL);
@@ -66,7 +67,7 @@
return false;
}
for (int pageNo = firstPage; pageNo <= lastPage; pageNo++) {
- sprintf (pathName, destFileName, pageNo);
+ snprintf (pathName, sizeof (pathName) - 1, destFileName, pageNo);
GooString *gpageName = new GooString (pathName);
int errCode = doc->savePageAs(gpageName, pageNo);
if ( errCode != errNone) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/poppler-0.24.1/utils/pdftocairo.cc new/poppler-0.24.2/utils/pdftocairo.cc
--- old/poppler-0.24.1/utils/pdftocairo.cc 2013-08-17 01:20:41.000000000 +0200
+++ new/poppler-0.24.2/utils/pdftocairo.cc 2013-09-21 10:38:08.000000000 +0200
@@ -26,6 +26,7 @@
// Copyright (C) 2011 Thomas Freitag <Thomas.Freitag(a)alfa.de>
// Copyright (C) 2011 Carlos Garcia Campos <carlosgc(a)gnome.org>
// Copyright (C) 2012 Koji Otani <sho(a)bbr.jp>
+// Copyright (C) 2013 Lu Wang <coolwanglu(a)gmail.com>
//
// To see a description of the changes please see the Changelog file that
// came with your tarball or type make ChangeLog if you are building from git
@@ -484,7 +485,13 @@
if (outputFileName->cmp("fd://0") == 0)
output_file = stdout;
else
+ {
output_file = fopen(outputFileName->getCString(), "wb");
+ if (!output_file) {
+ fprintf(stderr, "Error opening output file %s\n", outputFileName->getCString());
+ exit(2);
+ }
+ }
if (ps || eps) {
#if CAIRO_HAS_PS_SURFACE
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-commit+help(a)opensuse.org
1
0
Hello community,
here is the log from the commit of package openstack-glance for openSUSE:13.1 checked in at 2013-09-29 19:27:29
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:13.1/openstack-glance (Old)
and /work/SRC/openSUSE:13.1/.openstack-glance.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "openstack-glance"
Changes:
--------
--- /work/SRC/openSUSE:13.1/openstack-glance/openstack-glance.changes 2013-09-23 11:02:33.000000000 +0200
+++ /work/SRC/openSUSE:13.1/.openstack-glance.new/openstack-glance.changes 2013-09-29 19:27:45.000000000 +0200
@@ -1,0 +2,38 @@
+Thu Sep 26 10:18:29 UTC 2013 - opensuse-cloud(a)opensuse.org
+
+- Update to version 2013.2.a179.g8c31de4:
+ + Require oslo.config 1.2.0 final
+ + Cache cleaner wrongly deletes cache for non invalid images
+
+-------------------------------------------------------------------
+Wed Sep 25 00:12:16 UTC 2013 - opensuse-cloud(a)opensuse.org
+
+- Update to version 2013.2.a175.g4efd136:
+ + Ensure prop protections are read/enforced in order
+ + Disallow access/modify members of deleted image
+ + Convert location meta data from pickle to string.
+
+-------------------------------------------------------------------
+Tue Sep 24 00:31:45 UTC 2013 - opensuse-cloud(a)opensuse.org
+
+- Update to version 2013.2.a169.g4f4b478:
+ + Funtional Tests should call glance.db.get_api
+
+-------------------------------------------------------------------
+Fri Sep 20 23:48:31 UTC 2013 - opensuse-cloud(a)opensuse.org
+
+- Update to version 2013.2.a168.g4954ea5:
+ + Adding encryption support for image multiple locations
+
+-------------------------------------------------------------------
+Thu Sep 19 00:01:32 UTC 2013 - opensuse-cloud(a)opensuse.org
+
+- Update to version 2013.2.a166.g26a47e7:
+ + Respond with 410 after upload if image was deleted
+
+-------------------------------------------------------------------
+Wed Sep 18 08:54:08 UTC 2013 - dmueller(a)suse.com
+
+- fix requires
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ openstack-glance-doc.spec ++++++
--- /var/tmp/diff_new_pack.8iZDPX/_old 2013-09-29 19:27:45.000000000 +0200
+++ /var/tmp/diff_new_pack.8iZDPX/_new 2013-09-29 19:27:45.000000000 +0200
@@ -19,7 +19,7 @@
%define component glance
Name: openstack-%{component}-doc
-Version: 2013.2.a165.g4164949
+Version: 2013.2.a179.g8c31de4
Release: 0
Summary: OpenStack Image Service (Glance) - Documentation
License: Apache-2.0
@@ -48,7 +48,7 @@
This package contains documentation files for openstack-glance.
%prep
-%setup -q -n glance-2013.2.a165.g4164949
+%setup -q -n glance-2013.2.a179.g8c31de4
%openstack_cleanup_prep
%build
++++++ openstack-glance.spec ++++++
--- /var/tmp/diff_new_pack.8iZDPX/_old 2013-09-29 19:27:45.000000000 +0200
+++ /var/tmp/diff_new_pack.8iZDPX/_new 2013-09-29 19:27:45.000000000 +0200
@@ -22,7 +22,7 @@
%define username openstack-%{component}
Name: openstack-%{component}
-Version: 2013.2.a165.g4164949
+Version: 2013.2.a179.g8c31de4
Release: 0
Summary: OpenStack Image Service (Glance)
License: Apache-2.0
@@ -77,32 +77,33 @@
Summary: OpenStack Image Service (Glance) - Python module
Group: Development/Languages/Python
Requires: python >= 2.6.8
+Requires: python-Babel >= 0.9.6
Requires: python-Paste
-Requires: python-PasteDeploy
+Requires: python-PasteDeploy >= 1.5.0
Requires: python-SQLAlchemy >= 0.7.8
-Requires: python-WebOb >= 1.2
+Requires: python-WebOb >= 1.2.3
Requires: python-anyjson >= 0.3.3
Requires: python-boto >= 2.4.0
Requires: python-cinderclient >= 1.0.4
-Requires: python-eventlet >= 0.9.12
-Requires: python-greenlet >= 0.3.1
+Requires: python-eventlet >= 0.13.0
+Requires: python-greenlet >= 0.3.2
Requires: python-httplib2
Requires: python-iso8601 >= 0.1.4
-Requires: python-jsonschema
-Requires: python-keystoneclient >= 0.2.0
-Requires: python-kombu >= 1.0.4
-Requires: python-lxml
-Requires: python-oslo.config >= 1.1.0
+Requires: python-jsonschema >= 1.3.0
+Requires: python-keystoneclient >= 0.3.0
+Requires: python-kombu >= 2.4.8
+Requires: python-lxml >= 2.3
+Requires: python-oslo.config >= 1.2.0a3
Requires: python-passlib
-Requires: python-pbr
+Requires: python-pbr >= 0.5.21
+Requires: python-psutil >= 0.6.1
Requires: python-pyOpenSSL
-Requires: python-pycrypto >= 2.1.0alpha1
-Requires: python-routes >= 1.12.3
+Requires: python-pycrypto >= 2.6
Requires: python-six
-Requires: python-sqlalchemy-migrate >= 0.7
+Requires: python-sqlalchemy-migrate >= 0.7.2
Requires: python-swiftclient >= 1.2
-Requires: python-wsgiref
-Requires: python-xattr >= 0.6.0
+Requires: python-wsgiref >= 0.1.2
+Requires: python-xattr >= 0.4
%description -n python-glance
This package contains the core Python module of OpenStack Glance.
@@ -111,12 +112,13 @@
Summary: OpenStack Image Service (Glance) - Testsuite
Group: Development/Languages/Python
Requires: %{name} = %{version}
-Requires: python-coverage
+Requires: python-coverage >= 3.6
Requires: python-fixtures >= 0.3.12
Requires: python-flake8 >= 2.0
Requires: python-glanceclient
-Requires: python-hacking >= 0.5.3
-Requires: python-mox
+Requires: python-hacking >= 0.5.6
+Requires: python-mock >= 1.0
+Requires: python-mox >= 0.5.3
Requires: python-nose
Requires: python-nose-exclude
Requires: python-nosehtmloutput >= 0.0.3
@@ -125,16 +127,16 @@
Requires: python-psycopg2
Requires: python-pyflakes >= 0.7.2
Requires: python-pysendfile >= 2.0.0
-Requires: python-requests
-Requires: python-testtools >= 0.9.22
-Requires: python-xattr >= 0.6.0
+Requires: python-requests >= 1.1
+Requires: python-testtools >= 0.9.32
+Requires: python-xattr >= 0.4
%description test
The OpenStack Glance testsuite. It is used to verify the functionality
of OpenStack Glance.
%prep
-%setup -q -n glance-2013.2.a165.g4164949
+%setup -q -n glance-2013.2.a179.g8c31de4
%patch2 -p1
%openstack_cleanup_prep
sed -i "s|^#!.*||" tools/migrate_image_owners.py # Fix non-executable script warning
++++++ glance-master.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/AUTHORS new/glance-2013.2.a179.g8c31de4/AUTHORS
--- old/glance-2013.2.a165.g4164949/AUTHORS 2013-09-14 08:31:00.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/AUTHORS 2013-09-26 02:26:50.000000000 +0200
@@ -43,6 +43,7 @@
Doug Hellmann <doug.hellmann(a)dreamhost.com>
Duncan McGreggor <duncan(a)dreamhost.com>
Eddie Sheffield <eddie.sheffield(a)rackspace.com>
+Edward Hope-Morley <edward.hope-morley(a)canonical.com>
Eldar Nugaev <enugaev(a)griddynamics.com>
Eoghan Glynn <eglynn(a)redhat.com>
Eric Windisch <eric(a)cloudscaling.com>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/ChangeLog new/glance-2013.2.a179.g8c31de4/ChangeLog
--- old/glance-2013.2.a165.g4164949/ChangeLog 2013-09-14 08:30:59.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/ChangeLog 2013-09-26 02:26:50.000000000 +0200
@@ -1,3 +1,140 @@
+commit 8c31de4d9a0451439dbe2342490cffd1387bc059
+Merge: 0513fcd 29d4383
+Author: Jenkins <jenkins(a)review.openstack.org>
+Date: Thu Sep 26 00:24:21 2013 +0000
+
+ Merge "Cache cleaner wrongly deletes cache for non invalid images"
+
+commit 29d4383b166a77595df1b2a24b02a5b2556aaba2
+Author: Fei Long Wang <flwang(a)cn.ibm.com>
+Date: Mon Sep 23 11:45:57 2013 +0800
+
+ Cache cleaner wrongly deletes cache for non invalid images
+
+ Based on current implement of method delete_stalled_files,
+ it's just deleting all the images located in /incomplete
+ instead of using the param 'older_than' to check if it
+ should be deleted. So this fix will use 'older_than' to
+ confirm brfore deleting.
+
+ Fixes bug 1228256
+
+ Change-Id: Ica27915f8b9b098ecae1e38c8e678d6acf4f2f76
+
+commit 0513fcd67d52422ec046f831692c1c36f61e00b0
+Merge: 4efd136 31681c5
+Author: Jenkins <jenkins(a)review.openstack.org>
+Date: Wed Sep 25 01:32:41 2013 +0000
+
+ Merge "Require oslo.config 1.2.0 final"
+
+commit 4efd136d5a85ef914a86736eee153dbd6c2c2846
+Merge: 58e6059 60ab0c8
+Author: Jenkins <jenkins(a)review.openstack.org>
+Date: Tue Sep 24 21:46:26 2013 +0000
+
+ Merge "Convert location meta data from pickle to string."
+
+commit 31681c58f7da6acc350695e2bfcc3574f1d82c02
+Author: Mark McLoughlin <markmc(a)redhat.com>
+Date: Tue Sep 24 21:01:42 2013 +0100
+
+ Require oslo.config 1.2.0 final
+
+ Now that 1.2.0 has been released, require it rather than one of the beta
+ release tarballs.
+
+ Closes-Bug: #1182861
+ Change-Id: I75ffc4a572d14488d19491a38742d6920951c171
+
+commit 58e6059ecfb1383efcb8c685f61eb2d01249a1d8
+Merge: 7d7bf3f dbfaf9a
+Author: Jenkins <jenkins(a)review.openstack.org>
+Date: Tue Sep 24 18:20:48 2013 +0000
+
+ Merge "Disallow access/modify members of deleted image"
+
+commit 7d7bf3f04b580fc9bfbeece9bd12418884d020cf
+Merge: 4f4b478 49c6948
+Author: Jenkins <jenkins(a)review.openstack.org>
+Date: Tue Sep 24 15:56:24 2013 +0000
+
+ Merge "Ensure prop protections are read/enforced in order"
+
+commit 49c69485e41d483abb18b689c65bd043b7a29695
+Author: Paul Bourke <paul-david.bourke(a)hp.com>
+Date: Thu Sep 12 12:52:10 2013 +0000
+
+ Ensure prop protections are read/enforced in order
+
+ Property protections need to be enforced in the order specified by the
+ configuration file. i.e. [^x_owner.*] should be enforced before [.*]
+ given the example config.
+
+ To achieve this, use a list of tuples to store the rules rather than a
+ dict, and also ensure to specify dict_type when parsing the
+ configuration file for python 2.6.
+
+ Fixes bug 1224449
+
+ Change-Id: Ib22cb34b7daef081c95717b55a991b8d613468c4
+
+commit 4f4b47803f3a7f820a6f68866fe7a36a37aff00e
+Author: sridevik <koushiksridevi8(a)gmail.com>
+Date: Fri Sep 13 00:44:01 2013 -0500
+
+ Funtional Tests should call glance.db.get_api
+
+ The test_registry , test_simple and test_sqlalchemy tests import the
+ modules directly instead of calling get_api of db/__init__.py
+ With the introduction of db_pool, they should use the get_api method.
+
+ Also adds a tear down to the ThreadPoolWrapper tests to fix jenkins
+ issues related to the CONF using tpool set to True in the tests.
+
+ Fixes Bug #1223167
+ Change-Id: I66e9f5fba449107ad92e895f6a9e550e0bcddf1c
+
+commit 4954ea5a09a39457eb362f81118bf7110f3fb6f9
+Merge: 26a47e7 a44517c
+Author: Jenkins <jenkins(a)review.openstack.org>
+Date: Fri Sep 20 02:11:59 2013 +0000
+
+ Merge "Adding encryption support for image multiple locations"
+
+commit a44517c51960df94e9402611e9f012684d7d5890
+Author: Zhi Yan Liu <zhiyanl(a)cn.ibm.com>
+Date: Tue Aug 27 23:00:09 2013 +0800
+
+ Adding encryption support for image multiple locations
+
+ Adding necessary encryption and decryption code to registry API v1
+ server and client side, in order to take care image's all locations but
+ single location only.
+
+ docImpact
+ Implement bp: image-location-status
+ Fixes bug: 1218712
+
+ Change-Id: I999426469c196da1094cc46b5237bf1bc2006877
+ Signed-off-by: Zhi Yan Liu <zhiyanl(a)cn.ibm.com>
+
+commit 26a47e77238e98b25d5943cfa7f24cb20304580c
+Author: sridevik <koushiksridevi8(a)gmail.com>
+Date: Mon Sep 16 06:29:24 2013 -0500
+
+ Respond with 410 after upload if image was deleted
+
+ When updating the image after upload, we should return an
+ HTTPGone instead of a 500 error if the image cannot
+ be found.
+ This will provide more information to nova when this occurs
+ during snapshotting.
+
+ Fixes bug #1217838
+
+ Change-Id: I6e9875a9ff95ed3e9c38685785473138327ad4a1
+
commit 4164949ce6834314186d46e7c71d0a0631d60d45
Merge: 272a223 71985de
Author: Jenkins <jenkins(a)review.openstack.org>
@@ -5,6 +142,17 @@
Merge "Convert non-English exception message when a store loading error"
+commit 60ab0c8c564af989882f0ea2609019ea7206e2b3
+Author: John Bresnahan <jbresnah(a)redhat.com>
+Date: Thu Sep 5 11:07:29 2013 -1000
+
+ Convert location meta data from pickle to string.
+
+ This patch fixes a potential security issue.
+ Fixes bug: 1213241
+
+ Change-Id: I6414d16ec72f26ceabbaf1364ad737f19f18381e
+
commit 272a223726fd059b023e3d9bfe9981b8c07f4955
Merge: c0c1436 677d1b0
Author: Jenkins <jenkins(a)review.openstack.org>
@@ -12,6 +160,21 @@
Merge "add missing index for 'owner' column on images table."
+commit dbfaf9aedb3d3f8f110322b73c66205e530826e9
+Author: Edward Hope-Morley <edward.hope-morley(a)canonical.com>
+Date: Fri Aug 2 15:11:06 2013 +0100
+
+ Disallow access/modify members of deleted image
+
+ It should not be possible to access or modify memberships for a
+ deleted image. A 404 error will now be returned if a deleted
+ images' members are accessed or modified.
+
+ Fixes: bug #1207266
+ Co-authored-by: Hirofumi Ichihara <ichihara.hirofumi(a)lab.ntt.co.jp>
+
+ Change-Id: I3e1a7c1cd96b8c85cf0c20286533ced510580492
+
commit c0c14368f41af4eb540a46c4bfd8a036a50e10ab
Author: Stuart McLaren <stuart.mclaren(a)hp.com>
Date: Wed Sep 11 13:07:22 2013 +0000
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/PKG-INFO new/glance-2013.2.a179.g8c31de4/PKG-INFO
--- old/glance-2013.2.a165.g4164949/PKG-INFO 2013-09-14 08:31:00.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/PKG-INFO 2013-09-26 02:26:50.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: glance
-Version: 2013.2.a165.g4164949
+Version: 2013.2.a179.g8c31de4
Summary: OpenStack Image Service
Home-page: http://www.openstack.org/
Author: OpenStack
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance/api/v1/members.py new/glance-2013.2.a179.g8c31de4/glance/api/v1/members.py
--- old/glance-2013.2.a165.g4164949/glance/api/v1/members.py 2013-09-14 08:28:46.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance/api/v1/members.py 2013-09-26 02:24:34.000000000 +0200
@@ -1,6 +1,7 @@
# vim: tabstop=4 shiftwidth=4 softtabstop=4
# Copyright 2012 OpenStack Foundation.
+# Copyright 2013 NTT corp.
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
@@ -44,6 +45,12 @@
except exception.Forbidden:
raise webob.exc.HTTPForbidden()
+ def _raise_404_if_image_deleted(self, req, image_id):
+ image = self.get_image_meta_or_404(req, image_id)
+ if image['status'] == 'deleted':
+ msg = _("Image with identifier %s has been deleted.") % image_id
+ raise webob.exc.HTTPNotFound(msg)
+
def index(self, req, image_id):
"""
Return a list of dictionaries indicating the members of the
@@ -59,6 +66,7 @@
]}
"""
self._enforce(req, 'get_members')
+ self._raise_404_if_image_deleted(req, image_id)
try:
members = registry.get_image_members(req.context, image_id)
@@ -79,6 +87,7 @@
"""
self._check_can_access_image_members(req.context)
self._enforce(req, 'delete_member')
+ self._raise_404_if_image_deleted(req, image_id)
try:
registry.delete_member(req.context, image_id, id)
@@ -114,6 +123,7 @@
"""
self._check_can_access_image_members(req.context)
self._enforce(req, 'modify_member')
+ self._raise_404_if_image_deleted(req, image_id)
# Figure out can_share
can_share = None
@@ -150,6 +160,7 @@
"""
self._check_can_access_image_members(req.context)
self._enforce(req, 'modify_member')
+ self._raise_404_if_image_deleted(req, image_id)
try:
registry.replace_members(req.context, image_id, body)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance/api/v2/image_data.py new/glance-2013.2.a179.g8c31de4/glance/api/v2/image_data.py
--- old/glance-2013.2.a165.g4164949/glance/api/v2/image_data.py 2013-09-14 08:28:46.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance/api/v2/image_data.py 2013-09-26 02:24:27.000000000 +0200
@@ -50,9 +50,19 @@
try:
image = image_repo.get(image_id)
image.status = 'saving'
- image_repo.save(image)
- image.set_data(data, size)
- image_repo.save(image)
+ try:
+ image_repo.save(image)
+ image.set_data(data, size)
+ image_repo.save(image)
+ except exception.NotFound as e:
+ msg = (_("Image %s could not be found after upload."
+ "The image may have been deleted during the upload: %s")
+ % (image_id, e))
+ LOG.warn(msg)
+ raise webob.exc.HTTPGone(explanation=msg,
+ request=req,
+ content_type='text/plain')
+
except ValueError as e:
LOG.debug("Cannot save data for image %s: %s", image_id, e)
raise webob.exc.HTTPBadRequest(explanation=unicode(e))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance/common/ordereddict.py new/glance-2013.2.a179.g8c31de4/glance/common/ordereddict.py
--- old/glance-2013.2.a165.g4164949/glance/common/ordereddict.py 1970-01-01 01:00:00.000000000 +0100
+++ new/glance-2013.2.a179.g8c31de4/glance/common/ordereddict.py 2013-09-26 02:24:27.000000000 +0200
@@ -0,0 +1,128 @@
+# Copyright (c) 2009 Raymond Hettinger
+#
+# Permission is hereby granted, free of charge, to any person
+# obtaining a copy of this software and associated documentation files
+# (the "Software"), to deal in the Software without restriction,
+# including without limitation the rights to use, copy, modify, merge,
+# publish, distribute, sublicense, and/or sell copies of the Software,
+# and to permit persons to whom the Software is furnished to do so,
+# subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+# OTHER DEALINGS IN THE SOFTWARE.
+
+from UserDict import DictMixin
+
+
+class OrderedDict(dict, DictMixin):
+
+ def __init__(self, *args, **kwds):
+ if len(args) > 1:
+ raise TypeError('expected at most 1 arguments, got %d' % len(args))
+ try:
+ self.__end
+ except AttributeError:
+ self.clear()
+ self.update(*args, **kwds)
+
+ def clear(self):
+ self.__end = end = []
+ end += [None, end, end] # sentinel node for doubly linked list
+ self.__map = {} # key --> [key, prev, next]
+ dict.clear(self)
+
+ def __setitem__(self, key, value):
+ if key not in self:
+ end = self.__end
+ curr = end[1]
+ curr[2] = end[1] = self.__map[key] = [key, curr, end]
+ dict.__setitem__(self, key, value)
+
+ def __delitem__(self, key):
+ dict.__delitem__(self, key)
+ key, prev, next = self.__map.pop(key)
+ prev[2] = next
+ next[1] = prev
+
+ def __iter__(self):
+ end = self.__end
+ curr = end[2]
+ while curr is not end:
+ yield curr[0]
+ curr = curr[2]
+
+ def __reversed__(self):
+ end = self.__end
+ curr = end[1]
+ while curr is not end:
+ yield curr[0]
+ curr = curr[1]
+
+ def popitem(self, last=True):
+ if not self:
+ raise KeyError('dictionary is empty')
+ if last:
+ key = reversed(self).next()
+ else:
+ key = iter(self).next()
+ value = self.pop(key)
+ return key, value
+
+ def __reduce__(self):
+ items = [[k, self[k]] for k in self]
+ tmp = self.__map, self.__end
+ del self.__map, self.__end
+ inst_dict = vars(self).copy()
+ self.__map, self.__end = tmp
+ if inst_dict:
+ return (self.__class__, (items,), inst_dict)
+ return self.__class__, (items,)
+
+ def keys(self):
+ return list(self)
+
+ setdefault = DictMixin.setdefault
+ update = DictMixin.update
+ pop = DictMixin.pop
+ values = DictMixin.values
+ items = DictMixin.items
+ iterkeys = DictMixin.iterkeys
+ itervalues = DictMixin.itervalues
+ iteritems = DictMixin.iteritems
+
+ def __repr__(self):
+ if not self:
+ return '%s()' % (self.__class__.__name__,)
+ return '%s(%r)' % (self.__class__.__name__, self.items())
+
+ def copy(self):
+ return self.__class__(self)
+
+ @classmethod
+ def fromkeys(cls, iterable, value=None):
+ d = cls()
+ for key in iterable:
+ d[key] = value
+ return d
+
+ def __eq__(self, other):
+ if isinstance(other, OrderedDict):
+ if len(self) != len(other):
+ return False
+ for p, q in zip(self.items(), other.items()):
+ if p != q:
+ return False
+ return True
+ return dict.__eq__(self, other)
+
+ def __ne__(self, other):
+ return not self == other
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance/common/property_utils.py new/glance-2013.2.a179.g8c31de4/glance/common/property_utils.py
--- old/glance-2013.2.a165.g4164949/glance/common/property_utils.py 2013-09-14 08:28:46.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance/common/property_utils.py 2013-09-26 02:24:27.000000000 +0200
@@ -20,9 +20,12 @@
from oslo.config import cfg
import webob.exc
+from glance.common.ordereddict import OrderedDict
from glance.openstack.common import log as logging
-CONFIG = ConfigParser.SafeConfigParser()
+# NOTE(bourke): The default dict_type is collections.OrderedDict in py27, but
+# we must set manually for compatibility with py26
+CONFIG = ConfigParser.SafeConfigParser(dict_type=OrderedDict)
LOG = logging.getLogger(__name__)
property_opts = [
@@ -44,7 +47,7 @@
class PropertyRules(object):
def __init__(self):
- self.rules = {}
+ self.rules = []
self._load_rules()
def _load_rules(self):
@@ -76,7 +79,7 @@
(operation, property_exp)))
LOG.warn(msg)
- self.rules[compiled_rule] = property_dict
+ self.rules.append((compiled_rule, property_dict))
def _compile_rule(self, rule):
try:
@@ -94,7 +97,7 @@
if action not in ['create', 'read', 'update', 'delete']:
return False
- for rule_exp, rule in self.rules.items():
+ for rule_exp, rule in self.rules:
if rule_exp.search(str(property_name)):
if set(roles).intersection(set(rule.get(action))):
return True
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance/db/sqlalchemy/migrate_repo/versions/029_location_meta_data_pickle_to_string.py new/glance-2013.2.a179.g8c31de4/glance/db/sqlalchemy/migrate_repo/versions/029_location_meta_data_pickle_to_string.py
--- old/glance-2013.2.a165.g4164949/glance/db/sqlalchemy/migrate_repo/versions/029_location_meta_data_pickle_to_string.py 1970-01-01 01:00:00.000000000 +0100
+++ new/glance-2013.2.a179.g8c31de4/glance/db/sqlalchemy/migrate_repo/versions/029_location_meta_data_pickle_to_string.py 2013-09-26 02:24:34.000000000 +0200
@@ -0,0 +1,75 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2013 Rackspace Hosting
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+import json
+import pickle
+
+import sqlalchemy
+from sqlalchemy import MetaData, Table, Column
+from glance.db.sqlalchemy import models
+
+
+def upgrade(migrate_engine):
+ meta = sqlalchemy.schema.MetaData(migrate_engine)
+ image_locations = Table('image_locations', meta, autoload=True)
+ new_meta_data = Column('storage_meta_data', models.JSONEncodedDict,
+ default={})
+ new_meta_data.create(image_locations)
+
+ noe = pickle.dumps({})
+ s = sqlalchemy.sql.select([image_locations]).\
+ where(image_locations.c.meta_data != noe)
+ conn = migrate_engine.connect()
+ res = conn.execute(s)
+
+ for row in res:
+ meta_data = row['meta_data']
+ x = pickle.loads(meta_data)
+ if x != {}:
+ stmt = image_locations.update().\
+ where(image_locations.c.id == row['id']).\
+ values(storage_meta_data=x)
+ conn.execute(stmt)
+ conn.close()
+ image_locations.columns['meta_data'].drop()
+ image_locations.columns['storage_meta_data'].alter(name='meta_data')
+
+
+def downgrade(migrate_engine):
+ meta = sqlalchemy.schema.MetaData(migrate_engine)
+ image_locations = Table('image_locations', meta, autoload=True)
+ old_meta_data = Column('old_meta_data', sqlalchemy.PickleType(),
+ default={})
+ old_meta_data.create(image_locations)
+
+ noj = json.dumps({})
+ s = sqlalchemy.sql.select([image_locations]).\
+ where(image_locations.c.meta_data != noj)
+ conn = migrate_engine.connect()
+ res = conn.execute(s)
+
+ for row in res:
+ x = row['meta_data']
+ meta_data = json.loads(x)
+ if meta_data != {}:
+ stmt = image_locations.update().\
+ where(image_locations.c.id == row['id']).\
+ values(old_meta_data=meta_data)
+ conn.execute(stmt)
+ conn.close()
+ image_locations.columns['meta_data'].drop()
+ image_locations.columns['old_meta_data'].alter(name='meta_data')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance/db/sqlalchemy/models.py new/glance-2013.2.a179.g8c31de4/glance/db/sqlalchemy/models.py
--- old/glance-2013.2.a165.g4164949/glance/db/sqlalchemy/models.py 2013-09-14 08:28:46.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance/db/sqlalchemy/models.py 2013-09-26 02:24:34.000000000 +0200
@@ -19,12 +19,14 @@
"""
SQLAlchemy models for glance data
"""
+import json
from sqlalchemy import Column, Integer, String, BigInteger
from sqlalchemy.ext.compiler import compiles
from sqlalchemy.ext.declarative import declarative_base
-from sqlalchemy import ForeignKey, DateTime, Boolean, Text, PickleType
+from sqlalchemy import ForeignKey, DateTime, Boolean, Text
from sqlalchemy.orm import relationship, backref, object_mapper
+from sqlalchemy.types import TypeDecorator
from sqlalchemy import Index, UniqueConstraint
from glance.openstack.common import timeutils
@@ -38,6 +40,22 @@
return 'INTEGER'
+class JSONEncodedDict(TypeDecorator):
+ """Represents an immutable structure as a json-encoded string"""
+
+ impl = Text
+
+ def process_bind_param(self, value, dialect):
+ if value is not None:
+ value = json.dumps(value)
+ return value
+
+ def process_result_value(self, value, dialect):
+ if value is not None:
+ value = json.loads(value)
+ return value
+
+
class ModelBase(object):
"""Base class for Nova and Glance Models"""
__table_args__ = {'mysql_engine': 'InnoDB'}
@@ -169,7 +187,7 @@
image_id = Column(String(36), ForeignKey('images.id'), nullable=False)
image = relationship(Image, backref=backref('locations'))
value = Column(Text(), nullable=False)
- meta_data = Column(PickleType(), default={})
+ meta_data = Column(JSONEncodedDict(), default={})
class ImageMember(BASE, ModelBase):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance/image_cache/drivers/sqlite.py new/glance-2013.2.a179.g8c31de4/glance/image_cache/drivers/sqlite.py
--- old/glance-2013.2.a165.g4164949/glance/image_cache/drivers/sqlite.py 2013-09-14 08:28:46.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance/image_cache/drivers/sqlite.py 2013-09-26 02:24:34.000000000 +0200
@@ -439,8 +439,15 @@
will be deleted.
"""
for path in self.get_cache_files(self.incomplete_dir):
- os.unlink(path)
- LOG.info(_("Removed stalled cache file %s"), path)
+ if os.path.getmtime(path) < older_than:
+ try:
+ os.unlink(path)
+ LOG.info(_("Removed stalled cache file %s"), path)
+ except Exception as e:
+ msg = (_("Failed to delete file %(path)s. "
+ "Got error: %(e)s") %
+ dict(path=path, e=e))
+ LOG.warn(msg)
def get_queued_images(self):
"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance/registry/client/v1/client.py new/glance-2013.2.a179.g8c31de4/glance/registry/client/v1/client.py
--- old/glance-2013.2.a165.g4164949/glance/registry/client/v1/client.py 2013-09-14 08:28:46.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance/registry/client/v1/client.py 2013-09-26 02:24:27.000000000 +0200
@@ -50,21 +50,38 @@
**kwargs)
def decrypt_metadata(self, image_metadata):
- if (self.metadata_encryption_key is not None and
- 'location' in image_metadata and
- image_metadata['location'] is not None):
- location = crypt.urlsafe_decrypt(self.metadata_encryption_key,
- image_metadata['location'])
- image_metadata['location'] = location
+ if self.metadata_encryption_key is not None:
+ if image_metadata.get('location'):
+ location = crypt.urlsafe_decrypt(self.metadata_encryption_key,
+ image_metadata['location'])
+ image_metadata['location'] = location
+ if image_metadata.get('location_data'):
+ ld = []
+ for loc in image_metadata['location_data']:
+ url = crypt.urlsafe_decrypt(self.metadata_encryption_key,
+ loc['url'])
+ ld.append({'url': url, 'metadata': loc['metadata']})
+ image_metadata['location_data'] = ld
return image_metadata
def encrypt_metadata(self, image_metadata):
- if (self.metadata_encryption_key is not None and
- 'location' in image_metadata and
- image_metadata['location'] is not None):
- location = crypt.urlsafe_encrypt(self.metadata_encryption_key,
- image_metadata['location'], 64)
- image_metadata['location'] = location
+ if self.metadata_encryption_key is not None:
+ location_url = image_metadata.get('location')
+ if location_url:
+ location = crypt.urlsafe_encrypt(self.metadata_encryption_key,
+ location_url,
+ 64)
+ image_metadata['location'] = location
+ if image_metadata.get('location_data'):
+ ld = []
+ for loc in image_metadata['location_data']:
+ if loc['url'] == location_url:
+ url = location
+ else:
+ url = crypt.urlsafe_encrypt(
+ self.metadata_encryption_key, loc['url'], 64)
+ ld.append({'url': url, 'metadata': loc['metadata']})
+ image_metadata['location_data'] = ld
return image_metadata
def get_images(self, **kwargs):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance/tests/functional/db/test_db_api.py new/glance-2013.2.a179.g8c31de4/glance/tests/functional/db/test_db_api.py
--- old/glance-2013.2.a165.g4164949/glance/tests/functional/db/test_db_api.py 2013-09-14 08:28:46.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance/tests/functional/db/test_db_api.py 2013-09-26 02:24:27.000000000 +0200
@@ -58,3 +58,7 @@
dbapi.method_for_test_1(1, 2, kwarg='arg')
tpool.execute.assert_called_with(method_for_test_1, 1, 2, kwarg='arg')
+
+ def tearDown(self):
+ super(ThreadPoolWrapper, self).tearDown()
+ CONF.set_override('use_tpool', False)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance/tests/functional/db/test_registry.py new/glance-2013.2.a179.g8c31de4/glance/tests/functional/db/test_registry.py
--- old/glance-2013.2.a165.g4164949/glance/tests/functional/db/test_registry.py 2013-09-14 08:28:46.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance/tests/functional/db/test_registry.py 2013-09-26 02:24:27.000000000 +0200
@@ -13,7 +13,7 @@
# License for the specific language governing permissions and limitations
# under the License.
-
+from glance.api import CONF
import glance.db.registry.api
from glance.db.sqlalchemy import api
from glance.db.sqlalchemy import models as db_models
@@ -24,7 +24,8 @@
def get_db(config):
config(sql_connection='sqlite://', verbose=False, debug=False)
- db_api = glance.db.registry.api
+ CONF.set_override('data_api', 'glance.db.registry.api')
+ db_api = glance.db.get_api()
db_api.setup_db_env()
return db_api
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance/tests/functional/db/test_simple.py new/glance-2013.2.a179.g8c31de4/glance/tests/functional/db/test_simple.py
--- old/glance-2013.2.a165.g4164949/glance/tests/functional/db/test_simple.py 2013-09-14 08:28:46.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance/tests/functional/db/test_simple.py 2013-09-26 02:24:27.000000000 +0200
@@ -13,14 +13,16 @@
# License for the specific language governing permissions and limitations
# under the License.
-
+from glance.api import CONF
import glance.db.simple.api
import glance.tests.functional.db as db_tests
from glance.tests.functional.db import base
def get_db(config):
- return glance.db.simple.api
+ CONF.set_override('data_api', 'glance.db.simple.api')
+ db_api = glance.db.get_api()
+ return db_api
def reset_db(db_api):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance/tests/functional/db/test_sqlalchemy.py new/glance-2013.2.a179.g8c31de4/glance/tests/functional/db/test_sqlalchemy.py
--- old/glance-2013.2.a165.g4164949/glance/tests/functional/db/test_sqlalchemy.py 2013-09-14 08:28:46.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance/tests/functional/db/test_sqlalchemy.py 2013-09-26 02:24:27.000000000 +0200
@@ -13,7 +13,7 @@
# License for the specific language governing permissions and limitations
# under the License.
-
+from glance.api import CONF
import glance.db.sqlalchemy.api
from glance.db.sqlalchemy import models as db_models
import glance.tests.functional.db as db_tests
@@ -22,7 +22,8 @@
def get_db(config):
config(sql_connection='sqlite://', verbose=False, debug=False)
- db_api = glance.db.sqlalchemy.api
+ CONF.set_override('data_api', 'glance.db.sqlalchemy.api')
+ db_api = glance.db.get_api()
db_api.setup_db_env()
db_api.get_engine()
return db_api
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance/tests/functional/v1/test_api.py new/glance-2013.2.a179.g8c31de4/glance/tests/functional/v1/test_api.py
--- old/glance-2013.2.a165.g4164949/glance/tests/functional/v1/test_api.py 2013-09-14 08:28:46.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance/tests/functional/v1/test_api.py 2013-09-26 02:24:34.000000000 +0200
@@ -61,6 +61,24 @@
- Remove a previously existing property.
10. PUT image
- Add a previously deleted property.
+ 11. PUT image/members/member1
+ - Add member1 to image
+ 12. PUT image/members/member2
+ - Add member2 to image
+ 13. GET image/members
+ - List image members
+ 14. DELETE image/members/member1
+ - Delete image member1
+ 15. DELETE image
+ - Delete image
+ 16. GET image/members
+ - List deleted image members
+ 17. PUT image/members/member2
+ - Update existing member2 of deleted image
+ 18. PUT image/members/member3
+ - Add member3 to deleted image
+ 19. DELETE image/members/member2
+ - Delete member2 from deleted image
"""
self.cleanup()
self.start_servers(**self.__dict__.copy())
@@ -265,11 +283,73 @@
self.assertEqual(data['properties']['distro'], "Ubuntu")
self.assertNotEqual(data['created_at'], data['updated_at'])
- # DELETE image
+ # 11. Add member to image
+ path = ("http://%s:%d/v1/images/%s/members/pattieblack" %
+ ("127.0.0.1", self.api_port, image_id))
+ http = httplib2.Http()
+ response, content = http.request(path, 'PUT')
+ self.assertEqual(response.status, 204)
+
+ # 12. Add member to image
+ path = ("http://%s:%d/v1/images/%s/members/pattiewhite" %
+ ("127.0.0.1", self.api_port, image_id))
+ http = httplib2.Http()
+ response, content = http.request(path, 'PUT')
+ self.assertEqual(response.status, 204)
+
+ # 13. List image members
+ path = ("http://%s:%d/v1/images/%s/members" %
+ ("127.0.0.1", self.api_port, image_id))
+ http = httplib2.Http()
+ response, content = http.request(path, 'GET')
+ self.assertEqual(response.status, 200)
+ data = json.loads(content)
+ self.assertEqual(len(data['members']), 2)
+ self.assertEqual(data['members'][0]['member_id'], 'pattieblack')
+ self.assertEqual(data['members'][1]['member_id'], 'pattiewhite')
+
+ # 14. Delete image member
+ path = ("http://%s:%d/v1/images/%s/members/pattieblack" %
+ ("127.0.0.1", self.api_port, image_id))
+ http = httplib2.Http()
+ response, content = http.request(path, 'DELETE')
+ self.assertEqual(response.status, 204)
+
+ # 15. DELETE image
path = "http://%s:%d/v1/images/%s" % ("127.0.0.1", self.api_port,
image_id)
http = httplib2.Http()
response, content = http.request(path, 'DELETE')
self.assertEqual(response.status, 200)
+ # 16. Try to list members of deleted image
+ path = ("http://%s:%d/v1/images/%s/members" %
+ ("127.0.0.1", self.api_port, image_id))
+ http = httplib2.Http()
+ response, content = http.request(path, 'GET')
+ self.assertEqual(response.status, 404)
+
+ # 17. Try to update member of deleted image
+ path = ("http://%s:%d/v1/images/%s/members" %
+ ("127.0.0.1", self.api_port, image_id))
+ http = httplib2.Http()
+ fixture = [{'member_id': 'pattieblack', 'can_share': 'false'}]
+ body = json.dumps(dict(memberships=fixture))
+ response, content = http.request(path, 'PUT', body=body)
+ self.assertEqual(response.status, 404)
+
+ # 18. Try to add member to deleted image
+ path = ("http://%s:%d/v1/images/%s/members/chickenpattie" %
+ ("127.0.0.1", self.api_port, image_id))
+ http = httplib2.Http()
+ response, content = http.request(path, 'PUT')
+ self.assertEqual(response.status, 404)
+
+ # 19. Try to delete member of deleted image
+ path = ("http://%s:%d/v1/images/%s/members/pattieblack" %
+ ("127.0.0.1", self.api_port, image_id))
+ http = httplib2.Http()
+ response, content = http.request(path, 'DELETE')
+ self.assertEqual(response.status, 404)
+
self.stop_servers()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance/tests/unit/common/test_property_utils.py new/glance-2013.2.a179.g8c31de4/glance/tests/unit/common/test_property_utils.py
--- old/glance-2013.2.a165.g4164949/glance/tests/unit/common/test_property_utils.py 2013-09-14 08:28:46.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance/tests/unit/common/test_property_utils.py 2013-09-26 02:24:27.000000000 +0200
@@ -18,6 +18,17 @@
from glance.common import property_utils
from glance.tests import utils
+CONFIG_SECTIONS = [
+ '^x_owner_.*',
+ 'spl_create_prop',
+ 'spl_read_prop',
+ 'spl_read_only_prop',
+ 'spl_update_prop',
+ 'spl_update_only_prop',
+ 'spl_delete_prop',
+ '.*'
+]
+
class TestPropertyRules(utils.BaseTestCase):
@@ -149,3 +160,21 @@
self.rules_checker = property_utils.PropertyRules()
self.assertFalse(self.rules_checker.check_property_rules('test_prop',
'delete', ['member']))
+
+ def test_property_config_loaded_in_order(self):
+ """
+ Verify the order of loaded config sections matches that from the
+ configuration file
+ """
+ self.rules_checker = property_utils.PropertyRules()
+ self.assertEqual(property_utils.CONFIG.sections(), CONFIG_SECTIONS)
+
+ def test_property_rules_loaded_in_order(self):
+ """
+ Verify rules are iterable in the same order as read from the config
+ file
+ """
+ self.rules_checker = property_utils.PropertyRules()
+ for i in xrange(len(property_utils.CONFIG.sections())):
+ self.assertEqual(property_utils.CONFIG.sections()[i],
+ self.rules_checker.rules[i][0].pattern)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance/tests/unit/test_image_cache.py new/glance-2013.2.a179.g8c31de4/glance/tests/unit/test_image_cache.py
--- old/glance-2013.2.a165.g4164949/glance/tests/unit/test_image_cache.py 2013-09-14 08:28:46.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance/tests/unit/test_image_cache.py 2013-09-26 02:24:34.000000000 +0200
@@ -16,10 +16,12 @@
# under the License.
from contextlib import contextmanager
+import datetime
import hashlib
import os
import StringIO
import tempfile
+import time
import fixtures
import stubout
@@ -148,6 +150,35 @@
self.assertFalse(os.path.exists(incomplete_file_path))
@skip_if_disabled
+ def test_clean_stalled_nonzero_stall_time(self):
+ """
+ Test the clean method removes the stalled images as expected
+ """
+ incomplete_file_path_1 = os.path.join(self.cache_dir,
+ 'incomplete', '1')
+ incomplete_file_path_2 = os.path.join(self.cache_dir,
+ 'incomplete', '2')
+ for f in (incomplete_file_path_1, incomplete_file_path_2):
+ incomplete_file = open(f, 'w')
+ incomplete_file.write(FIXTURE_DATA)
+ incomplete_file.close()
+
+ mtime = os.path.getmtime(incomplete_file_path_1)
+ pastday = datetime.datetime.fromtimestamp(mtime) - \
+ datetime.timedelta(days=1)
+ atime = int(time.mktime(pastday.timetuple()))
+ mtime = atime
+ os.utime(incomplete_file_path_1, (atime, mtime))
+
+ self.assertTrue(os.path.exists(incomplete_file_path_1))
+ self.assertTrue(os.path.exists(incomplete_file_path_2))
+
+ self.cache.clean(stall_time=3600)
+
+ self.assertFalse(os.path.exists(incomplete_file_path_1))
+ self.assertTrue(os.path.exists(incomplete_file_path_2))
+
+ @skip_if_disabled
def test_prune(self):
"""
Test that pruning the cache works as expected...
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance/tests/unit/test_migrations.py new/glance-2013.2.a179.g8c31de4/glance/tests/unit/test_migrations.py
--- old/glance-2013.2.a165.g4164949/glance/tests/unit/test_migrations.py 2013-09-14 08:28:46.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance/tests/unit/test_migrations.py 2013-09-26 02:24:34.000000000 +0200
@@ -28,6 +28,7 @@
import commands
import ConfigParser
import datetime
+import json
import os
import pickle
import urlparse
@@ -935,3 +936,60 @@
if idx.name == owner_index]
self.assertNotIn((owner_index, columns), index_data)
+
+ def _pre_upgrade_029(self, engine):
+ image_locations = get_table(engine, 'image_locations')
+
+ meta_data = {'somelist': ['a', 'b', 'c'], 'avalue': 'hello',
+ 'adict': {}}
+
+ now = datetime.datetime.now()
+ image_id = 'fake_029_id'
+ url = 'file:///some/place/onthe/fs029'
+
+ images = get_table(engine, 'images')
+ temp = dict(deleted=False,
+ created_at=now,
+ updated_at=now,
+ status='active',
+ is_public=True,
+ min_disk=0,
+ min_ram=0,
+ id=image_id)
+ images.insert().values(temp).execute()
+
+ pickle_md = pickle.dumps(meta_data)
+ temp = dict(deleted=False,
+ created_at=now,
+ updated_at=now,
+ image_id=image_id,
+ value=url,
+ meta_data=pickle_md)
+ image_locations.insert().values(temp).execute()
+
+ return meta_data, image_id
+
+ def _check_029(self, engine, data):
+ meta_data = data[0]
+ image_id = data[1]
+ image_locations = get_table(engine, 'image_locations')
+
+ records = image_locations.select().\
+ where(image_locations.c.image_id == image_id).execute().fetchall()
+
+ for r in records:
+ d = json.loads(r['meta_data'])
+ self.assertEqual(d, meta_data)
+
+ def _post_downgrade_029(self, engine):
+ image_id = 'fake_029_id'
+
+ image_locations = get_table(engine, 'image_locations')
+
+ records = image_locations.select().\
+ where(image_locations.c.image_id == image_id).execute().fetchall()
+
+ for r in records:
+ md = r['meta_data']
+ d = pickle.loads(md)
+ self.assertEqual(type(d), dict)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance/tests/unit/v1/test_api.py new/glance-2013.2.a179.g8c31de4/glance/tests/unit/v1/test_api.py
--- old/glance-2013.2.a165.g4164949/glance/tests/unit/v1/test_api.py 2013-09-14 08:28:46.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance/tests/unit/v1/test_api.py 2013-09-26 02:24:34.000000000 +0200
@@ -2033,6 +2033,88 @@
res = req.get_response(self.api)
self.assertEquals(res.status_int, webob.exc.HTTPNoContent.code)
+ def test_get_members_of_deleted_image_raises_404(self):
+ """
+ Tests members listing for deleted image raises 404.
+ """
+ req = webob.Request.blank("/images/%s" % UUID2)
+ req.method = 'DELETE'
+ res = req.get_response(self.api)
+ self.assertEquals(res.status_int, 200)
+
+ req = webob.Request.blank('/images/%s/members' % UUID2)
+ req.method = 'GET'
+
+ res = req.get_response(self.api)
+ self.assertEquals(res.status_int, webob.exc.HTTPNotFound.code)
+ self.assertTrue(
+ 'Image with identifier %s has been deleted.' % UUID2 in res.body)
+
+ def test_delete_member_of_deleted_image_raises_404(self):
+ """
+ Tests deleting members of deleted image raises 404.
+ """
+ test_router = router.API(self.mapper)
+ self.api = test_utils.FakeAuthMiddleware(test_router, is_admin=True)
+ req = webob.Request.blank("/images/%s" % UUID2)
+ req.method = 'DELETE'
+ res = req.get_response(self.api)
+ self.assertEquals(res.status_int, 200)
+
+ req = webob.Request.blank('/images/%s/members/pattieblack' % UUID2)
+ req.method = 'DELETE'
+
+ res = req.get_response(self.api)
+ self.assertEquals(res.status_int, webob.exc.HTTPNotFound.code)
+ self.assertTrue(
+ 'Image with identifier %s has been deleted.' % UUID2 in res.body)
+
+ def test_update_members_of_deleted_image_raises_404(self):
+ """
+ Tests update members of deleted image raises 404.
+ """
+ test_router = router.API(self.mapper)
+ self.api = test_utils.FakeAuthMiddleware(test_router, is_admin=True)
+
+ req = webob.Request.blank('/images/%s/members/pattieblack' % UUID2)
+ req.method = 'PUT'
+ res = req.get_response(self.api)
+ self.assertEquals(res.status_int, 204)
+
+ req = webob.Request.blank("/images/%s" % UUID2)
+ req.method = 'DELETE'
+ res = req.get_response(self.api)
+ self.assertEquals(res.status_int, 200)
+
+ fixture = [{'member_id': 'pattieblack', 'can_share': 'false'}]
+ req = webob.Request.blank('/images/%s/members' % UUID2)
+ req.method = 'PUT'
+ req.content_type = 'application/json'
+ req.body = json.dumps(dict(memberships=fixture))
+ res = req.get_response(self.api)
+ self.assertEquals(res.status_int, webob.exc.HTTPNotFound.code)
+ self.assertTrue(
+ 'Image with identifier %s has been deleted.' % UUID2 in res.body)
+
+ def test_create_member_to_deleted_image_raises_404(self):
+ """
+ Tests adding members to deleted image raises 404.
+ """
+ test_router = router.API(self.mapper)
+ self.api = test_utils.FakeAuthMiddleware(test_router, is_admin=True)
+ req = webob.Request.blank("/images/%s" % UUID2)
+ req.method = 'DELETE'
+ res = req.get_response(self.api)
+ self.assertEquals(res.status_int, 200)
+
+ req = webob.Request.blank('/images/%s/members/pattieblack' % UUID2)
+ req.method = 'PUT'
+
+ res = req.get_response(self.api)
+ self.assertEquals(res.status_int, webob.exc.HTTPNotFound.code)
+ self.assertTrue(
+ 'Image with identifier %s has been deleted.' % UUID2 in res.body)
+
def test_delete_member(self):
"""
Tests deleting image members raises right exception
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance/tests/unit/v1/test_registry_api.py new/glance-2013.2.a179.g8c31de4/glance/tests/unit/v1/test_registry_api.py
--- old/glance-2013.2.a165.g4164949/glance/tests/unit/v1/test_registry_api.py 2013-09-14 08:28:46.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance/tests/unit/v1/test_registry_api.py 2013-09-26 02:24:27.000000000 +0200
@@ -27,6 +27,7 @@
import glance.api.common
import glance.common.config
+from glance.common import crypt
import glance.context
from glance.db.sqlalchemy import api as db_api
from glance.db.sqlalchemy import models as db_models
@@ -2672,7 +2673,8 @@
image['location_data'][0])
self.assertEqual(self.FIXTURES[0]['locations'][0]['url'],
image['location_data'][0]['url'])
- self.assertEqual(image['location_data'][0]['metadata'], {})
+ self.assertEqual(self.FIXTURES[0]['locations'][0]['metadata'],
+ image['location_data'][0]['metadata'])
def test_show_from_location_data(self):
req = webob.Request.blank('/images/%s' % UUID2)
@@ -2686,3 +2688,61 @@
image['location_data'][0]['url'])
self.assertEqual(self.FIXTURES[1]['locations'][0]['metadata'],
image['location_data'][0]['metadata'])
+
+ def test_create_from_location_data_with_encryption(self):
+ encryption_key = '1234567890123456'
+ location_url1 = "file:///%s/%s" % (self.test_dir, _gen_uuid())
+ location_url2 = "file:///%s/%s" % (self.test_dir, _gen_uuid())
+ encrypted_location_url1 = crypt.urlsafe_encrypt(encryption_key,
+ location_url1, 64)
+ encrypted_location_url2 = crypt.urlsafe_encrypt(encryption_key,
+ location_url2, 64)
+ fixture = {'name': 'fake image #3',
+ 'status': 'active',
+ 'disk_format': 'vhd',
+ 'container_format': 'ovf',
+ 'is_public': True,
+ 'checksum': None,
+ 'min_disk': 5,
+ 'min_ram': 256,
+ 'size': 19,
+ 'location': encrypted_location_url1,
+ 'location_data': [{'url': encrypted_location_url1,
+ 'metadata': {'key': 'value'}},
+ {'url': encrypted_location_url2,
+ 'metadata': {'key': 'value'}}]}
+
+ self.config(metadata_encryption_key=encryption_key)
+ req = webob.Request.blank('/images')
+ req.method = 'POST'
+ req.content_type = 'application/json'
+ req.body = json.dumps(dict(image=fixture))
+
+ res = req.get_response(self.api)
+ self.assertEquals(res.status_int, 200)
+ res_dict = json.loads(res.body)
+ image = res_dict['image']
+ # NOTE(zhiyan) _normalize_image_location_for_db() function will
+ # not re-encrypted the url within location.
+ self.assertEqual(fixture['location'], image['location'])
+ self.assertEqual(len(image['location_data']), 2)
+ self.assertEqual(fixture['location_data'][0]['url'],
+ image['location_data'][0]['url'])
+ self.assertEqual(fixture['location_data'][0]['metadata'],
+ image['location_data'][0]['metadata'])
+ self.assertEqual(fixture['location_data'][1]['url'],
+ image['location_data'][1]['url'])
+ self.assertEqual(fixture['location_data'][1]['metadata'],
+ image['location_data'][1]['metadata'])
+
+ image_entry = db_api.image_get(self.context, image['id'])
+ self.assertEqual(image_entry['locations'][0]['url'],
+ encrypted_location_url1)
+ self.assertEqual(image_entry['locations'][1]['url'],
+ encrypted_location_url2)
+ decrypted_location_url1 = crypt.urlsafe_decrypt(
+ encryption_key, image_entry['locations'][0]['url'])
+ decrypted_location_url2 = crypt.urlsafe_decrypt(
+ encryption_key, image_entry['locations'][1]['url'])
+ self.assertEqual(location_url1, decrypted_location_url1)
+ self.assertEqual(location_url2, decrypted_location_url2)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance/tests/unit/v1/test_registry_client.py new/glance-2013.2.a179.g8c31de4/glance/tests/unit/v1/test_registry_client.py
--- old/glance-2013.2.a165.g4164949/glance/tests/unit/v1/test_registry_client.py 2013-09-14 08:28:46.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance/tests/unit/v1/test_registry_client.py 2013-09-26 02:24:27.000000000 +0200
@@ -1068,6 +1068,36 @@
self.assertEquals(new_image['location_data'][0]['url'], location)
self.assertEquals(new_image['location_data'][0]['metadata'], loc_meta)
+ def test_add_image_with_location_data_with_encryption(self):
+ """Tests that we can add image metadata with properties and
+ enable encryption.
+ """
+ self.client.metadata_encryption_key = '1234567890123456'
+
+ location = "file:///tmp/glance-tests/%d"
+ loc_meta = {'key': 'value'}
+ fixture = {'name': 'fake public image',
+ 'is_public': True,
+ 'disk_format': 'vmdk',
+ 'container_format': 'ovf',
+ 'size': 19,
+ 'location_data': [{'url': location % 1,
+ 'metadata': loc_meta},
+ {'url': location % 2,
+ 'metadata': {}}],
+ 'properties': {'distro': 'Ubuntu 10.04 LTS'}}
+
+ new_image = self.client.add_image(fixture)
+
+ self.assertEquals(new_image['location'], location % 1)
+ self.assertEquals(len(new_image['location_data']), 2)
+ self.assertEquals(new_image['location_data'][0]['url'], location % 1)
+ self.assertEquals(new_image['location_data'][0]['metadata'], loc_meta)
+ self.assertEquals(new_image['location_data'][1]['url'], location % 2)
+ self.assertEquals(new_image['location_data'][1]['metadata'], {})
+
+ self.client.metadata_encryption_key = None
+
def test_add_image_already_exists(self):
"""Tests proper exception is raised if image with ID already exists"""
fixture = {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance/tests/unit/v2/test_image_data_resource.py new/glance-2013.2.a179.g8c31de4/glance/tests/unit/v2/test_image_data_resource.py
--- old/glance-2013.2.a165.g4164949/glance/tests/unit/v2/test_image_data_resource.py 2013-09-14 08:28:46.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance/tests/unit/v2/test_image_data_resource.py 2013-09-26 02:24:27.000000000 +0200
@@ -164,7 +164,18 @@
self.assertRaises(webob.exc.HTTPBadRequest, self.controller.upload,
request, unit_test_utils.UUID1, 'YYYY', 4)
- def test_upload_non_existent_image(self):
+ def test_upload_non_existent_image_during_save(self):
+ def fake_save(self):
+ raise exception.NotFound()
+
+ request = unit_test_utils.get_fake_request()
+ image = FakeImage('abcd', locations=['http://example.com/image'])
+ self.image_repo.result = image
+ self.image_repo.save = fake_save
+ self.assertRaises(webob.exc.HTTPGone, self.controller.upload,
+ request, uuidutils.generate_uuid(), 'ABC', 3)
+
+ def test_upload_non_existent_image_before_save(self):
request = unit_test_utils.get_fake_request()
self.image_repo.result = exception.NotFound()
self.assertRaises(webob.exc.HTTPNotFound, self.controller.upload,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance.egg-info/PKG-INFO new/glance-2013.2.a179.g8c31de4/glance.egg-info/PKG-INFO
--- old/glance-2013.2.a165.g4164949/glance.egg-info/PKG-INFO 2013-09-14 08:31:00.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance.egg-info/PKG-INFO 2013-09-26 02:26:50.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: glance
-Version: 2013.2.a165.g4164949
+Version: 2013.2.a179.g8c31de4
Summary: OpenStack Image Service
Home-page: http://www.openstack.org/
Author: OpenStack
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance.egg-info/SOURCES.txt new/glance-2013.2.a179.g8c31de4/glance.egg-info/SOURCES.txt
--- old/glance-2013.2.a165.g4164949/glance.egg-info/SOURCES.txt 2013-09-14 08:31:00.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance.egg-info/SOURCES.txt 2013-09-26 02:26:50.000000000 +0200
@@ -106,6 +106,7 @@
glance/common/config.py
glance/common/crypt.py
glance/common/exception.py
+glance/common/ordereddict.py
glance/common/property_utils.py
glance/common/rpc.py
glance/common/utils.py
@@ -163,6 +164,7 @@
glance/db/sqlalchemy/migrate_repo/versions/026_add_location_storage_information.py
glance/db/sqlalchemy/migrate_repo/versions/027_checksum_index.py
glance/db/sqlalchemy/migrate_repo/versions/028_owner_index.py
+glance/db/sqlalchemy/migrate_repo/versions/029_location_meta_data_pickle_to_string.py
glance/db/sqlalchemy/migrate_repo/versions/__init__.py
glance/domain/__init__.py
glance/domain/proxy.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance.egg-info/dependency_links.txt new/glance-2013.2.a179.g8c31de4/glance.egg-info/dependency_links.txt
--- old/glance-2013.2.a165.g4164949/glance.egg-info/dependency_links.txt 2013-09-14 08:31:00.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance.egg-info/dependency_links.txt 2013-09-26 02:26:50.000000000 +0200
@@ -1 +1 @@
-http://tarballs.openstack.org/oslo.config/oslo.config-1.2.0a3.tar.gz#egg=oslo.config-1.2.0a3
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance.egg-info/requires.txt new/glance-2013.2.a179.g8c31de4/glance.egg-info/requires.txt
--- old/glance-2013.2.a165.g4164949/glance.egg-info/requires.txt 2013-09-14 08:31:00.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance.egg-info/requires.txt 2013-09-26 02:26:50.000000000 +0200
@@ -13,7 +13,7 @@
kombu>=2.4.8
pycrypto>=2.6
iso8601>=0.1.4
-oslo.config>=1.2.0a3
+oslo.config>=1.2.0
python-swiftclient>=1.2
lxml>=2.3
Paste
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/requirements.txt new/glance-2013.2.a179.g8c31de4/requirements.txt
--- old/glance-2013.2.a165.g4164949/requirements.txt 2013-09-14 08:28:46.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/requirements.txt 2013-09-26 02:24:34.000000000 +0200
@@ -20,9 +20,7 @@
kombu>=2.4.8
pycrypto>=2.6
iso8601>=0.1.4
-
--f http://tarballs.openstack.org/oslo.config/oslo.config-1.2.0a3.tar.gz#egg=os…
-oslo.config>=1.2.0a3
+oslo.config>=1.2.0
# For Swift storage backend.
python-swiftclient>=1.2
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-commit+help(a)opensuse.org
1
0
Hello community,
here is the log from the commit of package openstack-glance for openSUSE:Factory checked in at 2013-09-29 19:27:24
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/openstack-glance (Old)
and /work/SRC/openSUSE:Factory/.openstack-glance.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "openstack-glance"
Changes:
--------
--- /work/SRC/openSUSE:Factory/openstack-glance/openstack-glance.changes 2013-09-16 16:21:43.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.openstack-glance.new/openstack-glance.changes 2013-09-29 19:27:25.000000000 +0200
@@ -1,0 +2,38 @@
+Thu Sep 26 10:18:29 UTC 2013 - opensuse-cloud(a)opensuse.org
+
+- Update to version 2013.2.a179.g8c31de4:
+ + Require oslo.config 1.2.0 final
+ + Cache cleaner wrongly deletes cache for non invalid images
+
+-------------------------------------------------------------------
+Wed Sep 25 00:12:16 UTC 2013 - opensuse-cloud(a)opensuse.org
+
+- Update to version 2013.2.a175.g4efd136:
+ + Ensure prop protections are read/enforced in order
+ + Disallow access/modify members of deleted image
+ + Convert location meta data from pickle to string.
+
+-------------------------------------------------------------------
+Tue Sep 24 00:31:45 UTC 2013 - opensuse-cloud(a)opensuse.org
+
+- Update to version 2013.2.a169.g4f4b478:
+ + Funtional Tests should call glance.db.get_api
+
+-------------------------------------------------------------------
+Fri Sep 20 23:48:31 UTC 2013 - opensuse-cloud(a)opensuse.org
+
+- Update to version 2013.2.a168.g4954ea5:
+ + Adding encryption support for image multiple locations
+
+-------------------------------------------------------------------
+Thu Sep 19 00:01:32 UTC 2013 - opensuse-cloud(a)opensuse.org
+
+- Update to version 2013.2.a166.g26a47e7:
+ + Respond with 410 after upload if image was deleted
+
+-------------------------------------------------------------------
+Wed Sep 18 08:54:08 UTC 2013 - dmueller(a)suse.com
+
+- fix requires
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ openstack-glance-doc.spec ++++++
--- /var/tmp/diff_new_pack.p0TTwB/_old 2013-09-29 19:27:26.000000000 +0200
+++ /var/tmp/diff_new_pack.p0TTwB/_new 2013-09-29 19:27:26.000000000 +0200
@@ -19,7 +19,7 @@
%define component glance
Name: openstack-%{component}-doc
-Version: 2013.2.a165.g4164949
+Version: 2013.2.a179.g8c31de4
Release: 0
Summary: OpenStack Image Service (Glance) - Documentation
License: Apache-2.0
@@ -48,7 +48,7 @@
This package contains documentation files for openstack-glance.
%prep
-%setup -q -n glance-2013.2.a165.g4164949
+%setup -q -n glance-2013.2.a179.g8c31de4
%openstack_cleanup_prep
%build
++++++ openstack-glance.spec ++++++
--- /var/tmp/diff_new_pack.p0TTwB/_old 2013-09-29 19:27:26.000000000 +0200
+++ /var/tmp/diff_new_pack.p0TTwB/_new 2013-09-29 19:27:26.000000000 +0200
@@ -22,7 +22,7 @@
%define username openstack-%{component}
Name: openstack-%{component}
-Version: 2013.2.a165.g4164949
+Version: 2013.2.a179.g8c31de4
Release: 0
Summary: OpenStack Image Service (Glance)
License: Apache-2.0
@@ -77,32 +77,33 @@
Summary: OpenStack Image Service (Glance) - Python module
Group: Development/Languages/Python
Requires: python >= 2.6.8
+Requires: python-Babel >= 0.9.6
Requires: python-Paste
-Requires: python-PasteDeploy
+Requires: python-PasteDeploy >= 1.5.0
Requires: python-SQLAlchemy >= 0.7.8
-Requires: python-WebOb >= 1.2
+Requires: python-WebOb >= 1.2.3
Requires: python-anyjson >= 0.3.3
Requires: python-boto >= 2.4.0
Requires: python-cinderclient >= 1.0.4
-Requires: python-eventlet >= 0.9.12
-Requires: python-greenlet >= 0.3.1
+Requires: python-eventlet >= 0.13.0
+Requires: python-greenlet >= 0.3.2
Requires: python-httplib2
Requires: python-iso8601 >= 0.1.4
-Requires: python-jsonschema
-Requires: python-keystoneclient >= 0.2.0
-Requires: python-kombu >= 1.0.4
-Requires: python-lxml
-Requires: python-oslo.config >= 1.1.0
+Requires: python-jsonschema >= 1.3.0
+Requires: python-keystoneclient >= 0.3.0
+Requires: python-kombu >= 2.4.8
+Requires: python-lxml >= 2.3
+Requires: python-oslo.config >= 1.2.0a3
Requires: python-passlib
-Requires: python-pbr
+Requires: python-pbr >= 0.5.21
+Requires: python-psutil >= 0.6.1
Requires: python-pyOpenSSL
-Requires: python-pycrypto >= 2.1.0alpha1
-Requires: python-routes >= 1.12.3
+Requires: python-pycrypto >= 2.6
Requires: python-six
-Requires: python-sqlalchemy-migrate >= 0.7
+Requires: python-sqlalchemy-migrate >= 0.7.2
Requires: python-swiftclient >= 1.2
-Requires: python-wsgiref
-Requires: python-xattr >= 0.6.0
+Requires: python-wsgiref >= 0.1.2
+Requires: python-xattr >= 0.4
%description -n python-glance
This package contains the core Python module of OpenStack Glance.
@@ -111,12 +112,13 @@
Summary: OpenStack Image Service (Glance) - Testsuite
Group: Development/Languages/Python
Requires: %{name} = %{version}
-Requires: python-coverage
+Requires: python-coverage >= 3.6
Requires: python-fixtures >= 0.3.12
Requires: python-flake8 >= 2.0
Requires: python-glanceclient
-Requires: python-hacking >= 0.5.3
-Requires: python-mox
+Requires: python-hacking >= 0.5.6
+Requires: python-mock >= 1.0
+Requires: python-mox >= 0.5.3
Requires: python-nose
Requires: python-nose-exclude
Requires: python-nosehtmloutput >= 0.0.3
@@ -125,16 +127,16 @@
Requires: python-psycopg2
Requires: python-pyflakes >= 0.7.2
Requires: python-pysendfile >= 2.0.0
-Requires: python-requests
-Requires: python-testtools >= 0.9.22
-Requires: python-xattr >= 0.6.0
+Requires: python-requests >= 1.1
+Requires: python-testtools >= 0.9.32
+Requires: python-xattr >= 0.4
%description test
The OpenStack Glance testsuite. It is used to verify the functionality
of OpenStack Glance.
%prep
-%setup -q -n glance-2013.2.a165.g4164949
+%setup -q -n glance-2013.2.a179.g8c31de4
%patch2 -p1
%openstack_cleanup_prep
sed -i "s|^#!.*||" tools/migrate_image_owners.py # Fix non-executable script warning
++++++ glance-master.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/AUTHORS new/glance-2013.2.a179.g8c31de4/AUTHORS
--- old/glance-2013.2.a165.g4164949/AUTHORS 2013-09-14 08:31:00.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/AUTHORS 2013-09-26 02:26:50.000000000 +0200
@@ -43,6 +43,7 @@
Doug Hellmann <doug.hellmann(a)dreamhost.com>
Duncan McGreggor <duncan(a)dreamhost.com>
Eddie Sheffield <eddie.sheffield(a)rackspace.com>
+Edward Hope-Morley <edward.hope-morley(a)canonical.com>
Eldar Nugaev <enugaev(a)griddynamics.com>
Eoghan Glynn <eglynn(a)redhat.com>
Eric Windisch <eric(a)cloudscaling.com>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/ChangeLog new/glance-2013.2.a179.g8c31de4/ChangeLog
--- old/glance-2013.2.a165.g4164949/ChangeLog 2013-09-14 08:30:59.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/ChangeLog 2013-09-26 02:26:50.000000000 +0200
@@ -1,3 +1,140 @@
+commit 8c31de4d9a0451439dbe2342490cffd1387bc059
+Merge: 0513fcd 29d4383
+Author: Jenkins <jenkins(a)review.openstack.org>
+Date: Thu Sep 26 00:24:21 2013 +0000
+
+ Merge "Cache cleaner wrongly deletes cache for non invalid images"
+
+commit 29d4383b166a77595df1b2a24b02a5b2556aaba2
+Author: Fei Long Wang <flwang(a)cn.ibm.com>
+Date: Mon Sep 23 11:45:57 2013 +0800
+
+ Cache cleaner wrongly deletes cache for non invalid images
+
+ Based on current implement of method delete_stalled_files,
+ it's just deleting all the images located in /incomplete
+ instead of using the param 'older_than' to check if it
+ should be deleted. So this fix will use 'older_than' to
+ confirm brfore deleting.
+
+ Fixes bug 1228256
+
+ Change-Id: Ica27915f8b9b098ecae1e38c8e678d6acf4f2f76
+
+commit 0513fcd67d52422ec046f831692c1c36f61e00b0
+Merge: 4efd136 31681c5
+Author: Jenkins <jenkins(a)review.openstack.org>
+Date: Wed Sep 25 01:32:41 2013 +0000
+
+ Merge "Require oslo.config 1.2.0 final"
+
+commit 4efd136d5a85ef914a86736eee153dbd6c2c2846
+Merge: 58e6059 60ab0c8
+Author: Jenkins <jenkins(a)review.openstack.org>
+Date: Tue Sep 24 21:46:26 2013 +0000
+
+ Merge "Convert location meta data from pickle to string."
+
+commit 31681c58f7da6acc350695e2bfcc3574f1d82c02
+Author: Mark McLoughlin <markmc(a)redhat.com>
+Date: Tue Sep 24 21:01:42 2013 +0100
+
+ Require oslo.config 1.2.0 final
+
+ Now that 1.2.0 has been released, require it rather than one of the beta
+ release tarballs.
+
+ Closes-Bug: #1182861
+ Change-Id: I75ffc4a572d14488d19491a38742d6920951c171
+
+commit 58e6059ecfb1383efcb8c685f61eb2d01249a1d8
+Merge: 7d7bf3f dbfaf9a
+Author: Jenkins <jenkins(a)review.openstack.org>
+Date: Tue Sep 24 18:20:48 2013 +0000
+
+ Merge "Disallow access/modify members of deleted image"
+
+commit 7d7bf3f04b580fc9bfbeece9bd12418884d020cf
+Merge: 4f4b478 49c6948
+Author: Jenkins <jenkins(a)review.openstack.org>
+Date: Tue Sep 24 15:56:24 2013 +0000
+
+ Merge "Ensure prop protections are read/enforced in order"
+
+commit 49c69485e41d483abb18b689c65bd043b7a29695
+Author: Paul Bourke <paul-david.bourke(a)hp.com>
+Date: Thu Sep 12 12:52:10 2013 +0000
+
+ Ensure prop protections are read/enforced in order
+
+ Property protections need to be enforced in the order specified by the
+ configuration file. i.e. [^x_owner.*] should be enforced before [.*]
+ given the example config.
+
+ To achieve this, use a list of tuples to store the rules rather than a
+ dict, and also ensure to specify dict_type when parsing the
+ configuration file for python 2.6.
+
+ Fixes bug 1224449
+
+ Change-Id: Ib22cb34b7daef081c95717b55a991b8d613468c4
+
+commit 4f4b47803f3a7f820a6f68866fe7a36a37aff00e
+Author: sridevik <koushiksridevi8(a)gmail.com>
+Date: Fri Sep 13 00:44:01 2013 -0500
+
+ Funtional Tests should call glance.db.get_api
+
+ The test_registry , test_simple and test_sqlalchemy tests import the
+ modules directly instead of calling get_api of db/__init__.py
+ With the introduction of db_pool, they should use the get_api method.
+
+ Also adds a tear down to the ThreadPoolWrapper tests to fix jenkins
+ issues related to the CONF using tpool set to True in the tests.
+
+ Fixes Bug #1223167
+ Change-Id: I66e9f5fba449107ad92e895f6a9e550e0bcddf1c
+
+commit 4954ea5a09a39457eb362f81118bf7110f3fb6f9
+Merge: 26a47e7 a44517c
+Author: Jenkins <jenkins(a)review.openstack.org>
+Date: Fri Sep 20 02:11:59 2013 +0000
+
+ Merge "Adding encryption support for image multiple locations"
+
+commit a44517c51960df94e9402611e9f012684d7d5890
+Author: Zhi Yan Liu <zhiyanl(a)cn.ibm.com>
+Date: Tue Aug 27 23:00:09 2013 +0800
+
+ Adding encryption support for image multiple locations
+
+ Adding necessary encryption and decryption code to registry API v1
+ server and client side, in order to take care image's all locations but
+ single location only.
+
+ docImpact
+ Implement bp: image-location-status
+ Fixes bug: 1218712
+
+ Change-Id: I999426469c196da1094cc46b5237bf1bc2006877
+ Signed-off-by: Zhi Yan Liu <zhiyanl(a)cn.ibm.com>
+
+commit 26a47e77238e98b25d5943cfa7f24cb20304580c
+Author: sridevik <koushiksridevi8(a)gmail.com>
+Date: Mon Sep 16 06:29:24 2013 -0500
+
+ Respond with 410 after upload if image was deleted
+
+ When updating the image after upload, we should return an
+ HTTPGone instead of a 500 error if the image cannot
+ be found.
+ This will provide more information to nova when this occurs
+ during snapshotting.
+
+ Fixes bug #1217838
+
+ Change-Id: I6e9875a9ff95ed3e9c38685785473138327ad4a1
+
commit 4164949ce6834314186d46e7c71d0a0631d60d45
Merge: 272a223 71985de
Author: Jenkins <jenkins(a)review.openstack.org>
@@ -5,6 +142,17 @@
Merge "Convert non-English exception message when a store loading error"
+commit 60ab0c8c564af989882f0ea2609019ea7206e2b3
+Author: John Bresnahan <jbresnah(a)redhat.com>
+Date: Thu Sep 5 11:07:29 2013 -1000
+
+ Convert location meta data from pickle to string.
+
+ This patch fixes a potential security issue.
+ Fixes bug: 1213241
+
+ Change-Id: I6414d16ec72f26ceabbaf1364ad737f19f18381e
+
commit 272a223726fd059b023e3d9bfe9981b8c07f4955
Merge: c0c1436 677d1b0
Author: Jenkins <jenkins(a)review.openstack.org>
@@ -12,6 +160,21 @@
Merge "add missing index for 'owner' column on images table."
+commit dbfaf9aedb3d3f8f110322b73c66205e530826e9
+Author: Edward Hope-Morley <edward.hope-morley(a)canonical.com>
+Date: Fri Aug 2 15:11:06 2013 +0100
+
+ Disallow access/modify members of deleted image
+
+ It should not be possible to access or modify memberships for a
+ deleted image. A 404 error will now be returned if a deleted
+ images' members are accessed or modified.
+
+ Fixes: bug #1207266
+ Co-authored-by: Hirofumi Ichihara <ichihara.hirofumi(a)lab.ntt.co.jp>
+
+ Change-Id: I3e1a7c1cd96b8c85cf0c20286533ced510580492
+
commit c0c14368f41af4eb540a46c4bfd8a036a50e10ab
Author: Stuart McLaren <stuart.mclaren(a)hp.com>
Date: Wed Sep 11 13:07:22 2013 +0000
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/PKG-INFO new/glance-2013.2.a179.g8c31de4/PKG-INFO
--- old/glance-2013.2.a165.g4164949/PKG-INFO 2013-09-14 08:31:00.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/PKG-INFO 2013-09-26 02:26:50.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: glance
-Version: 2013.2.a165.g4164949
+Version: 2013.2.a179.g8c31de4
Summary: OpenStack Image Service
Home-page: http://www.openstack.org/
Author: OpenStack
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance/api/v1/members.py new/glance-2013.2.a179.g8c31de4/glance/api/v1/members.py
--- old/glance-2013.2.a165.g4164949/glance/api/v1/members.py 2013-09-14 08:28:46.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance/api/v1/members.py 2013-09-26 02:24:34.000000000 +0200
@@ -1,6 +1,7 @@
# vim: tabstop=4 shiftwidth=4 softtabstop=4
# Copyright 2012 OpenStack Foundation.
+# Copyright 2013 NTT corp.
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
@@ -44,6 +45,12 @@
except exception.Forbidden:
raise webob.exc.HTTPForbidden()
+ def _raise_404_if_image_deleted(self, req, image_id):
+ image = self.get_image_meta_or_404(req, image_id)
+ if image['status'] == 'deleted':
+ msg = _("Image with identifier %s has been deleted.") % image_id
+ raise webob.exc.HTTPNotFound(msg)
+
def index(self, req, image_id):
"""
Return a list of dictionaries indicating the members of the
@@ -59,6 +66,7 @@
]}
"""
self._enforce(req, 'get_members')
+ self._raise_404_if_image_deleted(req, image_id)
try:
members = registry.get_image_members(req.context, image_id)
@@ -79,6 +87,7 @@
"""
self._check_can_access_image_members(req.context)
self._enforce(req, 'delete_member')
+ self._raise_404_if_image_deleted(req, image_id)
try:
registry.delete_member(req.context, image_id, id)
@@ -114,6 +123,7 @@
"""
self._check_can_access_image_members(req.context)
self._enforce(req, 'modify_member')
+ self._raise_404_if_image_deleted(req, image_id)
# Figure out can_share
can_share = None
@@ -150,6 +160,7 @@
"""
self._check_can_access_image_members(req.context)
self._enforce(req, 'modify_member')
+ self._raise_404_if_image_deleted(req, image_id)
try:
registry.replace_members(req.context, image_id, body)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance/api/v2/image_data.py new/glance-2013.2.a179.g8c31de4/glance/api/v2/image_data.py
--- old/glance-2013.2.a165.g4164949/glance/api/v2/image_data.py 2013-09-14 08:28:46.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance/api/v2/image_data.py 2013-09-26 02:24:27.000000000 +0200
@@ -50,9 +50,19 @@
try:
image = image_repo.get(image_id)
image.status = 'saving'
- image_repo.save(image)
- image.set_data(data, size)
- image_repo.save(image)
+ try:
+ image_repo.save(image)
+ image.set_data(data, size)
+ image_repo.save(image)
+ except exception.NotFound as e:
+ msg = (_("Image %s could not be found after upload."
+ "The image may have been deleted during the upload: %s")
+ % (image_id, e))
+ LOG.warn(msg)
+ raise webob.exc.HTTPGone(explanation=msg,
+ request=req,
+ content_type='text/plain')
+
except ValueError as e:
LOG.debug("Cannot save data for image %s: %s", image_id, e)
raise webob.exc.HTTPBadRequest(explanation=unicode(e))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance/common/ordereddict.py new/glance-2013.2.a179.g8c31de4/glance/common/ordereddict.py
--- old/glance-2013.2.a165.g4164949/glance/common/ordereddict.py 1970-01-01 01:00:00.000000000 +0100
+++ new/glance-2013.2.a179.g8c31de4/glance/common/ordereddict.py 2013-09-26 02:24:27.000000000 +0200
@@ -0,0 +1,128 @@
+# Copyright (c) 2009 Raymond Hettinger
+#
+# Permission is hereby granted, free of charge, to any person
+# obtaining a copy of this software and associated documentation files
+# (the "Software"), to deal in the Software without restriction,
+# including without limitation the rights to use, copy, modify, merge,
+# publish, distribute, sublicense, and/or sell copies of the Software,
+# and to permit persons to whom the Software is furnished to do so,
+# subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+# OTHER DEALINGS IN THE SOFTWARE.
+
+from UserDict import DictMixin
+
+
+class OrderedDict(dict, DictMixin):
+
+ def __init__(self, *args, **kwds):
+ if len(args) > 1:
+ raise TypeError('expected at most 1 arguments, got %d' % len(args))
+ try:
+ self.__end
+ except AttributeError:
+ self.clear()
+ self.update(*args, **kwds)
+
+ def clear(self):
+ self.__end = end = []
+ end += [None, end, end] # sentinel node for doubly linked list
+ self.__map = {} # key --> [key, prev, next]
+ dict.clear(self)
+
+ def __setitem__(self, key, value):
+ if key not in self:
+ end = self.__end
+ curr = end[1]
+ curr[2] = end[1] = self.__map[key] = [key, curr, end]
+ dict.__setitem__(self, key, value)
+
+ def __delitem__(self, key):
+ dict.__delitem__(self, key)
+ key, prev, next = self.__map.pop(key)
+ prev[2] = next
+ next[1] = prev
+
+ def __iter__(self):
+ end = self.__end
+ curr = end[2]
+ while curr is not end:
+ yield curr[0]
+ curr = curr[2]
+
+ def __reversed__(self):
+ end = self.__end
+ curr = end[1]
+ while curr is not end:
+ yield curr[0]
+ curr = curr[1]
+
+ def popitem(self, last=True):
+ if not self:
+ raise KeyError('dictionary is empty')
+ if last:
+ key = reversed(self).next()
+ else:
+ key = iter(self).next()
+ value = self.pop(key)
+ return key, value
+
+ def __reduce__(self):
+ items = [[k, self[k]] for k in self]
+ tmp = self.__map, self.__end
+ del self.__map, self.__end
+ inst_dict = vars(self).copy()
+ self.__map, self.__end = tmp
+ if inst_dict:
+ return (self.__class__, (items,), inst_dict)
+ return self.__class__, (items,)
+
+ def keys(self):
+ return list(self)
+
+ setdefault = DictMixin.setdefault
+ update = DictMixin.update
+ pop = DictMixin.pop
+ values = DictMixin.values
+ items = DictMixin.items
+ iterkeys = DictMixin.iterkeys
+ itervalues = DictMixin.itervalues
+ iteritems = DictMixin.iteritems
+
+ def __repr__(self):
+ if not self:
+ return '%s()' % (self.__class__.__name__,)
+ return '%s(%r)' % (self.__class__.__name__, self.items())
+
+ def copy(self):
+ return self.__class__(self)
+
+ @classmethod
+ def fromkeys(cls, iterable, value=None):
+ d = cls()
+ for key in iterable:
+ d[key] = value
+ return d
+
+ def __eq__(self, other):
+ if isinstance(other, OrderedDict):
+ if len(self) != len(other):
+ return False
+ for p, q in zip(self.items(), other.items()):
+ if p != q:
+ return False
+ return True
+ return dict.__eq__(self, other)
+
+ def __ne__(self, other):
+ return not self == other
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance/common/property_utils.py new/glance-2013.2.a179.g8c31de4/glance/common/property_utils.py
--- old/glance-2013.2.a165.g4164949/glance/common/property_utils.py 2013-09-14 08:28:46.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance/common/property_utils.py 2013-09-26 02:24:27.000000000 +0200
@@ -20,9 +20,12 @@
from oslo.config import cfg
import webob.exc
+from glance.common.ordereddict import OrderedDict
from glance.openstack.common import log as logging
-CONFIG = ConfigParser.SafeConfigParser()
+# NOTE(bourke): The default dict_type is collections.OrderedDict in py27, but
+# we must set manually for compatibility with py26
+CONFIG = ConfigParser.SafeConfigParser(dict_type=OrderedDict)
LOG = logging.getLogger(__name__)
property_opts = [
@@ -44,7 +47,7 @@
class PropertyRules(object):
def __init__(self):
- self.rules = {}
+ self.rules = []
self._load_rules()
def _load_rules(self):
@@ -76,7 +79,7 @@
(operation, property_exp)))
LOG.warn(msg)
- self.rules[compiled_rule] = property_dict
+ self.rules.append((compiled_rule, property_dict))
def _compile_rule(self, rule):
try:
@@ -94,7 +97,7 @@
if action not in ['create', 'read', 'update', 'delete']:
return False
- for rule_exp, rule in self.rules.items():
+ for rule_exp, rule in self.rules:
if rule_exp.search(str(property_name)):
if set(roles).intersection(set(rule.get(action))):
return True
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance/db/sqlalchemy/migrate_repo/versions/029_location_meta_data_pickle_to_string.py new/glance-2013.2.a179.g8c31de4/glance/db/sqlalchemy/migrate_repo/versions/029_location_meta_data_pickle_to_string.py
--- old/glance-2013.2.a165.g4164949/glance/db/sqlalchemy/migrate_repo/versions/029_location_meta_data_pickle_to_string.py 1970-01-01 01:00:00.000000000 +0100
+++ new/glance-2013.2.a179.g8c31de4/glance/db/sqlalchemy/migrate_repo/versions/029_location_meta_data_pickle_to_string.py 2013-09-26 02:24:34.000000000 +0200
@@ -0,0 +1,75 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2013 Rackspace Hosting
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+import json
+import pickle
+
+import sqlalchemy
+from sqlalchemy import MetaData, Table, Column
+from glance.db.sqlalchemy import models
+
+
+def upgrade(migrate_engine):
+ meta = sqlalchemy.schema.MetaData(migrate_engine)
+ image_locations = Table('image_locations', meta, autoload=True)
+ new_meta_data = Column('storage_meta_data', models.JSONEncodedDict,
+ default={})
+ new_meta_data.create(image_locations)
+
+ noe = pickle.dumps({})
+ s = sqlalchemy.sql.select([image_locations]).\
+ where(image_locations.c.meta_data != noe)
+ conn = migrate_engine.connect()
+ res = conn.execute(s)
+
+ for row in res:
+ meta_data = row['meta_data']
+ x = pickle.loads(meta_data)
+ if x != {}:
+ stmt = image_locations.update().\
+ where(image_locations.c.id == row['id']).\
+ values(storage_meta_data=x)
+ conn.execute(stmt)
+ conn.close()
+ image_locations.columns['meta_data'].drop()
+ image_locations.columns['storage_meta_data'].alter(name='meta_data')
+
+
+def downgrade(migrate_engine):
+ meta = sqlalchemy.schema.MetaData(migrate_engine)
+ image_locations = Table('image_locations', meta, autoload=True)
+ old_meta_data = Column('old_meta_data', sqlalchemy.PickleType(),
+ default={})
+ old_meta_data.create(image_locations)
+
+ noj = json.dumps({})
+ s = sqlalchemy.sql.select([image_locations]).\
+ where(image_locations.c.meta_data != noj)
+ conn = migrate_engine.connect()
+ res = conn.execute(s)
+
+ for row in res:
+ x = row['meta_data']
+ meta_data = json.loads(x)
+ if meta_data != {}:
+ stmt = image_locations.update().\
+ where(image_locations.c.id == row['id']).\
+ values(old_meta_data=meta_data)
+ conn.execute(stmt)
+ conn.close()
+ image_locations.columns['meta_data'].drop()
+ image_locations.columns['old_meta_data'].alter(name='meta_data')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance/db/sqlalchemy/models.py new/glance-2013.2.a179.g8c31de4/glance/db/sqlalchemy/models.py
--- old/glance-2013.2.a165.g4164949/glance/db/sqlalchemy/models.py 2013-09-14 08:28:46.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance/db/sqlalchemy/models.py 2013-09-26 02:24:34.000000000 +0200
@@ -19,12 +19,14 @@
"""
SQLAlchemy models for glance data
"""
+import json
from sqlalchemy import Column, Integer, String, BigInteger
from sqlalchemy.ext.compiler import compiles
from sqlalchemy.ext.declarative import declarative_base
-from sqlalchemy import ForeignKey, DateTime, Boolean, Text, PickleType
+from sqlalchemy import ForeignKey, DateTime, Boolean, Text
from sqlalchemy.orm import relationship, backref, object_mapper
+from sqlalchemy.types import TypeDecorator
from sqlalchemy import Index, UniqueConstraint
from glance.openstack.common import timeutils
@@ -38,6 +40,22 @@
return 'INTEGER'
+class JSONEncodedDict(TypeDecorator):
+ """Represents an immutable structure as a json-encoded string"""
+
+ impl = Text
+
+ def process_bind_param(self, value, dialect):
+ if value is not None:
+ value = json.dumps(value)
+ return value
+
+ def process_result_value(self, value, dialect):
+ if value is not None:
+ value = json.loads(value)
+ return value
+
+
class ModelBase(object):
"""Base class for Nova and Glance Models"""
__table_args__ = {'mysql_engine': 'InnoDB'}
@@ -169,7 +187,7 @@
image_id = Column(String(36), ForeignKey('images.id'), nullable=False)
image = relationship(Image, backref=backref('locations'))
value = Column(Text(), nullable=False)
- meta_data = Column(PickleType(), default={})
+ meta_data = Column(JSONEncodedDict(), default={})
class ImageMember(BASE, ModelBase):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance/image_cache/drivers/sqlite.py new/glance-2013.2.a179.g8c31de4/glance/image_cache/drivers/sqlite.py
--- old/glance-2013.2.a165.g4164949/glance/image_cache/drivers/sqlite.py 2013-09-14 08:28:46.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance/image_cache/drivers/sqlite.py 2013-09-26 02:24:34.000000000 +0200
@@ -439,8 +439,15 @@
will be deleted.
"""
for path in self.get_cache_files(self.incomplete_dir):
- os.unlink(path)
- LOG.info(_("Removed stalled cache file %s"), path)
+ if os.path.getmtime(path) < older_than:
+ try:
+ os.unlink(path)
+ LOG.info(_("Removed stalled cache file %s"), path)
+ except Exception as e:
+ msg = (_("Failed to delete file %(path)s. "
+ "Got error: %(e)s") %
+ dict(path=path, e=e))
+ LOG.warn(msg)
def get_queued_images(self):
"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance/registry/client/v1/client.py new/glance-2013.2.a179.g8c31de4/glance/registry/client/v1/client.py
--- old/glance-2013.2.a165.g4164949/glance/registry/client/v1/client.py 2013-09-14 08:28:46.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance/registry/client/v1/client.py 2013-09-26 02:24:27.000000000 +0200
@@ -50,21 +50,38 @@
**kwargs)
def decrypt_metadata(self, image_metadata):
- if (self.metadata_encryption_key is not None and
- 'location' in image_metadata and
- image_metadata['location'] is not None):
- location = crypt.urlsafe_decrypt(self.metadata_encryption_key,
- image_metadata['location'])
- image_metadata['location'] = location
+ if self.metadata_encryption_key is not None:
+ if image_metadata.get('location'):
+ location = crypt.urlsafe_decrypt(self.metadata_encryption_key,
+ image_metadata['location'])
+ image_metadata['location'] = location
+ if image_metadata.get('location_data'):
+ ld = []
+ for loc in image_metadata['location_data']:
+ url = crypt.urlsafe_decrypt(self.metadata_encryption_key,
+ loc['url'])
+ ld.append({'url': url, 'metadata': loc['metadata']})
+ image_metadata['location_data'] = ld
return image_metadata
def encrypt_metadata(self, image_metadata):
- if (self.metadata_encryption_key is not None and
- 'location' in image_metadata and
- image_metadata['location'] is not None):
- location = crypt.urlsafe_encrypt(self.metadata_encryption_key,
- image_metadata['location'], 64)
- image_metadata['location'] = location
+ if self.metadata_encryption_key is not None:
+ location_url = image_metadata.get('location')
+ if location_url:
+ location = crypt.urlsafe_encrypt(self.metadata_encryption_key,
+ location_url,
+ 64)
+ image_metadata['location'] = location
+ if image_metadata.get('location_data'):
+ ld = []
+ for loc in image_metadata['location_data']:
+ if loc['url'] == location_url:
+ url = location
+ else:
+ url = crypt.urlsafe_encrypt(
+ self.metadata_encryption_key, loc['url'], 64)
+ ld.append({'url': url, 'metadata': loc['metadata']})
+ image_metadata['location_data'] = ld
return image_metadata
def get_images(self, **kwargs):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance/tests/functional/db/test_db_api.py new/glance-2013.2.a179.g8c31de4/glance/tests/functional/db/test_db_api.py
--- old/glance-2013.2.a165.g4164949/glance/tests/functional/db/test_db_api.py 2013-09-14 08:28:46.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance/tests/functional/db/test_db_api.py 2013-09-26 02:24:27.000000000 +0200
@@ -58,3 +58,7 @@
dbapi.method_for_test_1(1, 2, kwarg='arg')
tpool.execute.assert_called_with(method_for_test_1, 1, 2, kwarg='arg')
+
+ def tearDown(self):
+ super(ThreadPoolWrapper, self).tearDown()
+ CONF.set_override('use_tpool', False)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance/tests/functional/db/test_registry.py new/glance-2013.2.a179.g8c31de4/glance/tests/functional/db/test_registry.py
--- old/glance-2013.2.a165.g4164949/glance/tests/functional/db/test_registry.py 2013-09-14 08:28:46.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance/tests/functional/db/test_registry.py 2013-09-26 02:24:27.000000000 +0200
@@ -13,7 +13,7 @@
# License for the specific language governing permissions and limitations
# under the License.
-
+from glance.api import CONF
import glance.db.registry.api
from glance.db.sqlalchemy import api
from glance.db.sqlalchemy import models as db_models
@@ -24,7 +24,8 @@
def get_db(config):
config(sql_connection='sqlite://', verbose=False, debug=False)
- db_api = glance.db.registry.api
+ CONF.set_override('data_api', 'glance.db.registry.api')
+ db_api = glance.db.get_api()
db_api.setup_db_env()
return db_api
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance/tests/functional/db/test_simple.py new/glance-2013.2.a179.g8c31de4/glance/tests/functional/db/test_simple.py
--- old/glance-2013.2.a165.g4164949/glance/tests/functional/db/test_simple.py 2013-09-14 08:28:46.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance/tests/functional/db/test_simple.py 2013-09-26 02:24:27.000000000 +0200
@@ -13,14 +13,16 @@
# License for the specific language governing permissions and limitations
# under the License.
-
+from glance.api import CONF
import glance.db.simple.api
import glance.tests.functional.db as db_tests
from glance.tests.functional.db import base
def get_db(config):
- return glance.db.simple.api
+ CONF.set_override('data_api', 'glance.db.simple.api')
+ db_api = glance.db.get_api()
+ return db_api
def reset_db(db_api):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance/tests/functional/db/test_sqlalchemy.py new/glance-2013.2.a179.g8c31de4/glance/tests/functional/db/test_sqlalchemy.py
--- old/glance-2013.2.a165.g4164949/glance/tests/functional/db/test_sqlalchemy.py 2013-09-14 08:28:46.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance/tests/functional/db/test_sqlalchemy.py 2013-09-26 02:24:27.000000000 +0200
@@ -13,7 +13,7 @@
# License for the specific language governing permissions and limitations
# under the License.
-
+from glance.api import CONF
import glance.db.sqlalchemy.api
from glance.db.sqlalchemy import models as db_models
import glance.tests.functional.db as db_tests
@@ -22,7 +22,8 @@
def get_db(config):
config(sql_connection='sqlite://', verbose=False, debug=False)
- db_api = glance.db.sqlalchemy.api
+ CONF.set_override('data_api', 'glance.db.sqlalchemy.api')
+ db_api = glance.db.get_api()
db_api.setup_db_env()
db_api.get_engine()
return db_api
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance/tests/functional/v1/test_api.py new/glance-2013.2.a179.g8c31de4/glance/tests/functional/v1/test_api.py
--- old/glance-2013.2.a165.g4164949/glance/tests/functional/v1/test_api.py 2013-09-14 08:28:46.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance/tests/functional/v1/test_api.py 2013-09-26 02:24:34.000000000 +0200
@@ -61,6 +61,24 @@
- Remove a previously existing property.
10. PUT image
- Add a previously deleted property.
+ 11. PUT image/members/member1
+ - Add member1 to image
+ 12. PUT image/members/member2
+ - Add member2 to image
+ 13. GET image/members
+ - List image members
+ 14. DELETE image/members/member1
+ - Delete image member1
+ 15. DELETE image
+ - Delete image
+ 16. GET image/members
+ - List deleted image members
+ 17. PUT image/members/member2
+ - Update existing member2 of deleted image
+ 18. PUT image/members/member3
+ - Add member3 to deleted image
+ 19. DELETE image/members/member2
+ - Delete member2 from deleted image
"""
self.cleanup()
self.start_servers(**self.__dict__.copy())
@@ -265,11 +283,73 @@
self.assertEqual(data['properties']['distro'], "Ubuntu")
self.assertNotEqual(data['created_at'], data['updated_at'])
- # DELETE image
+ # 11. Add member to image
+ path = ("http://%s:%d/v1/images/%s/members/pattieblack" %
+ ("127.0.0.1", self.api_port, image_id))
+ http = httplib2.Http()
+ response, content = http.request(path, 'PUT')
+ self.assertEqual(response.status, 204)
+
+ # 12. Add member to image
+ path = ("http://%s:%d/v1/images/%s/members/pattiewhite" %
+ ("127.0.0.1", self.api_port, image_id))
+ http = httplib2.Http()
+ response, content = http.request(path, 'PUT')
+ self.assertEqual(response.status, 204)
+
+ # 13. List image members
+ path = ("http://%s:%d/v1/images/%s/members" %
+ ("127.0.0.1", self.api_port, image_id))
+ http = httplib2.Http()
+ response, content = http.request(path, 'GET')
+ self.assertEqual(response.status, 200)
+ data = json.loads(content)
+ self.assertEqual(len(data['members']), 2)
+ self.assertEqual(data['members'][0]['member_id'], 'pattieblack')
+ self.assertEqual(data['members'][1]['member_id'], 'pattiewhite')
+
+ # 14. Delete image member
+ path = ("http://%s:%d/v1/images/%s/members/pattieblack" %
+ ("127.0.0.1", self.api_port, image_id))
+ http = httplib2.Http()
+ response, content = http.request(path, 'DELETE')
+ self.assertEqual(response.status, 204)
+
+ # 15. DELETE image
path = "http://%s:%d/v1/images/%s" % ("127.0.0.1", self.api_port,
image_id)
http = httplib2.Http()
response, content = http.request(path, 'DELETE')
self.assertEqual(response.status, 200)
+ # 16. Try to list members of deleted image
+ path = ("http://%s:%d/v1/images/%s/members" %
+ ("127.0.0.1", self.api_port, image_id))
+ http = httplib2.Http()
+ response, content = http.request(path, 'GET')
+ self.assertEqual(response.status, 404)
+
+ # 17. Try to update member of deleted image
+ path = ("http://%s:%d/v1/images/%s/members" %
+ ("127.0.0.1", self.api_port, image_id))
+ http = httplib2.Http()
+ fixture = [{'member_id': 'pattieblack', 'can_share': 'false'}]
+ body = json.dumps(dict(memberships=fixture))
+ response, content = http.request(path, 'PUT', body=body)
+ self.assertEqual(response.status, 404)
+
+ # 18. Try to add member to deleted image
+ path = ("http://%s:%d/v1/images/%s/members/chickenpattie" %
+ ("127.0.0.1", self.api_port, image_id))
+ http = httplib2.Http()
+ response, content = http.request(path, 'PUT')
+ self.assertEqual(response.status, 404)
+
+ # 19. Try to delete member of deleted image
+ path = ("http://%s:%d/v1/images/%s/members/pattieblack" %
+ ("127.0.0.1", self.api_port, image_id))
+ http = httplib2.Http()
+ response, content = http.request(path, 'DELETE')
+ self.assertEqual(response.status, 404)
+
self.stop_servers()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance/tests/unit/common/test_property_utils.py new/glance-2013.2.a179.g8c31de4/glance/tests/unit/common/test_property_utils.py
--- old/glance-2013.2.a165.g4164949/glance/tests/unit/common/test_property_utils.py 2013-09-14 08:28:46.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance/tests/unit/common/test_property_utils.py 2013-09-26 02:24:27.000000000 +0200
@@ -18,6 +18,17 @@
from glance.common import property_utils
from glance.tests import utils
+CONFIG_SECTIONS = [
+ '^x_owner_.*',
+ 'spl_create_prop',
+ 'spl_read_prop',
+ 'spl_read_only_prop',
+ 'spl_update_prop',
+ 'spl_update_only_prop',
+ 'spl_delete_prop',
+ '.*'
+]
+
class TestPropertyRules(utils.BaseTestCase):
@@ -149,3 +160,21 @@
self.rules_checker = property_utils.PropertyRules()
self.assertFalse(self.rules_checker.check_property_rules('test_prop',
'delete', ['member']))
+
+ def test_property_config_loaded_in_order(self):
+ """
+ Verify the order of loaded config sections matches that from the
+ configuration file
+ """
+ self.rules_checker = property_utils.PropertyRules()
+ self.assertEqual(property_utils.CONFIG.sections(), CONFIG_SECTIONS)
+
+ def test_property_rules_loaded_in_order(self):
+ """
+ Verify rules are iterable in the same order as read from the config
+ file
+ """
+ self.rules_checker = property_utils.PropertyRules()
+ for i in xrange(len(property_utils.CONFIG.sections())):
+ self.assertEqual(property_utils.CONFIG.sections()[i],
+ self.rules_checker.rules[i][0].pattern)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance/tests/unit/test_image_cache.py new/glance-2013.2.a179.g8c31de4/glance/tests/unit/test_image_cache.py
--- old/glance-2013.2.a165.g4164949/glance/tests/unit/test_image_cache.py 2013-09-14 08:28:46.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance/tests/unit/test_image_cache.py 2013-09-26 02:24:34.000000000 +0200
@@ -16,10 +16,12 @@
# under the License.
from contextlib import contextmanager
+import datetime
import hashlib
import os
import StringIO
import tempfile
+import time
import fixtures
import stubout
@@ -148,6 +150,35 @@
self.assertFalse(os.path.exists(incomplete_file_path))
@skip_if_disabled
+ def test_clean_stalled_nonzero_stall_time(self):
+ """
+ Test the clean method removes the stalled images as expected
+ """
+ incomplete_file_path_1 = os.path.join(self.cache_dir,
+ 'incomplete', '1')
+ incomplete_file_path_2 = os.path.join(self.cache_dir,
+ 'incomplete', '2')
+ for f in (incomplete_file_path_1, incomplete_file_path_2):
+ incomplete_file = open(f, 'w')
+ incomplete_file.write(FIXTURE_DATA)
+ incomplete_file.close()
+
+ mtime = os.path.getmtime(incomplete_file_path_1)
+ pastday = datetime.datetime.fromtimestamp(mtime) - \
+ datetime.timedelta(days=1)
+ atime = int(time.mktime(pastday.timetuple()))
+ mtime = atime
+ os.utime(incomplete_file_path_1, (atime, mtime))
+
+ self.assertTrue(os.path.exists(incomplete_file_path_1))
+ self.assertTrue(os.path.exists(incomplete_file_path_2))
+
+ self.cache.clean(stall_time=3600)
+
+ self.assertFalse(os.path.exists(incomplete_file_path_1))
+ self.assertTrue(os.path.exists(incomplete_file_path_2))
+
+ @skip_if_disabled
def test_prune(self):
"""
Test that pruning the cache works as expected...
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance/tests/unit/test_migrations.py new/glance-2013.2.a179.g8c31de4/glance/tests/unit/test_migrations.py
--- old/glance-2013.2.a165.g4164949/glance/tests/unit/test_migrations.py 2013-09-14 08:28:46.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance/tests/unit/test_migrations.py 2013-09-26 02:24:34.000000000 +0200
@@ -28,6 +28,7 @@
import commands
import ConfigParser
import datetime
+import json
import os
import pickle
import urlparse
@@ -935,3 +936,60 @@
if idx.name == owner_index]
self.assertNotIn((owner_index, columns), index_data)
+
+ def _pre_upgrade_029(self, engine):
+ image_locations = get_table(engine, 'image_locations')
+
+ meta_data = {'somelist': ['a', 'b', 'c'], 'avalue': 'hello',
+ 'adict': {}}
+
+ now = datetime.datetime.now()
+ image_id = 'fake_029_id'
+ url = 'file:///some/place/onthe/fs029'
+
+ images = get_table(engine, 'images')
+ temp = dict(deleted=False,
+ created_at=now,
+ updated_at=now,
+ status='active',
+ is_public=True,
+ min_disk=0,
+ min_ram=0,
+ id=image_id)
+ images.insert().values(temp).execute()
+
+ pickle_md = pickle.dumps(meta_data)
+ temp = dict(deleted=False,
+ created_at=now,
+ updated_at=now,
+ image_id=image_id,
+ value=url,
+ meta_data=pickle_md)
+ image_locations.insert().values(temp).execute()
+
+ return meta_data, image_id
+
+ def _check_029(self, engine, data):
+ meta_data = data[0]
+ image_id = data[1]
+ image_locations = get_table(engine, 'image_locations')
+
+ records = image_locations.select().\
+ where(image_locations.c.image_id == image_id).execute().fetchall()
+
+ for r in records:
+ d = json.loads(r['meta_data'])
+ self.assertEqual(d, meta_data)
+
+ def _post_downgrade_029(self, engine):
+ image_id = 'fake_029_id'
+
+ image_locations = get_table(engine, 'image_locations')
+
+ records = image_locations.select().\
+ where(image_locations.c.image_id == image_id).execute().fetchall()
+
+ for r in records:
+ md = r['meta_data']
+ d = pickle.loads(md)
+ self.assertEqual(type(d), dict)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance/tests/unit/v1/test_api.py new/glance-2013.2.a179.g8c31de4/glance/tests/unit/v1/test_api.py
--- old/glance-2013.2.a165.g4164949/glance/tests/unit/v1/test_api.py 2013-09-14 08:28:46.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance/tests/unit/v1/test_api.py 2013-09-26 02:24:34.000000000 +0200
@@ -2033,6 +2033,88 @@
res = req.get_response(self.api)
self.assertEquals(res.status_int, webob.exc.HTTPNoContent.code)
+ def test_get_members_of_deleted_image_raises_404(self):
+ """
+ Tests members listing for deleted image raises 404.
+ """
+ req = webob.Request.blank("/images/%s" % UUID2)
+ req.method = 'DELETE'
+ res = req.get_response(self.api)
+ self.assertEquals(res.status_int, 200)
+
+ req = webob.Request.blank('/images/%s/members' % UUID2)
+ req.method = 'GET'
+
+ res = req.get_response(self.api)
+ self.assertEquals(res.status_int, webob.exc.HTTPNotFound.code)
+ self.assertTrue(
+ 'Image with identifier %s has been deleted.' % UUID2 in res.body)
+
+ def test_delete_member_of_deleted_image_raises_404(self):
+ """
+ Tests deleting members of deleted image raises 404.
+ """
+ test_router = router.API(self.mapper)
+ self.api = test_utils.FakeAuthMiddleware(test_router, is_admin=True)
+ req = webob.Request.blank("/images/%s" % UUID2)
+ req.method = 'DELETE'
+ res = req.get_response(self.api)
+ self.assertEquals(res.status_int, 200)
+
+ req = webob.Request.blank('/images/%s/members/pattieblack' % UUID2)
+ req.method = 'DELETE'
+
+ res = req.get_response(self.api)
+ self.assertEquals(res.status_int, webob.exc.HTTPNotFound.code)
+ self.assertTrue(
+ 'Image with identifier %s has been deleted.' % UUID2 in res.body)
+
+ def test_update_members_of_deleted_image_raises_404(self):
+ """
+ Tests update members of deleted image raises 404.
+ """
+ test_router = router.API(self.mapper)
+ self.api = test_utils.FakeAuthMiddleware(test_router, is_admin=True)
+
+ req = webob.Request.blank('/images/%s/members/pattieblack' % UUID2)
+ req.method = 'PUT'
+ res = req.get_response(self.api)
+ self.assertEquals(res.status_int, 204)
+
+ req = webob.Request.blank("/images/%s" % UUID2)
+ req.method = 'DELETE'
+ res = req.get_response(self.api)
+ self.assertEquals(res.status_int, 200)
+
+ fixture = [{'member_id': 'pattieblack', 'can_share': 'false'}]
+ req = webob.Request.blank('/images/%s/members' % UUID2)
+ req.method = 'PUT'
+ req.content_type = 'application/json'
+ req.body = json.dumps(dict(memberships=fixture))
+ res = req.get_response(self.api)
+ self.assertEquals(res.status_int, webob.exc.HTTPNotFound.code)
+ self.assertTrue(
+ 'Image with identifier %s has been deleted.' % UUID2 in res.body)
+
+ def test_create_member_to_deleted_image_raises_404(self):
+ """
+ Tests adding members to deleted image raises 404.
+ """
+ test_router = router.API(self.mapper)
+ self.api = test_utils.FakeAuthMiddleware(test_router, is_admin=True)
+ req = webob.Request.blank("/images/%s" % UUID2)
+ req.method = 'DELETE'
+ res = req.get_response(self.api)
+ self.assertEquals(res.status_int, 200)
+
+ req = webob.Request.blank('/images/%s/members/pattieblack' % UUID2)
+ req.method = 'PUT'
+
+ res = req.get_response(self.api)
+ self.assertEquals(res.status_int, webob.exc.HTTPNotFound.code)
+ self.assertTrue(
+ 'Image with identifier %s has been deleted.' % UUID2 in res.body)
+
def test_delete_member(self):
"""
Tests deleting image members raises right exception
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance/tests/unit/v1/test_registry_api.py new/glance-2013.2.a179.g8c31de4/glance/tests/unit/v1/test_registry_api.py
--- old/glance-2013.2.a165.g4164949/glance/tests/unit/v1/test_registry_api.py 2013-09-14 08:28:46.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance/tests/unit/v1/test_registry_api.py 2013-09-26 02:24:27.000000000 +0200
@@ -27,6 +27,7 @@
import glance.api.common
import glance.common.config
+from glance.common import crypt
import glance.context
from glance.db.sqlalchemy import api as db_api
from glance.db.sqlalchemy import models as db_models
@@ -2672,7 +2673,8 @@
image['location_data'][0])
self.assertEqual(self.FIXTURES[0]['locations'][0]['url'],
image['location_data'][0]['url'])
- self.assertEqual(image['location_data'][0]['metadata'], {})
+ self.assertEqual(self.FIXTURES[0]['locations'][0]['metadata'],
+ image['location_data'][0]['metadata'])
def test_show_from_location_data(self):
req = webob.Request.blank('/images/%s' % UUID2)
@@ -2686,3 +2688,61 @@
image['location_data'][0]['url'])
self.assertEqual(self.FIXTURES[1]['locations'][0]['metadata'],
image['location_data'][0]['metadata'])
+
+ def test_create_from_location_data_with_encryption(self):
+ encryption_key = '1234567890123456'
+ location_url1 = "file:///%s/%s" % (self.test_dir, _gen_uuid())
+ location_url2 = "file:///%s/%s" % (self.test_dir, _gen_uuid())
+ encrypted_location_url1 = crypt.urlsafe_encrypt(encryption_key,
+ location_url1, 64)
+ encrypted_location_url2 = crypt.urlsafe_encrypt(encryption_key,
+ location_url2, 64)
+ fixture = {'name': 'fake image #3',
+ 'status': 'active',
+ 'disk_format': 'vhd',
+ 'container_format': 'ovf',
+ 'is_public': True,
+ 'checksum': None,
+ 'min_disk': 5,
+ 'min_ram': 256,
+ 'size': 19,
+ 'location': encrypted_location_url1,
+ 'location_data': [{'url': encrypted_location_url1,
+ 'metadata': {'key': 'value'}},
+ {'url': encrypted_location_url2,
+ 'metadata': {'key': 'value'}}]}
+
+ self.config(metadata_encryption_key=encryption_key)
+ req = webob.Request.blank('/images')
+ req.method = 'POST'
+ req.content_type = 'application/json'
+ req.body = json.dumps(dict(image=fixture))
+
+ res = req.get_response(self.api)
+ self.assertEquals(res.status_int, 200)
+ res_dict = json.loads(res.body)
+ image = res_dict['image']
+ # NOTE(zhiyan) _normalize_image_location_for_db() function will
+ # not re-encrypted the url within location.
+ self.assertEqual(fixture['location'], image['location'])
+ self.assertEqual(len(image['location_data']), 2)
+ self.assertEqual(fixture['location_data'][0]['url'],
+ image['location_data'][0]['url'])
+ self.assertEqual(fixture['location_data'][0]['metadata'],
+ image['location_data'][0]['metadata'])
+ self.assertEqual(fixture['location_data'][1]['url'],
+ image['location_data'][1]['url'])
+ self.assertEqual(fixture['location_data'][1]['metadata'],
+ image['location_data'][1]['metadata'])
+
+ image_entry = db_api.image_get(self.context, image['id'])
+ self.assertEqual(image_entry['locations'][0]['url'],
+ encrypted_location_url1)
+ self.assertEqual(image_entry['locations'][1]['url'],
+ encrypted_location_url2)
+ decrypted_location_url1 = crypt.urlsafe_decrypt(
+ encryption_key, image_entry['locations'][0]['url'])
+ decrypted_location_url2 = crypt.urlsafe_decrypt(
+ encryption_key, image_entry['locations'][1]['url'])
+ self.assertEqual(location_url1, decrypted_location_url1)
+ self.assertEqual(location_url2, decrypted_location_url2)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance/tests/unit/v1/test_registry_client.py new/glance-2013.2.a179.g8c31de4/glance/tests/unit/v1/test_registry_client.py
--- old/glance-2013.2.a165.g4164949/glance/tests/unit/v1/test_registry_client.py 2013-09-14 08:28:46.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance/tests/unit/v1/test_registry_client.py 2013-09-26 02:24:27.000000000 +0200
@@ -1068,6 +1068,36 @@
self.assertEquals(new_image['location_data'][0]['url'], location)
self.assertEquals(new_image['location_data'][0]['metadata'], loc_meta)
+ def test_add_image_with_location_data_with_encryption(self):
+ """Tests that we can add image metadata with properties and
+ enable encryption.
+ """
+ self.client.metadata_encryption_key = '1234567890123456'
+
+ location = "file:///tmp/glance-tests/%d"
+ loc_meta = {'key': 'value'}
+ fixture = {'name': 'fake public image',
+ 'is_public': True,
+ 'disk_format': 'vmdk',
+ 'container_format': 'ovf',
+ 'size': 19,
+ 'location_data': [{'url': location % 1,
+ 'metadata': loc_meta},
+ {'url': location % 2,
+ 'metadata': {}}],
+ 'properties': {'distro': 'Ubuntu 10.04 LTS'}}
+
+ new_image = self.client.add_image(fixture)
+
+ self.assertEquals(new_image['location'], location % 1)
+ self.assertEquals(len(new_image['location_data']), 2)
+ self.assertEquals(new_image['location_data'][0]['url'], location % 1)
+ self.assertEquals(new_image['location_data'][0]['metadata'], loc_meta)
+ self.assertEquals(new_image['location_data'][1]['url'], location % 2)
+ self.assertEquals(new_image['location_data'][1]['metadata'], {})
+
+ self.client.metadata_encryption_key = None
+
def test_add_image_already_exists(self):
"""Tests proper exception is raised if image with ID already exists"""
fixture = {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance/tests/unit/v2/test_image_data_resource.py new/glance-2013.2.a179.g8c31de4/glance/tests/unit/v2/test_image_data_resource.py
--- old/glance-2013.2.a165.g4164949/glance/tests/unit/v2/test_image_data_resource.py 2013-09-14 08:28:46.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance/tests/unit/v2/test_image_data_resource.py 2013-09-26 02:24:27.000000000 +0200
@@ -164,7 +164,18 @@
self.assertRaises(webob.exc.HTTPBadRequest, self.controller.upload,
request, unit_test_utils.UUID1, 'YYYY', 4)
- def test_upload_non_existent_image(self):
+ def test_upload_non_existent_image_during_save(self):
+ def fake_save(self):
+ raise exception.NotFound()
+
+ request = unit_test_utils.get_fake_request()
+ image = FakeImage('abcd', locations=['http://example.com/image'])
+ self.image_repo.result = image
+ self.image_repo.save = fake_save
+ self.assertRaises(webob.exc.HTTPGone, self.controller.upload,
+ request, uuidutils.generate_uuid(), 'ABC', 3)
+
+ def test_upload_non_existent_image_before_save(self):
request = unit_test_utils.get_fake_request()
self.image_repo.result = exception.NotFound()
self.assertRaises(webob.exc.HTTPNotFound, self.controller.upload,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance.egg-info/PKG-INFO new/glance-2013.2.a179.g8c31de4/glance.egg-info/PKG-INFO
--- old/glance-2013.2.a165.g4164949/glance.egg-info/PKG-INFO 2013-09-14 08:31:00.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance.egg-info/PKG-INFO 2013-09-26 02:26:50.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: glance
-Version: 2013.2.a165.g4164949
+Version: 2013.2.a179.g8c31de4
Summary: OpenStack Image Service
Home-page: http://www.openstack.org/
Author: OpenStack
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance.egg-info/SOURCES.txt new/glance-2013.2.a179.g8c31de4/glance.egg-info/SOURCES.txt
--- old/glance-2013.2.a165.g4164949/glance.egg-info/SOURCES.txt 2013-09-14 08:31:00.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance.egg-info/SOURCES.txt 2013-09-26 02:26:50.000000000 +0200
@@ -106,6 +106,7 @@
glance/common/config.py
glance/common/crypt.py
glance/common/exception.py
+glance/common/ordereddict.py
glance/common/property_utils.py
glance/common/rpc.py
glance/common/utils.py
@@ -163,6 +164,7 @@
glance/db/sqlalchemy/migrate_repo/versions/026_add_location_storage_information.py
glance/db/sqlalchemy/migrate_repo/versions/027_checksum_index.py
glance/db/sqlalchemy/migrate_repo/versions/028_owner_index.py
+glance/db/sqlalchemy/migrate_repo/versions/029_location_meta_data_pickle_to_string.py
glance/db/sqlalchemy/migrate_repo/versions/__init__.py
glance/domain/__init__.py
glance/domain/proxy.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance.egg-info/dependency_links.txt new/glance-2013.2.a179.g8c31de4/glance.egg-info/dependency_links.txt
--- old/glance-2013.2.a165.g4164949/glance.egg-info/dependency_links.txt 2013-09-14 08:31:00.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance.egg-info/dependency_links.txt 2013-09-26 02:26:50.000000000 +0200
@@ -1 +1 @@
-http://tarballs.openstack.org/oslo.config/oslo.config-1.2.0a3.tar.gz#egg=oslo.config-1.2.0a3
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/glance.egg-info/requires.txt new/glance-2013.2.a179.g8c31de4/glance.egg-info/requires.txt
--- old/glance-2013.2.a165.g4164949/glance.egg-info/requires.txt 2013-09-14 08:31:00.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/glance.egg-info/requires.txt 2013-09-26 02:26:50.000000000 +0200
@@ -13,7 +13,7 @@
kombu>=2.4.8
pycrypto>=2.6
iso8601>=0.1.4
-oslo.config>=1.2.0a3
+oslo.config>=1.2.0
python-swiftclient>=1.2
lxml>=2.3
Paste
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glance-2013.2.a165.g4164949/requirements.txt new/glance-2013.2.a179.g8c31de4/requirements.txt
--- old/glance-2013.2.a165.g4164949/requirements.txt 2013-09-14 08:28:46.000000000 +0200
+++ new/glance-2013.2.a179.g8c31de4/requirements.txt 2013-09-26 02:24:34.000000000 +0200
@@ -20,9 +20,7 @@
kombu>=2.4.8
pycrypto>=2.6
iso8601>=0.1.4
-
--f http://tarballs.openstack.org/oslo.config/oslo.config-1.2.0a3.tar.gz#egg=os…
-oslo.config>=1.2.0a3
+oslo.config>=1.2.0
# For Swift storage backend.
python-swiftclient>=1.2
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-commit+help(a)opensuse.org
1
0
Hello community,
here is the log from the commit of package libmtp for openSUSE:13.1 checked in at 2013-09-29 19:27:17
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:13.1/libmtp (Old)
and /work/SRC/openSUSE:13.1/.libmtp.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libmtp"
Changes:
--------
--- /work/SRC/openSUSE:13.1/libmtp/libmtp.changes 2013-09-23 10:57:50.000000000 +0200
+++ /work/SRC/openSUSE:13.1/.libmtp.new/libmtp.changes 2013-09-29 19:27:24.000000000 +0200
@@ -1,0 +2,7 @@
+Fri Sep 27 19:54:22 UTC 2013 - rmilasan(a)suse.com
+
+- Use LIBMTP_ERROR instead of LIBMTP_INFO function in mtpz_loaddata
+ (mtpz.c) to dont get junk in the udev rule when generating the rule.
+ add: mtpz-use-LIBMTP_ERROR-instead-of-LIBMTP_INFO.patch
+
+-------------------------------------------------------------------
New:
----
mtpz-use-LIBMTP_ERROR-instead-of-LIBMTP_INFO.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ libmtp.spec ++++++
--- /var/tmp/diff_new_pack.poc0Ik/_old 2013-09-29 19:27:24.000000000 +0200
+++ /var/tmp/diff_new_pack.poc0Ik/_new 2013-09-29 19:27:24.000000000 +0200
@@ -30,6 +30,7 @@
Release: 0
%define sonum 9
Source0: http://downloads.sourceforge.net/project/%{name}/%{name}/%{version}/%{name}…
+Patch0: mtpz-use-LIBMTP_ERROR-instead-of-LIBMTP_INFO.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-build
%define _udevrulesdir %(pkg-config --variable=udevdir udev)/rules.d
%define _udevdir %(pkg-config --variable=udevdir udev)
@@ -75,6 +76,7 @@
%prep
%setup -q
+%patch0 -p1
%build
%configure --with-udev=%{_udevdir} --disable-static --enable-doxygen
++++++ mtpz-use-LIBMTP_ERROR-instead-of-LIBMTP_INFO.patch ++++++
Index: libmtp-1.1.6/src/mtpz.c
===================================================================
--- libmtp-1.1.6.orig/src/mtpz.c
+++ libmtp-1.1.6/src/mtpz.c
@@ -119,7 +119,7 @@ int mtpz_loaddata()
char *home = getenv("HOME");
if (!home)
{
- LIBMTP_INFO("Unable to determine user's home directory, MTPZ disabled");
+ LIBMTP_ERROR("Unable to determine user's home directory, MTPZ disabled");
return -1;
}
@@ -130,7 +130,7 @@ int mtpz_loaddata()
FILE *fdata = fopen(path, "r");
if (!fdata)
{
- LIBMTP_INFO("Unable to open ~/.mtpz-data for reading, MTPZ disabled.");
+ LIBMTP_ERROR("Unable to open ~/.mtpz-data for reading, MTPZ disabled.");
return -1;
}
@@ -138,7 +138,7 @@ int mtpz_loaddata()
MTPZ_PUBLIC_EXPONENT = (unsigned char *)fgets_strip((char *)malloc(8), 8, fdata);
if (!MTPZ_PUBLIC_EXPONENT)
{
- LIBMTP_INFO("Unable to read MTPZ public exponent from ~/.mtpz-data, MTPZ disabled");
+ LIBMTP_ERROR("Unable to read MTPZ public exponent from ~/.mtpz-data, MTPZ disabled");
return -1;
}
@@ -146,20 +146,20 @@ int mtpz_loaddata()
char *hexenckey = (unsigned char *)fgets_strip((char *)malloc(35), 35, fdata);
if (!hexenckey)
{
- LIBMTP_INFO("Unable to read MTPZ encryption key from ~/.mtpz-data, MTPZ disabled");
+ LIBMTP_ERROR("Unable to read MTPZ encryption key from ~/.mtpz-data, MTPZ disabled");
return -1;
}
MTPZ_ENCRYPTION_KEY = hex_to_bytes(hexenckey, strlen(hexenckey));
if (!MTPZ_ENCRYPTION_KEY)
{
- LIBMTP_INFO("Unable to read MTPZ encryption key from ~/.mtpz-data, MTPZ disabled");
+ LIBMTP_ERROR("Unable to read MTPZ encryption key from ~/.mtpz-data, MTPZ disabled");
}
// Should only be 256 characters in length, but fgets will encounter a newline and stop.
MTPZ_MODULUS = (unsigned char *)fgets_strip((char *)malloc(260), 260, fdata);
if (!MTPZ_MODULUS)
{
- LIBMTP_INFO("Unable to read MTPZ modulus from ~/.mtpz-data, MTPZ disabled");
+ LIBMTP_ERROR("Unable to read MTPZ modulus from ~/.mtpz-data, MTPZ disabled");
return -1;
}
@@ -167,7 +167,7 @@ int mtpz_loaddata()
MTPZ_PRIVATE_KEY = (unsigned char *)fgets_strip((char *)malloc(260), 260, fdata);
if (!MTPZ_PRIVATE_KEY)
{
- LIBMTP_INFO("Unable to read MTPZ private key from ~/.mtpz-data, MTPZ disabled");
+ LIBMTP_ERROR("Unable to read MTPZ private key from ~/.mtpz-data, MTPZ disabled");
return -1;
}
@@ -175,13 +175,13 @@ int mtpz_loaddata()
char *hexcerts = fgets_strip((char *)malloc(1260), 1260, fdata);
if (!hexcerts)
{
- LIBMTP_INFO("Unable to read MTPZ certificates from ~/.mtpz-data, MTPZ disabled");
+ LIBMTP_ERROR("Unable to read MTPZ certificates from ~/.mtpz-data, MTPZ disabled");
return -1;
}
MTPZ_CERTIFICATES = hex_to_bytes(hexcerts, strlen(hexcerts));
if (!MTPZ_CERTIFICATES)
{
- LIBMTP_INFO("Unable to parse MTPZ certificates from ~/.mtpz-data, MTPZ disabled");
+ LIBMTP_ERROR("Unable to parse MTPZ certificates from ~/.mtpz-data, MTPZ disabled");
return -1;
}
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-commit+help(a)opensuse.org
1
0
Hello community,
here is the log from the commit of package libmtp for openSUSE:Factory checked in at 2013-09-29 19:27:09
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libmtp (Old)
and /work/SRC/openSUSE:Factory/.libmtp.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libmtp"
Changes:
--------
--- /work/SRC/openSUSE:Factory/libmtp/libmtp.changes 2013-03-18 07:07:33.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.libmtp.new/libmtp.changes 2013-09-29 19:27:11.000000000 +0200
@@ -1,0 +2,7 @@
+Fri Sep 27 19:54:22 UTC 2013 - rmilasan(a)suse.com
+
+- Use LIBMTP_ERROR instead of LIBMTP_INFO function in mtpz_loaddata
+ (mtpz.c) to dont get junk in the udev rule when generating the rule.
+ add: mtpz-use-LIBMTP_ERROR-instead-of-LIBMTP_INFO.patch
+
+-------------------------------------------------------------------
New:
----
mtpz-use-LIBMTP_ERROR-instead-of-LIBMTP_INFO.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ libmtp.spec ++++++
--- /var/tmp/diff_new_pack.0y6Are/_old 2013-09-29 19:27:12.000000000 +0200
+++ /var/tmp/diff_new_pack.0y6Are/_new 2013-09-29 19:27:12.000000000 +0200
@@ -30,6 +30,7 @@
Release: 0
%define sonum 9
Source0: http://downloads.sourceforge.net/project/%{name}/%{name}/%{version}/%{name}…
+Patch0: mtpz-use-LIBMTP_ERROR-instead-of-LIBMTP_INFO.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-build
%define _udevrulesdir %(pkg-config --variable=udevdir udev)/rules.d
%define _udevdir %(pkg-config --variable=udevdir udev)
@@ -75,6 +76,7 @@
%prep
%setup -q
+%patch0 -p1
%build
%configure --with-udev=%{_udevdir} --disable-static --enable-doxygen
++++++ mtpz-use-LIBMTP_ERROR-instead-of-LIBMTP_INFO.patch ++++++
Index: libmtp-1.1.6/src/mtpz.c
===================================================================
--- libmtp-1.1.6.orig/src/mtpz.c
+++ libmtp-1.1.6/src/mtpz.c
@@ -119,7 +119,7 @@ int mtpz_loaddata()
char *home = getenv("HOME");
if (!home)
{
- LIBMTP_INFO("Unable to determine user's home directory, MTPZ disabled");
+ LIBMTP_ERROR("Unable to determine user's home directory, MTPZ disabled");
return -1;
}
@@ -130,7 +130,7 @@ int mtpz_loaddata()
FILE *fdata = fopen(path, "r");
if (!fdata)
{
- LIBMTP_INFO("Unable to open ~/.mtpz-data for reading, MTPZ disabled.");
+ LIBMTP_ERROR("Unable to open ~/.mtpz-data for reading, MTPZ disabled.");
return -1;
}
@@ -138,7 +138,7 @@ int mtpz_loaddata()
MTPZ_PUBLIC_EXPONENT = (unsigned char *)fgets_strip((char *)malloc(8), 8, fdata);
if (!MTPZ_PUBLIC_EXPONENT)
{
- LIBMTP_INFO("Unable to read MTPZ public exponent from ~/.mtpz-data, MTPZ disabled");
+ LIBMTP_ERROR("Unable to read MTPZ public exponent from ~/.mtpz-data, MTPZ disabled");
return -1;
}
@@ -146,20 +146,20 @@ int mtpz_loaddata()
char *hexenckey = (unsigned char *)fgets_strip((char *)malloc(35), 35, fdata);
if (!hexenckey)
{
- LIBMTP_INFO("Unable to read MTPZ encryption key from ~/.mtpz-data, MTPZ disabled");
+ LIBMTP_ERROR("Unable to read MTPZ encryption key from ~/.mtpz-data, MTPZ disabled");
return -1;
}
MTPZ_ENCRYPTION_KEY = hex_to_bytes(hexenckey, strlen(hexenckey));
if (!MTPZ_ENCRYPTION_KEY)
{
- LIBMTP_INFO("Unable to read MTPZ encryption key from ~/.mtpz-data, MTPZ disabled");
+ LIBMTP_ERROR("Unable to read MTPZ encryption key from ~/.mtpz-data, MTPZ disabled");
}
// Should only be 256 characters in length, but fgets will encounter a newline and stop.
MTPZ_MODULUS = (unsigned char *)fgets_strip((char *)malloc(260), 260, fdata);
if (!MTPZ_MODULUS)
{
- LIBMTP_INFO("Unable to read MTPZ modulus from ~/.mtpz-data, MTPZ disabled");
+ LIBMTP_ERROR("Unable to read MTPZ modulus from ~/.mtpz-data, MTPZ disabled");
return -1;
}
@@ -167,7 +167,7 @@ int mtpz_loaddata()
MTPZ_PRIVATE_KEY = (unsigned char *)fgets_strip((char *)malloc(260), 260, fdata);
if (!MTPZ_PRIVATE_KEY)
{
- LIBMTP_INFO("Unable to read MTPZ private key from ~/.mtpz-data, MTPZ disabled");
+ LIBMTP_ERROR("Unable to read MTPZ private key from ~/.mtpz-data, MTPZ disabled");
return -1;
}
@@ -175,13 +175,13 @@ int mtpz_loaddata()
char *hexcerts = fgets_strip((char *)malloc(1260), 1260, fdata);
if (!hexcerts)
{
- LIBMTP_INFO("Unable to read MTPZ certificates from ~/.mtpz-data, MTPZ disabled");
+ LIBMTP_ERROR("Unable to read MTPZ certificates from ~/.mtpz-data, MTPZ disabled");
return -1;
}
MTPZ_CERTIFICATES = hex_to_bytes(hexcerts, strlen(hexcerts));
if (!MTPZ_CERTIFICATES)
{
- LIBMTP_INFO("Unable to parse MTPZ certificates from ~/.mtpz-data, MTPZ disabled");
+ LIBMTP_ERROR("Unable to parse MTPZ certificates from ~/.mtpz-data, MTPZ disabled");
return -1;
}
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-commit+help(a)opensuse.org
1
0