Skip to content

Commit 9818d12

Browse files
Mpdreamzreakaleek
andauthored
Update link registry listings to include git reference (#947)
* Update link registry listings to include git reference * fix import ordering * GitReference can not be required while there are instances of it without it published * Run prettier --------- Co-authored-by: Jan Calanog <jan.calanog@elastic.co>
1 parent f5833d4 commit 9818d12

File tree

22 files changed

+166
-34
lines changed

22 files changed

+166
-34
lines changed

src/Elastic.Markdown/Assets/styles.css

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,6 @@
115115
color: var(--color-yellow-80);
116116
}
117117

118-
119118
.applicable-info {
120119
padding: calc(var(--spacing) * 0.5);
121120
padding-left: calc(var(--spacing) * 2);

src/Elastic.Markdown/BuildContext.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using Elastic.Markdown.IO;
1010
using Elastic.Markdown.IO.Configuration;
1111
using Elastic.Markdown.IO.Discovery;
12+
using Elastic.Markdown.IO.State;
1213

1314
namespace Elastic.Markdown;
1415

src/Elastic.Markdown/Elastic.Markdown.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@
6262
<PackageReference Include="Vecc.YamlDotNet.Analyzers.StaticGenerator" Version="16.1.3" PrivateAssets="All"/>
6363
<PackageReference Include="YamlDotNet" Version="16.3.0" />
6464
<PackageReference Include="System.IO.Abstractions" Version="21.0.29" />
65+
<PackageReference Include="NetEscapades.EnumGenerators" Version="1.0.0-beta12"
66+
PrivateAssets="all" ExcludeAssets="runtime" />
6567
</ItemGroup>
6668

6769
</Project>
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// Licensed to Elasticsearch B.V under one or more agreements.
2+
// Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
3+
// See the LICENSE file in the project root for more information
4+
5+
using System.ComponentModel.DataAnnotations;
6+
using System.Text.Json.Serialization;
7+
using NetEscapades.EnumGenerators;
8+
9+
namespace Elastic.Markdown.IO.State;
10+
11+
[EnumExtensions]
12+
public enum ContentSource
13+
{
14+
[Display(Name = "next")]
15+
[JsonStringEnumMemberName("next")]
16+
Next,
17+
18+
[JsonStringEnumMemberName("current")]
19+
[Display(Name = "current")]
20+
Current
21+
}

src/Elastic.Markdown/IO/State/LinkReference.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,15 @@ public record LinkReference
6262
public static string SerializeRedirects(Dictionary<string, LinkRedirect>? redirects) =>
6363
JsonSerializer.Serialize(redirects, SourceGenerationContext.Default.DictionaryStringLinkRedirect);
6464

65+
public static LinkReference Deserialize(Stream json) =>
66+
JsonSerializer.Deserialize(json, SourceGenerationContext.Default.LinkReference)!;
67+
6568
public static LinkReference Deserialize(string json) =>
6669
JsonSerializer.Deserialize(json, SourceGenerationContext.Default.LinkReference)!;
6770

71+
public static string Serialize(LinkReference reference) =>
72+
JsonSerializer.Serialize(reference, SourceGenerationContext.Default.LinkReference);
73+
6874
public static LinkReference Create(DocumentationSet set)
6975
{
7076
var redirects = set.Configuration.Redirects;

src/Elastic.Markdown/Links/CrossLinks/ConfigurationCrossLinkFetcher.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public override async Task<FetchedCrossLinks> Fetch(Cancel ctx)
2121
_ = declaredRepositories.Add(repository);
2222
try
2323
{
24-
var linkReference = await Fetch(repository, ctx);
24+
var linkReference = await Fetch(repository, ["main", "master"], ctx);
2525
linkReferences.Add(repository, linkReference);
2626
var linkIndexReference = await GetLinkIndexEntry(repository, ctx);
2727
linkIndexEntries.Add(repository, linkIndexReference);

src/Elastic.Markdown/Links/CrossLinks/CrossLinkFetcher.cs

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -57,23 +57,34 @@ protected async Task<LinkIndex> FetchLinkIndex(Cancel ctx)
5757
protected async Task<LinkIndexEntry> GetLinkIndexEntry(string repository, Cancel ctx)
5858
{
5959
var linkIndex = await FetchLinkIndex(ctx);
60-
if (linkIndex.Repositories.TryGetValue(repository, out var repositoryLinks))
61-
return repositoryLinks.First().Value;
62-
throw new Exception($"Repository {repository} not found in link index");
60+
if (!linkIndex.Repositories.TryGetValue(repository, out var repositoryLinks))
61+
throw new Exception($"Repository {repository} not found in link index");
62+
return GetNextContentSourceLinkIndexEntry(repositoryLinks, repository);
6363
}
6464

65-
protected async Task<LinkReference> Fetch(string repository, Cancel ctx)
65+
protected static LinkIndexEntry GetNextContentSourceLinkIndexEntry(IDictionary<string, LinkIndexEntry> repositoryLinks, string repository)
66+
{
67+
var linkIndexEntry =
68+
(repositoryLinks.TryGetValue("main", out var link)
69+
? link
70+
: repositoryLinks.TryGetValue("master", out link) ? link : null)
71+
?? throw new Exception($"Repository {repository} found in link index, but no main or master branch found");
72+
return linkIndexEntry;
73+
}
74+
75+
protected async Task<LinkReference> Fetch(string repository, string[] keys, Cancel ctx)
6676
{
6777
var linkIndex = await FetchLinkIndex(ctx);
6878
if (!linkIndex.Repositories.TryGetValue(repository, out var repositoryLinks))
6979
throw new Exception($"Repository {repository} not found in link index");
7080

71-
if (repositoryLinks.TryGetValue("main", out var linkIndexEntry))
72-
return await FetchLinkIndexEntry(repository, linkIndexEntry, ctx);
73-
if (repositoryLinks.TryGetValue("master", out linkIndexEntry))
74-
return await FetchLinkIndexEntry(repository, linkIndexEntry, ctx);
75-
throw new Exception($"Repository {repository} not found in link index");
81+
foreach (var key in keys)
82+
{
83+
if (repositoryLinks.TryGetValue(key, out var linkIndexEntry))
84+
return await FetchLinkIndexEntry(repository, linkIndexEntry, ctx);
85+
}
7686

87+
throw new Exception($"Repository found in link index however none of: '{string.Join(", ", keys)}' branches found");
7788
}
7889

7990
protected async Task<LinkReference> FetchLinkIndexEntry(string repository, LinkIndexEntry linkIndexEntry, Cancel ctx)

src/Elastic.Markdown/Links/CrossLinks/CrossLinkResolver.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ public record LinkIndex
1414
{
1515
[JsonPropertyName("repositories")] public required Dictionary<string, Dictionary<string, LinkIndexEntry>> Repositories { get; init; }
1616

17+
public static LinkIndex Deserialize(Stream json) =>
18+
JsonSerializer.Deserialize(json, SourceGenerationContext.Default.LinkIndex)!;
19+
1720
public static LinkIndex Deserialize(string json) =>
1821
JsonSerializer.Deserialize(json, SourceGenerationContext.Default.LinkIndex)!;
1922

@@ -34,6 +37,10 @@ public record LinkIndexEntry
3437

3538
[JsonPropertyName("etag")]
3639
public required string ETag { get; init; }
40+
41+
// TODO can be made required after all doc_sets have published again
42+
[JsonPropertyName("ref")]
43+
public string GitReference { get; init; } = "unknown";
3744
}
3845

3946
public interface ICrossLinkResolver

src/Elastic.Markdown/Links/InboundLinks/LinkIndexCrossLinkFetcher.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ public override async Task<FetchedCrossLinks> Fetch(Cancel ctx)
1919
var linkIndex = await FetchLinkIndex(ctx);
2020
foreach (var (repository, value) in linkIndex.Repositories)
2121
{
22-
var linkIndexEntry = value.First().Value;
22+
var linkIndexEntry = GetNextContentSourceLinkIndexEntry(value, repository);
23+
2324
linkEntries.Add(repository, linkIndexEntry);
2425
var linkReference = await FetchLinkIndexEntry(repository, linkIndexEntry, ctx);
2526
linkReferences.Add(repository, linkReference);
@@ -34,4 +35,5 @@ public override async Task<FetchedCrossLinks> Fetch(Cancel ctx)
3435
FromConfiguration = false
3536
};
3637
}
38+
3739
}

src/Elastic.Markdown/SourceGenerationContext.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ namespace Elastic.Markdown;
1111

1212
// This configures the source generation for json (de)serialization.
1313

14-
[JsonSourceGenerationOptions(WriteIndented = true)]
14+
[JsonSourceGenerationOptions(WriteIndented = true, UseStringEnumConverter = true)]
1515
[JsonSerializable(typeof(GenerationState))]
1616
[JsonSerializable(typeof(LinkReference))]
1717
[JsonSerializable(typeof(GitCheckoutInformation))]

0 commit comments

Comments
 (0)