View | Details | Raw Unified | Return to bug 298923 | Differences between
and this patch

Collapse All | Expand All

(-)a/plugin.properties (-2 / +6 lines)
Lines 1-5 Link Here
1
###############################################################################
1
###############################################################################
2
# Copyright (c) 2000, 2009 IBM Corporation and others.
2
# Copyright (c) 2000, 2010 IBM Corporation and others.
3
# All rights reserved. This program and the accompanying materials
3
# All rights reserved. This program and the accompanying materials
4
# are made available under the terms of the Eclipse Public License v1.0
4
# are made available under the terms of the Eclipse Public License v1.0
5
# which accompanies this distribution, and is available at
5
# which accompanies this distribution, and is available at
Lines 79-82 CompareWithEachOtherAction.tooltip= Compare the Selected Resources Link Here
79
79
80
ignoresTransferName= Team Ignored Resources Transfer
80
ignoresTransferName= Team Ignored Resources Transfer
81
81
82
PatchModel=Patch Contents
82
PatchModelProvider=Patch Contents
83
PatchNavigatorContent=Patch
84
PatchSyncParticipant=Patch
85
PatchSyncWizard=Synchronize with Patch
86
PatchSyncWizard_description=Synchronize resources with patch contents.
(-)a/plugin.xml (-12 / +12 lines)
Lines 571-594 Link Here
571
         point="org.eclipse.team.ui.synchronizeWizards">
571
         point="org.eclipse.team.ui.synchronizeWizards">
572
      <wizard
572
      <wizard
573
            class="org.eclipse.team.internal.ui.synchronize.patch.ApplyPatchSynchronizationWizard"
573
            class="org.eclipse.team.internal.ui.synchronize.patch.ApplyPatchSynchronizationWizard"
574
            description="description"
574
            description="%PatchSyncWizard_description"
575
            icon="icons/full/obj/resource_model.gif"
575
            icon="icons/full/obj/hunk_obj.gif"
576
            id="org.eclipse.team.ui.applyPatchWizard"
576
            id="org.eclipse.team.ui.applyPatchWizard"
577
            name="Apply Patch">
577
            name="%PatchSyncWizard">
578
      </wizard>
578
      </wizard>
579
   </extension>
579
   </extension>
580
   <extension
580
   <extension
581
         point="org.eclipse.team.ui.synchronizeParticipants">
581
         point="org.eclipse.team.ui.synchronizeParticipants">
582
      <participant
582
      <participant
583
            class="org.eclipse.team.internal.ui.synchronize.patch.ApplyPatchModelSynchronizeParticipant"
583
            class="org.eclipse.team.internal.ui.synchronize.patch.ApplyPatchModelSynchronizeParticipant"
584
            icon="icons/full/obj/hunk_obj.gif"
584
            id="org.eclipse.team.ui.applyPatchModelParticipant"
585
            id="org.eclipse.team.ui.applyPatchModelParticipant"
585
            name="Apply Patch Model Synchronize Participant"
586
            name="%PatchSyncParticipant"
586
            persistent="false">
587
            persistent="false">
587
      </participant>
588
      </participant>
588
   </extension>
589
   </extension>
589
   <extension
590
   <extension
590
         id="patchModel"
591
         id="patchModelProvider"
591
         name="%PatchModel"
592
         name="%PatchModelProvider"
592
         point="org.eclipse.core.resources.modelProviders">
593
         point="org.eclipse.core.resources.modelProviders">
593
      <modelProvider
594
      <modelProvider
594
            class="org.eclipse.team.internal.ui.synchronize.patch.PatchModelProvider"/>
595
            class="org.eclipse.team.internal.ui.synchronize.patch.PatchModelProvider"/>
Lines 603-612 Link Here
603
            point="org.eclipse.ui.navigator.navigatorContent">
604
            point="org.eclipse.ui.navigator.navigatorContent">
604
         <navigatorContent
605
         <navigatorContent
605
               contentProvider="org.eclipse.team.internal.ui.synchronize.patch.PatchSyncContentProvider"
606
               contentProvider="org.eclipse.team.internal.ui.synchronize.patch.PatchSyncContentProvider"
