core/transaction: be explicit about cyclic ordering relationship

Inspired by https://github.com/systemd/systemd/pull/35417#discussion_r1867868221
This commit is contained in:
Mike Yuan
2025-06-30 17:37:58 +02:00
parent 3aa5e91b1e
commit 6912eb315f

View File

@@ -373,17 +373,15 @@ static int transaction_verify_order_one(Transaction *tr, Job *j, Job *from, unsi
STRV_FOREACH_PAIR(unit_id, job_type, array)
(void) strextendf_with_separator(&unit_ids, "\n", "%s%s", unit_log_field(j->unit), *unit_id);
size_t m = strv_length(array);
_cleanup_free_ char *cycle_path_text = strdup("Found ordering cycle");
if (m > 0) {
(void) strextendf(&cycle_path_text, " on %s/%s", array[0], array[1]);
if (m > 2)
(void) strextendf(&cycle_path_text, "; has dependency on %s/%s", array[2], array[3]);
}
if (!strv_isempty(array)) {
(void) strextendf(&cycle_path_text, ": %s/%s", array[0], array[1]);
STRV_FOREACH_PAIR(unit_id, job_type, strv_skip(array, 4))
(void) strextendf(&cycle_path_text, ", %s/%s", *unit_id, *job_type);
STRV_FOREACH_PAIR(unit_id, job_type, strv_skip(array, 2))
(void) strextendf(&cycle_path_text, " after %s/%s", *unit_id, *job_type);
(void) strextendf(&cycle_path_text, " - after %s", array[0]);
}
/* logging for j not k here to provide a consistent narrative */
if (cycle_path_text)