将历史数据导入到 Rational Team Concert
既然我们拥有所有需要导出的数据,那么我们就可以开始使用 User.txt 文件将用户导入到 Rational Team Concert 之中。如果只有少部分用户的话,手动导入它们也许会更快。否则,如有需要您可以使用 Jazz APIs 来完成操作。
将缺陷或者特性导入到 Rational Team Concert
接下来,我们将会处理缺陷和特性导入。
- 分析每一个导出的缺陷或者特性数据文件,以得到基于 Defects/Features Mapping 规则的基本属性。您可以决定只转移您所感兴趣的字段,而不是所有的字段。代码清单 7 只给出了核心导入 Java 代码。
清单 7. 导入缺陷或者特性的核心 Java 代码
private static class WorkItemInitialization extends WorkItemOperation {
private WorkItemAttributes workItemAttr;
public WorkItemInitialization(WorkItemAttributes workItemAttr) {
super("Initializing Work Item");
this.workItemAttr = workItemAttr;
}
@Override
protected void execute(WorkItemWorkingCopy workingCopy,
IProgressMonitor monitor) throws TeamRepositoryException {
IWorkItem workItem= workingCopy.getWorkItem();
// set the work item attribute one by one
// …
}
}
// work item creation
WorkItemInitialization operation =
new WorkItemInitialization(WorkItemAttribute att);
IWorkItemHandle handle = operation.run(workItemTypeTask, null);
IWorkItem workItem =
auditableClient.resolveAuditable(handle, IWorkItem.FULL_PROFILE, null);
int def_fec_id_new = workItem.getId();
// record the return work item id and
// the old CMVC defect/feature name mapping.
sbFeatureMapping.append(def_fec_id + "\t" + def_fec_id_new + "\r\n"); |
- 调用 Rational Team Concert API 以创建工作项并记录返回的工作项 ID。您需要工作项 ID 以导入一个特定的代码版本。这就是说,我们将会使用为缺陷或者缺陷创建的工作项 ID 来检入每一个历史版本。
- 在那这后,将映射的工作项 ID 与 CMVC 缺陷号码写入到 Def_wrkitmID.txt 文件,如代码清单 8 所示。
清单 8. 缺陷名与工作项 ID 映射列表(范例)
20278 31 20279 32 20280 33 |
同样,将工作项 ID 与 CMVC 特性号码,映射到 Fea_wrkitmID.txt 文件,如代码清单 9 所示。
清单 9. 特性名与工作项 ID 映射列表
20226 34 19428 35 19167 36 19405 37 21318 38 20286 39 |
当您在导入源代码时,将会使用到这些 CMVC 缺陷或者特性号码以及 Rational Team Concert 工作项 ID 映射关系。与 CMVC 中缺陷或者特性相关的源代码文件,应该映射至 Rational Team Concert 之中的新工作项 ID。
现在我们拥有了版本历史信息文件,Path_historyver.txt。在我们的版本历史信息之中,文件路径的第一部分就是构件名,例如“build”与“src”。
- 在 Rational Team Concert 工作区中创建并共享构件文件夹,如图 6 所示。
图 6. Rational Team Concert 中的共享构件文件夹
- 在 Java 程序中导入源代码历史:
- 在 Path_historyver.txt 文件查看每一个源代码文件以及历史版本,并创建映射新工作项 ID 的原始缺陷或者特性的更改集。
- 将源代码放到 Rational Team Concert 工作区之中,releaseAWorkSpace,然后将代码变更交付到 Rational Team Concert releaseA 流程之中。
- 当您在创建更改集时,在注释中添加 CMVC 版本信息是一个不错的操作方式。
清单 10 显示了核心的导入 Java 快照。
清单 10. 导入源代码的核心 Java 片段
IFileItem fileItem = null;
if(isNewFile()) {
fileItem = (IFileItem) IFileItem.ITEM_TYPE.createItem();
} else {
fileItem = (IFileItem) workspaceConnection.configuration(myComponent)
.fetchPartialItem(fileItem, null, monitor);
fileItem = (IFileItem)fileItem.getWorkingCopy();
}
fileItem.setName(fileInfo.fileName);
fileItem.setParent(parentFolder);
FileLineDelimiter delimiter = FileLineDelimiter.LINE_DELIMITER_NONE;
IFileContent storedContent = contentManager.storeContent(
IFileContent.ENCODING_US_ASCII, delimiter,
new VersionedContentManagerByteArrayInputStreamPovider(
readFileToByteArray(fileInfo, version) ),
null, monitor);
fileItem.setContentType(IFileItem.CONTENT_TYPE_TEXT);
fileItem.setContent(storedContent);
fileItem.setFileTimestamp(new Date());
IChangeSetHandle changeSetHandle =
workspaceConnection.createChangeSet(myComponent, "--" + version.toString(),
false, monitor);
fileWorkItemmanager.createLink(workspace, changeSetHandle,
new IWorkItemHandle[]{handleWorkitem}, monitor);
// commit the change to workspace
workspaceConnection.commit(changeSetHandle,
Collections.singletonList(workspaceConnection.configurationOpFactory()
.save(fileItem)), monitor);
// deliver the changes to the stream
IChangeHistorySyncReport sync =
workspaceConnection.compareTo(streamConnection,
WorkspaceComparisonFlags.CHANGE_SET_COMPARISON_ONLY,
Collections.EMPTY_LIST, monitor);
workspaceConnection.deliver(streamConnection, sync, Collections.EMPTY_LIST,
sync.outgoingChangeSets(myComponent), monitor); |


