プログラムで IWorkItem アイテムから ChangeSet (すべてのファイルの変更) を取得する方法。
RTC で変更されたすべてのファイルを含むリストが必要です。どうすればこれを達成できますか?
このスレッドが役立つかどうかを確認できます: (クライアント側から)
repository
ですITeamRepository
mgr
IItemManager
( repository.itemManager()
)ですworkItem
IWorkItem
変更セットが必要なitems
に関連付けられた変更セット リンクのセットを保持します。workitem
コード:
IClientLibraryContext ctx = (IClientLibraryContext)repository;
IQueryService svc = (IQueryService)ctx.getServiceInterface(IQueryService.class);
AuditableLinkQueryModel alqr = AuditableLinkQueryModel.ROOT;
IItemQuery iq = IItemQuery.FACTORY.newInstance(alqr);
iq.filter(alqr.name()._eq("com.ibm.team.filesystem.workitems.change_set").
_and( alqr.targetRef().referencedItem().itemId()._eq(iq.newUUIDArg())));
IItemQueryPage itemQueryPage = svc.queryItems(
iq,
new Object[] { workItem.getItemId() },
IQueryService.ITEM_QUERY_MAX_PAGE_SIZE);
List<IChangeSet> items = mgr.fetchCompleteItems(itemQueryPage.getItemHandles(),
mgr.DEFAULT, null);
Set<String> changedFilesAndFolders = new TreeSet<String>();
for (IChangeSet cs: changeSets) {
...
}
の各変更セット内のファイルを一覧表示する必要がありますitems
。
ファイルをリストするアイデアがあります:
その他の情報源:
private String getChangeSetFiles(IWorkItem workItem, ProjectContext ctx) throws TeamRepositoryException {
ILinkManager linkManager = (ILinkManager) ctx.repository.getClientLibrary(ILinkManager.class);
IWorkspaceManager workspaceManager = (IWorkspaceManager)ctx.repository.getClientLibrary(IWorkspaceManager.class);
IItemReference workItemReference = linkManager.referenceFactory().createReferenceToItem(workItem);
ILinkCollection linkCollection = linkManager.findLinksByTarget(ILinkConstants.CHANGESET_WORKITEM_LINKTYPE_ID, workItemReference, new SysoutProgressMonitor()).getAllLinksFromHereOn();
if (linkCollection.isEmpty()) {
System.out.println("Work item has no change sets.");
System.exit(0);
}
List<IChangeSetHandle> changeSetHandles = new ArrayList<IChangeSetHandle>();
for (ILink link: linkCollection) {
// Change set links should be item references
IChangeSetHandle changeSetHandle = (IChangeSetHandle) link.getSourceRef().resolve();
changeSetHandles.add(changeSetHandle);
}
@SuppressWarnings("unchecked")
List<IChangeSet> changeSets = ctx.repository.itemManager().fetchCompleteItems(changeSetHandles, IItemManager.DEFAULT, new SysoutProgressMonitor());
Set<String> changedFilesAndFolders = new TreeSet<String>();
for (IChangeSet cs: changeSets) {
for (Object o: cs.changes()) {
IChange change = (IChange)o;
if (change.kind() != IChange.DELETE) {
IVersionableHandle after = change.afterState();
// Although versionable handles are item handles you cannot use the item
// manager to fetch the versionable from the handle. Instead, you use the
// versionable manager to do this.
IVersionable afterVersionable = workspaceManager.versionableManager().fetchCompleteState(after, new SysoutProgressMonitor());
changedFilesAndFolders.add(afterVersionable.getName());
}
// If there was a rename then include the old name in the list as well
if (change.kind() == IChange.RENAME
|| change.kind() == IChange.DELETE) {
IVersionableHandle before = change.beforeState();
IVersionable beforeVersionable = workspaceManager.versionableManager().fetchCompleteState(before, new SysoutProgressMonitor());
changedFilesAndFolders.add(beforeVersionable.getName());
}
}
}
StringBuffer sb= new StringBuffer();
for (String fileOrFilderName: changedFilesAndFolders) {
sb.append(fileOrFilderName+"\n");
System.out.println("\t"+fileOrFilderName);
}
return sb.toString();
}
から回答を得ました: https://jazz.net/library/article/1229