From 198e456bf1eec2db49aaa986b3e1a3fc643809f4 Mon Sep 17 00:00:00 2001
From: obarun <eric@obarun.org>
Date: Sun, 12 Apr 2020 11:41:17 +1100
Subject: [PATCH] add -m options at 66-enable tool

---
 src/lib66/ssexec_enable.c | 10 ++++++----
 src/lib66/ssexec_help.c   |  5 +++--
 2 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/src/lib66/ssexec_enable.c b/src/lib66/ssexec_enable.c
index ca84fd68..693a1449 100644
--- a/src/lib66/ssexec_enable.c
+++ b/src/lib66/ssexec_enable.c
@@ -67,7 +67,7 @@ void start_parser(stralloc *list,ssexec_t *info, unsigned int *nbsv,uint8_t FORC
 	for (;i < len; i += strlen(list->s + i) + 1)
 	{
 		char *name = list->s + i ;
-		if (!parse_service_before(info,&parsed_list,&tree_list,name,nbsv,&sasv,FORCE))
+		if (!parse_service_before(info,&parsed_list,&tree_list,name,nbsv,&sasv,FORCE,CONF))
 			log_dieu(LOG_EXIT_SYS,"parse service file: ",name,": or its dependencies") ;
 	}
 	stralloc_free(&sasv) ;
@@ -83,12 +83,13 @@ void start_write(stralloc *tostart,unsigned int *nclassic,unsigned int *nlongrun
 	{
 		sv_alltype_ref sv = &genalloc_s(sv_alltype,gasv)[i] ;
 		char *name = keep.s + sv->cname.name ;
+		
 		r = write_services(sv, workdir,FORCE,CONF) ;
 		if (!r)
 			log_dieu_nclean(LOG_EXIT_SYS,&cleanup,"write service: ",name) ;
 
 		if (r > 1) continue ; //service already added
-
+		
 		log_trace("write resolve file of: ",name) ;
 		if (!ss_resolve_setnwrite(sv,info,workdir))
 			log_dieu_nclean(LOG_EXIT_SYS,&cleanup,"write revolve file for: ",name) ;
@@ -125,7 +126,7 @@ int ssexec_enable(int argc, char const *const *argv,char const *const *envp,ssex
 
 		for (;;)
 		{
-			int opt = getopt_args(argc,argv, ">cCfFS", &l) ;
+			int opt = getopt_args(argc,argv, ">cmCfFS", &l) ;
 			if (opt == -1) break ;
 			if (opt == -2) log_die(LOG_EXIT_USER,"options must be set first") ;
 			switch (opt)
@@ -135,7 +136,8 @@ int ssexec_enable(int argc, char const *const *argv,char const *const *envp,ssex
 				case 'F' : 	if (FORCE) log_usage(usage_enable) ; 
 							FORCE = 2 ; break ;
 				case 'c' :	if (CONF) log_usage(usage_enable) ; CONF = 1 ; break ;
-				case 'C' :	if (CONF) log_usage(usage_enable) ; CONF = 2 ; break ;
+				case 'm' :	if (CONF) log_usage(usage_enable) ; CONF = 2 ; break ;
+				case 'C' :	if (CONF) log_usage(usage_enable) ; CONF = 3 ; break ;
 				case 'S' :	start = 1 ;	break ;
 				default : 	log_usage(usage_enable) ; 
 			}
diff --git a/src/lib66/ssexec_help.c b/src/lib66/ssexec_help.c
index 487510c0..dee347df 100644
--- a/src/lib66/ssexec_help.c
+++ b/src/lib66/ssexec_help.c
@@ -14,7 +14,7 @@
 
 #include <66/ssexec.h>
 
-char const *usage_enable = "66-enable [ -h ] [ -z ] [ -v verbosity ] [ - l live ] [ -t tree ] [ -f|F ] [ -c|C ] [ -S ] service(s)" ;
+char const *usage_enable = "66-enable [ -h ] [ -z ] [ -v verbosity ] [ - l live ] [ -t tree ] [ -f|F ] [ -c|m|C ] [ -S ] service(s)" ;
 
 char const *help_enable =
 "66-enable <options> service(s)\n"
@@ -27,7 +27,8 @@ char const *help_enable =
 "	-t: name of the tree to use\n"
 "	-f: force to overwrite the service(s)\n"
 "	-F: force to overwrite the service(s) and it dependencies\n"
-"	-c: merge it environment configuration file from frontend file\n"
+"	-c: only appends new key=value pairs at environment configuration file from frontend file\n"
+"	-m: appends new key=value and merge existing one at environment configuration file from frontend file\n"
 "	-C: overwrite it environment configuration file from frontend file\n"
 "	-S: enable and start the service\n"
 ;
-- 
GitLab