From: Ɓukasz Rekucki Date: Sat, 26 Sep 2009 17:30:58 +0000 (+0200) Subject: Fixed text updating for UTF-8 strings. X-Git-Url: https://git.mdrn.pl/redakcja.git/commitdiff_plain/a13dbb38931d9248376d92016d1c457d5a4adbde Fixed text updating for UTF-8 strings. --- diff --git a/apps/api/handlers/library_handlers.py b/apps/api/handlers/library_handlers.py index 552eb6f6..5f844dba 100644 --- a/apps/api/handlers/library_handlers.py +++ b/apps/api/handlers/library_handlers.py @@ -143,9 +143,9 @@ class DocumentHandler(BaseHandler): result = { 'name': udoc.id, - 'html_url': reverse('dochtml_view', args=[doc.id,doc.revision]), - 'text_url': reverse('doctext_view', args=[doc.id,doc.revision]), - 'dc_url': reverse('docdc_view', args=[doc.id,doc.revision]), + 'html_url': reverse('dochtml_view', args=[udoc.id,udoc.revision]), + 'text_url': reverse('doctext_view', args=[udoc.id,udoc.revision]), + 'dc_url': reverse('docdc_view', args=[udoc.id,udoc.revision]), 'user_revision': udoc.revision, 'public_revision': doc.revision, } @@ -215,15 +215,19 @@ class DocumentTextHandler(BaseHandler): "provided_revision": orig.revision, "latest_revision": current.revision }) - ndoc = doc.quickwrite('xml', data, msg) + ndoc = current.quickwrite('xml', data, msg) - # return the new revision number - return { - "document": ndoc.id, - "subview": "xml", - "previous_revision": prev, - "updated_revision": ndoc.revision - } + try: + # return the new revision number + return { + "document": ndoc.id, + "subview": "xml", + "previous_revision": current.revision, + "updated_revision": ndoc.revision + } + except Exception, e: + lib.rollback() + raise e except (RevisionNotFound, KeyError): return response.EntityNotFound().django_response() diff --git a/lib/wlrepo/mercurial_backend/__init__.py b/lib/wlrepo/mercurial_backend/__init__.py index 2815881b..c1d3d30f 100644 --- a/lib/wlrepo/mercurial_backend/__init__.py +++ b/lib/wlrepo/mercurial_backend/__init__.py @@ -20,7 +20,7 @@ class MercurialRevision(wlrepo.Revision): idx = branchname.find("$doc:") if(idx < 0): raise ValueError("Revision %s is not a valid document revision." % changectx.hex()); - self._username = branchname[0:idx] + self._username = branchname[6:idx] self._docname = branchname[idx+5:] else: raise ValueError("Revision %s is not a valid document revision." % changectx.hex()); diff --git a/lib/wlrepo/mercurial_backend/document.py b/lib/wlrepo/mercurial_backend/document.py index c7f2f9f7..6cf8a5bf 100644 --- a/lib/wlrepo/mercurial_backend/document.py +++ b/lib/wlrepo/mercurial_backend/document.py @@ -15,6 +15,14 @@ class MercurialDocument(wlrepo.Document): def quickwrite(self, entry, data, msg, user=None): user = user or self.owner + + if isinstance(data, unicode): + data = data.encode('utf-8') + + user = self._library._sanitize_string(user) + msg = self._library._sanitize_string(msg) + entry = self._library._sanitize_string(entry) + if user is None: raise ValueError("Can't determine user.") @@ -38,7 +46,12 @@ class MercurialDocument(wlrepo.Document): ops(self._library, entry_path) message, user = before_commit(self) self._library._commit(message, user) - return self._library.document(docid=self.id, user=self.owner) + try: + return self._library.document(docid=self.id, user=user) + except Exception, e: + # rollback the last commit + self._library.rollback() + raise e finally: lock.release() diff --git a/lib/wlrepo/mercurial_backend/library.py b/lib/wlrepo/mercurial_backend/library.py index 82b5263f..7a33bf38 100644 --- a/lib/wlrepo/mercurial_backend/library.py +++ b/lib/wlrepo/mercurial_backend/library.py @@ -255,9 +255,6 @@ class MercurialLibrary(wlrepo.Library): return None if isinstance(s, unicode): - s = s.encode('utf-8') - - if ' ' in s: - raise ValueError('Whitespace is forbidden!') + s = s.encode('utf-8') return s \ No newline at end of file