607
               icon="icons/full/obj/hunk_obj.gif"
606
               id="org.eclipse.team.ui.patchSyncNavigatorContent"
608
               id="org.eclipse.team.ui.patchSyncNavigatorContent"
607
               labelProvider="org.eclipse.team.internal.ui.synchronize.patch.PatchSyncLabelProvider"
609
               labelProvider="org.eclipse.team.internal.ui.synchronize.patch.PatchSyncLabelProvider"
608
               name="Patch"
610
               name="%PatchNavigatorContent"
609
               priority="highest">
611
               priority="normal">
610
            <override
612
            <override
611
                  policy="InvokeAlwaysRegardlessOfSuppressedExt"
613
                  policy="InvokeAlwaysRegardlessOfSuppressedExt"
612
                  suppressedExtensionId="org.eclipse.team.ui.resourceContent">
614
                  suppressedExtensionId="org.eclipse.team.ui.resourceContent">
Lines 628-636 Link Here
628
                  <instanceof
630
                  <instanceof
629
                        value="org.eclipse.team.internal.ui.synchronize.patch.PatchModelProvider">
631
                        value="org.eclipse.team.internal.ui.synchronize.patch.PatchModelProvider">
630
                  </instanceof>
632
                  </instanceof>
631
                  <instanceof
632
                        value="org.eclipse.core.resources.IResource">
633
                  </instanceof>               
634
               </or>
633
               </or>
635
            </enablement>
634
            </enablement>
636
         </navigatorContent>
635
         </navigatorContent>
Lines 685-691 Link Here
685
            point="org.eclipse.team.ui.teamContentProviders">
684
            point="org.eclipse.team.ui.teamContentProviders">
686
         <teamContentProvider
685
         <teamContentProvider
687
               contentExtensionId="org.eclipse.team.ui.patchSyncNavigatorContent"
686
               contentExtensionId="org.eclipse.team.ui.patchSyncNavigatorContent"
688
               modelProviderId="org.eclipse.team.ui.patchModel">
687
               icon="icons/full/obj/hunk_obj.gif"
688
               modelProviderId="org.eclipse.team.ui.patchModelProvider">
689
         </teamContentProvider>
689
         </teamContentProvider>
690
      </extension>	            
690
      </extension>	            
691
</plugin>
691
</plugin>
(-)a/src/org/eclipse/team/internal/ui/synchronize/patch/ApplyPatchSubscriber.java (-2 / +4 lines)
Lines 37-43 public class ApplyPatchSubscriber extends Subscriber { Link Here
37
		// FIXME: create instance, singleton 
37
		// FIXME: create instance, singleton 
38
		PatchWorkspace.create(ResourcesPlugin.getWorkspace().getRoot(), getPatcher());
38
		PatchWorkspace.create(ResourcesPlugin.getWorkspace().getRoot(), getPatcher());
39
	}
39
	}
40
	
40
41
	public String getName() {
41
	public String getName() {
42
		// TODO: change to something like '{0} patch applied'
42
		// TODO: change to something like '{0} patch applied'
43
		return "Apply Patch Subscriber"; //$NON-NLS-1$
43
		return "Apply Patch Subscriber"; //$NON-NLS-1$
Lines 67-72 public class ApplyPatchSubscriber extends Subscriber { Link Here
67
									// TODO: this will work only for files, what about excluding individual hunks?
67
									// TODO: this will work only for files, what about excluding individual hunks?
68
									if (!getPatcher().isEnabled(PatchModelProvider.getPatchObject(getLocal(), patcher)))
68
									if (!getPatcher().isEnabled(PatchModelProvider.getPatchObject(getLocal(), patcher)))
69
										return IN_SYNC;
69
										return IN_SYNC;
70
									if (getPatcher().getDiffResult(((PatchedFileVariant)getRemote()).getDiff()).containsProblems())
71
										return CONFLICTING;
70
									return super.calculateKind();
72
									return super.calculateKind();
71
								}
73
								}
72
							};
74
							};
