diff options
author | Pascal Rapicault | 2010-05-26 21:39:22 +0000 |
---|---|---|
committer | Pascal Rapicault | 2010-05-26 21:39:22 +0000 |
commit | 3dd8a00b5641bf6ed86e6567967dd53539d519e7 (patch) | |
tree | b45bee583539712862015d306c214e5b47fd6ec5 | |
parent | 05cd92f15e1e9e2249a35adc5553caa51de8d74c (diff) | |
download | rt.equinox.p2-3dd8a00b5641bf6ed86e6567967dd53539d519e7.tar.gz rt.equinox.p2-3dd8a00b5641bf6ed86e6567967dd53539d519e7.tar.xz rt.equinox.p2-3dd8a00b5641bf6ed86e6567967dd53539d519e7.zip |
Bug 311393 - [engine] ProvisioningContext always perform reference following for artifact repositoriesv20100527
4 files changed, 25 insertions, 2 deletions
diff --git a/bundles/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/DirectorApplication.java b/bundles/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/DirectorApplication.java index 8f400a55f..47cce150f 100644 --- a/bundles/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/DirectorApplication.java +++ b/bundles/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/DirectorApplication.java @@ -131,12 +131,15 @@ public class DirectorApplication implements IApplication { private static final CommandLineOption OPTION_P2_ARCH = new CommandLineOption(new String[] {"-p2.arch"}, null, Messages.Help_The_ARCH_when_profile_is_created); //$NON-NLS-1$ private static final CommandLineOption OPTION_P2_NL = new CommandLineOption(new String[] {"-p2.nl"}, null, Messages.Help_The_NL_when_profile_is_created); //$NON-NLS-1$ private static final CommandLineOption OPTION_PURGEHISTORY = new CommandLineOption(new String[] {"-purgeHistory"}, null, Messages.Help_Purge_the_install_registry); //$NON-NLS-1$ + private static final CommandLineOption OPTION_FOLLOW_REFERENCES = new CommandLineOption(new String[] {"-followReferences"}, null, Messages.Help_Follow_references); //$NON-NLS-1$ private static final Integer EXIT_ERROR = new Integer(13); static private final String FLAVOR_DEFAULT = "tooling"; //$NON-NLS-1$ static private final String PROP_P2_PROFILE = "eclipse.p2.profile"; //$NON-NLS-1$ static private final String NO_ARTIFACT_REPOSITORIES_AVAILABLE = "noArtifactRepositoriesAvailable"; //$NON-NLS-1$ + private static final String FOLLOW_ARTIFACT_REPOSITORY_REFERENCES = "org.eclipse.equinox.p2.director.followArtifactRepositoryReferences"; //$NON-NLS-1$ + public static final String LINE_SEPARATOR = System.getProperty("line.separator"); //$NON-NLS-1$ private static void getURIs(List<URI> uris, String spec) throws CoreException { @@ -214,6 +217,7 @@ public class DirectorApplication implements IApplication { private boolean roamingProfile = false; private boolean purgeRegistry = false; private boolean stackTrace = false; + private boolean followReferences = false; private String profileId; private String profileProperties; // a comma-separated list of property pairs "tag=value" private String ws; @@ -545,6 +549,8 @@ public class DirectorApplication implements IApplication { ProvisioningContext context = new ProvisioningContext(targetAgent); context.setMetadataRepositories(metadataRepositoryLocations.toArray(new URI[metadataRepositoryLocations.size()])); context.setArtifactRepositories(artifactRepositoryLocations.toArray(new URI[artifactRepositoryLocations.size()])); + context.setProperty(ProvisioningContext.FOLLOW_REPOSITORY_REFERENCES, String.valueOf(followReferences)); + context.setProperty(FOLLOW_ARTIFACT_REPOSITORY_REFERENCES, String.valueOf(followReferences)); ProfileChangeRequest request = buildProvisioningRequest(profile, installs, uninstalls); printRequest(request); planAndExecute(profile, context, request); @@ -714,6 +720,11 @@ public class DirectorApplication implements IApplication { continue; } + if (OPTION_FOLLOW_REFERENCES.isOption(opt)) { + followReferences = true; + continue; + } + if (OPTION_P2_OS.isOption(opt)) { os = getRequiredArgument(args, ++i); continue; @@ -838,6 +849,8 @@ public class DirectorApplication implements IApplication { ProvisioningContext context = new ProvisioningContext(targetAgent); context.setMetadataRepositories(metadataRepositoryLocations.toArray(new URI[metadataRepositoryLocations.size()])); context.setArtifactRepositories(artifactRepositoryLocations.toArray(new URI[artifactRepositoryLocations.size()])); + context.setProperty(ProvisioningContext.FOLLOW_REPOSITORY_REFERENCES, String.valueOf(followReferences)); + context.setProperty(FOLLOW_ARTIFACT_REPOSITORY_REFERENCES, String.valueOf(followReferences)); executePlan(context, plan); } @@ -918,7 +931,7 @@ public class DirectorApplication implements IApplication { } private void performHelpInfo() { - CommandLineOption[] allOptions = new CommandLineOption[] {OPTION_HELP, OPTION_LIST, OPTION_INSTALL_IU, OPTION_UNINSTALL_IU, OPTION_REVERT, OPTION_DESTINATION, OPTION_METADATAREPOS, OPTION_ARTIFACTREPOS, OPTION_REPOSITORIES, OPTION_VERIFY_ONLY, OPTION_PROFILE, OPTION_FLAVOR, OPTION_SHARED, OPTION_BUNDLEPOOL, OPTION_PROFILE_PROPS, OPTION_ROAMING, OPTION_P2_OS, OPTION_P2_WS, OPTION_P2_ARCH, OPTION_P2_NL, OPTION_PURGEHISTORY}; + CommandLineOption[] allOptions = new CommandLineOption[] {OPTION_HELP, OPTION_LIST, OPTION_INSTALL_IU, OPTION_UNINSTALL_IU, OPTION_REVERT, OPTION_DESTINATION, OPTION_METADATAREPOS, OPTION_ARTIFACTREPOS, OPTION_REPOSITORIES, OPTION_VERIFY_ONLY, OPTION_PROFILE, OPTION_FLAVOR, OPTION_SHARED, OPTION_BUNDLEPOOL, OPTION_PROFILE_PROPS, OPTION_ROAMING, OPTION_P2_OS, OPTION_P2_WS, OPTION_P2_ARCH, OPTION_P2_NL, OPTION_PURGEHISTORY, OPTION_FOLLOW_REFERENCES}; for (int i = 0; i < allOptions.length; ++i) { allOptions[i].appendHelp(System.out); } diff --git a/bundles/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/Messages.java b/bundles/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/Messages.java index a2eeec53d..8f3163b4c 100644 --- a/bundles/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/Messages.java +++ b/bundles/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/Messages.java @@ -52,6 +52,7 @@ public class Messages extends NLS { public static String Help_Revert_to_previous_state; public static String Help_Use_a_shared_location_for_the_install; public static String Help_Purge_the_install_registry; + public static String Help_Follow_references; public static String Ignored_repo; public static String Installing; diff --git a/bundles/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/messages.properties b/bundles/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/messages.properties index eae7a12ef..ab49951b5 100644 --- a/bundles/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/messages.properties +++ b/bundles/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/messages.properties @@ -54,6 +54,7 @@ Help_The_NL_when_profile_is_created=The language to use when the profile is crea Help_The_OS_when_profile_is_created=The OS to use when the profile is created. Help_The_WS_when_profile_is_created=The windowing system to use when the profile is created. Help_Purge_the_install_registry=Remove the history of the profile registry. +Help_Follow_references=Follow repository references. unable_to_parse_0_to_uri_1=Unable to parse {0} into an URI: {1}. unknown_option_0=Unknown option {0}. Use -help for a list of known options. Help_Missing_argument=The argument specifying what to install or uninstall is missing. diff --git a/bundles/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/ProvisioningContext.java b/bundles/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/ProvisioningContext.java index 47d55a0cc..ea11ce4a5 100644 --- a/bundles/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/ProvisioningContext.java +++ b/bundles/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/ProvisioningContext.java @@ -8,6 +8,7 @@ * Contributors: * IBM Corporation - initial API and implementation * WindRiver - https://bugs.eclipse.org/bugs/show_bug.cgi?id=227372 + * Sonatype, Inc. - ongoing development *******************************************************************************/ package org.eclipse.equinox.p2.engine; @@ -82,6 +83,8 @@ public class ProvisioningContext { */ public static final String FOLLOW_REPOSITORY_REFERENCES = "org.eclipse.equinox.p2.director.followRepositoryReferences"; //$NON-NLS-1$ + private static final String FOLLOW_ARTIFACT_REPOSITORY_REFERENCES = "org.eclipse.equinox.p2.director.followArtifactRepositoryReferences"; //$NON-NLS-1$ + /** * Creates a new provisioning context that includes all available metadata and * artifact repositories available to the specified provisioning agent. @@ -93,6 +96,7 @@ public class ProvisioningContext { // null repos means look at them all metadataRepositories = null; artifactRepositories = null; + setProperty(FOLLOW_ARTIFACT_REPOSITORY_REFERENCES, Boolean.TRUE.toString()); } /** @@ -162,7 +166,7 @@ public class ProvisioningContext { referencedArtifactRepositories.remove(repositories[i]); } // Are there any extra artifact repository references to consider? - if (referencedArtifactRepositories != null && referencedArtifactRepositories.size() > 0) { + if (referencedArtifactRepositories != null && referencedArtifactRepositories.size() > 0 && shouldFollowArtifactReferences()) { SubMonitor innerSub = SubMonitor.convert(sub.newChild(100), referencedArtifactRepositories.size() * 100); for (URI referencedURI : referencedArtifactRepositories.values()) { try { @@ -247,6 +251,10 @@ public class ProvisioningContext { return Boolean.valueOf(getProperty(FOLLOW_REPOSITORY_REFERENCES)).booleanValue(); } + private boolean shouldFollowArtifactReferences() { + return Boolean.valueOf(getProperty(FOLLOW_ARTIFACT_REPOSITORY_REFERENCES)).booleanValue(); + } + /** * Returns a queryable that can be used to obtain any metadata (installable units) * that are needed for the provisioning operation. |