chiark / gitweb /
unit: add DefaultDependencies= setting
[elogind.git] / src / target.c
index fba99568a3007e53df0665c540106481167f0b98..f8df6fb757742d3cb8f166d63c582ef3f563e8a1 100644 (file)
@@ -50,6 +50,46 @@ static void target_set_state(Target *t, TargetState state) {
         unit_notify(UNIT(t), state_translation_table[old_state], state_translation_table[state]);
 }
 
+static int target_add_default_dependencies(Target *t) {
+        Iterator i;
+        Unit *other;
+        int r;
+
+        /* Imply ordering for requirement dependencies
+         * on target units. */
+
+        SET_FOREACH(other, t->meta.dependencies[UNIT_REQUIRES], i)
+                if ((r = unit_add_dependency(UNIT(t), UNIT_AFTER, other, true)) < 0)
+                        return r;
+        SET_FOREACH(other, t->meta.dependencies[UNIT_REQUIRES_OVERRIDABLE], i)
+                if ((r = unit_add_dependency(UNIT(t), UNIT_AFTER, other, true)) < 0)
+                        return r;
+        SET_FOREACH(other, t->meta.dependencies[UNIT_WANTS], i)
+                if ((r = unit_add_dependency(UNIT(t), UNIT_AFTER, other, true)) < 0)
+                        return r;
+
+        return 0;
+}
+
+static int target_load(Unit *u) {
+        Target *t = TARGET(u);
+        int r;
+
+        assert(t);
+
+        if ((r = unit_load_fragment_and_dropin(u)) < 0)
+                return r;
+
+        /* This is a new unit? Then let's add in some extras */
+        if (u->meta.load_state == UNIT_LOADED) {
+                if (u->meta.default_dependencies)
+                        if ((r = target_add_default_dependencies(t)) < 0)
+                                return r;
+        }
+
+        return 0;
+}
+
 static int target_coldplug(Unit *u) {
         Target *t = TARGET(u);
 
@@ -177,7 +217,7 @@ DEFINE_STRING_TABLE_LOOKUP(target_state, TargetState);
 const UnitVTable target_vtable = {
         .suffix = ".target",
 
-        .load = unit_load_fragment_and_dropin,
+        .load = target_load,
         .coldplug = target_coldplug,
 
         .dump = target_dump,