Skip to content

Commit 2c59afe

Browse files
fix: drop stale obs/updates in rfced sync (ietf-tools#10543)
* fix: drop stale obs/updates in rfced sync * refactor: partial revert, orig was safer
1 parent c226749 commit 2c59afe

1 file changed

Lines changed: 50 additions & 23 deletions

File tree

ietf/sync/rfceditor.py

Lines changed: 50 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -636,43 +636,70 @@ def update_docs_from_rfc_index(
636636
)
637637
rfc_published = True
638638

639-
def parse_relation_list(l):
640-
res = []
641-
for x in l:
642-
for a in Document.objects.filter(name=x.lower(), type_id="rfc"):
643-
if a not in res:
644-
res.append(a)
645-
return res
646-
647-
for x in parse_relation_list(obsoletes):
648-
if not RelatedDocument.objects.filter(
649-
source=doc, target=x, relationship=relationship_obsoletes
639+
def parse_relation_list(rel_list: list[str]) -> list[Document]:
640+
return list(
641+
Document.objects.filter(
642+
name__in=[name.strip().lower() for name in rel_list],
643+
type_id="rfc"
644+
)
645+
)
646+
647+
# Create missing obsoletes relations
648+
docs_this_obsoletes = parse_relation_list(obsoletes)
649+
for obs_doc in docs_this_obsoletes:
650+
if not doc.relateddocument_set.filter(
651+
target=obs_doc, relationship=relationship_obsoletes
650652
):
651-
r = RelatedDocument.objects.create(
652-
source=doc, target=x, relationship=relationship_obsoletes
653+
r = doc.relateddocument_set.create(
654+
target=obs_doc, relationship=relationship_obsoletes
653655
)
654656
rfc_changes.append(
655-
"created {rel_name} relation between {src_name} and {tgt_name}".format(
657+
"created {rel_name} relation between {src} and {tgt}".format(
656658
rel_name=r.relationship.name.lower(),
657-
src_name=prettify_std_name(r.source.name),
658-
tgt_name=prettify_std_name(r.target.name),
659+
src=prettify_std_name(r.source.name),
660+
tgt=prettify_std_name(r.target.name),
659661
)
660662
)
663+
# Remove stale obsoletes relations
664+
for r in doc.relateddocument_set.filter(
665+
relationship=relationship_obsoletes
666+
).exclude(target_id__in=[d.pk for d in docs_this_obsoletes]):
667+
r.delete()
668+
rfc_changes.append(
669+
"removed {rel_name} relation between {src} and {tgt}".format(
670+
rel_name=r.relationship.name.lower(),
671+
src=prettify_std_name(r.source.name),
672+
tgt=prettify_std_name(r.target.name),
673+
)
674+
)
661675

662-
for x in parse_relation_list(updates):
676+
docs_this_updates = parse_relation_list(updates)
677+
for upd_doc in docs_this_updates:
663678
if not RelatedDocument.objects.filter(
664-
source=doc, target=x, relationship=relationship_updates
679+
source=doc, target=upd_doc, relationship=relationship_updates
665680
):
666-
r = RelatedDocument.objects.create(
667-
source=doc, target=x, relationship=relationship_updates
681+
r = doc.relateddocument_set.create(
682+
target=upd_doc, relationship=relationship_updates
668683
)
669684
rfc_changes.append(
670-
"created {rel_name} relation between {src_name} and {tgt_name}".format(
685+
"created {rel_name} relation between {src} and {tgt}".format(
671686
rel_name=r.relationship.name.lower(),
672-
src_name=prettify_std_name(r.source.name),
673-
tgt_name=prettify_std_name(r.target.name),
687+
src=prettify_std_name(r.source.name),
688+
tgt=prettify_std_name(r.target.name),
674689
)
675690
)
691+
# Remove stale updates relations
692+
for r in doc.relateddocument_set.filter(
693+
relationship=relationship_updates
694+
).exclude(target_id__in=[d.pk for d in docs_this_updates]):
695+
r.delete()
696+
rfc_changes.append(
697+
"removed {rel_name} relation between {src} and {tgt}".format(
698+
rel_name=r.relationship.name.lower(),
699+
src=prettify_std_name(r.source.name),
700+
tgt=prettify_std_name(r.target.name),
701+
)
702+
)
676703

677704
if also:
678705
# recondition also to have proper subseries document names:

0 commit comments

Comments
 (0)