aboutsummaryrefslogtreecommitdiff
path: root/vcpkg/scripts/azure-pipelines/owners-db/file_script.ts
diff options
context:
space:
mode:
authorEthan Morgan <ethan@gweithio.com>2026-02-14 16:44:06 +0000
committerEthan Morgan <ethan@gweithio.com>2026-02-14 16:44:06 +0000
commit54409423f767d8b1cf30cb7d0efca6b4ca138823 (patch)
treed915ac7828703ce4b963efdd9728a1777ba18c1e /vcpkg/scripts/azure-pipelines/owners-db/file_script.ts
move to own git serverHEADmaster
Diffstat (limited to 'vcpkg/scripts/azure-pipelines/owners-db/file_script.ts')
-rw-r--r--vcpkg/scripts/azure-pipelines/owners-db/file_script.ts93
1 files changed, 93 insertions, 0 deletions
diff --git a/vcpkg/scripts/azure-pipelines/owners-db/file_script.ts b/vcpkg/scripts/azure-pipelines/owners-db/file_script.ts
new file mode 100644
index 0000000..abb79dc
--- /dev/null
+++ b/vcpkg/scripts/azure-pipelines/owners-db/file_script.ts
@@ -0,0 +1,93 @@
+#!/usr/bin/env node
+import * as fs from "fs";
+import * as path from "path";
+
+const include_subpath = "/include/";
+
+function getFiles(dirPath: string): string[] {
+ const files = fs.readdirSync(dirPath);
+ return files.filter((f) => !f.startsWith("."));
+}
+
+function genAllFileStrings(
+ dirPath: string,
+ files: string[],
+ headersStream: fs.WriteStream,
+ outputStream: fs.WriteStream
+) {
+ for (const file of files) {
+ const components = file.split("_");
+ const pkg = components[0] + ":" + components[2].replace(".list", "");
+ const content = fs.readFileSync(path.join(dirPath, file), "utf8");
+ const lines = content.split(/\r?\n/);
+ for (const raw of lines) {
+ if (!raw) continue;
+ const line = raw.trim();
+ if (line.length === 0) continue;
+ if (line.endsWith("/")) continue;
+ // Remove the leading triplet directory
+ const idx = line.indexOf("/");
+ const filepath = idx >= 0 ? line.substring(idx) : line;
+ outputStream.write(pkg + ":" + filepath + "\n");
+ if (filepath.startsWith(include_subpath)) {
+ headersStream.write(pkg + ":" + filepath.substring(include_subpath.length) + "\n");
+ }
+ }
+ }
+}
+
+function usage() {
+ console.error("Usage: file_script.ts --info-dir <path-to-info-dir> [--out-dir <path>]");
+}
+
+function parseArgs(argv: string[]) {
+ let infoDir: string | undefined;
+ let outDir = "scripts/list_files";
+ for (let i = 0; i < argv.length; i++) {
+ const a = argv[i];
+ if (a === "--info-dir") {
+ i++;
+ infoDir = argv[i];
+ } else if (a === "--out-dir") {
+ i++;
+ outDir = argv[i];
+ } else if (a.startsWith("--")) {
+ console.error(`Unknown argument: ${a}`);
+ usage();
+ process.exit(2);
+ } else {
+ console.error(`Unexpected positional argument: ${a}`);
+ usage();
+ process.exit(2);
+ }
+ }
+ if (!infoDir) {
+ console.error("info-dir is required");
+ usage();
+ process.exit(2);
+ }
+ return { infoDir, outDir };
+}
+
+function main() {
+ const { infoDir: dir, outDir } = parseArgs(process.argv.slice(2));
+ try {
+ fs.mkdirSync(outDir, { recursive: true });
+ } catch {
+ // ignore
+ }
+
+ const headersPath = path.join(outDir, "VCPKGHeadersDatabase.txt");
+ const dbPath = path.join(outDir, "VCPKGDatabase.txt");
+ const headers = fs.createWriteStream(headersPath, { encoding: "utf8" });
+ const output = fs.createWriteStream(dbPath, { encoding: "utf8" });
+ try {
+ const files = getFiles(dir);
+ genAllFileStrings(dir, files, headers, output);
+ } finally {
+ headers.end();
+ output.end();
+ }
+}
+
+main();