Browse Source

Support a path containing multiple validation files

nosoop 10 months ago
parent
commit
353404e2e7
1 changed files with 28 additions and 13 deletions
  1. 28 13
      src/smgdc/app.py

+ 28 - 13
src/smgdc/app.py

@@ -11,14 +11,16 @@ from .validate import LinuxBinary, PlatformBinary, WindowsBinary
 def main() -> None:
     parser = argparse.ArgumentParser()
 
-    parser.add_argument("validation_file", metavar="config", type=pathlib.Path)
+    parser.add_argument("validation_path", metavar="config", type=pathlib.Path)
 
     args = parser.parse_args()
 
-    config = configparser.ConfigParser()
-    config.read(args.validation_file)
+    validation_files = set()
+    if args.validation_path.is_dir():
+        validation_files.update(args.validation_path.rglob("*.ini"))
+    else:
+        validation_files.add(args.validation_path)
 
-    entries = validate.read_config(config)
 
     linux_target = LinuxBinary(pathlib.Path("server_srv.so"))
     windows_target = WindowsBinary(pathlib.Path("server.dll"))
@@ -27,15 +29,28 @@ def main() -> None:
     windows_target.path = pathlib.Path("232250/tf/bin/server.dll")
 
     candidate_targets: list[PlatformBinary] = [linux_target, windows_target]
-
-    for name, entry in entries.items():
-        target = entry.get_target_match(candidate_targets)
-        assert target, f"No binary match for {entry.target}"
-        try:
-            for key, result in entry.process(target).items():
-                print("- [OK]", key.substitute(name=name), "=", result)
-        except Exception as e:
-            print("- [FAIL]", name, f"({type(e).__name__}):", e)
+    for validation_file in sorted(validation_files):
+        header = validation_file.stem
+        if args.validation_path.is_dir():
+            header = str(
+                pathlib.PurePosixPath(validation_file.relative_to(args.validation_path))
+            )
+        print(header)
+
+        config = configparser.ConfigParser()
+        config.read(validation_file)
+
+        entries = validate.read_config(config)
+
+        for name, entry in entries.items():
+            target = entry.get_target_match(candidate_targets)
+            try:
+                assert target, f"No binary match for {entry.target}"
+                for key, result in entry.process(target).items():
+                    print("- [OK]", key.substitute(name=name), "=", result)
+            except Exception as e:
+                print("- [FAIL]", name, f"({type(e).__name__}):", e)
+                # traceback.print_exception(e)
 
 
 if __name__ == "__main__":