Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/OpenChangeSetAction.java')
-rw-r--r--bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/OpenChangeSetAction.java44
1 files changed, 40 insertions, 4 deletions
diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/OpenChangeSetAction.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/OpenChangeSetAction.java
index 34dded90b..33014da39 100644
--- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/OpenChangeSetAction.java
+++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/OpenChangeSetAction.java
@@ -27,6 +27,7 @@ import org.eclipse.team.core.variants.IResourceVariant;
import org.eclipse.team.internal.ccvs.core.*;
import org.eclipse.team.internal.ccvs.ui.Policy;
import org.eclipse.team.internal.ccvs.ui.operations.RemoteCompareOperation.CompareTreeBuilder;
+import org.eclipse.team.internal.ccvs.ui.operations.RemoteLogOperation.LogEntryCache;
import org.eclipse.team.internal.ui.synchronize.ChangeSetDiffNode;
import org.eclipse.team.ui.synchronize.*;
@@ -72,10 +73,30 @@ class OpenChangeSetAction extends SynchronizeModelAction {
}
private ChangeSet getChangeSet(Object[] elements) {
- // TODO Auto-generated method stub
- return null;
+ ChangeSet foundSet = null;
+ for (int i = 0; i < elements.length; i++) {
+ Object object = elements[i];
+ ChangeSet set = getChangeSet((ISynchronizeModelElement)object);
+ if (set == null) return null;
+ if (foundSet == null) {
+ foundSet = set;
+ } else if (foundSet != set) {
+ return null;
+ }
+ }
+ return foundSet;
}
+ private ChangeSet getChangeSet(ISynchronizeModelElement element) {
+ if (element == null) return null;
+ if (element instanceof IAdaptable) {
+ ChangeSet set = (ChangeSet)((IAdaptable)element).getAdapter(ChangeSet.class);
+ if (set != null)
+ return set;
+ }
+ return getChangeSet((ISynchronizeModelElement)element.getParent());
+ }
+
/* (non-Javadoc)
* @see org.eclipse.team.ui.synchronize.SynchronizeModelAction#updateSelection(org.eclipse.jface.viewers.IStructuredSelection)
*/
@@ -167,7 +188,7 @@ class OpenChangeSetAction extends SynchronizeModelAction {
}
} else if (remote instanceof ICVSRemoteFile) {
try {
- ICVSRemoteFile predecessor = OpenChangeSetAction.this.provider.logs.getImmediatePredecessor((ICVSRemoteFile)remote);
+ ICVSRemoteFile predecessor = getImmediatePredecessor(remote);
builder.addToTrees(predecessor, (ICVSRemoteFile)remote);
} catch (TeamException e) {
handle(e);
@@ -178,5 +199,20 @@ class OpenChangeSetAction extends SynchronizeModelAction {
return true;
}
};
- }
+ }
+
+ private ICVSRemoteFile getImmediatePredecessor(IResourceVariant remote) throws TeamException {
+ CVSChangeSetCollector changeSetCollector = getChangeSetCollector();
+ if (changeSetCollector != null) {
+ LogEntryCache logs = changeSetCollector.getLogs();
+ if (logs != null)
+ return logs.getImmediatePredecessor((ICVSRemoteFile)remote);
+ }
+ return null;
+ }
+
+ private CVSChangeSetCollector getChangeSetCollector() {
+ return (CVSChangeSetCollector)getConfiguration().getProperty(CVSChangeSetCollector.CVS_CHECKED_IN_COLLECTOR);
+ }
+
} \ No newline at end of file

Back to the top