X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/c601bf6ac7304192cac242965217b7c089f37f8d..1be132dc9f105e745e979ec6eaeb8d7bc86089f1:/apps/dvcs/models.py diff --git a/apps/dvcs/models.py b/apps/dvcs/models.py index 3991efc8..2526028f 100644 --- a/apps/dvcs/models.py +++ b/apps/dvcs/models.py @@ -6,7 +6,7 @@ from django.core.files.base import ContentFile 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.utils.translation import string_concat, ugettext_lazy as _ from mercurial import mdiff, simplemerge from django.conf import settings @@ -26,8 +26,6 @@ class Tag(models.Model): class Meta: abstract = True ordering = ['ordering'] - verbose_name = _("tag") - verbose_name_plural = _("tags") def __unicode__(self): return self.name @@ -99,8 +97,6 @@ class Change(models.Model): abstract = True ordering = ('created_at',) unique_together = ['tree', 'revision'] - verbose_name = _("change") - verbose_name_plural = _("changes") def __unicode__(self): return u"Id: %r, Tree %r, Parent %r, Data: %s" % (self.id, self.tree_id, self.parent_id, self.data) @@ -170,11 +166,17 @@ class Change(models.Model): post_publishable.send(sender=self, publishable=publishable) + + def create_tag_model(model): name = model.__name__ + 'Tag' class Meta(Tag.Meta): app_label = model._meta.app_label + verbose_name = string_concat(_("tag"), " ", _("for:"), " ", + model._meta.verbose_name) + verbose_name_plural = string_concat(_("tags"), " ", _("for:"), " ", + model._meta.verbose_name) attrs = { '__module__': model.__module__, @@ -189,6 +191,10 @@ def create_change_model(model): class Meta(Change.Meta): app_label = model._meta.app_label + verbose_name = string_concat(_("change"), " ", _("for:"), " ", + model._meta.verbose_name) + verbose_name_plural = string_concat(_("changes"), " ", _("for:"), " ", + model._meta.verbose_name) attrs = { '__module__': model.__module__, @@ -307,7 +313,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 +325,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 +337,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()