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

Collapse All | Expand All

(-)src/org/eclipse/equinox/internal/p2/director/Explanation.java (-1 / +6 lines)
Lines 119-128 Link Here
119
	public static class MissingIU extends Explanation {
119
	public static class MissingIU extends Explanation {
120
		public final IInstallableUnit iu;
120
		public final IInstallableUnit iu;
121
		public final IRequirement req;
121
		public final IRequirement req;
122
		public boolean rootIu;
122
123
123
		public MissingIU(IInstallableUnit iu, IRequirement req) {
124
		public MissingIU(IInstallableUnit iu, IRequirement req, boolean rootIU) {
124
			this.iu = iu;
125
			this.iu = iu;
125
			this.req = req;
126
			this.req = req;
127
			this.rootIu = rootIu;
126
		}
128
		}
127
129
128
		public int orderValue() {
130
		public int orderValue() {
Lines 134-139 Link Here
134
		}
136
		}
135
137
136
		public String toString() {
138
		public String toString() {
139
			if (rootIu) {
140
				return NLS.bind(Messages.Explanation_missingRootRequired, req);
141
			}
137
			if (req.getFilter() == null) {
142
			if (req.getFilter() == null) {
138
				return NLS.bind(Messages.Explanation_missingRequired, iu, req);
143
				return NLS.bind(Messages.Explanation_missingRequired, iu, req);
139
			}
144
			}
(-)src/org/eclipse/equinox/internal/p2/director/Messages.java (+2 lines)
Lines 39-46 Link Here
39
	public static String Explanation_hardDependency;
39
	public static String Explanation_hardDependency;
40
	public static String Explanation_patchedHardDependency;
40
	public static String Explanation_patchedHardDependency;
41
	public static String Explanation_missingRequired;
41
	public static String Explanation_missingRequired;
42
	public static String Explanation_missingRootRequired;
42
	public static String Explanation_missingNonGreedyRequired;
43
	public static String Explanation_missingNonGreedyRequired;
43
	public static String Explanation_missingRequiredFilter;
44
	public static String Explanation_missingRequiredFilter;
45
	public static String Explanation_missingRootFilter;
44
	public static String Explanation_optionalDependency;
46
	public static String Explanation_optionalDependency;
45
	public static String Explanation_rootMissing;
47
	public static String Explanation_rootMissing;
46
	public static String Explanation_rootSingleton;
48
	public static String Explanation_rootSingleton;
(-)src/org/eclipse/equinox/internal/p2/director/Projector.java (-8 / +8 lines)
Lines 364-374 Link Here
364
		assumptions.add(iu);
364
		assumptions.add(iu);
365
	}
365
	}
366
366
367
	private void createNegation(IInstallableUnit iu, IRequirement req) throws ContradictionException {
367
	private void createNegation(IInstallableUnit iu, IRequirement req, boolean isRootIu) throws ContradictionException {
368
		if (DEBUG) {
368
		if (DEBUG) {
369
			Tracing.debug(iu + "=0"); //$NON-NLS-1$
369
			Tracing.debug(iu + "=0"); //$NON-NLS-1$
370
		}
370
		}
371
		dependencyHelper.setFalse(iu, new Explanation.MissingIU(iu, req));
371
		dependencyHelper.setFalse(iu, new Explanation.MissingIU(iu, req, isRootIu));
372
	}
372
	}
373
373
374
	// Check whether the requirement is applicable
374
	// Check whether the requirement is applicable
Lines 416-422 Link Here
416
		}
416
		}
