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