| From 811cffec96efa1dfee57869d2d22677577b583a3 Mon Sep 17 00:00:00 2001 |
| From: Avery Pennarun <apenwarr@gmail.com> |
| Date: Mon, 24 Oct 2016 22:35:16 -0400 |
| Subject: [PATCH] Add s6-rc -O (only) option to disable dependencies. |
| |
| We sometimes want to start/stop a service ignoring its dependencies. For |
| example, if we want to just cycle a service quickly off/on, there's rarely a |
| reason to stop all the things that depend on it. |
| --- |
| src/s6-rc/s6-rc.c | 13 +++++++++---- |
| 1 file changed, 9 insertions(+), 4 deletions(-) |
| |
| diff --git a/src/s6-rc/s6-rc.c b/src/s6-rc/s6-rc.c |
| index f8d634e..a505491 100644 |
| --- a/src/s6-rc/s6-rc.c |
| +++ b/src/s6-rc/s6-rc.c |
| @@ -23,7 +23,7 @@ |
| #include <s6-rc/config.h> |
| #include <s6-rc/s6rc.h> |
| |
| -#define USAGE "s6-rc [ -v verbosity ] [ -n dryrunthrottle ] [ -t timeout ] [ -l live ] [ -u | -d ] [ -p ] [ -a ] help|list|listall|change [ servicenames... ]" |
| +#define USAGE "s6-rc [ -v verbosity ] [ -n dryrunthrottle ] [ -t timeout ] [ -l live ] [ -u | -d ] [ -p ] [ -a ] [ -O ] help|list|listall|change [ servicenames... ]" |
| #define dieusage() strerr_dieusage(100, USAGE) |
| |
| typedef struct pidindex_s pidindex_t ; |
| @@ -44,6 +44,7 @@ static unsigned char *state ; |
| static unsigned int *pendingdeps ; |
| static tain_t deadline ; |
| static char dryrun[UINT_FMT] = "" ; |
| +static unsigned int only = 0 ; |
| |
| static inline void announce (void) |
| { |
| @@ -322,7 +323,7 @@ static int doit (int spfd, int h) |
| while (i--) |
| { |
| state[i] &= 251 ; |
| - pendingdeps[i] = db->services[i].ndeps[h] ; |
| + pendingdeps[i] = only ? 0 : db->services[i].ndeps[h] ; |
| } |
| i = n ; |
| while (i--) examine(i, h) ; |
| @@ -388,7 +389,7 @@ int main (int argc, char const *const *argv) |
| subgetopt_t l = SUBGETOPT_ZERO ; |
| for (;;) |
| { |
| - register int opt = subgetopt_r(argc, argv, "v:n:t:l:udpaX", &l) ; |
| + register int opt = subgetopt_r(argc, argv, "v:n:t:l:udpaOX", &l) ; |
| if (opt == -1) break ; |
| switch (opt) |
| { |
| @@ -406,6 +407,7 @@ int main (int argc, char const *const *argv) |
| case 'd' : up = 0 ; break ; |
| case 'p' : prune = 1 ; break ; |
| case 'a' : selectlive = 1 ; break ; |
| + case 'O' : only = 1 ; break ; |
| case 'X' : takelocks = 0 ; break ; |
| default : dieusage() ; |
| } |
| @@ -554,7 +556,10 @@ int main (int argc, char const *const *argv) |
| return 0 ; |
| } |
| |
| - s6rc_graph_closure(db, state, 1, up) ; |
| + if (!only) |
| + { |
| + s6rc_graph_closure(db, state, 1, up) ; |
| + } |
| |
| |
| /* Print the selection after closure */ |
| -- |
| 2.8.0.rc3.226.g39d4020 |
| |