Skip to content

Commit 18888de

Browse files
committed
refactor: rewrite histories filter to support ref name that contains non-ascii characters (#1175)
Signed-off-by: leo <[email protected]>
1 parent 13af0a4 commit 18888de

File tree

1 file changed

+23
-70
lines changed

1 file changed

+23
-70
lines changed

src/Models/RepositorySettings.cs

Lines changed: 23 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -309,127 +309,80 @@ public void RemoveChildrenBranchFilters(string pattern)
309309

310310
public string BuildHistoriesFilter()
311311
{
312+
var includedRefs = new List<string>();
312313
var excludedBranches = new List<string>();
313314
var excludedRemotes = new List<string>();
314315
var excludedTags = new List<string>();
315-
var includedBranches = new List<string>();
316-
var includedRemotes = new List<string>();
317-
var includedTags = new List<string>();
318316
foreach (var filter in HistoriesFilters)
319317
{
320318
if (filter.Type == FilterType.LocalBranch)
321319
{
322-
var name = filter.Pattern.Substring(11);
323-
var b = $"{name.Substring(0, name.Length - 1)}[{name[^1]}]";
324-
325320
if (filter.Mode == FilterMode.Included)
326-
includedBranches.Add(b);
321+
includedRefs.Add(filter.Pattern);
327322
else if (filter.Mode == FilterMode.Excluded)
328-
excludedBranches.Add(b);
323+
excludedBranches.Add($"--exclude=\"{filter.Pattern.Substring(11)}\" --decorate-refs-exclude=\"{filter.Pattern}\"");
329324
}
330325
else if (filter.Type == FilterType.LocalBranchFolder)
331326
{
332327
if (filter.Mode == FilterMode.Included)
333-
includedBranches.Add($"{filter.Pattern.Substring(11)}/*");
328+
includedRefs.Add($"--branches={filter.Pattern.Substring(11)}/*");
334329
else if (filter.Mode == FilterMode.Excluded)
335-
excludedBranches.Add($"{filter.Pattern.Substring(11)}/*");
330+
excludedBranches.Add($"--exclude=\"{filter.Pattern.Substring(11)}/*\" --decorate-refs-exclude=\"{filter.Pattern}/*\"");
336331
}
337332
else if (filter.Type == FilterType.RemoteBranch)
338333
{
339-
var name = filter.Pattern.Substring(13);
340-
var r = $"{name.Substring(0, name.Length - 1)}[{name[^1]}]";
341-
342334
if (filter.Mode == FilterMode.Included)
343-
includedRemotes.Add(r);
335+
includedRefs.Add(filter.Pattern);
344336
else if (filter.Mode == FilterMode.Excluded)
345-
excludedRemotes.Add(r);
337+
excludedRemotes.Add($"--exclude=\"{filter.Pattern.Substring(13)}\" --decorate-refs-exclude=\"{filter.Pattern}\"");
346338
}
347339
else if (filter.Type == FilterType.RemoteBranchFolder)
348340
{
349341
if (filter.Mode == FilterMode.Included)
350-
includedRemotes.Add($"{filter.Pattern.Substring(13)}/*");
342+
includedRefs.Add($"--remotes={filter.Pattern.Substring(13)}/*");
351343
else if (filter.Mode == FilterMode.Excluded)
352-
excludedRemotes.Add($"{filter.Pattern.Substring(13)}/*");
344+
excludedRemotes.Add($"--exclude=\"{filter.Pattern.Substring(13)}/*\" --decorate-refs-exclude=\"{filter.Pattern}/*\"");
353345
}
354346
else if (filter.Type == FilterType.Tag)
355347
{
356-
var name = filter.Pattern;
357-
var t = $"{name.Substring(0, name.Length - 1)}[{name[^1]}]";
358-
359348
if (filter.Mode == FilterMode.Included)
360-
includedTags.Add(t);
349+
includedRefs.Add($"refs/tags/{filter.Pattern}");
361350
else if (filter.Mode == FilterMode.Excluded)
362-
excludedTags.Add(t);
351+
excludedTags.Add($"--exclude=\"{filter.Pattern}\" --decorate-refs-exclude=\"refs/tags/{filter.Pattern}\"");
363352
}
364353
}
365354

366-
bool hasIncluded = includedBranches.Count > 0 || includedRemotes.Count > 0 || includedTags.Count > 0;
367-
bool hasExcluded = excludedBranches.Count > 0 || excludedRemotes.Count > 0 || excludedTags.Count > 0;
368-
369355
var builder = new StringBuilder();
370-
if (hasIncluded)
356+
if (includedRefs.Count > 0)
371357
{
372-
foreach (var b in includedBranches)
358+
foreach (var r in includedRefs)
373359
{
374-
builder.Append("--branches=");
375-
builder.Append(b);
376-
builder.Append(' ');
377-
}
378-
379-
foreach (var r in includedRemotes)
380-
{
381-
builder.Append("--remotes=");
382360
builder.Append(r);
383361
builder.Append(' ');
384362
}
385-
386-
foreach (var t in includedTags)
387-
{
388-
builder.Append("--tags=");
389-
builder.Append(t);
390-
builder.Append(' ');
391-
}
392363
}
393-
else if (hasExcluded)
364+
else if (excludedBranches.Count + excludedRemotes.Count + excludedTags.Count > 0)
394365
{
395-
if (excludedBranches.Count > 0)
366+
foreach (var b in excludedBranches)
396367
{
397-
foreach (var b in excludedBranches)
398-
{
399-
builder.Append("--exclude=");
400-
builder.Append(b);
401-
builder.Append(" --decorate-refs-exclude=refs/heads/");
402-
builder.Append(b);
403-
builder.Append(' ');
404-
}
368+
builder.Append(b);
369+
builder.Append(' ');
405370
}
406371

407372
builder.Append("--exclude=HEA[D] --branches ");
408373

409-
if (excludedRemotes.Count > 0)
374+
foreach (var r in excludedRemotes)
410375
{
411-
foreach (var r in excludedRemotes)
412-
{
413-
builder.Append("--exclude=");
414-
builder.Append(r);
415-
builder.Append(" --decorate-refs-exclude=refs/remotes/");
416-
builder.Append(r);
417-
builder.Append(' ');
418-
}
376+
builder.Append(r);
377+
builder.Append(' ');
419378
}
420379

421380
builder.Append("--exclude=origin/HEA[D] --remotes ");
422381

423-
if (excludedTags.Count > 0)
382+
foreach (var t in excludedTags)
424383
{
425-
foreach (var t in excludedTags)
426-
{
427-
builder.Append("--exclude=");
428-
builder.Append(t);
429-
builder.Append(" --decorate-refs-exclude=refs/tags/");
430-
builder.Append(t);
431-
builder.Append(' ');
432-
}
384+
builder.Append(t);
385+
builder.Append(' ');
433386
}
434387

435388
builder.Append("--tags ");

0 commit comments

Comments
 (0)