dvcs history fixes
authorRadek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>
Tue, 25 Oct 2011 09:56:05 +0000 (11:56 +0200)
committerRadek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>
Tue, 25 Oct 2011 09:56:05 +0000 (11:56 +0200)
apps/catalogue/models/book.py
apps/catalogue/templatetags/wall.py
apps/dvcs/models.py
apps/wiki/views.py

index 2a0d552..76381b8 100755 (executable)
@@ -198,7 +198,7 @@ class Book(models.Model):
             chunk.commit('')
 
         for i in range(len(other)):
             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()
 
         assert not other.chunk_set.exists()
         other.delete()
index 5236eed..b3e94df 100755 (executable)
@@ -30,7 +30,7 @@ class WallItem(object):
 
 
 def changes_wall(user, max_len):
 
 
 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))
     qs = qs.select_related('author', 'tree', 'tree__book__title')
     if user:
         qs = qs.filter(Q(author=user) | Q(tree__user=user))
index 3991efc..d7816fa 100644 (file)
@@ -307,7 +307,7 @@ class Document(models.Model):
         return self.head
 
     def history(self):
         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(
 
     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):
         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():
         if changes.exists():
-            return changes.order_by('-created_at')[0]
+            return changes.order_by('-revision')[0]
         else:
             return None
 
         else:
             return None
 
@@ -331,7 +331,9 @@ class Document(models.Model):
 
         assert self != other
         other_revs = other.change_set.all().count()
 
         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()
         other.change_set.all().update(tree=self)
         assert not other.change_set.exists()
         other.delete()
index 4d9fac9..d99bca6 100644 (file)
@@ -265,7 +265,7 @@ def history(request, chunk_id):
         return HttpResponseForbidden("Not authorized.")
 
     changes = []
         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,
         changes.append({
                 "version": change.revision,
                 "description": change.description,