Read Me(Aegis) Read Me(Aegis)
NAME
aegis - project change supervisor
Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997,
1998, 1999, 2000, 2001, 2002 Peter Miller; All rights
reserved.
Aegis is distributed under the terms of the GNU General
Public License. See the LICENSE section, below, for more
details.
aegis (ee.j.iz) n., a protection, a defense.
DESCRIPTION
Aegis is a CASE tool with a difference. In the spirit of
the UNIX Operating System, Aegis is a small component
designed to work with other programs.
Many CASE systems attempt to provide everything, from
bubble charts to source control to compilers. Users are
trapped with the components supplied by the CASE system,
and if you don't like one of the components (it may be
too limited, for instance), then that is just tough.
In contrast, UNIX provides many components of a CASE
system - compilers, editors, dependency maintenance tools
(such as make), source control tools (such as RCS). You
may substitute the tool of your choice if you don't like
the ones supplied with the system - gcc, jove, cake, to
name just a few. Aegis adds to this list with software
configuration management, and true to UNIX philosophy,
Aegis does not dictate the choice of any of the other
tools (although it may stretch them to their limits).
Enough hype, what is it that Aegis does? Just what is
software configuration management? This question is
sufficiently broad as to require a book in answer. In
essence, Aegis is a project change supervisor. It
provides a framework within which a team of developers
may work on many changes to a program independently, and
Aegis coordinates integrating these changes back into the
master source of the program, with as little disruption
as possible. Resolution of contention for source files,
a major headache for any project with more than one
developer, is one of Aegis' major functions.
It should be noted that Aegis is a developer's tool, in
the same sense as make or RCS are developer's tools. It
is not a manager's tool - it does not provide progress
tracking or manage work allocation.
BENEFITS
So why should you use Aegis?
Aegis uses a particular model of the development of
software projects. This model has a master source (or
baseline) of a project, and a team of developers creating
changes to be made to this baseline. When a change is
complete, it is integrated with the baseline, to become
the new baseline. Each change must be atomic and self-
contained, no change is allowed to cause the baseline to
cease to work. "Working" is defined as passing it's own
tests. The tests are considered part of the baseline.
Aegis provides support for the developer so that an
entire copy of the baseline need not be taken to change a
few files, only those files which are to be changed need
to be copied.
In order to ensure that changes are unable to cause the
baseline to cease to work, Aegis mandates that changes be
accompanied by at least one test, and that all such tests
be known to complete successfully. These steadily
accumulated tests form an ever increasing regression test
suite for all later changes. There is also a mandatory
review stage for each change to the baseline. While
these requirements may be relaxed per-change or even per-
project, doing so potentially compromises the "working"
definition of the baseline.
The win in using Aegis is that there are O(n)
interactions between developers and the baseline.
Contrast this with a master source which is being edited
directly by the developers - there are O(n!)
interactions between developers - this makes adding "just
one more" developer a potential disaster.
Another win is that the project baseline always works.
Always having a working baseline means that a version is
always available for demonstrations, or those "pre-
release snapshots" we are always forced to provide.
The above advantages are all very well - for management
types. Why should Joe Average Programmer use Aegis?
Recall that RCS provides file locking, but only for one
file at a time. Aegis provides the file locking,
atomically, for the set of files in the change. Recall
also that RCS locks the file the instant you start
editing it. This makes popular files a project
bottleneck. Aegis allows concurrent editing, and a
resolution mechanism just before the change must be
integrated, meaning fewer delays for J.A.Programmer.
Aegis also has strong support for geographically
distributed development. It supports both push and pull
models, and many distribution topologies. Aegis' normal
development process is used to validate received change
sets before committing them.
ARCHIVE SITE
The latest version of Aegis is available by HTTP from:
URL: http://www.canb.auug.org.au/~millerp/
File: aegis.html # the Aegis page
File: aegis.4.7.README # Description, from tar file
File: aegis.4.7.lsm # Description, in LSM format
File: aegis.4.7.ae # the complete source, aedist format
File: aegis.4.7.spec # RedHat package specification
File: aegis.4.7.tar.gz # the complete source
This directory also contains a few other pieces of
software written by me. Some are referred to in the
Aegis documentation. Please have a look if you are
interested.
Mirrors
See http://www.canb.auug.org.au/~millerp/ for a list of
mirror sites.
Aegis is also carried by metalab.unc.edu in its Linux
archives. You will be able to find Aegis on any of its
mirrors.
URL: ftp://metalab.unc.edu/pub/Linux/devel/vc/
File: aegis.4.7.README # Description, from tar file
File: aegis.4.7.lsm # Description, in LSM format
File: aegis.4.7.spec # RedHat package specification
File: aegis.4.7.ae # the complete source, aedist format
File: aegis.4.7.tar.gz # the complete source
This site is extensively mirrored around the world, so
look for a copy near you (you will get much better
response).
MAILING LIST
A mailing list has been created so that users of Aegis
may exchange ideas about how to use Aegis. Discussion
may include, but is not limited to: bugs, enhancements,
and applications. The list is not moderated.
The address of the mailing list is
aegis-users@auug.org.au
Please DO NOT attempt to subscribe by sending email to
this address. It is for content only.
How To Subscribe
To subscribe to this mailing list, visit the Aegis-users
mailing list page (http://www.auug.org.au/mailman/-
listinfo/aegis-users) and go through the subscribe
dialogue.
Archive
The mailing list is archived at eGroups. The URL is
http://www.egroups.com/list/aegis-users/info.html
No Files By EMail
The software which handles this mailing list CANNOT send
you a copy of Aegis. Please use FTP or ftp-by-email,
instead.
BUILDING
Instructions on how to build and test Aegis are to be
found in the BUILDING file included in this distribution.
SOME HISTORY
The idea for Aegis did not come full-blown into my head
in the shower, as some of my programs do, but rather from
working in a software shop which used a simplistic form
of something similar. That system was held together by
chewing-gum and string, it was written in a disgusting
variant of Basic, and by golly the damn thing worked
(mostly). Aegis is nothing like it, owes none of its
code to that system, and is far more versatile. It turns
out that the system used is nothing new, and is described
in many SCM textbooks; it is the result of systematically
resolving development issues for large-ish teams.
Since that company decided to close down our section (the
company was under attack by a hostile takeover bid) we
all moved on simultaneously (all 60 of us), sometimes
working together, and sometimes not, but always keeping
in touch. With suggestions and conversations with some
of them early in 1990, the manual entries for Aegis took
shape, and formed most of the design document for Aegis.
Since getting the first glimmerings of a functional Aegis
late in 1990 it is increasingly obvious that I never want
to be without it ever again. All of my sources that I
modify are instantly placed under Aegis, as is anything I
distribute. All code I write for myself, and all new
code I write for my employer, goes under Aegis. Why?
Because it has fewer bugs!
Example: one of the sources I carry with me from job to
job is "cook", my dependency maintenance tool. Cook had
existed for 3 years before Aegis appeared on the scene,
and I used it daily. When I placed cook under Aegis, I
found 6 bugs! Since then I have found a few more. Not
only are there now fewer bugs, but they never come back,
because the regression test suite always grows.
Branching
In 1997 the full branching support was released (it took
nearly 18 months to retro-fit. The underlying data
structures for projects and change sets need to be
merged. While I noticed back in 1990 that they were very
similar, it wasn't until branch support design was well
underways that they should have been the same data
structure from the beginning.
Geographically Distributed Development
In 1999 a conversation on the aegis-users mailing list
resulted in the creation of aedist, a program which
packages and unpackages Aegis changes so they can be sent
by e-mail, or WWW or whatever. With 20:20 hindsight,
this could have been done way back in 1991, because the
basic idea builds on Aegis change process model.
Windows NT
Aegis depends on the underlying security provided by the
operating system (rather than re-invent yet another
security mechanism). However, in order to do this, Aegis
uses the POSIX seteuid system call, which has no direct
equivalent on Windows NT. This makes porting difficult.
Single-user ports are possible (e.g. using Cygwin), but
are not usually what folks want.
Compounding this is the fact that many sites want to
develop their software for both Unix and Windows NT
simultaneously. This means that the security of the
repository needs to be guaranteed to be handled in the
same way by both operating systems, otherwise one can act
as a ``back door'' into the repository. Many sites do
not have the same users and permissions (sourced from the
same network register of users) on both Unix and Windows
NT, making the mapping almost impossible even if the
security models did actually correspond.
Most sites using Aegis and Windows NT together do so by
running Aegis on the Unix systems, but building and
testing on the NT systems. The work areas and repository
are accessed via Samba or NFS.
LICENSE
Aegis 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 2 of the License, or (at your option) any
later version.
Aegis 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, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite
330, Boston, MA 02111, USA.
It should be in the LICENSE file included in this
distribution.
AUTHOR
Peter Miller E-Mail: millerp@canb.auug.org.au
/\/\* WWW: http://www.canb.auug.org.au/~millerp/
RELEASE NOTES
For excruciating detail, and also acknowledgments of
those who generously sent me feedback, please see the
etc/CHANGES.* files included in this distribution.
In general, all the machines on your network need to be
running the same release of Aegis. While the database
format is backwards compatible, it is rarely forwards
compatible in the face of new capabilities.
A number of features have been added to Aegis with this
release. A few of them are detailed here:
Version 4.7
* The aefind(1) command now has -resolve as the default.
To get the previous behaviour, use the -NoResolve option.
* In the aeca -e and aepa -e commands, it is now possible
to quote strings with at-signs (@) instead of double
quotes. This type of string allows newlines within the
string. See aegis(5) for more information.
* For the benefit of Aegis developers, there is now HTML
documentation genaretd by Doxygen (if you have Doxygen
installed). When developing an Aegis change, in your
development directory, point your browser at
doxygen-html/index.html. The common/str.h file is an
example of the style desired, should you wish to
contribute to the effort to get all of the header files
suitably annotated. Also, the removal of the K&R C
support has started, see the files in common/*.[ch] for
examples. Also <varargs.h> is not longer used anywhere.
* The aedist(1) command has two new options, -patch and
-nopatch, which may be used to control how and when
aedist uses patches. See aepatch(1) for more
information.
* A bug has been fixed inthe strncasecmp function. This
only affected you if your system did not have a native
version of this function.
* The aeca(1) command now accepts a -fix-architecture
option. This option may be used to correct the
architecture list of a change automatically.
* The aedist -receive command now runs the aeca -fixarch
command when a change set arrives which modified the
project config file. This should fix many of the
"architecture not in project config file" problems when
seeding new projects.
* Some deficiencies on the ``How to Become a Developer''
instructions have been addressed. The native Aegis build
(but not the Makefile.in) now builds the "tags" and
"TAGS" files so that it easier to navigate the sources.
* There is a new aetar(1) command. It may be used to
send and receive tarballs as Aegis change sets. See
aetar(1) for more information.
* Missing documentation on the aepconf(5) man page about
the fine grained file change notification commands has
been added.
* Some changes have been made to the Aegis web interface,
with more back links. Also uses html2diff(1) if
available.
* It is now possible for reviewers to use the aet(1)
command to run tests against the changes they are
reviewing.
* The command completion for the aet(1) command now works
better; it now completes project test names as well as
change test names.
* The aepatch(1) and aedist(1) commands now cope with a
wider range of input vagueries, including some weird
things done by MTAs and more content transfer encoding
synonyms.
Version 4.6
* The aeipass(1) command now sleeps, rather than issue
the rather alarming ``warning: file modification times
extend into the future'' message. There is a new project
config file field, build_time_adjust, which controls this
behaviour, but it is strongly recommended that you leave
it on the default setting.
* There is a new ${base_relative} substitiontion, almost
the inverse of ${source}. See aesub(5) for more
information.
* A bug has been fixed with the aeca and aepa -edit
option. It was caused by the change in the previous
release which added editor user preferences.
* A few build problems have been fixed.
* A bugs has been fixed in the tkaepa script. It would
sometimes fail the "OK" button.
* A bug has been fixed in the "user changes" list. It
was not explicitly passing the project name when it
accessed the list of user owned changes.
Version 4.5
* It is now possible to set pager and editor preferences
in your
* A bug in aepatch -receive has been fixed, where it
would sometimes misapply a patch. The search used to
determine the patch position (when it needs to be offset)
has been improved.
* The aedist(1) and aepatch(1) commands now accept -delta
and -delta-date options.
* The integrate_q.sh shell script has been replaced by
the aeintegratq(1) Perl script. It can now lots more
useful things. See aeintegratq(1) for more information.
* A bug has been fixed in the date parsing code (used by
the -delta-date option). There was the potential to mis-
calculate dates after February 2000.
* A bug has been fixed in aepatch -receive, where it
sometimes complain of "no uudecode data in file", for
files which did not require uudecoding.
* There are more change-specific substitutions available.
See ${change ...} within aesub(5) for more information.
* The aepatch(1) command now understands ordinary diff
listings, in addition to the context and unified
differences it already understood.
* There is a new aeannotate(1) command, used to produce
annotated source file listings. See aeannotate(1) for
more information.
Version 4.4
* It is now possible to specify system wide user
preferences. See aeuconf(5) for more information.
* The aepatch(1) command now understands the quoted-
printable content transfer encoding.
* The aepatch(1) is more robust when receiving patches
that want to use a change number that has already been
used.
* The Dutch error message translations have been updated.
* There was a problem with the way the install directory
for aegis.cgi was being determined. The aegis.cgi script
is now installed into $bindir by default. There is a
aegis.cgi.i helper script to find your web server's cgi-
bin directory and copy aegis.cgi there, but this is not
done automatically. See aegis.cgi(1) for more
information.
* Another change has been made to cope with still more
Bison changes.
* A French error message translation has been
contributed.
* A problem with aedist -receive has been fixed, where
the new configuration_directory could interact with the
order of file creation.
* A big has been fixed in the uuencode output, which
could occasionally miss the "begin" line.
* A bug has been fiexed in the context diff parsing,
where it would get the last hunk wrong if it was a hunk
which deleted lines, due to incorrect end-of-file
handling. This affected both aepatch -receive and aedist
-receive, because aedist(1) now includes patches for
better merge behaviour.
* Numerous issues concenting the new GNU Gettext versions
have been addressed.
* A number of Solaris build problems have been fixed, and
one genuine bug buried in the warning messages (change
completion time was wrong for changes not yet completed).
* More information about the "mod times extend into the
future" warning issued by aeipass(1) has been added to
the man page.
* Some improvements have been made to the web pages.
Version 4.3
* The notification shell scripts all now use sendmail
consistently. Autoconf support for locating sendmail is
not yet present.
* A problem which caused a core dump on Cygwin has been
fixed.
* The aede(1) command now gives a more informative error
message when files in a branch require merging.
* There is now an interconnection between the aeib(1) and
the aeb(1) command. When you specify a minimum integrate
begin, you also get a minimum integrate build.
* A bug has been fixed which caused aenf(1) to dump core
if you used the file name accept pattern.
* The executability or otherwise of each source file is
now remembered. If any of the execute bits are set at
aede(1) time, the file is remembed as executable. When
an executable file is copied into an integration
directory or development directory, all of the execute
bits (minus the project umask) are set.
* A bug has been fixed in the ``aecp -ind'' command,
where it would give a ``there is no development
directory'' error when you tried to extract a file
version from history of a completed branch.
* Many of the web pages have been updated to provide a
more consistent and intuitive interface. It is also
possible to get patches, via the aepatch command.
* Interrupts are now ignored during database writes.
This should alleviate some of the problems induced by
Ctrl-C. (It would be nice to find the actual cause.)
* The aedist(1) command has been enhanved to include a
patch fragment for modified files, as well as the whole
source files. On receipt, if the patch applies cleanly
the whole source is ignored. If the file does not exist
at the receiving end, or the patch does not apply
cleanly, the whole source file is included. The
incrimental cost is very low, because all of the patch
pieces appear in the source file, and thus compress
exceptionally well. The net result is to greatly reduce
merge costs on recipt of .ae files. However, this change
to aedist(1) is only backwards compatiple. Previous
versions of aedist(1) will give a fatal error if they see
a .ae file generated by this version of aedist(1).
* File name resolution is now more robust in the face of
permission problems.
* Some error message translations have been improved.
* A small bug has been fixed in the history labeling.
* You can now use shell (#) and C++ (//) comments in your
project config file, if you prefer them to C comments.
* A bug has been fixed in the maintenance of the symlink
farm. It would often fail to make all of the necessary
symlinks.
* There is a new project attribute, protect_development_-
directory, which when true causes the development
directory to be read-only in states between awaiting_-
review and being_integrated.
* A problem has been fixed where some reports would fail
is users had made their .aegisrc files unreadable.
* A number of small build problems have been fixed.
* Command completion has been added for the aeb(1),
ae_c(1), aeca(1), aecd(1), aechown(1), aeclean(1),
aecp(1), aecpu(1), aedb(1), aedbu(1), aede(1), aedeu(1),
aedn(1), aeib(1), aeibu(1), aeipass(1), aeifail(1),
aena(1), aencu(1), aend(1), aenf(1), aenfu(1), aeni(1),
aenrv(1), aentu(1), ae_p(1), aepa(1), aera(1), aerb(1),
aerbu(1), aerd(1), aerfail(1), aeri(1), aerm(1),
aermu(1), aerpass(1), aerpu(1), aerrv(1) and aet(1)
commands. More will be added in the future.
* It is now possible to specify a directory to contain
project config file fragments. These fragments are then
read in as if catenated as a single project config file.
See aepfonf(5) for more information.
Version 4.2
* There is a new ``--No-Page-Headers'' option which may
be used to suppress page and column headers in listings
and reports.
* There is a new ``aecp -delta-from-change'' option,
allowing the specification of a delta number by
specifying the number of a completed change.
* The ``aecp -ind -delta'' command now omits files which
did not exist at the given delta.
* There is a new history_label_command which may be used
to label your history files at each integration. See
aepconf(5) for more information.
* The code which guesses which change you are working on,
based on your current directory, has been enhanced to
cover far more cases. It can recognize the integration
directory, too.
* There is a new Change_Log report, which generates
reports in the style of common Internet change logs.
* The web interface is now able to show you file
differences between deltas.
* A bug has been fixed in the ``aecp -delta'' command
(for all delta variants). The problem occurred when you
wanted to copy a version of the file before the file has
been modified by the branch (but it wasonly a problem for
files modified later in the branch, files never modified
by the branch were OK). As a side-effect of the bug fix,
``aecp -delta'' now goes significantly faster (N times
faster, where N is the number of files you are copying).
* Build problems caused by new Bison releases have been
fixed.
* A number of oversights in handling the new awaiting
review state have been corrected.
* The ${expr} substitution has been enhanced to include
modulo, logical not and the six relative operators. All
using the usual C syntax and precedences. See aesub(5)
for more information.
* There is a new ${switch} substitution, see aesub(5) for
more information.
* A Russian localization of the error messages has been
contributed.
* A bug has been fixed in the ``aecp -output'' code,
which sometimes incorrectly created directories.
* A bug has been fixed in the symbolic link maintenance
code. It now repairs links which point to a file which
is too deep in the ancestor tree, and has been
subsequently replaced. It now uses a single pass, rather
than two passes.
* The change_file_command field of the project config
file is now available at a finer granularity. There are
8 new commands (the copy_file_command, copy_file_undo_-
command, new_file_command, new_file_undo_command, new_-
test_command, new_test_undo_command, remove_file_command
and remove_file_undo_command fields) which may be
individually configured. They default to the previous
behaviour, for backwards compatibility. See aepconf(5)
for more information.
* A bug has been fixed in the aepatch(1) command, which
prevented it form constructing patches for changes on
completed branches.
* The aeipass(1) command now issues an error message if
the build changes a source file. (Previously it
erroneously reported that the history tool had done the
damage.)
* A bug has been fixed in ``aecpu -unchanged'' in the
case where the change had no files. (It tried to uncopy
a file called the empty thring.)
* The missing aemvu(1) man page has been added.
Version 4.1
Note: You will need to upgrade all of your Aegis machines
simultaneously for this release. It introduces database
changes which older Aegis release will not be able to
cope with.
* A bug has been fixed in aed(1), which tried to access a
nonexistent files under some circumstances.
* A bug has been fixed in aede. When two changes created
the same file, the second change received a misleading
message from aede.
* There is a new German message translation.
* There is a new tkaepa(1) command, giving GUI access to
the aepa(1) command.
* The aeclone(1) command now runs the change_file_command
and project_file_command from the project config file.
This is in order to be more consistent withthe aecp(1)
command.
* The "time safe" property described by Damon Poole
mostly applies to Aegis' operation. One last area
related to future times and the --delta options. There
is now a warning in the instance where non-time-safe
behavior may occur.
* The history_put_command and history_create_command
field of the project config file are strongly recommended
to be identical. It is now possible to only specify the
first one, and the second will default to it.
* A bug has been fixed in the aeib(1) command, when the
link_integration_directory field in the project config
file is false.
* There is a new awaiting review state, and new aerb(1)
and aerbu(1) commands to go with it. It is now possible
to configure your project to have changes enter the
awaiting review state after aede(1), rather than the
being reviewed state. It is also possible to skip the
review states altogether and immediatelt enter the
awaiting integration state.
* There is a new modeP field for the specification of
architectures in the project config file. The means that
you can designate some architectures as mandatory and
some as optional. See aepconf(5) for more information.
* The aenbr(1) command now populates the new branch's
baseline with symlinks if the project config file is set
so that they would remain after an integration build.
This is more consistent with the aedb(1) behaviour in the
same situation.
* There have been a number of changes to the web pages,
accompanying the move to SourceForge, along with some
corrections.
* There is a new aels(1) command, which may be used to
list directories, annotated with Aegis' file attribute
information.
* The aeclean(1) command now accepts the -Keep option, so
that it reports what it would do, rather than actually do
anything.
* A problem with the CGI interface, which reported a bug
to the user, has been fixed.
Version 3.29
* The aeimport(1) command can now import CVS repositories
which contain binary files.
* There is a new ${Read_File_Simple} substritution. It
is like ${Read_File}, but is does not substitute into the
file contents.
* The aecp -independent command now accepts a -output
option.
* There is a new ${environment} substitution, allowing
you to access environment variables within substitutions.
See aesub(5) for more information.
* There is a new ${project-specific} substitution,
allowing you to define project specific value to be
inserted into various commands. See aesub(5) and
aepconf(5) for more information.
* The aefind(1) command now works with completed change.
It searches the baseline.
* A problem with using the ${source} substitution within
the integrate_pass_notify_command has been fixed. It was
getting the path wrong.
* The batch test command is only ever invoked of there
are tests to run. (This fixes a problem where it would
simethimes run with no arguments.)
* The web reports now bahave themselves when the names of
non-longer-here user appear.
* A number of errors and typos have been fixed in the
documentation.
Version 3.28
* There is a new aepatch(1) program, which may be used to
send an receive changes using the classic open source
patch format. See aepatch(1) for more information.
* The general output mechanism (for listings and reports)
has been rewritten to be significantly faster.
* Numerous small things have been improved in and around
the
* The web interface has been improved. It should result
in better save file locations being suggested for .ae
files. cgi vs downloads
* Aegis now takes a baseline read lock during tests, so
that the baseline doesn't move out from under your tests,
causing mysterious failures.
* A bug has been fixed in the subst function of the
report generator. It was free()in a string twice.
* There is a new ${developer email} substitution, for
inserting users' preferred email addresses into commands.
Useful for the state transition notification commands.
* There is now more text in the aepconf(5) man page,
explaining how each of the pattern fields are applied to
file names. It is now explicit when patterns applied to
whole file names, and when they only applied to path name
elements.
* A segfault has been fixed in the removed file whiteout
code.
* The aesub $source substitution now works in combination
with the -BaseLine option.
* The aegis.spec file now mentions the executables again.
Version 3.27
* A bug has been fixed in the aesub(1) $delta
substitution. It now works correctly for completed
changes.
* A bug has been fixed in aermu(1), when used in
combination with the symlink farm. It no longer
complains about "multiple user permissions set".
* A serious bug has been fixed in the locking code. The
bug meant that only one build per project could happen at
a time. (There was never any risk of repository or Aegis
database damage.)
* A bug has been fixed in the aedist(1) command. It
failed to correctly recognise files produced using the
aedist -send -no-ascii-armour option.
* The aecpu -unch command now deals more gracefully with
files which have been removed from the project in the
mean time.
* There is a new change file history listing, similar to
the file history report. It is much faster, much more
informatuve, and less selective.
Version 3.26
* Some optimizations have been done to the input parsing.
Depending on your architecture, this will or won't be
noticable.
* The locking has been changed so that aeipass(1) takes
precedence over new development builds, so that there is
a guarantee that aeipass(1) will succeed in finite time.
Current development builds will run to completion, but
new development builds will block until the aeipass(1)
gets the basline lock and subsequently completes.
* The "file format error" bug in aedist(1) has been
fixed.
* There is a new project activity report, which is useful
to project leaders to see what has been happing in the
project, sorted by time and then by user name.
* Aegis can now transparently cope with binary files,
even if the history tool cannot. It does this by using a
MIME encoding for binary files. (This can be configured
away, if your history tool correctly handles binary
files.) See aepconf(5) and the User Guide for more
information.
* There is a fix for the "file unrelated" error commonly
seen on Solaris and BSD when combined with an
automounter, in come cases. It relies on the bash(1)
behaviour which sets the $PWD environment variable. (GNU
libc does this internally to the getcwd(3) function, not
all libcs do.)
* The aer(1) report generator now has access to the
project config file fields, through a new config field in
the report generator's concept of the project state.
* There is a new aer(1) $comdir substitution, which gives
access to the shared state directory, configured at build
time.
* The aebuffy(1) now accepts a project name on the
command line.
* There is a new build_covers_all_architectures field in
the project config file, so that you can tell Aegis that
the build tool builds all architectures wimultaneouasly.
See aepconf(5) for more information.
* The tkaer(1) command now has a comment editor, so that
you can edit your review fail comments from within the
GUI.
* A bug has been fixed which was caused aenbru(1) to
delete one directory level too deep when the branch was
removed.
* There is a new getuid() function in the report
generator.
* This change fixed a bug in aede(1) where it would not
allow a branch, created with aeimport(1), with new files
which had subsequently been modified to end development,
when those files had never existed in the baseline.
* It is now possible for project administrators to
nominate the developer in the tkaenc(1) dialog. You are
presented with a pick list.
* There is a new aesub(1) $history_directory
substitution. This may be used in scripts which access
the history tool's files directly.
* There is a new change_file_undo_command field of the
project config file. It is similar to the change_file_-
command field (it defaults to it if unset), but is
executed by all of the ``undo'' file commands.
* The aede(1) command no longer cancels your build and
test time stamps. This means that you don't need to re-
build if you don't change anything, after aedeu(1) or
aerfail(1).
Version 3.25
* It is now possible to remove users who's accounts have
been removed (the affects the aera(1), aerd(1), aeri(1)
and aerrv(1) commands).
* There is a new --description-only option to the aeca(1)
command. This is useful for editing only the
descrioption, and also for use within scripts.
* The --file option has now been generalized to accept
``-'' to mean the standard input. This is useful in
scripts.
* There is a new aebuffy(1) command, which may be used to
see what changes a user has outstanding. It needs X11
(Tk/Tcl) to work. Named after the xbuffy(1) command.
* The tkaer(1) command now presents you with a ``detail''
button, so that you may see the change details when
pwerforming a review.
* The restriction that placed the function name at the
start of the command line (e.g. the ``-cp'' of aecp) has
been relaxed. This may now appear anywhere on the
command line.
* The Bourne / BASH shell aliases have been improved, so
that they now preserve quoting of special characters and
white space. This dates from the earliest days of Aegis.
It's wonderful to have it fixed at last.
* There is a new aemvu(1) command, which may be used to
undo the effects of an aemv(1) command. This should
prove less confusing than the previous method.
* A big has been fixed in the aemv(1) command. It failed
to accept the --base-relative option, even though it was
documented to do so.
* A bug has been fixed in the quote_tcl() report
function. Is fixes the problem with getting the dollars
sign into descriptions when using the tkaenc(1) command.
* The SCCS section of the User Guide and example
configurations have been updated and confirmed to work
correctly, however I've only tested this with GNU CSSC.
* A bug in the file name handling has been fixed. This
was most obvious around the aecpu(1) command when you had
create_symlinks_before_build turned on and you were using
an automounter, but it occured at other times as well.
* The aeimport(1) command now understands the SCCS
format. If the comments in GNU CSSC are accurate, this
also means you can import BitKeeper repositories, however
I am unable to confirm this.
Version 3.24
* There is a new aeimport(1) command, which may be used
to import CVS archives into Aegis.
* The cross branch merge has been improved so that it
uses an earlier version number than it was using,
resulting in a more sensable merge.
* A bug has been fixed in the ${quote} substitution which
incorrectly quoted the exclamation mark (!).
Unfortunately, quoting isn't at all simple, because you
can't exclusively use single quotes or double quotes or
backslash.
* There is now a ${change description} substitution,
allowing you access to the brief description of a change
in a substitution. (The suggested RCS history command
have been changed to use it.)
* A Dutch localization of the error messages has been
contributed.
* Project administrators can also use the aeibu(1)
command. Handy for abandoned integrations which
inconvenience everyone else.
* There is a new project config file field, called
build_covers_all_architectures, which allows you to tell
Aegis that your build process can cover all architectures
simultaneously.
* The ${quote} substitution has been fixed to correctly
quote more characters. It now prefers the single quote
(but is is npt possible to use this exclusively).
* The web site now uses PDF files for documentation,
rather than gzipped PostScript. This was for lots of
reasons, including the fact theat many folks couldn't
work out how to print them, and also IE decompressed them
``for free'' but left the .gz suffix.
* The report generator, aereport(1), can now access
fields of the email address in various reports. * The
``aecp -delta'' command now adds removed files to the
change as removed files instead of adding them as copied-
but-empty files. This should make reproducing projects
more accurate, but you need to use aermu(1) to get rid of
them ,rather than aecpu(1).
* The aedist program now adds a ``Content-Disposition''
header to the files it generates. This means MIME
programs will unpack it into a correctly named file more
often.
Numerous build problems have been fixed, both for Unix
and for Cygwin (Windows). There have benn some test
script improvements, too.
Contributions have started to roll in using the
``aedist'' format. This is very encouraging. The
instructions for how to do this are contained in the
``Howto'', in the Developer section.
Version 3.23
* A bug has been fixed which caused the report generator
change_number function to give garbage answers for change
number zero (fortunalely, not very common).
* There is a new mtime function in the report generator.
* There is a new aecomp utility, which may be used to
compare two active changes, using tkdiff.
* A bug in ``aesub ${dd}'' which reported the wrong
directory when applied to branches, has been fixed.
* The project config file now contains two new fields,
create_symlinks_before_integration_build and remove_-
symlinks_after_integration_build, which may be used to
better control the behavior of the symlink farm at
integration time. (Default behavior is backwards
compatible.)
* A new utility called tkaer has been contributed. It is
for reviewing, and shows you lists of files. When you
click on one, it launches tkdiff(1) to examine it.
You're going to like this one, folks!
* The aedist -receive command now preserves the testing
exemptions, if possible.
* A problem with very very large test runs and the --no-
persevere option has been fixed.
* The aenf(1) and aent(1) commands now accept --template
and --no-template options, to control the use of new file
templates.
* A nasty Catch-22 in the aedist(1) command has been
fixed, involving the (unnecessary) use of new file
templates, when the actual template files don't yet exist
in the --receive development directory.
Version 3.22
* Please Note: Some code has been added to Aegis to
assist in diagnosing problems when restoring projects
from backups. If you see a message ``aegis: project-
path: has been tampered with (fatal)'' this means there
are problems with the project file ownerships. The
project owner needs to be >= AEGIS_UID (defaults to 100),
and the project group needs to be >= AEGIS_GID (defaults
to 10). Use chown -R and/or chgrp -R to fix these
problems.
* The aesub(1) command now accepts the ${arch}
substitution in combination with the -baseline option.
* A bugs has been fixed in the aedist -receive command,
when one of the files was also locked for review.
* A bug in aeclone(1) has been fixed, where it dropped
file move information.
* The aeib(1) command now correctly validates that youare
actually allowed to do this integration. This may win
the prize for the oldest Aegis bug.
* There is a new ${search_path_executable} substitution.
See aesub(5) and aet(1) for more information.
* Line wrapping in reports works properly again for lines
with no white space. The previous release broke it when
the wide output generalization was added.
* The aet -nopersever option works again. The previous
release broke it when the batch test support has
implemented.
* A problem with the aeb(1) command which made it
difficult to use with th symbolic link farm (in some
cases) has been fixed.
* A new report is available from the web interface,
showing a change-of-state histogram over time for all
state transitions (not just the integrate pass
transitions).
* A problem with the aenf(1) command which made it
difficult to use with th symbolic link farm (in some
cases) has been fixed.
* The aeipass(1) command now preserve file mod times
across history updates, if the history tool gratuitously
changes them.
* The Solaris and IRIX build problems (wputc, et al) has
been fixed.
* Numerous documentation patches were received and have
been applied.
Version 3.21
* A couple of minor bugs have been fixed in aedist,
especially the problem with sending an baseline image
while a change is being reviewed.
* A couple of bugs have been fixed in the tkae* commands,
in partucular they no longer leave temporary files lying
around.
* Lots of stuff has been added to the HOWTO: a cheat
sheet, how to change a project's owner, how to use
distributed development, how to become a developer.
* The problem which caused `aesub ${copyright_years}' to
contain duplicates has been fixed.
* There have been Y2K fixes: the date parsing for the
-delta-date option has been fixed, and the web page data
has also been fixed.
* The aet(1) command can now run more than one test at
once, if configured appropriately. This is of most use
on systems with more than one CPU.
* The -UNFormatted option no longer truncates column
values.
* The aesub(1) command now accepts the -baseline option,
so that you can get project-specific substitution in
shell scripts.
* A bug has been fixed in tkaenc(1) which gave incorrect
testing ssttings. It now also tracks the project testing
exemptions.
* A bug in aenf(1) has been fixed which allowed multiple
instances of the same file to be created.
* A bug has been fixed which caused `aesub
${search_path}' to fail in some cases.
* A bug has been fixed in aenf(1) which allowed you to
create the same file multiple times, corrupting Aegis'
database and causing aede(1) to report mysterious errors.
Use aenfu(1) multiple times to untangle things.
* Information has been added to the section 5 manual
pages, detailing how to access state information from
within the report generator. This should make writing
report scripts a little easier.
* A bug has been fixed which caused Aegis to misbehave
when launched by some versions of cron(8) or at(1).
Version 3.20
* The aeib command is now more robust about ``foreign''
files in the baseline (e.g. root-owned core files).
* A bug has been fixed in the ${administrator_list}
substitution.
* A bug has been fixed in the aedist --delta option,
which caused it to dump core.
* There is now a section in the History Tool chapter of
the User Guide describing how to add checksums to your
history files, in order to detect file corruptions. It
is a general technique which applies to most history
tools (including RCS).
* A bug has been fixed which caused aeclone to misbehave
badly when dealing with removed files.
* There is now an embryonic ``How To'' document for
Aegis. Please feel free to contribute subjects.
* You can now say ``-BRanch -'' as a synonym for the
``-TRunk option, for those commands which accept it.
* The report generator now copes with more types of empty
lists.
* A bug has been fixed which caused a core dump instead
of a useful error message if you tried to create an alias
with an illegal name.
* A bug has been removed which left undeletable branch
aliases if a branch was removed.
* A bug has been fixed in aenbru which failed to remove
the branch development directory .
* The aenf(1) command now behaves better when you do
horrible things like turn the files you created into
directories without telling Aegis first.
* A couple of small bugs have been fixed in the aenpa(1)
command, both in error situations.
* A bug with the -interactive option has been fixed. It
will actually ask you, now.
Version 3.19
* You can now run a command to generate new file
templates if you want, rather than using a simple string
substitution. See aenf(1), aent(1) and aepconf(5) for
more information. The existing functionality is still
there.
* There is a new ${SUBSTitute} substitution, which
provides regular expression substitutions. This is
useful in new file templates.
* A bug has been fixed which allowed aede of a branch
when there were some kinds of outstanding changes.
* The automatic change number guessing has been improved
slightly, and will cope with some more variation in the
development_directory_template field.
* There are two new commands, aenpa(1) and aerpa(1) for
creating and removing project aliases. This means that
you can give project branches more meaningful names.
* There is a new aesub(1) command. It substitutes its
arguments and prints them, rather like the echo(1)
command. This is useful when you need access to the
Aegis substitutions in a script.
* The command line option ``--'' is now understood. It
means ``the rest of the arguments on the command line are
filenames or strings''. Because this makes the options
on the command line more "order sensitive" than usual,
use with care.
* There is a new tkaenc(1) command, allowing you to
create new change via a Tcl/Tk GUI. (And a problem with
TCL special characters in description text has been
fixed.)
* The aenf(1) command now does the right thing with
directories named on the command line. In particular,
you can now use ``aenf .'' to import whole directory
trees.
* There is a new State-File-Name list type, useful when
writing cookbooks or makefiles to keep a web page in sync
with a change.
* There is a new ${capitalize} substitution, useful for
putting in new file templates.
* A bug has been fixed which caused aeclean to delete the
development directory of changes with no files.
Version 3.18
* A bug has been fixed which caused aecp -delta to dump
core in some cases.
* A bug has been fixed which caused the create-symlinks-
before-build functionality to create symlinks to deleted
files.
* Still more typos and minor errors have been corrected
in the documentation.
* The aerp(1) man page has been moved to aerpass(1).
Similarly for aerfail(1), aeipass(1) and aeifail(1).
This should make things easier for users to find the man
pages.
Version 3.17
* Another aedist bug has been fixed - unfortunately it
was introduced while trying to fix the last one.
* A Cygwin 20.1 portability bug has been fixed.
* There is a new ${dirname_relative} substitution. This
is useful in new file templates, and also some configured
commands.
Version 3.16
* There is a new tkaeca command. It is a GUI interface
to the aeca(1) command, using Tcl/Tk.
* There are two new reports available: the Project-
Branches and Project-Active-Branches reports may be used
to query about branches within a project.
* A bug has been fixed in the aedist -receive duplicate
suppression code. It was complaining about user
permissions.
* A bug has been fixed in aeb(1), which did strange
things if you tried to build an unbuildable change.
* There is a new -No-WhiteOut option for the aerm(1) and
aemv(1) commands, letting you suppress the ``whiteout''
files, along with some explanation in the man page about
why they are there. See aerm(1) for more information.
* The default value of the ``maximum_filename_length''
field of the project config file has been raised from 14
to 255. If your project depends on the old default
value, you will need to set it explicitly.
* The aedist -receive command now accepts a -directory
option, so you can specifiy the location of the
development directory.
Version 3.15
* The ``aedist -receive'' command now accepts a -delta
option, allowing a received change set to be applied to
an historical version.
* There is now some information about managing super-
projects and sub-projects in the Branching chapter of the
User Guide.
* The aenpr(1) command now accepts a -keep option, so
that you can re-attach projects moved after using the
aermpr -keep command. See aenpr(1) for more information.
* The aenpr(1) command now accepts -edit and -file
options, allowing you to specify project attributes when
creating the project. See aenpr(1) for more information.
* If the project developers_may_create_changes attribute
is true, the aencu(1) command now allows developers to
destroy changes they created.
* There is a new add_path_suffix substitution, for
manipulating search paths. See aesub(5) for more
information.
* There are 3 new substitutions: ${bindir}, ${datadir}
and ${libdir}. These are replaced by the ./configure
options of the same name (or the values calculated, if
none were given to ./configure). The old ${lib}
substitution is deprecated in favour of the new
${datadir} substitution. See aesub(5) for more
information.
* Some changes have been made which increases
portability, particularly the Linux libc5 vs libc6
differences.
* Some changes have been made which increases
portability, particularly for Windows NT. This isn't to
say Aegis works under Windows NT yet, but it helps the
porting efforts. Don't forget to run the mkpasswd and
mkgroup utilities included in the Cygwin system.
Version 3.12
* The way the Apache config files are scanned for and
read has been changed, to adapt to recent Apache changes.
The ./configure script will now find it more often.
* The ``aedist -receive'' command has been enhanced to be
more robust about change sets without headers (some
browsers generously strip them all off.
* A bug has been fixed in the ``aedist -receive'' command
which sometimes caused decompression failures. An
unfortunate interaction with the Windows NT support
caused CRLF sequences in the compressed data to be
mangled in some cases.
* The wrong include file was being used for zlib. This
has been fixed, so it should build more easily now.
* The way MANPATH is handled on Linux has been improved
in the chsrc and profile commands. It will not over-ride
/etc/man.config now.
* The aegis.cgi script has been made more robust in
coping with aedist errors.
* The symlink_exception field of the project config file
now accepts filename patterns, not simply literal
filenames.
* There was a problem compiling with gcc 2.8, involving
the <stdarg.h> header. This has been fixed.
Version 3.11
* The aet(1) command now accepts a --force option,
forcing tests to be run, even if Aegis doesn't think they
need to.
* The Aegis CGI interface has been enhanced so that you
can download changes from the generated web pages listing
the changes, using the aedist command.
* The aedist --send command now accepts a --no-ascii-
armor option, which leaves off the MIME base 64 encoding.
Useful for binary distributions and web servers.
* There is a new trojan_horse_suspect field in the
project config file. This is used by aedist --receive to
check for files which could be abused to carry Trojan
horse attacks.
* The aedist --receive command now accepts a --trojan
option which treats the incoming change set as suspect,
and a --no-trojan option which treats the incoming change
set as benign.
* The aedist --receive command now quotes filenames (if
necessary) when executing commands, thus defending
against filenames which contain semicolons.
* The aenbru(1) command has been implemented at last. At
last! You no longer need to use the aedbu work-around.
* The aedbu(1) command now gives an error if you attempt
to apply it to a branch.
* The aermpr(1) command may now be applied to a project
with active branches, and will remove the branches as
well (provided there are no active changes on any of the
branches).
* The dos_filename_required and windows_filename_required
fields of the project config file have been enhanced to
reject the brain-dead Windows special filenames such as
``aux'' et al.
* The ${user} and ${project} substitutions have been
enhanced to provide additional information when given an
additional argument. Useful for file templates. See
aesub(5) for more information.
* Several portability enhacements, notably the Windows
filename incompatibility has been fixed, and also the
Linux stdlib.h problem.
Version 3.10
* As of this release you must have zlib installed before
you can build Aegis.
* There is a new reuse_change_numbers project attribute,
letting you control whether aenc fills in holes in the
change number sequence. Defaults to true if not set.
See aepattr(5) for more information.
* There is a new integrate_begin_exceptions field in the
project config file. This permits the user to specify
file to be omitted when the integration directory
copy/link is performed.
* The aet(1) command has been changed so that it does not
exit with an error if you have a test exemption but no
tests. This is no longer an error.
* There is a new aedist(1) command, which may be used to
send and receive Aegis change sets via e-mail and the
web.
* The aeclone(1), aenbr(1), aenc(1) commands now accept a
-output option, a file to contain the automatically
generated change number. This greatly assists in writing
scripts. See the man pages for more information.
* The aent(1) command now accepts a -output option, a
file to contain the automatically generated file name.
See the man pages for more information.
* There is a new compres_database field in the project
attributes, allowing the Aegis database to be stored in a
compressed form (using the GNU Zip algorthm). Unless you
have an exceptionally large project, coupled with fast
CPUs and high network latency, there is probably very
little benefit in using this feature. (The database is
usually less than 5% of the size of the repository.) On
slow networks, however, this can sometimes improve the
preformance of file-related commands.
Version 3.9
* A bug in the merge command has been fixed. It no
longer deletes all of your change source files if one of
the merge commands fails.
* There is a new tkaegis command, using Tk/Tcl to give
Aegis a GUI. Contributed by Graham Wheeler
<gram@cdsec.com>. Please report tkaegis bugs and
suggestions to Graham.
* The integrate pass command has been enhanced to cope
with RCS and SCCS expanding keywords in source files
(modifying the repository) on check-in. This can be
ignored, or a warning can be issued, or it can be a fatal
error (this is the default). See aeipass(1) for more
information.
* The worked example in the User Guide has (finally!)
been updated to use the new branch numbering. Numerous
spelling errors have been corrected.
* The developer section of the worked example chapter now
also includes discussion of some common questions raised
by folks evaluating Aegis. It covers insulating
development directories from the baseline, partial check-
in and collaboration.
* The aesub(5) man page now brings attention to the fact
that the ${Copyright_Years} substitution contains spaces.
You often need to quote it.
* The man pages which mention filename limitations, now
also note that where underlying file-system has stricter
filename length limitations than the filename_maximum_-
length field in the project config file, the file-system
wins. Mention of this is now also present in aedb(1),
etc; Linux UMSDOS is highlighted as problematic.
* Aegis can now collect code metrics. See aeb(1) and
aeipass(1) for more information.
* There are three new report functions available:
quote_url, quote_html and unquote_url. These are all for
use when creating Aegis reports for the CGI interface.
See aer(5) for more information.
* There are several new substitutions available. These
include subst, trim_extension, trim_directory, and
trim_filename. See aesub(5) for more information.
* The integrate_q.sh script now works correctly for
branches.
* Numerous configure, make and install problems have been
fixed for a variety of portability targets.
* The RPM spec file has been corrected to use appropriate
file attributes.
Version 3.8
* Some users were unable to build the previous release,
due to inconsistent wide character support by the various
UNIX vendors. This has now been fixed.
* There are two new substitutions, trim_directory and
trim_extension, which are useful for constructing file
templates. These can be very useful in constructing
skeletons of C++ classes.
* Some changes have been made to pathname handling to
better cope with automounters. See aegis(1) for more
information (see discussion of the AEGIS_AUTOMOUNT_POINTS
environment variable). This assumes that paths below the
automounter's mount directory are echoes of paths without
it (e.g. /home is the trigger, and /tmp_mnt/home is where
the NFS mount is performed, with /home appearing to be a
symlink).
Version 3.7
* The aeifail(1) and aerfail(1) commands now have a new
--reason option, to specify the failure reason on the
command line, rather than in a file.
* Some file operations are now faster. Mostly, this
applies to operations which mention many files, and to
projects with large numbers of files. Smaller projects
may not notice any improvement.
* There is a new --delta-date option to the aecp(1)
command, allowing deltas to be extracted by date. This
change also had the side-effect of making extraction by
delta number more accurate on branches.
* There is a new --base-relative option to most of the
file manipulation commands, aecp(1), aenf(1), etc. This
option may be used to specify that relative filenames are
relative to the base of the source tree, rather than the
current directory. There is also a related user
preference, see aeuconf(5) for more information.
* There is a new ``aeclean'' command. It can be used to
clean your development directories of non-source files.
See aeclean(1) for more information.
* The aeb(1) command now passes through arguments of the
form name=value, on the assumption that these are
variable assignments for th ebuild tool. Previously,
they were ``resolved'' as if they were file names.
* A serious bug in the error and interrupt handling has
been fixed. This bug would sometimes case Aegis to hang,
and eventually run out of stack, when the user attempted
to interrupt Aegis using ^C.
Version 3.6
* The diff3_command field of the project config file has
been replaced by a merge_command field. It works exactly
the same way, but Aegis moves the files around first, so
that the output replaces the change source file. This
results in fewer ``lost'' merges. Those of you who have
been hacking the diff3_command to move the files around
will need to take the moves out when you rename the
diff3_command field to be the new merge_command field.
* The columnizing functions used by the report generator
and the listings has been enhanced to understand
international character sets. This allows native
character sets to be used in comments and descriptions,
without getting gibberish (C escapes) in the output.
* There is a new shell_safe_filenames field in the
project config file. This field controls whether
filenames are required to be free of shell special
characters. This field defaults to true if not set, so
if you are using any ``interesting'' filenames, you may
need to explicitly set this field to false. (You still
can't use spaces or international characters in
filenames.)
* There is a new ${quote} substitution for insulating
shell special characters in filenames in the commands in
the project config file.
* A number of bugs relating to environment variables have
been corrected; this will make the aereport and aefind
commands behave more consistently, with respect to the
aegis command.
* A bug has been fixed which caused the final newline of
new test files to be omitted.
* A bug which prevented the ``aeb -minimum'' option from
working in any non-trivial case has been fixed.
Version 3.5
* A bug was fixed in the lock waiting code. Aegis will
now correctly wait for locks when there are several users
blocking on the same lock.
Version 3.4
* There is a new ``aegis -clone'' command, used to
replicate changes across branches. See aeclone(1) for
more information.
* There is a new ``-No-Wait'' command line option, which
asks for a fatal error if a lock cannot be obtained
immediately; this applies to all commands which takes
locks. See aeuconf(5) for more information.
Version 3.3
This release is a bug fix release, and mostly install and
portability bug, at that.
* The problem with errno defines messing up glue.c has
been fixed.
* Numerous fixes to the wide character support, to cope
with the vagueries of wide character support on many
platforms.
* The problem with the LINES and COLS environment
variables messing up testing have been fixed. Some tests
gave false negatives because of this.
* There is a new aeb -minimum option, for use with
symbolic links, only, which has a minimal set of source
file links, rather than everything in the baseline.
Version 3.2
* There are some additional reports available via the web
interface. They are mainly to extract error causes and
trends from the project history statistics.
* There have been a number of minor bug fixes concerning
the handling of old 2.3 projects. This should ease
transition for users with existing 2.3 projects.
* A bug in aecp -delta has been fixed, where Aegis was
trying to find change state files one branch level too
high.
* There is now a re-try performed when a stale NFS file
handle error is detected. This should make it easier for
some sites which are heavily networked.
* There have been some improvements to the way Control-C
is handled. It should be more responsive when waiting
for locks.
* Project administrators may now end development of a
branch. Since branches can endure for months or years,
the orginal branch creator may have moved on. This copes
with this situation.
Version 3.1
Version 3.0 was not used by many sites. It was available
as beta software for about a year, in numerous
incarnations. Version 3.1 is the first completely stable
version since adding full branching support.
Version 3.0
Version 3.0 is fully backwards compatible with earlier
versions, however once a project has been used under 3.0,
it will not be possible to revert, e.g. to version 2.3,
without restoring the project's ``info'' directory from
backup. While this was generally true of previous
releases, any additional state information was usually
undo-able with vi(1). This time the process is much more
involved because the project state files and the change
state files have been combined as a necessary step in
implementing branches.
Version 3.0 Major New Features
* Aegis now has a feature known in the literature as long
transactions, also known as branches. This allows
appropriately created changes to be treated as if they
were projects, and thus to have changes made to them.
This allows a hierachy of changes within changes, to any
desired depth. See the Branching chapter of the Aegis
User Guide for more information.
* The project state files have been merged with the
change state files. This is part of the implementation
of branching. If you have written your own reports, you
may need to alter them slightly. For example, in version
2.3 and earlier, reports accessed the project state file
using
auto p, ps;
p = project[project_name()];
ps = p.state;
Because the project state has been moved into a change
state, the state field above now points at a change state
description, and most of the old project information is
contained in the branch field within it. Reports access
this information as
auto p, ps;
p = project[project_name()];
ps = p.state.branch;
Except for files, which were already present in the
cstate, so access to the project file list need not
change. See the new aecstate(5) for more information.
* The new project command now creates branches to match
the version number specified. See aenpr(1) for more
information.
* The error messages of Aegis have been
internationalized. This affects how you build Aegis, and
the environment Aegis runs in. See the BUILDING file for
more information. The cshrc and profile shipped with
this release set the LANG environment variable to ``en''
(for English) if you have not set it; otherwise ther
error messages would be terse and uninformative.
* The aet (1) command can now suggest tests to be run.
This is done by correlating the source files and test
files from each change. See aet(1) for more information.
* There is now an aereport(1) command. The separates out
the report functionality from the main body of the Aegis
code, allowing the report generator to be used in places
where more trust is required.
* There is an intranet Web interface, which is installed
automaticly when the install script discovers a web
server. This interface allows browsing of much of the
Aegis meta-data, of all publicly accessible projects.
* There is now an aefind(1) command. This is very
similar to the UNIX find(1) command, except that it finds
in the unified directory stack of a change and its
project. The introduction of full branch support can
sometimes mean that finding a file may require looking in
more than two directories; the aefind(1) command makes
this simple again.
Version 3.0 Minor New Features
* There is now a -No_Pager option, to prevent listings
and help from being redirected to a pager. There is also
a user preference to more thoroughly disable paging, and
a -PAGer option to override it. See aegis(1) and
aeuconf(5) for more information.
* There is now a -No_PErsevere option to aet(1), allowing
you to request that aet(1) stop after the first test
failure. There is also a user preference to set this
permanently if desired, and a -PErsever option to
override it. See aet(1) and aeuconf(5) for more
information.
* The copyright years attribute has been moved from being
a project attribute to a change attribute. This is
consistent with a number of other fields which have
transparently moved from the project state files into the
change state files, as a result of branching support.
See aeca(1) and aecattr(5) for more information.
* There is a new Search_Path substitution, to support
builds on branches. See aesub(5) for more information.
As a side effect, you can also use it in the test_command
field of the project config file, and thus have a search
path to look down for data files for your tests.
* Test times are now remembered, so that tests are only
run if they need to be. This allows you to keep working
on a test, and Aegis only runs those that have not yet
passed.
* Aegis now uses ``fingerprints'' to tell if files have
changed, rather than simply relying on file modification
time stamps. While this makes Aegis more robust, there
is one caveat: it is recommended that 3.0 be installed
when there are no changes in the 'being reviewed' or
'awaiting integration' states, in any project.
* There is now a log file prefernces control, allowing
users to set their preferred logging behaviour. See
aeuconf(5) for more information.
* It is now possible to specify the filename for new
tests on the command line. See aent(1) for more
information.
* It is not possible to specify a pattern for test
filesnames. See aepconf(5) for more information.
* There is now a -MAXimum option to the aeib command,
allowing you to keep obsolete derived files at integrate
begin. This can avoid long integration build times for
large projects.
Version 3.0 Bug Fixes
* Architecture names are now checked a `develop end'
time, to ensure there are no unknown variants. This
fixes the mysterious ``you must build again'' problem.
* The aecp(1) and aed(1) commands now take a baseline
read lock, to be more symetric with the aeb(1) command
which has always done so. The aeipass(1) command takes
the complementary baseline write lock, ensuring the the
baseline remains constant for the duration of builds,
file copies, differences and merges. The manual entries
for these commands have all been improved to document
this behaviour. See aeb(1), aecp(1), aed(1) and
aeipass(1) for more information.
* There are now some reminder scripts in the library,
which can be run from crontab(1). These are installed
into the /remind directory. These scripts can be used to
remind users of changes in various states, such as those
being developed or being reviewed.
* All of the commands which accept the -Edit option now
also accept a -Edit_BackGround option, allowing edit
commands to be piped in from the standard input.
* The aecp(1) command now accepts a -INDependent option,
allowing files to be copied independent of any change
(similar to the -INDependent option of the command.) See
aecp(1) for more information.
* The aecp(1) command now accepts a -Read_Only option,
allowing files to be copied into a change specifically to
insulate it from baseline changes. Such files must be
uncopied before development may end. See aecp(1) for
more information.
* The aenrls(1) command is now used only to convert
pre-3.0 projects into post-3.0 projects. This is because
the full branching support in 3.0 makes it more useful to
create a new release of a project by ending development
on the branch of the previous release and starting
development of a new branch numbered for the new release.
See the Branching chapter of the User Guide for more
information.
Version 2.3
* The merging behaviour of the aed(1) command has
changed. If any files require merging, it only merges.
In this way, merged files are not lost in the rest of the
output. Also, there are now command line options and
user preferences so that you can select to only merge or
only difference. See aed(1) and aeuconf(5) for more
nformation.
* It is now possible to assign symbolic names to project
deltas. This means that you may now recreate earlier
project baselines by name.
* All commands which accept a -Edit option now check for
most errors before commencing the edit. This avoids
wasted edits in many error cases.
* Fuzzy file name matches are now used to improve the
error messages from aecp, aerm, etc.
* Version number separators in project names are
preserved across new releases. Particularly, you can use
a minus ('-') between the name and the major version
number.
* A new ``copyright_years'' project attribute has been
added. This is a list of years maintained at integrate
begin time, to automate the insertion of list of
copyright years into copyright messages and
documentation. There is a new ${Copyright_Years}
substitution and the copyright years are also listed in
the ``aegis -list version'' listing. See aesub(5) and
ael(1) for more information.
* It is now possible to specify patterns for acceptable
and unacceptable filenames in the project config file.
See aepconf(5) for more information.
* Four more functions have been added to the report
language: length, split, substr and wrap. See aer(5) for
more information.
* The tests distributed with are now more stable on very
fast hosts. See the environment variables section of
aeb(1) for more information.
* The lib/config.example directory of the distribution
now contains files with example portions of the project
config file. May thanks to David R Shue
<shue@ll.mit.edu> for this suggestion.
Changes made in the previous release included:
Version 2.2
This release of Aegis provides 3 of the most commonly
requested features: support for heterogeneous
development, support for a greater range of DMTs, support
for user-defined reports.
* Aegis now supports heterogeneous development. Now you
can be sure that your project not only always builds and
tests sucessfully, but that it does so across a
configurable set of system or hardware architectures.
See the Heterogeneous Development secion of the Tips and
Traps chapter of the User Guide for more information.
* Aegis can now cope with a wider range of Dependency
Maintenance Tools (DMTs). It now has the ability to fill
development directories with symbolic links to all files
in the baseline which are not present in the development
directory. This allows DMTs to assume all files are
present below the current directory, allowing DMTs such
as cake and GNU Make to be used. See the Dependency
Maintenance Tool section of the User Guide and aeb(1) for
more information.
* Aegis now has a report generator, so you can create
your own reports. Many "canned" reports are included in
this distribution; of particular interest to many will be
the File_Activity report, which details currently active
files. See aer(1) for more information.
* Aegis is now configured using a shell script called
configure, distributed with the package. This shell
script is generated using GNU Autoconf. See the BUILDING
file for more information.
* The AEGIS environment variable has been renamed
AEGIS_PATH, to bring it in line with the AEGIS_PROJECT
and AEGIS_CHANGE environment variable names. The old
name will keep working for some time, but aegis will warn
you.
* Filename lengths are now configurable. The 14
character portability limit is still the default, but a
higher limit is configurable for each project, up to the
filesystem filename limit. See aepconf(5) for more
information.
* It is now possible to specify that filenames must be
within the minimum character set mandated by POSIX. The
default is as before, to allow any printing character.
See aepconf(5) for more information.
* Limits on the length of project names have been
relaxed. Project names are now only limited by the
filesystem filename limit.
* It is now possible to specify the command to run tests,
allowing a project to use a specialized test facility,
rather than be forced to use shell scripts. See aet(1)
and for more information.
* The commands which accept the -Edit now preserve the
edited text in the event of a failure.
* The commands which delete files now accept a
-Interactive option, which causes them to prompt the user
for confirmation of file deletion. This can be made the
default by an appropriate setting of the aliases or
individual users preferences files. See aenfu(1),
aentu(1), aecpu(1), and aeuconf(5) for more information.
* The aecp(1) command now accepts directory names,
allowing whole directory trees to be copied into a
change. The aecpu(1) command now has a -UNChanged option
which allows the unchanged files to be uncopied.
* The aeb command now accepts file names, allowing
partial builds to be performed. See aeb(1) for more
information.
* There is a new aechown(1) command to facilitate
reassigning the developer of a change which is in the
being developed state.
* It is now possible for project administrators to assign
changes to specific developers. See aedb(1) for more
information.
Version 2.1
* Can now ask for history to maintained for file
generated by the build. This is useful for generating
patch files.
Version 2.0
* A new command has been added to facilitate changing the
name of a file as part of a change. See aemv(1) for more
information.
* It is now possible to list the locks currently held.
See ael(1) for more information.
* If no other defaulting mechanism is specified, aegis
will now attempt to guess the project name and change
number from the pathname of the current directory. This
only works from within development directories.
* The aenc, aeca, aerfail, aeifail and aepa commands now
accept a -Edit command line argument. See the relevant
manual pages for more information.
* The aenpr command now understands the -MAJor and -MINOr
options, allowing the initial version of a project to be
something other than 1.0.
* The aed command now understands the -ANticipate option.
See aed(1) for more information.
* It is now possible to list all the outstanding changes
of a project, or of all projects. See ael(1) for more
information.
Version 1.4
* Support has been added for systems without the seteuid
system call, or those with crippled implementations.
* Most of the unimplemented command variants have been
finished. These include New Change Undo, Develop Begin
Undo and ReMove PRoject. Most notable of the exceptions
is -ANticipate option for the -CoPy_file and -DIFFerence
command.
* The User Guide has been added to, making it a little
more complete. It still needs more work, sigh.
* The code to handle automounters has been made more
robust.
* The command substitutions have been vastly improved,
and are now documented.
Reference Manual Aegis 1