Resolving membership conflicts in a project or project grouping

Membership conflicts occur when the project membership does not match the baseline and task settings on the project grouping. This mismatch causes incorrect task and object relationships, such as parallel changes, missing changes, or extra changes. (Missing changes are changes you have asked for, but do not have. The changes are missing because the objects are not members in the projects even though the task is in the project grouping. Extra changes are changes you did not ask for but have. You have extra changes because the task is not in the project grouping even though the objects are members in the projects.)

About this task

To solve these problems, you do one or more of the following:

  • Find and compare parallels, and then, if appropriate, merge them.
  • Find and include changes that you requested, but that are not in your project.
  • Find and exclude changes that you did not request, but that are in your project.

Use the Membership Conflicts dialog box to check for conflicts between your project members and its project update properties. Normally, you will perform this procedure after an update to see where conflicts exist. The best time to view membership conflicts is immediately after an update because the project members are up-to-date with your project update properties at that time.

Conflict Message Definitions

The following tables, and the explanation of conflict detection that follows the tables, use the following definitions:

  • conflict is defined as one of the following situations:

    An object associated with a task not specified to be in your project was included.

    An object associated with a task that was specified to be in your project was not included.

    The task relationships for an object are not as expected (for example, no task or multiple tasks were associated with the object).

  • explicit means directly requested; that is, included in your project update properties.
  • implicit means indirectly depended upon or partially included; that is, not included in your project update properties.
Table 1. Conflict messages
Conflict Message Conflicts Shown by Default? Description
Conflict Category: Extra Changes
No task yes The object version is included implicitly in this project, but not associated with any task. (It cannot be included explicitly because this would require its task to be included in the project update properties.)
Implicitly included yes The object version is not explicitly specified, but it is included in the project.

The task is implicitly included in the project.

Included by "use" operation? yes The object version is not explicitly specified, not implicitly required, and update would not have selected it.
Implicit task from explicit object yes The associated object for the task has multiple assigned tasks. At least one of the associated objects for the tasks is explicit (that is, included in the project update properties), but this task is not.
Conflict Category: Missing Change
Explicitly specified but not included yes The task is explicitly specified by the project, but is not included.
Explicitly specified but not included - newer yes The object version is explicitly specified on the project, but is a successor of the currently selected version of that object.

The task is explicitly specified by the project, but is not included.

Implicitly required but not included yes The task is implicitly required, but not included in the project.
Implicitly required but not included - newer yes The object version is implicitly required, but is not included in the project. It is a successor of the current selected object version.
Implicitly required by multiple tasks - newer yes The object version is implicitly required because it was associated with a task that was implicitly included when another object in the project was associated with multiple tasks. The object version in conflict is not included in the project, and is a successor of the object version currently in the project.
Conflict Category: Other
Multiple Tasks no The object version is included in this project, and is associated with multiple tasks.
Implicitly required but before baseline no The object version is implicitly required, but it is a predecessor of the baseline. (This not a conflict because it is implicitly included, but it might indicate a process problem.)
Explicitly specified but before baseline no The object version is explicitly specified on the project, but is a predecessor of the baseline. (This is not a conflict because it is implicitly included, but it might indicate a process problem.)
Explicitly specified but object not in project no The object version is explicitly specified on the project, but no versions of it are in the project. This might be normal because the same project update properties are shared across entire project hierarchies.
Implicitly required but object not in project no The object version is implicitly required through a task included in the project, but no versions of it are in the project. This might be normal because the same project update properties are shared across entire project hierarchies.
Conflict Category: Parallel Changes
Implicitly required but not included - parallel yes The object version is implicitly required but not included in the project. It is parallel to the currently selected version, and might require a merge.
Implicitly required by multiple tasks - parallel yes The object version is implicitly required because it is associated with a task that was implicitly included when another object in the project was associated with multiple tasks. The object version in conflict is not included in the project, and is parallel to the object version currently in the project.
Explicitly specified but not included - parallel yes The object version is explicitly specified on the project, but is not included in the project. It is parallel to the current version, and might require a merge.
Conflict Category: Bad Task
Excluded task explicitly included yes An excluded task is included in the project grouping for the project.
Excluded task implicitly included yes An excluded task is implicitly included in the project grouping for the project.
Completed fix task not included yes A bad task is included in the project grouping for the project, but the completed good task is not included.
Assigned fix task not included no A bad task is included in the project grouping for the project, but the task_assigned good task is not included.
Task fixed by task not included yes A bad task is not included in the project grouping for the project, but the good task is included.

