77
88import collections
99import datetime
10+ import pprint
1011
1112import django
1213django .setup ()
1516
1617import debug # pyflakes:ignore
1718
18- from ietf .doc .models import NewRevisionDocEvent
19+ from ietf .doc .models import DocHistory , NewRevisionDocEvent
1920from ietf .submit .models import Submission , SubmissionEvent
2021
2122RevInfo = collections .namedtuple ('RevInfo' , ['doc' , 'event' , 'rev' ])
@@ -39,17 +40,33 @@ def add_arguments(self, parser):
3940 def check_objects (self , queryset , timeattr , docattr ):
4041 revs = {}
4142 self .stdout .write (" Checking %s ..." % queryset .model .__name__ )
43+ def to_dict (instance ):
44+ from itertools import chain
45+ opts = instance ._meta
46+ data = {}
47+ for f in chain (opts .concrete_fields , opts .private_fields ):
48+ data [f .name ] = f .value_from_object (instance )
49+ for f in opts .many_to_many :
50+ data [f .name ] = [i .pk for i in f .value_from_object (instance )]
51+ return data
4252 for obj in queryset :
4353 doc = getattr (obj , docattr )
4454 time = getattr (obj , timeattr )
4555 if not obj .rev :
46- self .stdout .write ("Bad revision number: %s %-52s: '%s'" % (time , doc .name , obj .rev ))
56+ if not doc .is_rfc ():
57+ self .stdout .write ("Bad revision number: %-52s: '%s'" % (doc .name , obj .rev ))
4758 continue
4859 rev = int (obj .rev .lstrip ('0' ) or '0' )
4960 #self.stdout.write("%s %-52s %02s" % (time, doc.name, obj.rev))
5061 if doc .name in revs :
51- if rev <= revs [doc .name ].rev :
52- self .stderr .write ("%s %-50s %02d -> %02d" % (time , doc .name , revs [doc .name ].rev , rev ))
62+ prev = revs [doc .name ]
63+ if rev <= prev .rev :
64+ docd = to_dict (doc )
65+ prevd = to_dict (prev .doc )
66+ if prevd != docd :
67+ self .stderr .write ("%s %-50s %02d -> %02d" % (time , doc .name , prev .rev , rev ))
68+ self .stderr .write (pprint .pformat (prevd ))
69+ self .stderr .write (pprint .pformat (docd ))
5370 revs [doc .name ] = RevInfo (doc , obj , rev )
5471 for doc , obj , rev in revs .values ():
5572 if not doc .rev == obj .rev :
@@ -64,6 +81,7 @@ def handle(self, *args, **options):
6481 for model , timeattr , docattr in [
6582 (NewRevisionDocEvent , 'time' , 'doc' ),
6683 (Submission , 'submission_date' , 'draft' ),
84+ (DocHistory , 'time' , 'doc' ),
6785 ]:
6886 filter = {
6987 '%s__gte' % timeattr : options ['from' ],
0 commit comments