Man Linux: Main Page and Category List

NAME

       aeintegratq - integrate changes into projects

SYNOPSIS

       aeintegratq [ option...  ] project-name...

DESCRIPTION

       The aeintegratq command is used to manage the integrations of one or
       more changes in one or more projects.  Normally run via cron(1) or
       at(1) with the name of a single project, aeintegratq will manage all
       operations for integration even when -Build and -Test are required on
       multiple architectures. If a change review is revoked after the queue
       is running aeintegratq will notice the bad state and silently move on.
       If one or more changes are ended or passed after the queue is running,
       and -loop has been given, aeintegratq will notice the new change[s] and
       integrate them. Additional options allow the integrator full control
       over most aspects of queue management such as the order of integration
       of multiple changes.

OPTIONS

       The following options are understood:

   Option Summary
       -h      Help, show usage information.

       -H      Help, show usage plus all helpful comment information.

       -a      run on Any machine (normally only IntegrationHost)

       -s      run remote operations via ssh (default rsh)

       -n      No action, just tell what would be done.

       -ib s   Specify (remote) server for ibegin.

       -ip s   Specify (remote) server for ipass.

       -k      Keep the scripts and report files.

       -K      Keep the temp file even if integration passes.

       -loop   Loop to process more changes if they become available before
               aeintegratq completes.  It will stop when there is nothing more
               to be done.

       -M list Minimum, run given changes -minimum

       -P list Precious, do not IFail changes in list, just stop.

       -R list Ready, specify order and subset, e.g. -R 29,45

       -S stage
               Pick up at given stage (diff|build|test|integrate)

       -c change-number
               specify Change to integrate at Stage

       -p project-name
               specify single Project name

       NOTE: if custom options such as -P -R -S -c -p are given only a single
       project may be integrated since the options would be meaningless to the
       next project given.

       Some options are present only for testing and investigation.  Note that
       options are rarely required for normal operations.

   Control Options
       The following options are available for special needs.  They control
       the order and disposition of each change awaiting_integration in a
       given project.

       -R[eady] number1,number2...
               This option is used to specify order or subset to integrate.
               Only those changes listed will be attempted, and in exactly the
               order given. This applies to queue looping if -loop is given.
               In particular note unless the list includes future changes,
               future loops will not integrate them.

               Useful if a particular change must go in before another for
               some reason.  Or if only integrating one or two changes when
               several are awaiting_integration in the given project.  A
               single change may also be specified with the -c[hange] number
               option, which is common for other aegis commands.  However the
               -R option allows a list and if given will override any -c
               given.

       -P[recious] number1,number2...

       -P[recious] all
               This option is used to specify that a particular change or
               subset of changes should be considered precious.  It neither
               implies order nor limits the queue run to that subset; it only
               means that the changes should be considered precious.  Note
               that at least one number (or the keyword all) must be given.

               The concept of precious means that if the given change were to
               fail anywhere in the integration process, then the process
               simply stops and leaves the problem change in the delta
               directory.  The -IFail would not actually be executed.  This is
               sometimes useful to diagnose a problem which only occurs during
               integrations.  It is also useful if the failure is due to a
               transient problem such as unreliable machines on the network.
               In such a case the integration can be resumed after fixing the
               problem.  See the stage options below.

               If, on the other hand, a precious change makes it through the
               integration process successfully, the option has no effect.

       -M[inimum] number1,number2... or all
               Integrate the given change[s] with the -minimum option.  Such
               changes will be put on the end of the queue so that the last
               integrations of a run will be a minimum.  This feature allows
               practical use of minimum integrations without requiring
               -minimum on each and every integration.  See the section below
               on Minimum integrations for more information.  If -loop is
               given any change[s] specified as minimum will run at the end of
               the loop in which they are ready, they will not be pushed to
               the final loop.

       -ib[server] server-name or ""

       -ip[server] server-name or ""
               To specify a remote server on which to run -ibegin or
               0respecively. These options are rarely needed, but may be
               useful if a project is hosted on a different file server and
               has a large baseline. By having the -ibegin run on that server
               the network traffic would be greatly reduced and for large
               projects and/or slow networks can greatly reduce the time
               required for -ibegin.  The option form of giving an empty name
               depends on the output of df -k giving a parseable host name. If
               that is not true on your integration host architecture, you
               will have to specify the server name.

       -display display-value or ""
               To specify a valid X display for use during integration
               operations.

   Stage Options
       The following options allow [re]starting an integration which has
       already progressed through some stages.  This is useful to deal with
       failed (precious) integrations, or to finish automatically an
       integration begun by hand.

       -S[tage] diff

       -S[tage] build

       -S[tage] test

       -S[tage] integrate
               Pick up the integration at the given stage.  Requires -c[hange]
               number option to specify the change number.