Task and object relationships

A task and a set of object versions can have a relationship. You can associate a set of object versions with a task, which indicates to use those object versions together and that they depend on each others' changes. If your project includes only part of the changes associated with a task, your project build might fail, or worse, might not run correctly.

For example, if you change a function signature, you must update every other program that calls the function to have the signature change. You must either include all of those changes together in the project, or not include any of the changes.

Object history relationships

Tasks have a history relationship, but it is different from the history relationship for an object. Object history usually is numerically consecutive. Task history is a conceptual relationship only, based on its associated file history relationship. A task groups files necessary to complete a change, so the task history relationship causes a current set of changes to depend on the previous set of changes.

history relationship

The main.c object has five versions. Each version is associated with a different task. (The task number associated with each version is shown under the object version.)

Rational® Synergy considers that a change to an object version contains the changes to all of its predecessor object versions. Therefore, in the example, version 3 is considered to contain the changes from versions 2 and 1.

For example, if you changed the signature of a function in version 2, then version 3, 4, and every version after would include that signature change. The changes are layered on top of each other. Even a change that removes a part of another change is layered on top of its history versions. However, the change in main.c-3 applies only to main.c-2, since the change was made to that version.

Task dependencies

Furthermore, because version 3 contains the changes from versions 1 and 2, version 3's associated tasks depend on the tasks associated with versions 1 and 2. In this example, task 58 depends on tasks 23 and 14.

Explicitly specified update properties

Consider the project myproj-sue, which contains main.c-4.

If a task is in a project grouping for the project, the project has specified explicitly to include the objects associated with that task. For example, if the myproj-sue update properties include tasks 72 and 23, then it has specified explicitly to include the object versions associated with tasks 72 and 23. In the previous figure, if the project has specified explicitly tasks 72 and 23, then it also has specified explicitly object versions main.c-4 and main.c-2.

Remember that main.c-4 contains the changes from main.c-2, and task 72 depends on task 23.

When you update a project, its explicitly specified object versions are its candidates. Update selects the most appropriate candidate, usually the newest. So in this example, myproj-sue would use tasks 72 and 23 to determine the candidate list: main.c-4 and main.c-2. It would pick main.c-4 as the newest candidate. Therefore, the project would include both the changes from main.c-4 and main.c-2. Likewise, it would contain the changes from both task 72 and task 23.

Implicitly specified update properties

Because the myproj-sue project contains main.c-4, it contains task 72, which its project update properties explicitly specified. It also depends on main.c-3, since main.c-3 is a predecessor of main.c-4. It also depends on the task that is associated with main.c-3: task 58.

However, if task 58 (and therefore, main.c-3) is not explicitly specified in the myproj-sue update properties, but the change is included anyway through its history relationship, then both the task and the object version are specified implicitly in the project. Objects associated with an implicitly specified task are not included in the project automatically.

Conflicts

Suppose that you are preparing to release your project. You specify that the release contain tasks 72 and 23, but you do not specify task 58. After your build, task 58 is included in the application. Rational Synergy can warn you that a task you did not request is included. This is called a conflict.

There are many different types of conflicts. If you had manually used main.c-5 in the project, but the project update properties did not explicitly specify task 86, and no other tasks that you had explicitly specified depended on task 86, that would be another type of conflict. Rational Synergy can warn you that it appears that an object version has been used in your project, rather than its task being explicitly specified.

Some conflicts are more serious than others.

