support multiple package checks
[teamcity/dotNetPackagesSupport.git] / nuget-extensions / nuget-commands / src / NuGetTeamCityListCommand.cs
1 ´╗┐using System;\r
2 using System.Collections.Generic;\r
3 using System.Linq;\r
4 using NuGet;\r
5 \r
6 namespace JetBrains.TeamCity.NuGet.ExtendedCommands\r
7 {\r
8   [Command("TeamCity.List", "Lists packages for given Id with parsable output")]\r
9   public class NuGetTeamCityListCommand : ListCommandBase\r
10   {\r
11     [Option("NuGet package Source to search for package")]\r
12     public string Source { get; set; }\r
13 \r
14     [Option("Package Id to check for version update")]\r
15     public string Id { get; set; }\r
16 \r
17     [Option("NuGet Version Spec to constraint versions to be checked. Optional")]\r
18     public string Version { get; set; }\r
19 \r
20     public override void ExecuteCommand()\r
21     {\r
22       System.Console.Out.WriteLine("TeamCity NuGet List command.");\r
23       System.Console.Out.WriteLine("Source: {0}", Source ?? "<null>");\r
24       System.Console.Out.WriteLine("Package Id: {0}", Id ?? "<null>");\r
25       System.Console.Out.WriteLine("Version: {0}", Version ?? "<null>");      \r
26       System.Console.Out.WriteLine("Checking for latest version...");\r
27 \r
28       foreach (var p in GetPackages())\r
29         PrintPackageInfo(p);\r
30     }\r
31 \r
32     private IEnumerable<IPackage> GetPackages()\r
33     {\r
34       if (string.IsNullOrWhiteSpace(Source))\r
35         throw new CommandLineException("-Source must be specified.");\r
36 \r
37       var allPackages = GetAllPackages(Source, new[] { Id });\r
38       if (string.IsNullOrWhiteSpace(Version))\r
39         return allPackages;\r
40 \r
41       return allPackages.Where(VersionUtility.ParseVersionSpec(Version).ToDelegate());\r
42     }\r
43   }\r
44 }\r