Lines 126-132 public class ApplyPatchSubscriber extends Subscriber { Link Here
126
		System.out
128
		System.out
127
				.println(">> [ignored] ApplyPatchSubscriber.refresh: " + sb.toString()); //$NON-NLS-1$
129
				.println(">> [ignored] ApplyPatchSubscriber.refresh: " + sb.toString()); //$NON-NLS-1$
128
	}
130
	}
129
	
131
130
	public IResource[] roots() {
132
	public IResource[] roots() {
131
		IDiffElement[] children = PatchWorkspace.getInstance().getChildren();
133
		IDiffElement[] children = PatchWorkspace.getInstance().getChildren();
132
		Set roots = new HashSet();
134
		Set roots = new HashSet();
(-)a/src/org/eclipse/team/internal/ui/synchronize/patch/ApplyPatchSubscriberMergeContext.java (-24 / +25 lines)
Lines 10-21 Link Here
10
 *******************************************************************************/
10
 *******************************************************************************/
11
package org.eclipse.team.internal.ui.synchronize.patch;
11
package org.eclipse.team.internal.ui.synchronize.patch;
12
12
13
import org.eclipse.compare.internal.core.patch.DiffProject;
13
import org.eclipse.compare.internal.patch.WorkspacePatcher;
14
import org.eclipse.compare.internal.core.patch.FilePatch2;
15
import org.eclipse.compare.internal.patch.Patcher;
16
import org.eclipse.core.resources.*;
14
import org.eclipse.core.resources.*;
17
import org.eclipse.core.runtime.CoreException;
15
import org.eclipse.core.runtime.CoreException;
18
import org.eclipse.core.runtime.IProgressMonitor;
16
import org.eclipse.core.runtime.IProgressMonitor;
17
import org.eclipse.core.runtime.jobs.ISchedulingRule;
19
import org.eclipse.team.core.diff.IDiff;
18
import org.eclipse.team.core.diff.IDiff;
20
import org.eclipse.team.core.mapping.ISynchronizationScopeManager;
19
import org.eclipse.team.core.mapping.ISynchronizationScopeManager;
21
import org.eclipse.team.core.subscribers.Subscriber;
20
import org.eclipse.team.core.subscribers.Subscriber;
Lines 40-73 class ApplyPatchSubscriberMergeContext extends SubscriberMergeContext { Link Here
40
	protected void makeInSync(IDiff diff, IProgressMonitor monitor)
39
	protected void makeInSync(IDiff diff, IProgressMonitor monitor)
41
			throws CoreException {
40
			throws CoreException {
42
		IResource resource = getDiffTree().getResource(diff);
41
		IResource resource = getDiffTree().getResource(diff);
43
		// IDiffElement element = PatchModelProvider.createModelObject(resource);
42
		WorkspacePatcher patcher = ((ApplyPatchSubscriber) getSubscriber())
44
		Patcher patcher = ((ApplyPatchSubscriber)getSubscriber()).getPatcher();
43
				.getPatcher();
45
		FilePatch2[] diffs = patcher.getDiffs();
44
		Object object = PatchModelProvider.getPatchObject(resource, patcher);
46
		if (resource.getType() == IResource.FILE) {
45
		patcher.setEnabled(object, false);
47
			for (int i = 0; i < diffs.length; i++) {
48
				if (diffs[i] instanceof FilePatch2) {
49
					DiffProject diffProject = diffs[i].getProject();
50
					IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(diffProject.getName());
51
					IFile file = project.getFile(diffs[i].getPath(patcher.isReversed()));
52
					if (file.equals(resource)) {
53
						patcher.setEnabled(diffs[i], false);
54
						System.out.println(">> ApplyPatchSubscriberMergeContext.makeInSync: disable " + diffs[i]); //$NON-NLS-1$
55
					}
56
				}
57
			}
58
		}
59
	}
46
	}
60
47
61
	public void markAsMerged(IDiff node, boolean inSyncHint,
48
	public void markAsMerged(IDiff node, boolean inSyncHint,
62
			IProgressMonitor monitor) throws CoreException {
49
			IProgressMonitor monitor) throws CoreException {
63
		// TODO Auto-generated method stub
50
		// this action is not shown
64
		System.out
65
				.println(">> [ignore] ApplyPatchSubscriberMergeContext.markAsMerged: " + node.toDiffString() + ", inSyncHint " + inSyncHint); //$NON-NLS-1$ //$NON-NLS-2$
66
	}
51
	}
67
52
68
	public void reject(IDiff diff, IProgressMonitor monitor)
53
	public void reject(IDiff diff, IProgressMonitor monitor)
69
			throws CoreException {
54
			throws CoreException {
70
		// TODO Auto-generated method stub
55
		// do nothing
71
		System.out.println(">> [ignore] ApplyPatchSubscriberMergeContext.reject: " + diff.toDiffString()); //$NON-NLS-1$
56
	}
57
58
	public ISchedulingRule getMergeRule(IDiff diff) {
59
		IResource resource = getDiffTree().getResource(diff);
60
		IResourceRuleFactory ruleFactory = ResourcesPlugin.getWorkspace()
61
				.getRuleFactory();
62
		if (!resource.exists()) {
63
			// for additions return rule for all parents that need to be created
64
			IContainer parent = resource.getParent();
65
			while (!parent.exists()) {
66
				resource = parent;
67
				parent = parent.getParent();
68
			}
69
			return ruleFactory.createRule(resource);
70
		} else {
71
			return super.getMergeRule(diff);
72
		}
72
	}
73
	}
73
}
74
}
(-)a/src/org/eclipse/team/internal/ui/synchronize/patch/PatchModelProvider.java (-9 / +10 lines)
Lines 13-29 package org.eclipse.team.internal.ui.synchronize.patch; Link Here
13
import org.eclipse.compare.internal.core.patch.*;
13
import org.eclipse.compare.internal.core.patch.*;
14
import org.eclipse.compare.internal.patch.*;
14
import org.eclipse.compare.internal.patch.*;
15
import org.eclipse.compare.structuremergeviewer.IDiffElement;
15
import org.eclipse.compare.structuremergeviewer.IDiffElement;
16
import org.eclipse.core.resources.IFile;
16
import org.eclipse.core.resources.*;
17
import org.eclipse.core.resources.IResource;
18
import org.eclipse.core.resources.mapping.ModelProvider;
17
import org.eclipse.core.resources.mapping.ModelProvider;
19
import org.eclipse.core.resources.mapping.ResourceMapping;
18
import org.eclipse.core.resources.mapping.ResourceMapping;
20
import org.eclipse.core.runtime.CoreException;
19
import org.eclipse.core.runtime.CoreException;
21
import org.eclipse.core.runtime.IPath;
22
import org.eclipse.team.internal.core.TeamPlugin;
20
import org.eclipse.team.internal.core.TeamPlugin;
23
21
24
public class PatchModelProvider extends ModelProvider {
22
public class PatchModelProvider extends ModelProvider {
25
23
26
	public static final String ID = "org.eclipse.team.ui.patchModel"; //$NON-NLS-1$
24
	public static final String ID = "org.eclipse.team.ui.patchModelProvider"; //$NON-NLS-1$
27
	private static PatchModelProvider provider;
25
	private static PatchModelProvider provider;
28
26
29
	public static PatchModelProvider getProvider() {
27
	public static PatchModelProvider getProvider() {
Lines 95-103 public class PatchModelProvider extends ModelProvider { Link Here
95
					for (int j = 0; j < c.length; j++) {
93
					for (int j = 0; j < c.length; j++) {
96
						FileDiffResult diffResult = ((PatchFileDiffNode) c[j])
94
						FileDiffResult diffResult = ((PatchFileDiffNode) c[j])
97
							.getDiffResult();
95
							.getDiffResult();
98
					IFile file = ((WorkspaceFileDiffResult) diffResult)
96
						IFile file = ((WorkspaceFileDiffResult) diffResult)
99
							.getTargetFile();
97
							.getTargetFile();
100
					if (resource.equals(file)) {
98
						if (resource.equals(file)) {
101
							return c[j];
99
							return c[j];
102
						}
100
						}
103
					}
101
					}
Lines 154-167 public class PatchModelProvider extends ModelProvider { Link Here
154
		case IResource.FILE: {
152
		case IResource.FILE: {
155
			FilePatch2[] diffs = patcher.getDiffs();
153
			FilePatch2[] diffs = patcher.getDiffs();
156
			for (int i = 0; i < diffs.length; i++) {
154
			for (int i = 0; i < diffs.length; i++) {
157
				IPath path = diffs[i].getPath(patcher.isReversed());
155
				if (diffs[i] instanceof FilePatch2) {
158
				// TODO: check project first!
156
					DiffProject diffProject = diffs[i].getProject();
159
					if (resource.getProjectRelativePath().equals(path)) {
157
					IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(diffProject.getName());
158
					IFile file = project.getFile(diffs[i].getPath(patcher.isReversed()));
159
					if (file.equals(resource)) {
160
						return diffs[i];
160
						return diffs[i];
161
					}
161
					}
162
				}
162
				}
163
			}
163
			}
164
		}
164
		}
165
		}
165
		return null;
166
		return null;
166
	}
167
	}
167
}
168
}
(-)a/src/org/eclipse/team/internal/ui/synchronize/patch/PatchSyncContentProvider.java (-79 / +3 lines)
Lines 10-20 Link Here
10
 *******************************************************************************/
10
 *******************************************************************************/
11
package org.eclipse.team.internal.ui.synchronize.patch;
11
package org.eclipse.team.internal.ui.synchronize.patch;
12
12
13
import java.util.*;
14
15
import org.eclipse.compare.internal.patch.PatchDiffNode;
13
import org.eclipse.compare.internal.patch.PatchDiffNode;
16
import org.eclipse.compare.structuremergeviewer.IDiffElement;
14
import org.eclipse.compare.structuremergeviewer.IDiffElement;
17
import org.eclipse.core.resources.IProject;
18
import org.eclipse.core.resources.IResource;
15
import org.eclipse.core.resources.IResource;
19
import org.eclipse.core.resources.mapping.*;
16
import org.eclipse.core.resources.mapping.*;
20
import org.eclipse.core.runtime.CoreException;
17
import org.eclipse.core.runtime.CoreException;
Lines 23-42 import org.eclipse.jface.viewers.ITreeContentProvider; Link Here
23
import org.eclipse.team.core.mapping.ISynchronizationContext;
20
import org.eclipse.team.core.mapping.ISynchronizationContext;
24
import org.eclipse.team.core.mapping.ISynchronizationScope;
21
import org.eclipse.team.core.mapping.ISynchronizationScope;
25
import org.eclipse.team.internal.ui.TeamUIPlugin;
22
import org.eclipse.team.internal.ui.TeamUIPlugin;
26
import org.eclipse.team.internal.ui.Utils;
27
import org.eclipse.team.internal.ui.mapping.SynchronizationResourceMappingContext;
23
import org.eclipse.team.internal.ui.mapping.SynchronizationResourceMappingContext;
28
import org.eclipse.team.ui.mapping.SynchronizationContentProvider;
24
import org.eclipse.team.ui.mapping.SynchronizationContentProvider;
29
import org.eclipse.ui.navigator.*;
25
import org.eclipse.ui.navigator.ICommonContentExtensionSite;
30
26
31
public class PatchSyncContentProvider extends SynchronizationContentProvider
27
public class PatchSyncContentProvider extends SynchronizationContentProvider {
32
		implements IPipelinedTreeContentProvider {
33
28
34
	private PatchWorkbenchContentProvider delegate;
29
	private PatchWorkbenchContentProvider delegate;
35
30
36
	public PatchSyncContentProvider() {
37
		super();
38
	}
39
40
	public void init(ICommonContentExtensionSite site) {
31
	public void init(ICommonContentExtensionSite site) {
41
		super.init(site);
32
		super.init(site);
42
		delegate = new PatchWorkbenchContentProvider(/*getPatcher()*/);
33
		delegate = new PatchWorkbenchContentProvider(/*getPatcher()*/);
Lines 56-62 public class PatchSyncContentProvider extends SynchronizationContentProvider Link Here
56
	protected String getModelProviderId() {
47
	protected String getModelProviderId() {
57
		return PatchModelProvider.ID;
48
		return PatchModelProvider.ID;
58
	}
49
	}
59
	
50
60
	protected Object getModelRoot() {
51
	protected Object getModelRoot() {
61
		return PatchWorkspace.getInstance();
52
		return PatchWorkspace.getInstance();
62
	}
53
	}
Lines 93-165 public class PatchSyncContentProvider extends SynchronizationContentProvider Link Here
93
		return super.getChildrenInContext(context, parent, children);
84
		return super.getChildrenInContext(context, parent, children);
94
	}
85
	}
95
86
96
	public void getPipelinedChildren(Object aParent, Set theCurrentChildren) {
97
		// Nothing to do
98
	}
99
100
	public void getPipelinedElements(Object anInput, Set theCurrentElements) {
101
		if (anInput instanceof ISynchronizationContext) {
102
			// Do not show hunks when all models are visible
103
			//XXX
104
			return;
105
		} else if (anInput == getModelProvider()) {
106
			List newProjects = new ArrayList();
107
			for (Iterator iter = theCurrentElements.iterator(); iter.hasNext();) {
108
				Object element = iter.next();
109
				IResource[] resources = Utils.getContributedResources(new Object[] {element});
110
				//TODO: what about the rest?
111
				IResource resource = resources[0];
112
				if (resource instanceof IProject) {
113
					IProject project = (IProject) resource;
114
					IDiffElement diffProject = PatchModelProvider.getModelObject(project/*, getPatcher()*/);
115
					if (diffProject != null) {
116
						iter.remove();
117
						newProjects.add(diffProject);
118
					}
119
				}
120
			}
121
			theCurrentElements.addAll(newProjects);
122
		} else if (anInput instanceof ISynchronizationScope) {
123
			// When the root is a scope, we should return
124
			// our model provider so all model providers appear
125
			// at the root of the viewer.
126
			theCurrentElements.add(getModelProvider());
127
		}
128
	}
129
	
130
	public Object getPipelinedParent(Object anObject, Object aSuggestedParent) {
131
		// TODO Auto-generated method stub
132
		System.out
133
				.println(">> [aSuggestedParent] PatchSyncContentProvider.getPipelinedParent: aSuggestedParent-> " + aSuggestedParent); //$NON-NLS-1$
134
		return aSuggestedParent;
135
	}
136
137
	public PipelinedShapeModification interceptAdd(
138
			PipelinedShapeModification anAddModification) {
139
		// TODO Auto-generated method stub
140
		System.out
141
				.println(">> [null] PatchSyncContentProvider.interceptAdd: anAddModification-> " + anAddModification); //$NON-NLS-1$
142
		return null;
143
	}
144
145
	public boolean interceptRefresh(
146
			PipelinedViewerUpdate aRefreshSynchronization) {
147
		// No need to intercept the refresh
148
		return false;
149
	}
150
151
	public PipelinedShapeModification interceptRemove(
152
			PipelinedShapeModification aRemoveModification) {
153
		return aRemoveModification;
154
	}
155
156
	public boolean interceptUpdate(PipelinedViewerUpdate anUpdateSynchronization) {
157
		// No need to intercept the update
158
		System.out
159
				.println(">> [false] PatchSyncContentProvider.interceptUpdate: anUpdateSynchronization-> " + anUpdateSynchronization); //$NON-NLS-1$
160
		return false;
161
	}
162
163
	protected boolean isInScope(ISynchronizationScope scope, Object parent,
87
	protected boolean isInScope(ISynchronizationScope scope, Object parent,
164
			Object element) {
88
			Object element) {
165
		if (element instanceof PatchDiffNode) {
89
		if (element instanceof PatchDiffNode) {
(-)a/src/org/eclipse/team/internal/ui/synchronize/patch/PatchedFileVariantComparator.java (-1 / +1 lines)
Lines 31-34 public class PatchedFileVariantComparator implements IResourceVariantComparator Link Here
31
	public boolean isThreeWay() {
31
	public boolean isThreeWay() {
32
		return true;
32
		return true;
33
	}
33
	}
34
}
34
}

Return to bug 298923