public static IEnumerable<IPackage> FindPackageVersions(this IPackageRepository packageRepository, IPackage package, bool allowPrereleaseVersions,
ref int skip, int minimalTake = 10)
{
Argument.IsNotNull(() => packageRepository);
if (skip < 0)
{
return Enumerable.Empty<IPackage>();
}
var queryable = packageRepository.GetPackages().Where(x => Equals(x.Id, package.Id)).Skip(skip).Take(minimalTake);
var result = new List<IPackage>(queryable.ToList());
if (result.Count < minimalTake)
{
skip = -1;
}
else
{
skip += minimalTake;
}
if (!allowPrereleaseVersions && result.Any())
{
result = result.Where(x => x.IsReleaseVersion()).ToList();
var count = result.Count;
if (skip >= 0 && count < minimalTake)
{
var additional = packageRepository.FindPackageVersions(package, false, ref skip, minimalTake).ToList();
result.AddRange(additional);
}
}
return result;
}