@@ -533,6 +533,7 @@ def document_main(request, name, rev=None, document_html=False):
533533 review_assignments = review_assignments ,
534534 no_review_from_teams = no_review_from_teams ,
535535 due_date = due_date ,
536+ diff_revisions = get_diff_revisions (request , name , doc if isinstance (doc ,Document ) else doc .doc ) if document_html else None
536537 ))
537538
538539 if doc .type_id == "charter" :
@@ -901,44 +902,77 @@ def document_email(request,name):
901902 )
902903
903904
904- def document_history (request , name ):
905- doc = get_object_or_404 (Document , docalias__name = name )
906- top = render_document_top (request , doc , "history" , name )
905+ def get_diff_revisions (request , name , doc ):
906+ diffable = any (
907+ [
908+ name .startswith (prefix )
909+ for prefix in [
910+ "rfc" ,
911+ "draft" ,
912+ "charter" ,
913+ "conflict-review" ,
914+ "status-change" ,
915+ ]
916+ ]
917+ )
918+
919+ if not diffable :
920+ return []
907921
908922 # pick up revisions from events
909923 diff_revisions = []
910924
911- diffable = [ name .startswith (prefix ) for prefix in ["rfc" , "draft" , "charter" , "conflict-review" , "status-change" , ]]
912- if any (diffable ):
913- diff_documents = [ doc ]
914- diff_documents .extend (Document .objects .filter (docalias__relateddocument__source = doc , docalias__relateddocument__relationship = "replaces" ))
915-
916- if doc .get_state_slug () == "rfc" :
917- e = doc .latest_event (type = "published_rfc" )
918- aliases = doc .docalias .filter (name__startswith = "rfc" )
919- if aliases :
920- name = aliases [0 ].name
921- diff_revisions .append ((name , "" , e .time if e else doc .time , name ))
922-
923- seen = set ()
924- for e in NewRevisionDocEvent .objects .filter (type = "new_revision" , doc__in = diff_documents ).select_related ('doc' ).order_by ("-time" , "-id" ):
925- if (e .doc .name , e .rev ) in seen :
926- continue
927-
928- seen .add ((e .doc .name , e .rev ))
929-
930- url = ""
931- if name .startswith ("charter" ):
932- url = request .build_absolute_uri (urlreverse ('ietf.doc.views_charter.charter_with_milestones_txt' , kwargs = dict (name = e .doc .name , rev = e .rev )))
933- elif name .startswith ("conflict-review" ):
934- url = find_history_active_at (e .doc , e .time ).get_href ()
935- elif name .startswith ("status-change" ):
936- url = find_history_active_at (e .doc , e .time ).get_href ()
937- elif name .startswith ("draft" ) or name .startswith ("rfc" ):
938- # rfcdiff tool has special support for IDs
939- url = e .doc .name + "-" + e .rev
940-
941- diff_revisions .append ((e .doc .name , e .rev , e .time , url ))
925+ diff_documents = [doc ]
926+ diff_documents .extend (
927+ Document .objects .filter (
928+ docalias__relateddocument__source = doc ,
929+ docalias__relateddocument__relationship = "replaces" ,
930+ )
931+ )
932+
933+ if doc .get_state_slug () == "rfc" :
934+ e = doc .latest_event (type = "published_rfc" )
935+ aliases = doc .docalias .filter (name__startswith = "rfc" )
936+ if aliases :
937+ name = aliases [0 ].name
938+ diff_revisions .append ((name , "" , e .time if e else doc .time , name ))
939+
940+ seen = set ()
941+ for e in (
942+ NewRevisionDocEvent .objects .filter (type = "new_revision" , doc__in = diff_documents )
943+ .select_related ("doc" )
944+ .order_by ("-time" , "-id" )
945+ ):
946+ if (e .doc .name , e .rev ) in seen :
947+ continue
948+
949+ seen .add ((e .doc .name , e .rev ))
950+
951+ url = ""
952+ if name .startswith ("charter" ):
953+ url = request .build_absolute_uri (
954+ urlreverse (
955+ "ietf.doc.views_charter.charter_with_milestones_txt" ,
956+ kwargs = dict (name = e .doc .name , rev = e .rev ),
957+ )
958+ )
959+ elif name .startswith ("conflict-review" ):
960+ url = find_history_active_at (e .doc , e .time ).get_href ()
961+ elif name .startswith ("status-change" ):
962+ url = find_history_active_at (e .doc , e .time ).get_href ()
963+ elif name .startswith ("draft" ) or name .startswith ("rfc" ):
964+ # rfcdiff tool has special support for IDs
965+ url = e .doc .name + "-" + e .rev
966+
967+ diff_revisions .append ((e .doc .name , e .rev , e .time , url ))
968+
969+ return diff_revisions
970+
971+
972+ def document_history (request , name ):
973+ doc = get_object_or_404 (Document , docalias__name = name )
974+ top = render_document_top (request , doc , "history" , name )
975+ diff_revisions = get_diff_revisions (request , name , doc )
942976
943977 # grab event history
944978 events = doc .docevent_set .all ().order_by ("-time" , "-id" ).select_related ("by" )
0 commit comments