Baselines and their uses

A baseline is a snapshot of a component at a particular time. It comprises the set of versions that are selected in the stream at the time the baseline was made. When a new stream is configured, baselines are used to specify which versions are to be selected in that stream. Baselines are immutable so that a particular configuration can be reproduced as needed and streams that use the same set of baselines are guaranteed to have the same configuration. Therefore, the set of versions included in a baseline cannot be modified.

Baselines that are created in the context of a stream are ordered relative to each other (see the following figure). Within a single stream, an old baseline is referred to as an ancestor of a newer baseline. The newer baseline is called a descendant of the old baseline. The closest ancestor of a baseline is its predecessor. The foundation baselines (or the foundation set) of a stream, which are created in a different stream, are the predecessors of the first baselines created in this stream.
Figure 1. Baseline predecessors and descendants

The important versions of elements prog.c, lib.c, num.h, msg.h, and util.h are shown as vertical circles that are connected by solid, dashed, and dotted lines.

In the figure, baseline BL1 is the predecessor of baseline BL2 and baseline BL2 is a descendant of baseline BL1. When baseline BL2 was created, there were new versions of prog.c, msg.h, and util.h, but for the files lib.c and num.h, baseline BL2 falls back to the baseline BL1 versions. Similarly, baseline BL3 is a descendant of baseline BL2; and baselines BL1 and BL2 are predecessors of baseline BL3. Baseline BL3 captures changes made after baseline BL2 was created, but it uses the baseline BL1 version of num.h and the baseline BL2 version of msg.h. Because version 4 of msg.h is checked out, it is not included in baseline BL3.

In the relationship among baselines, a descendant contains its predecessors so that, for example, all changes captured in baseline BL2 are also in baseline BL3.

The relationship between a baseline and a component is very similar to the relationship between a version and an element. For example, baselines exist in streams, but versions exist on branches. Both baselines and versions have predecessors.

Baselines have the following uses:
  • Record work done and mark milestones.
  • Define stream configurations.
  • Provide access to delivered work.