Elements can have multiple entries showing segments -- versions between a head and a basis representing promotion(s) against different issues while this issue has been active. (Elements with such multi-segments are shown collapsed by default, and can be expanded by clicking the plus (+) icon.)
So we need a way to express the idea that only the “recent changes” to brass.h, those in versions 10-14, are to be included in the change package. AccuRev accomplishes this by defining each change package entry using two versions: a user-specified head version and an older, automatically-determined basis version.
The AccuWork issue-management facility provides a logical place for keeping track of development activities for brass.h. Each task -- fixing a bug, creating a new feature, etc. -- is tracked by a particular AccuWork issue record. So AccuRev uses using issue records to implement change packages.
Each issue record includes a Changes section that acts as an “accumulator” for versions’ changes. Here’s how the above example of a change package would appear in an issue record’s form:
The change package for this new issue now includes multiple entries for one of the files, due to the introduction of multi-segments -- the ability of AccuRev change packages to track and correctly handle versions that are not necessarily related to the current changes.
AccuRev records change package entries automatically, whenever Promote is invoked in a workspace. For example, suppose issue record #3 represents a particular bug (and its fix). Whenever a developer promotes one or more versions whose changes address that bug, he specifies issue #3 at a prompt. AccuRev automatically creates a change package entry in issue #3 for each promoted version.
Also, you can manually add entries to a change package: right-click a version in the File Browser, Version Browser, or History Browser, and then select Send to Issue from the context menu. The selected version becomes the head version of the change package entry. AccuRev automatically determines the corresponding basis version. As the examples above suggest, AccuRev uses an algorithm that determines the set of “recent changes” to the element, made in a single workspace.
In the Version Browser, a variation of this operation, Send to Issue (specifying basis), enables you to pick the basis version, rather than allowing AccuRev to determine it automatically.
You can also invoke Send to Issue on the Changes tab of an issue record. This copies an existing change package entry to a different change package (issue record).
The reason that the descendant of the head version qualifies is that AccuRev assumes that changes made to an element remain in that element as subsequent versions are created. Suppose a change package entry consists of versions 13/4, 13/5, and 13/6 of some element. Another user then brings version 13/6 into her workspace with an
Update, and creates descendent version 49/2. It's fair to say that the change package entry is "in" her workspace, and in any stream to which version 49/2 is promoted.