Skip to content
This repository was archived by the owner on Dec 5, 2024. It is now read-only.

Commit 11a3df1

Browse files
profet23StanleyGoldman
authored andcommitted
Revising sorting algorithm because of edge case failure.
1 parent a9f3837 commit 11a3df1

File tree

2 files changed

+49
-19
lines changed

2 files changed

+49
-19
lines changed

src/GitHub.Api/OutputProcessors/StatusOutputProcessor.cs

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -224,30 +224,21 @@ public int Compare(string x, string y)
224224
Guard.ArgumentNotNull(x, nameof(x));
225225
Guard.ArgumentNotNull(y, nameof(y));
226226

227-
var metaString = ".meta";
228-
var xIsMeta = x.EndsWith(metaString);
229-
var yIsMeta = y.EndsWith(metaString);
227+
const string meta = ".meta";
228+
var xHasMeta = x.EndsWith(meta);
229+
var yHasMeta = y.EndsWith(meta);
230230

231-
if (xIsMeta || yIsMeta)
232-
{
233-
var compareX = !xIsMeta ? x : x.Substring(0, x.Length - 5);
234-
var compareY = !yIsMeta ? y : y.Substring(0, y.Length - 5);
231+
if(!xHasMeta && !yHasMeta) return StringComparer.InvariantCulture.Compare(x, y);
235232

236-
var comparisonResult = StringComparer.InvariantCultureIgnoreCase.Compare(compareX, compareY);
237-
if (comparisonResult != 0)
238-
{
239-
return comparisonResult;
240-
}
233+
var xPure = xHasMeta ? x.Substring(0, x.Length - meta.Length) : x;
234+
var yPure = yHasMeta ? y.Substring(0, y.Length - meta.Length) : y;
241235

242-
if (xIsMeta)
243-
{
244-
return 1;
245-
}
246-
247-
return -1;
236+
if (xHasMeta)
237+
{
238+
return xPure.Equals(y) ? 1 : StringComparer.InvariantCulture.Compare(xPure, yPure);
248239
}
249240

250-
return StringComparer.InvariantCultureIgnoreCase.Compare(x, y);
241+
return yPure.Equals(x) ? -1 : StringComparer.InvariantCulture.Compare(xPure, yPure);
251242
}
252243
}
253244
}

src/tests/UnitTests/IO/StatusOutputProcessorTests.cs

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,45 @@ public void ShouldSortOutputCorrectly2()
303303
});
304304
}
305305

306+
public void ShouldSortOutputCorrectly3()
307+
{
308+
var output = new[]
309+
{
310+
"## master",
311+
"?? Assets/Assets.Test.dll",
312+
"?? Assets/Assets.Test.dll.meta",
313+
"?? Plugins/GitHub.Unity.dll",
314+
"?? Plugins/GitHub.Unity.dll.mdb",
315+
"?? Plugins/GitHub.Unity.dll.mdb.meta",
316+
"?? Plugins/GitHub.Unity2.dll",
317+
"?? Plugins/GitHub.Unity2.dll.mdb",
318+
"?? Plugins/GitHub.Unity2.dll.mdb.meta",
319+
"?? Plugins/GitHub.Unity2.dll.meta",
320+
"?? Plugins/GitHub.Unity.dll.meta",
321+
"?? blah.txt",
322+
null
323+
};
324+
325+
AssertProcessOutput(output, new GitStatus
326+
{
327+
LocalBranch = "master",
328+
Entries = new List<GitStatusEntry>
329+
{
330+
new GitStatusEntry(@"Assets/Assets.Test.dll", TestRootPath + @"\Assets/Assets.Test.dll", null, GitFileStatus.Untracked),
331+
new GitStatusEntry(@"Assets/Assets.Test.dll.meta", TestRootPath + @"\Assets/Assets.Test.dll.meta", null, GitFileStatus.Untracked),
332+
new GitStatusEntry(@"blah.txt", TestRootPath + @"\blah.txt", null, GitFileStatus.Untracked),
333+
new GitStatusEntry(@"Plugins/GitHub.Unity.dll", TestRootPath + @"\Plugins/GitHub.Unity.dll", null, GitFileStatus.Untracked),
334+
new GitStatusEntry(@"Plugins/GitHub.Unity.dll.meta", TestRootPath + @"\Plugins/GitHub.Unity.dll.meta", null, GitFileStatus.Untracked),
335+
new GitStatusEntry(@"Plugins/GitHub.Unity.dll.mdb", TestRootPath + @"\Plugins/GitHub.Unity.dll.mdb", null, GitFileStatus.Untracked),
336+
new GitStatusEntry(@"Plugins/GitHub.Unity.dll.mdb.meta", TestRootPath + @"\Plugins/GitHub.Unity.dll.mdb.meta", null, GitFileStatus.Untracked),
337+
new GitStatusEntry(@"Plugins/GitHub.Unity2.dll", TestRootPath + @"\Plugins/GitHub.Unity2.dll", null, GitFileStatus.Untracked),
338+
new GitStatusEntry(@"Plugins/GitHub.Unity2.dll.meta", TestRootPath + @"\Plugins/GitHub.Unity2.dll.meta", null, GitFileStatus.Untracked),
339+
new GitStatusEntry(@"Plugins/GitHub.Unity2.dll.mdb", TestRootPath + @"\Plugins/GitHub.Unity2.dll.mdb", null, GitFileStatus.Untracked),
340+
new GitStatusEntry(@"Plugins/GitHub.Unity2.dll.mdb.meta", TestRootPath + @"\Plugins/GitHub.Unity2.dll.mdb.meta", null, GitFileStatus.Untracked),
341+
}
342+
});
343+
}
344+
306345
private void AssertProcessOutput(IEnumerable<string> lines, GitStatus expected)
307346
{
308347
var gitObjectFactory = SubstituteFactory.CreateGitObjectFactory(TestRootPath);

0 commit comments

Comments
 (0)