The FCM 1 extract system is deprecated. The documentation for the current extract system can be found at FCM Make.

The following is a list of supported declarations for the configuration file used by the FCM extract system. Unless otherwise stated, the fields in all declaration labels are not case sensitive.

CFG::TYPE

The configuration file type, the value should always be ext for an extract configuration file. This declaration is compulsory for all extract configuration files.

Example:

cfg::type  ext
CFG::VERSION

The file format version, currently 1.0 - a version is included so that we shall be able to read the configuration file correctly should we decide to change its format in the future.

Example:

cfg::version  1.0
%<name>

%<name> declares an internal variable <name> that can later be re-used.

Example:

%my_variable   foo
src::bar::base %my_variable
src::egg::base %my_variable
src::ham::base %my_variable
INC

This declares the name of a file containing extract configuration. The lines in the declared file will be included inline to the current configuration file.

Example:

inc  ~frva/var_stable_22.0/cfg/ext.cfg
# ... and then your changes ...
DEST[::ROOTDIR]

The root path of the destination of this extract. This declaration is compulsory for all extract configuration files.

Example:

dest  $HOME/project/my_project
USE

This declares the location of a previous successful extract, which the current extract will inherit from. If the previous extract is also a build, the subsequent invocation of the build system on the current extract will automatically trigger an inherited incremental build based on that build.

Example:

use  ~frva/var_stable_22.0
# ... and then the settings for your current extract ...
RDEST[::ROOTDIR]

The alternate destination of this extract. This declaration is compulsory if this extract requires mirroring to an alternate destination.

Example:

rdest  /home/nwp/da/frva/project/my_project
RDEST::LOGNAME

The login name of the user on the alternate destination machine. If not specified, the current login name of the user on the local platform is assumed.

Example:

rdest::logname  frva
RDEST::MACHINE

The destination machine for this extract. If not specified, the current host name is assumed.

Example:

rdest::machine  tx01
RDEST::MIRROR_CMD
MIRROR

The extract system can mirror the extracted source to an alternate machine. Currently, it does this using either the rdist or the rsync command. The default is rsync. This declaration can be used to switch to using rdist.

Example:

rdest::mirror_cmd  rdist
RDEST::RSH_MKDIR_RSH (RDEST::REMOTE_SHELL)
RDEST::RSH_MKDIR_RSHFLAGS
RDEST::RSH_MKDIR_MKDIR
RDEST::RSH_MKDIR_MKDIRFLAGS

If rsync is used to mirror an extract, the system needs to issue a separate remote shell command to create the container directory of the mirror destination. The default is to issue a shell command in the form ssh -n -oBatchMode=yes LOGNAME@MACHINE mkdir -p DEST. These declarations can be used to modify the command.

Example:

# Examples using the default settings:
rdest::rsh_mkdir_rsh         ssh
rdest::rsh_mkdir_rshflags    -n -oBatchMode=yes
rdest::rsh_mkdir_mkdir       mkdir
rdest::rsh_mkdir_mkdirflags  -p
RDEST::RSYNC
RDEST::RSYNCFLAGS

These declarations are only useful if rsync is used to mirror an extract. By default, the system issues the shell command rsync -a --exclude='.*' --delete-excluded --timeout=900 --rsh='ssh -oBatchMode=yes' SOURCE DEST. These declarations can be used to modify the command.

Example:

# Examples using the default settings:
rdest::rsync       rsync
rdest::rsyncflags  -a --exclude='.*' --delete-excluded --timeout=900 \
                   --rsh='ssh -oBatchMode=yes'
REPOS::<pck>::<branch>

This declares a URL or a local file system path for the container repository of a branch named <branch> in a package named <pck>. The package name <pck> must be the name of a top-level package (i.e. it must not contain the double colon :: delimiter). The name <branch> is used internally within the extract system, and so is independent of the branch name of the code management system. However, it is usually desirable to use the same name of the actual branch in the code management system. For declaration of a local file system path, the convention is to name the branch user. Please note that both <pck> and <branch> fields are case sensitive. The declared URL must be a valid Subversion URL or a valid FCM URL keyword.

Example:

repos::var::base    fcm:var_tr
repos::var::branch1 fcm:var_br/frsn/r4790_foobar
repos::var::user    $HOME/var
REVISION::<pck>::<branch>
VERSION::<pck>::<branch>

The revision to be used for the URL of <branch> in the package <pck>. If specified, the revision must be a revision where the branch exists. If not specified, the revision defaults to last changed revision at the HEAD of the branch. Please note that if the declared branch is in the local file system, this declaration must not be used. The value of the declaration can be a FCM revision keyword or any revision argument acceptable by Subversion. You can use a valid revision number, a date between a pair of curly brackets (e.g. {"2005-05-01 12:00"}) or the keyword HEAD. However, please do not use the keywords BASE, COMMITTED or PREV as these are reserved for working copies only. Again, please note that both <pck> and <branch> fields are case sensitive.

Example:

# Declare the revision with the FCM revision keyword "vn22.0"
revision::var::base     vn22.0
# Declare the revision with a {date}
revision::var::branch1  {2006-01-01}
REVMATCH

If set to true, the declared revision of a branch must be a changed revision of that branch, (unless the keyword HEAD is used).

Example:

revmatch  true
SRC::<pcks>::<branch>

This declares a source directory for the sub-package <pcks> of <branch>. If the repository is declared as a URL, the source directory must be quoted as a relative path to the URL. If the repository is declared as a path in the local file system, the source directory can be declared as either a relative path to the repository or a full path. If the source directory is a relative path and <pcks> is a top-level package, the full name of the sub-package will be determined automatically using the directory names of the relative path as the names of the sub-packages. If the source directory is a full path, the full sub-package name must be specified. The name of the sub-package determines the destination path of the source directory in the extract.

Example:

src::var::base                    code/VarMod_PF
src::var/code/VarMod_PF::user   $HOME/var/code/VarMod_PF 
EXPSRC::<pcks>::<branch>

This declares an expandable source directory for the sub-package <pcks> of <branch>. This declaration is essentially the same as the SRC declaration, except that the system will attempt to search recursively for sub-directories within the declared source directory.

Example:

expsrc::var::base  code
expsrc::var::user  code
CONFLICT
OVERRIDE

This declaration can be used to specify the conflict mode, which is relevant when a file is modified by two different branches (or more) relative to the base branch. The conflict mode can be fail, merge (default) or override (or 0, 1 and 2 respectively). If fail is specified, the extract fails when a file is modified by two branches (or more) relative to the base branch. If merge is specified, the system will attempt to merge the changes. It will fail only on unresolved conflicts. If override is specified, the changes in the last branch takes precedence and the changes in the earlier branches will be ignored. Note: the old override true|false declaration is deprecated. If declared, override true will be equivalent to conflict override, and override false will be equivalent to conflict fail.

Example:

conflict  override
BLD::<fields>

Declare a build configuration file declaration. The label <fields> is the label of the declaration. On a successful extract, <fields> will be added to the build configuration file. Please note that some of the <fields> may be case sensitive.

Example:

bld::target   VarScr_AnalysePF
bld::tool::fc sxmpif90
bld::tool::cc sxmpic++
# ... and so on ...

Copyright © 2006-2021 British Crown (Met Office) & Contributors. Met Office. See Terms of Use.
This document is released under the British Open Government Licence.