@@ -1366,6 +1366,12 @@ def reconcile_jira_affects_versions(
13661366 jira_ops .update_affects_versions (issue , new_names )
13671367
13681368
1369+ def maybe_reconcile_jira_affects_versions (issue , fix_version_names , affects_available ):
1370+ """Reconcile the Affects Version/s only when they fail to precede the fix version(s)."""
1371+ if fix_precedes_affects (fix_version_names , [v .name for v in issue .fields .versions ]):
1372+ reconcile_jira_affects_versions (issue , fix_version_names , affects_available )
1373+
1374+
13691375def get_jira_issue (prompt , default_jira_id = "" ):
13701376 jira_id = bold_input ("%s [%s]: " % (prompt , default_jira_id ))
13711377 if jira_id == "" :
@@ -1449,8 +1455,12 @@ def resolve_jira_issue(
14491455 )
14501456 if all_inferred_present :
14511457 print (
1452- "JIRA issue %s already contains all inferred fix versions; no update needed."
1453- % issue .key
1458+ "JIRA issue %s already contains all inferred fix versions; no fix version "
1459+ "update needed." % issue .key
1460+ )
1461+ # A re-run may still have Affects Version/s sitting above the unchanged fix set.
1462+ maybe_reconcile_jira_affects_versions (
1463+ issue , existing_fix_version_names , affects_available
14541464 )
14551465 return
14561466 if default_fix_list :
@@ -1494,11 +1504,9 @@ def resolve_jira_issue(
14941504 print ("Error setting fix version(s), try again (or leave blank and fix manually)" )
14951505
14961506 # On a fresh resolve, offer to update the Affects Version/s when they sit above the fix
1497- # version(s) just chosen; the backport path above handles the already-resolved case.
1498- if not is_resolved and fix_precedes_affects (
1499- fix_versions , [v .name for v in issue .fields .versions ]
1500- ):
1501- reconcile_jira_affects_versions (issue , fix_versions , affects_available )
1507+ # version(s) just chosen; the already-resolved paths handle their own cases.
1508+ if not is_resolved :
1509+ maybe_reconcile_jira_affects_versions (issue , fix_versions , affects_available )
15021510
15031511 def get_version_json (version_str ):
15041512 return list (filter (lambda v : v .name == version_str , versions ))[0 ].raw
@@ -1510,12 +1518,14 @@ def get_version_json(version_str):
15101518 jira_fix_versions = [v for v in jira_fix_versions if v ["name" ] not in existing_names ]
15111519 if not jira_fix_versions :
15121520 print ("No new fix versions selected for JIRA issue %s; no update needed." % issue .key )
1521+ maybe_reconcile_jira_affects_versions (
1522+ issue , existing_fix_version_names , affects_available
1523+ )
15131524 return
15141525 # A backport adds an earlier fix line, which usually means that line is affected too;
15151526 # offer to extend the Affects Version/s down when they miss the full fix set.
15161527 full_fix_names = existing_fix_version_names + [v ["name" ] for v in jira_fix_versions ]
1517- if fix_precedes_affects (full_fix_names , [v .name for v in issue .fields .versions ]):
1518- reconcile_jira_affects_versions (issue , full_fix_names , affects_available )
1528+ maybe_reconcile_jira_affects_versions (issue , full_fix_names , affects_available )
15191529 jira_ops .add_fix_versions (issue , existing_fix_versions , jira_fix_versions )
15201530 return
15211531
0 commit comments