/// <summary> /// </summary> /// <param name="name"></param> /// <param name="requiredVersion"></param> /// <param name="minimumVersion"></param> /// <param name="maximumVersion"></param> /// <param name="id"></param> /// <param name="request"></param> /// <returns></returns> public void FindPackage(string name, string requiredVersion, string minimumVersion, string maximumVersion, int id, ChocolateyRequest request) { // Nice-to-have put a debug message in that tells what's going on. request.Debug("Calling '{0}::FindPackage' '{1}','{2}','{3}','{4}','{5}'", PackageProviderName, name, requiredVersion, minimumVersion, maximumVersion, id); requiredVersion = requiredVersion.FixVersion(); if (!string.IsNullOrEmpty(requiredVersion)) { if (request.FindByCanonicalId && requiredVersion.IndexOfAny("()[],".ToCharArray()) == -1) { // when resolving packages via a canonical id, treat a lone version (ie 1.0 -> 1.0 <= x) string as a nuget version range: minimumVersion = requiredVersion; maximumVersion = null; requiredVersion = null; } else { minimumVersion = null; maximumVersion = null; } } else { minimumVersion = minimumVersion.FixVersion(); maximumVersion = maximumVersion.FixVersion(); } if (!IsValidVersionRange(minimumVersion, maximumVersion)) { request.Error(ErrorCategory.InvalidArgument, minimumVersion + maximumVersion, Constants.Messages.InvalidVersionRange, minimumVersion, maximumVersion); return; } // get the package by ID first. // if there are any packages, yield and return if (!string.IsNullOrWhiteSpace(name)) { if ( request.YieldPackages( request.GetPackageById(name, requiredVersion, minimumVersion, maximumVersion), name) || request.FoundPackageById) { // if we actaully found some by that id, but didn't make it past the filter, we're done. return; } } // have we been cancelled? if (request.IsCanceled) { return; } // Try searching for matches and returning those. request.YieldPackages(request.SearchForPackages(name, requiredVersion, minimumVersion, maximumVersion), name); request.Debug("Finished '{0}::FindPackage' '{1}','{2}','{3}','{4}','{5}'", PackageProviderName, name, requiredVersion, minimumVersion, maximumVersion, id); }