mirror of
https://github.com/github/codeql-action.git
synced 2026-01-06 14:40:10 +08:00
Remove caching mechanism
This commit is contained in:
@@ -465,59 +465,7 @@ test("getGitVersionOrThrow throws when git command fails", async (t) => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
test("getGitVersion returns version and caches it", async (t) => {
|
|
||||||
gitUtils.resetCachedGitVersion();
|
|
||||||
const runGitCommandStub = sinon
|
|
||||||
.stub(gitUtils as any, "runGitCommand")
|
|
||||||
.resolves("git version 2.40.0\n");
|
|
||||||
|
|
||||||
const messages: LoggedMessage[] = [];
|
|
||||||
const logger = getRecordingLogger(messages);
|
|
||||||
|
|
||||||
try {
|
|
||||||
// First call should fetch and cache
|
|
||||||
const version1 = await gitUtils.getGitVersion(logger);
|
|
||||||
t.is(version1, "2.40.0");
|
|
||||||
t.is(runGitCommandStub.callCount, 1);
|
|
||||||
|
|
||||||
// Second call should use cache
|
|
||||||
const version2 = await gitUtils.getGitVersion(logger);
|
|
||||||
t.is(version2, "2.40.0");
|
|
||||||
t.is(runGitCommandStub.callCount, 1); // Should still be 1
|
|
||||||
} finally {
|
|
||||||
runGitCommandStub.restore();
|
|
||||||
gitUtils.resetCachedGitVersion();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
test("getGitVersion returns undefined when version cannot be determined", async (t) => {
|
|
||||||
gitUtils.resetCachedGitVersion();
|
|
||||||
const runGitCommandStub = sinon
|
|
||||||
.stub(gitUtils as any, "runGitCommand")
|
|
||||||
.rejects(new Error("git not found"));
|
|
||||||
|
|
||||||
const messages: LoggedMessage[] = [];
|
|
||||||
const logger = getRecordingLogger(messages);
|
|
||||||
|
|
||||||
try {
|
|
||||||
const version = await gitUtils.getGitVersion(logger);
|
|
||||||
t.is(version, undefined);
|
|
||||||
t.true(
|
|
||||||
messages.some(
|
|
||||||
(m) =>
|
|
||||||
m.type === "debug" &&
|
|
||||||
typeof m.message === "string" &&
|
|
||||||
m.message.includes("Could not determine Git version"),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
} finally {
|
|
||||||
runGitCommandStub.restore();
|
|
||||||
gitUtils.resetCachedGitVersion();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
test("gitVersionAtLeast returns true for version meeting requirement", async (t) => {
|
test("gitVersionAtLeast returns true for version meeting requirement", async (t) => {
|
||||||
gitUtils.resetCachedGitVersion();
|
|
||||||
const runGitCommandStub = sinon
|
const runGitCommandStub = sinon
|
||||||
.stub(gitUtils as any, "runGitCommand")
|
.stub(gitUtils as any, "runGitCommand")
|
||||||
.resolves("git version 2.40.0\n");
|
.resolves("git version 2.40.0\n");
|
||||||
@@ -537,12 +485,10 @@ test("gitVersionAtLeast returns true for version meeting requirement", async (t)
|
|||||||
);
|
);
|
||||||
} finally {
|
} finally {
|
||||||
runGitCommandStub.restore();
|
runGitCommandStub.restore();
|
||||||
gitUtils.resetCachedGitVersion();
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
test("gitVersionAtLeast returns false for version not meeting requirement", async (t) => {
|
test("gitVersionAtLeast returns false for version not meeting requirement", async (t) => {
|
||||||
gitUtils.resetCachedGitVersion();
|
|
||||||
const runGitCommandStub = sinon
|
const runGitCommandStub = sinon
|
||||||
.stub(gitUtils as any, "runGitCommand")
|
.stub(gitUtils as any, "runGitCommand")
|
||||||
.resolves("git version 2.30.0\n");
|
.resolves("git version 2.30.0\n");
|
||||||
@@ -555,12 +501,10 @@ test("gitVersionAtLeast returns false for version not meeting requirement", asyn
|
|||||||
t.false(result);
|
t.false(result);
|
||||||
} finally {
|
} finally {
|
||||||
runGitCommandStub.restore();
|
runGitCommandStub.restore();
|
||||||
gitUtils.resetCachedGitVersion();
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
test("gitVersionAtLeast returns false when version cannot be determined", async (t) => {
|
test("gitVersionAtLeast returns false when version cannot be determined", async (t) => {
|
||||||
gitUtils.resetCachedGitVersion();
|
|
||||||
const runGitCommandStub = sinon
|
const runGitCommandStub = sinon
|
||||||
.stub(gitUtils as any, "runGitCommand")
|
.stub(gitUtils as any, "runGitCommand")
|
||||||
.rejects(new Error("git not found"));
|
.rejects(new Error("git not found"));
|
||||||
@@ -581,6 +525,5 @@ test("gitVersionAtLeast returns false when version cannot be determined", async
|
|||||||
);
|
);
|
||||||
} finally {
|
} finally {
|
||||||
runGitCommandStub.restore();
|
runGitCommandStub.restore();
|
||||||
gitUtils.resetCachedGitVersion();
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -23,16 +23,6 @@ import {
|
|||||||
*/
|
*/
|
||||||
export const GIT_MINIMUM_VERSION_FOR_OVERLAY = "2.38.0";
|
export const GIT_MINIMUM_VERSION_FOR_OVERLAY = "2.38.0";
|
||||||
|
|
||||||
/** Cached git version to avoid recomputing it multiple times. */
|
|
||||||
let cachedGitVersion: string | undefined;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Resets the cached git version. This is intended for use in tests only.
|
|
||||||
*/
|
|
||||||
export function resetCachedGitVersion(): void {
|
|
||||||
cachedGitVersion = undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the version of Git installed on the system and throws an error if
|
* Gets the version of Git installed on the system and throws an error if
|
||||||
* the version cannot be determined.
|
* the version cannot be determined.
|
||||||
@@ -55,27 +45,6 @@ export async function getGitVersionOrThrow(): Promise<string> {
|
|||||||
throw new Error(`Could not parse Git version from output: ${stdout.trim()}`);
|
throw new Error(`Could not parse Git version from output: ${stdout.trim()}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the cached Git version, or fetches and caches it if not yet cached.
|
|
||||||
*
|
|
||||||
* @param logger A logger to use for logging errors.
|
|
||||||
* @returns The cached Git version, or undefined if the version could not be determined.
|
|
||||||
*/
|
|
||||||
export async function getGitVersion(
|
|
||||||
logger: Logger,
|
|
||||||
): Promise<string | undefined> {
|
|
||||||
if (cachedGitVersion !== undefined) {
|
|
||||||
return cachedGitVersion;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
cachedGitVersion = await getGitVersionOrThrow();
|
|
||||||
return cachedGitVersion;
|
|
||||||
} catch (e) {
|
|
||||||
logger.debug(`Could not determine Git version: ${getErrorMessage(e)}`);
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Logs the Git version as a telemetry diagnostic. Should be called once during
|
* Logs the Git version as a telemetry diagnostic. Should be called once during
|
||||||
* initialization after the config is available.
|
* initialization after the config is available.
|
||||||
@@ -87,19 +56,23 @@ export async function logGitVersionTelemetry(
|
|||||||
config: Config,
|
config: Config,
|
||||||
logger: Logger,
|
logger: Logger,
|
||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
const version = await getGitVersion(logger);
|
try {
|
||||||
if (version !== undefined && config.languages.length > 0) {
|
const version = await getGitVersionOrThrow();
|
||||||
addDiagnostic(
|
if (config.languages.length > 0) {
|
||||||
config,
|
addDiagnostic(
|
||||||
// Arbitrarily choose the first language. We could also choose all languages, but that
|
config,
|
||||||
// increases the risk of misinterpreting the data.
|
// Arbitrarily choose the first language. We could also choose all languages, but that
|
||||||
config.languages[0],
|
// increases the risk of misinterpreting the data.
|
||||||
makeTelemetryDiagnostic(
|
config.languages[0],
|
||||||
"codeql-action/git-version-telemetry",
|
makeTelemetryDiagnostic(
|
||||||
"Git version telemetry",
|
"codeql-action/git-version-telemetry",
|
||||||
{ gitVersion: version },
|
"Git version telemetry",
|
||||||
),
|
{ gitVersion: version },
|
||||||
);
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
logger.debug(`Could not determine Git version: ${getErrorMessage(e)}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -115,12 +88,14 @@ export async function gitVersionAtLeast(
|
|||||||
requiredVersion: string,
|
requiredVersion: string,
|
||||||
logger: Logger,
|
logger: Logger,
|
||||||
): Promise<boolean> {
|
): Promise<boolean> {
|
||||||
const version = await getGitVersion(logger);
|
try {
|
||||||
if (version === undefined) {
|
const version = await getGitVersionOrThrow();
|
||||||
|
logger.debug(`Installed Git version is ${version}.`);
|
||||||
|
return semver.gte(version, requiredVersion);
|
||||||
|
} catch (e) {
|
||||||
|
logger.debug(`Could not determine Git version: ${getErrorMessage(e)}`);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
logger.debug(`Installed Git version is ${version}.`);
|
|
||||||
return semver.gte(version, requiredVersion);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export const runGitCommand = async function (
|
export const runGitCommand = async function (
|
||||||
|
|||||||
Reference in New Issue
Block a user