Reputation: 132
How to get ChangeSet(All files changes) from IWorkItem item by Program.
I want a list contains all the files that got change for a RTC. how can I achieve this?
Upvotes: 3
Views: 3255
Reputation: 1325057
You can see if this thread helps: (from the client side)
repository
is an ITeamRepository
mgr
is an IItemManager
(repository.itemManager()
)workItem
is the IWorkItem
for which we want changesetsitems
holds the set of associated changeset links for the workitem
Code:
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) {
...
}
You would still need to list files within each change set of items
.
you have some idea to list files in:
IConfiguration
from IChangeSet
?"Other sources:
Upvotes: 3
Reputation: 132
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();
}
Got answer from : https://jazz.net/library/article/1229
Upvotes: 0