@@ -543,38 +543,41 @@ def uppercase_std_abbreviated_name(name):
543543
544544def crawl_history (doc ):
545545 # return document history data for inclusion in doc.json (used by timeline)
546- def ancestors (doc ):
547- retval = []
546+ def get_ancestors (doc ):
547+ ancestors = []
548548 if hasattr (doc , 'relateddocument_set' ):
549549 for rel in doc .relateddocument_set .filter (relationship__slug = 'replaces' ):
550- if rel .target .document not in retval :
551- retval .append (rel .target .document )
552- retval .extend (ancestors (rel .target .document ))
553- return retval
554-
555- retval = []
556- history = ancestors (doc )
557- if history is not None :
558- history .append (doc )
559- for d in history :
560- for e in d .docevent_set .filter (type = 'new_revision' ):
550+ if rel .target .document not in ancestors :
551+ ancestors .append (rel .target .document )
552+ ancestors .extend (get_ancestors (rel .target .document ))
553+ return ancestors
554+
555+ history = {}
556+ docs = get_ancestors (doc )
557+ if docs is not None :
558+ docs .append (doc )
559+ for d in docs :
560+ for e in d .docevent_set .filter (type = 'new_revision' ). distinct () :
561561 if hasattr (e , 'newrevisiondocevent' ):
562- retval .append ({
562+ url = urlreverse ("doc_view" , kwargs = dict (name = d )) + e .newrevisiondocevent .rev + "/"
563+ history [url ] = {
563564 'name' : d .name ,
564565 'rev' : e .newrevisiondocevent .rev ,
565566 'published' : e .time .isoformat (),
566- 'url' : urlreverse ( "doc_view" , kwargs = dict ( name = d )) + e . newrevisiondocevent . rev + "/"
567- })
567+ 'url' : url ,
568+ }
568569
569570 if doc .type_id == "draft" :
570571 e = doc .latest_event (type = 'published_rfc' )
571572 else :
572573 e = doc .latest_event (type = 'iesg_approved' )
573574 if e :
574- retval .append ({
575+ url = urlreverse ("doc_view" , kwargs = dict (name = e .doc ))
576+ history [url ] = {
575577 'name' : e .doc .canonical_name (),
576578 'rev' : e .doc .canonical_name (),
577579 'published' : e .time .isoformat (),
578- 'url' : urlreverse ("doc_view" , kwargs = dict (name = e .doc ))
579- })
580- return sorted (retval , key = lambda x : x ['published' ])
580+ 'url' : url
581+ }
582+ history = history .values ()
583+ return sorted (history , key = lambda x : x ['published' ])
0 commit comments