-
Notifications
You must be signed in to change notification settings - Fork 0
/
checkfolders.cs
42 lines (37 loc) · 1.35 KB
/
checkfolders.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
// See https://aka.ms/new-console-template for more information
//Console.WriteLine(Directory.GetCurrentDirectory());
const string basePath = @"c:\dev\abac-policies\rego";
string? inputPath = Environment.GetCommandLineArgs().Skip(1).FirstOrDefault();
string pathToUse = inputPath ?? basePath;
var files = Directory.EnumerateFileSystemEntries(pathToUse, "*.rego", SearchOption.AllDirectories);
//foreach (var f in files.Take(3))
// Console.WriteLine(f);
var errors = new List<string>();
foreach (var file in files)
{
IEnumerable<string> lines = File.ReadLines(file);
string? firstLine = lines.FirstOrDefault(l => l.StartsWith("package"))?.Trim();
if (string.IsNullOrEmpty(firstLine))
continue;
var package = firstLine.Remove(0, "package ".Length);
var segments = package.Split('.');
var folders = file
.Remove(0, pathToUse.Length)
.Split(Path.DirectorySeparatorChar, StringSplitOptions.RemoveEmptyEntries)
.SkipLast(1);
//Console.WriteLine($"package {package}");
string foldersAsPackage = string.Join('.', folders);
//Console.WriteLine($"folders {foldersAsPackage}");
if (package != foldersAsPackage)
{
errors.Add(file);
}
}
if (errors.Any())
{
Console.WriteLine("Errors:");
foreach (var error in errors)
Console.WriteLine(error);
}
else
Console.WriteLine("All good");