aboutsummaryrefslogtreecommitdiffstats
path: root/layerindex/views.py
diff options
context:
space:
mode:
authorPaul Eggleton <paul.eggleton@linux.intel.com>2013-05-25 13:39:17 +0100
committerPaul Eggleton <paul.eggleton@linux.intel.com>2013-06-03 10:59:10 +0100
commitd1b875a76b18d0593dc5cc4cbaf1787e8ae5b5c5 (patch)
tree38e7d72def2d7edb1c348bffdc1c2377b4f23dd8 /layerindex/views.py
parent5a07f0422d8ae13f79aae3471ba8a305c4460b3c (diff)
downloadopenembedded-core-contrib-d1b875a76b18d0593dc5cc4cbaf1787e8ae5b5c5.tar.gz
Improve history collection and add link to history page
Save individual field changes into revision comment and display this comment on the history page. Now we're ready to add a link at the bottom of every page so the history is easily visible. Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Diffstat (limited to 'layerindex/views.py')
-rw-r--r--layerindex/views.py43
1 files changed, 43 insertions, 0 deletions
diff --git a/layerindex/views.py b/layerindex/views.py
index e64c446c02..4150cc3d44 100644
--- a/layerindex/views.py
+++ b/layerindex/views.py
@@ -25,6 +25,8 @@ from django.contrib.auth.decorators import login_required
from reversion.models import Revision
import simplesearch
import settings
+from django.dispatch import receiver
+import reversion
def edit_layernote_view(request, template_name, slug, pk=None):
@@ -339,3 +341,44 @@ class EditProfileFormView(UpdateView):
def get_success_url(self):
return reverse('frontpage')
+
+
+@receiver(reversion.pre_revision_commit)
+def annotate_revision(sender, **kwargs):
+ ignorefields = ['vcs_last_rev', 'vcs_last_fetch', 'vcs_last_commit']
+ versions = kwargs.pop('versions')
+ instances = kwargs.pop('instances')
+ changelist = []
+ for ver, inst in zip(versions, instances):
+ currentVersion = ver.field_dict
+ modelmeta = ver.content_type.model_class()._meta
+ if ver.type == reversion.models.VERSION_DELETE:
+ changelist.append("Deleted %s: %s" % (modelmeta.verbose_name.lower(), ver.object_repr))
+ else:
+ pastver = reversion.get_for_object(inst)
+ if pastver and ver.type != reversion.models.VERSION_ADD:
+ pastVersion = pastver[0].field_dict
+ changes = set(currentVersion.items()) - set(pastVersion.items())
+ changedVars = [var[0] for var in changes]
+ fieldchanges = []
+ for field in changedVars:
+ if field not in ignorefields:
+ modelfield = modelmeta.get_field(field)
+ newvalue = currentVersion[field]
+ if modelfield.choices:
+ for v in modelfield.choices:
+ if v[0] == newvalue:
+ newvalue = v[1]
+ break
+ fieldchanges.append("%s to '%s'" % (modelfield.verbose_name.lower(), newvalue))
+ if fieldchanges:
+ changelist.append("Changed %s %s %s" % (modelmeta.verbose_name.lower(), ver.object_repr, ", ".join(fieldchanges)))
+ else:
+ changelist.append("Added %s: %s" % (modelmeta.verbose_name.lower(), ver.object_repr))
+ comment = '\n'.join(changelist)
+ if not comment:
+ comment = 'No changes'
+ revision = kwargs.pop('revision')
+ revision.comment = comment
+ revision.save()
+ kwargs['revision'] = revision