Conflicts between composite baselines

A conflict can occur when a stream configuration includes multiple composite baselines where each composite baseline selects a baseline of the same component. A stream cannot select two different baselines of the same component. If you attempt to perform an operation that would cause this situation, UCM recognizes the conflict and forces you to resolve it before completing the operation.

Composite baselines promote component reuse by making it easier to include large components and subsystems into a project. As the number of shared components rises, a higher probability exists that different subsystems will have a baseline conflict. Higher-level projects that use lower-level subsystems are increasingly likely to include in their foundation sets composite baselines that have members in the same component. Conflicts arise when the members are not the same baseline for a particular component. For example, suppose AC.BL1 and BCD.BL1 are composite baselines that each select baselines of component C (see Figure 1).
Figure 1. Composite baselines with the same component

Composite baseline AC.BL1 has member baselines A.BL1 and C.BL3. Another composite baseline BCD_BL1 has member baselines B.BL1, C.BL1, and D.BL1, The two composite baselines share baselines of component C.

Baseline C.BL3 a member of composite baseline AC.BL1 and baseline C.BL1 a member of composite baseline BCD.BL1.

If baselines AC.BL1 and BCD.BL1 are configured in project Y, it is unclear to HCL VersionVault which baseline on component C to use, baseline C.BL1 or C.BL3 (see Figure 2).
Figure 2. Composite baselines with a conflict

Project Y is configured with composite baseline E.BL1. Composite baseline E.BL1 has member baselines AC.BL1, BCD_BL1, and E_BL0. Baselines C.BL3 which is contained in AC.BL1, and C.BL1 which is contained in BCD.BL1 have shading; the other baselines are plain.

In the HCL VersionVault environment, a view must have an unambiguous rule for selecting versions of an element. In UCM, a stream can only use one baseline to select the versions in a component. Rebase operations and baseline recommendations that would result in conflicts are blocked.

To resolve the conflict, you are forced to explicitly specify a baseline for the component in question. This chosen baseline is said to override the members of the composite baselines in conflict. A baseline that you explicitly specify as an override baseline in the foundation set of a stream, regardless of whether it resolves a conflict, overrides any baseline of that component that is implied by a composite baseline.

To resolve the conflict on component C shown in Figure 2, the project integrator chooses baseline Cx.BL3 (see Figure 3).
Figure 3. Composite baselines with an override baseline

Project Y is configured with composite baseline E.BL1. Composite baseline E.BL1 has member baselines AC.BL1, BCD_BL1, and E_BL0. Baselines C.BL3 which is contained in AC.BL1, and C.BL1 which is contained in BCD.BL1 have shading; the other baselines are plain. An extra baseline, Cx.BL3, appears outside the hierarchy and is marked Override.

Because an override was selected, the baseline C.BL3 in composite baseline AC.BL1 and the baseline C.BL1 in composite baseline BCD.BL1 are ignored. Baseline Cx.BL3 is used to select versions in component C.
Tip: The override applies only for the baseline for component C in the foundation baselines of the stream, but the composite baseline itself remains the same.

You can choose as the override any baseline of the component involved in the conflict. The overriding baseline does not have to be one of the conflicting baselines. The project integrator can select a baseline that is compatible with the other baselines in the baseline set of the project. In Figure 3, the project integrator could have chosen baseline C.BL1 as the override, instead of baseline Cx.BL3. However, the integrator must ensure that the versions selected by composite baseline AC.BL1 are compatible with the versions selected by baseline C.BL1. With the selection of the override Cx.BL3, the AC and BCD subsystems need to be checked to ensure that they are compatible with baseline Cx.BL3.

Baseline overrides stay in effect until you do one of the following:
  • Explicitly remove the overriding baseline from the foundation set (for example, with cleartool rebase –dbaseline).
  • Replace completely the foundation set. This happens when you rebase to the recommended baselines of the parent stream (cleartool rebase –recommended).

The decision to select a baseline override is solely for the project integrator. It is not a decision that can be automated. Each project team has to determine the correct override in each instance of a conflict.