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,
}
"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()
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());
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.")
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()