For example, your team might decide to fix no more than one bug in a single version of a file. Further, your team requires each developer to associate only one task with each object version they change. If an object version is associated with more than one task, you must know so that you can remind the developer about the requirement. However, it is not a severe conflict, since the software you are preparing for the release contains all the changes it needs.

A more serious conflict is an implicitly included object version that is not associated with any task.

Rational Synergy can warn you about both types of conflicts.

Parallel conflicts

One of the most important types of conflict detection is detecting parallel object versions.

If your project has explicitly specified a change and it is not included, that is a serious conflict. For example, consider a situation where two parallel objects are associated with two different tasks, and both tasks are explicitly specified. In this example, assume myproj-sue contains bar.c-3. The bar.c object has the history relationships and task associations shown in the following figure.

object history relationships and task associations

The myproj-sue project update properties specify to include tasks 58 and 86. Your project includes only bar.c-3, which is associated with task 58. It is impossible for it also to include bar.c-2.1, which is associated with task 86, because that is a parallel branch. There is no one version of bar.c that contains both changes you have requested. This conflict is severe because a required object version is missing from your project.

Parallel conflicts can mean missing changes, but there are other types of missing changes as well.

Missing changes

Consider what would happen if you manually included bar.c-2.1 in the myproj-sue project. Changes for tasks 58 and 86 would be missing, although they were explicitly specified, because they are newer than the version of the object currently in the project.

This change is explicitly specified, but missing. You might also notice the missing changes if you looked for them in the tasks included in the project update properties. Other types of conflicts are even more difficult to detect.

If you refreshed the project update properties on myproj-sue to include tasks 86 and 36, rather than tasks 86 and 58, then ttask 58 is no longer explicitly specified. Task 86 is associated with main.c-5, and its predecessor is main.c-4, which is associated with task 72. So task 86 implicitly includes task 72. If your project includes main.c-5, it includes both changes, and everything is fine. But what about bar.c? bar.c-2.1 is specified explicitly because it is associated with task 86, and bar.c-3 is specified implicitly because it is associated with task 58 (which is implicitly included in your project). Therefore, there is again no version of bar.c that contains all of the changes that your project requested.

Large-scale conflict detection

Now consider a project with hundreds of object members, each of which has many versions in its history, and a release that comprises hundreds of tasks. No matter how careful your team is, the bigger your project, the greater the opportunity for errors. Common errors include conflicts due to parallel development (forgotten merges) or human error (forgotten object/task association). The solution is to find out about the errors and correct them before you build. Rational Synergy can detect conflicts on a large-scale project so that your team can resolve issues before they become problems (i.e., hold up the build).

Rational Synergy can detect 24 different conflicts, based on history relationships and task relationships. Other conflicts can exist, but are not severe, and they are not shown by default so users can concentrate on the conflicts that affect the software integrity. However, if you want to change the conflicts that are shown by default, your CM administrator can do so by changing the conflict_parameters model attribute.

A project is analyzed to determine whether it has any conflicts, then displays the conflicts.

Depending on the size and characteristics of your project, conflict detection can be time-consuming, so plan the best time to show conflicts. Build managers typically show conflicts after every update of a build management project. Developers might want to show conflicts if they suspect that their projects contain parallel versions or other conflicts that are causing problems.

To find a project, see Finding an object.

