diff options
author | Paul Eggleton <paul.eggleton@linux.intel.com> | 2013-05-25 13:39:17 +0100 |
---|---|---|
committer | Paul Eggleton <paul.eggleton@linux.intel.com> | 2013-06-03 10:59:10 +0100 |
commit | d1b875a76b18d0593dc5cc4cbaf1787e8ae5b5c5 (patch) | |
tree | 38e7d72def2d7edb1c348bffdc1c2377b4f23dd8 /layerindex/views.py | |
parent | 5a07f0422d8ae13f79aae3471ba8a305c4460b3c (diff) | |
download | openembedded-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.py | 43 |
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 |