about summary refs log tree commit diff
path: root/nixos
diff options
context:
space:
mode:
authorStig <stig@stig.io>2022-08-21 17:31:52 +0200
committerGitHub <noreply@github.com>2022-08-21 17:31:52 +0200
commit8c4a3b279be85bd863138e69f09ee88d3f969b5b (patch)
tree0625394838452308bfbd7df8205e49a198fd2292 /nixos
parent262f2f58b940e4a21858da04d46cffa919597a8e (diff)
parent7874b995fba14ba6111e10e2bb7f89224ddaa41b (diff)
downloadnixlib-8c4a3b279be85bd863138e69f09ee88d3f969b5b.tar
nixlib-8c4a3b279be85bd863138e69f09ee88d3f969b5b.tar.gz
nixlib-8c4a3b279be85bd863138e69f09ee88d3f969b5b.tar.bz2
nixlib-8c4a3b279be85bd863138e69f09ee88d3f969b5b.tar.lz
nixlib-8c4a3b279be85bd863138e69f09ee88d3f969b5b.tar.xz
nixlib-8c4a3b279be85bd863138e69f09ee88d3f969b5b.tar.zst
nixlib-8c4a3b279be85bd863138e69f09ee88d3f969b5b.zip
Merge pull request #186503 from Weathercold/patch-1
nixos/switch-to-configuration: fix units starting with dash not being able to reload
Diffstat (limited to 'nixos')
-rwxr-xr-xnixos/modules/system/activation/switch-to-configuration.pl2
-rw-r--r--nixos/tests/switch-test.nix39
2 files changed, 39 insertions, 2 deletions
diff --git a/nixos/modules/system/activation/switch-to-configuration.pl b/nixos/modules/system/activation/switch-to-configuration.pl
index f39549db883d..9a4c635402d1 100755
--- a/nixos/modules/system/activation/switch-to-configuration.pl
+++ b/nixos/modules/system/activation/switch-to-configuration.pl
@@ -167,7 +167,7 @@ sub get_active_units {
 # Takes the name of the unit as an argument and returns a bool whether the unit is active or not.
 sub unit_is_active {
     my ($unit_name) = @_;
-    my $units = busctl_call_systemd1_mgr("ListUnitsByNames", "as", 1, $unit_name)->{data}->[0];
+    my $units = busctl_call_systemd1_mgr("ListUnitsByNames", "as", 1, , "--", $unit_name)->{data}->[0];
     if (scalar(@{$units}) == 0) {
         return 0;
     }
diff --git a/nixos/tests/switch-test.nix b/nixos/tests/switch-test.nix
index 0198866b6ff8..f891a2cb2f4c 100644
--- a/nixos/tests/switch-test.nix
+++ b/nixos/tests/switch-test.nix
@@ -214,6 +214,25 @@ in {
           systemd.services."escaped\\x2ddash".serviceConfig.X-Test = "test";
         };
 
+        unitStartingWithDash.configuration = {
+          systemd.services."-" = {
+            wantedBy = [ "multi-user.target" ];
+            serviceConfig = {
+              Type = "oneshot";
+              RemainAfterExit = true;
+              ExecStart = "${pkgs.coreutils}/bin/true";
+            };
+          };
+        };
+
+        unitStartingWithDashModified.configuration = {
+          imports = [ unitStartingWithDash.configuration ];
+          systemd.services."-" = {
+            reloadIfChanged = true;
+            serviceConfig.ExecReload = "${pkgs.coreutils}/bin/true";
+          };
+        };
+
         unitWithRequirement.configuration = {
           systemd.services.required-service = {
             wantedBy = [ "multi-user.target" ];
@@ -637,9 +656,27 @@ in {
         assert_contains(out, "\nstarting the following units: escaped\\x2ddash.service\n")
         assert_lacks(out, "the following new units were started:")
 
+        # Ensure units can start with a dash
+        out = switch_to_specialisation("${machine}", "unitStartingWithDash")
+        assert_contains(out, "stopping the following units: escaped\\x2ddash.service\n")
+        assert_lacks(out, "NOT restarting the following changed units:")
+        assert_lacks(out, "reloading the following units:")
+        assert_lacks(out, "\nrestarting the following units:")
+        assert_lacks(out, "\nstarting the following units:")
+        assert_contains(out, "the following new units were started: -.service\n")
+
+        # The regression only occurs when reloading units
+        out = switch_to_specialisation("${machine}", "unitStartingWithDashModified")
+        assert_lacks(out, "stopping the following units:")
+        assert_lacks(out, "NOT restarting the following changed units:")
+        assert_contains(out, "reloading the following units: -.service")
+        assert_lacks(out, "\nrestarting the following units:")
+        assert_lacks(out, "\nstarting the following units:")
+        assert_lacks(out, "the following new units were started:")
+
         # Ensure units that require changed units are properly reloaded
         out = switch_to_specialisation("${machine}", "unitWithRequirement")
-        assert_contains(out, "stopping the following units: escaped\\x2ddash.service\n")
+        assert_contains(out, "stopping the following units: -.service\n")
         assert_lacks(out, "NOT restarting the following changed units:")
         assert_lacks(out, "reloading the following units:")
         assert_lacks(out, "\nrestarting the following units:")