nuget-extensions/nuget-commands/src.3.3/ListCommandBase.cs (49 lines of code) (raw):
using System;
using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.IO;
using System.Linq;
using System.Linq.Expressions;
using JetBrains.TeamCity.NuGet.ExtendedCommands.Data;
using NuGet;
namespace JetBrains.TeamCity.NuGet.ExtendedCommands
{
public abstract class ListCommandBase : CommandBase
{
[Import]
public IPackageRepositoryFactory RepositoryFactoryTC { get; set; }
/// <exception cref="InvalidFeedUrlException">may be thrown on error</exception>
protected void GetAllPackages(INuGetSource feed,
PackageFetchOption fetchOption,
IEnumerable<string> ids,
Action<IPackage> processor)
{
System.Console.Out.WriteLine("Checking packages on source: {0}", feed);
ValidateSourceUrl(feed);
var repo = RepositoryFactoryTC.CreateRepository(feed.Source);
var param = Expression.Parameter(typeof(IPackage));
Expression filter = QueryBuilder.GenerateQuery(fetchOption, ids, param);
var filtered = repo.GetPackages().Where(Expression.Lambda<Func<IPackage, bool>>(filter, param));
foreach (var package in filtered)
{
processor(package);
}
}
private static void ValidateSourceUrl(INuGetSource feed)
{
string source = feed.Source;
Uri uri;
try
{
uri = new Uri(source);
}
catch (Exception e)
{
throw new InvalidFeedUrlException(source, e.Message);
}
if (uri.IsFile && !Directory.Exists(uri.LocalPath))
{
throw new InvalidFeedUrlException(source, "Local path does not exist: " + uri.LocalPath);
}
}
}
}