Skip to content

Commit 9fedce0

Browse files
authored
fix: restore rfcs on document graph when looking at rfc predecesors (ietf-tools#6646)
1 parent a035c93 commit 9fedce0

1 file changed

Lines changed: 34 additions & 21 deletions

File tree

ietf/doc/utils.py

Lines changed: 34 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)