Author: eelco
Date: Sun Mar 18 18:53:50 2012
New Revision: 33240
URL: https://nixos.org/websvn/nix/?rev=33240&sc=1

Log:
* Get rid of some grep hackery on the Upstart jobs.

Modified:
   nixos/trunk/modules/system/activation/switch-to-configuration.sh
   nixos/trunk/modules/system/activation/top-level.nix
   nixos/trunk/modules/system/upstart/upstart.nix

Modified: nixos/trunk/modules/system/activation/switch-to-configuration.sh
==============================================================================
--- nixos/trunk/modules/system/activation/switch-to-configuration.sh    Sun Mar 
18 18:33:10 2012        (r33239)
+++ nixos/trunk/modules/system/activation/switch-to-configuration.sh    Sun Mar 
18 18:53:50 2012        (r33240)
@@ -76,13 +76,13 @@
         exit 1
 fi
 
-newJobs=$(readlink -f @out@/etc/init)
+jobsDir=$(readlink -f @out@/etc/init)
 
 # Stop all currently running jobs that are not in the new Upstart
 # configuration.  (Here "running" means all jobs that are not in the
 # stop/waiting state.)
 for job in $(initctl list | sed -e '/ stop\/waiting/ d; /^[^a-z]/ d; s/^\([^ 
]\+\).*/\1/' | sort); do
-    if ! [ -e "$newJobs/$job.conf" ] ; then
+    if ! [ -e "$jobsDir/$job.conf" ] ; then
         echo "stopping obsolete job ‘$job’..."
         stop --quiet "$job" || true
     fi
@@ -99,16 +99,19 @@
 # Allow Upstart jobs to react intelligently to a config change.
 initctl emit config-changed
 
+declare -A tasks=(@tasks@)
+declare -A noRestartIfChanged=(@noRestartIfChanged@)
+
 # Restart all running jobs that have changed.  (Here "running" means
 # all jobs that don't have a "stop" goal.)  We use the symlinks in
 # /var/run/upstart-jobs (created by each job's pre-start script) to
 # determine if a job has changed.
-for job in $(cd $newJobs && ls *.conf); do
+for job in $(cd $jobsDir && ls *.conf); do
     job=$(basename $job .conf)
     status=$(status "$job")
     if ! [[ "$status" =~ start/ ]]; then continue; fi
-    if [ "$(readlink -f "$newJobs/$job.conf")" = "$(readlink -f 
"/var/run/upstart-jobs/$job")" ]; then continue; fi
-    if ! grep -q "^# RESTART-IF-CHANGED" "$newJobs/$job.conf"; then
+    if [ "$(readlink -f "$jobsDir/$job.conf")" = "$(readlink -f 
"/var/run/upstart-jobs/$job")" ]; then continue; fi
+    if [ -n "${noRestartIfChanged[$job]}" ]; then
         echo "not restarting changed service ‘$job’"
         continue
     fi
@@ -125,20 +128,20 @@
 # differs from the previous instance of the same task; if it wasn't
 # previously run, don't run it.  If it's a service, only start it if
 # it has a "start on" condition.
-for job in $(cd $newJobs && ls *.conf); do
+for job in $(cd $jobsDir && ls *.conf); do
     job=$(basename $job .conf)
     status=$(status "$job")
     if ! [[ "$status" =~ stop/ ]]; then continue; fi
 
-    if grep -q '^task$' "$newJobs/$job.conf"; then
+    if [ -n "${tasks[$job]}" ]; then
         if [ ! -e "/var/run/upstart-jobs/$job" -o \
-            "$(readlink -f "$newJobs/$job.conf")" = "$(readlink -f 
"/var/run/upstart-jobs/$job")" ];
+            "$(readlink -f "$jobsDir/$job.conf")" = "$(readlink -f 
"/var/run/upstart-jobs/$job")" ];
         then continue; fi
-        if ! grep -q "^# RESTART-IF-CHANGED" "$newJobs/$job.conf"; then 
continue; fi
+        if [ -n "${noRestartIfChanged[$job]}" ]; then continue; fi
         echo "starting task ‘$job’..."
         start --quiet "$job" || true
     else
-        if ! grep -q "^start on" "$newJobs/$job.conf"; then continue; fi
+        if ! grep -q "^start on" "$jobsDir/$job.conf"; then continue; fi
         echo "starting service ‘$job’..."
         start --quiet "$job" || true
     fi