Advanced Controls

       The integrator may provide for special situations such as operations
       required after -Build and before -Test, or at the end of a queue run.
       Such capabilities are provided by hooks and strategies described below.

   Hooks
       There are a set of hooks available which are run, if present, before
       and after each stage of the integration.  They can be used to help
       ensure that the integrator actually gets some sleep while managing
       large projects.

       These hooks are searched for in the directory $HOME/integration_hooks.
       None need exist; aeintegratq will only pay attention to any that do
       exist.  Hooks may be any form of executable (script, etc) and are
       called with 2 arguments: project-name change-number.  They run as the
       integrator on the machine from which aeintegratq was started.  They are
       named using the project name along with a suffix according to what
       place in the integration process you want them to run.

       Note that if a hook for project foo exists it is also used for any
       branches under that project.  For example, if you have provided
       foo.pre_ip, it will be run for foo.1 and foo.1.0 as well.  If for some
       reason you want different (or no) action for project foo.1.0, then you
       would provide foo.1.0.pre_ip which does what you wish, including
       nothing, effectively overriding foo.pre_ip.

       Here is how to map particular places in the integration process to hook
       suffixes.

                 +--------------------------------------------------+
                 |run at time                          extension    |
                 +--------------------------------------------------+
                 |before attempting -Integrate_Begin   .pre_ib      |
                 |after -Integrate_Begin completes     .ib          |
                 |before attempting -Diff              .pre_d       |
                 |after -Diff completes                .d           |
                 |before attempting -Build             .pre_b       |
                 |after -Build completes               .b           |
                 |before attempting -Build on <arch>   .pre_<arch>b |
                 |after -Build on <arch> completes     .<arch>b     |
                 |before attempting -Test              .pre_t       |
                 |after -Test completes                .t           |
                 |before attempting -IPass             .pre_ip      |
                 |after -IPass completes               .ip          |
                 |before attempting -IFail             .pre_if      |
                 |after -IFail completes               .if          |
                 +--------------------------------------------------+
       The hook program should exit with 0 if successful or 1 if not.  A non-
       zero exit causes the change being integrated to fail immediately unless
       it was marked precious.

       Note that in most cases anything done via an .ip hook should probably
       be done instead by the ipass_notify command in the project attributes
       file (see aepattr(5) for more information), or the build_time_adjust_
       notify_command in the project configuration file (see aepconf(5) for
       more information), but the hook can provide a temporary way to keep
       going until the permanent solution can be implemented.

       In addition two special hooks, aeintegratq.end and aeintegratq.fail,
       are recognized.  They are called when aeintegratq finishes a queue run.
       They are called with 2 arguments like any other hook (project-name
       change-number) although both the project-name and change-number given
       are of the last change integrated and may be less than useful.

       The .end hook is called if/when the queue run is finished and was
       successful.  Note that this does not mean that no changes failed, only
       that no queue errors occurred.  This hook might be used to invoke
       another queue run on a different project/branch, or possibly even on
       the same project, if other changes may have been ended and/or reviewed
       while the first run was in progress, see also the -loop option.  These
       conditions arise quite often with flex time engineers.  Another use of
       the .end hook is to automatically build a new package using the newly
       integrated project as source.

       If queue errors were encountered, or a change failed that was marked
       precious, then the .fail hook is called.  An obvious use of that hook
       would be an e-mailed page to the integrator.

   Strategy or Oops-retry
       Sometimes a persistent build problem will plague integrations.  This
       can be very annoying if it ruins an overnight run, especially if the
       cure is simple when it happens.  Examples of this can be timeouts due
       to a busy data server or other transient errors.  Note that this
       applies only to -Build related problems.

       To deal with such problems the integrator may provide a strategy script
       specific to a project.  An executable program should be found in
       $HOME/strategy.<project_name>.  The program will be run as the
       integrator with the delta directory as current directory.  The program
       may do any commands necessary to clean up and/or diagnose the error.
       If the script finds the problem to be transient and fix-able, it exits
       successfully (with 0 status) and aeintegratq will re-launch the -Build
       and log the re-try.  Otherwise the script should exit with a 1 and the
       change will fail.

Multi-Architecture integrations

       For projects which build and test on multiple architectures,
       aeintegratq requires arch_hosts be installed and have available at
       least one machine of each architecture required.  This is also true if
       the host from which aeintegratq is run is of a different architecture
       from the target architecture of the project being integrated.

       If you wish to take advantage of multiple architecture automatic
       integrations, you can install arch_hosts or provide a more simple
       script which will return a machine name according to architecture and
       job type.

