1 //
2 // aegis - project change supervisor
3 // Copyright (C) 2002-2008, 2012 Peter Miller
4 //
5 // This program is free software; you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation; either version 3 of the License, or (at
8 // your option) any later version.
9 //
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13 // General Public License for more details.
14 //
15 // You should have received a copy of the GNU General Public License
16 // along with this program. If not, see <http://www.gnu.org/licenses/>.
17 //
18 
19 #include <common/sizeof.h>
20 #include <libaegis/arglex2.h>
21 
22 #include <aecomplete/command/aegis.h>
23 #include <aecomplete/command/private.h>
24 #include <aecomplete/complete/nil.h>
25 #include <aecomplete/complete/project/name.h>
26 #include <aecomplete/complete/project/name.h>
27 
28 
29 static complete_ty *result;
30 
31 
32 static void
destructor(command_ty *)33 destructor(command_ty *)
34 {
35 }
36 
37 
38 static void
redirect(const char * name)39 redirect(const char *name)
40 {
41     command_ty     *cmd;
42     string_ty      *s;
43 
44     s = str_from_c(name);
45     cmd = command_find(s);
46     str_free(s);
47     result = command_completion_get(cmd);
48 }
49 
50 
51 static void
aeb(void)52 aeb(void)
53 {
54     redirect("aeb");
55 }
56 
57 
58 static void
aeca(void)59 aeca(void)
60 {
61     redirect("aeca");
62 }
63 
64 
65 static void
aecd(void)66 aecd(void)
67 {
68     redirect("aecd");
69 }
70 
71 
72 static void
aechown(void)73 aechown(void)
74 {
75     redirect("aechown");
76 }
77 
78 
79 static void
aeclean(void)80 aeclean(void)
81 {
82     redirect("aeclean");
83 }
84 
85 
86 static void
aeclone(void)87 aeclone(void)
88 {
89     redirect("aeclone");
90 }
91 
92 
93 static void
aecp(void)94 aecp(void)
95 {
96     redirect("aecp");
97 }
98 
99 
100 static void
aecpu(void)101 aecpu(void)
102 {
103     redirect("aecpu");
104 }
105 
106 
107 static void
aedb(void)108 aedb(void)
109 {
110     redirect("aedb");
111 }
112 
113 
114 static void
aedbu(void)115 aedbu(void)
116 {
117     redirect("aedbu");
118 }
119 
120 
121 static void
aede(void)122 aede(void)
123 {
124     redirect("aede");
125 }
126 
127 
128 static void
aedeu(void)129 aedeu(void)
130 {
131     redirect("aedeu");
132 }
133 
134 
135 static void
aed(void)136 aed(void)
137 {
138     redirect("aed");
139 }
140 
141 
142 static void
aedn(void)143 aedn(void)
144 {
145     redirect("aedn");
146 }
147 
148 
149 static void
aeib(void)150 aeib(void)
151 {
152     redirect("aeib");
153 }
154 
155 
156 static void
aeibu(void)157 aeibu(void)
158 {
159     redirect("aeibu");
160 }
161 
162 
163 static void
aeifail(void)164 aeifail(void)
165 {
166     redirect("aeifail");
167 }
168 
169 
170 static void
aeipass(void)171 aeipass(void)
172 {
173     redirect("aeipass");
174 }
175 
176 
177 static void
aemv(void)178 aemv(void)
179 {
180     redirect("aemv");
181 }
182 
183 
184 static void
aemvu(void)185 aemvu(void)
186 {
187     redirect("aemvu");
188 }
189 
190 
191 static void
aena(void)192 aena(void)
193 {
194     redirect("aena");
195 }
196 
197 
198 static void
aenbr(void)199 aenbr(void)
200 {
201     redirect("aenbr");
202 }
203 
204 
205 static void
aenbru(void)206 aenbru(void)
207 {
208     redirect("aenbru");
209 }
210 
211 
212 static void
aenc(void)213 aenc(void)
214 {
215     redirect("aenc");
216 }
217 
218 
219 static void
aencu(void)220 aencu(void)
221 {
222     redirect("aencu");
223 }
224 
225 
226 static void
aend(void)227 aend(void)
228 {
229     redirect("aend");
230 }
231 
232 
233 static void
aenf(void)234 aenf(void)
235 {
236     redirect("aenf");
237 }
238 
239 
240 static void
aenfu(void)241 aenfu(void)
242 {
243     redirect("aenfu");
244 }
245 
246 
247 static void
aeni(void)248 aeni(void)
249 {
250     redirect("aeni");
251 }
252 
253 
254 static void
aenpr(void)255 aenpr(void)
256 {
257     redirect("aenpr");
258 }
259 
260 
261 static void
aenrls(void)262 aenrls(void)
263 {
264     redirect("aenrls");
265 }
266 
267 
268 static void
aenrv(void)269 aenrv(void)
270 {
271     redirect("aenrv");
272 }
273 
274 
275 static void
aent(void)276 aent(void)
277 {
278     redirect("aent");
279 }
280 
281 
282 static void
aentu(void)283 aentu(void)
284 {
285     redirect("aentu");
286 }
287 
288 
289 static void
aepa(void)290 aepa(void)
291 {
292     redirect("aepa");
293 }
294 
295 
296 static void
aenpa(void)297 aenpa(void)
298 {
299     redirect("aenpa");
300 }
301 
302 
303 static void
aerpa(void)304 aerpa(void)
305 {
306     redirect("aerpa");
307 }
308 
309 
310 static void
aera(void)311 aera(void)
312 {
313     redirect("aera");
314 }
315 
316 
317 static void
aerd(void)318 aerd(void)
319 {
320     redirect("aerd");
321 }
322 
323 
324 static void
aerm(void)325 aerm(void)
326 {
327     redirect("aerm");
328 }
329 
330 
331 static void
aermu(void)332 aermu(void)
333 {
334     redirect("aermu");
335 }
336 
337 
338 static void
aermpr(void)339 aermpr(void)
340 {
341     redirect("aermpr");
342 }
343 
344 
345 static void
aeri(void)346 aeri(void)
347 {
348     redirect("aeri");
349 }
350 
351 
352 static void
aerrv(void)353 aerrv(void)
354 {
355     redirect("aerrv");
356 }
357 
358 
359 static void
aer(void)360 aer(void)
361 {
362     redirect("aer");
363 }
364 
365 
366 static void
aerb(void)367 aerb(void)
368 {
369     redirect("aerb");
370 }
371 
372 
373 static void
aerbu(void)374 aerbu(void)
375 {
376     redirect("aerbu");
377 }
378 
379 
380 static void
aerfail(void)381 aerfail(void)
382 {
383     redirect("aerfail");
384 }
385 
386 
387 static void
aerpass(void)388 aerpass(void)
389 {
390     redirect("aerpass");
391 }
392 
393 
394 static void
aerpu(void)395 aerpu(void)
396 {
397     redirect("aerpu");
398 }
399 
400 
401 static void
aet(void)402 aet(void)
403 {
404     redirect("aet");
405 }
406 
407 
408 static void
aev(void)409 aev(void)
410 {
411     redirect("aev");
412 }
413 
414 
415 static void
ael(void)416 ael(void)
417 {
418     redirect("ael");
419 }
420 
421 
422 static void
usage(void)423 usage(void)
424 {
425     result = complete_nil();
426 }
427 
428 
429 static complete_ty *
completion_get(command_ty *)430 completion_get(command_ty *)
431 {
432     static arglex_dispatch_ty dispatch[] =
433     {
434         { arglex_token_build, aeb, 0 },
435         { arglex_token_change_attributes, aeca, 0 },
436         { arglex_token_change_directory, aecd, 0 },
437         { arglex_token_change_owner, aechown, 0 },
438         { arglex_token_clean, aeclean, 0 },
439         { arglex_token_clone, aeclone, 0 },
440         { arglex_token_copy_file, aecp, 0 },
441         { arglex_token_copy_file_undo, aecpu, 0 },
442         { arglex_token_develop_begin, aedb, 0 },
443         { arglex_token_develop_begin_undo, aedbu, 0 },
444         { arglex_token_develop_end, aede, 0 },
445         { arglex_token_develop_end_undo, aedeu, 0 },
446         { arglex_token_difference, aed, 0 },
447         { arglex_token_delta_name, aedn, 0 },
448         { arglex_token_integrate_begin, aeib, 0 },
449         { arglex_token_integrate_begin_undo, aeibu, 0 },
450         { arglex_token_integrate_fail, aeifail, 0 },
451         { arglex_token_integrate_pass, aeipass, 0 },
452         { arglex_token_move_file, aemv, 0 },
453         { arglex_token_move_file_undo, aemvu, 0 },
454         { arglex_token_new_administrator, aena, 0 },
455         { arglex_token_new_branch, aenbr, 0 },
456         { arglex_token_new_branch_undo, aenbru, 0 },
457         { arglex_token_new_change, aenc, 0 },
458         { arglex_token_new_change_undo, aencu, 0 },
459         { arglex_token_new_developer, aend, 0 },
460         { arglex_token_new_file, aenf, 0 },
461         { arglex_token_new_file_undo, aenfu, 0 },
462         { arglex_token_new_integrator, aeni, 0 },
463         { arglex_token_new_project, aenpr, 0 },
464         { arglex_token_new_release, aenrls, 0 },
465         { arglex_token_new_reviewer, aenrv, 0 },
466         { arglex_token_new_test, aent, 0 },
467         { arglex_token_new_test_undo, aentu, 0 },
468         { arglex_token_project_attributes, aepa, 0 },
469         { arglex_token_project_alias_create, aenpa, 0 },
470         { arglex_token_project_alias_remove, aerpa, 0 },
471         { arglex_token_remove_administrator, aera, 0 },
472         { arglex_token_remove_developer, aerd, 0 },
473         { arglex_token_remove_file, aerm, 0 },
474         { arglex_token_remove_file_undo, aermu, 0 },
475         { arglex_token_remove_project, aermpr, 0 },
476         { arglex_token_remove_integrator, aeri, 0 },
477         { arglex_token_remove_reviewer, aerrv, 0 },
478         { arglex_token_report, aer, 0 },
479         { arglex_token_review_begin, aerb, 0 },
480         { arglex_token_review_begin_undo, aerbu, 0 },
481         { arglex_token_review_fail, aerfail, 0 },
482         { arglex_token_review_pass, aerpass, 0 },
483         { arglex_token_review_pass_undo, aerpu, 0 },
484         { arglex_token_test, aet, 0 },
485 
486         //
487         // Then there are the more ambiguous arguments.
488         // These are only considered if none of the above are
489         // present on the command line (help least of all,
490         // because everything has help).
491         //
492         { arglex_token_version, aev, 1 },
493         { arglex_token_list, ael, 1 },
494     };
495 
496     arglex2_retable(0);
497     arglex_dispatch(dispatch, SIZEOF(dispatch), usage);
498     return result;
499 }
500 
501 
502 static command_vtbl_ty vtbl =
503 {
504     destructor,
505     completion_get,
506     sizeof(command_ty),
507     "aegis",
508 };
509 
510 
511 command_ty     *
command_aegis()512 command_aegis()
513 {
514     return command_new(&vtbl);
515 }
516 
517 
518 // vim: set ts=8 sw=4 et :
519