X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/c601bf6ac7304192cac242965217b7c089f37f8d..6c7d6a5cf471f39a5e8f8e4f42fb428fb4c42e4e:/apps/dvcs/models.py?ds=sidebyside diff --git a/apps/dvcs/models.py b/apps/dvcs/models.py index 3991efc8..cf8d75dc 100644 --- a/apps/dvcs/models.py +++ b/apps/dvcs/models.py @@ -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 mercurial import mdiff, simplemerge +from mercurial import simplemerge 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 next(self): + def get_next(self): """ Returns the next tag - stage to work on. Returns None for the last stage. @@ -280,7 +280,7 @@ class Document(models.Model): 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, @@ -307,7 +307,7 @@ class Document(models.Model): 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( @@ -319,9 +319,9 @@ class Document(models.Model): 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(): - return changes.order_by('-created_at')[0] + return changes.order_by('-revision')[0] else: return None @@ -331,7 +331,9 @@ class Document(models.Model): 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()