mirror of
https://github.com/github/codeql-action.git
synced 2026-04-27 09:18:47 +00:00
Add function to query git for all generated files
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import * as fs from "fs";
|
||||
import * as os from "os";
|
||||
import * as path from "path";
|
||||
|
||||
import * as core from "@actions/core";
|
||||
@@ -392,3 +393,41 @@ test("getFileOidsUnderPath throws on unexpected output format", async (t) => {
|
||||
runGitCommandStub.restore();
|
||||
}
|
||||
});
|
||||
|
||||
test("listFiles returns array of file paths", async (t) => {
|
||||
sinon
|
||||
.stub(gitUtils, "runGitCommand")
|
||||
.resolves(["dir/file.txt", "README.txt"].join(os.EOL));
|
||||
|
||||
await t.notThrowsAsync(async () => {
|
||||
const result = await gitUtils.listFiles("/some/path");
|
||||
t.is(result.length, 2);
|
||||
t.is(result[0], "dir/file.txt");
|
||||
});
|
||||
});
|
||||
|
||||
test("getGeneratedFiles returns generated files only", async (t) => {
|
||||
const runGitCommandStub = sinon.stub(gitUtils, "runGitCommand");
|
||||
|
||||
runGitCommandStub
|
||||
.onFirstCall()
|
||||
.resolves(["dir/file.txt", "test.json", "README.txt"].join(os.EOL));
|
||||
runGitCommandStub
|
||||
.onSecondCall()
|
||||
.resolves(
|
||||
[
|
||||
"dir/file.txt: linguist-generated: unspecified",
|
||||
"test.json: linguist-generated: true",
|
||||
"README.txt: linguist-generated: false",
|
||||
].join(os.EOL),
|
||||
);
|
||||
|
||||
await t.notThrowsAsync(async () => {
|
||||
const result = await gitUtils.getGeneratedFiles("/some/path");
|
||||
|
||||
t.assert(runGitCommandStub.calledTwice);
|
||||
|
||||
t.is(result.length, 1);
|
||||
t.is(result[0], "test.json");
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import * as os from "os";
|
||||
|
||||
import * as core from "@actions/core";
|
||||
import * as toolrunner from "@actions/exec/lib/toolrunner";
|
||||
import * as io from "@actions/io";
|
||||
@@ -408,3 +410,34 @@ export async function isAnalyzingDefaultBranch(): Promise<boolean> {
|
||||
|
||||
return currentRef === defaultBranch;
|
||||
}
|
||||
|
||||
export async function listFiles(workingDirectory: string): Promise<string[]> {
|
||||
const stdout = await runGitCommand(
|
||||
workingDirectory,
|
||||
["ls-files"],
|
||||
"Unable to list tracked files.",
|
||||
);
|
||||
return stdout.split(os.EOL);
|
||||
}
|
||||
|
||||
export async function getGeneratedFiles(
|
||||
workingDirectory: string,
|
||||
): Promise<string[]> {
|
||||
const files = await listFiles(workingDirectory);
|
||||
const stdout = await runGitCommand(
|
||||
workingDirectory,
|
||||
["check-attr", "linguist-generated", "--", ...files],
|
||||
"Unable to check attributes of files.",
|
||||
);
|
||||
|
||||
const generatedFiles: string[] = [];
|
||||
const regex = /^([^:]+): linguist-generated: true$/;
|
||||
for (const result of stdout.split(os.EOL)) {
|
||||
const match = result.match(regex);
|
||||
if (match) {
|
||||
generatedFiles.push(match[1]);
|
||||
}
|
||||
}
|
||||
|
||||
return generatedFiles;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user