Aegis

A transaction-based software configuration management system

Walter Franzini

walter (dot) franzini (at) gmail (dot) com

Move the cursor i the right low corner to control the slides.

Attention Please

This presentation is old, while still useful you may want to look at a more recent (2007) presentation I've made. It's available here.

Agenda

  • Intro
  • Main Features
  • The Process
  • Delegation
  • File types
  • Command Summary
  • Distributed development
  • Alternatives
  • References

Intro

  • Author: Peter Miller
  • License: GPL
  • First public release: 1.4 (1991)
  • 1997 - Branch Support
  • 1999 - Distributed Development (multi repositories)
  • 2004 - UUID introduction for files and changes
  • Current Release: 4.21 (2005/11/10)

Intro (Cont.)

  • 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.

Main features

  • Support for large projects and large development teams.
  • Support change sets and atomic commits.
  • Designed around incremental development.
  • Designed for repository security (availability, integrity and confidentiality).
  • Support multiple repositories
  • Support distributed repositories

The Process

  • 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.

The Process (Cont.)

Roles

  • Administrator
  • Developer
  • Reviewer
  • Integrator

The Process (Cont.)

Change set states

  • Awaiting_development
  • Being_developed
  • Awaiting_review (opt.)
  • Being_revied (opt.)
  • Awaiting_integration
  • Being_integrated
  • Complete

File types

  • source
  • config
  • build
  • test
  • manual_test

Delegation

  • UNIX provides many components of a CASE system - compilers, editors, dependency maintenance tools (such as make), source control tools (such as RCS).
  • history tool (e.g. rcs, sccs, aesvt, etc)
  • build tool (e.g. make, cook, ant ...)
  • diff tool (diff, fcomp ...)
  • merge tool (merge ...)
  • test tool

Command summary

Short form Command
aenpr aegis -New_PRoject
aenbr aegies -New_Branch
aena aegis -New_Admin
aend aegis -New_Developer
aeni aegis -New_Integrator
aenrv aegis -New_REViewer
aenc aegis -New-Change
aedb aegis -Develop_Begin

Command summary (Cont.)

Short Form Command
aenf aegis -New_File
aecp aegis -Copy_File
aemv aegis -Move
aerm aegis -Remove
aemt aegis -Make_Transparent
aeb aegis -Build
aed aegis -Diff
aem aegis -Diff -Only_Merge
aet [-Baseline/-Regression] aegis -Test ...
aede aegis -Develop_End
aerpass/aerfail aegis -Review_Pass/-Review_Fail
aeib aegis -Integrate_Begin
aeipass/aeifail aegis -Integrate_Pass/-Integrate_Fail

Command summary (Cont.)

Command
aepatch -send/-receive
aetar -send/-receive
aedist -send/-receive
aedist -missing/-pending/-replay

Distributed development

  • support for multiple repositories
  • aedist, a program which packages and unpackages Aegis changes so they can be sent by e-mail, or WWW or whatever.
  • each change set is identified by an UUID
  • change set inventories
  • aedist -missing
  • aedist -pending
  • aedist -replay

Distributed development

$ aedist -missing -p aegis.4.21 -f aegis.sourceforge.org
Project "aegis.4.21", Missing Change Set Inventory http://aegis.sourceforge.net/cgi-bin/aeget/aegis.4.21?inventory Change UUID Description ------- ------ ------------ 4.21.D052 9d3920d3-3888-48c5-a59c-b9dc66e2d597 include file rework Remote change sets: 714. Missing 1 change set. $ aedist -pending -p aegis.4.21 -f aegis.stepbuild.org
Project "aegis.4.21", Pending Change Set Inventory http://aegis.stepbuild.org//cgi-bin/aeget/aegis.4.21?inventory Change UUID Description ------ ------ ----------- 4.21.D047 1e691ce6-fca5-468f-b981-4820cf883364 aedist --replay vs URLs 4.21.D048 c52a1d6d-0b80-409e-9cb9-f99131f8a214 pastwatch link 4.21.D049 4d687604-1797-4180-bbe5-2e2b0641431a DEBUG build problem 4.21.D050 07e6c882-4530-4554-bd7d-6f3616573e12 ./configure vs curl 4.21.D051 7c45c293-14f3-474c-a979-8484857c209c aedist -send bug Remote change sets: 698. Pending 5 change sets.

Distributed Development

$ aedist -replay -p aegis.4.21 -f aegis.sf.net -inver 4.21*
aedist: aedist -receive -project=aegis.4.21 -change=551 -file 'http://aegis.sf.net/cgi-bin/aeget/aegis.4.21.C85/? aedist' --no-trojan aedist: aegis --new-change 551 --project=aegis.4.21 --file=/tmp/aedist-4d7f4864-ae3d-4c8a-bb63-0153e496792b --verbose --reason='Downloaded from http://aegis.sourceforge.net/cgi-bin/aeget/aegis.4.21.C85/?aedist' aegis: project "aegis.4.21": change 551: created aedist: aegis --develop-begin 551 --project aegis.4.21 --verbose aegis: project "aegis.4.21": change 551: development directory "/prep/work-in-progress/aegis/aegis.4.21.C551" aegis: logging to "/prep/work-in-progress/aegis/aegis.4.21.C551/aegis.log" aegis: cd /prep/work-in-progress/aegis/aegis.4.21.C551 aegis: user "walter", group "projadm" aegis: ln -s /prep/baseline/aegis/branch.4/branch.21/baseline bl aegis: project "aegis.4.21": change 551: user "walter" has begun development aedist: aegis --copy-file --project=aegis.4.21 --change=551 --verbose --branch=4.21 --delta=12 aeimport/format/rcs/gram.y aeimport/format/sccs/gram.y aeimport/format/search.cc aeimport/format/version.cc aeimport/format/version_list.cc aegis: appending log to "/prep/work-in-progress/aegis/aegis.4.21.C551/aegis.log" aegis: project "aegis.4.21": change 551: file "aeimport/format/rcs/gram.y" copied .... aedist: aegis --change-attr --uuid 9d3920d3-3888-48c5-a59c-b9dc66e2d597 -change=551 --project=aegis.4.21 aedist: Warning: This change contains files which could host a Trojan horse attack. Because you specified the --no-trojan option, the development will proceed despite this. aedist: aegis --diff --only-merge --change=551 --project=aegis.4.21 --verbose aegis: fmerge /tmp/aegis-de47362e-22f7-4b4c-a30b-053ad9306afe /prep/baseline/aegis/branch.4/branch.21/baseline/etc/Howto.cook /prep/work-in-progress/aegis/aegis.4.21.C551/etc/Howto.cook,B -o /prep/work-in-progress/aegis/aegis.4.21.C551/etc/Howto.cook -c /prep/work-in-progress/aegis/aegis.4.21.C551/etc/Howto.cook,C fmerge: warning: conflict detected aegis: project "aegis.4.21": change 551: merged 2 files, new 'aegis -Build' required ... aedist: aegis --diff --no-merge --change=551 --project=aegis.4.21 --verbose aegis: fcomp -w -s /prep/baseline/aegis/branch.4/baseline/aeannotate/annotate.cc /prep/work-in-progress/aegis/aegis.4.21.C551/aeannotate/annotate.cc -o /prep/work-in-progress/aegis/aegis.4.21.C551/aeannotate/annotate.cc,D ... aegis: project "aegis.4.21": change 551: difference complete aedist: aegis --build --change=551 --project=aegis.4.21 --verbose aegis: project "aegis.4.21": change 551: development build started 23:24 aegis: cook -b etc/Howto.cook -nl -st project=aegis.4.21 change=551 version=4.21.C551 arch=linux-i486 search_path=/prep/work-in-progress/aegis/aegis.4.21.C551:/prep/baseline/aegis/branch.4/branch.21/baseline:/prep/ baseline/aegis/branch.4/baseline:/prep/baseline/aegis/baseline autoconf= autoheader= linux-i486_c++= c++=

Alternatives

 

Questions?

  • ...
[any material that should appear in print but not on the slide]
Aegis ArX
Bazaar Bazaar- NG
BitKeeper (closed source) Clearcase (closed source)
CM Synergy (closed source) Code Co-op (closed source)
Codeville Cogito (git)
CVS CVSNT
Darcs DCVS
FastCST GNU Arch
Jedi VCS Mercurial
META- CVS Monotone
OpenCM Perforce (closed source)
PRCS Sablime (closed source)
Seapine (closed source) Stellation
Subversion Superversion
SVK Teamwork (closed source) Vesta
Visual Source Safe (closed source)