@@ -957,49 +957,62 @@ def make_rev_history(doc):
957957
958958 def get_predecessors (doc , predecessors = None ):
959959 if predecessors is None :
960- predecessors = []
960+ predecessors = set ()
961961 if hasattr (doc , 'relateddocument_set' ):
962962 for document in doc .related_that_doc ('replaces' ):
963963 if document not in predecessors :
964- predecessors .append (document )
965- predecessors .extend (get_predecessors (document , predecessors ))
964+ predecessors .add (document )
965+ predecessors .update (get_predecessors (document , predecessors ))
966966 if doc .came_from_draft ():
967- predecessors .append (doc .came_from_draft ())
967+ predecessors .add (doc .came_from_draft ())
968+ predecessors .update (get_predecessors (doc .came_from_draft (), predecessors ))
968969 return predecessors
969970
970971 def get_ancestors (doc , ancestors = None ):
971972 if ancestors is None :
972- ancestors = []
973+ ancestors = set ()
973974 if hasattr (doc , 'relateddocument_set' ):
974975 for document in doc .related_that ('replaces' ):
975976 if document not in ancestors :
976- ancestors .append (document )
977- ancestors .extend (get_ancestors (document , ancestors ))
977+ ancestors .add (document )
978+ ancestors .update (get_ancestors (document , ancestors ))
978979 if doc .became_rfc ():
979- ancestors .append (doc .became_rfc ())
980+ if doc .became_rfc () not in ancestors :
981+ ancestors .add (doc .became_rfc ())
982+ ancestors .update (get_ancestors (doc .became_rfc (), ancestors ))
980983 return ancestors
981984
982985 def get_replaces_tree (doc ):
983986 tree = get_predecessors (doc )
984- tree .extend (get_ancestors (doc ))
987+ tree .update (get_ancestors (doc ))
985988 return tree
986989
987990 history = {}
988991 docs = get_replaces_tree (doc )
989992 if docs is not None :
990- docs .append (doc )
993+ docs .add (doc )
991994 for d in docs :
992- for e in d .docevent_set .filter (type = 'new_revision' ).distinct ():
993- if hasattr (e , 'newrevisiondocevent' ):
994- url = urlreverse ("ietf.doc.views_doc.document_main" , kwargs = dict (name = d )) + e .newrevisiondocevent .rev + "/"
995- history [url ] = {
996- 'name' : d .name ,
997- 'rev' : e .newrevisiondocevent .rev ,
998- 'published' : e .time .isoformat (),
999- 'url' : url ,
1000- }
1001- if d .history_set .filter (rev = e .newrevisiondocevent .rev ).exists ():
1002- history [url ]['pages' ] = d .history_set .filter (rev = e .newrevisiondocevent .rev ).first ().pages
995+ if d .type_id == "rfc" :
996+ url = urlreverse ("ietf.doc.views_doc.document_main" , kwargs = dict (name = d ))
997+ e = d .docevent_set .filter (type = "published_rfc" ).order_by ("-time" ).first ()
998+ history [url ] = {
999+ "name" : d .name ,
1000+ "rev" : d .name ,
1001+ "published" : e and e .time .isoformat (),
1002+ "url" : url ,
1003+ }
1004+ else :
1005+ for e in d .docevent_set .filter (type = 'new_revision' ).distinct ():
1006+ if hasattr (e , 'newrevisiondocevent' ):
1007+ url = urlreverse ("ietf.doc.views_doc.document_main" , kwargs = dict (name = d )) + e .newrevisiondocevent .rev + "/"
1008+ history [url ] = {
1009+ 'name' : d .name ,
1010+ 'rev' : e .newrevisiondocevent .rev ,
1011+ 'published' : e .time .isoformat (),
1012+ 'url' : url ,
1013+ }
1014+ if d .history_set .filter (rev = e .newrevisiondocevent .rev ).exists ():
1015+ history [url ]['pages' ] = d .history_set .filter (rev = e .newrevisiondocevent .rev ).first ().pages
10031016
10041017 if doc .type_id == "draft" :
10051018 # Do nothing - all draft revisions are captured above already.
0 commit comments