Modified: nixos/trunk/modules/system/activation/top-level.nix
==============================================================================
--- nixos/trunk/modules/system/activation/top-level.nix Sun Mar 18 18:33:10 
2012        (r33239)
+++ nixos/trunk/modules/system/activation/top-level.nix Sun Mar 18 18:53:50 
2012        (r33240)
@@ -1,24 +1,26 @@
-{pkgs, config, modules, baseModules, ...}:
+{ config, pkgs, modules, baseModules, ... }:
+
+with pkgs.lib;
 
 let
 
   options = {
 
-    system.build = pkgs.lib.mkOption {
+    system.build = mkOption {
       default = {};
       description = ''
         Attribute set of derivations used to setup the system.
       '';
     };
 
-    nesting.children = pkgs.lib.mkOption {
+    nesting.children = mkOption {
       default = [];
       description = ''
         Additional configurations to build.
       '';
     };
 
-    nesting.clone = pkgs.lib.mkOption {
+    nesting.clone = mkOption {
       default = [];
       description = ''
         Additional configurations to build based on the current
@@ -26,21 +28,21 @@
       '';
     };
 
-    system.boot.loader.id = pkgs.lib.mkOption {
+    system.boot.loader.id = mkOption {
       default = "";
       description = ''
         Id string of the used bootloader.
       '';
     };
 
-    system.boot.loader.kernelFile = pkgs.lib.mkOption {
+    system.boot.loader.kernelFile = mkOption {
       default = "";
       description = ''
         Name of the kernel file to be passed to the bootloader.
       '';
     };
 
-    system.copySystemConfiguration = pkgs.lib.mkOption {
+    system.copySystemConfiguration = mkOption {
       default = false;
       description = ''
         If enabled, copies the NixOS configuration file
@@ -50,10 +52,10 @@
       '';
     };
 
-    system.extraSystemBuilderCmds = pkgs.lib.mkOption {
+    system.extraSystemBuilderCmds = mkOption {
       default = "";
       internal = true;
-      merge = pkgs.lib.concatStringsSep "\n";
+      merge = concatStringsSep "\n";
       description = ''
         This code will be added to the builder creating the system store path.
       '';
@@ -89,7 +91,7 @@
       kernelPath = "${config.boot.kernelPackages.kernel}/" +
         "${config.system.boot.loader.kernelFile}";
     in ''
-      ensureDir $out
+      mkdir $out
 
       if [ ! -f ${kernelPath} ]; then
         echo "The bootloader cannot find the proper kernel image."
@@ -123,13 +125,13 @@
       echo "${toString config.system.build.upstart.interfaceVersion}" > 
$out/upstart-interface-version
 
       mkdir $out/fine-tune
-      childCount=0;
+      childCount=0
       for i in $children; do
-        childCount=$(( childCount + 1 ));
-        ln -s $i $out/fine-tune/child-$childCount;
+        childCount=$(( childCount + 1 ))
+        ln -s $i $out/fine-tune/child-$childCount
       done
 
-      ensureDir $out/bin
+      mkdir $out/bin
       substituteAll ${./switch-to-configuration.sh} 
$out/bin/switch-to-configuration
       chmod +x $out/bin/switch-to-configuration
 
@@ -151,15 +153,23 @@
     menuBuilder = config.system.build.menuBuilder;
     initScriptBuilder = config.system.build.initScriptBuilder;
     activationScript = config.system.activationScripts.script;
+
+    # Pass the names of all Upstart tasks to the activation script.
+    tasks = attrValues (mapAttrs (n: v: if v.task then ["[${v.name}]=1"] else 
[]) config.jobs);
+    
+    # Pass the names of all Upstart jobs that shouldn't be restarted
+    # to the activation script.
+    noRestartIfChanged = attrValues (mapAttrs (n: v: if v.restartIfChanged 
then [] else ["[${v.name}]=1"]) config.jobs);
+    
     # Most of these are needed by grub-install.
-    path = [
-      pkgs.coreutils
-      pkgs.gnused
-      pkgs.gnugrep
-      pkgs.findutils
-      pkgs.diffutils
-      config.system.build.upstart # for initctl
-    ];
+    path =
+      [ pkgs.coreutils
+        pkgs.gnused
+        pkgs.gnugrep
+        pkgs.findutils
+        pkgs.diffutils
+        config.system.build.upstart # for initctl
+      ];
 
     # Boot loaders
     bootLoader = config.system.boot.loader.id;
@@ -185,9 +195,9 @@
   require = [options];
 
   system.extraSystemBuilderCmds =
-    pkgs.lib.optionalString
+    optionalString
       config.system.copySystemConfiguration
-      "cp ${pkgs.lib.maybeEnv "NIXOS_CONFIG" "/etc/nixos/configuration.nix"} 
$out";
+      "cp ${maybeEnv "NIXOS_CONFIG" "/etc/nixos/configuration.nix"} $out";
 
   system.build.toplevel = system;
 }

Modified: nixos/trunk/modules/system/upstart/upstart.nix
==============================================================================
--- nixos/trunk/modules/system/upstart/upstart.nix      Sun Mar 18 18:33:10 
2012        (r33239)
+++ nixos/trunk/modules/system/upstart/upstart.nix      Sun Mar 18 18:53:50 
2012        (r33240)
@@ -94,8 +94,6 @@
           ${optionalString job.task "task"}
           ${optionalString (!job.task && job.respawn) "respawn"}
 
-          ${optionalString job.restartIfChanged "# RESTART-IF-CHANGED"}
-
           ${ # preStop is run only if there is exec or script.
              # (upstart 0.6.5, job.c:562)
             optionalString (job.preStop != "") (assert hasMain; ''
_______________________________________________
nix-commits mailing list
[email protected]
http://lists.science.uu.nl/mailman/listinfo/nix-commits

Reply via email to