@@ -35,6 +35,18 @@ using namespace kafe;
3535extern char ** environ;
3636#endif
3737
38+ void loadEnvMap (map<const string, const string> &envVals) {
39+ for (char **current = environ; *current; ++current) {
40+ const string envVal = string (*current);
41+ const ulong pos = envVal.find_first_of (' =' );
42+ pair<string, string> p = pair<string, string>(
43+ envVal.substr (0 , pos),
44+ envVal.substr (pos + 1 )
45+ );
46+ envVals.insert (p);
47+ }
48+ }
49+
3850void print_usage () {
3951 fflush (stderr);
4052 fflush (stdout);
@@ -44,13 +56,15 @@ void print_usage() {
4456
4557 cout << " Usage: kafe <command> [arguments, ...]" << endl;
4658 cout << " kafe do <environment> <task,task,task,...>" << endl;
59+ cout << " kafe local <task,task,task,...>" << endl;
4760 cout << " kafe <help|--help>" << endl;
4861 cout << " kafe <version|--version> [--lib]" << endl;
4962 cout << " kafe <about|--about>" << endl;
5063
5164 cout << " \n " ;
5265
5366 cout << " kafe do: execute tasks from project file with given environment." << endl;
67+ cout << " kafe local: execute tasks from project file on localhost." << endl;
5468 cout << " kafe help: display this help." << endl;
5569 cout << " kafe version: display KAFE program version and exit. Optionally,"
5670 " show libkafe version used if argument --lib is set." << endl;
@@ -118,24 +132,16 @@ int main(int argc, char *argv[]) {
118132
119133 if (0 == strcmp (" do" , argv[1 ])) {
120134 if (4 > argc) {
121- cerr << " Command expects exactly at least two arguments - environment name and "
122- " a comma separated task list with any number of arbitrary arguments "
135+ cerr << " Command expects at least two arguments - environment name and "
136+ " a comma separated task list, and optionally - zero or more of arguments "
123137 " to forward to the tasks being invoked.\n "
124138 " Example: kafe do staging task1,task2,task3 <arg, arg, arg>" ;
125139 print_usage ();
126140 return 1 ;
127141 }
128142
129- map<const string, const string> envvals;
130- for (char **current = environ; *current; ++current) {
131- const string envl = string (*current);
132- const int pos = envl.find_first_of (' =' );
133- pair<string, string> p = pair<string, string>(
134- envl.substr (0 , pos),
135- envl.substr (pos + 1 )
136- );
137- envvals.insert (p);
138- }
143+ map<const string, const string> envVals;
144+ loadEnvMap (envVals);
139145
140146 string environment = argv[2 ];
141147 string task_list_s = argv[3 ];
@@ -149,7 +155,41 @@ int main(int argc, char *argv[]) {
149155 try {
150156 auto project = Project (" kafe.lua" );
151157 auto logger = Logger ();
152- auto context = Context (envvals, environment, task_list_v, &logger);
158+ auto context = Context (envVals, environment, task_list_v, &logger);
159+ auto inventory = Inventory ();
160+ project.execute (context, inventory, extra_args);
161+ } catch (RuntimeException &e) {
162+ cerr << e.what () << endl;
163+ return 1 ;
164+ }
165+ return 0 ;
166+ }
167+
168+ if (0 == strcmp (" local" , argv[1 ])) {
169+ if (3 > argc) {
170+ cerr << " Command expects at least one argument - "
171+ " a comma separated task list, and optionally - zero or more arguments "
172+ " to forward to the tasks being invoked.\n "
173+ " Example: kafe run task1,task2,task3 <arg, arg, arg>" ;
174+ print_usage ();
175+ return 1 ;
176+ }
177+
178+ map<const string, const string> envVals;
179+ loadEnvMap (envVals);
180+
181+ string task_list_s = argv[2 ];
182+ vector<string> task_list_v = split_csv_arguments (task_list_s, ' ,' );
183+
184+ vector<string> extra_args;
185+ for (int ii = 4 ; ii < argc; ++ii) {
186+ extra_args.emplace_back (argv[ii]);
187+ }
188+
189+ try {
190+ auto project = Project (" kafe.lua" );
191+ auto logger = Logger ();
192+ auto context = Context (envVals, " " , task_list_v, &logger);
153193 auto inventory = Inventory ();
154194 project.execute (context, inventory, extra_args);
155195 } catch (RuntimeException &e) {
0 commit comments