Procedure

  1. Right-click over the project or project grouping whose conflicts you want to view, point to Detect Membership Conflicts, and select Project Only or Project and Subprojects, whichever is appropriate.

    If conflicts are detected, the Membership Conflicts dialog box displays.

    Each conflict is in a category and contains a specific conflict message to help you determine the cause of the problem.

  2. In the Membership Conflicts dialog box, resolve conflicts.

    To choose a resolution, do one of the following:

    • Right-click over the conflict and choose the appropriate resolution.

      OR

    • Select a conflict and choose one of the active icons representing an appropriate resolution in the toolbar.

      Rational Synergy narrows your choices for resolving conflicts. When you select a conflict to resolve, only the resolutions that make sense for the selected conflict are available. For example, if you have an object conflict with an associated task in the Extra Changes category, you can use the recommended version or add the task to the project grouping. Other resolutions exist, but are inappropriate for the selected conflict.

      You can select more than one conflict, but you can see only the actions that are available for all of the selections. In some cases, no or multiple actions might resolve the conflicts selected, and then you must deal with each conflict individually.

      Another way to reduce the number of conflicts automatically is to show conflicts once per project grouping, even if the same conflicts are detected for multiple projects in the hierarchy.

      If you have several conflicts in the Missing Changes or Extra Changes categories, you can use the Use Recommended Version option for all of these conflicts by clicking Use Recommended Version icon. Using the recommended version brings in the same object version that an update would include. Sometimes this feature is safer to use than performing an update. After you have resolved all conflicts, then you can update all members of the hierarchy and run conflict detection again.

      If you have conflicts in the Bad Tasks category, you can use one of the following resolutions to resolve them. For a Task fixed by task not included conflict, the fix task is part of the update properties, but the task it fixes is not. Choose the Add Bad Task to Project Grouping resolution if either of the following are valid:

    • The bad task contains changes that you need in your project grouping.
    • The bad task is still excluded. When the task is completed, the exclusion is removed.

      If you have a Completed fix task not included conflict, then a bad task is included in the update properties, but the fix task is not. Choose the Remove Bad Task from Project Grouping resolution if any of the following are valid:

    • The bad task was excluded, but the user has turned off Auto Update for the project grouping; therefore, the bad task was not automatically removed.
    • The user who created the fix task forgot to exclude the bad task.
    • The fix tasks are not yet completed and a partial fix might be harmful.

      If the project or project grouping contains many conflicts, you can filter the conflicts. Click membership conflict icon and choose the criteria that you want to view (which filters out the rest of the criteria), such as Message, then use the list box to specify the conflict messages you want to view. To see all conflicts again, click membership conflict icon and choose Turn Off Filtering.

      If the column being filtered has 10 or fewer unique values, then the filter value is displayed in a list box. You can add an existing value; however, you can also enter your own value into that field. If the column has more than 10 unique values, a text field is displayed, and you can enter values to apply filtering. For more information about using Java™ regular expressions to filter the criteria, see Pattern matching and Rational Synergy.

      After you resolve a conflict, the Actioned column indicates that an action has taken place by showing a check in the corresponding check box. After you have resolved all appropriate conflicts (some conflicts might remain, depending on your team process), you are ready to run update and conflict detection again. Start by clicking update and rerun conflict detection icon.

      During and after conflict resolution, you will perform some of the following procedures. The order in which you follow the procedures might vary, but the topics show a typical workflow.

  3. View properties.

    Right-click over the conflict, and choose Properties.

    The Properties dialog box displays the properties for the object in conflict.

  4. View the history of the object.

    Right-click over the conflict, and choose History.

    The History dialog box appears. You can compare and merge parallel versions by using the icons at the top of the dialog box.

  5. Compare parallel versions.

    Right-click over the conflict, and choose Compare.

    The Compare dialog box displays the differences. After you have compared parallel versions, you are ready to merge parallels.

  6. Merge two parallel versions.

    Right-click over the conflict, and choose Merge.

    The Merge dialog box appears. When you merge parallel files, the new merged file is automatically associated with the current task and placed in your project.

  7. Update members and run conflict detection again.

    Use this feature to update members of the project or project grouping and run conflict detection again by clicking update and rerun conflict detection icon. If you are updating a project, you can update Project Only or Project and Subprojects. If you are updating a project grouping, you can update All Projects or All Projects and Subprojects.

    Run the operations after you have resolved several conflicts and are ready to update the project or project grouping with the membership changes caused by the resolutions.

  8. Run membership conflict detection again.

    Perform the Detect Membership Conflicts action again on the same project or project grouping by clicking detect membership conflicts icon.

    Run the operation to clear the original list of conflicts and populate it with any conflicts that remain in your project or project grouping.

What to do next

After no conflicts, or inconsequential conflicts, are detected, you are ready to build your product.

Feedback