Skip to content

Commit e60e916

Browse files
authored
Support embedded READMEs (loic-sharma#670)
NuGet's official embedded READMEs declares the README using the [`readme`](https://docs.microsoft.com/en-us/nuget/reference/nuspec#readme) metadata in the package's .nuspec.
1 parent d5f7101 commit e60e916

File tree

4 files changed

+8
-24
lines changed

4 files changed

+8
-24
lines changed

src/BaGet.Core/Extensions/PackageArchiveReaderExtensions.cs

+5-21
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,8 @@ namespace BaGet.Core
1313

1414
public static class PackageArchiveReaderExtensions
1515
{
16-
private static readonly string[] OrderedReadmeFileNames = new[]
17-
{
18-
"readme.md",
19-
"readme.txt",
20-
};
21-
22-
private static readonly HashSet<string> ReadmeFileNames = new HashSet<string>(
23-
OrderedReadmeFileNames,
24-
StringComparer.OrdinalIgnoreCase);
25-
2616
public static bool HasReadme(this PackageArchiveReader package)
27-
=> package.GetFiles().Any(ReadmeFileNames.Contains);
17+
=> !string.IsNullOrEmpty(package.NuspecReader.GetReadme());
2818

2919
public static bool HasEmbeddedIcon(this PackageArchiveReader package)
3020
=> !string.IsNullOrEmpty(package.NuspecReader.GetIcon());
@@ -33,19 +23,13 @@ public async static Task<Stream> GetReadmeAsync(
3323
this PackageArchiveReader package,
3424
CancellationToken cancellationToken)
3525
{
36-
var packageFiles = package.GetFiles();
37-
38-
foreach (var readmeFileName in OrderedReadmeFileNames)
26+
var readmePath = package.NuspecReader.GetReadme();
27+
if (readmePath == null)
3928
{
40-
var readmePath = packageFiles.FirstOrDefault(f => f.Equals(readmeFileName, StringComparison.OrdinalIgnoreCase));
41-
42-
if (readmePath != null)
43-
{
44-
return await package.GetStreamAsync(readmePath, cancellationToken);
45-
}
29+
throw new InvalidOperationException("Package does not have a readme!");
4630
}
4731

48-
throw new InvalidOperationException("Package does not have a readme!");
32+
return await package.GetStreamAsync(readmePath, cancellationToken);
4933
}
5034

5135
public async static Task<Stream> GetIconAsync(

src/Directory.Build.props

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
<MicrosoftAspNetCorePackageVersion>3.1.1</MicrosoftAspNetCorePackageVersion>
4141
<MicrosoftEntityFrameworkCorePackageVersion>3.1.1</MicrosoftEntityFrameworkCorePackageVersion>
4242
<MicrosoftExtensionsPackageVersion>3.1.1</MicrosoftExtensionsPackageVersion>
43-
<NuGetPackageVersion>5.4.0</NuGetPackageVersion>
43+
<NuGetPackageVersion>5.10.0</NuGetPackageVersion>
4444
</PropertyGroup>
4545

4646
<ItemGroup Condition="'$(DOTNET_RUNNING_IN_CONTAINER)' == ''">

tests/BaGet.Tests/ApiIntegrationTests.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ public async Task PackageMetadataReturnsOk()
274274
""authors"": ""Test author"",
275275
""dependencyGroups"": [
276276
{
277-
""targetFramework"": ""net50"",
277+
""targetFramework"": ""net5.0"",
278278
""dependencies"": []
279279
}
280280
],

tests/Directory.Build.props

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<PropertyGroup>
1515
<MicrosoftAspNetCorePackageVersion>3.1.1</MicrosoftAspNetCorePackageVersion>
1616
<NewtonsoftJsonPackageVersion>12.0.2</NewtonsoftJsonPackageVersion>
17-
<NuGetPackageVersion>5.4.0</NuGetPackageVersion>
17+
<NuGetPackageVersion>5.10.0</NuGetPackageVersion>
1818
<XUnitPackageVersion>2.4.1</XUnitPackageVersion>
1919
</PropertyGroup>
2020

0 commit comments

Comments
 (0)