-
Notifications
You must be signed in to change notification settings - Fork 644
/
TagBasedPackageCurator.cs
41 lines (36 loc) · 1.6 KB
/
TagBasedPackageCurator.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NuGet;
namespace NuGetGallery
{
public abstract class TagBasedPackageCurator : AutomaticPackageCurator
{
/// <summary>
/// Gets a list of tags required for a package to be selected by this curator. A package MUST have ONE of the specified tags to be curated.
/// </summary>
protected abstract IEnumerable<string> RequiredTags { get; }
/// <summary>
/// Gets the name of the curated feed to add the package to.
/// </summary>
protected abstract string CuratedFeedName { get; }
public override void Curate(Package galleryPackage, IPackage nugetPackage)
{
// Make sure the target feed exists
CuratedFeed feed = GetService<ICuratedFeedByNameQuery>().Execute(CuratedFeedName, includePackages: false);
if (feed != null && galleryPackage.Tags != null)
{
// Break the tags up so we can be sure we don't catch any partial matches (i.e. "foobar" when we're looking for "foo")
string[] tags = galleryPackage.Tags.Split();
// Check if this package should be curated
if (tags.Any(tag => RequiredTags.Contains(tag, StringComparer.OrdinalIgnoreCase)))
{
// It should! Add it to the curated feed
GetService<ICreateCuratedPackageCommand>().Execute(
feed.Key, galleryPackage.PackageRegistration.Key, automaticallyCurated: true);
}
}
}
}
}