Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 167574 Details for
Bug 222157
[planner] Projector should get fragments dependencies
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
New patch
222157-3.patch (text/plain), 8.63 KB, created by
Pascal Rapicault
on 2010-05-07 16:48:19 EDT
(
hide
)
Description:
New patch
Filename:
MIME Type:
Creator:
Pascal Rapicault
Created:
2010-05-07 16:48:19 EDT
Size:
8.63 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.equinox.p2.director >Index: src/org/eclipse/equinox/internal/p2/director/Projector.java >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/Projector.java,v >retrieving revision 1.66 >diff -u -r1.66 Projector.java >--- src/org/eclipse/equinox/internal/p2/director/Projector.java 7 May 2010 15:02:41 -0000 1.66 >+++ src/org/eclipse/equinox/internal/p2/director/Projector.java 7 May 2010 20:45:20 -0000 >@@ -404,6 +404,19 @@ > createNegationImplication(iu, matches, explanation); > } > >+ private void determinePotentialHostsForFragment(IInstallableUnit iu) { >+ // determine matching hosts only for fragments >+ if (!(iu instanceof IInstallableUnitFragment)) >+ return; >+ >+ IInstallableUnitFragment fragment = (IInstallableUnitFragment) iu; >+ // for each host requirement, find matches and remember them >+ for (IRequirement req : fragment.getHost()) { >+ List<IInstallableUnit> matches = getApplicableMatches(req); >+ rememberHostMatches((IInstallableUnitFragment) iu, matches); >+ } >+ } >+ > private void expandRequirement(IRequirement req, IInstallableUnit iu, List<AbstractVariable> optionalAbstractRequirements, boolean isRootIu) throws ContradictionException { > if (req.getMax() == 0) { > expandNegatedRequirement(req, iu, optionalAbstractRequirements, isRootIu); >@@ -412,9 +425,7 @@ > if (!isApplicable(req)) > return; > List<IInstallableUnit> matches = getApplicableMatches(req); >- if (isHostRequirement(iu, req)) { >- rememberHostMatches((IInstallableUnitFragment) iu, matches); >- } >+ determinePotentialHostsForFragment(iu); > if (req.getMin() > 0) { > if (matches.isEmpty()) { > if (iu == entryPoint && emptyBecauseFiltered) { >@@ -524,18 +535,21 @@ > } > > private Collection<IRequirement> getRequiredCapabilities(IInstallableUnit iu) { >- Collection<IRequirement> rqs = iu.getRequirements(); >- if (!considerMetaRequirements) >- return rqs; >- >- Collection<IRequirement> metaRqs = iu.getMetaRequirements(); >- if (metaRqs.isEmpty()) >- return rqs; >- >- ArrayList<IRequirement> aggregatedRqs = new ArrayList<IRequirement>(rqs.size() + metaRqs.size()); >- aggregatedRqs.addAll(rqs); >- aggregatedRqs.addAll(metaRqs); >- return aggregatedRqs; >+ boolean isFragment = iu instanceof IInstallableUnitFragment; >+ //Short-circuit for the case of an IInstallableUnit >+ if ((!isFragment) && iu.getMetaRequirements().size() == 0) >+ return iu.getRequirements(); >+ >+ ArrayList<IRequirement> aggregatedRequirements = new ArrayList<IRequirement>(iu.getRequirements().size() + iu.getMetaRequirements().size() + (isFragment ? ((IInstallableUnitFragment) iu).getHost().size() : 0)); >+ aggregatedRequirements.addAll(iu.getRequirements()); >+ >+ if (iu instanceof IInstallableUnitFragment) { >+ aggregatedRequirements.addAll(((IInstallableUnitFragment) iu).getHost()); >+ } >+ >+ if (considerMetaRequirements) >+ aggregatedRequirements.addAll(iu.getMetaRequirements()); >+ return aggregatedRequirements; > } > > static final class Pending { >@@ -585,9 +599,7 @@ > if (isApplicable(reqs[i][1])) { > IRequirement req = reqs[i][1]; > List<IInstallableUnit> matches = getApplicableMatches(req); >- if (isHostRequirement(iu, req)) { >- rememberHostMatches((IInstallableUnitFragment) iu, matches); >- } >+ determinePotentialHostsForFragment(iu); > if (req.getMin() > 0) { > if (matches.isEmpty()) { > missingRequirement(patch, req); >@@ -661,9 +673,7 @@ > } > > List<IInstallableUnit> matches = getApplicableMatches(req); >- if (isHostRequirement(iu, req)) { >- rememberHostMatches((IInstallableUnitFragment) iu, matches); >- } >+ determinePotentialHostsForFragment(iu); > if (req.getMin() > 0) { > if (matches.isEmpty()) { > dependencyHelper.implication(new Object[] {iu}).implies(patch).named(new Explanation.HardRequirement(iu, null)); >@@ -766,9 +776,7 @@ > } > IRequirement req = entry.getKey(); > List<IInstallableUnit> matches = getApplicableMatches(req); >- if (isHostRequirement(iu, req)) { >- rememberHostMatches((IInstallableUnitFragment) iu, matches); >- } >+ determinePotentialHostsForFragment(iu); > if (req.getMin() > 0) { > if (matches.isEmpty()) { > if (requiredPatches.isEmpty()) { >@@ -1176,16 +1184,4 @@ > } > existingMatches.retainAll(matches); > } >- >- private boolean isHostRequirement(IInstallableUnit iu, IRequirement req) { >- if (!(iu instanceof IInstallableUnitFragment)) >- return false; >- IInstallableUnitFragment fragment = (IInstallableUnitFragment) iu; >- for (IRequirement hostReqs : fragment.getHost()) { >- if (req.equals(hostReqs)) >- return true; >- } >- return false; >- } >- > } >\ No newline at end of file >Index: src/org/eclipse/equinox/internal/p2/director/Slicer.java >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/Slicer.java,v >retrieving revision 1.28 >diff -u -r1.28 Slicer.java >--- src/org/eclipse/equinox/internal/p2/director/Slicer.java 30 Apr 2010 08:11:59 -0000 1.28 >+++ src/org/eclipse/equinox/internal/p2/director/Slicer.java 7 May 2010 20:45:20 -0000 >@@ -16,6 +16,7 @@ > import org.eclipse.equinox.internal.p2.core.helpers.LogHelper; > import org.eclipse.equinox.internal.p2.core.helpers.Tracing; > import org.eclipse.equinox.internal.p2.metadata.InstallableUnit; >+import org.eclipse.equinox.internal.p2.metadata.InstallableUnitPatch; > import org.eclipse.equinox.p2.metadata.*; > import org.eclipse.equinox.p2.metadata.expression.IMatchExpression; > import org.eclipse.equinox.p2.query.*; >@@ -105,6 +106,7 @@ > > Map<Version, IInstallableUnit> iuSlice = slice.get(iu.getId()); > if (iuSlice == null) { >+ > iuSlice = new HashMap<Version, IInstallableUnit>(); > slice.put(iu.getId(), iuSlice); > } >@@ -113,7 +115,7 @@ > return; > } > >- Collection<IRequirement> reqs = getRequiredCapabilities(iu); >+ Collection<IRequirement> reqs = getRequirements(iu); > if (reqs.isEmpty()) > return; > for (IRequirement req : reqs) { >@@ -133,31 +135,30 @@ > return req.isGreedy(); > } > >- private Collection<IRequirement> getRequiredCapabilities(IInstallableUnit iu) { >- Collection<IRequirement> iuRequirements = iu.getRequirements(); >- int initialRequirementCount = iuRequirements.size(); >- if (!(iu instanceof IInstallableUnitPatch)) { >- if (!considerMetaRequirements) >- return iuRequirements; >- >- Collection<IRequirement> iuMetaRequirements = iu.getMetaRequirements(); >- int metaSize = iuMetaRequirements.size(); >- if (metaSize == 0) >- return iuRequirements; >- >- ArrayList<IRequirement> aggregatedCapabilities = new ArrayList<IRequirement>(initialRequirementCount + metaSize); >- aggregatedCapabilities.addAll(iuRequirements); >- aggregatedCapabilities.addAll(iuMetaRequirements); >- return aggregatedCapabilities; >- } >- >- IInstallableUnitPatch patchIU = (IInstallableUnitPatch) iu; >- List<IRequirementChange> changes = patchIU.getRequirementsChange(); >- ArrayList<IRequirement> aggregatedCapabilities = new ArrayList<IRequirement>(initialRequirementCount + changes.size()); >- aggregatedCapabilities.addAll(iuRequirements); >- for (int i = 0; i < changes.size(); i++) >- aggregatedCapabilities.add(changes.get(i).newValue()); >- return aggregatedCapabilities; >+ private Collection<IRequirement> getRequirements(IInstallableUnit iu) { >+ boolean isPatch = iu instanceof IInstallableUnitPatch; >+ boolean isFragment = iu instanceof IInstallableUnitFragment; >+ //Short-circuit for the case of an IInstallableUnit >+ if ((!isFragment) && (!isPatch) && iu.getMetaRequirements().size() == 0) >+ return iu.getRequirements(); >+ >+ ArrayList<IRequirement> aggregatedRequirements = new ArrayList<IRequirement>(iu.getRequirements().size() + iu.getMetaRequirements().size() + (isFragment ? ((IInstallableUnitFragment) iu).getHost().size() : 0) + (isPatch ? ((IInstallableUnitPatch) iu).getRequirementsChange().size() : 0)); >+ aggregatedRequirements.addAll(iu.getRequirements()); >+ >+ if (iu instanceof IInstallableUnitFragment) { >+ aggregatedRequirements.addAll(((IInstallableUnitFragment) iu).getHost()); >+ } >+ >+ if (iu instanceof InstallableUnitPatch) { >+ IInstallableUnitPatch patchIU = (IInstallableUnitPatch) iu; >+ List<IRequirementChange> changes = patchIU.getRequirementsChange(); >+ for (int i = 0; i < changes.size(); i++) >+ aggregatedRequirements.add(changes.get(i).newValue()); >+ } >+ >+ if (considerMetaRequirements) >+ aggregatedRequirements.addAll(iu.getMetaRequirements()); >+ return aggregatedRequirements; > } > > private void expandRequirement(IInstallableUnit iu, IRequirement req) {
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 222157
:
163355
| 167574