public void FindPackage(string name, string requiredVersion, string minimumVersion, string maximumVersion, int id, BootstrapRequest request) { if (request == null) { throw new ArgumentNullException("request"); } request.Verbose(Resources.Messages.FindingPackage, string.Format(CultureInfo.CurrentCulture, "{0}::FindPackage' '{1}','{2}','{3}','{4}'", PackageProviderName, name, requiredVersion, minimumVersion, maximumVersion)); if (name != null && name.EqualsIgnoreCase("PackageManagement")) { // they are looking for PackageManagement itself. // future todo: let PackageManagement update itself. return; } if (request.LocalSource.Any()) { // find a provider from given path request.FindProviderFromFile(name, requiredVersion, minimumVersion, maximumVersion); return; } // are they are looking for a specific provider? if (string.IsNullOrWhiteSpace(name) || WildcardPattern.ContainsWildcardCharacters(name)) { // no, return all providers that match the range. var wildcardPattern = new WildcardPattern(name, WildcardOptions); if (request.GetOptionValue("AllVersions").IsTrue()) { // Feed.Query() can return an empty provider, so here we need to execlude it by checking p.Name !=null or empty. foreach (var p in request.Providers.Distinct(PackageEqualityComparer).Where(p => !string.IsNullOrWhiteSpace(p.Name) && (string.IsNullOrWhiteSpace(name) || wildcardPattern.IsMatch(p.Name)))) { FindPackage(p.Name, null, "0.0", null, 0, request); } return; } if (request.Providers.Distinct(PackageEqualityComparer).Where(p => string.IsNullOrWhiteSpace(name) || wildcardPattern.IsMatch(p.Name)).Any(p => !request.YieldFromSwidtag(p, requiredVersion, minimumVersion, maximumVersion, name))) { // if there is a problem, exit. return; } } else { // return just the one they asked for. // asked for a specific version? if (!string.IsNullOrWhiteSpace(requiredVersion)) { request.YieldFromSwidtag(request.GetProvider(name, requiredVersion), name); return; } if (request.GetOptionValue("AllVersions").IsTrue()) { if (request.GetProviderAll(name, minimumVersion, maximumVersion).Distinct(PackageEqualityComparer).Any(provider => !request.YieldFromSwidtag(provider, name))) { // if there is a problem, exit. return; } return; } // asked for a version range? if (!string.IsNullOrWhiteSpace(minimumVersion) || !string.IsNullOrEmpty(maximumVersion)) { if (request.GetProvider(name, minimumVersion, maximumVersion).Distinct(PackageEqualityComparer).Any(provider => !request.YieldFromSwidtag(provider, name))) { // if there is a problem, exit. return; } return; } // just return by name request.YieldFromSwidtag(request.GetProvider(name), name); } // return any matches in the name }
public void FindPackage(string name, string requiredVersion, string minimumVersion, string maximumVersion, int id, BootstrapRequest request) { if (request == null) { throw new ArgumentNullException("request"); } request.Verbose(Resources.Messages.FindingPackage, string.Format(CultureInfo.CurrentCulture, "{0}::FindPackage' '{1}','{2}','{3}','{4}'", PackageProviderName, name, requiredVersion, minimumVersion, maximumVersion)); if (name != null && name.EqualsIgnoreCase("PackageManagement")) { // they are looking for PackageManagement itself. // future todo: let PackageManagement update itself. return; } if (request.LocalSource.Any()) { // find a provider from given path request.FindProviderFromFile(name, requiredVersion, minimumVersion, maximumVersion); return; } // are they are looking for a specific provider? if (string.IsNullOrWhiteSpace(name) || WildcardPattern.ContainsWildcardCharacters(name)) { // no, return all providers that match the range. var wildcardPattern = new WildcardPattern(name, WildcardOptions); if (request.GetOptionValue("AllVersions").IsTrue()) { // Feed.Query() can return an empty provider, so here we need to exclude it by checking p.Name !=null or empty. foreach (var p in request.Providers.Distinct(PackageEqualityComparer).Where(p => !string.IsNullOrWhiteSpace(p.Name) && (string.IsNullOrWhiteSpace(name) || wildcardPattern.IsMatch(p.Name)))) { FindPackage(p.Name, null, "0.0", null, 0, request); } return; } if (request.Providers.Distinct(PackageEqualityComparer).Where(p => string.IsNullOrWhiteSpace(name) || wildcardPattern.IsMatch(p.Name)).Any(p => !request.YieldFromSwidtag(p, requiredVersion, minimumVersion, maximumVersion, name))) { // if there is a problem, exit. return; } } else { // return just the one they asked for. // asked for a specific version? if (!string.IsNullOrWhiteSpace(requiredVersion)) { request.YieldFromSwidtag(request.GetProvider(name, requiredVersion), name); return; } if (request.GetOptionValue("AllVersions").IsTrue()) { if (request.GetProviderAll(name, minimumVersion, maximumVersion).Distinct(PackageEqualityComparer).Any(provider => !request.YieldFromSwidtag(provider, name))) { // if there is a problem, exit. return; } return; } // asked for a version range? if (!string.IsNullOrWhiteSpace(minimumVersion) || !string.IsNullOrEmpty(maximumVersion)) { if (request.GetProvider(name, minimumVersion, maximumVersion).Distinct(PackageEqualityComparer).Any(provider => !request.YieldFromSwidtag(provider, name))) { // if there is a problem, exit. return; } return; } // just return by name request.YieldFromSwidtag(request.GetProvider(name), name); } // return any matches in the name }