-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathCompareColumnsCommand.cs
54 lines (39 loc) · 1.78 KB
/
CompareColumnsCommand.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
using DotMake.CommandLine;
namespace EXDTooler;
[CliCommand(Parent = typeof(MainCommand))]
public sealed class CompareColumnsCommand
{
public required MainCommand Parent { get; set; }
[CliOption(Required = true, Description = "Path to base directory with folders.", ValidationRules = CliValidationRules.ExistingDirectory)]
public required string BasePath { get; set; }
[CliOption(Required = false, Description = "Path to columns.yml file within a BasePath subfolder.")]
public string ColumnsPath { get; set; } = ".github/columns.yml";
public Task RunAsync()
{
var token = Parent.Init();
var files = Directory.GetDirectories(BasePath).Select(p => (Version: Path.GetFileName(p), Path: Path.Combine(p, ColumnsPath))).OrderBy(f => f.Version).ToArray();
ColDefReader? baseSheets = null;
foreach (var file in files)
{
var sheets = ColDefReader.FromColumnFile(file.Path);
var baseSheetNames = baseSheets?.Sheets.Keys;
var sheetNames = sheets.Sheets.Keys;
var deleted = baseSheetNames?.Except(sheetNames) ?? [];
var added = sheetNames.Except(baseSheetNames ?? []);
var overlap = baseSheetNames?.Intersect(sheetNames) ?? [];
Log.Info($"Version: {file.Version}");
Log.Info($"Hash: {sheets.HashString}");
foreach (var sheet in deleted)
Log.Info($"- {sheet}");
foreach (var sheet in added)
Log.Info($"+ {sheet}");
foreach (var sheet in overlap)
{
if (sheets.GetColumnsHash(sheet) != baseSheets?.GetColumnsHash(sheet))
Log.Info($"* {sheet}");
}
baseSheets = sheets;
}
return Task.CompletedTask;
}
}