diff --git a/lib/analyze-action.js b/lib/analyze-action.js index 738097218f..350d0530cc 100644 --- a/lib/analyze-action.js +++ b/lib/analyze-action.js @@ -188,7 +188,7 @@ async function run() { const memory = util.getMemoryFlag(actionsUtil.getOptionalInput("ram") || process.env["CODEQL_RAM"], logger); const pull_request = github.context.payload.pull_request; const diffRangePackDir = pull_request && - (await (0, analyze_1.setupDiffInformedQueryRun)(pull_request.base.ref, pull_request.head.ref, codeql, logger, features)); + (await (0, analyze_1.setupDiffInformedQueryRun)(pull_request.base.ref, pull_request.head.label, codeql, logger, features)); await (0, analyze_1.warnIfGoInstalledAfterInit)(config, logger); await runAutobuildIfLegacyGoWorkflow(config, logger); dbCreationTimings = await (0, analyze_1.runFinalize)(outputDir, threads, memory, codeql, config, logger); diff --git a/lib/analyze-action.js.map b/lib/analyze-action.js.map index a270cfee8c..7aa46488dd 100644 --- a/lib/analyze-action.js.map +++ b/lib/analyze-action.js.map @@ -1 +1 @@ -{"version":3,"file":"analyze-action.js","sourceRoot":"","sources":["../src/analyze-action.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"analyze-action.js","sourceRoot":"","sources":["../src/analyze-action.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/analyze.js b/lib/analyze.js index e6bf71d0bd..8d57b9e7af 100644 --- a/lib/analyze.js +++ b/lib/analyze.js @@ -36,7 +36,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); -exports.CodeQLAnalysisError = void 0; +exports.exportedForTesting = exports.CodeQLAnalysisError = void 0; exports.runExtraction = runExtraction; exports.dbIsFinalized = dbIsFinalized; exports.setupDiffInformedQueryRun = setupDiffInformedQueryRun; @@ -51,12 +51,12 @@ const io = __importStar(require("@actions/io")); const del_1 = __importDefault(require("del")); const yaml = __importStar(require("js-yaml")); const actionsUtil = __importStar(require("./actions-util")); +const api_client_1 = require("./api-client"); const autobuild_1 = require("./autobuild"); const codeql_1 = require("./codeql"); const diagnostics_1 = require("./diagnostics"); const environment_1 = require("./environment"); const feature_flags_1 = require("./feature-flags"); -const gitUtils = __importStar(require("./git-utils")); const languages_1 = require("./languages"); const logging_1 = require("./logging"); const tools_features_1 = require("./tools-features"); @@ -152,123 +152,167 @@ async function finalizeDatabaseCreation(codeql, config, threadsFlag, memoryFlag, * Set up the diff-informed analysis feature. * * @param baseRef The base branch name, used for calculating the diff range. - * @param headRef The head branch name, used for calculating the diff range. + * @param headLabel The label that uniquely identifies the head branch across + * repositories, used for calculating the diff range. * @param codeql * @param logger * @param features * @returns Absolute path to the directory containing the extension pack for * the diff range information, or `undefined` if the feature is disabled. */ -async function setupDiffInformedQueryRun(baseRef, headRef, codeql, logger, features) { +async function setupDiffInformedQueryRun(baseRef, headLabel, codeql, logger, features) { if (!(await features.getValue(feature_flags_1.Feature.DiffInformedQueries, codeql))) { return undefined; } return await (0, logging_1.withGroupAsync)("Generating diff range extension pack", async () => { - const diffRanges = await getPullRequestEditedDiffRanges(baseRef, headRef, logger); - return writeDiffRangeDataExtensionPack(logger, diffRanges); + const diffRanges = await getPullRequestEditedDiffRanges(baseRef, headLabel, logger); + const packDir = writeDiffRangeDataExtensionPack(logger, diffRanges); + if (packDir === undefined) { + logger.warning("Cannot create diff range extension pack for diff-informed queries; " + + "reverting to performing full analysis."); + } + else { + logger.info(`Successfully created diff range extension pack at ${packDir}.`); + } + return packDir; }); } /** * Return the file line ranges that were added or modified in the pull request. * * @param baseRef The base branch name, used for calculating the diff range. - * @param headRef The head branch name, used for calculating the diff range. + * @param headLabel The label that uniquely identifies the head branch across + * repositories, used for calculating the diff range. * @param logger * @returns An array of tuples, where each tuple contains the absolute path of a * file, the start line and the end line (both 1-based and inclusive) of an * added or modified range in that file. Returns `undefined` if the action was * not triggered by a pull request or if there was an error. */ -async function getPullRequestEditedDiffRanges(baseRef, headRef, logger) { - const checkoutPath = actionsUtil.getOptionalInput("checkout_path"); - if (checkoutPath === undefined) { +async function getPullRequestEditedDiffRanges(baseRef, headLabel, logger) { + const fileDiffs = await getFileDiffsWithBasehead(baseRef, headLabel, logger); + if (fileDiffs === undefined) { return undefined; } - // To compute the merge bases between the base branch and the PR topic branch, - // we need to fetch the commit graph from the branch heads to those merge - // babes. The following 6-step procedure does so while limiting the amount of - // history fetched. - // Step 1: Deepen from the PR merge commit to the base branch head and the PR - // topic branch head, so that the PR merge commit is no longer considered a - // grafted commit. - await gitUtils.deepenGitHistory(); - // Step 2: Fetch the base branch shallow history. This step ensures that the - // base branch name is present in the local repository. Normally the base - // branch name would be added by Step 4. However, if the base branch head is - // an ancestor of the PR topic branch head, Step 4 would fail without doing - // anything, so we need to fetch the base branch explicitly. - await gitUtils.gitFetch(baseRef, ["--depth=1"]); - // Step 3: Fetch the PR topic branch history, stopping when we reach commits - // that are reachable from the base branch head. - await gitUtils.gitFetch(headRef, [`--shallow-exclude=${baseRef}`]); - // Step 4: Fetch the base branch history, stopping when we reach commits that - // are reachable from the PR topic branch head. - await gitUtils.gitFetch(baseRef, [`--shallow-exclude=${headRef}`]); - // Step 5: Repack the history to remove the shallow grafts that were added by - // the previous fetches. This step works around a bug that causes subsequent - // deepening fetches to fail with "fatal: error in object: unshallow ". - // See https://stackoverflow.com/q/63878612 - await gitUtils.gitRepack(["-d"]); - // Step 6: Deepen the history so that we have the merge bases between the base - // branch and the PR topic branch. - await gitUtils.deepenGitHistory(); - // To compute the exact same diff as GitHub would compute for the PR, we need - // to use the same merge base as GitHub. That is easy to do if there is only - // one merge base, which is by far the most common case. If there are multiple - // merge bases, we stop without producing a diff range. - const mergeBases = await gitUtils.getAllGitMergeBases([baseRef, headRef]); - logger.info(`Merge bases: ${mergeBases.join(", ")}`); - if (mergeBases.length !== 1) { - logger.info("Cannot compute diff range because baseRef and headRef " + - `have ${mergeBases.length} merge bases (instead of exactly 1).`); + if (fileDiffs.length >= 300) { + // The "compare two commits" API returns a maximum of 300 changed files. If + // we see that many changed files, it is possible that there could be more, + // with the rest being truncated. In this case, we should not attempt to + // compute the diff ranges, as the result would be incomplete. + logger.warning(`Cannot retrieve the full diff because there are too many ` + + `(${fileDiffs.length}) changed files in the pull request.`); return undefined; } - const diffHunkHeaders = await gitUtils.getGitDiffHunkHeaders(mergeBases[0], headRef); - if (diffHunkHeaders === undefined) { + const results = []; + for (const filediff of fileDiffs) { + const diffRanges = getDiffRanges(filediff, logger); + if (diffRanges === undefined) { + return undefined; + } + results.push(...diffRanges); + } + return results; +} +async function getFileDiffsWithBasehead(baseRef, headLabel, logger) { + const ownerRepo = util.getRequiredEnvParam("GITHUB_REPOSITORY").split("/"); + const owner = ownerRepo[0]; + const repo = ownerRepo[1]; + const basehead = `${baseRef}...${headLabel}`; + try { + const response = await (0, api_client_1.getApiClient)().rest.repos.compareCommitsWithBasehead({ + owner, + repo, + basehead, + per_page: 1, + }); + logger.debug(`Response from compareCommitsWithBasehead(${basehead}):` + + `\n${JSON.stringify(response, null, 2)}`); + return response.data.files; + } + catch (error) { + if (error.status) { + logger.warning(`Error retrieving diff ${basehead}: ${error.message}`); + logger.debug(`Error running compareCommitsWithBasehead(${basehead}):` + + `\nRequest: ${JSON.stringify(error.request, null, 2)}` + + `\nError Response: ${JSON.stringify(error.response, null, 2)}`); + return undefined; + } + else { + throw error; + } + } +} +function getDiffRanges(fileDiff, logger) { + if (fileDiff.patch === undefined) { + if (fileDiff.changes === 0) { + // There are situations where a changed file legitimately has no diff. + // For example, the file may be a binary file, or that the file may have + // been renamed with no changes to its contents. In these cases, the + // file would be reported as having 0 changes, and we can return an empty + // array to indicate no diff range in this file. + return []; + } + // If a file is reported to have nonzero changes but no patch, that may be + // due to the file diff being too large. In this case, we should return + // undefined to indicate that we cannot process the diff. + logger.warning(`No patch found for file ${fileDiff.filename} with ${fileDiff.changes} changes.`); return undefined; } - const results = new Array(); - let changedFile = ""; - for (const line of diffHunkHeaders) { - if (line.startsWith("+++ ")) { - const filePath = gitUtils.decodeGitFilePath(line.substring(4)); - if (filePath.startsWith("b/")) { - // The file was edited: track all hunks in the file - changedFile = filePath.substring(2); - } - else if (filePath === "/dev/null") { - // The file was deleted: skip all hunks in the file - changedFile = ""; - } - else { - logger.warning(`Failed to parse diff hunk header line: ${line}`); - return undefined; + // Diff-informed queries expect the file path to be absolute. CodeQL always + // uses forward slashes as the path separator, so on Windows we need to + // replace any backslashes with forward slashes. + const filename = path + .join(actionsUtil.getRequiredInput("checkout_path"), fileDiff.filename) + .replaceAll(path.sep, "/"); + // The 1-based file line number of the current line + let currentLine = 0; + // The 1-based file line number that starts the current range of added lines + let additionRangeStartLine = undefined; + const diffRanges = []; + const diffLines = fileDiff.patch.split("\n"); + // Adding a fake context line at the end ensures that the following loop will + // always terminate the last range of added lines. + diffLines.push(" "); + for (const diffLine of diffLines) { + if (diffLine.startsWith("-")) { + // Ignore deletions completely -- we do not even want to consider them when + // calculating consecutive ranges of added lines. + continue; + } + if (diffLine.startsWith("+")) { + if (additionRangeStartLine === undefined) { + additionRangeStartLine = currentLine; } + currentLine++; continue; } - if (line.startsWith("@@ ")) { - if (changedFile === "") - continue; - const match = line.match(/^@@ -\d+(?:,\d+)? \+(\d+)(?:,(\d+))? @@/); + if (additionRangeStartLine !== undefined) { + // Any line that does not start with a "+" or "-" terminates the current + // range of added lines. + diffRanges.push({ + path: filename, + startLine: additionRangeStartLine, + endLine: currentLine - 1, + }); + additionRangeStartLine = undefined; + } + if (diffLine.startsWith("@@ ")) { + // A new hunk header line resets the current line number. + const match = diffLine.match(/^@@ -\d+(?:,\d+)? \+(\d+)(?:,\d+)? @@/); if (match === null) { - logger.warning(`Failed to parse diff hunk header line: ${line}`); + logger.warning(`Cannot parse diff hunk header for ${fileDiff.filename}: ${diffLine}`); return undefined; } - const startLine = parseInt(match[1], 10); - const numLines = parseInt(match[2], 10); - if (numLines === 0) { - // The hunk was a deletion: skip it - continue; - } - const endLine = startLine + (numLines || 1) - 1; - results.push({ - path: path.join(checkoutPath, changedFile), - startLine, - endLine, - }); + currentLine = parseInt(match[1], 10); + continue; + } + if (diffLine.startsWith(" ")) { + // An unchanged context line advances the current line number. + currentLine++; + continue; } } - return results; + return diffRanges; } /** * Create an extension pack in the temporary directory that contains the file @@ -303,7 +347,12 @@ extensions: data: `; let data = ranges - .map((range) => ` - ["${range.path}", ${range.startLine}, ${range.endLine}]\n`) + .map((range) => + // Using yaml.dump() with `forceQuotes: true` ensures that all special + // characters are escaped, and that the path is always rendered as a + // quoted string on a single line. + ` - [${yaml.dump(range.path, { forceQuotes: true }).trim()}, ` + + `${range.startLine}, ${range.endLine}]\n`) .join(""); if (!data) { // Ensure that the data extension is not empty, so that a pull request with @@ -461,4 +510,7 @@ async function runCleanup(config, cleanupLevel, logger) { } logger.endGroup(); } +exports.exportedForTesting = { + getDiffRanges, +}; //# sourceMappingURL=analyze.js.map \ No newline at end of file diff --git a/lib/analyze.js.map b/lib/analyze.js.map index b03f44a01a..81173fe23e 100644 --- a/lib/analyze.js.map +++ b/lib/analyze.js.map @@ -1 +1 @@ -{"version":3,"file":"analyze.js","sourceRoot":"","sources":["../src/analyze.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"analyze.js","sourceRoot":"","sources":["../src/analyze.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsIA,sCAmCC;AAcD,sCAiBC;AAkDD,8DAgCC;AAgQD,gCAuJC;AAED,kCA8BC;AAED,gEA2CC;AAED,gCAYC;AA5wBD,uCAAyB;AACzB,2CAA6B;AAC7B,2CAAyC;AAEzC,gDAAkC;AAClC,8CAAsB;AACtB,8CAAgC;AAEhC,4DAA8C;AAC9C,6CAA4C;AAC5C,2CAAgD;AAChD,qCAIkB;AAElB,+CAA8D;AAC9D,+CAAuC;AACvC,mDAA6D;AAC7D,2CAA0D;AAC1D,uCAAmD;AAEnD,qDAAgD;AAChD,mDAAuD;AACvD,6CAAuD;AACvD,6CAA+B;AAC/B,iCAAmC;AAEnC,MAAa,mBAAoB,SAAQ,KAAK;IAC5C,YACS,mBAAwC,EACxC,OAAe,EACf,KAAY;QAEnB,KAAK,CAAC,OAAO,CAAC,CAAC;QAJR,wBAAmB,GAAnB,mBAAmB,CAAqB;QACxC,YAAO,GAAP,OAAO,CAAQ;QACf,UAAK,GAAL,KAAK,CAAO;QAGnB,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AATD,kDASC;AAkFD,KAAK,UAAU,oBAAoB,CAAC,MAAc;IAChD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAClD,IAAI,YAAY,KAAK,SAAS,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5D,+FAA+F;QAC/F,OAAO;IACT,CAAC;IAED,MAAM,CAAC,OAAO,CACZ,iSAAiS;QAC/R,mPAAmP,CACtP,CAAC;IACF,OAAO;AACT,CAAC;AAEM,KAAK,UAAU,aAAa,CACjC,MAAc,EACd,MAA0B,EAC1B,MAAc;IAEd,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACxC,IAAI,aAAa,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC;YAC5C,MAAM,CAAC,KAAK,CACV,gBAAgB,QAAQ,mDAAmD,CAC5E,CAAC;YACF,SAAS;QACX,CAAC;QAED,IAAI,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC;YAC5C,MAAM,CAAC,UAAU,CAAC,cAAc,QAAQ,EAAE,CAAC,CAAC;YAC5C,IAAI,QAAQ,KAAK,oBAAQ,CAAC,MAAM,EAAE,CAAC;gBACjC,MAAM,oBAAoB,CAAC,MAAM,CAAC,CAAC;YACrC,CAAC;YACD,IACE,MAAM,CAAC,SAAS;gBAChB,CAAC,MAAM,MAAM,CAAC,eAAe,CAAC,6BAAY,CAAC,wBAAwB,CAAC,CAAC,EACrE,CAAC;gBACD,IACE,QAAQ,KAAK,oBAAQ,CAAC,GAAG;oBACzB,MAAM,CAAC,SAAS,KAAK,gBAAS,CAAC,SAAS,EACxC,CAAC;oBACD,MAAM,IAAA,6BAAiB,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAC1C,CAAC;gBACD,MAAM,MAAM,CAAC,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YACvD,CAAC;iBAAM,CAAC;gBACN,MAAM,MAAM,CAAC,sBAAsB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YACxD,CAAC;YACD,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAC5B,MAA0B,EAC1B,QAAkB;IAElB,OAAO,CACL,MAAM,CAAC,SAAS,KAAK,gBAAS,CAAC,IAAI;QACnC,CAAC,MAAM,CAAC,SAAS,KAAK,gBAAS,CAAC,SAAS;YACvC,OAAO,CAAC,GAAG,CAAC,oBAAM,CAAC,mCAAmC,CAAC,KAAK,MAAM,CAAC;QACrE,CAAC,CAAC,MAAM,CAAC,SAAS,IAAI,IAAA,6BAAiB,EAAC,QAAQ,CAAC,CAAC,CACnD,CAAC;AACJ,CAAC;AAED,SAAgB,aAAa,CAC3B,MAA0B,EAC1B,QAAkB,EAClB,MAAc;IAEd,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC5D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CACtB,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,qBAAqB,CAAC,EAAE,MAAM,CAAC,CACzC,CAAC;QAC9B,OAAO,CAAC,CAAC,YAAY,IAAI,MAAM,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,CAAC,OAAO,CACZ,wCAAwC,QAAQ,qCAAqC,CACtF,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,KAAK,UAAU,wBAAwB,CACrC,MAAc,EACd,MAA0B,EAC1B,WAAmB,EACnB,UAAkB,EAClB,MAAc;IAEd,MAAM,eAAe,GAAG,wBAAW,CAAC,GAAG,EAAE,CAAC;IAC1C,MAAM,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,MAAM,cAAc,GAAG,wBAAW,CAAC,GAAG,EAAE,GAAG,eAAe,CAAC;IAE3D,MAAM,eAAe,GAAG,wBAAW,CAAC,GAAG,EAAE,CAAC;IAC1C,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACxC,IAAI,aAAa,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC;YAC5C,MAAM,CAAC,IAAI,CACT,6CAA6C,QAAQ,sFAAsF,CAC5I,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,UAAU,CAAC,cAAc,QAAQ,EAAE,CAAC,CAAC;YAC5C,MAAM,MAAM,CAAC,gBAAgB,CAC3B,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC,EAC5C,WAAW,EACX,UAAU,EACV,MAAM,CAAC,SAAS,CACjB,CAAC;YACF,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;IACD,MAAM,cAAc,GAAG,wBAAW,CAAC,GAAG,EAAE,GAAG,eAAe,CAAC;IAE3D,OAAO;QACL,uCAAuC,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;QACnE,uBAAuB,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;KACpD,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;GAWG;AACI,KAAK,UAAU,yBAAyB,CAC7C,OAAe,EACf,SAAiB,EACjB,MAAc,EACd,MAAc,EACd,QAA2B;IAE3B,IAAI,CAAC,CAAC,MAAM,QAAQ,CAAC,QAAQ,CAAC,uBAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;QACpE,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,MAAM,IAAA,wBAAc,EACzB,sCAAsC,EACtC,KAAK,IAAI,EAAE;QACT,MAAM,UAAU,GAAG,MAAM,8BAA8B,CACrD,OAAO,EACP,SAAS,EACT,MAAM,CACP,CAAC;QACF,MAAM,OAAO,GAAG,+BAA+B,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACpE,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,CAAC,OAAO,CACZ,qEAAqE;gBACnE,wCAAwC,CAC3C,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CACT,qDAAqD,OAAO,GAAG,CAChE,CAAC;QACJ,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC,CACF,CAAC;AACJ,CAAC;AAQD;;;;;;;;;;;GAWG;AACH,KAAK,UAAU,8BAA8B,CAC3C,OAAe,EACf,SAAiB,EACjB,MAAc;IAEd,MAAM,SAAS,GAAG,MAAM,wBAAwB,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAC7E,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;QAC5B,2EAA2E;QAC3E,2EAA2E;QAC3E,wEAAwE;QACxE,8DAA8D;QAC9D,MAAM,CAAC,OAAO,CACZ,2DAA2D;YACzD,IAAI,SAAS,CAAC,MAAM,sCAAsC,CAC7D,CAAC;QACF,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACnD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAcD,KAAK,UAAU,wBAAwB,CACrC,OAAe,EACf,SAAiB,EACjB,MAAc;IAEd,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3E,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC1B,MAAM,QAAQ,GAAG,GAAG,OAAO,MAAM,SAAS,EAAE,CAAC;IAC7C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,IAAA,yBAAY,GAAE,CAAC,IAAI,CAAC,KAAK,CAAC,0BAA0B,CACzE;YACE,KAAK;YACL,IAAI;YACJ,QAAQ;YACR,QAAQ,EAAE,CAAC;SACZ,CACF,CAAC;QACF,MAAM,CAAC,KAAK,CACV,4CAA4C,QAAQ,IAAI;YACtD,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAC3C,CAAC;QACF,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,CAAC,OAAO,CAAC,yBAAyB,QAAQ,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACtE,MAAM,CAAC,KAAK,CACV,4CAA4C,QAAQ,IAAI;gBACtD,cAAc,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;gBACtD,qBAAqB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CACjE,CAAC;YACF,OAAO,SAAS,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CACpB,QAAkB,EAClB,MAAc;IAEd,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACjC,IAAI,QAAQ,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;YAC3B,sEAAsE;YACtE,wEAAwE;YACxE,oEAAoE;YACpE,yEAAyE;YACzE,gDAAgD;YAChD,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,0EAA0E;QAC1E,uEAAuE;QACvE,yDAAyD;QACzD,MAAM,CAAC,OAAO,CACZ,2BAA2B,QAAQ,CAAC,QAAQ,SAAS,QAAQ,CAAC,OAAO,WAAW,CACjF,CAAC;QACF,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,2EAA2E;IAC3E,uEAAuE;IACvE,gDAAgD;IAChD,MAAM,QAAQ,GAAG,IAAI;SAClB,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,eAAe,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC;SACtE,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAE7B,mDAAmD;IACnD,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,4EAA4E;IAC5E,IAAI,sBAAsB,GAAuB,SAAS,CAAC;IAC3D,MAAM,UAAU,GAAqB,EAAE,CAAC;IAExC,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7C,6EAA6E;IAC7E,kDAAkD;IAClD,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEpB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,2EAA2E;YAC3E,iDAAiD;YACjD,SAAS;QACX,CAAC;QACD,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,IAAI,sBAAsB,KAAK,SAAS,EAAE,CAAC;gBACzC,sBAAsB,GAAG,WAAW,CAAC;YACvC,CAAC;YACD,WAAW,EAAE,CAAC;YACd,SAAS;QACX,CAAC;QACD,IAAI,sBAAsB,KAAK,SAAS,EAAE,CAAC;YACzC,wEAAwE;YACxE,wBAAwB;YACxB,UAAU,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,QAAQ;gBACd,SAAS,EAAE,sBAAsB;gBACjC,OAAO,EAAE,WAAW,GAAG,CAAC;aACzB,CAAC,CAAC;YACH,sBAAsB,GAAG,SAAS,CAAC;QACrC,CAAC;QACD,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,yDAAyD;YACzD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;YACtE,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,MAAM,CAAC,OAAO,CACZ,qCAAqC,QAAQ,CAAC,QAAQ,KAAK,QAAQ,EAAE,CACtE,CAAC;gBACF,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACrC,SAAS;QACX,CAAC;QACD,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,8DAA8D;YAC9D,WAAW,EAAE,CAAC;YACd,SAAS;QACX,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,+BAA+B,CACtC,MAAc,EACd,MAAoC;IAEpC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAC5B,WAAW,CAAC,qBAAqB,EAAE,EACnC,eAAe,CAChB,CAAC;IACF,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IAC3B,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,EACrC;;;;;;;;CAQH,CACE,CAAC;IAEF,MAAM,MAAM,GAAG;;;;;;CAMhB,CAAC;IAEA,IAAI,IAAI,GAAG,MAAM;SACd,GAAG,CACF,CAAC,KAAK,EAAE,EAAE;IACR,sEAAsE;IACtE,oEAAoE;IACpE,kCAAkC;IAClC,YAAY,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI;QACnE,GAAG,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,OAAO,KAAK,CAC5C;SACA,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,2EAA2E;QAC3E,mEAAmE;QACnE,IAAI,GAAG,sBAAsB,CAAC;IAChC,CAAC;IAED,MAAM,iBAAiB,GAAG,MAAM,GAAG,IAAI,CAAC;IACxC,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAC;IACvE,EAAE,CAAC,aAAa,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;IACvD,MAAM,CAAC,KAAK,CACV,yCAAyC,iBAAiB,MAAM,iBAAiB,EAAE,CACpF,CAAC;IAEF,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,2DAA2D;AACpD,KAAK,UAAU,UAAU,CAC9B,WAAmB,EACnB,UAAkB,EAClB,eAAuB,EACvB,WAAmB,EACnB,gBAAoC,EACpC,mBAAuC,EACvC,MAA0B,EAC1B,MAAc,EACd,QAA2B;IAE3B,MAAM,YAAY,GAAwB,EAAE,CAAC;IAE7C,MAAM,kBAAkB,GAAG,gBAAgB;QACzC,CAAC,CAAC;YACE,sBAAsB,gBAAgB,EAAE;YACxC,+CAA+C;SAChD;QACH,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,oBAAoB,GAAG,gBAAgB;QAC3C,CAAC,CAAC,oDAAoD;QACtD,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,MAAM,GAAG,MAAM,IAAA,kBAAS,EAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,CAAC,UAAU,EAAE,WAAW,EAAE,GAAG,kBAAkB,CAAC,CAAC;IAEpE,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACxC,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,QAAQ,QAAQ,CAAC,CAAC;YAE9D,+CAA+C;YAC/C,oDAAoD;YACpD,oDAAoD;YACpD,oCAAoC;YACpC,MAAM,CAAC,UAAU,CAAC,uBAAuB,QAAQ,EAAE,CAAC,CAAC;YACrD,MAAM,mBAAmB,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;YACjD,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAClE,MAAM,MAAM,CAAC,kBAAkB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;YAC1D,MAAM,CAAC,KAAK,CAAC,gCAAgC,QAAQ,GAAG,CAAC,CAAC;YAC1D,6EAA6E;YAC7E,gDAAgD;YAChD,YAAY,CAAC,2BAA2B,QAAQ,cAAc,CAAC;gBAC7D,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,mBAAmB,CAAC;YAE7C,MAAM,CAAC,UAAU,CAAC,4BAA4B,QAAQ,EAAE,CAAC,CAAC;YAC1D,MAAM,yBAAyB,GAAG,IAAI,IAAI,EAAE,CAAC;YAC7C,MAAM,eAAe,GAAG,MAAM,mBAAmB,CAC/C,QAAQ,EACR,SAAS,EACT,SAAS,EACT,MAAM,CAAC,SAAS,CACjB,CAAC;YACF,MAAM,uBAAuB,GAAG,IAAI,IAAI,EAAE,CAAC;YAC3C,YAAY,CAAC,qBAAqB,QAAQ,cAAc,CAAC;gBACvD,uBAAuB,CAAC,OAAO,EAAE,GAAG,yBAAyB,CAAC,OAAO,EAAE,CAAC;YAC1E,MAAM,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAE7B,IAAI,MAAM,QAAQ,CAAC,QAAQ,CAAC,uBAAO,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBACxD,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;gBAEtE,MAAM,6BAA6B,GAAgB;oBACjD,KAAK,EAAE,mCAAmC;oBAC1C,UAAU,EAAE,yBAAyB,CAAC,WAAW,EAAE;oBACnD,YAAY,EAAE,uBAAuB,CAAC,WAAW,EAAE;oBACnD,WAAW,EAAE,SAAS;oBACtB,QAAQ;oBACR,UAAU,EAAE;wBACV,WAAW,EAAE,mBAAmB;qBACjC;iBACF,CAAC;gBAEF,IAAI,YAAY,CAAC,eAAe,CAAC,KAAK,SAAS,EAAE,CAAC;oBAChD,YAAY,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC;gBACrC,CAAC;gBACD,YAAY,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;YACpE,CAAC;YAED,IACE,CAAC,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAC/B,MAAM,EACN,2CAAkC,CACnC,CAAC,EACF,CAAC;gBACD,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,YAAY,CAAC,wBAAwB,GAAG,QAAQ,CAAC;YACjD,MAAM,IAAI,mBAAmB,CAC3B,YAAY,EACZ,8BAA8B,QAAQ,KAAK,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,EACpE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAClB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,YAAY,CAAC;IAEpB,KAAK,UAAU,mBAAmB,CAChC,QAAkB,EAClB,OAA6B,EAC7B,SAAiB,EACjB,kBAA2B;QAE3B,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAClE,OAAO,MAAM,MAAM,CAAC,wBAAwB,CAC1C,YAAY,EACZ,OAAO,EACP,SAAS,EACT,eAAe,EACf,WAAW,EACX,kBAAkB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EACjC,oBAAoB,EACpB,mBAAmB,EACnB,MAAM,EACN,QAAQ,CACT,CAAC;IACJ,CAAC;IAED,qFAAqF;IACrF,SAAS,sBAAsB,CAC7B,SAAiB,EACjB,GAAW;QAEX,IAAA,oCAAuB,EAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QACxC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CACjB,CAAC;QACpB,iGAAiG;QAEjG,yCAAyC;QACzC,MAAM,mBAAmB,GAA2B,EAAE,CAAC;QAEvD,uDAAuD;QACvD,KAAK,MAAM,QAAQ,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC;YACxC,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACrB,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;oBACtC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC;oBAC/C,IAAI,KAAK,EAAE,CAAC;wBACV,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;oBACrE,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED,KAAK,UAAU,mBAAmB,CAAC,QAAkB;QACnD,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAClE,OAAO,MAAM,MAAM,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,WAAW,CAC/B,SAAiB,EACjB,WAAmB,EACnB,UAAkB,EAClB,MAAc,EACd,MAA0B,EAC1B,MAAc;IAEd,IAAI,CAAC;QACH,MAAM,IAAA,aAAG,EAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,IAAI,KAAK,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IACD,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAExD,MAAM,OAAO,GAAG,MAAM,wBAAwB,CAC5C,MAAM,EACN,MAAM,EACN,WAAW,EACX,UAAU,EACV,MAAM,CACP,CAAC;IAEF,wEAAwE;IACxE,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAM,CAAC,mCAAmC,CAAC,KAAK,MAAM,EAAE,CAAC;QACvE,MAAM,IAAA,oCAAoB,EAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAEM,KAAK,UAAU,0BAA0B,CAC9C,MAA0B,EAC1B,MAAc;IAEd,gHAAgH;IAChH,mHAAmH;IACnH,sDAAsD;IACtD,gHAAgH;IAChH,mHAAmH;IACnH,6EAA6E;IAC7E,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAM,CAAC,kBAAkB,CAAC,CAAC;IAE1D,IACE,OAAO,CAAC,GAAG,CAAC,oBAAM,CAAC,oBAAoB,CAAC,KAAK,MAAM;QACnD,UAAU,KAAK,SAAS,EACxB,CAAC;QACD,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAEhD,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;YAChC,MAAM,CAAC,OAAO,CACZ,mCAAmC,UAAU,aAAa,YAAY,+GAA+G,CACtL,CAAC;YAEF,IAAA,2BAAa,EACX,MAAM,EACN,oBAAQ,CAAC,EAAE,EACX,IAAA,4BAAc,EACZ,4CAA4C,EAC5C,gEAAgE,EAChE;gBACE,eAAe,EACb,sIAAsI;gBACxI,UAAU,EAAE;oBACV,UAAU,EAAE,IAAI;oBAChB,SAAS,EAAE,IAAI;oBACf,eAAe,EAAE,IAAI;iBACtB;gBACD,QAAQ,EAAE,SAAS;aACpB,CACF,CACF,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,UAAU,CAC9B,MAA0B,EAC1B,YAAoB,EACpB,MAAc;IAEd,MAAM,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC;IAC3C,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,MAAM,IAAA,kBAAS,EAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACjD,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAClE,MAAM,MAAM,CAAC,eAAe,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IAC3D,CAAC;IACD,MAAM,CAAC,QAAQ,EAAE,CAAC;AACpB,CAAC;AAEY,QAAA,kBAAkB,GAAG;IAChC,aAAa;CACd,CAAC"} \ No newline at end of file diff --git a/lib/analyze.test.js b/lib/analyze.test.js index 1db8afa75d..abc9297810 100644 --- a/lib/analyze.test.js +++ b/lib/analyze.test.js @@ -40,6 +40,7 @@ const fs = __importStar(require("fs")); const path = __importStar(require("path")); const ava_1 = __importDefault(require("ava")); const sinon = __importStar(require("sinon")); +const actionsUtil = __importStar(require("./actions-util")); const analyze_1 = require("./analyze"); const codeql_1 = require("./codeql"); const feature_flags_1 = require("./feature-flags"); @@ -127,4 +128,178 @@ const util = __importStar(require("./util")); } }); }); +function runGetDiffRanges(changes, patch) { + sinon + .stub(actionsUtil, "getRequiredInput") + .withArgs("checkout_path") + .returns("/checkout/path"); + return analyze_1.exportedForTesting.getDiffRanges({ + filename: "test.txt", + changes, + patch: patch?.join("\n"), + }, (0, logging_1.getRunnerLogger)(true)); +} +(0, ava_1.default)("getDiffRanges: file unchanged", async (t) => { + const diffRanges = runGetDiffRanges(0, undefined); + t.deepEqual(diffRanges, []); +}); +(0, ava_1.default)("getDiffRanges: file diff too large", async (t) => { + const diffRanges = runGetDiffRanges(1000000, undefined); + t.deepEqual(diffRanges, undefined); +}); +(0, ava_1.default)("getDiffRanges: diff thunk with single addition range", async (t) => { + const diffRanges = runGetDiffRanges(2, [ + "@@ -30,6 +50,8 @@", + " a", + " b", + " c", + "+1", + "+2", + " d", + " e", + " f", + ]); + t.deepEqual(diffRanges, [ + { + path: "/checkout/path/test.txt", + startLine: 53, + endLine: 54, + }, + ]); +}); +(0, ava_1.default)("getDiffRanges: diff thunk with single deletion range", async (t) => { + const diffRanges = runGetDiffRanges(2, [ + "@@ -30,8 +50,6 @@", + " a", + " b", + " c", + "-1", + "-2", + " d", + " e", + " f", + ]); + t.deepEqual(diffRanges, []); +}); +(0, ava_1.default)("getDiffRanges: diff thunk with single update range", async (t) => { + const diffRanges = runGetDiffRanges(2, [ + "@@ -30,7 +50,7 @@", + " a", + " b", + " c", + "-1", + "+2", + " d", + " e", + " f", + ]); + t.deepEqual(diffRanges, [ + { + path: "/checkout/path/test.txt", + startLine: 53, + endLine: 53, + }, + ]); +}); +(0, ava_1.default)("getDiffRanges: diff thunk with addition ranges", async (t) => { + const diffRanges = runGetDiffRanges(2, [ + "@@ -30,7 +50,9 @@", + " a", + " b", + " c", + "+1", + " c", + "+2", + " d", + " e", + " f", + ]); + t.deepEqual(diffRanges, [ + { + path: "/checkout/path/test.txt", + startLine: 53, + endLine: 53, + }, + { + path: "/checkout/path/test.txt", + startLine: 55, + endLine: 55, + }, + ]); +}); +(0, ava_1.default)("getDiffRanges: diff thunk with mixed ranges", async (t) => { + const diffRanges = runGetDiffRanges(2, [ + "@@ -30,7 +50,7 @@", + " a", + " b", + " c", + "-1", + " d", + "-2", + "+3", + " e", + " f", + "+4", + "+5", + " g", + " h", + " i", + ]); + t.deepEqual(diffRanges, [ + { + path: "/checkout/path/test.txt", + startLine: 54, + endLine: 54, + }, + { + path: "/checkout/path/test.txt", + startLine: 57, + endLine: 58, + }, + ]); +}); +(0, ava_1.default)("getDiffRanges: multiple diff thunks", async (t) => { + const diffRanges = runGetDiffRanges(2, [ + "@@ -30,6 +50,8 @@", + " a", + " b", + " c", + "+1", + "+2", + " d", + " e", + " f", + "@@ -130,6 +150,8 @@", + " a", + " b", + " c", + "+1", + "+2", + " d", + " e", + " f", + ]); + t.deepEqual(diffRanges, [ + { + path: "/checkout/path/test.txt", + startLine: 53, + endLine: 54, + }, + { + path: "/checkout/path/test.txt", + startLine: 153, + endLine: 154, + }, + ]); +}); +(0, ava_1.default)("getDiffRanges: no diff context lines", async (t) => { + const diffRanges = runGetDiffRanges(2, ["@@ -30 +50,2 @@", "+1", "+2"]); + t.deepEqual(diffRanges, [ + { + path: "/checkout/path/test.txt", + startLine: 50, + endLine: 51, + }, + ]); +}); //# sourceMappingURL=analyze.test.js.map \ No newline at end of file diff --git a/lib/analyze.test.js.map b/lib/analyze.test.js.map index 7a14568785..6601807eb0 100644 --- a/lib/analyze.test.js.map +++ b/lib/analyze.test.js.map @@ -1 +1 @@ -{"version":3,"file":"analyze.test.js","sourceRoot":"","sources":["../src/analyze.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"analyze.test.js","sourceRoot":"","sources":["../src/analyze.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/analyze-action.ts b/src/analyze-action.ts index 112e069a84..ff678b964a 100644 --- a/src/analyze-action.ts +++ b/src/analyze-action.ts @@ -268,7 +268,7 @@ async function run() { pull_request && (await setupDiffInformedQueryRun( pull_request.base.ref as string, - pull_request.head.ref as string, + pull_request.head.label as string, codeql, logger, features, diff --git a/src/analyze.test.ts b/src/analyze.test.ts index 6c7fd3212c..8745c1f38c 100644 --- a/src/analyze.test.ts +++ b/src/analyze.test.ts @@ -4,7 +4,8 @@ import * as path from "path"; import test from "ava"; import * as sinon from "sinon"; -import { runQueries } from "./analyze"; +import * as actionsUtil from "./actions-util"; +import { exportedForTesting, runQueries } from "./analyze"; import { setCodeQL } from "./codeql"; import { Feature } from "./feature-flags"; import { Language } from "./languages"; @@ -119,3 +120,190 @@ test("status report fields", async (t) => { } }); }); + +function runGetDiffRanges(changes: number, patch: string[] | undefined): any { + sinon + .stub(actionsUtil, "getRequiredInput") + .withArgs("checkout_path") + .returns("/checkout/path"); + return exportedForTesting.getDiffRanges( + { + filename: "test.txt", + changes, + patch: patch?.join("\n"), + }, + getRunnerLogger(true), + ); +} + +test("getDiffRanges: file unchanged", async (t) => { + const diffRanges = runGetDiffRanges(0, undefined); + t.deepEqual(diffRanges, []); +}); + +test("getDiffRanges: file diff too large", async (t) => { + const diffRanges = runGetDiffRanges(1000000, undefined); + t.deepEqual(diffRanges, undefined); +}); + +test("getDiffRanges: diff thunk with single addition range", async (t) => { + const diffRanges = runGetDiffRanges(2, [ + "@@ -30,6 +50,8 @@", + " a", + " b", + " c", + "+1", + "+2", + " d", + " e", + " f", + ]); + t.deepEqual(diffRanges, [ + { + path: "/checkout/path/test.txt", + startLine: 53, + endLine: 54, + }, + ]); +}); + +test("getDiffRanges: diff thunk with single deletion range", async (t) => { + const diffRanges = runGetDiffRanges(2, [ + "@@ -30,8 +50,6 @@", + " a", + " b", + " c", + "-1", + "-2", + " d", + " e", + " f", + ]); + t.deepEqual(diffRanges, []); +}); + +test("getDiffRanges: diff thunk with single update range", async (t) => { + const diffRanges = runGetDiffRanges(2, [ + "@@ -30,7 +50,7 @@", + " a", + " b", + " c", + "-1", + "+2", + " d", + " e", + " f", + ]); + t.deepEqual(diffRanges, [ + { + path: "/checkout/path/test.txt", + startLine: 53, + endLine: 53, + }, + ]); +}); + +test("getDiffRanges: diff thunk with addition ranges", async (t) => { + const diffRanges = runGetDiffRanges(2, [ + "@@ -30,7 +50,9 @@", + " a", + " b", + " c", + "+1", + " c", + "+2", + " d", + " e", + " f", + ]); + t.deepEqual(diffRanges, [ + { + path: "/checkout/path/test.txt", + startLine: 53, + endLine: 53, + }, + { + path: "/checkout/path/test.txt", + startLine: 55, + endLine: 55, + }, + ]); +}); + +test("getDiffRanges: diff thunk with mixed ranges", async (t) => { + const diffRanges = runGetDiffRanges(2, [ + "@@ -30,7 +50,7 @@", + " a", + " b", + " c", + "-1", + " d", + "-2", + "+3", + " e", + " f", + "+4", + "+5", + " g", + " h", + " i", + ]); + t.deepEqual(diffRanges, [ + { + path: "/checkout/path/test.txt", + startLine: 54, + endLine: 54, + }, + { + path: "/checkout/path/test.txt", + startLine: 57, + endLine: 58, + }, + ]); +}); + +test("getDiffRanges: multiple diff thunks", async (t) => { + const diffRanges = runGetDiffRanges(2, [ + "@@ -30,6 +50,8 @@", + " a", + " b", + " c", + "+1", + "+2", + " d", + " e", + " f", + "@@ -130,6 +150,8 @@", + " a", + " b", + " c", + "+1", + "+2", + " d", + " e", + " f", + ]); + t.deepEqual(diffRanges, [ + { + path: "/checkout/path/test.txt", + startLine: 53, + endLine: 54, + }, + { + path: "/checkout/path/test.txt", + startLine: 153, + endLine: 154, + }, + ]); +}); + +test("getDiffRanges: no diff context lines", async (t) => { + const diffRanges = runGetDiffRanges(2, ["@@ -30 +50,2 @@", "+1", "+2"]); + t.deepEqual(diffRanges, [ + { + path: "/checkout/path/test.txt", + startLine: 50, + endLine: 51, + }, + ]); +}); diff --git a/src/analyze.ts b/src/analyze.ts index 7e82df4a56..52ae26aa05 100644 --- a/src/analyze.ts +++ b/src/analyze.ts @@ -7,6 +7,7 @@ import del from "del"; import * as yaml from "js-yaml"; import * as actionsUtil from "./actions-util"; +import { getApiClient } from "./api-client"; import { setupCppAutobuild } from "./autobuild"; import { CODEQL_VERSION_ANALYSIS_SUMMARY_V2, @@ -17,7 +18,6 @@ import * as configUtils from "./config-utils"; import { addDiagnostic, makeDiagnostic } from "./diagnostics"; import { EnvVar } from "./environment"; import { FeatureEnablement, Feature } from "./feature-flags"; -import * as gitUtils from "./git-utils"; import { isScannedLanguage, Language } from "./languages"; import { Logger, withGroupAsync } from "./logging"; import { DatabaseCreationTimings, EventReport } from "./status-report"; @@ -240,7 +240,8 @@ async function finalizeDatabaseCreation( * Set up the diff-informed analysis feature. * * @param baseRef The base branch name, used for calculating the diff range. - * @param headRef The head branch name, used for calculating the diff range. + * @param headLabel The label that uniquely identifies the head branch across + * repositories, used for calculating the diff range. * @param codeql * @param logger * @param features @@ -249,7 +250,7 @@ async function finalizeDatabaseCreation( */ export async function setupDiffInformedQueryRun( baseRef: string, - headRef: string, + headLabel: string, codeql: CodeQL, logger: Logger, features: FeatureEnablement, @@ -262,10 +263,21 @@ export async function setupDiffInformedQueryRun( async () => { const diffRanges = await getPullRequestEditedDiffRanges( baseRef, - headRef, + headLabel, logger, ); - return writeDiffRangeDataExtensionPack(logger, diffRanges); + const packDir = writeDiffRangeDataExtensionPack(logger, diffRanges); + if (packDir === undefined) { + logger.warning( + "Cannot create diff range extension pack for diff-informed queries; " + + "reverting to performing full analysis.", + ); + } else { + logger.info( + `Successfully created diff range extension pack at ${packDir}.`, + ); + } + return packDir; }, ); } @@ -280,7 +292,8 @@ interface DiffThunkRange { * Return the file line ranges that were added or modified in the pull request. * * @param baseRef The base branch name, used for calculating the diff range. - * @param headRef The head branch name, used for calculating the diff range. + * @param headLabel The label that uniquely identifies the head branch across + * repositories, used for calculating the diff range. * @param logger * @returns An array of tuples, where each tuple contains the absolute path of a * file, the start line and the end line (both 1-based and inclusive) of an @@ -289,107 +302,167 @@ interface DiffThunkRange { */ async function getPullRequestEditedDiffRanges( baseRef: string, - headRef: string, + headLabel: string, logger: Logger, ): Promise { - const checkoutPath = actionsUtil.getOptionalInput("checkout_path"); - if (checkoutPath === undefined) { + const fileDiffs = await getFileDiffsWithBasehead(baseRef, headLabel, logger); + if (fileDiffs === undefined) { return undefined; } - - // To compute the merge bases between the base branch and the PR topic branch, - // we need to fetch the commit graph from the branch heads to those merge - // babes. The following 6-step procedure does so while limiting the amount of - // history fetched. - - // Step 1: Deepen from the PR merge commit to the base branch head and the PR - // topic branch head, so that the PR merge commit is no longer considered a - // grafted commit. - await gitUtils.deepenGitHistory(); - // Step 2: Fetch the base branch shallow history. This step ensures that the - // base branch name is present in the local repository. Normally the base - // branch name would be added by Step 4. However, if the base branch head is - // an ancestor of the PR topic branch head, Step 4 would fail without doing - // anything, so we need to fetch the base branch explicitly. - await gitUtils.gitFetch(baseRef, ["--depth=1"]); - // Step 3: Fetch the PR topic branch history, stopping when we reach commits - // that are reachable from the base branch head. - await gitUtils.gitFetch(headRef, [`--shallow-exclude=${baseRef}`]); - // Step 4: Fetch the base branch history, stopping when we reach commits that - // are reachable from the PR topic branch head. - await gitUtils.gitFetch(baseRef, [`--shallow-exclude=${headRef}`]); - // Step 5: Repack the history to remove the shallow grafts that were added by - // the previous fetches. This step works around a bug that causes subsequent - // deepening fetches to fail with "fatal: error in object: unshallow ". - // See https://stackoverflow.com/q/63878612 - await gitUtils.gitRepack(["-d"]); - // Step 6: Deepen the history so that we have the merge bases between the base - // branch and the PR topic branch. - await gitUtils.deepenGitHistory(); - - // To compute the exact same diff as GitHub would compute for the PR, we need - // to use the same merge base as GitHub. That is easy to do if there is only - // one merge base, which is by far the most common case. If there are multiple - // merge bases, we stop without producing a diff range. - const mergeBases = await gitUtils.getAllGitMergeBases([baseRef, headRef]); - logger.info(`Merge bases: ${mergeBases.join(", ")}`); - if (mergeBases.length !== 1) { - logger.info( - "Cannot compute diff range because baseRef and headRef " + - `have ${mergeBases.length} merge bases (instead of exactly 1).`, + if (fileDiffs.length >= 300) { + // The "compare two commits" API returns a maximum of 300 changed files. If + // we see that many changed files, it is possible that there could be more, + // with the rest being truncated. In this case, we should not attempt to + // compute the diff ranges, as the result would be incomplete. + logger.warning( + `Cannot retrieve the full diff because there are too many ` + + `(${fileDiffs.length}) changed files in the pull request.`, ); return undefined; } + const results: DiffThunkRange[] = []; + for (const filediff of fileDiffs) { + const diffRanges = getDiffRanges(filediff, logger); + if (diffRanges === undefined) { + return undefined; + } + results.push(...diffRanges); + } + return results; +} - const diffHunkHeaders = await gitUtils.getGitDiffHunkHeaders( - mergeBases[0], - headRef, - ); - if (diffHunkHeaders === undefined) { +/** + * This interface is an abbreviated version of the file diff object returned by + * the GitHub API. + */ +interface FileDiff { + filename: string; + changes: number; + // A patch may be absent if the file is binary, if the file diff is too large, + // or if the file is unchanged. + patch?: string | undefined; +} + +async function getFileDiffsWithBasehead( + baseRef: string, + headLabel: string, + logger: Logger, +): Promise { + const ownerRepo = util.getRequiredEnvParam("GITHUB_REPOSITORY").split("/"); + const owner = ownerRepo[0]; + const repo = ownerRepo[1]; + const basehead = `${baseRef}...${headLabel}`; + try { + const response = await getApiClient().rest.repos.compareCommitsWithBasehead( + { + owner, + repo, + basehead, + per_page: 1, + }, + ); + logger.debug( + `Response from compareCommitsWithBasehead(${basehead}):` + + `\n${JSON.stringify(response, null, 2)}`, + ); + return response.data.files; + } catch (error: any) { + if (error.status) { + logger.warning(`Error retrieving diff ${basehead}: ${error.message}`); + logger.debug( + `Error running compareCommitsWithBasehead(${basehead}):` + + `\nRequest: ${JSON.stringify(error.request, null, 2)}` + + `\nError Response: ${JSON.stringify(error.response, null, 2)}`, + ); + return undefined; + } else { + throw error; + } + } +} + +function getDiffRanges( + fileDiff: FileDiff, + logger: Logger, +): DiffThunkRange[] | undefined { + if (fileDiff.patch === undefined) { + if (fileDiff.changes === 0) { + // There are situations where a changed file legitimately has no diff. + // For example, the file may be a binary file, or that the file may have + // been renamed with no changes to its contents. In these cases, the + // file would be reported as having 0 changes, and we can return an empty + // array to indicate no diff range in this file. + return []; + } + // If a file is reported to have nonzero changes but no patch, that may be + // due to the file diff being too large. In this case, we should return + // undefined to indicate that we cannot process the diff. + logger.warning( + `No patch found for file ${fileDiff.filename} with ${fileDiff.changes} changes.`, + ); return undefined; } - const results = new Array(); - - let changedFile = ""; - for (const line of diffHunkHeaders) { - if (line.startsWith("+++ ")) { - const filePath = gitUtils.decodeGitFilePath(line.substring(4)); - if (filePath.startsWith("b/")) { - // The file was edited: track all hunks in the file - changedFile = filePath.substring(2); - } else if (filePath === "/dev/null") { - // The file was deleted: skip all hunks in the file - changedFile = ""; - } else { - logger.warning(`Failed to parse diff hunk header line: ${line}`); - return undefined; + // Diff-informed queries expect the file path to be absolute. CodeQL always + // uses forward slashes as the path separator, so on Windows we need to + // replace any backslashes with forward slashes. + const filename = path + .join(actionsUtil.getRequiredInput("checkout_path"), fileDiff.filename) + .replaceAll(path.sep, "/"); + + // The 1-based file line number of the current line + let currentLine = 0; + // The 1-based file line number that starts the current range of added lines + let additionRangeStartLine: number | undefined = undefined; + const diffRanges: DiffThunkRange[] = []; + + const diffLines = fileDiff.patch.split("\n"); + // Adding a fake context line at the end ensures that the following loop will + // always terminate the last range of added lines. + diffLines.push(" "); + + for (const diffLine of diffLines) { + if (diffLine.startsWith("-")) { + // Ignore deletions completely -- we do not even want to consider them when + // calculating consecutive ranges of added lines. + continue; + } + if (diffLine.startsWith("+")) { + if (additionRangeStartLine === undefined) { + additionRangeStartLine = currentLine; } + currentLine++; continue; } - if (line.startsWith("@@ ")) { - if (changedFile === "") continue; - - const match = line.match(/^@@ -\d+(?:,\d+)? \+(\d+)(?:,(\d+))? @@/); + if (additionRangeStartLine !== undefined) { + // Any line that does not start with a "+" or "-" terminates the current + // range of added lines. + diffRanges.push({ + path: filename, + startLine: additionRangeStartLine, + endLine: currentLine - 1, + }); + additionRangeStartLine = undefined; + } + if (diffLine.startsWith("@@ ")) { + // A new hunk header line resets the current line number. + const match = diffLine.match(/^@@ -\d+(?:,\d+)? \+(\d+)(?:,\d+)? @@/); if (match === null) { - logger.warning(`Failed to parse diff hunk header line: ${line}`); + logger.warning( + `Cannot parse diff hunk header for ${fileDiff.filename}: ${diffLine}`, + ); return undefined; } - const startLine = parseInt(match[1], 10); - const numLines = parseInt(match[2], 10); - if (numLines === 0) { - // The hunk was a deletion: skip it - continue; - } - const endLine = startLine + (numLines || 1) - 1; - results.push({ - path: path.join(checkoutPath, changedFile), - startLine, - endLine, - }); + currentLine = parseInt(match[1], 10); + continue; + } + if (diffLine.startsWith(" ")) { + // An unchanged context line advances the current line number. + currentLine++; + continue; } } - return results; + return diffRanges; } /** @@ -439,7 +512,11 @@ extensions: let data = ranges .map( (range) => - ` - ["${range.path}", ${range.startLine}, ${range.endLine}]\n`, + // Using yaml.dump() with `forceQuotes: true` ensures that all special + // characters are escaped, and that the path is always rendered as a + // quoted string on a single line. + ` - [${yaml.dump(range.path, { forceQuotes: true }).trim()}, ` + + `${range.startLine}, ${range.endLine}]\n`, ) .join(""); if (!data) { @@ -702,3 +779,7 @@ export async function runCleanup( } logger.endGroup(); } + +export const exportedForTesting = { + getDiffRanges, +}; pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy