<div class="linkdesc">
The <span class="sconslogo">SCons</span> project page at
<a href="http://www.tigris.org">Tigris.org</a>.
+This is the center of active SCons development,
+hosting the main source code repository
+and issue tracker (bugs, patches, tasks, etc.).
</div>
</div>
<div class="linkdesc">
The <span class="sconslogo">SCons</span> project page at
<a href="http://sourceforge.net">SourceForge</a>.
+This is where we used to development, but no longer.
+It's now mostly of historic interest,
+although it's also the origination site for downloads.
</div>
</div>
<div class="link">
<div class="linkname">
-<a href="http://aegis.sourceforge.net/cgi-bin/aegis.cgi?">Aegis repository</a>
+Archive of the latest checked-in source in
+<a href="ftp://ftp.scons.org/scons-src-latest.tar.gz">.tar.gz</a>
+or
+<a href="ftp://ftp.scons.org/scons-src-latest.tar.zip">.zip</a>
</div>
<div class="linkdesc">
-The browsable Aegis repository at
-<a href="http://sourceforge.net">SourceForge</a>,
-with listing service provided by Peter Miller,
-the author of Aegis.
-Click through to the <emphasis>scons</emphasis>
-project and branches to get a view of what's going on
-with <span class="sconslogo">SCons</span> development.
-Updated whenever a change is made to <span class="sconslogo">SCons</span>.
-</div>
-</div>
-
-<div class="link">
-<div class="linkname">
-<a href="scons.ae">Current aedist baseline</a>
-</div>
-<div class="linkdesc">
-The Aegis snapshot of the current <span
-class="sconslogo">SCons</span> baseline.
+The whole source tree in easy-to-download form.
Updated whenever a change is made to <span class="sconslogo">SCons</span>.
+(Note that the source tree in these archives
+is mostly for packaging and testing of SCons;
+consult the <tt>README</tt> file for
+information about how to build packages and
+install SCons from the source tree.
+It's <emphasis>not</emphasis> handled by
+executing <tt>python setup.py</tt> directly
+from this package.)
</div>
</div>
<div class="linkdesc">
The browsable Subversion repository at
<a href="http://www.tigris.org">Tigris.org</a>.
-Updated whenever a change is made to <span class="sconslogo">SCons</span>.
+Most active development is carried out on subsidiary
+<tt>branches/</tt>.
+The <tt>trunk/</tt> contains whatever approved changes
+have been promoted from the
+See the
+<a href="http://scons.tigris.org/branching.html">Branching</a></td>
+page at our tigris.org project page
+for a description of the different
+branches
+and how we handle branch management.
</div>
</div>
<div class="link">
<div class="linkname">
-<a href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/scons/">CVS repository</a></td>
+<a href="http://scons.cvs.sourceforge.net/scons/">CVS repository</a></td>
</div>
<div class="linkdesc">
The browsable CVS repository at
</div>
</div>
+<div class="link">
+<div class="linkname">
+<a href="http://aegis.sourceforge.net/cgi-bin/aeget">Aegis repository</a>
+</div>
+<div class="linkdesc">
+The browsable Aegis repository at
+<a href="http://sourceforge.net">SourceForge</a>,
+with listing service provided by Peter Miller, the author of Aegis.
+Click through to the <emphasis>scons</emphasis>
+project and branches to get a view of what's going on
+with <span class="sconslogo">SCons</span> development.
+Updated whenever a change is made to <span class="sconslogo">SCons</span>.
+</div>
+</div>
+
+<div class="link">
+<div class="linkname">
+<a href="ftp://ftp.scons.org/scons.ae">Current aedist baseline</a>
+</div>
+<div class="linkdesc">
+The Aegis snapshot of the current <span
+class="sconslogo">SCons</span> baseline.
+Updated whenever a change is made to <span class="sconslogo">SCons</span>.
+</div>
+</div>
+
<div class="link">
<div class="linkname">
<a href="http://www.pcug.org.au/~millerp/aegis/aegis.html">Aegis</a>
--- /dev/null
+<html>
+<head>
+<title>SCons Branching and Merging</title>
+</head>
+<body>
+
+<div id="apphead">
+<h1><small>scons</small><br />SCons Branching and Merging</h1>
+</div>
+
+<p>
+This page covers how we handle branching and merging
+in the SCons development tree.
+We'll use
+<a href="http://www.dellroad.org/svnmerge/index">svnmerge</a>
+to keep track of what changes haven't been merged in each direction.
+Some of the concepts and steps below have been
+swiped from a pretty decent
+<a href="http://kenkinder.com/svnmerge/">svnmerge howto</a>
+created by Ken Kinder,
+with liberal help from our Gary Oberbrunner.
+</p>
+
+<div class="h2 app" style="border-left: 0px" id="branches">
+
+<h2>Branches</h2>
+
+<p>
+These are the SCons development branches and their intended uses.
+</p>
+
+<ul>
+
+<li>
+<strong><tt>trunk</tt></strong>
+<p>
+The main code line from which SCons gets released.
+This currently lags patches that the mailing list
+discussions describe as "checked in to Subversion."
+The real latest-and-greatest checked-in source
+containing SK's patches is in
+<tt>branches/core</tt>.
+This is, however, where we check in
+web site changes into the
+<tt>www/</tt> and <tt>scons.org/</tt> subdirectories
+(for the <a href="http://scons.tigris.org/">tigris.org</a>
+and <a href="http://www.scons.org/">scons.org</a>
+web sites, respectively).
+</p>
+</li>
+
+<li>
+<strong><tt>branches/core</tt></strong>
+<p>
+The main development branch for changes to
+the SCons infrastructure.
+This is where SK checks in most of the
+stuff he's working on
+and which gets sent for review to the
+scons-dev mailing list.
+This branch's parent is <tt>trunk</tt>.
+</p>
+</li>
+
+<li>
+<strong><tt>branches/packaging</tt></strong>
+<p>
+Development branch for the packaging work
+that Philipp Scholl is working on
+as a Google Summer of Code project.
+</p>
+</li>
+
+<li>
+<strong><tt>branches/sigrefactor</tt></strong>
+<p>
+Development branch for the Big Signature Refactoring
+that SK has been working on since the last ice age.
+This branch's parent is <tt>branches/core</tt>.
+</p>
+</li>
+
+<li>
+<strong><tt>branches/testing</tt></strong>
+<p>
+A branch for work on the SCons testing infrastructure.
+This branch's parent is <tt>branches/core</tt>.
+Not very active at the moment,
+because most of that work is just going in right in
+<tt>branches/core</tt>.
+</p>
+</li>
+
+<li>
+<strong><tt>branches/tools</tt></strong>
+<p>
+The branch intended for people to check in new features to Tool modules.
+If you want to contribute a change here,
+go see the
+<a href="tools-changes.html">step-by-step instructions</a>
+for doing so.
+This branch's parent is <tt>trunk</tt>.
+</p>
+</li>
+
+</ul>
+
+<p>
+</p>
+
+<h2>How to create a branch off the trunk and initialize it for bi-directional merging</h2>
+
+<p>
+This should take place between any branch and its parent
+to set up to <tt>svnmerge</tt> to handle the
+tracking as we go forward.
+</p>
+
+<pre>
+$ export SVN=http://scons.tigris.org/svn/scons
+$ cd my_working_directory/trunk
+$ svn cp $SVN/trunk $SVN/branches/new_branch
+$ svn commit
+$ cd ..
+$ svn co $SVN/branches/new_branch
+$ cd new_branch
+$ svnmerge init -S $SVN/trunk -f commit.txt
+$ cd ../trunk
+$ svnmerge init -S $SVN/branches/new_branch -f commit.txt
+$ svn commit -F commit.txt && rm commit.txt
+$ cd ../new_branch
+$ svn commit -F commit.txt && rm commit.txt
+</pre>
+
+<p>
+You can actually do both the <tt>svnmerge init</tt>
+and <tt>svn commit</tt> on one branch (in one directory)
+and then do both on the other branch,
+but doing it this way makes both of them end up with
+the same revision number in the <tt>svnmerge</tt> property,
+which is nice and symmetric.
+</p>
+
+<h2>How to merge changes from the trunk to a development branch</h2>
+
+<p>
+This brings a branch in sync with the latest changes that
+have made it into the trunk for release
+(usually by being promoted from other branches,
+we typically don't do work directly on the trunk).
+</p>
+
+<pre>
+$ export SVN=http://scons.tigris.org/svn/scons
+$ cd my_working_directory/new_branch
+$ svn up
+$ svnmerge avail -b -S $SVN/trunk -l
+$ svnmerge merge -b -S $SVN/trunk -f commit.txt
+$ svn resolved .
+$ svn diff
+$ svn commit -F commit.txt && rm commit.txt
+</pre>
+
+<h2>How to merge changes from a development branch to the trunk</h2>
+
+<p>
+This promotes the branch changes into the trunk.
+Note that you should <emphasis>really</emphasis>
+first make sure that your branch has already
+merged any changes from the trunk
+(see previous section) before doing this,
+or else you're likely to overwrite any work
+that's already been submitted up.
+</p>
+
+<pre>
+$ export SVN=http://scons.tigris.org/svn/scons
+$ cd my_working_directory/trunk
+$ svn up
+$ svnmerge avail -b -S $SVN/branches/new_branch -l
+$ svnmerge merge -b -S $SVN/branches/new_branch -f commit.txt
+$ svn resolved .
+$ svn diff
+$ svn commit -F commit.txt && rm commit.txt
+</pre>
+
+<p>
+The <tt>svn resolved .</tt> is there because there will be a
+conflict on the <tt>svnmerge-integrated</tt>property
+that's attached to the directory to track what changes
+have or have not already been merged from the development branch.
+</p>
+
+</div>
+
+</body>
+</html>