Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
aeintegratq(1)		    General Commands Manual		aeintegratq(1)

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 con-
	trol over most aspects of queue	management such	as the order of	 inte-
	gration	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 sin-
		gle change may also be specified with the -c[hange] number op-
		tion,  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	direc-
		tory.	The  -IFail  would  not	actually be executed.  This is
		sometimes useful to diagnose a problem which only occurs  dur-
		ing  integrations.  It is also useful if the failure is	due to
		a transient problem such as unreliable machines	 on  the  net-
		work.	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	-mini-
		mum 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	0  re-
		specively.  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 re-
		quired 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	opera-
		tions.

   Stage Options
	The following options allow [re]starting an integration	which has  al-
	ready  progressed  through  some  stages.  This	is useful to deal with
	failed (precious) integrations,	or to finish automatically an integra-
	tion 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 be-
	low.

   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 en-
	sure 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 noth-
	ing, 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  un-
	less 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 suc-
	cessful.   Note	 that  this does not mean that no changes failed, only
	that no	queue errors occurred.	This hook might	be used	to invoke  an-
	other 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  ap-
	plies 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 in-
	tegrator 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,  aeinte-
	gratq 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 inte-
	grations,  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 vari-
	ous  reasons.	The  term minimum may be a bit counter intuitive.  One
	might think it means to	do the minimum amount of work, however it  ac-
	tually	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 en-
	sure 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 Mainte-
	nance 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 in-
	tegration  to  ensure  everything  is rebuilt using the	new resources.
	This can be done with minimum overhead using  the  -M  option  as  de-
	scribed	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 num-
	ber 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  in-
	stalled.

	  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 announce-
	ment provides another timely hint.

	The sound files	are searched for in the	 /usr/local/com/sounds	direc-
	tory.	They will have endings of _pass	and _fail according to the re-
	sults of a given attempt.  Two	sound  files  are  required:  integra-
	tion_pass  and	integration_fail.   Others will	be used	if provided to
	customize the sounds so	that each developer may	have one or more  per-
	sonal 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	neces-
	sary.

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

COPYRIGHT
	aeintegratq version 4.25.D510
	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;

Reference Manual		     Aegis			aeintegratq(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=aeintegratq&sektion=1&manpath=FreeBSD+Ports+14.3.quarterly>

home | help