Editor fixes
[redakcja.git] / apps / dvcs / models.py
index 3991efc..eba2c38 100644 (file)
@@ -7,7 +7,7 @@ from django.core.files.storage import FileSystemStorage
 from django.db import models, transaction
 from django.db.models.base import ModelBase
 from django.utils.translation import ugettext_lazy as _
 from django.db import models, transaction
 from django.db.models.base import ModelBase
 from django.utils.translation import ugettext_lazy as _
-from mercurial import mdiff, simplemerge
+from mercurial import simplemerge
 
 from django.conf import settings
 from dvcs.signals import post_commit, post_publishable
 
 from django.conf import settings
 from dvcs.signals import post_commit, post_publishable
@@ -45,7 +45,7 @@ class Tag(models.Model):
     def listener_changed(sender, instance, **kwargs):
         sender._object_cache = {}
 
     def listener_changed(sender, instance, **kwargs):
         sender._object_cache = {}
 
-    def next(self):
+    def get_next(self):
         """
             Returns the next tag - stage to work on.
             Returns None for the last stage.
         """
             Returns the next tag - stage to work on.
             Returns None for the last stage.
@@ -176,6 +176,10 @@ def create_tag_model(model):
     class Meta(Tag.Meta):
         app_label = model._meta.app_label
 
     class Meta(Tag.Meta):
         app_label = model._meta.app_label
 
+    if hasattr(model, 'TagMeta'):
+        for attr, value in model.TagMeta.__dict__.items():
+            setattr(Meta, attr, value)
+
     attrs = {
         '__module__': model.__module__,
         'Meta': Meta,
     attrs = {
         '__module__': model.__module__,
         'Meta': Meta,
@@ -280,7 +284,7 @@ class Document(models.Model):
         tags = kwargs.get('tags', [])
         if tags:
             # set stage to next tag after the commited one
         tags = kwargs.get('tags', [])
         if tags:
             # set stage to next tag after the commited one
-            self.stage = max(tags, key=lambda t: t.ordering).next()
+            self.stage = max(tags, key=lambda t: t.ordering).get_next()
 
         change = self.change_set.create(author=author,
                     author_name=author_name,
 
         change = self.change_set.create(author=author,
                     author_name=author_name,
@@ -307,7 +311,7 @@ class Document(models.Model):
         return self.head
 
     def history(self):
         return self.head
 
     def history(self):
-        return self.change_set.filter(revision__gt=-1)
+        return self.change_set.all().order_by('revision')
 
     def revision(self):
         rev = self.change_set.aggregate(
 
     def revision(self):
         rev = self.change_set.aggregate(
@@ -319,9 +323,9 @@ class Document(models.Model):
         return self.change_set.get(revision=rev)
 
     def publishable(self):
         return self.change_set.get(revision=rev)
 
     def publishable(self):
-        changes = self.change_set.filter(publishable=True)
+        changes = self.history().filter(publishable=True)
         if changes.exists():
         if changes.exists():
-            return changes.order_by('-created_at')[0]
+            return changes.order_by('-revision')[0]
         else:
             return None
 
         else:
             return None
 
@@ -331,7 +335,9 @@ class Document(models.Model):
 
         assert self != other
         other_revs = other.change_set.all().count()
 
         assert self != other
         other_revs = other.change_set.all().count()
-        self.change_set.all().update(revision=models.F('revision') + other_revs)
+        # workaround for a non-atomic UPDATE in SQLITE
+        self.change_set.all().update(revision=0-models.F('revision'))
+        self.change_set.all().update(revision=other_revs - models.F('revision'))
         other.change_set.all().update(tree=self)
         assert not other.change_set.exists()
         other.delete()
         other.change_set.all().update(tree=self)
         assert not other.change_set.exists()
         other.delete()