]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
core: output log cycle path in one log message, not many
authorLennart Poettering <lennart@poettering.net>
Wed, 18 Jun 2025 09:47:06 +0000 (11:47 +0200)
committerLennart Poettering <lennart@poettering.net>
Mon, 23 Jun 2025 14:47:06 +0000 (16:47 +0200)
Fixes: #35642
src/core/transaction.c

index 699d60a86515bcffc49665822a807df4d0c243c9..617ab1adc174ca204f8e187fb5574e377b343c87 100644 (file)
@@ -396,13 +396,22 @@ static int transaction_verify_order_one(Transaction *tr, Job *j, Job *from, unsi
 
                 unit_ids = merge_unit_ids(unit_log_field(j->unit), array); /* ignore error */
 
-                STRV_FOREACH_PAIR(unit_id, job_type, array)
-                        /* logging for j not k here to provide a consistent narrative */
+                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]);
+                }
+
+                STRV_FOREACH_PAIR(unit_id, job_type, strv_skip(array, 4))
+                        (void) strextendf(&cycle_path_text, ", %s/%s", *unit_id, *job_type);
+
+                /* logging for j not k here to provide a consistent narrative */
+                if (cycle_path_text)
                         log_struct(LOG_WARNING,
-                                   LOG_UNIT_MESSAGE(j->unit,
-                                                    "Found %s on %s/%s",
-                                                    unit_id == array ? "ordering cycle" : "dependency",
-                                                    *unit_id, *job_type),
+                                   LOG_UNIT_MESSAGE(j->unit, "%s", cycle_path_text),
                                    LOG_ITEM("%s", strna(unit_ids)));
 
                 if (delete) {