417
		if (req.getMin() > 0) {
417
		if (req.getMin() > 0) {
418
			if (matches.isEmpty()) {
418
			if (matches.isEmpty()) {
419
				missingRequirement(iu, req);
419
				missingRequirement(iu, req, isRootIu);
420
			} else {
420
			} else {
421
				if (req.isGreedy()) {
421
				if (req.isGreedy()) {
422
					IInstallableUnit reqIu = matches.get(0);
422
					IInstallableUnit reqIu = matches.get(0);
Lines 503-509 Link Here
503
		}
503
		}
504
		iuSlice.put(iu.getVersion(), iu);
504
		iuSlice.put(iu.getVersion(), iu);
505
		if (!isApplicable(iu)) {
505
		if (!isApplicable(iu)) {
506
			createNegation(iu, null);
506
			createNegation(iu, null, isRootIU);
507
			return;
507
			return;
508
		}
508
		}
509
509
Lines 581-587 Link Here
581
					}
581
					}
582
					if (req.getMin() > 0) {
582
					if (req.getMin() > 0) {
583
						if (matches.isEmpty()) {
583
						if (matches.isEmpty()) {
584
							missingRequirement(patch, req);
584
							missingRequirement(patch, req, isRootIu);
585
						} else {
585
						} else {
586
							IInstallableUnit current;
586
							IInstallableUnit current;
587
							if (req.isGreedy()) {
587
							if (req.isGreedy()) {
Lines 763-769 Link Here
763
			if (req.getMin() > 0) {
763
			if (req.getMin() > 0) {
764
				if (matches.isEmpty()) {
764
				if (matches.isEmpty()) {
765
					if (requiredPatches.isEmpty()) {
765
					if (requiredPatches.isEmpty()) {
766
						missingRequirement(iu, req);
766
						missingRequirement(iu, req, isRootIu);
767
					} else {
767
					} else {
768
						createImplication(iu, requiredPatches, new Explanation.HardRequirement(iu, req));
768
						createImplication(iu, requiredPatches, new Explanation.HardRequirement(iu, req));
769
					}
769
					}
Lines 848-856 Link Here
848
		expandRequirement(req, iu, CollectionUtils.<AbstractVariable> emptyList(), isRootIu);
848
		expandRequirement(req, iu, CollectionUtils.<AbstractVariable> emptyList(), isRootIu);
849
	}
849
	}
850
850
851
	private void missingRequirement(IInstallableUnit iu, IRequirement req) throws ContradictionException {
851
	private void missingRequirement(IInstallableUnit iu, IRequirement req, boolean isRootIu) throws ContradictionException {
852
		result.add(new Status(IStatus.WARNING, DirectorActivator.PI_DIRECTOR, NLS.bind(Messages.Planner_Unsatisfied_dependency, iu, req)));
852
		result.add(new Status(IStatus.WARNING, DirectorActivator.PI_DIRECTOR, NLS.bind(Messages.Planner_Unsatisfied_dependency, iu, req)));
853
		createNegation(iu, req);
853
		createNegation(iu, req, isRootIu);
854
	}
854
	}
855
855
856
	/**
856
	/**
(-)src/org/eclipse/equinox/internal/p2/director/SimplePlanner.java (-2 / +6 lines)
Lines 316-323 Link Here
316
			IInstallableUnit[] availableIUs = gatherAvailableInstallableUnits(extraIUs.toArray(new IInstallableUnit[extraIUs.size()]), context, sub.newChild(ExpandWork / 4));
316
			IInstallableUnit[] availableIUs = gatherAvailableInstallableUnits(extraIUs.toArray(new IInstallableUnit[extraIUs.size()]), context, sub.newChild(ExpandWork / 4));
317
317
318
			Slicer slicer = new Slicer(new QueryableArray(availableIUs), newSelectionContext, satisfyMetaRequirements(profileChangeRequest.getProfileProperties()));
318
			Slicer slicer = new Slicer(new QueryableArray(availableIUs), newSelectionContext, satisfyMetaRequirements(profileChangeRequest.getProfileProperties()));
319
			IQueryable<IInstallableUnit> slice = slicer.slice(new IInstallableUnit[] {(IInstallableUnit) updatedPlan[0]}, sub.newChild(ExpandWork / 4));
319
			IInstallableUnit[] rootIus = new IInstallableUnit[profileChangeRequest.getAdditions().size() + 1];
320
			slicer.getNonGreedyIUs();
320
			profileChangeRequest.getAdditions().toArray(rootIus);
321
			rootIus[rootIus.length - 1] = (IInstallableUnit) updatedPlan[0];
322
			IQueryable<IInstallableUnit> slice = slicer.slice(rootIus, sub.newChild(ExpandWork / 4));
323
324
			// slicer.getNonGreedyIUs();
321
			if (slice == null) {
325
			if (slice == null) {
322
				IProvisioningPlan plan = engine.createPlan(profile, context);
326
				IProvisioningPlan plan = engine.createPlan(profile, context);
323
				plan.setStatus(slicer.getStatus());
327
				plan.setStatus(slicer.getStatus());
(-)src/org/eclipse/equinox/internal/p2/director/Slicer.java (-1 / +1 lines)
Lines 85-91 Link Here
85
	private void validateInput(IInstallableUnit[] ius) {
85
	private void validateInput(IInstallableUnit[] ius) {
86
		for (int i = 0; i < ius.length; i++) {
86
		for (int i = 0; i < ius.length; i++) {
87
			if (!isApplicable(ius[i]))
87
			if (!isApplicable(ius[i]))
88
				throw new IllegalStateException("The IU " + ius[i] + " can't be installed in this environment because its filter does not match."); //$NON-NLS-1$//$NON-NLS-2$
88
				throw new IllegalStateException(NLS.bind(Messages.Explanation_missingRootFilter, ius[i]));
89
		}
89
		}
90
	}
90
	}
91
91
(-)src/org/eclipse/equinox/internal/p2/director/messages.properties (+2 lines)
Lines 25-32 Link Here
25
Explanation_hardDependency=Cannot satisfy dependency: {0} depends on: {1}
25
Explanation_hardDependency=Cannot satisfy dependency: {0} depends on: {1}
26
Explanation_patchedHardDependency=Cannot satisfy patched ({0}) dependency: {1} depends on: {2}
26
Explanation_patchedHardDependency=Cannot satisfy patched ({0}) dependency: {1} depends on: {2}
27
Explanation_missingRequired=Missing requirement: {0} requires ''{1}'' but it could not be found
27
Explanation_missingRequired=Missing requirement: {0} requires ''{1}'' but it could not be found
28
Explanation_missingRootRequired=You requested to install ''{0}'' but it could not be found
28
Explanation_missingNonGreedyRequired=Missing non greedy requirement: ''{0}'' is required non greedily but it could not be found
29
Explanation_missingNonGreedyRequired=Missing non greedy requirement: ''{0}'' is required non greedily but it could not be found
29
Explanation_missingRequiredFilter=Missing requirement for filter {0}: {1} requires ''{2}'' but it could not be found
30
Explanation_missingRequiredFilter=Missing requirement for filter {0}: {1} requires ''{2}'' but it could not be found
31
Explanation_missingRootFilter=The IU {0} can't be installed in this environment because its filter does not match.
30
Explanation_optionalDependency=Optional dependency
32
Explanation_optionalDependency=Optional dependency
31
Explanation_rootMissing=Cannot complete the install because one or more required items could not be found.
33
Explanation_rootMissing=Cannot complete the install because one or more required items could not be found.
32
Explanation_rootSingleton=Cannot complete the install because of a conflicting dependency.
34
Explanation_rootSingleton=Cannot complete the install because of a conflicting dependency.

Return to bug 270668