Sun WorkShop TeamWare 2.1 User's Guide

Chapter 9 Resolving Conflicts

This chapter discusses the process by which the Configuring program detects conflicts and then assists you in resolving these conflicts.

The chapter covers the following topics:

Conflict Resolution Process

When files change concurrently in both a parent and child workspace, they are in conflict. Neither the version of the file in the child nor the version in the parent can be copied to the other without overwriting changes. Conflicts are detected during Bringover Update transactions. You must resolve conflicts in the child before the conflicting file(s) can be put back to the parent. The Configuring program assists you in resolving conflicts. Use the following procedures to resolve conflicts if you are using the GUI. If you are using the CLI, see the resolve(1) man page for more information.

Detecting Conflicts

Before you can resolve conflicts, Configuring must detect the conflict and prepare the history files of the conflicting files for resolving.

Detecting Conflicts During Bringover Update Transactions

Usually, the conflict resolution process begins when you attempt to put back files that have changed in both the parent and the child workspaces. The Putback transaction blocks the transfer of files from the child to the parent because the version of the file from the child will overwrite changes made in the parent.

After the Putback transaction is blocked, you must use the Bringover Update transaction to update the child. (If Putback is executed with the Auto Bringover option specified, then the Bringover transaction is initiated automatically by Configuring.) If, during the Bringover transaction, Configuring determines that the file in the child has also changed, a conflict exists. All files included in the Bringover Update transaction that are not in conflict are copied or updated normally.

Preparing Files for Conflict Resolution

When a conflict is encountered during a Bringover Update transaction, Configuring takes special steps to prepare that file so that you can resolve the conflict.

Configuring incorporates the deltas created in the parent into the SCCS history file in the child. The parent and child deltas are placed on separate branches in the child SCCS history file. After the deltas are merged, the history file in the child contains:

Access to the three deltas (common ancestor, parent, and child) in the child enables you to use the Resolve transaction and Merging to compare the parent and child deltas -- both to their common ancestor, and each to the other.

In addition to merging deltas, Configuring adds the name of the conflicted file to the child's Codemgr_wsdata/conflicts file. The conflicts file is a text file that contains the names of all files in that workspace with unresolved conflicts.

The stage is set for you to resolve the conflicts using the Resolve transaction.

Resolving Conflicts

You use two tools to resolve conflicts:

Resolve Transaction

The Resolve layout of the Transactions window facilitates resolving conflicts detected during Bringover Update transactions. The Resolve transaction coordinates the merging process, acting as intermediary between you and TeamWare Merging.

When Configuring detects a conflict during a Bringover Update transaction, it does the following:

By default, Configuring automatically processes sequentially the list of files from the File List pane. After you resolve a conflict, Configuring automatically begins to process the next file in the list. If you want to change the behavior so that it individually processes only files that you select explicitly, deselect the Auto Advance checkbox in the Resolve pane of the Tool Properties dialog box.

Conflicts need not be resolved immediately. You can continue to make changes and create new deltas in conflicted files in the child workspace. New deltas are created on a branch; when you finally resolve the conflict, the latest delta is the one merged with the version brought over from the parent. Conflicts must be resolved before you can put back the files to the parent.

When Configuring creates the new delta in the child SCCS history file, it includes the following standard comment:

 Merged changes between workspaces x and y

By default, Configuring does not prompt you for a comment to append to its comment. If you want to be prompted for comments that are appended to the standard comment, select the Prompt for Checkin Comments checkbox in the Resolve pane of the Tool Properties dialog box.

To resolve conflicts in a workspace:

  1. Double-click on the icon of a workspace that contains conflicted files.

    The Resolve layout of the Transaction window opens with the names of its conflicted files displayed in the File List pane.

  2. Select a file in the File List pane and click Merging.

    Configuring starts Merging and begins to process the list of files in the File List pane. For each file in the list, Configuring extracts the parent delta, the child delta, and the common ancestor from the SCCS history file and passes their path names to Merging. The Merging window opens with the files loaded and ready for merging.

  3. Use Merging to resolve the differences between the parent and child versions of the file.

    See Chapter 13, Starting Merging and Loading Files" for more information.

  4. Save the file in Merging.

    After you use Merging to resolve differences between the parent and child versions of the file, Configuring creates a new delta in the child SCCS history file and removes the file name from the conflicts file. The new delta contains the merged result you created using Merging.

Merging

This section is a brief introduction to Merging as used with Configuring. For a more detailed description, see Chapter 13, Starting Merging and Loading Files."

Merging Window

Merging displays two text files (the parent and child deltas) for side-by-side comparison, each in a read-only pane (see Figure 4-1). Beneath them is a pane that contains a merged version of the two files. The merged version contains selected lines from either or both deltas and can be edited to produce a final merged version.

Each delta in each of the top panes is shown in comparison to the common ancestor delta:

The common ancestor is the delta from which both the parent and child deltas are descended. This arrangement permits you to make a three-way comparison--each delta to the common ancestor, and each delta to the other.

Marking of Differences

Lines in each descendant are marked according to their relationship to the corresponding lines in the common ancestor:

When Merging discovers a line that differs between either of the two deltas and the ancestor, it marks with glyphs the lines in the two deltas and also in the automatically merged file. Together, these marked lines are called a difference. While Merging is focusing on a difference, it highlights the glyphs.

The difference on which Merging is focusing at any given time is called the current difference. The difference that appears immediately later in the file is called the next difference; the difference that appears immediately earlier in the file is called the previous difference.

Resolving Differences

While focusing on a difference, you can accept a line from either of the original deltas, or you can edit the merged version by hand. When you indicate that you are satisfied with your changes (by clicking on a control panel button), the current difference is said to be resolved. After a difference is resolved, Merging changes the glyphs that mark the difference to outline (hollow) font. Merging then automatically advances to the next difference (if the Auto Advance property is on), or moves to another difference of your choice.