Minimum integrations

        provides a minimum integration capability which may be used for
       various reasons.  The term minimum may be a bit counter intuitive.  One
       might think it means to do the minimum amount of work, however it
       actually means use a minimum of files from the baseline in populating
       the delta directory.  Since no constructed files are put in the delta
       directory, this normally leads to actually building everything in the
       project from sources and, as such, might be considered the most robust
       of builds.

       Note that any change which removes a file, whether by aerm or aemv,
       results in an implicit minimum integration.  This is intended to ensure
       nothing in the project references the removed file.

       A project may adopt a policy that a product release should be based on
       a minimum integration.  Such a policy may be a reflection of local
       confidence, or lack thereof, in the project’s DMT (Dependency
       Maintenance Tool) or build system.  Or it may be based on a validation
       process wishing to make a simple statement on how the released package
       was produced.

       Another, more transient, reason a to require a minimum integration
       might be when upgrading a third party library, compiler or maybe even
       OS level.  Any of these events would signal the need for a minimum
       integration to ensure everything is rebuilt using the new resources.
       This can be done with minimum overhead using the -M option as described
       above.

       The cost of a minimum integration varies according to type and size of
       the project.  For very large projects, especially those building large
       numbers of binaries, the cost can be large.  However large projects
       also require significant time to fully populate the delta directory.  A
       minimum integration only copies those files under aegis control,
       skipping all “produced” files.  In the case where a file upon which
       everything depends is changed, everything will be built anyway so the
       copy of the already built files is a waste of time.  This means that
       sometimes a minimum can be as cheap as a normal integration.

Manual Tests

        allows tests to be defined as manual which may be necessary if the
       test requires human interaction or some transient resource. Such tests
       can be problematic for automatic integrations and generally must have
       some means to pass without running during integrations. For this, and
       other, reasons most sites seek to avoid manual tests. There are a
       number of ways to code a test such that it will pass automatically
       during integrations. Just one example for shell script tests might be:

       CSTATE=‘aesub -p $AEGIS_PROJECT -c $AEGIS_CHANGE ’${state}’‘
       if [ "$CSTATE" = "being_integrated" ]
       then
           echo "‘basename $0‘ passes during integration"
           exit 0
       fi

Optional Support Programs

       There are some programs which aeintegratq will use if they are
       installed.

       · arch_hosts was mentioned previously.  It is optional only if your
       projects and your  file server are of a single architecture.

       · aelogres may enhance the information provided in -IFail entries.
       Normally all you get is the last 10 lines of the log file, which is not
       bad if tests fail, but can be terrible for failed builds.  If you
       provide a program named aelogres which knows how to extract a better
       succinct report of problems, the output of that program will be used
       instead of the simple tail.  It is called with a -i option.

       · sound_all_machines, if available, will be called when integrations
       either pass or fail.  It can be helpful to announce the fact that an
       integration has finished.  If it passed, developers will probably want
       to do an aed to bring their changes up to date.  The audio announcement
       provides another timely hint.

       The sound files are searched for in the /var/lib/aegis/sounds
       directory.  They will have endings of _pass and _fail according to the
       results of a given attempt.  Two sound files are required:
       integration_pass and integration_fail.  Others will be used if provided
       to customize the sounds so that each developer may have one or more
       personal sounds.  If a file named <developer>_pass is located, it will
       be used.  If a set of files exist named <developer_pass.[0-9] they will
       be used in random sequence.  The same search rule applies to _fail
       sets.  The sound_all_machines program may use a host list and play the
       sound file on each machine or, assuming that other audio capabilities
       exist, might do any form of announcement desired.

EXIT STATUS

       The aeintegratq command will exit with a status of 1 on any error.  The
       aeintegratq command will only exit with a status of 0 if there are no
       errors.

ENVIRONMENT VARIABLES

       See aegis(1) for a list of environment variables which may affect this
       command.  See aepconf(5) for the project configuration file’s project_
       specific field for how to set environment variables for all commands
       executed by Aegis.

FILES

       Control files are searched for in the $HOME directory.  They are named
       strategy.<project>, They need not exist if no special action is
       necessary.

       The hook scripts are searched for in the $HOME/integration_hooks
       directory.  They are named <project>.<stage>.  Also aeintegratq.end and
       aeintegratq.fail.  These hooks also need not exist if no special action
       is desired.

COPYRIGHT

       aeintegratq version 4.24.3.D001
       Copyright (C) 1998-2005 Endocardial Solutions, Inc.

       The aeintegratq program comes with ABSOLUTELY NO WARRANTY; This is free
       software and you are welcome to redistribute it under certain
       conditions;

AUTHOR