X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/ce8d791a5298e0cb2569034aec4c8b57afac97b2..c601bf6ac7304192cac242965217b7c089f37f8d:/apps/dvcs/models.py diff --git a/apps/dvcs/models.py b/apps/dvcs/models.py index ab5f77d9..3991efc8 100644 --- a/apps/dvcs/models.py +++ b/apps/dvcs/models.py @@ -4,13 +4,13 @@ import os.path from django.contrib.auth.models import User from django.core.files.base import ContentFile from django.core.files.storage import FileSystemStorage -from django.db import models +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 django.conf import settings -from dvcs.signals import post_commit +from dvcs.signals import post_commit, post_publishable from dvcs.storage import GzipFileSystemStorage @@ -51,7 +51,7 @@ class Tag(models.Model): Returns None for the last stage. """ try: - return Tag.objects.filter(ordering__gt=self.ordering)[0] + return type(self).objects.filter(ordering__gt=self.ordering)[0] except IndexError: return None @@ -125,7 +125,7 @@ class Change(models.Model): if self.revision is None: tree_rev = self.tree.revision() if tree_rev is None: - self.revision = 0 + self.revision = 1 else: self.revision = tree_rev + 1 return super(Change, self).save(*args, **kwargs) @@ -167,7 +167,7 @@ class Change(models.Model): def set_publishable(self, publishable): self.publishable = publishable self.save() - post_publishable(sender=self, publishable=publishable).send() + post_publishable.send(sender=self, publishable=publishable) def create_tag_model(model): @@ -324,3 +324,14 @@ class Document(models.Model): return changes.order_by('-created_at')[0] else: return None + + @transaction.commit_on_success + def prepend_history(self, other): + """Takes over the the other document's history and prepends to own.""" + + assert self != other + other_revs = other.change_set.all().count() + self.change_set.all().update(revision=models.F('revision') + other_revs) + other.change_set.all().update(tree=self) + assert not other.change_set.exists() + other.delete()