--- a/.hgtags Tue Oct 22 11:59:39 2013 +0200
+++ b/.hgtags Thu Oct 24 12:36:12 2013 +0200
@@ -313,3 +313,6 @@
909eb8b584c437b3d2580beff1325c3d5b5dcfb5 cubicweb-debian-version-3.17.8-1
5668d210e49c910180ff27712b6ae9ce8286e06c cubicweb-version-3.17.9
5668d210e49c910180ff27712b6ae9ce8286e06c cubicweb-debian-version-3.17.9-1
+fe0e1863a13772836f40f743cc6fe4865f288ed3 cubicweb-centos-version-3.17.10-1
+fe0e1863a13772836f40f743cc6fe4865f288ed3 cubicweb-version-3.17.10
+fe0e1863a13772836f40f743cc6fe4865f288ed3 cubicweb-debian-version-3.17.10-1
--- a/__pkginfo__.py Tue Oct 22 11:59:39 2013 +0200
+++ b/__pkginfo__.py Thu Oct 24 12:36:12 2013 +0200
@@ -22,7 +22,7 @@
modname = distname = "cubicweb"
-numversion = (3, 17, 9)
+numversion = (3, 17, 10)
version = '.'.join(str(num) for num in numversion)
description = "a repository of entities / relations for knowledge management"
--- a/cubicweb.spec Tue Oct 22 11:59:39 2013 +0200
+++ b/cubicweb.spec Thu Oct 24 12:36:12 2013 +0200
@@ -7,7 +7,7 @@
%endif
Name: cubicweb
-Version: 3.17.8
+Version: 3.17.10
Release: logilab.1%{?dist}
Summary: CubicWeb is a semantic web application framework
Source0: http://download.logilab.org/pub/cubicweb/cubicweb-%{version}.tar.gz
--- a/dbapi.py Tue Oct 22 11:59:39 2013 +0200
+++ b/dbapi.py Thu Oct 24 12:36:12 2013 +0200
@@ -223,7 +223,7 @@
puri = urlparse(database)
method = puri.scheme.lower()
if method == 'inmemory':
- config = cwconfig.instance_configuration(puri.path)
+ config = cwconfig.instance_configuration(puri.netloc)
else:
config = cwconfig.CubicWebNoAppConfiguration()
repo = get_repository(database, config=config)
--- a/debian/changelog Tue Oct 22 11:59:39 2013 +0200
+++ b/debian/changelog Thu Oct 24 12:36:12 2013 +0200
@@ -1,3 +1,9 @@
+cubicweb (3.17.10-1) unstable; urgency=low
+
+ * new upstream release
+
+ -- Julien Cristau <julien.cristau@logilab.fr> Wed, 23 Oct 2013 17:23:45 +0200
+
cubicweb (3.17.9-1) unstable; urgency=low
* new upstream release
--- a/server/sources/native.py Tue Oct 22 11:59:39 2013 +0200
+++ b/server/sources/native.py Thu Oct 24 12:36:12 2013 +0200
@@ -757,8 +757,10 @@
if ex.__class__.__name__ == 'IntegrityError':
# need string comparison because of various backends
for arg in ex.args:
- # postgres and sqlserver
- mo = re.search('"unique_cw_[^ ]+"', arg)
+ if 'SQL Server' in arg:
+ mo = re.search("'unique_cw_[^ ]+'", arg)
+ else: # postgres
+ mo = re.search('"unique_cw_[^ ]+"', arg)
if mo is not None:
index_name = mo.group(0)[1:-1] # eat the surrounding " pair
elements = index_name.split('_cw_')[1:]
--- a/sobjects/notification.py Tue Oct 22 11:59:39 2013 +0200
+++ b/sobjects/notification.py Thu Oct 24 12:36:12 2013 +0200
@@ -128,26 +128,34 @@
# since the same view (eg self) may be called multiple time and we
# need a fresh stream at each iteration, reset it explicitly
self.w = None
- # XXX call render before subject to set .row/.col attributes on the
- # view
try:
- content = self.render(row=0, col=0, **kwargs)
- subject = self.subject()
- except SkipEmail:
- continue
- except Exception as ex:
- # shouldn't make the whole transaction fail because of rendering
- # error (unauthorized or such) XXX check it doesn't actually
- # occurs due to rollback on such error
- self.exception(str(ex))
- continue
- msg = format_mail(self.user_data, [emailaddr], content, subject,
- config=self._cw.vreg.config, msgid=msgid, references=refs)
- yield [emailaddr], msg
- if isinstance(something, Entity):
- self._cw.commit()
- self._cw.close()
- self._cw = req
+ # XXX call render before subject to set .row/.col attributes on the
+ # view
+ try:
+ content = self.render(row=0, col=0, **kwargs)
+ subject = self.subject()
+ except SkipEmail:
+ continue
+ except Exception as ex:
+ # shouldn't make the whole transaction fail because of rendering
+ # error (unauthorized or such) XXX check it doesn't actually
+ # occurs due to rollback on such error
+ self.exception(str(ex))
+ continue
+ msg = format_mail(self.user_data, [emailaddr], content, subject,
+ config=self._cw.vreg.config, msgid=msgid, references=refs)
+ yield [emailaddr], msg
+ except:
+ if isinstance(something, Entity):
+ self._cw.rollback()
+ raise
+ else:
+ if isinstance(something, Entity):
+ self._cw.commit()
+ finally:
+ if isinstance(something, Entity):
+ self._cw.close()
+ self._cw = req
# restore language
req.set_language(origlang)
--- a/web/webctl.py Tue Oct 22 11:59:39 2013 +0200
+++ b/web/webctl.py Thu Oct 24 12:36:12 2013 +0200
@@ -87,10 +87,10 @@
resources.update(osp.join(rel_dirpath, f) for f in filenames)
# locate resources and copy them to destination
for resource in resources:
- dirname = osp.dirname(resource)
- dest_resource = osp.join(dest, dirname)
- if not osp.isdir(dest_resource):
- os.makedirs(dest_resource)
+ dest_resource = osp.join(dest, resource)
+ dirname = osp.dirname(dest_resource)
+ if not osp.isdir(dirname):
+ os.makedirs(dirname)
resource_dir, resource_path = config.locate_resource(resource)
copy(osp.join(resource_dir, resource_path), dest_resource)
# handle md5 version subdirectory