'\" t
.\" aegis - project change supervisor
.\" Copyright (C) 1994-1996, 1998-2010, 2012 Peter Miller
.\" Copyright (C) 2006-2008, 2010 Walter Franzini
.\"
.\" This program is free software; you can redistribute it and/or modify
.\" it under the terms of the GNU General Public License as published by
.\" the Free Software Foundation; either version 3 of the License, or
.\" (at your option) any later version.
.\"
.\" This program is distributed in the hope that it will be useful,
.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
.\" General Public License for more details.
.\"
.\" You should have received a copy of the GNU General Public License
.\" along with this program. If not, see .
.\"
.so lib/en/man1/z_name.so
.TH aepconf 5 \*(N) "Reference Manual"
.SH NAME
aepconf \- aegis project configuration file
.XX "aepconf(5)" "project configuration file format"
.SH SYNOPSIS
\f[I]project\fP\f(CW/baseline/aegis.conf\fP \f[I](default)\fP
.br
\f[I]project\fP\f(CW/baseline/config\fP \f[I](obsolete)\fP
.SH DESCRIPTION
A project configuration file
is used to store information about a project.
This file is under source control,
and is one of the project's source files.
Developers may thus modify this file as part of a change.
.PP
As of aegis.4.17, it is possible to assign any arbitrary name to the
project configuration file or files.
See \f[I]aenf\fP(1) for more information.
.PP
This file contains a number of commands to be executed by Aegis. There
are times when the substitutions in these commands may contain shell
special characters, which would change the meaning of the commands in
unintended ways. There are two main sources of these problems: file names
and architecture names. In order to have shell special characters
in filenames, you must set the \f[I]shell_\%safe_\%filenames\fP field
(see below) to \f[I]false\fP. If you do this, you will need to use the
\f(CWquote\fP substitution (see \f[I]aesub\fP(5)) to quote them, so that
the shell does not abuse them. Other things which may need quoting include
architecture names if you get creative, and edit numbers if unusual
ones are generated by your history tool.
.SS Getting Started
Because the project \f[I]aegis.conf\fP file is under source control like any
other file, you must create the project \f[I]aegis.conf\fP file in the
very first
change of your project. Use the
.RS
.nf
.ft CW
$ \f[CB]aenf aegis.conf\fP
$
.ft R
.fi
.RE
command and then editing the file to fill in the fields.
Subsequent Aegis commands in that change will use that file. Once the
change is completed (see \f[I]aeipass\fP(1) for more information) the file
will be present in the baseline, and be used by all users and all changes.
.PP
If you ever need to change one of the fields of the project
\f[I]aegis.conf\fP file,
you do this the same way as for any other source file, by copying it into
a change using the
.RS
.nf
.ft CW
$ \f[CB]aecp aegis.conf\fP
$
.ft R
.fi
.RE
command and then edit the file to make the desired changes.
While it's \f[I]being developed\fP your change will use it's copy of
the project \f[I]aegis.conf\fP file, but once the change is completed (see
\f[I]aeipass\fP(1) for more information), it becomes the new version used
by all users and changes.
.PP
If you would prefer a different name for the project configuration file,
use the \f[I]aenf \-config\fP option. For example, the
.RS
.nf
.ft CW
$ \f[CB]aenf \-config project.configuration\fP
$
.ft R
.fi
.RE
command would create a file called \f[I]project.configuration\fP and Aegis
would then proceed to use it to obtain project configuration information
for the duration of the project. This attribute will even be preserved
across file renames (see the \f[I]aemv\fP(1) command).
.SH CONTENTS
This file contains the following fields:
.TP 8n
configuration_directory = string;
.RS
This field names a directory which will
be searched for additional configuration files. (This directive is
only legal or meaningful in the master project \f[I]aegis.conf\fP file.)
.PP
All source files (change source files and project source files)
present in this directory will be read in as if they were added to
the end of the project "aegis.conf" file.
.PP
The usual priority of files (development directory, branch baseline,
\f[I]etc\fP, project trunk baseline) is observed when these files are read.
.PP
Please note that the physical directories are never searched, only the
Aegis concept of the change and project files is consulted (\f[I]i.e.\fP
files created and modified in the usual way with \f[I]aenf\fP(1) and
\f[I]aecp\fP(1) commands).
Placing additional files in the physical directories will have
no effect.
.PP
It is recommended that if you use this field at all, that your top level
project \f[I]aegis.conf\fP file should only contain this one field. This is
to avoid overly\[hy]large re\[hy]reading of this file when it is joined to all
the others.
.RE
.TP 8n
build_command = string;
.RS
This field describes how to build the project
(actually, how to do an integration build).
This field is mandatory.
Used by the
.IR aeb (1)
command.
All of the substitutions described by
.IR aesub (5)
are available.
.PP
Executed as: the integrator (for integration builds) or the developer
(for development builds).
Current directory: the integration directory of the change (for
integration builds) the development directory of the change
(for development builds).
Exit status: zero is considered success, non\[hy]zero is a failure
and a subsequent successful (exit zero) build will be required.
.PP
If this field is set to \f[CW]"exit 0"\fP then no integration build will be
required, and will not be checked for by the \f[I]aeipass\fP(1) command.
.RE
.TP 8n
development_build_command = string;
.RS
This field describes how to do a development build.
If this field is absent, it defaults to the above.
Used by the
.IR aeb (1)
command.
All of the substitutions described by
.IR aesub (5)
are available.
.PP
Executed as: the developer.
Current directory: the development directory of the change.
Exit status: zero is considered success, non\[hy]zero is a failure
and a subsequent successful (exit zero) build will be required.
.PP
If this field is set to \f[CW]"exit 0"\fP then no development build will be
required, and will not be checked for by the \f[I]aede\fP(1) command.
.RE
.\" ------------------------------------------------------------------------
.TP 8n
development_directory_style = { ... };
.RS
This field encapsulates a set of parameters controlling the appearance
of the development directory. It has significant implications for the
way the DMT is used, and the directory appearance presented to the DMT.
.TP 8n
source_file_link = boolean;
.RS
This field is true if hard links are to be used for project source files
(which are not part of the change) so that the work area has a complete
set of source files.
.PP
Defaults to false if not set.
.PP
If the host system does not have hard links, this field will be ignored.
.PP
Maintaining the hard links can be time consuming for large projects,
and add quite a noticeable delay before builds start doing anything.
If possible, change your build system to use the \f[I]$search_path\fP
substitution instead and avoid links.
.RE
.TP 8n
source_file_symlink = boolean;
.RS
This field is true if symbolic links are to be used for project source
files (which are not part of the change) so that the work area has a
complete set of source files.
.PP
Defaults to false if not set.
[If the obsolete \f[I]create_\%symlinks_\%before_\%build\fP field is set,
defaults to the value of that field, with a warning.]
.PP
If (\f[I]source_file_link\fP == true \f[B]and\fP hard links are available)
this field will be ignored. If the host system does not have symbolic
links, this field will be ignored.
.PP
Maintaining the symbolic links can be time consuming for large projects,
and add quite a noticeable delay before builds start doing anything. If
possible, change your build system to use the \f[I]$search_path\fP
substitution instead and avoid symbolic links.
.RE
.TP 8n
source_file_copy = boolean;
.RS
This field is true if copies are to be used for project source files
(which are not part of the change) so that the work area has a complete
set of source files. File modification time attributes will be
preserved.
.PP
Defaults to false if not set.
.PP
If ((\f[I]source_file_link\fP == true \f[B]and\fP hard links are available)
OR (\f[I]source_file_symlink\fP == true \f[B]and\fP
symbolic links are available))
this field will be ignored.
.PP
Maintaining the copies can be time consuming (and space consuming)
for large projects, and add quite a noticeable delay before builds
start doing anything. If possible, change your build system to use the
\f[I]$search_path\fP substitution instead and avoid file copies.
.RE
.TP 8n
source_file_whiteout = boolean;
.RS
The \f[I]source_file_whiteout\f[P] field mat be used to specify the
presence (true) or absence (false) of white\[hy]out files, used to
"cover up" files being removed by a change set. These files
contain 1kB of random data, intended to cause a syntax error
should be build reference them.
.PP
It is rarely necessary to explicitly set this field. It
defaults to false if you set any of the \f[I]source_file_link\fP,
\f[I]source_file_symlink\fP or \f[I]source_file_copy\fP to true; it defaults
to true only if none of them are true.
.PP
Not meaningful (always false) for integration builds.
.RE
.TP 8n
derived_file_link = boolean;
.RS
This field is true if hard links are to be used for non\[hy]source files
which are present in the project baseline(s) but which are not present
in the work area, so that the work area has a complete set of derived
files. This allows work areas to take advantage of "precompiled" object
files (\f[I]etc\fP) in the baseline(s).
.PP
Defaults to false if not set.
.PP
If the host system does not have hard links, this field will be ignored.
.PP
Maintaining the links can be time consuming for large projects, and
add quite a noticeable delay before builds start doing anything. If
possible, change your build system to use the \f[I]$search_path\fP
substitution instead and avoid hard links. Alternatively, set
\f[I]derived_at_start_only = true;\fP and your work area will get a "head
start" but the derived files will not be checked for every build, but
this will occasionally result in long build times after integrations.
.PP
See also the \f[I]integrate_\%begin_\%exceptions\fP and
\f[I]symlink_\%exceptions\fP fields (they apply to hard links as well as
symbolic links).
.RE
.TP 8n
derived_file_symlink = boolean;
.RS
This field is true if symbolic links are to be used for non\[hy]source files
which are present in the project baseline(s) but which are not present
in the work area, so that the work area has a complete set of derived
files. This allows work areas to take advantage of "precompiled" object
files (etc) in the baseline(s).
.PP
Defaults to false if not set.
[If the obsolete \f[I]create_\%symlinks_\%before_\%build\fP field is set,
defaults to the value of that field, with a warning.]
.PP
If (\f[I]derived_file_link\fP == true \f[B]and\fP hard links are available)
this field will be ignored. If the host system does not have symbolic
links, this field will be ignored.
.PP
Maintaining the symbolic links can be time consuming for large projects,
and add quite a noticeable delay before builds start doing anything.
If possible, change your build system to use the \f[I]$search_path\fP
substitution instead and avoid symbolic links. Alternatively, set
\f[I]derived_at_start_only = true;\fP and your work area will get a "head
start" but the derived files will not be checked for every build,
occasionally resulting in long build times after integrations.
.PP
See also the \f[I]integrate_\%begin_\%exceptions\fP and
\f[I]symlink_\%exceptions\fP fields.
.RE
.TP 8n
derived_file_copy = boolean;
.RS
This field is true if copies are to be used for non\[hy]source files which
are present in the project baseline(s) but which are not present in the
work area, so that the work area has a complete set of derived files.
This allows work areas to take advantage of "precompiled" object files
(\f[I]etc\fP) in the baseline(s).
.PP
Defaults to false if not set.
.PP
If ((\f[I]derived_file_link\fP == true \f[B]and\fP hard links are available)
\f[B]or\fP (\f[I]derived_file_symlink\fP == true \f[B]and\fP symbolic links
are available)) this field will be ignored.
.PP
Maintaining the copies can be time consuming (and space consuming)
for large projects, and add quite a noticeable delay before builds
start doing anything. If possible, change your build system to use
the \f[I]$search_path\fP substitution instead and avoid symbolic links.
Alternatively, set \f[I]derived_at_start_only = true;\fP and your work
area will get a "head start" but the derived files will not be checked
for every build, occasionally resulting in long build times after
integrations.
.PP
See also the integrate_begin_exceptions and symlink_exceptions
fields (they apply to copies as well as symbolic links).
.RE
.TP 8n
during_build_only = boolean;
.RS
This field is set to true if you want the symbolic links, hard links
and/or copies removed again after each build. This allows the user to
maintain the illusion of using a search path, without actually doing so.
This option is not especially efficient.
.PP
Defaults to false if not set.
[If the obsolete \f[I]remove_\%symlinks_\%after_\%build\fP field is set,
defaults to the value of that field, with a warning.]
.PP
If this field is false, the development directory will be populated by
the develop begin (\f[I]aedb\f[P]) command, and the integration directory
will be populated by the integrate begin (\f[I]aeib\fP) command.
.RE
.TP 8n
derived_at_start_only = boolean;
.RS
This field controls whether the above fields controlling the appearance
of derived files are acted upon before every build (false) or only when
the work area is created (true).
.PP
Defaults to false if not set.
.PP
This field is ignored if the \f[I]during_build_only\fP field is true.
.RE
.PP
This field can be complex. Here are a few examples; but much, much more
is possible. The first example will get you a development directory
very similar to one presented by CVS:
.RS
.nf
development_directory_style =
{
source_file_copy = true;
};
.fi
.RE
Note that this is hugely space inefficient, and can be quite slow.
The second example will get you a development directory very similar to
one presented by Tom Lord's \f[I]arch\fP:
.RS
.nf
development_directory_style =
{
source_file_link = true;
source_file_symlink = true;
source_file_copy = true;
};
.fi
.RE
Ideally, however, you should use the \f[I]$search_path\fP substitution of
the \f[I]build_command\fP field. This is because the view path scales
better than any other method. On the other hand, you need a DMT with an
excellent view path implementation (and GNU \f[I]make\fP doesn't).
.PP
The development directory style is applied \f[I]after\fP the
\f[CW]develop_\%begin_\%command\fP hook is run.
.RE
.\" ------------------------------------------------------------------------
.TP 8n
integration_directory_style = { ... };
.RS
This field encapsulates a set of parameters controlling the appearance
of the integration directory. It has significant implications for the
way the DMT is used, and the directory appearance presented to the DMT.
.PP
Defaults to the value of the \f[I]development_directory_style\fP
field if not set. Note that the obsolete
\f[I]create_\%symlinks_\%before_\%integration_\%build\fP and
\f[I]remove_\%symlinks_\%after_\%integration_\%build\fP fields affect this
default (with a warning) but only if they are \f[I]explicitly\fP set.
.PP
Note that the \f[I]link_integration_directory\fP field is still relevant.
That field controls how the baseline is cloned to form the integration
directory. This field operates after that operation.
.RE
.\" ------------------------------------------------------------------------
.TP 8n
build_time_adjust_notify_command = string;
.RS
This command is run when Aegis adjusts the last\[hy]time\[hy]modified
time\[hy]stamp on files in the integration directory. If the build tool
uses additional information to supplement file modification times, this
command gives you the opportunity to re\[hy]sync the associated database.
.PP
Executed as: the project owner.
.PP
Current directory: the integration directory.
This is what is about to be come the new baseline.
.PP
Exit status: NOT ignored. Note that a failure here puts the change in
a partial state from which recovery may be difficult. Best to define
this command with a
.IR set +e
so that errors are ignored at the command level.
.\" Neither of these make much sense \- but it is what I observed when
.\" the command failed in a new branch first integration.
.RE
.TP 8n
build_covers_all_architectures = boolean;
.RS
This field is set to true if the build command, when executed on any
architecture, results in all architectures being built. This may be
accomplished, for example, by using cross\[hy]compilation techniques, or
Cook's ability to nominate hosts on which to execute each build rule.
.RE
.TP 8n
test_covers_all_architectures = boolean;
.RS
This field is set to true if the test command, when executed on any
architecture, results in all architectures being tested. This may be
accomplished, for example, by using Cook's ability to nominate hosts
on which to execute each test rule.
.RE
.TP 8n
symlink_exceptions = [ string ];
This field is used to list filename patterns for which symbolic links
must not be made between the development directory and the baseline.
These are usually state files for various tools.
The patterns are matched against the whole filename;
naming only the last filename path element will \f[I]not\fP work
(unless the pattern starts with \[lq]\f[CW]*\fP\[rq]).
.TP 8n
change_file_command = string;
.RS 8n
This field contains a command to be executed whenever a
\'\*(n) \-CoPy_file\',
\'\*(n) \-New_File\'
\'\*(n) \-New_Test\'
\'\*(n) \-MoVe_file\'
or
\'\*(n) \-ReMove_file\'
command is successful.
See also command\[hy]specific overrides.
If this field is absent, nothing is done.
Used by the
.IR aecp (1),
.IR aenv (1),
.IR aenf (1),
.IR aerm (1),
and
.IR aemv (1)
commands.
All of the substitutions described by
.IR aesub (5)
are available;
in addition,
.TP 8n
${File_List}
.br
Space separated list of files named.
.PP
Executed as: the developer.
Current directory: the development directory of the change.
Exit status: ignored.
.RE
.TP 8n
change_file_undo_command = string;
.RS 8n
This field contains a command to be executed whenever a
\'\*(n) \-CoPy_file_Undo',
\'\*(n) \-MoVe_file_Undo'
\'\*(n) \-New_File_Undo',
\'\*(n) \-New_Test_Undo',
or
\'\*(n) \-ReMove_file_Undo'
command is successful.
Default to \f[I]change_\%file_\%command\fP if absent.
See also command\[hy]specific overrides.
If both fields are absent, nothing is done.
Used by the
.IR aecpu (1),
.IR aemvu (1),
.IR aenfu (1),
.IR aentu (1)
or
.IR aermu (1),
commands.
All of the substitutions described by
.IR aesub (5)
are available;
in addition,
.TP 8n
${File_List}
.br
Space separated list of files named.
.PP
Executed as: the developer.
Current directory: the development directory of the change.
Exit status: ignored.
.RE
.TP 8n
new_file_command = string;
.RS
Executed whenever the aegis \-new_file command is run successfully.
Defaults to `change_file_command' if not set.
.PP
All of the substitutions described in \f[I]aesub\fP(5) are available.
In addition:
.TP
${File_List}
Space separated list of files named (at times, can be empty).
.PP
Executed as: the developer.
Current directory: the development directory of the change.
Exit status: ignored.
.RE
.TP 8n
new_test_command = string;
.RS
Executed whenever the aegis \-new_test command is run successfully.
Defaults to `change_file_command' if not set.
.PP
All of the substitutions described in \f[I]aesub\fP(5) are available.
In addition:
.TP
${File_List}
Space separated list of files named (at times, can be empty).
.PP
Executed as: the developer.
Current directory: the development directory of the change.
Exit status: ignored.
.RE
.TP 8n
copy_file_command = string;
.RS
Executed whenever the aegis \-copy_file command is run successfully.
Defaults to `change_file_command' if not set.
.PP
All of the substitutions described in \f[I]aesub\fP(5) are available.
In addition:
.TP
${File_List}
Space separated list of files named (at times, can be empty).
.PP
Executed as: the developer.
Current directory: the development directory of the change.
Exit status: ignored.
.RE
.TP 8n
remove_file_command = string;
.RS
Executed whenever the aegis \-remove_file command is run successfully.
Defaults to `change_file_command' if not set.
.PP
All of the substitutions described in \f[I]aesub\fP(5) are available.
In addition:
.TP
${File_List}
Space separated list of files named (at times, can be empty).
.PP
Executed as: the developer.
Current directory: the development directory of the change.
Exit status: ignored.
.RE
.TP 8n
new_file_undo_command = string;
.RS
Executed whenever the aegis \-new_file_undo command is run successfully.
Defaults to change_file_undo_command if not set.
.PP
All of the substitutions described in \f[I]aesub\fP(5) are available.
In addition:
.TP
${File_List}
Space separated list of files named (at times, can be empty).
.PP
Executed as: the developer.
Current directory: the development directory of the change.
Exit status: ignored.
.RE
.TP 8n
new_test_undo_command = string;
.RS
Executed whenever the aegis \-new_test_undo command is run successfully.
Defaults to change_file_undo_command if not set.
.PP
All of the substitutions described in \f[I]aesub\fP(5) are available.
In addition:
.TP
${File_List}
Space separated list of files named (at times, can be empty).
.PP
Executed as: the developer
Current directory: the development directory of the change
Exit status: ignored
.RE
.TP 8n
copy_file_undo_command = string;
.RS
Executed whenever the aegis \-copy_file_undo command is run successfully.
Defaults to change_file_undo_command if not set.
.PP
All of the substitutions described in \f[I]aesub\fP(5) are available.
In addition:
.TP
${File_List}
Space separated list of files named (at times, can be empty).
.PP
Executed as: the developer
Current directory: the development directory of the change
Exit status: ignored
.RE
.\" ------------------------------------------------------------------------
.TP 8n
remove_file_undo_command = string;
.RS
Executed whenever the aegis \-remove_file_undo command is run successfully.
Defaults to change_file_undo_command if not set.
.PP
All of the substitutions described in \f[I]aesub\fP(5) are available.
In addition:
.TP
${File_List}
Space separated list of files named (at times, can be empty).
.PP
Executed as: the developer
Current directory: the development directory of the change
Exit status: ignored
.RE
.\" ------------------------------------------------------------------------
.TP 8n
make_transparent_command = string;
.RS
The make_transparent_command is executed whenever the
aegis \-make_transparent command is run successfully.
Defaults to change_file_command if not set.
.PP
All of the substitutions described in \f[I]aesub\fP(5) are available.
In addition:
.TP
${File_List}
Space separated list of files named (at times, can be empty).
.PP
Executed as: the developer
Current directory: the development directory of the change
Exit status: ignored
.RE
.\" ------------------------------------------------------------------------
.TP 8n
make_transparent_undo_command = string;
.RS
The make_transparent_undo_command is executed whenever the
aegis \-make_transparent_undo command is run successfully.
Defaults to change_file_undo_command if not set.
.PP
All of the substitutions described in \f[I]aesub\fP(5) are available.
In addition:
.TP
${File_List}
Space separated list of files named (at times, can be empty).
.PP
Executed as: the developer
Current directory: the development directory of the change
Exit status: ignored
.RE
.\" ------------------------------------------------------------------------
.TP 8n
project_file_command = string;
.RS
This field contains a command to be executed
during a development build
before the
.I "development build command"
above, when
(a) it is the first build after a develop begin, or
(b) some other change has been integrated into
the baseline since the last build.
If this field is absent, nothing is done.
Used by the
.IR aeb (1)
command.
All of the substitutions described by
.IR aesub (5)
are available.
.RE
.\" ------------------------------------------------------------------------
.TP 8n
develop_begin_early_command = string;
.RS
This field contains a command to be executed
at the beginning of a '\*(n) \-Develop_Begin'
command, immediately after the development directory has been created.
If this field is absent, nothing is done.
Used by the
.IR aedb (1)
command.
All of the substitutions described by
.IR aesub (5)
are available.
.PP
Executed as: the developer.
Current directory: the development directory of the change.
Exit status: ignored.
.PP
\f[B]Note:\fP
This command is run from inside the lock, so running \f[I]any\fP Aegis command
that modifies the change state will cause a deadlock.
.RE
.\" ------------------------------------------------------------------------
.TP 8n
develop_begin_command = string;
.RS
This field contains a command to be executed whenever
a '\*(n) \-Develop_Begin'
command is successful.
If this field is absent, nothing is done.
Used by the
.IR aedb (1)
command.
All of the substitutions described by
.IR aesub (5)
are available.
.PP
Executed as: the developer.
Current directory: the development directory of the change.
Exit status: ignored.
.RE
.\" ------------------------------------------------------------------------
.TP 8n
develop_begin_undo_command = string;
.RS
This field contains a command to be executed whenever
a '\*(n) \-Develop_Begin_Undo'
command is successful.
If this field is absent, nothing is done.
Used by the
.IR aedbu (1)
command.
All of the substitutions described by
.IR aesub (5)
are available.
.PP
Executed as: the developer.
Current directory: wherever the command was executed from.
Exit status: ignored.
.RE
.TP 8n
integrate_begin_command = string;
.RS
This field contains a command to be executed whenever
a '\*(n) \-Integrate_Begin'
command is successful.
If this field is absent, nothing is done.
Used by the
.IR aeib (1)
command.
All of the substitutions described by
.IR aesub (5)
are available.
.PP
Executed as: the project owner.
Current directory: the integration directory.
Exit status: ignored.
.RE
.TP 8n
link_integration_directory = boolean;
.br
This flag is true if Aegis should link the files from the baseline
into the integration directory,
rather than copy them (the default).
This has risks,
as the build script (e.g.
.I Howto.cook
or
.IR Makefile ,
etc)
must unlink targets before rebuilding them;
if this is not done the baseline will be corrupted.
Used by the
.IR aeib (1)
command.
.TP 8n
integrate_begin_exceptions = [ string ];
This field may be used to specify a list of file names (and file name
patterns) which are to be omitted from the copy (link) of the baseline
when creating the integration directory.
Used by the
.IR aeib (1)
command.
This field only applies to derived files,
it does \f[I]not\fP apply to source files.
The patterns are matched against the whole filename;
naming only the last filename path element will \f[I]not\fP work
(unless the pattern starts with \[lq]\f[CW]*\fP\[rq]).
.TP 8n
history_create_command = string;
.RS 8n
This field is used to create a new history.
The command is always executed as the project owner.
Used by the
.IR aeipass (1)
command.
.PP
It is strongly recommended that the \f[I]history_\%create_\%command\fP
and \f[I]history_\%put_\%command\fP fields are identical. If not set,
the \f[I]history_\%create_\%command\fP field defaults to the same value
as the \f[I]history_\%put_\%command\fP field.
.PP
All of the substitutions described by
.IR aesub (5)
are available;
in addition,
.TP 8n
${Input}
.br
Absolute path of the source file.
.TP 8n
${History}
.br
Absolute path of the history file.
This may need to be reworked with the
.I Dirname
and
.I Basename
substitutions to yield a string suitable for the history tool in question.
.TP
${File_Name}
The base relative file name of the file for this check\[hy]in.
Note that the file name can vary over the lifetime of the file as it is
renamed, but the history file name (above) never varies.
\f[I]Do not use\fP this as the name of the history file.
.B "(Optional)"
.TP
${UUID}
The universally unique identifier of the source file.
This is invariant for the lifetime of the file.
\f[I]Do not use\fP use this as the name of the history file.
.B "(Optional)"
.PP
See also the
.I history_put_trashes_file
field, below.
.PP
Executed as: the project owner.
Current directory: the base of the history tree.
Exit status: zero indicates success, all non\[hy]zero exits indicate failure
(the integrate pass will fail).
.PP
Note: For projects created \*(N) 4.26 or later, it is possible to
change the history tool used by the project simply changing the various
\f[I]history_*_command\fP documented in this man page. It is also
possible to change the history tool for projects created with
\f[I]aeimport\f[P] 4.26 or later, however the original tool must be
available to access older file's revisions.
.RE
.TP 8n
history_get_command = string;
.RS 8n
This field is used to get a file from history.
The command may be executed by developers.
Used by the
.IR aeipass (1)
and
.IR aecp (1)
commands.
All of the substitutions described by
.IR aesub (5)
are available;
in addition,
.TP 8n
${History}
.br
The absolute path of the history file.
This may need to be reworked with the
.I Dirname
and
.I Basename
substitutions to yield a string suitable for the history tool in question.
.TP 8n
${Edit}
.br
The edit number to be extracted.
It may be an arbitrary string,
varying on the particular history tool.
.TP 8n
${Output}
.br
The absolute path of the destination file.
.PP
Executed as: the developer (or the executing user, in the case of
the \-independent option).
Current directory: the base of the history tree
Exit status: zero indicates success, all non\[hy]zero exits indicate failure
(the \f[I]aecp\fP will fail).
.RE
.TP 8n
history_put_command = string;
.RS
This field is used to add a new change to the history.
The command is always executed as the project owner.
Used by the
.IR aeipass (1)
command.
.PP
It is strongly recommended that the \f[I]history_\%put_\%command\fP and
\f[I]history_\%create__\%command\fP fields are identical. If not set,
the \f[I]history_\%put_\%command\fP field defaults to the same value as
the \f[I]history_\%create_\%command\fP field.
.PP
All of the substitutions described by
.IR aesub (5)
are available;
in addition,
.TP 8n
${Input}
.br
The absolute path of the source file.
.TP 8n
${History}
.br
The absolute path of the history file.
This may need to be reworked with the
.I Dirname
and
.I Basename
substitutions to yield a string suitable for the history tool in question.
.TP
${File_Name}
The base relative file name of the file for this check\[hy]in.
Note that the file name can vary over the lifetime of the file as it is
renamed, but the history file name (above) never varies.
\f[I]Do not use\fP this as the name of the history file.
.B "(Optional)"
.TP
${UUID}
The universally unique identifier of the source file.
This is invariant for the lifetime of the file.
\f[I]Do not use\fP use this as the name of the history file.
.B "(Optional)"
.PP
See also the
.I history_put_trashes_file
field, below.
.PP
Executed as: the project owner.
Current directory: the base of the history tree.
Exit status: zero indicates success, all non\[hy]zero exits indicate failure
(the integrate pass will fail).
.RE
.\" ------------------------------------------------------------------------
.TP 8n
history_transaction_begin_command = string;
.RS
The history_transaction_begin_command field is used to specify a command
to be run by \f[I]aeipass\fP(1) before any history create or history put
commands are run. The default is to do nothing.
.PP
All of the substitutions described in \f[I]aesub\fP(5) are available.
If you need a transaction ID, use the \f[I]$version\fP substitution.
.PP
Executed as: the project owner.
Current directory: the base of the history tree.
Exit status: zero indicates success, all non\[hy]zero exits indicate failure
(the integrate pass will fail).
.RE
.\" ------------------------------------------------------------------------
.TP 8n
history_transaction_end_command = string;
.RS
The history_transaction_end_command field is used to specify a
command to be run by \f[I]aeipass\fP(1) after any history create or history
put commands are run, but before any history query commands are run.
The default is to do nothing.
.PP
All of the substitutions described in \f[I]aesub\fP(5) are available.
If you need a transaction ID, use the \f[I]$version\fP substitution.
.PP
Executed as: the project owner.
Current directory: the base of the history tree.
Exit status: zero indicates success, all non\[hy]zero exits indicate failure
(the integrate pass will fail).
.RE
.\" ------------------------------------------------------------------------
.TP 8n
history_transaction_abort_command = string;
.RS
The history_transaction_abort_command field is used to specify a
command to be run by \f[I]aeipass\fP(1) to indicate that a transaction has
been abandoned. The default is to do nothing.
.PP
All of the substitutions described in \f[I]aesub\fP(5) are available.
If you need a transaction ID, use the \f[I]$version\fP substitution.
.PP
Executed as: the project owner.
Current directory: the base of the history tree.
Exit status: ignored (the integrate pass has already failed).
.RE
.\" ------------------------------------------------------------------------
.TP 8n
history_query_command = string;
.RS 8n
This field is used to query the topmost edit of a history file.
Result to be printed on the standard output.
This command may be executed by developers.
Used by the
.IR aeipass (1)
and
.IR aecp (1)
commands.
All of the substitutions described by
.IR aesub (5)
are available;
in addition,
.TP 8n
${History}
.br
The absolute path of the history file.
This may need to be reworked with the
.I Dirname
and
.I Basename
substitutions to yield a string suitable for the history tool in question.
.PP
Executed as: the project owner.
Current directory: the base of the history tree.
Exit status: zero indicates success, all non\[hy]zero exits indicate failure
(the integrate pass will fail).
.RE
.TP 8n
history_label_command = string;
.RS
This field contains a command to be executed whenever a
.IR aeipass (1)
or
.IR aedn (1)
command is successful.
This command is invoked for
.B every
file in the project.
So using it incurs a performance penalty.
If this field is absent, nothing is done.
All of the substitutions described by
.IR aesub (5)
are available;
in addition,
.TP 8n
${History}
.br
The absolute path of the history file.
.TP 8n
${Edit}
.br
The edit number to be labeled.
It may be an arbitrary string,
varying on the particular history tool.
.TP 8n
${Label}
.br
The label to be attached to the history.
When executed from
.IR aeipass (1)
this value is the same as
.I ${Version},
which may need to be reworked with the
.I ${Subst}
substitutions to yield a string suitable for the history tool in question.
When executed from
.IR aedn (1)
it is set to the value passed in from the command line.
.PP
Executed as: the project owner.
Current directory: the base of the history tree.
Exit status: zero indicates success, all non\[hy]zero exits indicate failure
(a warning will be issued).
.PP
Labeling does not scale, so the use of this command is not encouraged.
If you have a project with 10,000 files, and a change modified exactly one
of them, only one \f[I]history_\%put_\%command\fP execution is required,
which operates on one history file. If you have labeling turned on, it
will also be necessary to execute 10,000 \f[I]history_\%label_\%command\fPs,
to add information Aegis will never use.
.RE
.TP 8n
history_put_trashes_file = (fatal, warn, ignore);
.RS
Many history tools (e.g. RCS) can modify the contents of the file
when it is committed. While there are usually options to turn this
off, they are seldom used. The problem is: if the commit changes the
file, the source in the repository now no longer matches the object
file in the repository \- i.e. the history tool has compromised the
referential integrity of the repository.
.TP 4n
fatal
Emit a fatal error if one or more source files are modified by a
.I history_put_command
or
.IR history_create_command .
This is the default.
.TP 4n
warn
Emit a warning if a source file is modified.
.TP 4n
ignore
Ignore a source file changing.
You sure better hope it was only in a comment!
.RE
.TP 8n
history_content_limitation = (ascii_text, international_text, binary_capable);
.RS
This field describes the content style which the history tool is
capable of working with.
.TP 8n
ascii_text
The history tool can only cope with files which contain printable
ASCII characters, plus space, tab and newline. The file must
end with a newline. This is the default.
.TP 8n
international_text
The history tool can only cope with files which do not contain
the NUL character. The file must end with a newline.
.TP 8n
binary_capable
The history tool can cope with all files without any limitation on
the form of the contents.
.PP
When a file is added to the history (by either the
\f[I]history_\%create_\%command\fP or the \f[I]history_\%put_\%command\fP
field) it is examined for conformance to this limitation. If there
is a problem, the file is encoded in either quoted printable for
MIME64, whichever is smaller, before being given to the history tool.
This encoding is transparent, the file in the baseline is unchanged.
.PP
On extract (the \f[I]history_get_command\fP field) the encoding is reversed,
using information attached to the change file information. This is
because each put could use a different encoding (although in practice,
file contents rarely change that dramatically, and the same encoding is
likely to be deduced every time).
.PP
Please note that this field \f[B]does not\fP apply to the
\f[I]diff_\%command\fP or \f[I]merge_\%command\fP fields.
.RE
.TP 8n
diff_command = string;
.RS
This field is used to difference of 2 files.
The command is always executed by developers.
Used by the
.IR aed (1)
command.
All of the substitutions described by
.IR aesub (5)
are available;
in addition,
.TP 8n
${ORiginal}
.br
The absolute path of the original
file copied into the change.
Usually in the baseline,
but not always.
.TP 8n
${Input}
.br
The absolute path of the file in the development directory.
.TP 8n
${Output}
.br
The absolute path of the file in which to write the difference listing.
.PP
Executed as: the project owner (for integration diffs), or the
developer (for development diffs).
Current directory: the integration directory (for integration diffs),
or the development directory (for development diffs).
Exit status: zero indicates success, all non\[hy]zero exits indicate failure
(the aed will fail).
.PP
\f[B]Note:\fP
It is possible to configure a project to omit the diff step as
unnecessary, by the following setting:
.RS
diff_command = "exit 0";
.RE
This disables all generation, checking and validation of difference file
for each change source file. The merge functions of the \f[I]aediff\fP(1)
command are unaffected by this setting.
.RE
.TP 8n
merge_command = string;
.RS 8n
This field is used to merge two competing edits to a file.
The command is always executed by developers.
The current directory will be the development directory.
This field is used by the
.IR aed (1)
command.
All of the substitutions described by
.IR aesub (5)
are available;
in addition,
.TP 8n
${ORiginal}
.br
The absolute path of the original
file copied into the change.
Usually not in the baseline, often a temporary file.
.TP 8n
${Most_Recent}
.br
The absolute path of the competing edit,
usually in the baseline.
.TP 8n
${Input}
.br
The absolute path of the file in the development directory.
This is the \[lq]preferred\[rq] edit, if the tool has this concept
when highlighting conflicting edits.
.TP 8n
${Output}
.br
The absolute path of the file in which to write the merged result.
This will usually be the name if a change source file in the development
directory.
.PP
It is important that this command does not move files around.
(See the obsolete \f[I]diff3_command\fP field, below, for some history.)
.PP
Executed as: the project owner (for integration diffs), or the
developer (for development diffs).
Current directory: the integration directory (for integration diffs),
or the development directory (for development diffs).
Exit status: zero indicates success, all non\[hy]zero exits indicate failure
(the aed will fail).
.RE
.TP 8n
patch_diff_command = string;
.RS
The difference of 2 files, to send around as a patch. (This isn't the
same as diff_command, because it's aimed at GNU Patch, not at humans.)
The command is always executed by developers.
Used by the \f[I]aepatch\fP(1) command.
.PP
Defaults to \f[CW]"set +e;
diff \-c \-L $index \-L $index $original $input > $output;
test $? \-le 1"\fP if not set.
.PP
All of the substitutions described by
.IR aesub (5)
are available;
in addition,
.TP 8n
${ORiginal}
.br
The absolute path of the original
file copied into the change.
Usually in the baseline,
but not always.
.TP 8n
${Input}
.br
The absolute path of the file in the development directory.
.TP 8n
${Output}
.br
The absolute path of the file in which to write the difference listing.
.TP 8n
${INDex}
.br
The project\[hy]relative name of the file, for use when the file name is
embedded in the output. (Optional.)
.PP
Executed as: the project owner (for integration diffs), or the
developer (for development diffs).
Current directory: the integration directory (for integration diffs),
or the development directory (for development diffs).
Exit status: zero indicates success, all non\[hy]zero exits indicate failure
(the aed will fail).
.RE
.TP 8n
annotate_diff_command = string;
.RS
The difference of 2 files, for the use of the \f[I]aeannotate\fP(1) command.
(This isn't the same as the \f[I]diff_\%command\fP field, because it's
aimed at \f[I]aeannotate\fP(1), not at humans.) The command is always
executed by developers. Used by the \f[I]aeannotate\fP(1) command.
.PP
Extreme care should be taken if you are considering setting this field,
otherwise the result reported by \f[I]aeannotate\fP(1) may bear little
relation to reality.
The most useful option is GNU diff's
\f[B]\-\-ignore\[hy]all\[hy]space\fP option,
which will have the effect of ignoring the majority of indenting and
code formatting changes. The \f[B]\-\-ignore\[hy]case\fP option could also
be useful for case insensitive languages such as FORTRAN or PL/1.
Avoid options which would alter the number of lines, such as \f[B]\-
\-ignore\[hy]blank\[hy]lines\fP or \f[B]\-\-context\fP as these will produce
misleading results.
.PP
Defaults to \f[CW]"set +e;
diff $option $original $input > $output;
test $? \-le 1"\fP if not set.
.PP
All of the substitutions described by
.IR aesub (5)
are available;
in addition,
.TP 8n
${ORiginal}
.br
The absolute path of the original
file copied into the change.
Usually in the baseline,
but not always.
.TP 8n
${Input}
.br
The absolute path of the file in the development directory.
.TP 8n
${Output}
.br
The absolute path of the file in which to write the difference listing.
.TP 8n
${INDex}
.br
The project\[hy]relative name of the file, for use when the file name is
embedded in the output. (Optional.)
.TP 8n
${OPTion}
Extra options to be passed to the diff command, as set by the
\f[I]aeannotate\fP(1) \f[B]\-diff\[hy]option\fP command line option.
Use with extreme care.
.PP
Executed as: the project owner (for integration diffs), or the
developer (for development diffs).
Current directory: the integration directory (for integration diffs),
or the development directory (for development diffs).
Exit status: zero indicates success, all non\[hy]zero exits indicate failure
(the aed will fail).
.RE
.TP 8n
review_policy_command = string;
.RS
This field is used to set the command to be executed by the
\f[I]aerpass\fP(1) command. This command is useful in cases where the
enterprise has determined that more than one review is necessary or that
the reviewer must be senior to the developer, \f[I]etc\fR.
Defaults to "\f[CW]exit 0\fP" if not set.
.PP
The exit status is examined. An zero exit status (success) means that
the change will proceed to the \f[I]awaiting integration\fP state; a
non\[hy]zero exit status (failure) means that the change requires further
review state, and the \f[I]develop_\%end_\%action\fP is consulted
to determine the appropriate state (\f[I]awaiting_\%review\fP or
\f[I]being_\%reviewed\fP) for the change to move to.
.PP
All of the substitutions described by \f[I]aesub\fP(5) are available.
Of particular interest are \f[CW]${Change_Developer_List}\fP and
\f[CW]${Change_Reviewer_List}\fP for passing the specific staff involved
with the change.
.PP
Executed as: the current reviewer.
Current directory: the development directory.
Exit status: zero indicates success, non\[hy]zero indicates failure.
.PP
For example, to have a script which is a project source file to be used
to gate the code review process, a setting such as the following may be
used:
.RS
review_policy_command =
"$sh ${source script/reviewpolicy.sh} "
"\-p $project \-c $change "
"\-d ${developer_list} "
"\-r ${reviewer_list}"
;
.RE
This is only one of many ways to implement a project specific review policy.
.RE
.TP 8n
develop_end_policy_command = string;
.RS
This field is used to set the command to be executed by the
\f[I]aede\fP(1) command. This command is useful in cases where the
enterprise has determined that additional pre\[hy]conditions must be met (in
addition to those already imposed by the \f[I]aede\fP(1) command) before
a change may leave the \f[I]being developed\fP state.
Defaults to "\f[CW]exit 0\fP" if not set.
.PP
The exit status is examined. An zero exit status (success) means that
the change may leave to the \f[I]being developed\fP state; a non\[hy]zero exit
status (failure) means that the change requires further development.
.PP
All of the substitutions described by \f[I]aesub\fP(5) are available.
.PP
Executed as: the developer.
Current directory: the development directory.
Exit status: zero indicates success, non\[hy]zero indicates failure.
.PP
There are some common validations available in the \f[I]aede\[hy]policy\fP(1)
command; you may choose all or only some of them, or you may choose to
write a policy command specific to your project.
.RE
.TP 8n
unchanged_file_develop_end_policy = (...);
.RS
This field may be used to control what happens when development of a
change is ended, and the change contains files which have not had their
contents or their attributes changed.
.TP 8n
ignore
Does not look for or warn about unchanged files.
This the default.
.TP 8n
warning
If the change sets contains unchanged files, a warning will be
issued for each one.
.TP 8n
error
If the change set contains unchanged files, an error will be
issued for each one, and develop end will not complete (the
change will remain in the \f[I]being developed\fP state).
.RE
.TP 8n
unchanged_file_integrate_pass_policy = (...);
.RS
This field may be used to control what happens when a change is
completed, and the change contains files which have not had their
contents or their attributes changed.
.TP 8n
ignore
Does not look for or warn about unchanged files.
The file version will be added to the history.
This the default.
.TP 8n
warning
If the change sets contains unchanged files,
a warning will be issued for each one.
The file version will be added to the history.
.TP 8n
remove
If the change set contains an unchanged file,
it will be silently removed from the change set.
The file version will not be added to the history.
The project file is unaffected.
.RE
.TP 8n
test_command = string;
.RS
This field is used to set the command to be executed by the
.IR aet (1)
command.
Defaults to "$shell $file_name" if not set.
.PP
All of the substitutions described in
.IR aesub (5)
are available.
In addition:
.TP 8n
${File_Name}
.br
The absolute path of the test to be executed.
.TP 8n
${Search_Path}
.br
Colon separated list of directories to search for tests and test support
files. (This is a normal \f[I]aesub\fP(5) substitution.)
.TP 8n
${Search_Path_Executable}
.br
Colon separated list of directories to search for executable files and
executable support files. Usually it is the same as the above,
\f[I]except\fP during an \[lq]aet \-bl\[rq] command.
.TP 8n
${VARiables}
.br
The text of name=value variable settings from the command line,
suitably quoted to protect special character from the shell.
Will be appended to the end of the command if not used explicitly.
.PP
Note that tests are source files,
and thus never have the execute bit set.
.PP
Executed as: the project owner (for integration tests) or the developer
(for development tests), or the executing user (for \-independent tests).
Current directory: the integration directory (for integration tests),
the development directory (for development tests), the project
baseline (for \-bl tests), or the current directory (for
\-independent tests).
Exit status: zero indicates success, one indicates failure, anything
else indicates "no result".
.RE
.\" ------------------------------------------------------------------------
.TP 8n
development_test_command = string;
.RS
This field is used to set the command to be executed by the
.IR aet (1)
command when a change is in the
.I "being developed"
state.
Defaults to be the same as the
.I test_command
field if not set.
.PP
.B "Note:"
It is a significantly bad idea to
make tests behave differently in
.I "being development"
and
.I "being integrated"
states;
avoid this at all costs.
.PP
All of the substitutions described in
.IR aesub (5)
are available.
In addition:
.TP 8n
${File_Name}
.br
The absolute path of the test to be executed.
.TP 8n
${File_Name}
.br
The absolute path of the test to be executed.
.TP 8n
${Search_Path}
.br
Colon separated list of directories to search for tests and test support
files. (This is a normal \f[I]aesub\fP(5) substitution.)
.TP 8n
${Search_Path_Executable}
.br
Colon separated list of directories to search for executable files and
executable support files. Usually it is the same as the above,
\f[I]except\fP during an \[lq]aet \-bl\[rq] command.
.TP 8n
${VARiables}
.br
The text of name=value variable settings from the command line,
suitably quoted to protect special character from the shell.
Will be appended to the end of the command if not used explicitly.
.PP
Note that tests are source files,
and thus never have the execute bit set.
.PP
Executed as: the developer.
Current directory: the development directory (for development tests),
the project baseline (for \-bl tests).
Exit status: zero indicates success, one indicates failure, anything
else indicates "no result".
.RE
.\" ------------------------------------------------------------------------
.TP 8n
batch_test_command = string;
.RS
This field is used to set the command to be executed by the
.IR aet (1)
command, in preference to the \f[I]test_command\fP or
\f[I]development_test_command\fP, if set. It is capable of running more
than one test at once.
.PP
All of the substitutions described in
.IR aesub (5)
are available.
In addition:
.TP
${Output}
This is the name of the file to be generated to hold the test results.
See \f[I]aetest\fP(5) for the format of this file.
.br
A space separated list of absolute paths of the tests to be executed.
.TP
${File_Names}
.br
The absolute path of the tests to be executed.
.TP 8n
${File_Name}
.br
The absolute path of the test to be executed.
.TP 8n
${Search_Path}
.br
Colon separated list of directories to search for tests and test support
files. (This is a normal \f[I]aesub\fP(5) substitution.)
.TP 8n
${Search_Path_Executable}
.br
Colon separated list of directories to search for executable files and
executable support files. Usually it is the same as the above,
\f[I]except\fP during an \[lq]aet \-bl\[rq] command.
.TP 8n
${Current}
.br
Number of first test in the batch.
.TP 8n
${Total}
.br
Total number of tests. If this is 0 then no progress messages should be
issued.
.TP 8n
${VARiables}
.br
The text of name=value variable settings from the command line,
suitably quoted to protect special character from the shell.
Will be appended to the end of the command if not used explicitly.
.PP
Note that tests are source files,
and thus never have the execute bit set.
.PP
It is strongly recommended that you design your test scripts so that
they may be executed by either batch or non\[hy]batch methods. This permits
simple migration when your environment changes.
.PP
Executed as: the project owner (for integration tests) or the developer
(for development tests), or the executing user (for \-independent tests).
Current directory: the integration directory (for integration tests),
the development directory (for development tests), the project
baseline (for \-bl tests), or the current directory (for
\-independent tests).
Exit status: zero indicates success, one indicates failure, anything
else indicates "no result".
.RE
.\" ------------------------------------------------------------------------
.TP 8n
architecture_discriminator_command = string;
.RS
If this field is present it is used as a command to be executed in
order to further identify the platform architecture (see below).
All of the substitutions described by \f[I]aesub\fP(5) are available;
.br
Executed as: the developer.
Current directory: the development directory of the change.
Exit status: zero indicates success, all non\[hy]zero exits indicate failure.
.RE
.TP 8n
architecture = [{ ... }];
.br
.RS
This field is a list of
system and machine architectures on which each change
must successfully build and test.
May be assigned more than once.
The structures listed have fields as follows:
.TP 8n
name = string;
.br
The name of the architecture.
This name is available in the
.I ${ARCHitecture}
substitution (see
.IR aesub (5)
for more information),
as well as being used internally by Aegis.
You may use almost any name for your architecture,
but it is best to avoid shell special characters and white space,
because it may be substituted into commands to be executed by Aegis.
.TP 8n
pattern = string;
.br
.RS
The system and machine architecture are determined by using the
.IR uname (2)
system call.
The
.IR uname (2)
return value is assembled into a string of the form
"\f[I]sysname\f[B]\[hy]\f[I]release\f[B]\[hy]\f[I]version\f[B]\[hy]\
\f[I]machine\fR", or
"\f[I]sysname\f[B]\[hy]\f[I]release\f[B]\[hy]\f[I]version\f[B]\[hy]\
\f[I]machine\f[B]\[hy]\
\f[I]disc\fR"
if \f[I]architecture_discriminator_command\fP is used.
.PP
The pattern field must match this uname result string.
The first match found is used.
The pattern is a shell file name pattern,
see
.IR sh (1)
for more information.
.PP
For example, the pattern
.I SunOS\[hy]4.1*\[hy]*\[hy]sun4*
matches a machine the author commonly uses,
which returns
.I "SunOS\[hy]4.1.3\[hy]8\[hy]sun4m"
from the
.IR uname (2)
system call.
.RE
.TP 8n
mode = (required, optional, forbidden);
.br
.RS
The \f[I]mode\fP field is used to control how the architecture information
is used.
.TP 8n
required
Architectures of thus mode will be copied into changes as their required
architectures when the change is created. This is the default.
.TP 8n
optional
Architectures of thus mode will \f[I]not\fP be copied into changes as
their required architectures when the change is created. However,
if you add them subsequently, they become required \f[I]for that change\fP.
.TP 8n
forbidden
Aegis will refuse to build or test on architectures of this mode.
.PP
When a change is created, the \f[I]required\fP architecture names are copied
into the change's architecture list. Once names are in this list, they
are required for the change, and the project attributes are less relevant.
.RE
.PP
If the architecture field is not set,
it defaults to
.RS
.nf
.ft CW
architecture =
[
{
name = "unspecified";
pattern = "*";
mode = required;
}
];
.ft R
.fi
.RE
.RE
.TP 8n
file_template = [ { ... } ];
.br
The file template is consulted whenever a new file is created,
by one of the
.IR aenf (1)
or
.IR aent (1)
commands.
May be assigned more than once.
Each list item has the form:
.RS
.TP 8n
pattern = [ string ];
The name of the file,
relative to the development directory.
Each string is a shell file name pattern;
see
.IR sh (1)
for more information.
The patterns are matched against the whole filename;
naming only the last filename path element will \f[I]not\fP work
(unless the pattern starts with \[lq]\f[CW]*\fP\[rq]).
.TP 8n
body_command = string;
.RS
Command to run to initialize the body of the file.
.br
Executed as: the developer.
Current directory: the development directory of the change.
Exit status: ignored.
.RE
.TP 8n
body = string;
What to initialize the body of the file to.
.PP
All of the substitutions described in
.IR aesub (5)
are available for the \f[I]body\fP and \f[I]body_command\fP strings.
(Only specify one of them.)
In addition:
.TP 8n
${File_Name}
.br
will be replaced by the name of the new file.
.RE
.TP 8n
whiteout_template = [ { ... } ];
.br
The file template is consulted whenever a file is removed, by one of
the \f[I]aerm\fP(1) or \f[I]aemv\fP(1) commands. It is used to place a
\&\[lq]whiteout\[rq] entry in the development directory, in order to induce
compile errors of the removed file is referenced during the build.
Each list item has the form:
.RS
.TP 8n
pattern = [ string ];
The name of the file,
relative to the development directory.
Each string is a shell file name pattern;
see
.IR sh (1)
for more information.
The patterns are matched against the whole filename;
naming only the last filename path element will \f[I]not\fP work
(unless the pattern starts with \[lq]\f[CW]*\fP\[rq]).
.TP 8n
body = string;
What to initialize the body of the file to.
If not present, no whiteout file will be created;
if the empty string, a zero\[hy]length whiteout file will be created.
.PP
All of the substitutions described in
.IR aesub (5)
are available for the body string.
In addition:
.TP 8n
${File_Name}
.br
will be replaced by the name of the removed file.
.PP
If the name of the file being removed does not match any of the filename
patterns, a file consisting of 1KB of very ugly garbage will be generated.
The idea is that it will produce a syntax error for most languages
if you try to run it, compile it, or include it.
.RE
.TP 8n
maximum_filename_length = integer;
.RS
This field is used to limit the length of file names.
All new files may not have path components longer than this.
Existing files are not affected.
The last component must also allow for the ",D" suffix of difference files.
Where this value is larger than the file system allows,
the file system limit will be imposed.
Defaults to 255 if not set.
Legal values range from 9 to 255.
.PP
The file name lengths of project files will be checked
at develop end
if the project
.I aegis.conf
file is in the change.
See
.I aede (1)
for more information.
.RE
.TP 8n
posix_filename_charset = boolean;
.RS
This field may be used to limit the characters allowed
in file names to only those explicitly allowed by POSIX.
Defaults to false if not set.
.PP
For a filename to be portable across conforming implementations of
IEEE Std 1003.1\[hy]1988,
it shall consist only of alphanumeric
characters, dot, hyphen or underscore.
Hyphen shall not be used
as the first character of a portable filename.
.PP
If this field is false,
all characters are allowed
except non\[hy]printing characters, space characters and leading hyphens.
.RE
.TP
dos_filename_required = boolean;
.br
This field may be used to limit file names so that they conform to
the DOS 8+3 filename limits and to the DOS filename character set.
Also denies file names which look like devices (AUX, \f[I]etc\f[P]).
Defaults to false if not set.
This field is used in combination with the other filename fields,
it does not replace them.
.TP
windows_filename_required = boolean;
.br
This field may be used to limit file names so that they conform to the
Windows98 and WindowsNT filename limits and character set. Also denies
file names which look like devices (AUX, \f[I]etc\f[P]). Defaults to false
if not set. This field is used in combination with the other filename
fields, it does not replace them.
.TP
shell_safe_filenames = boolean;
.RS
This field may be used to limit file names so that they may not contain
shell special characters. If you do not set this to true, you will
need to use the ${quote} substitution around file names in commands,
or risk unexpected errors.
.PP
This field defaults to true if not set.
.PP
The white space characters (space, tab, newline, \f[I]etc\fP)
are considered shell special characters.
.RE
.TP
allow_white_space_in_filenames = boolean;
.RS
This field may be used to allow white space characters in file names.
This will allow the following characters to appear in filenames:
backspace (BS, \eb, 0x08), horizontal tab (HT, \et, 0x09), new line
(NL, \en, 0x0A), vertical tab (VT, \ev, 0x0B), form feed (FF, \ef,
0x0C), and carriage return (CR, \er, 0x0D).
.PP
Defaults to false if not set.
.PP
Note that this field does not override other file name filters.
It will be necessary to explicitly set
\f[I]shell_\%safe_\%filenames = false\fP
as well.
It will be necessary to set
\f[I]dos_\%filename_\%required = false\fP
(the default) as well.
It will be necessary to set
\f[I]posix_\%filename_\%charset = false\fP
(the default) as well.
.PP
The user must take great care to use the ${quote} substitution around
all file names in commands in the project configuration. And even
then, substitutions which expect a space separated list of file names
will have undefined results.
.RE
.TP
allow_non_ascii_filenames = boolean;
.RS
This field may be used to allow file names with non\[hy]ascii\[hy]printable
characters in them. Usually this would mean a UTF8 or international
charset of some kind.
.PP
Defaults to false if not set.
.PP
Note that this field does not override other file name filters.
It will be necessary to explicitly set
\f[I]shell_\%safe_\%filenames = false\fP
as well. It will be necessary to set
\f[I]dos_\%filename_\%required = false\fP
(the default) as well.
It will be necessary to set
\f[I]posix_\%filename_\%charset = false\fP
(the default) as well.
.RE
.TP
filename_pattern_accept = [ string ];
.br
This field is used to specify a list of patterns of acceptable file names.
The patterns are matched against each filename path element.
The patterns are constructed from the usual shell filename wild\[hy]cards.
Defaults to "*" if not set.
.TP
filename_pattern_reject = [ string ];
.br
This field is used to specify a list of patterns of unacceptable file names.
The patterns are matched against each filename path element.
The patterns are constructed from the usual shell filename wild\[hy]cards.
Defaults to "*,D" if not set.
The pattern "*,D" is always appended.
Where the
.I filename_pattern_accept
and
filename_pattern_reject
fields conflict,
the reject takes precedence.
.TP 8n
new_test_filename = string;
.RS
This field is used to form the filename of new tests, where the
filename is not specified on the aent command line.
Defaults to "test/${zpad $hundred 2}/t${zpad $number 4}${left $type 1}.sh"
if not set.
.PP
All of the substitutions defined in
.IR aesub (5)
are available.
The following three substitutions are also available:
.TP 8n
$Hundred
The test number divided by 100, optional
.TP
$Number
The test number, mandatory
.TP
$Type
The test type: "automatic" or "manual", optional
.RE
.TP 8n
development_directory_template = string;
.RS
This field is used to determine the name of the development directory
at develop begin.
All of the substitutions defined in \f[I]aesub\fP(5) are
available. The following substitutions is also available:
.TP 8n
Default_Development_Directory
The directory within which the development directory is
to be created.
.TP 8n
Magic
A single letter, starting from \[lq]C\[rq], which can be inserted.
This must be used,
as it allows Aegis to try different names should there be a conflict.
.PP
If not set, defaults to "\f(CW$ddd/${left $p ${expr ${namemax
$ddd} \- ${length .$magic$c}}}.$magic$c\fP".
.PP
For DOS compatibility (8+3 file names), a useful setting is
"\f(CW$ddd/${downcase ${left ${id $p} 8}.$magic${right 0$c 2}}\fP".
This ensures that the filename is always a valid 8.3 filename, that it
is always lowercase, and it translates any punctuation in the project
name into underscores.
.RE
.TP 8n
metrics_filename_pattern = string;
.RS
This field is used to form the name of the metrics file, given a source file.
All of the substitutions defined in \f[I]aesub\fP(5) are
available. The following substitutions is also available:
.TP 8n
File_Name
The absolute path name of the source file.
.PP
Defaults to "$filename,S" if not set.
.RE
.TP 8n
trojan_horse_suspect = [ string ];
This list of filename patterns is consulted by aedist \-receive when it
is checking for files which could be used to host Trojan horse attacks.
This will be different for different projects, so you will need to
update this yourself.
The patterns are matched against the whole filename;
naming only the last filename path element will \f[I]not\fP work
(unless the pattern starts with \[lq]\f[CW]*\fP\[rq]).
.TP 8n
project_specific = [ { ... } ];
.RS
This is a list of name and value pairs for use within the
${project\[hy]specific} substitution (see \f[I]aesub\fP(5) for more
information).
May be assigned more than once.
The sub\[hy]fields are
.TP 8n
name = string;
The name of the value.
By convention, names which start with an upper\[hy]case letter will appear
in listings, and lower\[hy]case will not.
Attribute names are case\[hy]insensitive.
.TP 8n
value = string;
The value to be substituted.
.PP
There are almost no limitations on the strings which may appear in either
of these fields.
.PP
There are several attribute names which are known to and used by Aegis,
these include:
.TP 8n
aede\[hy]policy
This attribute is used when no policy names are listed on the
\f[I]aede\[hy]policy\fP(1) command line.
.TP 8n
ae\[hy]repo\[hy]ci:commit\[hy]message
See \f[I]ae\[hy]repo\[hy]ci\fP(1) for more information.
.TP 8n
aede\[hy]policy
See \f[I]aede\[hy]policy\fP(1) for more information.
.TP 8n
aede\[hy]policy:version\[hy]info:library
See \f[I]aede\[hy]policy\fP(1) for more information.
.TP 8n
aeget:inventory:hide
See \f[I]aeget\fP(1) for more information.
.TP 8n
aemakegen:debian:build\[hy]depends
See \f[I]aemakegen\fP(1) for more information.
.TP 8n
aemakegen:debian:copyright
See \f[I]aemakegen\fP(1) for more information.
.TP 8n
aemakegen:debian:depends
See \f[I]aemakegen\fP(1) for more information.
.TP 8n
aemakegen:debian:description:\f[I]name\fP
See \f[I]aemakegen\fP(1) for more information.
.TP 8n
aemakegen:debian:extended\[hy]description:\f[I]name\fP
See \f[I]aemakegen\fP(1) for more information.
.TP 8n
aemakegen:debian:homepage
See \f[I]aemakegen\fP(1) for more information.
.TP 8n
aemakegen:debian:maintainer
See \f[I]aemakegen\fP(1) for more information.
.TP 8n
aemakegen:debian:priority
See \f[I]aemakegen\fP(1) for more information.
.TP 8n
aemakegen:debian:section
See \f[I]aemakegen\fP(1) for more information.
.TP 8n
aemakegen:pkg\[hy]config:cflags
See \f[I]aemakegen\fP(1) for more information.
.TP 8n
aemakegen:pkg\[hy]config:conflicts
See \f[I]aemakegen\fP(1) for more information.
.TP 8n
aemakegen:pkg\[hy]config:libs
See \f[I]aemakegen\fP(1) for more information.
.TP 8n
aemakegen:pkg\[hy]config:libs.private
See \f[I]aemakegen\fP(1) for more information.
.TP 8n
aemakegen:pkg\[hy]config:requires
See \f[I]aemakegen\fP(1) for more information.
.TP 8n
aemakegen:version\[hy]info
See \f[I]aemakegen\fP(1) for more information.
.TP 8n
aetar:exclude
This attribute is used by he \f[I]aetar\fP(1) receive command to exclude
files in tarballs from consideration. This is a space separated list of
file names.
.TP 8n
copyright\[hy]owner
This string is available via the \f[I]${copyright\[hy]owner}\fP substitution,
and is the one checked by the \f[I]aede\[hy]policy\fP(1) command.
Only set this attribute if your project is a work\[hy]for\[hy]hire under
copyright law.
It defaults to the value of \f[I]${user name}\fP if not set,
this is almost always correct for Open Source projects.
.TP 8n
html:body\[hy]begin
This attribute is used by the \f[I]aeget\fP(1) command to customize
generated web pages. See \f[I]aeget\fP(1) for more information.
.TP 8n
html:meta
This attribute is used by the \f[I]aeget\fP(1) command to customize
generated web pages. See \f[I]aeget\fP(1) for more information.
.TP 8n
html:body\[hy]end
This attribute is used by the \f[I]aeget\fP(1) command to customize
generated web pages. See \f[I]aeget\fP(1) for more information.
.TP 8n
svn:password
See \f[I]ae\[hy]repo\[hy]ci\fP for more information.
.TP 8n
svn:username
See \f[I]ae\[hy]repo\[hy]ci\fP for more information.
.so lib/en/man1/z_cmd_env.so
.RE
.TP 8n
build_time_adjust = (...);
.RS
This field controls the adjustment of file modification times at the
end of integrate\[hy]pass. File times are adjusted so that development
directories are, in the main, out of date with respect to the baseline.
The idea is that, at the very least, programs need to be re\[hy]linked so
that \f[I]aet \-reg\fP does not give false negatives.
.LP
Combining this with the \f[I]project_\%file_\%command\fP (above) can
alleviate the vast majority of file modification time inconsistencies
experienced as a result of a project integration and the subsequent
changes in the baseline's file modification times.
.LP
Unless you are a masochist, do not set this field. Leave it as the default.
.TP 8n
adjust_and_sleep
Causes the file times to be adjusted, and if the file times
would extend into the future, aeipass will sleep until that time
has passed. This is the default.
.TP 8n
adjust_only
Causes the file times to be adjusted. If the file time extend
into the future, a warning is issued.
.TP 8n
dont_adjust
File modification times are not adjusted. This is a really bad
idea. Really. Make sure that, at the very minimum,
\f[I]project_\%file_\%command\fP touches all of the change's files,
otherwise the build problems which ensue are going to take you
weeks to track down and lose you much productivity.
You have been warned.
.LP
See also the \f[I]build_\%time_\%adjust_\%notify_\%command\fP field.
.RE
.TP 8n
signed_off_by = boolean;
.RS
If this field is set each \f[I]aedb\fP(1), \f[I]aechown\fP(1), \f[I]aede\fP(1)
and \f[I]aerpass\fP(1) will append a \f[CW]Signed\[hy]off\[hy]by\fP line to the
change description. This field should only be set to true for open
source projects.
.PP
For a description of \f[CW]Signed\[hy]off\[hy]by\fP see
http://www.ussg.iu.edu/hypermail/linux/kernel/0405.2/1301.html and
http://www.osdl.org/newsroom/press_releases/2004/2004_05_24_dco.html
.RE
.TP 8n
cache_project_file_list_for_each_delta = boolean;
.RS
It is possible to have Aegis cache the list of project files that
were present at integrate pass for each delta (integrated change
set). This is used to optimize all project\[hy]history\[hy]based
operations, such as \f[I]aecp \-delta\fP or \f[I]aepatch\fP(1).
.PP
This cache will optimize many operations which would otherwise
require time to reconstruct the project state using the
roll\[hy]forward data available in each change set. However, it comes
at the cost of disk space, and not everyone can afford more and more
disk.
.PP
This field defaults to true if not set.
.RE
.TP 8n
clean_exceptions = [ string ];
.RS
It is possible to have Aegis exclude from the clean process any file
that match one of the pattern listed in the clean_exceptions list.
.PP
This field default to an empty list if not set.
.RE
.TP 8n
cache_project_file_list_for_each_delta = boolean;
.RS
It is possible to have Aegis cache the list of project files that
were present at integrate pass for each delta (integrated change
set). This is used to optimize all project\[hy]history\[hy]based
operations, such as \fIaecp \-delta\fP or \fIaepatch\fP(1).
.PP
This cache will optimize many operations which would otherwise
require time to reconstruct the project state using the
roll\[hy]forward data available in each change set. However, it comes
at the cost of disk space, and not everyone can afford more and more
disk.
.PP
This field defaults to true if not set.
.RE
.SH RSS FEEDS
.RE
Aegis has the ability to feed RSS channels when change sets transition
states. See the User Guide for full details. Following is a brief
description of the project\[hy]specific attributes used to control this process.
.RE
.TP 8n
Create / Add to a channel
.RS 8n
An RSS channel is specified with the rss:feedfilename project_specific
attribute:
.TP 8n
.br
project_specific =
[
{
name = "rss:feedfilename\-";
value = "";
}
.br
]
.RE
.TP 8n
Specify the Description of an RSS channel
.RS 8n
The description of an RSS channel is specified with the
rss:feeddescription project_specific attribute:
.TP 8n
.br
project_specific =
[
{
name = "rss:feeddescription\-";
value = "";
}
.br
]
.RE
.TP 8n
Specify the Title of an RSS channel
.RS 8n
The title of an RSS channel is specified with the rss:feedtitle
project_specific attribute:
.TP 8n
.br
project_specific =
[
{
name = "rss:feedtitle\-";
value = "";
}
.br
]
.RE
.TP 8n
Specify the Language of an RSS channel
.RS 8n
The language of an RSS channel is specified with the rss:feedlanguage
project_specific attribute:
.TP 8n
.br
project_specific =
[
{
name = "rss:feedlanguage\-";
value = "