Skip to content

Commit a124386

Browse files
Consistent file string comparison across Windows and Linux (#4948) (#4949)
This commit fixes a difference in the default string comparison on .NET core across Windows and Linux which was causing the Stale docs github action to fail on CI because generated documentation was ordering asciidoc includes and list items in a different order. This fix sets a specific culture to use and uses ordinal string comparison. Co-authored-by: Russ Cam <russ.cam@elastic.co>
1 parent 683c74c commit a124386

File tree

6 files changed

+54
-53
lines changed

6 files changed

+54
-53
lines changed

docs/aggregations.asciidoc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,12 @@ The values are typically extracted from the fields of the document (using the fi
6464

6565
* <<sum-aggregation-usage,Sum Aggregation Usage>>
6666

67+
* <<t-test-aggregation-usage,T Test Aggregation Usage>>
68+
6769
* <<top-hits-aggregation-usage,Top Hits Aggregation Usage>>
6870

6971
* <<top-metrics-aggregation-usage,Top Metrics Aggregation Usage>>
7072

71-
* <<t-test-aggregation-usage,T Test Aggregation Usage>>
72-
7373
* <<value-count-aggregation-usage,Value Count Aggregation Usage>>
7474

7575
* <<weighted-average-aggregation-usage,Weighted Average Aggregation Usage>>
@@ -108,12 +108,12 @@ include::aggregations/metric/string-stats/string-stats-aggregation-usage.asciido
108108

109109
include::aggregations/metric/sum/sum-aggregation-usage.asciidoc[]
110110

111+
include::aggregations/metric/t-test/t-test-aggregation-usage.asciidoc[]
112+
111113
include::aggregations/metric/top-hits/top-hits-aggregation-usage.asciidoc[]
112114

113115
include::aggregations/metric/top-metrics/top-metrics-aggregation-usage.asciidoc[]
114116

115-
include::aggregations/metric/t-test/t-test-aggregation-usage.asciidoc[]
116-
117117
include::aggregations/metric/value-count/value-count-aggregation-usage.asciidoc[]
118118

119119
include::aggregations/metric/weighted-average/weighted-average-aggregation-usage.asciidoc[]

docs/query-dsl.asciidoc

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,13 @@ NEST exposes all of the full text queries available in Elasticsearch
4949

5050
* <<intervals-usage,Intervals Usage>>
5151

52-
* <<match-usage,Match Usage>>
53-
5452
* <<match-bool-prefix-usage,Match Bool Prefix Usage>>
5553

54+
* <<match-phrase-prefix-usage,Match Phrase Prefix Usage>>
55+
5656
* <<match-phrase-usage,Match Phrase Usage>>
5757

58-
* <<match-phrase-prefix-usage,Match Phrase Prefix Usage>>
58+
* <<match-usage,Match Usage>>
5959

6060
* <<multi-match-usage,Multi Match Usage>>
6161

@@ -71,13 +71,13 @@ include::query-dsl/full-text/common-terms/common-terms-usage.asciidoc[]
7171

7272
include::query-dsl/full-text/intervals/intervals-usage.asciidoc[]
7373

74-
include::query-dsl/full-text/match/match-usage.asciidoc[]
75-
7674
include::query-dsl/full-text/match-bool-prefix/match-bool-prefix-usage.asciidoc[]
7775

76+
include::query-dsl/full-text/match-phrase-prefix/match-phrase-prefix-usage.asciidoc[]
77+
7878
include::query-dsl/full-text/match-phrase/match-phrase-usage.asciidoc[]
7979

80-
include::query-dsl/full-text/match-phrase-prefix/match-phrase-prefix-usage.asciidoc[]
80+
include::query-dsl/full-text/match/match-usage.asciidoc[]
8181

8282
include::query-dsl/full-text/multi-match/multi-match-usage.asciidoc[]
8383

@@ -122,14 +122,14 @@ NEST exposes all of the term queries available in Elasticsearch
122122

123123
* <<term-query-usage,Term Query Usage>>
124124

125+
* <<terms-set-query-usage,Terms Set Query Usage>>
126+
125127
* <<terms-list-query-usage,Terms List Query Usage>>
126128

127129
* <<terms-lookup-query-usage,Terms Lookup Query Usage>>
128130

129131
* <<terms-query-usage,Terms Query Usage>>
130132

131-
* <<terms-set-query-usage,Terms Set Query Usage>>
132-
133133
* <<wildcard-query-usage,Wildcard Query Usage>>
134134

135135
See the Elasticsearch documentation on {ref_current}/term-level-queries.html[Term level queries] for more details.
@@ -160,14 +160,14 @@ include::query-dsl/term-level/regexp/regexp-query-usage.asciidoc[]
160160

161161
include::query-dsl/term-level/term/term-query-usage.asciidoc[]
162162

163+
include::query-dsl/term-level/terms-set/terms-set-query-usage.asciidoc[]
164+
163165
include::query-dsl/term-level/terms/terms-list-query-usage.asciidoc[]
164166

165167
include::query-dsl/term-level/terms/terms-lookup-query-usage.asciidoc[]
166168

167169
include::query-dsl/term-level/terms/terms-query-usage.asciidoc[]
168170

169-
include::query-dsl/term-level/terms-set/terms-set-query-usage.asciidoc[]
170-
171171
include::query-dsl/term-level/wildcard/wildcard-query-usage.asciidoc[]
172172

173173
[[compound-queries]]
@@ -283,10 +283,10 @@ Specialized types of queries that do not fit into other groups
283283

284284
* <<rank-feature-query-usage,Rank Feature Query Usage>>
285285

286-
* <<script-query-usage,Script Query Usage>>
287-
288286
* <<script-score-query-usage,Script Score Query Usage>>
289287

288+
* <<script-query-usage,Script Query Usage>>
289+
290290
* <<shape-query-usage,Shape Query Usage>>
291291

292292
See the Elasticsearch documentation on {ref_current}/specialized-queries.html[Specialized queries] for more details.
@@ -305,10 +305,10 @@ include::query-dsl/specialized/pinned/pinned-query-usage.asciidoc[]
305305

306306
include::query-dsl/specialized/rank-feature/rank-feature-query-usage.asciidoc[]
307307

308-
include::query-dsl/specialized/script/script-query-usage.asciidoc[]
309-
310308
include::query-dsl/specialized/script-score/script-score-query-usage.asciidoc[]
311309

310+
include::query-dsl/specialized/script/script-query-usage.asciidoc[]
311+
312312
include::query-dsl/specialized/shape/shape-query-usage.asciidoc[]
313313

314314
[[span-queries]]

src/DocGenerator/AsciiDoc/RawAsciidocVisitor.cs

Lines changed: 25 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
// See the LICENSE file in the project root for more information
44

55
using System;
6+
using System.Collections.Generic;
67
using System.IO;
78
using System.Linq;
89
using System.Text.RegularExpressions;
@@ -53,50 +54,38 @@ public override void VisitAttributeEntry(AttributeEntry attributeEntry)
5354
{
5455
var thisFileUri = new Uri(_destination.FullName);
5556
var directories = attributeEntry.Value.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
56-
5757
var counter = 1;
5858

59-
foreach (var directory in directories.OrderBy(s=>s))
59+
foreach (var file in DirectoryFiles(directories))
6060
{
61-
var files = Directory.EnumerateFiles(
62-
Path.Combine(Program.TmpOutputDirPath, directory), "*.asciidoc", SearchOption.AllDirectories);
63-
foreach (var file in files.OrderBy(s=>s))
64-
{
65-
var fileInfo = new FileInfo(file);
66-
var referencedFileUri = new Uri(fileInfo.FullName);
67-
var relativePath = thisFileUri.MakeRelativeUri(referencedFileUri);
68-
var include = new Include(relativePath.OriginalString);
61+
var fileInfo = new FileInfo(file);
62+
var referencedFileUri = new Uri(fileInfo.FullName);
63+
var relativePath = thisFileUri.MakeRelativeUri(referencedFileUri);
64+
var include = new Include(relativePath.OriginalString);
6965

70-
if (attributeEntry.Parent != null)
71-
{
72-
attributeEntry.Parent.Insert(attributeEntry.Parent.IndexOf(attributeEntry) + counter, include);
73-
++counter;
74-
}
75-
else
76-
_document.Add(include);
66+
if (attributeEntry.Parent != null)
67+
{
68+
attributeEntry.Parent.Insert(attributeEntry.Parent.IndexOf(attributeEntry) + counter, include);
69+
++counter;
7770
}
71+
else
72+
_document.Add(include);
7873
}
7974
}
8075
else if (attributeEntry.Name == "anchor-list")
8176
{
8277
var directories = attributeEntry.Value.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
83-
8478
var list = new UnorderedList();
8579

86-
foreach (var directory in directories.OrderBy(s=>s))
80+
foreach (var file in DirectoryFiles(directories))
8781
{
88-
var files = Directory.EnumerateFiles(
89-
Path.Combine(Program.TmpOutputDirPath, directory), "*.asciidoc", SearchOption.AllDirectories);
90-
foreach (var file in files.OrderBy(s=>s))
91-
{
92-
var fileInfo = new FileInfo(file);
93-
var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(fileInfo.Name);
82+
var fileInfo = new FileInfo(file);
83+
var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(fileInfo.Name);
9484

95-
list.Items.Add(new UnorderedListItem
96-
{
97-
new Paragraph(new InternalAnchor(fileNameWithoutExtension, fileNameWithoutExtension.LowercaseHyphenToPascal()))
98-
});
99-
}
85+
list.Items.Add(new UnorderedListItem
86+
{
87+
new Paragraph(new InternalAnchor(fileNameWithoutExtension, fileNameWithoutExtension.LowercaseHyphenToPascal()))
88+
});
10089
}
10190

10291
if (attributeEntry.Parent != null)
@@ -107,5 +96,11 @@ public override void VisitAttributeEntry(AttributeEntry attributeEntry)
10796

10897
base.VisitAttributeEntry(attributeEntry);
10998
}
99+
100+
private static IEnumerable<string> DirectoryFiles(string[] directories) =>
101+
directories
102+
.SelectMany(directory =>
103+
Directory.EnumerateFiles(Path.Combine(Program.TmpOutputDirPath, directory), "*.asciidoc", SearchOption.AllDirectories))
104+
.OrderBy(f => f, StringComparer.Ordinal);
110105
}
111106
}

src/DocGenerator/Program.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
// See the LICENSE file in the project root for more information
44

55
using System;
6-
using System.IO;
6+
using System.Globalization;
7+
using System.IO;
78
using System.Linq;
89
using CommandLine;
910
using Newtonsoft.Json.Linq;
@@ -14,6 +15,7 @@ public static class Program
1415
{
1516
static Program()
1617
{
18+
CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("en-us");
1719
var root = new DirectoryInfo(Directory.GetCurrentDirectory());
1820

1921
do

src/DocGenerator/StringExtensions.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,8 @@ public static bool TryGetJsonForExpressionSyntax(this string anonymousTypeString
224224
{
225225
json = null;
226226

227-
foreach (var substitution in Substitutions) anonymousTypeString = anonymousTypeString.Replace(substitution.Key, substitution.Value);
227+
foreach (var substitution in Substitutions)
228+
anonymousTypeString = anonymousTypeString.Replace(substitution.Key, substitution.Value);
228229

229230
var text =
230231
$@"

src/DocGenerator/SyntaxNodeExtensions.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public static bool ShouldBeConvertedToJson(this SyntaxNode node) =>
3939
/// </summary>
4040
public static bool ShouldBeConvertedToJson(this SyntaxNode node, SyntaxTriviaList leadingTrivia)
4141
{
42-
if (leadingTrivia == default(SyntaxTriviaList))
42+
if (leadingTrivia == default)
4343
return false;
4444

4545
var singleLineCommentIndex = leadingTrivia.IndexOf(SyntaxKind.SingleLineCommentTrivia);
@@ -77,7 +77,10 @@ public static bool TryGetJsonForSyntaxNode(this SyntaxNode node, out string json
7777

7878
// find the first anonymous object or new object expression
7979
var syntax = node.DescendantNodes()
80-
.FirstOrDefault(n => n is AnonymousObjectCreationExpressionSyntax || n is ObjectCreationExpressionSyntax || n is LiteralExpressionSyntax);
80+
.FirstOrDefault(n =>
81+
n is AnonymousObjectCreationExpressionSyntax ||
82+
n is ObjectCreationExpressionSyntax ||
83+
n is LiteralExpressionSyntax);
8184

8285
return syntax != null && syntax.ToFullString().TryGetJsonForExpressionSyntax(out json);
8386
}
@@ -107,7 +110,7 @@ public static SyntaxNode WithLeadingEndOfLineTrivia(this SyntaxNode node)
107110
public static string ToFullStringWithoutPragmaWarningDirectiveTrivia(this SyntaxNode node)
108111
{
109112
var pragma = node.DescendantTrivia(s => true, true).Where(t => t.IsKind(SyntaxKind.PragmaWarningDirectiveTrivia));
110-
return node.ReplaceTrivia(pragma, (s, r) => default(SyntaxTrivia)).ToFullString();
113+
return node.ReplaceTrivia(pragma, (s, r) => default).ToFullString();
111114
}
112115
}
113116
}

0 commit comments

Comments
 (0)