File Coverage

blib/lib/App/bif/OptArgs.pm
Criterion Covered Total %
statement 9 9 100.0
branch n/a
condition n/a
subroutine 3 3 100.0
pod n/a
total 12 12 100.0


line stmt bran cond sub pod time code
1             package App::bif::OptArgs;
2              
3             our $VERSION = '0.1.5_6';
4              
5             package # do a little hiding
6             App::bif;
7 46     46   236730 use strict;
  46         93  
  46         1132  
8 46     46   229 use warnings;
  46         82  
  46         1220  
9 46     46   35691 use OptArgs;
  46         1534965  
  46         361  
10              
11             $OptArgs::COLOUR = 1;
12             $OptArgs::SORT = 1;
13              
14             arg command => (
15             isa => 'SubCmd',
16             required => 1,
17             comment => '',
18             fallback => {
19             name => 'alias',
20             isa => 'ArrayRef',
21             comment => 'run a command alias',
22             greedy => 1,
23             hidden => 1,
24             },
25             );
26              
27             opt help => (
28             isa => 'Bool',
29             alias => 'h',
30             ishelp => 1,
31             comment => 'print a full usage message and exit',
32             );
33              
34             opt debug => (
35             isa => 'Bool',
36             alias => 'D',
37             comment => 'turn on debugging',
38             hidden => 1,
39             );
40              
41             opt no_pager => (
42             isa => 'Bool',
43             comment => 'do not page output',
44             hidden => 1,
45             );
46              
47             opt no_color => (
48             isa => 'Bool',
49             comment => 'do not colorize output',
50             hidden => 1,
51             );
52              
53             opt user_repo => (
54             isa => 'Bool',
55             alias => 'c',
56             comment => 'use the user repository',
57             hidden => 1,
58             );
59              
60             # ------------------------------------------------------------------------
61             # bif check
62             # ------------------------------------------------------------------------
63             subcmd(
64             cmd => 'check',
65             hidden => 1,
66             comment => 'check all changeset UUIDs',
67             );
68              
69             opt verbose => (
70             isa => 'Bool',
71             alias => 'v',
72             comment => 'display YAML differences',
73             );
74              
75             # ------------------------------------------------------------------------
76             # bif init
77             # ------------------------------------------------------------------------
78             subcmd(
79             cmd => 'init',
80             comment => 'initialize a new repository',
81             );
82              
83             opt keep_invalid => (
84             isa => 'Bool',
85             comment => 'Keep invalid updates in the database',
86             hidden => 1,
87             );
88              
89             arg directory => (
90             isa => 'Str',
91             comment => 'hub location',
92             );
93              
94             opt debug_bifsync => (
95             isa => 'Bool',
96             alias => 'E',
97             comment => 'turn on bifsync debugging',
98             hidden => 1,
99             );
100              
101             # ------------------------------------------------------------------------
102             # bif new
103             # ------------------------------------------------------------------------
104             subcmd(
105             cmd => [qw/new/],
106             comment => 'create a new topic',
107             );
108              
109             arg item => (
110             isa => 'SubCmd',
111             required => 1,
112             comment => '',
113             fallback => {
114             name => 'type',
115             isa => 'ArrayRef',
116             comment => 'create a new topic of type TYPE',
117             greedy => 1,
118             },
119             );
120              
121             opt author => (
122             isa => 'Str',
123             comment => 'Author',
124             hidden => 1,
125             );
126              
127             opt email => (
128             isa => 'Str',
129             comment => 'Email',
130             hidden => 1,
131             );
132              
133             opt lang => (
134             isa => 'Str',
135             comment => 'Lang',
136             hidden => 1,
137             );
138              
139             opt locale => (
140             isa => 'Str',
141             comment => 'Locale',
142             hidden => 1,
143             );
144              
145             opt status => (
146             isa => 'Str',
147             alias => 's',
148             comment => 'State',
149             );
150              
151             opt message => (
152             isa => 'Str',
153             alias => 'm',
154             comment => 'Comment',
155             );
156              
157             # ------------------------------------------------------------------------
158             # bif new entity
159             # ------------------------------------------------------------------------
160             subcmd(
161             cmd => [qw/new entity/],
162             comment => 'create a new entity',
163             );
164              
165             arg name => (
166             isa => 'Str',
167             comment => 'The name of the entity',
168             );
169              
170             arg method => (
171             isa => 'Str',
172             comment => 'The contact type (email, phone, etc)',
173             );
174              
175             arg value => (
176             isa => 'Str',
177             comment => 'The contact value',
178             );
179              
180             # ------------------------------------------------------------------------
181             # new hub
182             # ------------------------------------------------------------------------
183             subcmd(
184             cmd => [qw/new hub/],
185             comment => 'create a new hub',
186             );
187              
188             arg name => (
189             isa => 'Str',
190             comment => 'name of organisation\'s hub',
191             );
192              
193             arg location => (
194             isa => 'Str',
195             comment => 'hub location',
196             );
197              
198             arg title => (
199             isa => 'Str',
200             greedy => 1,
201             comment => 'title of organisation\'s hub',
202             );
203              
204             opt default => (
205             isa => 'Bool',
206             comment => 'mark hub as local/default',
207             );
208              
209             # ------------------------------------------------------------------------
210             # bif new identity
211             # ------------------------------------------------------------------------
212             subcmd(
213             cmd => [qw/new identity/],
214             comment => 'create a new identity',
215             );
216              
217             arg name => (
218             isa => 'Str',
219             comment => 'The name of the identity',
220             );
221              
222             arg method => (
223             isa => 'Str',
224             comment => 'The contact type (email, phone, etc)',
225             );
226              
227             arg value => (
228             isa => 'Str',
229             comment => 'The contact value',
230             );
231              
232             opt self => (
233             isa => 'Bool',
234             comment => 'Create a "self" identity',
235             );
236              
237             opt shortname => (
238             isa => 'Str',
239             alias => 's',
240             comment => 'identity initials or short name',
241             );
242              
243             # ------------------------------------------------------------------------
244             # bif new project
245             # ------------------------------------------------------------------------
246             subcmd(
247             cmd => [qw/new project/],
248             comment => 'create a new project',
249             );
250              
251             arg path => (
252             isa => 'Str',
253             comment => 'The path of the project',
254             );
255              
256             arg title => (
257             isa => 'Str',
258             comment => 'A short description of the project',
259             greedy => 1,
260             );
261              
262             opt phase => (
263             isa => 'Str',
264             alias => 'p',
265             comment => 'Initial project phase (use instead of --status)',
266             );
267              
268             opt dup => (
269             isa => 'Str',
270             alias => 'd',
271             comment => 'project path to duplicate',
272             );
273              
274             opt issues => (
275             isa => 'Str',
276             alias => 'i',
277             default => '',
278             comment => 'fork, copy or move issues on --dup',
279             );
280              
281             opt tasks => (
282             isa => 'Str',
283             alias => 't',
284             default => '',
285             comment => 'copy or move tasks on --dup',
286             );
287              
288             # ------------------------------------------------------------------------
289             # bif new topic
290             # ------------------------------------------------------------------------
291             subcmd(
292             cmd => [qw/new topic/],
293             comment => 'define a topic of discussion',
294             );
295              
296             arg type => (
297             isa => 'Str',
298             comment => 'type of topic',
299             );
300              
301             arg title => (
302             isa => 'Str',
303             comment => 'summary of the topic description',
304             greedy => 1,
305             );
306              
307             opt project => (
308             isa => 'Str',
309             alias => 'p',
310             comment => 'path of the containing project',
311             );
312              
313             opt status => (
314             isa => 'Str',
315             alias => 's',
316             comment => 'Initial status for the topic',
317             );
318              
319             # ------------------------------------------------------------------------
320             # bif new repo
321             # ------------------------------------------------------------------------
322             subcmd(
323             cmd => [qw/new repo/],
324             comment => 'create an new empty repository',
325             );
326              
327             arg directory => (
328             isa => 'Str',
329             required => 1,
330             comment => 'location of repository',
331             );
332              
333             opt config => (
334             isa => 'Bool',
335             comment => 'Create a default repo config file',
336             );
337              
338             # ------------------------------------------------------------------------
339             # bif list
340             # ------------------------------------------------------------------------
341             subcmd(
342             cmd => [qw/list/],
343             comment => 'list topics in the repository',
344             );
345              
346             arg items => (
347             isa => 'SubCmd',
348             comment => '',
349             required => 1,
350             );
351              
352             # ------------------------------------------------------------------------
353             # bif list entities
354             # ------------------------------------------------------------------------
355             subcmd(
356             cmd => [qw/list entities/],
357             comment => 'list entities (contacts)',
358             );
359              
360             # ------------------------------------------------------------------------
361             # list functions
362             # ------------------------------------------------------------------------
363             subcmd(
364             cmd => [qw/list functions/],
365             hidden => 1,
366             comment => 'list database functions/tables',
367             );
368              
369             # ------------------------------------------------------------------------
370             # list hosts
371             # ------------------------------------------------------------------------
372             subcmd(
373             cmd => [qw/list hosts/],
374             comment => 'list provider host locations',
375             );
376              
377             # ------------------------------------------------------------------------
378             # list hubs
379             # ------------------------------------------------------------------------
380             subcmd(
381             cmd => [qw/list hubs/],
382             comment => 'list hubs and their locations',
383             );
384              
385             # ------------------------------------------------------------------------
386             # bif list identities
387             # ------------------------------------------------------------------------
388             subcmd(
389             cmd => [qw/list identities/],
390             comment => 'list identities (contacts)',
391             );
392              
393             # ------------------------------------------------------------------------
394             # list plans
395             # ------------------------------------------------------------------------
396             subcmd(
397             cmd => [qw/list plans/],
398             comment => 'list provider commercial offerings',
399             );
400              
401             # ------------------------------------------------------------------------
402             # bif list topics
403             # ------------------------------------------------------------------------
404             subcmd(
405             cmd => [qw/list topics/],
406             comment => 'list tasks and issues grouped by project',
407             );
408              
409             opt status => (
410             isa => 'ArrayRef',
411             alias => 's',
412             comment => 'limit topics to a specific status',
413             );
414              
415             opt project_status => (
416             isa => 'Str',
417             alias => 'P',
418             comment => 'limit projects by a particular project status',
419             );
420              
421             # ------------------------------------------------------------------------
422             # bif list project-status
423             # ------------------------------------------------------------------------
424             subcmd(
425             cmd => [qw/list project-status/],
426             comment => 'list valid status for projects',
427             );
428              
429             arg path => (
430             isa => 'Str',
431             comment => 'the path of a project',
432             required => 1,
433             );
434              
435             # ------------------------------------------------------------------------
436             # bif list projects
437             # ------------------------------------------------------------------------
438             subcmd(
439             cmd => [qw/list projects/],
440             comment => 'list projects with topic counts and progress',
441             );
442              
443             arg status => (
444             isa => 'ArrayRef',
445             greedy => 1,
446             comment => 'limit the list by status type(s)',
447             );
448              
449             opt local => (
450             isa => 'Bool',
451             alias => 'l',
452             comment => 'limit the list to projects that synchronise.',
453             );
454              
455             # ------------------------------------------------------------------------
456             # list providers
457             # ------------------------------------------------------------------------
458             subcmd(
459             cmd => [qw/list providers/],
460             comment => 'list registered providers',
461             );
462              
463             # ------------------------------------------------------------------------
464             # list tables
465             # ------------------------------------------------------------------------
466             subcmd(
467             cmd => [qw/list tables/],
468             hidden => 1,
469             comment => 'list database tables',
470             );
471              
472             # ------------------------------------------------------------------------
473             # bif list topic-types
474             # ------------------------------------------------------------------------
475             subcmd(
476             cmd => [qw/list topic-types/],
477             comment => 'list valid type and status for topics',
478             );
479              
480             arg project => (
481             isa => 'Str',
482             comment => 'the path of a project',
483             required => 1,
484             );
485              
486             # ------------------------------------------------------------------------
487             # bif show
488             # ------------------------------------------------------------------------
489             subcmd(
490             cmd => [qw/show/],
491             comment => "display a topic's current status",
492             );
493              
494             arg item => (
495             isa => 'SubCmd',
496             comment => '',
497             required => 1,
498             fallback => {
499             name => 'id',
500             isa => 'Str',
501             comment => 'topic ID or project PATH',
502             },
503             );
504              
505             opt log => (
506             isa => 'Bool',
507             comment => 'include bif-log output',
508             alias => 'l',
509             );
510              
511             opt full => (
512             isa => 'Bool',
513             comment => 'display a more verbose current status',
514             alias => 'f',
515             );
516              
517             opt uuid => (
518             isa => 'Bool',
519             alias => 'U',
520             comment => 'treat ID as a UUID',
521             );
522              
523             # ------------------------------------------------------------------------
524             # bif show entity
525             # ------------------------------------------------------------------------
526             subcmd(
527             cmd => [qw/show entity/],
528             comment => 'display full entity characteristics',
529             );
530              
531             arg id => (
532             isa => 'Int',
533             comment => 'entity ID',
534             required => 1,
535             );
536              
537             # ------------------------------------------------------------------------
538             # bif show identity
539             # ------------------------------------------------------------------------
540             subcmd(
541             cmd => [qw/show identity/],
542             comment => 'display full identity characteristics',
543             );
544              
545             arg id => (
546             isa => 'Int',
547             comment => 'identity ID',
548             required => 1,
549             );
550              
551             # ------------------------------------------------------------------------
552             # bif show hub
553             # ------------------------------------------------------------------------
554             subcmd(
555             cmd => [qw/show hub/],
556             comment => 'summarize the current status of a hub',
557             );
558              
559             arg name => (
560             isa => 'Str',
561             comment => 'hub name',
562             required => 1,
563             );
564              
565             # ------------------------------------------------------------------------
566             # show plan
567             # ------------------------------------------------------------------------
568             subcmd(
569             cmd => [qw/show plan/],
570             comment => 'show a provider plan',
571             );
572              
573             arg id => (
574             isa => 'Str',
575             required => 1,
576             comment => 'ID of provider plan',
577             );
578              
579             # ------------------------------------------------------------------------
580             # bif show project
581             # ------------------------------------------------------------------------
582             subcmd(
583             cmd => [qw/show project/],
584             comment => 'display current project status',
585             );
586              
587             arg path => (
588             isa => 'Str',
589             comment => 'a project PATH',
590             required => 1,
591             );
592              
593             # ------------------------------------------------------------------------
594             # bif show table
595             # ------------------------------------------------------------------------
596             subcmd(
597             cmd => [qw/show table/],
598             comment => 'summarize the current status of a table',
599             );
600              
601             arg name => (
602             isa => 'Str',
603             required => 1,
604             comment => 'table name',
605             );
606              
607             # ------------------------------------------------------------------------
608             # bif show topic
609             # ------------------------------------------------------------------------
610             subcmd(
611             cmd => [qw/show topic/],
612             comment => 'summarize the current status of a topic',
613             );
614              
615             arg id => (
616             isa => 'Int',
617             comment => 'topic ID',
618             required => 1,
619             );
620              
621             # ------------------------------------------------------------------------
622             # bif show timesheet
623             # ------------------------------------------------------------------------
624             subcmd(
625             cmd => [qw/show timesheet/],
626             comment => 'display time worked per project',
627             );
628              
629             arg date => (
630             isa => 'Str',
631             comment => 'timesheet start date',
632             );
633              
634             opt identity => (
635             isa => 'Str',
636             alias => 'i',
637             comment => 'alternative identity instead of self',
638             );
639              
640             opt number => (
641             isa => 'Int',
642             alias => 'n',
643             comment => 'number of timespans to generate',
644             );
645              
646             opt day => (
647             isa => 'Bool',
648             alias => 'd',
649             comment => 'generate a daily timesheet',
650             );
651              
652             opt week => (
653             isa => 'Bool',
654             alias => 'w',
655             comment => 'generate a weekly timesheet',
656             );
657              
658             opt month => (
659             isa => 'Bool',
660             alias => 'm',
661             comment => 'generate a monthly timesheet',
662             );
663              
664             opt year => (
665             isa => 'Bool',
666             alias => 'y',
667             comment => 'generate a yearly timesheet',
668             );
669              
670             opt rollup => (
671             isa => 'Bool',
672             alias => 'r',
673             comment => 'roll times up into parent project(s)',
674             );
675              
676             # ------------------------------------------------------------------------
677             # bif show change
678             # ------------------------------------------------------------------------
679             subcmd(
680             cmd => [qw/show change/],
681             comment => 'show an update as YAML',
682             );
683              
684             arg uid => (
685             isa => 'Str',
686             required => 1,
687             comment => 'the change cID',
688             );
689              
690             opt diff => (
691             isa => 'Bool',
692             alias => 'd',
693             comment => 'diff actual/expected values (devel only)',
694             );
695              
696             # ------------------------------------------------------------------------
697             # bif show version
698             # ------------------------------------------------------------------------
699             subcmd(
700             cmd => [qw/show version/],
701             comment => 'show version and build informationL',
702             );
703              
704             # ------------------------------------------------------------------------
705             # bif log
706             # ------------------------------------------------------------------------
707             subcmd(
708             cmd => [qw/log/],
709             comment => 'view comments and status history',
710             );
711              
712             arg item => (
713             isa => 'SubCmd',
714             comment => '',
715             fallback => {
716             name => 'id',
717             isa => 'Str',
718             comment => 'topic ID or project PATH',
719             },
720             );
721              
722             opt uuid => (
723             isa => 'Bool',
724             alias => 'U',
725             comment => 'treat arguments as if they are a UUIDs',
726             );
727              
728             opt format => (
729             isa => 'Str',
730             alias => 'f',
731             default => 'full',
732             comment => 'output format: full | short | custom:...',
733             );
734              
735             opt order => (
736             isa => 'Str',
737             alias => 'o',
738             default => 'time',
739             comment => 'output order: time | id | custom:...',
740             );
741              
742             opt short => (
743             isa => 'Bool',
744             alias => 's',
745             comment => 'equivalent to "--format short"',
746             );
747              
748             # ------------------------------------------------------------------------
749             # bif log identity
750             # ------------------------------------------------------------------------
751             subcmd(
752             cmd => [qw/log identity/],
753             comment => 'review history of an identity',
754             );
755              
756             arg id => (
757             isa => 'Str',
758             comment => 'identity ID',
759             required => 1,
760             );
761              
762             # ------------------------------------------------------------------------
763             # bif log entity
764             # ------------------------------------------------------------------------
765             subcmd(
766             cmd => [qw/log entity/],
767             comment => 'review history of an entity',
768             );
769              
770             arg id => (
771             isa => 'Str',
772             comment => 'entity ID',
773             required => 1,
774             );
775              
776             # ------------------------------------------------------------------------
777             # bif log hub
778             # ------------------------------------------------------------------------
779             subcmd(
780             cmd => [qw/log hub/],
781             comment => 'review history of a hub',
782             );
783              
784             arg name => (
785             isa => 'Str',
786             comment => 'hub name',
787             required => 1,
788             );
789              
790             # ------------------------------------------------------------------------
791             # bif log project
792             # ------------------------------------------------------------------------
793             subcmd(
794             cmd => [qw/log project/],
795             comment => 'review history of a project',
796             );
797              
798             arg path => (
799             isa => 'Str',
800             comment => 'project PATH or ID',
801             required => 1,
802             );
803              
804             # ------------------------------------------------------------------------
805             # bif log topic
806             # ------------------------------------------------------------------------
807             subcmd(
808             cmd => [qw/log topic/],
809             comment => 'review history of a topic',
810             );
811              
812             arg id => (
813             isa => 'Str',
814             comment => 'topic ID',
815             required => 1,
816             );
817              
818             # ------------------------------------------------------------------------
819             # bif update
820             # ------------------------------------------------------------------------
821             subcmd(
822             cmd => [qw/update/],
823             comment => 'comment on or modify a topic',
824             );
825              
826             arg id => (
827             isa => 'SubCmd',
828             required => 1,
829             comment => 'topic ID or project PATH',
830             fallback => {
831             name => 'id',
832             isa => 'Str',
833             comment => 'topic ID or project PATH',
834             },
835             );
836              
837             arg status => (
838             isa => 'Str',
839             comment => 'topic STATUS',
840             );
841              
842             opt uuid => (
843             isa => 'Bool',
844             alias => 'U',
845             comment => 'treat ID as a UUID',
846             );
847              
848             opt author => (
849             isa => 'Str',
850             comment => 'Author',
851             hidden => 1,
852             );
853              
854             opt lang => (
855             isa => 'Str',
856             comment => 'Lang',
857             hidden => 1,
858             );
859              
860             opt locale => (
861             isa => 'Str',
862             comment => 'Locale',
863             hidden => 1,
864             );
865              
866             opt message => (
867             isa => 'Str',
868             comment => 'Comment',
869             alias => 'm',
870             );
871              
872             opt reply => (
873             isa => 'Str',
874             comment => 'reply to a change cID',
875             alias => 'r',
876             );
877              
878             opt title => (
879             isa => 'Str',
880             alias => 't',
881             comment => 'Title'
882             );
883              
884             # ------------------------------------------------------------------------
885             # bif update identity
886             # ------------------------------------------------------------------------
887             subcmd(
888             cmd => [qw/update identity/],
889             comment => 'update an identity',
890             );
891              
892             arg id => (
893             isa => 'Int',
894             required => 1,
895             comment => 'identity ID',
896             );
897              
898             opt shortname => (
899             isa => 'Str',
900             alias => 's',
901             comment => 'identity initials or short name',
902             );
903              
904             # ------------------------------------------------------------------------
905             # bif update entity
906             # ------------------------------------------------------------------------
907             subcmd(
908             cmd => [qw/update entity/],
909             comment => 'update an entity',
910             );
911              
912             arg id => (
913             isa => 'Int',
914             required => 1,
915             comment => 'entity ID',
916             );
917              
918             # ------------------------------------------------------------------------
919             # bif update hub
920             # ------------------------------------------------------------------------
921             subcmd(
922             cmd => [qw/update hub/],
923             comment => 'update a hub',
924             );
925              
926             arg id => (
927             isa => 'Int',
928             required => 1,
929             comment => 'hub ID',
930             );
931              
932             opt name => (
933             isa => 'Str',
934             alias => 'n',
935             comment => 'hub name'
936             );
937              
938             opt title => (
939             isa => 'Str',
940             alias => 't',
941             comment => 'hub title'
942             );
943              
944             # ------------------------------------------------------------------------
945             # bif update project
946             # ------------------------------------------------------------------------
947             subcmd(
948             cmd => [qw/update project/],
949             comment => 'update an project',
950             );
951              
952             arg path => (
953             isa => 'Str',
954             required => 1,
955             comment => 'project path',
956             );
957              
958             arg status => (
959             isa => 'Str',
960             comment => 'topic status',
961             );
962              
963             opt title => (
964             isa => 'Str',
965             alias => 't',
966             comment => 'Title',
967             );
968              
969             # ------------------------------------------------------------------------
970             # bif update topic
971             # ------------------------------------------------------------------------
972             subcmd(
973             cmd => [qw/update topic/],
974             comment => 'update an topic',
975             );
976              
977             arg id => (
978             isa => 'Int',
979             required => 1,
980             comment => 'topic ID',
981             );
982              
983             arg status => (
984             isa => 'Str',
985             comment => 'topic status',
986             );
987              
988             opt title => (
989             isa => 'Str',
990             alias => 't',
991             comment => 'Title',
992             );
993              
994             # ------------------------------------------------------------------------
995             # bif drop
996             # ------------------------------------------------------------------------
997             subcmd(
998             cmd => [qw/drop/],
999             comment => 'remove an item from the database',
1000             hidden => 1,
1001             );
1002              
1003             arg item => (
1004             isa => 'SubCmd',
1005             required => 1,
1006             comment => 'topic ID or project PATH',
1007             );
1008              
1009             opt force => (
1010             isa => 'Bool',
1011             alias => 'f',
1012             comment => 'Do not ask for confirmation',
1013             );
1014              
1015             # ------------------------------------------------------------------------
1016             # bif drop hub
1017             # ------------------------------------------------------------------------
1018             subcmd(
1019             cmd => [qw/drop hub/],
1020             comment => 'remove a hub',
1021             );
1022              
1023             arg name => (
1024             isa => 'Str',
1025             required => 1,
1026             comment => 'hub name (TODO: or ID)',
1027             );
1028              
1029             # ------------------------------------------------------------------------
1030             # bif drop project
1031             # ------------------------------------------------------------------------
1032             subcmd(
1033             cmd => [qw/drop project/],
1034             comment => 'remove a project',
1035             );
1036              
1037             arg path => (
1038             isa => 'Str',
1039             required => 1,
1040             comment => 'project PATH or ID',
1041             );
1042              
1043             # ------------------------------------------------------------------------
1044             # bif drop topic
1045             # ------------------------------------------------------------------------
1046             subcmd(
1047             cmd => [qw/drop topic/],
1048             comment => 'remove a topic',
1049             );
1050              
1051             arg id => (
1052             isa => 'Int',
1053             required => 1,
1054             comment => 'topic ID',
1055             );
1056              
1057             # ------------------------------------------------------------------------
1058             # bif drop change
1059             # ------------------------------------------------------------------------
1060             subcmd(
1061             cmd => [qw/drop change/],
1062             comment => 'remove a change',
1063             );
1064              
1065             arg uid => (
1066             isa => 'Int',
1067             required => 1,
1068             comment => 'change cID',
1069             );
1070              
1071             # ------------------------------------------------------------------------
1072             # bif pull
1073             # ------------------------------------------------------------------------
1074             subcmd(
1075             cmd => [qw/pull/],
1076             comment => 'import topics from elsewhere',
1077             );
1078              
1079             arg item => (
1080             isa => 'SubCmd',
1081             comment => '',
1082             required => 1,
1083             );
1084              
1085             opt debug_bifsync => (
1086             isa => 'Bool',
1087             alias => 'E',
1088             hidden => 1,
1089             comment => 'turn on bifsync debugging',
1090             );
1091              
1092             # ------------------------------------------------------------------------
1093             # bif pull identity
1094             # ------------------------------------------------------------------------
1095              
1096             subcmd(
1097             cmd => [qw/pull identity/],
1098             comment => 'import an identity from a repository',
1099             );
1100              
1101             arg location => (
1102             isa => 'Str',
1103             required => 1,
1104             comment => 'location of identity repository',
1105             );
1106              
1107             # For the moment just handle self identities.
1108             #arg identity => (
1109             # isa => 'Str',
1110             # comment => 'location of identity repository',
1111             #);
1112              
1113             opt self => (
1114             isa => 'Bool',
1115             comment => 'register identity as "myself" after import',
1116             );
1117              
1118             # ------------------------------------------------------------------------
1119             # pull hub
1120             # ------------------------------------------------------------------------
1121              
1122             subcmd(
1123             cmd => [qw/pull hub/],
1124             comment => 'import project list from a hub repository',
1125             );
1126              
1127             arg location => (
1128             isa => 'Str',
1129             required => 1,
1130             comment => 'location of a remote repository',
1131             );
1132              
1133             # ------------------------------------------------------------------------
1134             # bif pull project
1135             # ------------------------------------------------------------------------
1136              
1137             subcmd(
1138             cmd => [qw/pull project/],
1139             comment => 'import projects from a hub',
1140             );
1141              
1142             arg path => (
1143             isa => 'Str',
1144             required => 1,
1145             comment => 'path(s) of the project(s) to be imported',
1146             );
1147              
1148             opt debug_bifsync => (
1149             isa => 'Bool',
1150             alias => 'E',
1151             comment => 'turn on bifsync debugging',
1152             hidden => 1,
1153             );
1154              
1155             opt hub => (
1156             isa => 'Str',
1157             comment => 'a specific hub to pull from',
1158             );
1159              
1160             # ------------------------------------------------------------------------
1161             # pull provider
1162             # ------------------------------------------------------------------------
1163             subcmd(
1164             cmd => [qw/pull provider/],
1165             comment => 'import plans from a provider',
1166             );
1167              
1168             arg location => (
1169             isa => 'Str',
1170             required => 1,
1171             comment => 'management location of provider',
1172             );
1173              
1174             # ------------------------------------------------------------------------
1175             # bif push
1176             # ------------------------------------------------------------------------
1177             subcmd(
1178             cmd => [qw/push/],
1179             comment => 'export topics to somewhere else',
1180             );
1181              
1182             arg id => (
1183             isa => 'SubCmd',
1184             required => 1,
1185             comment => 'topic ID or project PATH',
1186             fallback => {
1187             name => 'id',
1188             isa => 'Str',
1189             comment => 'topic ID or project PATH',
1190             },
1191             );
1192              
1193             arg destination => (
1194             isa => 'Str',
1195             required => 1,
1196             comment => 'target PATH or location',
1197             );
1198              
1199             opt message => (
1200             isa => 'Str',
1201             comment => 'optional comment for the associated change',
1202             alias => 'm',
1203             );
1204              
1205             # ------------------------------------------------------------------------
1206             # push hub
1207             # ------------------------------------------------------------------------
1208             subcmd(
1209             cmd => [qw/push hub/],
1210             comment => 'export a hub to a provider host',
1211             );
1212              
1213             arg name => (
1214             isa => 'Str',
1215             required => 1,
1216             comment => 'name of your organisation\'s hub',
1217             );
1218              
1219             arg hosts => (
1220             isa => 'ArrayRef',
1221             required => 1,
1222             greedy => 1,
1223             comment => 'provider host address(es)',
1224             );
1225              
1226             # ------------------------------------------------------------------------
1227             # bif push project
1228             # ------------------------------------------------------------------------
1229             subcmd(
1230             cmd => [qw/push project/],
1231             comment => 'export a project to a hub',
1232             );
1233              
1234             arg path => (
1235             isa => 'Str',
1236             required => 1,
1237             comment => 'path of the project to export',
1238             );
1239              
1240             arg hub => (
1241             isa => 'Str',
1242             required => 1,
1243             comment => 'destination location URI',
1244             );
1245              
1246             opt debug_bifsync => (
1247             isa => 'Bool',
1248             alias => 'E',
1249             comment => 'turn on bifsync debugging',
1250             hidden => 1,
1251             );
1252              
1253             # ------------------------------------------------------------------------
1254             # bif push topic
1255             # ------------------------------------------------------------------------
1256             subcmd(
1257             cmd => [qw/push topic/],
1258             comment => 'push a topic to another project',
1259             );
1260              
1261             arg id => (
1262             isa => 'Int',
1263             required => 1,
1264             comment => 'topic ID',
1265             );
1266              
1267             arg path => (
1268             isa => 'ArrayRef',
1269             required => 1,
1270             greedy => 1,
1271             comment => 'path(s) of the destination project(s)',
1272             );
1273              
1274             opt err_on_exists => (
1275             isa => 'Bool',
1276             comment => 'raise an error when topic exists at destination',
1277             hidden => 1,
1278             );
1279              
1280             # ------------------------------------------------------------------------
1281             # signup
1282             # ------------------------------------------------------------------------
1283             subcmd(
1284             cmd => [qw/signup/],
1285             comment => 'sign up with a hub provider',
1286             hidden => 1,
1287             );
1288              
1289             arg name => (
1290             isa => 'Str',
1291             required => 1,
1292             comment => 'hub name',
1293             );
1294              
1295             arg plan => (
1296             isa => 'Str',
1297             required => 1,
1298             comment => 'provider plan name',
1299             );
1300              
1301             opt debug_bs => (
1302             isa => 'Bool',
1303             alias => 'E',
1304             comment => 'turn on bifsync debugging',
1305             hidden => 1,
1306             );
1307              
1308             # ------------------------------------------------------------------------
1309             # bif sync
1310             # ------------------------------------------------------------------------
1311             subcmd(
1312             cmd => [qw/sync/],
1313             comment => 'exchange changes with a hub',
1314             );
1315              
1316             opt path => (
1317             isa => 'ArrayRef',
1318             alias => 'p',
1319             comment => 'limit sync to a particular project',
1320             );
1321              
1322             opt hub => (
1323             isa => 'ArrayRef',
1324             alias => 'H',
1325             comment => 'limit sync to a particular hub',
1326             );
1327              
1328             opt message => (
1329             isa => 'Str',
1330             alias => 'm',
1331             default => '',
1332             hidden => 1,
1333             comment => 'message for multiple test script changes / second ',
1334             );
1335              
1336             opt debug_bifsync => (
1337             isa => 'Bool',
1338             alias => 'E',
1339             comment => 'turn on bifsync debugging',
1340             hidden => 1,
1341             );
1342              
1343             # ------------------------------------------------------------------------
1344             # bif upgrade
1345             # ------------------------------------------------------------------------
1346             subcmd(
1347             cmd => [qw/upgrade/],
1348             comment => 'upgrade a repository',
1349             hidden => 1,
1350             );
1351              
1352             arg directory => (
1353             isa => 'Str',
1354             comment => 'location if this is a hub upgrade',
1355             );
1356              
1357             opt force => (
1358             isa => 'Bool',
1359             alias => 'f',
1360             comment => 'force an upgrade, even if to same version',
1361             );
1362              
1363             # ------------------------------------------------------------------------
1364             # bif sql
1365             # ------------------------------------------------------------------------
1366             subcmd(
1367             cmd => [qw/sql/],
1368             comment => 'run an SQL command against the database',
1369             hidden => 1,
1370             );
1371              
1372             arg statement => (
1373             isa => 'Str',
1374             comment => 'SQL statement text',
1375             greedy => 1,
1376             );
1377              
1378             opt noprint => (
1379             isa => 'Bool',
1380             comment => 'do not print output but return a data structure',
1381             alias => 'n',
1382             );
1383              
1384             opt test => (
1385             isa => 'Bool',
1386             comment => 'use Test::More::diag to output rows',
1387             alias => 't',
1388             );
1389              
1390             opt write => (
1391             isa => 'Bool',
1392             comment => 'run with a writeable database (default is read-only)',
1393             alias => 'w',
1394             );
1395              
1396             # ------------------------------------------------------------------------
1397             # wlog
1398             # ------------------------------------------------------------------------
1399             subcmd(
1400             cmd => [qw/wlog/],
1401             comment => 'review entries in the work buffer',
1402             );
1403              
1404             opt identity => (
1405             isa => 'Str',
1406             alias => 'i',
1407             comment => 'alternative identity instead of self',
1408             );
1409              
1410             opt long => (
1411             isa => 'Bool',
1412             alias => 'l',
1413             comment => 'print multiple-line email-style work entries',
1414             );
1415              
1416             # ------------------------------------------------------------------------
1417             # bif work
1418             # ------------------------------------------------------------------------
1419             subcmd(
1420             cmd => [qw/work/],
1421             comment => 'work on a topic',
1422             );
1423              
1424             arg id => (
1425             isa => 'Str',
1426             comment => 'topic ID or PATH to work on',
1427             );
1428              
1429             arg comment => (
1430             isa => 'Str',
1431             greedy => 1,
1432             comment => 'comment to record with this work',
1433             );
1434              
1435             opt at => (
1436             isa => 'Str',
1437             alias => 'a',
1438             default => sub {
1439             my ( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) =
1440             localtime(time);
1441             return sprintf(
1442             '%0.4d-%0.2d-%0.2d %0.2d:%0.2d:%0.2d',
1443             $year + 1900,
1444             $mon + 1, $mday, $hour, $min, $sec
1445             );
1446             },
1447             comment => 'start or stop time: [yyyy-mm-dd] hh:mm',
1448             );
1449              
1450             opt force => (
1451             isa => 'Bool',
1452             alias => 'f',
1453             comment => 'force work when working something else',
1454             );
1455              
1456             opt not_billable => (
1457             isa => 'Bool',
1458             alias => 'B',
1459             default => 0,
1460             comment => 'do not record this work on next update',
1461             );
1462              
1463             1;
1464             __END__