.\" .\" aegis - project change supervisor .\" Copyright (C) 1995, 1997-1999, 2002, 2004-2009, 2012 Peter Miller .\" .\" This program is free software; you can redistribute it and/or modify .\" it under the terms of the GNU General Public License as published by .\" the Free Software Foundation; either version 3 of the License, or .\" (at your option) any later version. .\" .\" This program is distributed in the hope that it will be useful, .\" but WITHOUT ANY WARRANTY; without even the implied warranty of .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the .\" GNU General Public License for more details. .\" .\" You should have received a copy of the GNU General Public License .\" along with this program. If not, see .\" . .\" .\" The output of processing this document is meant to .\" be in USENET Digest format, as described in RFC1153. .\" .ll 70 .ds sep ---------------------------------------------------------------------- .de H .ft R .in 0 .sp \\*[sep] .ds sep ------------------------------ .sp .nr hd*level 0\\$1 .\" .\" clear lower counters .nr hd*i 1 1 .while \\n+[hd*i]<8 .if \\n[hd*level]<\\n[hd*i] .nr H\\n[hd*i] 0 1 .\" .\" increment current counter .nr H\\n[hd*level] +1 .\" .\" hd*mark is the text written to the left of the header. .ds hd*mark \\n[H1]. .nr hd*i 1 1 .while \\n+[hd*i]<8 .if \\n[hd*level]>(\\n[hd*i]-1) .as hd*mark \\n[H\\n[hd*i]]. Subject: \\*[hd*mark] 'in 8n \\$2 .in 0 .sp .. .de e( .ft R .in +8n .ft CW .nf .. .de e) .fi .ft R .in -8n .. .so etc/version.so .hy 0 .ad l .nf Subject: Aegis Frequently Asked Questions (FAQ) From: Peter Miller Newsgroups: comp.software-eng,comp.software.config-mgmt, comp.software.testing,comp.sources.d,alt.sources.d .sp Submitted-by: Peter Miller Archive-name: aegis.\*(v)/FAQ .fi .sp This message contains answers to a number of frequently asked questions about Aegis. If you don't know what Aegis is, read on. .sp Suggestions for additions or improvements to this FAQ are most welcome. .sp 2 .ce 1 Contents .nf .so etc/toc.so .fi .H 1 "What is Aegis?" Aegis is a transaction-based software configuration management system. 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. .sp For a more complete description, see the README file or the User Guide. Both are available from the anonymous FTP site (see below). .H 2 "What operating systems are supported?" Aegis will run on almost any version of UNIX. The distribution contains a configure script generate by GNU autoconf to adapt to your site. .sp There is no Aegis port to NT, OS/2, MS-DOS or VMS. The author has no expertise is these operating systems. If you do have such expertise, you are welcome to donate a port of Aegis, and I will try to include your work in the next release. .H 3 "Cygwin" There is a very capable UNIX emulation layer known as Cygwin available from Cygnus. Please see http://sourceware.cygnus.com/cygwin/ for more information. But before you get too excited, see the next item. .H 3 "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 \fIseteuid\fP system call, which has no direct equivalent on Windows NT. This makes porting difficult. Single-user ports are possible (\fIe.g.\fP using Cygwin), but are not usually what folks want. .sp 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 \[lq]back door\[rq] 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. .sp 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. .H 2 "Where can I get Aegis?" Aegis is available by WWW from .in +4m .TS tab(;); l l s l l l. URL:;http://aegis.sourceforge.net/ File:;aegis.\*(v).README;# the README file from the tar set File:;aegis.\*(v).faq;# Frequently Asked Questions File:;aegis.\*(v).lsm;# description in LSM format File:;aegis.\*(v).rm.pdf;# PDF of the Reference Manual File:;aegis.\*(v).tar.gz;# the complete source File:;aegis.\*(v).ug.pdf;# PDF of the User Guide .TE .H 2 "Is Aegis actively being maintained?" Yes, Aegis is actively being maintained by the author. You can contact him by email .ce 1 Peter Miller .H 2 "Is there an Aegis mailing list?" Yes. Discussion may include, but is not limited to: bugs, enhancements, and applications. The list is not moderated. .sp The address of the mailing list is .e( aegis-users@canb.auug.org.au .e) .sp .if n DO NOT .if t \fB Do not\fP send email to the list if you wish to subscribe. .sp To subscribe to this mailing list, send an email message to \f(CWmajordomo@canb.auug.org.au\fP with a message body containing the single line .e( subscribe aegis-users .e) If you have an address which is not readily derived from your mail headers (majordomo is only a Perl program, after all) you will need to use a message of the form: .e( subscribe aegis-users \fIaddress\fP .e) where \fIaddress\fP is an email address to which you want messages sent. .sp The mailing list is archived at eGroups. The URL is http://www.egroups.com/list/aegis-users/info.html and then follow the links. .sp The software which handles this mailing list .if n CANNOT .if t \fBcannot\fP send you a copy of \fIAegis\fP. Please use FTP or ftp-by-email, instead. .H 2 "How does Aegis compare with program X?" For all X, \[lq]The author has no experience with X. If you wish to contribute a comparison between Aegis and X, it will be considered for addition here.\[rq] .H 1 "Configuration and initial build problems" Aegis is accompanied by a set of regression tests, and the BUILDING instructions included in the distribution detail how to run these tests. .H 2 "Changing Makefile and common/config.h" It is a Bad Idea to change the Makefile or the common/config.h file by hand. This is because much of the work done by the configure script is inter-related. .sp In particular, if you change the C compiler (CC) you absolutely must do this with the involvement of the configure script. .H 2 "RCS" The tests distributed with Aegis use RCS as their history tool. It is important that you use version 5.6 or later. .sp There seems to be a problem with the version of RCS distributed with HP/UX, even though it claims to be RCS-5.6.0.1. You will need to get the latest GNU RCS if you are on a HP box. .H 2 "SCCS" The tests do not automatically detect that you have SCCS. You will need to go out and grab RCS even if you already have SCCS installed at your site. .H 1 "Testing" One of the things many sites like about Aegis, is that it provides mandatory testing. This enforcement of testing is optional, and is configurable per-project. .sp Please note that even if Aegis' testing framework is not useful to your project, the other aspects of Aegis' process still are (e.g. concurrent development, mandatory reviews, etc.). .H 2 "Can I use something besides a shell script?" Yes, the \[lq]test_command\[rq] field of the project configuration file may be set to whatever command you like, see \fIaepconf\fP(5) for more information. .sp A shell script is the default, because you can run anything out of the shell script. In particular, you can set up a temporary directory within which to run the tests. If you \[lq]cd\[rq] into this temporary directory when running tests, cleanup, no matter what the fallout, even a core dump, is thus a simple matter of \[lq]rm -rf\[rq] of the temporary directory. .H 2 "Testing curses programs" I don't have a curses program tester, nor do I know of one. It seems to me that the \[lq]screen\[rq] program contains all the necessary elements, however additional code would be required to make it a suitable test harness. .sp If anyone has found suitable curses testers, even commercial ones, I would be happy to list (FTP) locations here. .H 3 "Expect" Some sites have been using \[lq]expect\[rq] to test curses programs. You need to be careful about terminal types. The author is Don Libes .sp expect is available by anonymous FTP from .in +4m .TS tab(;); l l. Host:;sunsite.unc.edu Dir:;pub/Linux/system/Shells File:;expect-5.12.tgz .TE .in -4m .sp The author has not personally used this system, and so can make no comment on it. .H 2 "Testing X11 programs" I don't have an X11 program tester, however several commercial ones seem to be advertised heavily. .sp If anyone has found suitable X11 testers, even commercial ones, I would be happy to list additional (FTP) locations here. .H 3 "replayXt" ReplayXt is a library that allows Intrinsics (or Xt) based application to be executed from a script file. In particular, applications based on the Athena and the Motif toolkits can be played. The author is Jan Newmarch .sp replayXt is available by anonymous FTP from .in +4m .TS tab(;); l l. Host:;ftp.x.org Dir:;/contrib/devel_tools File:;replayXt.README File:;replayXt.1.1.tar.z .TE .in -4m .sp The author has not personally used this system, and so can make no comment on it. This entry originated from Simon Pickup .H 2 "Testing embedded systems" Yes, embedded system can be developed with Aegis. Naturally, you will need a suitable cross compiler. .sp To test embedded software, you will need suitable testing hardware: .sp 1. you will need to be able to (automatically) download the software into suitable hardware - probably with RAM emulating the ROM of the distributed product. .sp 2. you will need to be able to simulate the various inputs and capture the various outputs, if you don't want to do manual testing. .sp 3. you will probably have to write the testing program yourself, to allow scripting the inputs and outputs. .sp 4. The gotcha is that in diverting input and output, you will need to manually test the device drivers, because the tests will probably not exercise them. .sp The author has worked in an environment like this, and Aegis is definitely intended to be useful in this situation. .H 2 "Do I really need to test my software?" No, you do not. There are alternatives, as this quote demonstrates: .in +4n .sp New York, NJ, Sept. 24 -- People for the Ethical Treatment of Software (PETS) announced today that seven more software companies have been added to the group's "watch list" of companies that regularly practice software testing. .sp "There is no need for software to be mistreated in this way so that companies like these can market new products," said Ken Granola, spokesperson for PETS. "Alternative methods of testing these products are available." .sp According to PETS, these companies force software to undergo lengthly and arduous tests, often without rest for hours or days at a time. Employees are assigned to "break" the software by any means necessary, and inside sources report that they often joke about "torturing" the software. .sp "It's no joke," said Granola. "Innocent programs, from the day they are compiled, are cooped up in tiny rooms and 'crashed' for hours on end. They spend their whole lives on dirty, ill-maintained computers, and are unceremoniously deleted when they're not needed anymore." .sp Granola said the software is kept in unsanitary conditions and is infested with bugs. .sp "We know alternatives to this horror exist," he said, citing industry giant Microsoft Corp. as a company that has become extremely successful without resorting to software testing. .in -4n .sp If anyone has an accurate attribution for the above quote, I would like to include it here. .H 1 "Miscellaneous" This section contains a whole bunch of things which do not yet belong anywhere else. .H 2 "How do you pronounce \[lq]Aegis\[rq]?" There are many alternatives for pronouncing this word, and all focus on the myriad of sounds available for the "ae" vowel. Alternatives include: maestro, aerial, algae, etc. The author has chosen the pronunciation found in the majority of dictionaries: ee.j.iz. That is "ee" as in "tree", a "j" as in "job", and "iz" as in "prism". .H 2 "How do I automate the integration queue?" There is a Perl script distributed with Aegis called \fIaeintegratq\fP(1) which can be run from \fIcron\fP(1) daily, or whatever. This Perl script is a good starting point for customizing automatic integrations. .sp Please note that the integration phase also serves to answer the question \[lq]who reviews the reviewers?\[rq] Monitoring review quality is essential to maintain product quality. Automating the integration queue potentially denies you this quality opportunity. .H 2 "How do I enforce coding standards?" The \[lq]develop_end_policy_command\[rq] field of the project configuration file is for this purpose. If this command fails, the change may not leave the \fIbeing developed\fP state. .sp For example, if you wanted to check that all files conformed to project coding standards, you could run the hypothetical \[lq]check_standards.sh\[rq] script (a project source file, of course), using .e( develop_end_policy_command = "sh ${source check_standards.sh}"; .e) This script would use the \fIaelcf\fP command to obtain the list of files to be checked. .H 2 "How do I get dates printed before and after build commands?" The \fIbuild_command\fP field of the project configuration file can also be used to do more than just build: .e( build_command = "set +e; date; cook ...; x=$?; date; exit $x"; .e) You need to be careful about the \f(CW-e\fP flag, because Aegis invokes the shell to run the commands with the \f(CW-e\fP option, to abort after the first error. .sp You may want to upgrade to Aegis 3.0 or later. In this version, the times are automatically printed as part of the verbose commencement and completion messages. .H 2 "How do I stop Aegis automatically merging?" The merging behavior is controlled by the \[lq]diff_preference\[rq] field of the user configuration file. See \fIaeuconf\fP(5) for more information. There are also three command line options to the \fIaed\fP(1) command which can override the preferences, see \fIaed\fP(1) for more information. .sp To stop the automatic merging, add the line .e( diff_preference = no_merge; .e) to the .aegisrc file in your more directory. To specifically perform a merge after that, you will need to use the \[lq]aed -merge_only\[rq] command. There is an \[lq]aem\[rq] alias for your convenience. .H 2 "How do I modify which developer is assigned to a change?" There have been times when we have one developer working on a change and, for one reason or another, we need assign that change to different developer before the change is at a point where it can be integrated. Is there a way to tell Aegis that a new developer has been assigned to the change so that it would change files permissions accordingly? (My thanks to Mark Meuer for this question.) .sp Yes, you need to use the \fIaechown\fP(1) command. This command may be run by a project administrator to reassign a change to a different developer. Because \fIchown\fP(2) does not work over NFS, a new development directory owned by the new developer is created, and the change files are copied, before the old development directory is deleted. .H 2 "Do I have to type all the configuration examples in the User Guide?" No, you do not. The lib/config.example directory contains a number of files with the configuration command from the User Guide ready for inserting into your project configuration file. .H 2 "Is there a way to recreate a previous baseline?" For example, let's say we have shipped one version to a customer and since then made 30 changes to the baseline. When the customer calls in with a failure report that we can't reproduce, how can I easily rebuild the baseline from 30 changes ago to help track down the error? .sp Yes, it is possible to recreate a previous baseline. You need to follow these steps: .sp 1. Determine which delta was shipped to the customer. This is easiest if you embed the version supplied by Aegis into your executables at build time. .sp 2. Create a change a change (you want to fix the bug, right?) and start developing it. .sp 3. Copy all of the project files into the change, using the delta number determined in step 1. Use these commands: .e( aecd aecp . -delta N .e) where N is the delta number from the first step. Files created since the delta will be copied into your change as empty files, leave them alone for a while. .sp Note that you need Aegis 2.3 for directory copying to work correctly. Earlier versions will need to use .e( aecd aecp `aegis -list project_files -terse` -delta N .e) Note the backward quotes. The above can be abbreviated, its just long so you can see what it is doing. .sp 4. Build the change as normal. This will completely rebuild the version sent to the customer. Note that a number of things are beyond Aegis' scope, like operating system updates and compiler updates. These can have an effect in accurately reproducing what was sent to the customer. .sp 5. Find the bug and fix it, as you would normally do. .sp 5. Merge the change. This will bring the files up to the most recent version, and merge the bug fix with the current version. .sp 6. You can now uncopy all of the files which are unchanged. Aegis provides a fast way to do this .e( aecpu -unchanged .e) This command behaves like aecpu, but it goes hunting for files which are the same between the baseline and the development directory. Note that you must do this step after the merge. .H 2 "How do I stop it using the pager?" Aegis automatically redirects the output of listing and help into the pager program described in the $PAGER environment variable, or \fImore\fP if not set. This is only done if aegis is running in the foreground and the output is a terminal. .sp The simplest way to stop the use of the pager is to pipe the output through cat. A more elegant method is to use the -No_Pager option. .sp If you want to permanently disable the pager, set the following line in your \f(CW.aegisrc\fP file: .e( pager_preference = never; .e) If you want to use the pager now, you will need to use the -PAGer option. .H 2 "Why does develop end complain about builds?" Why does aede complain that "this change must successfully complete an 'aegis -Build' before it can end development" but I have just done a successful build? .sp There are two possibilities: time stamps and architectures. .H 3 "Build Time Stamps" Aegis tracks time stamps on files and builds, etc, to determine when files are out of date. If time clocks on various networked machines disagree, it is possible for Aegis to conclude that a file or files are logically out of date. .sp This problem is mentioned in the User Guide. Essentially, you need to install NTP or XNTP. If you can't do that, run \fIrdate\fP(1) on your client machines from cron, to sync their clocks with the file server's clock. .H 3 "Build Architectures" The \[lq]aede\[rq] can also complain about builds when you have changed the architecture field of the project configuration file, but have not yet updated the change's attributes to match. This can also happen when a separate change updates the architecture field, and all existing changes suddenly get this mystery error. .sp It happens because the default architecture is "unspecified" in the change attributes (use \[lq]aeca -l\[rq] to take a look). When the project configuration file changes, the required architecture, according to the change's attributes, is still "unspecified". To fix, use \[lq]aeca -e\[rq] and edit the change's attributes to match the architecture names in the project configuration file. .sp You may wish to upgrade to version 3.0, which checks for this, and prints a suitable error message, with a suggestion to edit either the project configuration file or the change attributes. .H 1 "Internationalization" This section discusses a number of issues surrounding internationalization, and the effect it has has upon Aegis and its error messages. .H 2 "Say What?" Internationalization is the process of modifying code so that it may produce messages in the native language of the user. A data file is supplied for each supported language, containing the strings to be substituted for error messages and other text produces by a program. .H 2 "So why are the error messages So Bad, now?" There is a set of default error messages in the code itself. These error messages are used if the localization file cannot be found, or if the message is absent from the localization file for some reason. These messages tend to be in the \[lq]programmer cryptic\[rq] language, and the English localization has probably not been installed correctly. The English localization .if n *needs* .if t \fIneeds\fP to be installed. .sp There is also a small, slight, tiny (cough) possibility that the necessary code changes have introduced bugs into some error reporting. (And we need bugs there like we need a third arm pit.) Please report any problems immediately to the author. .H 2 "What controls which language is used?" There are a range of environment variables, depending on your operating system. The most common is the LANG environment variable. The default is \[lq]en\[rq] (for English) if nothing is specified. .H 2 "What localizations are available?" Only English is available at this writing. .sp More may become available if there are any generous bilingual Aegis users out there, who want to provide a localization file in another language. .H 2 "So can I change the text of error messages?" Yes, you can, but it is not advised. Seriously. (I'm going to regret admitting this, so I'm not going to tell you how.) If you have suggestions for improving error messages, please email them to the author. .H 1 "Branches" This section discusses a number of issued surrounding branching. .H 2 "What is a Branch?" Aegis treats branches as \[lq]big changes\[rq]. This allows much of Aegis' development model be be applied unchanged, but still allow the development of projects to be broken down into fine grained pieces, or aggregated into large \[lq]release sized\[rq] chunks. .H 2 "What is an Anabranch?" Aegis' branches can end. This is a consequence of treating branches as \[lq]big changes\[rq]. Logical places to end branches are times like when a release of the software is made. The geographic term for a stream which breaks off and rejoins downstream is an anabranch. .sp Because branches can end, combined with the fact that branches are \[lq]big changes\[rq], this means that you use \[lq]aede\[rq] to end development of the branch. After that, it is just like any other change on its parent branch. .H 2 "Do branches have to end?" No. You are not required to end development of a branch, just as you are not required to end development of a change. In particular, the project trunk is an unnumbered branch which never ends. How you manage your project is up to you. .H 2 "Why are branches called projects?" In order for the branches to be \[lq]big changes\[rq], there are times when you will refer to the branch as a change to its parent project. In order for branches to have changes, there are times when you will refer to them as a project. .sp The conversion between the two is intended to be simple. When you need to refer to a branch in its project role, join the branch's parent project name to the branch's number with a dot; \fIe.g.\fP \[lq]-p aegis.1.2\[rq]. When you need to refer to a branch in its change role, separate the branch's project name from the branch's number at the last dot; \fIe.g.\fP \[lq]-p aegis.1 -c 2\[rq]. .H 2 "Why must aed be used when integrating a branch?" Because branches are \[lq]big changes\[rq] and follow \fIall\fP of the things a change must do, including aed. The only time a branch is writable is at integration time for a change on that branch. Thus, the aed for the branch is done between aeib and aeipass. The trunk doesn't require it, because you never say aede to the trunk. .H 2 "How come the branch baseline is incomplete?" The branch baseline is the development directory for the \[lq]big change\[rq] represented by the branch. Just as a developers development directory only contains the things being worked on, and their implications, so does the branch baseline. .sp This means that wherever you specify a search path (-I, VPATH, \fIetc\fP) to look first in your development directory and then in the baseline, it must also look in each of the branch's ancestors' baselines. Aegis provides a \[lq]$search_path\[rq] substitution telling you where to search; this is usually used in the \[lq]build_command\[rq] field of the project \fIconfig\fP file. .sp The \[lq]aefind\[rq] command may also be used to perform actions similar to use usual Unix find(1), but across the Aegis search path. .\" .\" This is the end of the digest. .\" All contents must be before this point. .\" .sp \*[sep] .sp End of aegis.\*(v).faq Digest .br *************************** .\" vim: set ts=8 sw=4 et :