Skip to content

Commit 5e516ef

Browse files
committed
Filter packages by tags.
1 parent 3dad53b commit 5e516ef

File tree

7 files changed

+100
-5
lines changed

7 files changed

+100
-5
lines changed

src/GitExtensions.PluginManager/Plugin.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ public override bool Execute(GitUIEventArgs gitUiCommands)
5252
Args args = new Args();
5353
args.Path = pluginsPath;
5454
args.Dependencies = new List<Args.Dependency>() { new Args.Dependency("GitExtensions.Extensibility") };
55+
args.Tags = "GitExtensions";
5556
args.Monikers = FrameworkMonikers;
5657
args.SelfPackageId = PackageId;
5758
args.ProcessNamesToKillBeforeChange = new[] { Process.GetCurrentProcess().ProcessName };
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.IO;
4+
using System.Linq;
5+
using System.Text;
6+
using System.Threading.Tasks;
7+
8+
namespace PackageManager.Services
9+
{
10+
public class EmptyNuGetSearchTermTransformer : INuGetSearchTermTransformer
11+
{
12+
public string Transform(string searchTerm) => searchTerm;
13+
14+
#region Singleton
15+
16+
private static EmptyNuGetSearchTermTransformer instance;
17+
private static object instanceLock = new object();
18+
19+
public static EmptyNuGetSearchTermTransformer Instance
20+
{
21+
get
22+
{
23+
if (instance == null)
24+
{
25+
lock (instanceLock)
26+
{
27+
if (instance == null)
28+
instance = new EmptyNuGetSearchTermTransformer();
29+
}
30+
}
31+
32+
return instance;
33+
}
34+
}
35+
36+
#endregion
37+
}
38+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.IO;
4+
using System.Linq;
5+
using System.Text;
6+
using System.Threading.Tasks;
7+
8+
namespace PackageManager.Services
9+
{
10+
public interface INuGetSearchTermTransformer
11+
{
12+
string Transform(string searchTerm);
13+
}
14+
}

src/PackageManager.NuGet/Services/NuGetSearchService.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ public partial class NuGetSearchService : ISearchService
2525
private readonly ILogger nuGetLog;
2626
private readonly NuGetPackageVersionService versionService;
2727
private readonly INuGetPackageFilter filter;
28-
private readonly NuGetPackageContent.IFrameworkFilter frameworkFilter;
28+
private readonly INuGetSearchTermTransformer queryTransformer;
2929

30-
public NuGetSearchService(IFactory<SourceRepository, IPackageSource> repositoryFactory, ILog log, NuGetPackageContentService contentService, NuGetPackageVersionService versionService, INuGetPackageFilter filter = null, NuGetPackageContent.IFrameworkFilter frameworkFilter = null)
30+
public NuGetSearchService(IFactory<SourceRepository, IPackageSource> repositoryFactory, ILog log, NuGetPackageContentService contentService, NuGetPackageVersionService versionService, INuGetPackageFilter filter = null, INuGetSearchTermTransformer termTransformer = null)
3131
{
3232
Ensure.NotNull(repositoryFactory, "repositoryFactory");
3333
Ensure.NotNull(log, "log");
@@ -42,8 +42,8 @@ public NuGetSearchService(IFactory<SourceRepository, IPackageSource> repositoryF
4242
this.contentService = contentService;
4343
this.nuGetLog = new NuGetLogger(log);
4444
this.versionService = versionService;
45-
this.filter = filter;
46-
this.frameworkFilter = frameworkFilter;
45+
this.filter = filter ?? OkNuGetPackageFilter.Instance;
46+
this.queryTransformer = termTransformer ?? EmptyNuGetSearchTermTransformer.Instance;
4747
}
4848

4949
private SearchOptions EnsureOptions(SearchOptions options)
@@ -65,6 +65,8 @@ private Task<IEnumerable<IPackageSearchMetadata>> SearchAsync(PackageSearchResou
6565

6666
public async Task<IEnumerable<IPackage>> SearchAsync(IEnumerable<IPackageSource> packageSources, string searchText, SearchOptions options = default, CancellationToken cancellationToken = default)
6767
{
68+
searchText = queryTransformer.Transform($"id:{searchText}");
69+
6870
log.Debug($"Searching '{searchText}'.");
6971

7072
options = EnsureOptions(options);

src/PackageManager.UI/App.xaml.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,13 +75,17 @@ protected override void OnStartup(StartupEventArgs e)
7575
if (Args.Monikers.Any())
7676
frameworkFilter = new NuGetFrameworkFilter(frameworks);
7777

78+
INuGetSearchTermTransformer termTransformer = null;
79+
if (Args.Tags != null)
80+
termTransformer = new TagsNuGetSearchTermTransformer(Args.Tags);
81+
7882
var selfPackageConfiguration = new SelfPackageConfiguration(Args.SelfPackageId);
7983

8084
SelfPackageConverter.Configuration = selfPackageConfiguration;
8185

8286
var contentService = new NuGetPackageContentService(log, frameworkFilter);
8387
var versionService = new NuGetPackageVersionService(contentService, log, packageFilter, frameworkFilter);
84-
var searchService = new NuGetSearchService(repositoryFactory, LogFactory.Scope("Search"), contentService, versionService, packageFilter, frameworkFilter);
88+
var searchService = new NuGetSearchService(repositoryFactory, LogFactory.Scope("Search"), contentService, versionService, packageFilter, termTransformer);
8589
var installService = new NuGetInstallService(repositoryFactory, LogFactory.Scope("Install"), Args.Path, contentService, versionService, packageFilter, frameworkFilter);
8690
var selfUpdateService = new SelfUpdateService(this, ProcessService);
8791

src/PackageManager.UI/Args.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ public partial class Args : ICloneable<Args>
1717
public bool IsSelfUpdate { get; set; }
1818
public string SelfOriginalPath { get; set; }
1919
public string SelfUpdateVersion { get; set; }
20+
public string Tags { get; set; }
2021

2122
public IReadOnlyCollection<string> ProcessNamesToKillBeforeChange { get; set; }
2223

@@ -74,6 +75,9 @@ private bool ParseParameter(string name, string value)
7475
case "--dependencies":
7576
Dependencies = ParseDependencies(value);
7677
return true;
78+
case "--tags":
79+
Tags = value;
80+
return true;
7781
case "--selfpackageid":
7882
SelfPackageId = value;
7983
return true;
@@ -131,6 +135,9 @@ public override string ToString()
131135
result.Append(String.Join(",", Dependencies.Select(d => d.Id + (d.Version != null ? "-v" + d.Version : ""))));
132136
}
133137

138+
if (!String.IsNullOrEmpty(Tags))
139+
result.Append($" --tags {Tags}");
140+
134141
if (!String.IsNullOrEmpty(SelfPackageId))
135142
result.Append($" --selfpackageid {SelfPackageId}");
136143

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using Neptuo;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.IO;
5+
using System.Linq;
6+
using System.Text;
7+
using System.Threading.Tasks;
8+
9+
namespace PackageManager.Services
10+
{
11+
public class TagsNuGetSearchTermTransformer : INuGetSearchTermTransformer
12+
{
13+
private readonly string tags;
14+
15+
public TagsNuGetSearchTermTransformer(string tags)
16+
{
17+
Ensure.NotNull(tags, "tags");
18+
this.tags = tags;
19+
}
20+
21+
public string Transform(string searchTerm)
22+
{
23+
if (String.IsNullOrEmpty(tags))
24+
return searchTerm;
25+
26+
return $"{searchTerm} tags:{tags}";
27+
}
28+
}
29+
}

0 commit comments

Comments
 (0)