Added upload_document managment command.
[redakcja.git] / lib / wlrepo / mercurial_backend / library.py
index 219a01d..82b5263 100644 (file)
@@ -96,6 +96,8 @@ class MercurialLibrary(wlrepo.Library):
         return self.document_for_rev(self.fulldocid(docid, user))
 
     def get_revision(self, revid):
+        revid = self._sanitize_string(revid)
+        
         ctx = self._changectx(revid)
 
         if ctx is None:
@@ -107,6 +109,9 @@ class MercurialLibrary(wlrepo.Library):
         return MercurialRevision(self, ctx)
 
     def fulldocid(self, docid, user=None):
+        docid = self._sanitize_string(docid)
+        user = self._sanitize_string(user)
+        
         fulldocid = ''
         if user is not None:
             fulldocid += '$user:' + user
@@ -122,11 +127,13 @@ class MercurialLibrary(wlrepo.Library):
             return False
 
     def document_create(self, docid):
+        docid = self._sanitize_string(docid)
+        
         # check if it already exists
         fullid = self.fulldocid(docid)
 
         if self.has_revision(fullid):
-            raise LibraryException("Document already exists!");
+            raise wlrepo.DocumentAlreadyExists("Document %s already exists!" % docid);
 
         # doesn't exist
         self._create_branch(fullid)
@@ -140,11 +147,11 @@ class MercurialLibrary(wlrepo.Library):
     # Locking
     #
 
-    def _lock(self, write_mode=False):
+    def lock(self, write_mode=False):
         return self._hgrepo.wlock() # no support for read/write mode yet
 
     def _transaction(self, write_mode, action):
-        lock = self._lock(write_mode)
+        lock = self.lock(write_mode)
         try:
             return action(self)
         finally:
@@ -192,6 +199,9 @@ class MercurialLibrary(wlrepo.Library):
     def _changectx(self, nodeid):
         return self._hgrepo.changectx(nodeid)
 
+    def _rollback(self):
+        return self._hgrepo.rollback()
+
     #
     # BASIC BRANCH routines
     #
@@ -241,6 +251,9 @@ class MercurialLibrary(wlrepo.Library):
 
     @staticmethod
     def _sanitize_string(s):
+        if s is None:
+            return None
+
         if isinstance(s, unicode):
             s = s.encode('utf-8')