From e5ba4e015ad743e8581275272c61a660f32d9fed Mon Sep 17 00:00:00 2001 From: Radek Czajka Date: Tue, 25 Oct 2011 11:56:05 +0200 Subject: [PATCH] dvcs history fixes --- apps/catalogue/models/book.py | 2 +- apps/catalogue/templatetags/wall.py | 2 +- apps/dvcs/models.py | 10 ++++++---- apps/wiki/views.py | 2 +- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/apps/catalogue/models/book.py b/apps/catalogue/models/book.py index 2a0d552f..76381b84 100755 --- a/apps/catalogue/models/book.py +++ b/apps/catalogue/models/book.py @@ -198,7 +198,7 @@ class Book(models.Model): 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() diff --git a/apps/catalogue/templatetags/wall.py b/apps/catalogue/templatetags/wall.py index 5236eedf..b3e94dfe 100755 --- a/apps/catalogue/templatetags/wall.py +++ b/apps/catalogue/templatetags/wall.py @@ -30,7 +30,7 @@ class WallItem(object): 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)) diff --git a/apps/dvcs/models.py b/apps/dvcs/models.py index 3991efc8..d7816fa7 100644 --- a/apps/dvcs/models.py +++ b/apps/dvcs/models.py @@ -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() diff --git a/apps/wiki/views.py b/apps/wiki/views.py index 4d9fac9b..d99bca61 100644 --- a/apps/wiki/views.py +++ b/apps/wiki/views.py @@ -265,7 +265,7 @@ def history(request, chunk_id): 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, -- 2.20.1