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

FreeBSD Manual Pages

  
 
  

home | help
aegis -CoPy_file(1)	    General Commands Manual	   aegis -CoPy_file(1)

NAME
	aegis  copy file - copy	a file into a change

SYNOPSIS
	aegis -CoPy_file [ option...  ]	filename...
	aegis -CoPy_file -INDependent [	option...  ] filename...
	aegis -CoPy_file -List [ option...  ]
	aegis -CoPy_file -Help

DESCRIPTION
	The  aegis  -CoPy_file	command	 is used to copy a file	into a change.
	The named files	will be	copied from the	baseline into the  development
	directory,  and	added to the list of files in the change.  The version
	of files copied	from the baseline is remembered.

	This command may be used to copy tests into a change, not just	source
	files.	 Tests	are  treated  just like	any other source file, and are
	subject	to the same process.

	Warning: If there are files in the development directory of  the  same
	name they will be overwritten by this command.

	You  may also name directories.	 All of	the source files in the	direc-
	tories named, and all directories below	them, will be copied from  the
	baseline  into	the  development  directory,  and added	to the list of
	files in the change.

	When copying files explicitly, it is an	error if the file  is  already
	part  of  the  change.	 When  you name	a directory, all of the	source
	files in the project below that	directory are copied, except any which
	are already in the change.  It is an error if none of  the  files  im-
	plicitly named by the directory	can be used.

	If  you	 want  to  change a copied source file to be executable	(shell
	scripts, for example) then you simply use the normal chmod(1) command;
	the reverse to make it not executable.	If  any	 of  the  file's  exe-
	cutable	 bits  are  set	at aede(1) time	the file is remembered as exe-
	cutable	and all	execute	bits (minus the	project's umask) will  be  set
	by subsequent aecp(1) commands.

   File	Name Interpretation
	The  aegis  program  will  attempt to determine	the project file names
	from the file names given on the command line.	 All  file  names  are
	stored	within	aegis projects as relative to the root of the baseline
	directory tree.	 The development directory and the integration	direc-
	tory  are  shadows  of	this baseline directory, and so	these relative
	names apply here, too.	Files named on the command line	are first con-
	verted to absolute paths if necessary.	They are  then	compared  with
	the baseline path, the development directory path, and the integration
	directory path,	to determine a baseline-relative name.	It is an error
	if the file named is outside one of these directory trees.

	The  -BAse_RElative  option may	be used	to cause relative filenames to
	be interpreted as relative to the baseline  path;  absolute  filenames
	will  still be compared	with the various paths in order	to determine a
	baseline-relative name.

	The relative_filename_preference in the	user configuration file	may be
	used to	modify this default behavior.  See aeuconf(5) for more	infor-
	mation.

   Process Side	Effects
	This  command  will  cancel  any  build	or test	registrations, because
	adding another file logically invalidates them.	 If the	 project  con-
	figuration  file  was  added,  any diff	registration will also be can-
	celed.

	When the change	files are listed (aegis	-List Change_Files -TERse) the
	copied files will appear in the	listing.  When the project  files  are
	listed	with  an  explicit  change  number  (aegis -List Project_Files
	-TERse -Change N) none of the change's	files,	including  the	copied
	files,	will appear in the terse listing.  These two features are very
	helpful	when calling aegis from	within a DMT to	generate the  list  of
	source files.

THE BASELINE LOCK
	The  baseline  lock  is	 used to ensure	that the baseline remains in a
	consistent state for the duration of commands which need to  read  the
	contents of files in the baseline.

	The  commands  which  require the baseline to be consistent (these in-
	clude the aeb(1), aecp(1) and aed(1) commands) take  a	baseline  read
	lock.	This is	a non-exclusive	lock, so the concurrent	development of
	changes	is not hindered.

	The command which modifies the baseline, aeipass(1), takes a  baseline
	write  lock.   This  is	an exclusive lock, forcing aeipass(1) to block
	until there are	no active baseline read	locks.

	It is possible that one	of the above development commands  will	 block
	until an in-progress aegis -Integrate_PASS completes.  This is usually
	of  short duration while the project history is	updated.  The delay is
	essential so that these	commands receive  a  consistent	 view  of  the
	baseline.   No other integration command will cause the	above develop-
	ment commands to block.

	When aegis' branch functionality is in	use,  a	 read  (non-exclusive)
	lock  is  taken	 on  the branch	baseline and also each of the "parent"
	baselines.  However, a baseline	write (exclusive) lock is  only	 taken
	on  the	branch baseline; the "parent" baselines	are only read (non-ex-
	clusive) locked.

TEST CORRELATIONS
	The "aegis -Test -SUGgest" command may be used to have	aegis  suggest
	suitable  regression  tests for	your change, based on the source files
	in your	change.	 This automatically focuses testing effort to relevant
	tests, reducing	the number of regression tests necessary to be	confi-
	dent that you have not introduced a bug.

	The  test  correlations	 are  generated	by the "aegis -Integrate_Pass"
	command, which associates each test in the  change  with  each	source
	file  in  the  change.	 Thus,	each source file accumulates a list of
	tests which have been associated with it in the	past.  This is not  as
	exact  as code coverage	analysis, but is a reasonable approximation in
	practice.

	The aecp(1) and	aenf(1)	commands are used to associate	files  with  a
	change.	 While they do not actively perform the	association, these are
	the  files  used  by  aeipass(1)  and aet(1) to	determine which	source
	files are associated with which	tests.

   Test	Correlation Accuracy
	Assuming that the testing correlations are accurate and	that the tests
	are evenly distributed across the function space, there	will be	a less
	than 1/number chance that a relevant test has  not  been  run  by  the
	"aegis	-Test  -SUGgest	 number"  command.  A small amount of noise is
	added to the test weighting, so	that unexpected	things	are  sometimes
	tested,	and the	same tests are not run every time.

	Test correlation accuracy can be improved by ensuring that:

	 Each	change should be strongly focused, with	no gratuitous file in-
	  clusions.  This avoids spurious correlations.

	 Each item of new functionality should	 be  added  in	an  individual
	  change,  rather  than	 several  together.   This strongly correlates
	  tests	with functionality.

	 Each bug should be fixed in an individual change, rather  than  sev-
	  eral together.  This strongly	correlates tests with functionality.

	 Test	correlations will be lost if files are moved.  This is because
	  correlations are by name.

	The best way for tests to correlate accurately with  source  files  is
	when  a	change contains	a test and exactly those files relating	to the
	functionality under test.  Too many spurious  files  will  weaken  the
	usefulness of the testing correlations.

   Notification
	The  copy_file_command in the project config file is run, if set.  The
	project_file_command is	also run, if set, and if there has been	an in-
	tegration recently.  See aepconf(5) for	more information.

   File	Action Adjustment
	When this command runs,	it first checks	the change files  against  the
	projects  files.   If there are	inconsistencies, the file actions will
	be adjusted as follows:

	create	If a file is being created, but	another	change	set  is	 inte-
		grated	which  also  creates  the file,	the file action	in the
		change set still being developed will be adjusted to "modify".

	modify	If a file is being modified, but another change	set  is	 inte-
		grated	which  removes the file, the file action in the	change
		set still being	developed will be adjusted to "create".

	remove	If a file is being removed, but	another	change	set  is	 inte-
		grated	which  removes the file, the file will be dropped from
		the change set still being developed.

OPTIONS
	The following options are understood:

	-as-needed
		Usually	it is an error if a file is already in a  change  set,
		and is redundantly added to the	change set again.  This	option
		says to	ignore such files.

	-BAse_RElative
		This option may	be used	to cause relative filenames to be con-
		sidered	 relative  to  the  base of the	source tree.  See aeu-
		conf(5)	for the	corresponding user preference.

	-CUrrent_RElative
		This option may	be used	to cause relative filenames to be con-
		sidered	relative to the	current	directory.   This  is  usually
		the  default.  See aeuconf(5) for the corresponding user pref-
		erence.

	-BRanch	number
		This option may	be used	to specify a different branch for  the
		origin	file,  rather than the baseline.  (See also -TRunk op-
		tion.  Please Note: the	-BRanch	option does not	take a project
		name, just the branch number suffix.

	-GrandParent
		This option may	be used	to specify the grandparent branch (one
		up from	the current branch) for	the origin file,  rather  than
		the  baseline.	 (The  -grandparent  option is the same	as the
		"-branch .." option.)

	-Change	number
		This option may	be used	to specify a particular	change	within
		a  project.   See  aegis(1) for	a complete description of this
		option.

	-DELta number
		This option may	be used	to specify a particular	delta  in  the
		project's  history to copy the file from, rather than the most
		current	version.  If the delta has  been  given	 a  name  (see
		aedn(1)	 for  how) you may use a delta name instead of a delta
		number.	 It is an error	if the delta specified does not	exist.
		Delta numbers start from 1 and increase; delta 0 is a  special
		case meaning "when the branch started".

	-DELta_Date string
		This  option may be used to specify a particular date and time
		in the project's history to copy the file  from,  rather  than
		the most current version.  It is an error if the string	speci-
		fied  cannot  be  interpreted as a valid date and time.	 Quote
		the string if you need to use spaces.

	-DELta_From_Change number
		This option may	be used	to specify a particular	project	 delta
		from its change	number.

	-Help
		This  option  may be used to obtain more information about how
		to use the aegis program.

	-INDependent
		This option is used to specify that the	copy is	to be run  in-
		dependent  of any particular change.  The files	will be	copied
		relative to the	current	directory (but see the	-Output-Direc-
		tory option).

	-Keep
		This  option  may  be  used to retain files and/or directories
		usually	deleted	or replaced by the command.  Defaults  to  the
		user's delete_file_preference if not specified,	see aeuconf(5)
		for more information.

	-No_Keep
		This option may	be used	to ensure that the files and/or	direc-
		tories	are  deleted  or replaced by the command.  Defaults to
		the user's delete_file_preference if not specified,  see  aeu-
		conf(5)	for more information.

	-List
		This  option may be used to obtain a list of suitable subjects
		for this command.  The list may	be more	general	than expected.

	-Not_Logging
		This option may	be used	to disable the	automatic  logging  of
		output	and  errors to a file.	This is	often useful when sev-
		eral aegis commands are	combined in a shell script.

	-Output	filename
		This option may	be used	to specify an output file  of  a  file
		being copied from the baseline.	 Only one baseline file	may be
		named  when  this option is used.  The file name "-" is	under-
		stood to mean the standard output.  This option	does  not  add
		the  file to the set of	change files.  No locks	are taken when
		this option is used, not even the baseline read	lock.

	-Output-Directory path
		This option may	only be	used with the -INDependent option,  to
		specify	the output directory for the copied files, rather than
		the  current  directory.   The directory will be created if it
		does not exist already.

	-OverWriting
		This option may	be used	to force overwriting  of  files.   The
		default	 action	 is to give an error if	an existing file would
		be overwritten.

	-Project name
		This option may	be used	to select  the	project	 of  interest.
		When  no -Project option is specified, the AEGIS_PROJECT envi-
		ronment	variable is consulted.	If that	does  not  exist,  the
		user's	$HOME/.aegisrc	file is	examined for a default project
		field (see aeuconf(5) for more information).  If that does not
		exist, when the	user is	only working on	changes	within a  sin-
		gle  project, the project name defaults	to that	project.  Oth-
		erwise,	it is an error.

	-Read_Only
		This option may	be used	to specify that	the file is to be used
		to insulate the	change from the	baseline.  The user  does  not
		intend	to edit	the file.  These files must be uncopied	before
		development may	end.

	-REScind
		This option may	be used	to rescind  (roll  back)  a  completed
		change.	 The change to rescind (roll back) is specified	in the
		usual way, with	one of the -delta options.

	-TERse
		This  option may be used to cause listings to produce the bare
		minimum	of  information.   It  is  usually  useful  for	 shell
		scripts.

	-TRunk
		This  option  may be used to specify the project trunk for the
		origin file, rather than the baseline.	(See also -BRanch  op-
		tion,  the  -trunk  option  is the same	as the "-branch	-" op-
		tion.)

	-Verbose
		This option may	be used	to cause aegis to produce more output.
		By default aegis only produces output on  errors.   When  used
		with the -List option this option causes column	headings to be
		added.

	-Wait	This  option may be used to require Aegis commands to wait for
		access locks, if they cannot  be  obtained  immediately.   De-
		faults	to  the	 user's	lock_wait_preference if	not specified,
		see aeuconf(5) for more	information.

	-No_Wait
		This option may	be used	to require Aegis commands  to  emit  a
		fatal  error  if  access locks cannot be obtained immediately.
		Defaults to the	user's lock_wait_preference if not  specified,
		see aeuconf(5) for more	information.

	See also aegis(1) for options common to	all aegis commands.

	All  options may be abbreviated; the abbreviation is documented	as the
	upper case letters, all	lower case letters and underscores (_) are op-
	tional.	 You must use consecutive sequences of optional	letters.

	All options are	case insensitive, you may type them in upper  case  or
	lower case or a	combination of both, case is not important.

	For example: the arguments "-project", "-PROJ" and "-p"	are all	inter-
	preted	to  mean the -Project option.  The argument "-prj" will	not be
	understood, because consecutive	optional characters were not supplied.

	Options	and other command line arguments may be	mixed  arbitrarily  on
	the command line, after	the function selectors.

	The  GNU long option names are understood.  Since all option names for
	aegis are long,	this means ignoring the	extra leading '-'.  The	"--op-
	tion=value" convention is also understood.

RECOMMENDED ALIAS
	The recommended	alias for this command is
	csh%	alias aecp 'aegis -cp \!* -v'
	sh$	aecp(){aegis -cp "$@" -v}

ERRORS
	It is an error if the change is	not in the being developed state.
	It is an error if the change is	not assigned to	the current user.
	It is an error if the file is already in the change and	the -OverWrite
	option is not specified.

EXIT STATUS
	The aegis command will exit with a status of  1	 on  any  error.   The
	aegis  command	will  only exit	with a status of 0 if there are	no er-
	rors.

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.

EXAMPLES
	Here are some simple examples.	Remember that most commands are	 rela-
	tive  to  the current directory, even though these examples assume you
	are at the base	of the development directory tree.

   Copy	Whole Project
	To copy	the whole project into your change, use	the command
		aecp .
	The trailing dot is part of the	command, it means "the currect	direc-
	tory  and  everything below it".  This works for any directory in your
	project	source tree, if	you want to be more seledctive.

   Prroduce Earlier Project Version
	You you	wish to	exactly	reproduces the sources for an earlier  version
	of your	project, you need to know the edelta number (use ael proj-his-
	tory to	find it).  Then	use this command:
		aecp -delta n .
	where  n  is  the  delta  number from the project history.  Again, the
	trailing dot is	part of	the command.  By using the $version  substitu-
	tion (see aesub(5) for more information) you can embed this delta num-
	ber into your program before distributing it.

	It  is	also possible to give a	previous change	number,	instead, using
	this command:
		aecp -delta-from-change	n .
	where n	is the change number of	interest.  Again, the trailing dot  is
	part of	the command.

   Rescind a Change
	When you need to rescind (back out) a completed	change,	it will	proba-
	bly  have  been	some time ago, so you need to know the delta number or
	change number.	Use this command:
		aecp -delta n -rescind .
	where n	is the delta number of interest.   All	of  the	 other	-delta
	variantrs also work, so	if you know the	change number, you can be more
	selective about	which files to copy:
		aecp -delta-from-change	n `aegis -l cf -ter -c n`
	where  n is the	change number of interest.  This only copies the files
	which were in the offending change.

SEE ALSO
	aeb(1)	build also takes a baseline read lock (non-exclusive)

	aecpu(1)
		reverse	action of aecp

	aedb(1)	begin development of a change

	aedn(1)	assign a name to a delta

	aeipass(1)
		integrate pass takes a baseline	write lock (exclusive)

	aemv(1)	rename a file as part of a change

	aenf(1)	add a new file to a change

	aerm(1)	add files to be	deleted	to a change

	aeuconf(5)
		user configuration file	format

COPYRIGHT
	aegis version 4.25.D510
	Copyright (C) 1991, 1992, 1993,	1994, 1995, 1996,  1997,  1998,	 1999,
	2000,  2001,  2002,  2003,  2004,  2005, 2006, 2007, 2008, 2009, 2010,
	2011, 2012 Peter Miller

	The aegis program comes	with ABSOLUTELY	NO WARRANTY; for  details  use
	the  'aegis  -VERSion License' command.	 This is free software and you
	are welcome to redistribute it under certain conditions;  for  details
	use the	'aegis -VERSion	License' command.

AUTHOR
	Peter Miller   E-Mail:	 pmiller@opensource.org.au
	/\/\*		  WWW:	 http://miller.emu.id.au/pmiller/

Reference Manual		     Aegis		   aegis -CoPy_file(1)

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

home | help