chunk.commit('')
for i in range(len(other)):
- self[i].prepend_history(other[i])
+ self[i].prepend_history(other[0])
assert not other.chunk_set.exists()
other.delete()
def changes_wall(user, max_len):
- qs = Chunk.change_model.objects.filter(revision__gt=-1).order_by('-created_at')
+ qs = Chunk.change_model.objects.order_by('-created_at')
qs = qs.select_related('author', 'tree', 'tree__book__title')
if user:
qs = qs.filter(Q(author=user) | Q(tree__user=user))
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(
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
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()
return HttpResponseForbidden("Not authorized.")
changes = []
- for change in doc.history().order_by('-created_at'):
+ for change in doc.history().reverse():
changes.append({
"version": change.revision,
"description": change.description,