123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412 |
- # ------------------------------------------------------------------------------
- # (C) Crown copyright Met Office. All rights reserved.
- # For further details please refer to the file COPYRIGHT.txt
- # which you should have received as part of this distribution.
- # ------------------------------------------------------------------------------
- use strict;
- use warnings;
- package Fcm::CLI::Config::Default;
- use Fcm::CLI::Option;
- use Fcm::CLI::Subcommand;
- my %DESCRIPTION_OF = (
- # --------------------------------------------------------------------------
- BROWSER => <<'END_DESCRIPTION',
- If TARGET is specified, it must be a FCM URL keyword, a Subversion URL or the
- path to a local working copy. If not specified, the current working directory
- is assumed to be a working copy. If the --browser option is specified, the
- specified web browser command is used to launch the repository browser.
- Otherwise, it attempts to use the default browser from the configuration
- setting.
- END_DESCRIPTION
- # --------------------------------------------------------------------------
- BUILD => <<'END_DESCRIPTION',
- The path to a CFGFILE may be provided. Otherwise, the build system searches the
- default locations for a bld cfg file.
- If no option is specified, the options "-s 5 -t all -j 1 -v 1" are assumed.
- If the option for full build is specified, the sub-directories created by
- previous builds will be removed, so that the current build can start cleanly.
- The -s option can be used to limit the actions performed by the build system up
- to a named stage. The stages are:
- "1", "s" or "setup" - stage 1, setup
- "2", "pp" or "pre_process" - stage 2, pre-process
- "3", "gd" or "generate_dependency" - stage 3, generate dependency
- "4", "gi" or "generate_interface" - stage 4, generate Fortran 9X interface
- "5", "m", "make" - stage 5, make
- If a colon separated list of targets is specified using the -t option, the
- default targets specified in the configuration file will not be used.
- If archive mode is switched on, build sub-directories that are only used in the
- build process will be archived to TAR files. The default is off.
- If specified, the verbose level must be an integer greater than 0. Verbose
- level 0 is the quiet mode. Increasing the verbose level will increase the
- amount of diagnostic output.
- When a build is invoked, it sets up a lock file in the build root directory.
- The lock is normally removed at the end of the build. While the lock file is in
- place, the build commands invoked in the same root directory will fail. If
- you need to bypass this check for whatever reason, you can invoke the build
- system with the --ignore-lock option.
- END_DESCRIPTION
- # --------------------------------------------------------------------------
- CFG_PRINTER => <<'END_DESCRIPTION',
- If no option is specified, the output will be sent to standard output.
- END_DESCRIPTION
- # --------------------------------------------------------------------------
- EXTRACT => <<'END_DESCRIPTION',
- The path to a CFG file may be provided. Otherwise, the extract system searches
- the default locations for an ext cfg file.
- If no option is specified, the system will attempt an incremental extract where
- appropriate.
- If specified, the verbose level must be an integer greater than 0. Verbose
- level 0 is the quiet mode. Increasing the verbose level will increase the
- amount of diagnostic output.
- When an extract is invoked, it sets up a lock file in the extract destination
- root directory. The lock is normally removed at the end of the extract. While
- the lock file is in place, other extract commands invoked in the same
- destination root directory will fail. If you need to bypass this check for
- whatever reason, you can invoke the extract system with the --ignore-lock
- option.
- END_DESCRIPTION
- # --------------------------------------------------------------------------
- EXTRACT_CONFIG_COMPARATOR => <<'END_DESCRIPTION',
- Compares the extract configurations of two similar extract configuration files
- CFGFILE1 and CFGFILE2.
- In normal mode with verbosity level 2 or above, displays the change log of each
- revision.
- In wiki mode, print revision tables in wiki format. The argument to the --wiki
- option must be the Subversion URL or FCM URL keyword of a FCM project
- associated with the intended Trac system. The --verbose option has no effect
- in wiki mode.
- END_DESCRIPTION
- # --------------------------------------------------------------------------
- GUI => <<'END_DESCRIPTION',
- The optional argument PATH modifies the initial working directory of the GUI.
- END_DESCRIPTION
- # --------------------------------------------------------------------------
- KEYWORD => <<'END_DESCRIPTION',
- If no argument is specified, prints registered location keywords. Otherwise,
- prints the implied location keywords and revision keywords for the specified
- target.
- END_DESCRIPTION
- );
- my %OPTION_OF = (
- ARCHIVE => Fcm::CLI::Option->new({
- name => 'archive',
- letter => 'a',
- description => 'archives sub-directories on success',
- }),
- BROWSER => Fcm::CLI::Option->new({
- name => 'browser',
- letter => 'b',
- description => 'specifies the web browser command',
- has_arg => Fcm::CLI::Option->SCALAR_ARG,
- }),
- CLEAN => Fcm::CLI::Option->new({
- name => 'clean',
- description => 'cleans the destination',
- }),
- FULL => Fcm::CLI::Option->new({
- name => 'full',
- letter => 'f',
- description => 'runs in full mode',
- }),
- HELP => Fcm::CLI::Option->new({
- name => 'help',
- letter => 'h',
- description => 'prints help',
- is_help => 1,
- }),
- IGNORE_LOCK => Fcm::CLI::Option->new({
- name => 'ignore-lock',
- description => 'ignores lock file',
- }),
- JOBS => Fcm::CLI::Option->new({
- name => 'jobs',
- letter => 'j',
- description => 'number of parallel jobs',
- has_arg => Fcm::CLI::Option->SCALAR_ARG,
- }),
- OUTPUT => Fcm::CLI::Option->new({
- name => 'output',
- letter => 'o',
- description => 'sends output to the specified file',
- has_arg => Fcm::CLI::Option->SCALAR_ARG,
- }),
- STAGE => Fcm::CLI::Option->new({
- name => 'stage',
- letter => 's',
- description => 'runs command up to a named stage',
- has_arg => Fcm::CLI::Option->SCALAR_ARG,
- }),
- TARGETS => Fcm::CLI::Option->new({
- name => 'targets',
- letter => 't',
- delimiter => ':',
- description => 'list of build targets, delimited by (:)',
- has_arg => Fcm::CLI::Option->ARRAY_ARG,
- }),
- VERBOSITY => Fcm::CLI::Option->new({
- name => 'verbose',
- letter => 'v',
- description => 'verbose level',
- has_arg => Fcm::CLI::Option->SCALAR_ARG,
- }),
- WIKI => Fcm::CLI::Option->new({
- name => 'wiki',
- letter => 'w',
- description => 'print revision tables in wiki format',
- has_arg => Fcm::CLI::Option->SCALAR_ARG,
- }),
- );
- my %SUBCOMMAND_OF = (
- BRANCH => Fcm::CLI::Subcommand->new({
- names => ['branch', 'br'],
- synopsis => 'branch utilities',
- invoker_class => 'Fcm::CLI::Invoker::CM',
- is_vc => 1,
- }),
- BROWSER => Fcm::CLI::Subcommand->new({
- names => ['trac', 'www'],
- synopsis => 'invokes the browser for a version controlled target',
- usage => '[OPTIONS...] [TARGET]',
- description => $DESCRIPTION_OF{BROWSER},
- invoker_class => 'Fcm::CLI::Invoker::Browser',
- options => [
- $OPTION_OF{BROWSER},
- $OPTION_OF{HELP},
- ],
- }),
- BUILD => Fcm::CLI::Subcommand->new({
- names => ['build', 'bld'],
- synopsis => 'invokes the build system',
- usage => '[OPTIONS...] [CFGFILE]',
- description => $DESCRIPTION_OF{BUILD},
- invoker_class => 'Fcm::CLI::Invoker::ConfigSystem',
- invoker_config => {
- impl_class => 'Fcm::Build',
- cli2invoke_key_map => {
- 'archive' => 'ARCHIVE',
- 'clean' => 'CLEAN',
- 'full' => 'FULL',
- 'ignore-lock' => 'IGNORE_LOCK',
- 'jobs' => 'JOBS',
- 'stage' => 'STAGE',
- 'targets' => 'TARGETS',
- },
- },
- options => [
- $OPTION_OF{ARCHIVE},
- $OPTION_OF{CLEAN},
- $OPTION_OF{FULL},
- $OPTION_OF{HELP},
- $OPTION_OF{IGNORE_LOCK},
- $OPTION_OF{JOBS},
- $OPTION_OF{STAGE},
- $OPTION_OF{TARGETS},
- $OPTION_OF{VERBOSITY},
- ],
- }),
- CFG_PRINTER => Fcm::CLI::Subcommand->new({
- names => ['cfg'],
- synopsis => 'invokes the CFG file pretty printer',
- usage => '[OPTIONS...] [CFGFILE]',
- description => $DESCRIPTION_OF{CFG_PRINTER},
- invoker_class => 'Fcm::CLI::Invoker::CfgPrinter',
- options => [
- $OPTION_OF{HELP},
- $OPTION_OF{OUTPUT},
- ],
- }),
- CM => Fcm::CLI::Subcommand->new({
- names => [qw{
- add
- blame praise annotate ann
- cat
- checkout co
- cleanup
- commit ci
- copy cp
- delete del remove rm
- diff di
- export
- import
- info
- list ls
- lock
- log
- merge
- mkdir
- move mv rename ren
- propdel pdel pd
- propedit pedit pe
- propget pget pg
- proplist plist pl
- propset pset ps
- resolved
- revert
- status stat st
- switch sw
- unlock
- update up
- }],
- invoker_class => 'Fcm::CLI::Invoker::CM',
- is_vc => 1,
- }),
- CONFLICTS => Fcm::CLI::Subcommand->new({
- names => ['conflicts', 'cf'],
- synopsis => 'resolves conflicts in your working copy',
- usage => '[PATH]',
- invoker_class => 'Fcm::CLI::Invoker::CM',
- is_vc => 1,
- }),
- EXTRACT => Fcm::CLI::Subcommand->new({
- names => ['extract', 'ext'],
- synopsis => 'invokes the extract system',
- usage => '[OPTIONS...] [CFGFILE]',
- description => $DESCRIPTION_OF{EXTRACT},
- invoker_class => 'Fcm::CLI::Invoker::ConfigSystem',
- invoker_config => {
- impl_class => 'Fcm::Extract',
- cli2invoke_key_map => {
- 'clean' => 'CLEAN',
- 'full' => 'FULL',
- 'ignore-lock' => 'IGNORE_LOCK',
- },
- },
- options => [
- $OPTION_OF{CLEAN},
- $OPTION_OF{FULL},
- $OPTION_OF{HELP},
- $OPTION_OF{IGNORE_LOCK},
- $OPTION_OF{VERBOSITY},
- ],
- }),
- EXTRACT_CONFIG_COMPARATOR => Fcm::CLI::Subcommand->new({
- names => ['cmp-ext-cfg'],
- synopsis => 'invokes the extract configuration files comparator',
- usage => '[OPTIONS...] CFGFILE1 CFGFILE2',
- description => $DESCRIPTION_OF{EXTRACT_CONFIG_COMPARATOR},
- invoker_class => 'Fcm::CLI::Invoker::ExtractConfigComparator',
- options => [
- $OPTION_OF{HELP},
- $OPTION_OF{VERBOSITY},
- $OPTION_OF{WIKI},
- ],
- }),
- GUI => Fcm::CLI::Subcommand->new({
- names => ['gui'],
- synopsis => 'invokes the GUI wrapper for code management commands',
- usage => '[PATH]',
- description => $DESCRIPTION_OF{GUI},
- invoker_class => 'Fcm::CLI::Invoker::GUI',
- }),
- HELP => Fcm::CLI::Subcommand->new({
- names => ['help', q{?}, q{}],
- synopsis => 'displays the usage of this program or its subcommands',
- usage => '[SUBCOMMAND]',
- description => q{},
- invoker_class => 'Fcm::CLI::Invoker::Help',
- options => [$OPTION_OF{HELP}],
- }),
- KEYWORD => Fcm::CLI::Subcommand->new({
- names => ['keyword-print', 'kp'],
- synopsis => 'prints registered location and/or revision keywords',
- usage => '[TARGET]',
- description => $DESCRIPTION_OF{KEYWORD},
- invoker_class => 'Fcm::CLI::Invoker::KeywordPrinter',
- options => [$OPTION_OF{HELP}],
- }),
- MKPATCH => Fcm::CLI::Subcommand->new({
- names => ['mkpatch'],
- synopsis => 'creates patches from specified revisions of a URL',
- usage => '[OPTIONS] URL [OUTDIR]',
- invoker_class => 'Fcm::CLI::Invoker::CM',
- is_vc => 1,
- }),
- );
- our @CORE_SUBCOMMANDS = (
- $SUBCOMMAND_OF{HELP},
- $SUBCOMMAND_OF{BUILD},
- $SUBCOMMAND_OF{CFG_PRINTER},
- );
- our @VC_SUBCOMMANDS = (
- $SUBCOMMAND_OF{BRANCH},
- $SUBCOMMAND_OF{BROWSER},
- $SUBCOMMAND_OF{CONFLICTS},
- $SUBCOMMAND_OF{EXTRACT},
- $SUBCOMMAND_OF{EXTRACT_CONFIG_COMPARATOR},
- $SUBCOMMAND_OF{GUI},
- $SUBCOMMAND_OF{KEYWORD},
- $SUBCOMMAND_OF{MKPATCH},
- $SUBCOMMAND_OF{CM},
- );
- 1;
- __END__
- =head1 NAME
- Fcm::CLI::Config::Default
- =head1 SYNOPSIS
- use Fcm::CLI::Config::Default;
- @core_subcommands = @Fcm::CLI::Config::Default::CORE_SUBCOMMANDS;
- @vc_subcommands = @Fcm::CLI::Config::Default::VC_SUBCOMMANDS;
- =head1 DESCRIPTION
- This module stores the default configuration of the FCM command line interface.
- It should only be used by L<Fcm::CLI::Config|Fcm::CLI::Config>.
- =head1 SEE ALSO
- L<Fcm::CLI::Config|Fcm::CLI::Config>,
- L<Fcm::CLI::Invoker|Fcm::CLI::Invoker>,
- L<Fcm::CLI::Subcommand|Fcm::CLI::Subcommand>,
- L<Fcm::CLI::Option|Fcm::CLI::Option>
- =head1 COPYRIGHT
- E<169> Crown copyright Met Office. All rights reserved.
- =cut
|