Skip to content

Commit

Permalink
Fix ignored paths check (#55)
Browse files Browse the repository at this point in the history
* Fix ignored paths check

Seems since using files API in #54, `IGNORED` stopped to work

* Add test checking undefined path

* Add test checking undefined path

---------

Co-authored-by: Pascal <pascal.gruen@gmail.com>
  • Loading branch information
mat3e and pascalgn authored Oct 23, 2024
1 parent 49850f3 commit a35c4e5
Show file tree
Hide file tree
Showing 5 changed files with 584 additions and 24 deletions.
16 changes: 5 additions & 11 deletions dist/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ function debug(...str) {
}

function parseIgnored(str = "") {
const ignored = str
const ignored = (str || "")
.split(/\r|\n/)
.map(s => s.trim())
.filter(s => s.length > 0 && !s.startsWith("#"))
Expand All @@ -154,14 +154,13 @@ function parseIgnored(str = "") {
if (path == null || path === "/dev/null") {
return true;
}
const pathname = path.slice(2);
let ignore = false;
for (const entry of ignored) {
if (entry.not) {
if (pathname.match(entry.not.regex)) {
if (path.match(entry.not.regex)) {
return false;
}
} else if (!ignore && pathname.match(entry.regex)) {
} else if (!ignore && path.match(entry.regex)) {
ignore = true;
}
}
Expand All @@ -184,12 +183,7 @@ async function readFile(path) {

function getChangedLines(isIgnored, pullRequestFiles) {
return pullRequestFiles
.map(file =>
isIgnored(file.filename) &&
(!file.previous_filename || isIgnored(file.previous_filename))
? 0
: file.changes
)
.map(file => isIgnored(file.previous_filename) && isIgnored(file.filename) ? 0 : file.changes)
.reduce((total, current) => total + current, 0);
}

Expand Down Expand Up @@ -238,7 +232,7 @@ if (require.main === require.cache[eval('__filename')]) {
);
}

module.exports = { main };
module.exports = { main, parseIgnored }; // parseIgnored exported for testing


/***/ }),
Expand Down
16 changes: 5 additions & 11 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ function debug(...str) {
}

function parseIgnored(str = "") {
const ignored = str
const ignored = (str || "")
.split(/\r|\n/)
.map(s => s.trim())
.filter(s => s.length > 0 && !s.startsWith("#"))
Expand All @@ -148,14 +148,13 @@ function parseIgnored(str = "") {
if (path == null || path === "/dev/null") {
return true;
}
const pathname = path.slice(2);
let ignore = false;
for (const entry of ignored) {
if (entry.not) {
if (pathname.match(entry.not.regex)) {
if (path.match(entry.not.regex)) {
return false;
}
} else if (!ignore && pathname.match(entry.regex)) {
} else if (!ignore && path.match(entry.regex)) {
ignore = true;
}
}
Expand All @@ -178,12 +177,7 @@ async function readFile(path) {

function getChangedLines(isIgnored, pullRequestFiles) {
return pullRequestFiles
.map(file =>
isIgnored(file.filename) &&
(!file.previous_filename || isIgnored(file.previous_filename))
? 0
: file.changes
)
.map(file => isIgnored(file.previous_filename) && isIgnored(file.filename) ? 0 : file.changes)
.reduce((total, current) => total + current, 0);
}

Expand Down Expand Up @@ -232,4 +226,4 @@ if (require.main === module) {
);
}

module.exports = { main };
module.exports = { main, parseIgnored }; // parseIgnored exported for testing
51 changes: 51 additions & 0 deletions index.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import { describe, expect, it } from "vitest";
import { parseIgnored } from "./index";

describe("parseIgnored", () => {
it.each(["", null, undefined, "\r\n", "\n", "#", "#file"])(
"doesn't ignore when no patterns to ignore provided (%s)",
input => {
// when
const isIgnored = parseIgnored(input);

// then
expect(isIgnored("file")).toBe(false);
}
);

it("ignores ordinary patterns", () => {
// when
const isIgnored = parseIgnored(
"**/src/integration/**\n**/src/test/**\n**/src/testFixtures/**"
);

// then
expect(isIgnored("file")).toBe(false);
expect(isIgnored("src/test/file")).toBe(true);
expect(isIgnored("codebase/src/testFixtures/file")).toBe(true);
});

it.each([null, undefined, "/dev/null"])(
"ignores some patterns by default (%s)",
alwaysIgnoredInput => {
// when
const isIgnored = parseIgnored(
"**/src/integration/**\n**/src/test/**\n**/src/testFixtures/**"
);

// then
expect(isIgnored(alwaysIgnoredInput)).toBe(true);
}
);

it("accepts negated patterns", () => {
// when
const isIgnored = parseIgnored(".*\n!.gitignore\nyarn.lock\ngenerated/**");

// then
expect(isIgnored(".git")).toBe(true);
expect(isIgnored(".gitignore")).toBe(false);
expect(isIgnored("yarn.lock")).toBe(true);
expect(isIgnored("generated/source")).toBe(true);
});
});
5 changes: 3 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
"size-label-action": "index.js"
},
"scripts": {
"test": "yarn compile && node test.js",
"test": "vitest run && yarn compile && node test.js",
"lint": "eslint .",
"compile": "ncc build index.js --license LICENSE -o dist",
"prepublish": "yarn compile"
Expand All @@ -24,7 +24,8 @@
"@vercel/ncc": "^0.36.1",
"dotenv": "^16.1.2",
"eslint": "^8.41.0",
"tmp": "^0.2.1"
"tmp": "^0.2.1",
"vitest": "^2.1.3"
},
"prettier": {
"arrowParens": "avoid",
Expand Down
Loading

0 comments on commit a35c4e5

Please sign in to comment.