<h1>SCM for the tclnotmuch Project</h1>

<h2>Early Notes</h2>

  *  The main development path will be on <i>mainline</i>, not <i>trunk</i>.

  *  The initial empty checkin can not be edited, so edit it (change branch name) after the first other checkin (just one file).

  *  Create a new branch from the initial checkin for the TEA sample - this will be treated as a vendor branch.

  *  Create a new branch from the initial checkin for tclconfig - this will be treated as a vendor branch.

  *  Both the above branches merged into <i>mainline</i> before work starts. Since they are disjoint sets of files there will be no conflicts and each merge should be checked in immediately so that the starting point for changes is in the repository.

  *  Create a new branch from the initial checkin for <b>notmuch</b>'s own test data - this will be treated as a vendor branch, and should be merged into <i>mainline</i> immediately as it is a disjoint set of files.

<h2>Release Management and Branches</h2>

<dl>

<dd>This may be seen as overkill for this project, but the project is being used as a prototype SCM exercise as well.</dd>
</dl>

The project uses <a Versioning 2.0.0</a> with the minor variation that a version having a <i>z</i> value of zero will be referred to as

There is no point in pre-release identifiers unless someone is using the version concerned, and build metadata, if needed, will be the first 10 characters of the SHA1 hash of the Fossil commit.

The project is currently in proof-of-concept mode, which will be labelled version <b>0.1</b>, so the internal version labelling is set to this (including the <code>.so</code> name).

The first actual release will happen either

  *  when it is ready (in which case it will be version <b>0.1</b>)

or

  *  when someone is using the software and reports this to the project (in
     which case the version will be where <i>q</i>
     is a number to distinguish possible multiple occurrences of this
     event). This type of release is likely to be created retrospectively.

<h3>What to do in Fossil for a Release</h3>

  *  Tag the checkin corresponding to the release as where <i>version</i> is as above.

<h3>The <i>trunk</i> Branch</h3>

This does not exist.

<h3>The

  *  (normally referred to as is always on <i>mainline</i>.

  *  (normally referred to as is always on <i>mainline</i>.

  *  Normal development proceeds along <i>mainline</i> from the most recent release.

<h3>When to Branch</h3>

<ol>
  <li>When the first patch to a release is required, check out the checkin tagged for the release, make changes and, on the first subsequent check in, make it a branch with the same name as the tag on the release (parent) checkin. This is a release maintenance branch and subsequent patches should be developed and released on this branch. Note that the new branch should be created even if the base release checkin has no child checkin yet.</li>

  <li>The above applies to pre-releases as well as normal non-patch releases.</li>

  <li>Parallel patch releases are not permitted.</li>

  <li>A pending branch may be created (from any <i>mainline</i> starting point) if work needs to start on a release beyond the next one planned. This should be named but the "intended release" is not binding, though the branch name should not be changed.</li>

  <li>An extra branch may be created for any need to separate some specific development. This branch may have any name that does not look like one of the other names above.</li>
</ol>

<h3>When to Merge</h3>

<ol>
  <li>A release maintenance branch is expected to be merged into <i>mainline</i> and to be closed at the time of the next <i>mainline</i> release.</li>

  <li>A pending branch is expected to be merged into <i>mainline</i> (or a release maintenance branch) and to be closed at the time of the next release on the receiving branch (which may be

  <li>An extra branch is expected to be merged into <i>mainline</i> (or a release maintenance branch) and to be closed at the time of the next release on the receiving branch (which may be

  <li>All three of the above may be merged a number of times and continue development after the merge (until their final merge).</li>
</ol>