Skip to content
This repository was archived by the owner on Apr 8, 2026. It is now read-only.

Commit 6140917

Browse files
authored
Refactor ownership interface (#49)
* refactoring to create an ownership lib that doesn't do things with files * making getting line counts a choice not a side effect * getting rid of writers lib * ditching flakey tests * general shuffling of deck chairs
1 parent 8e8c16f commit 6140917

30 files changed

Lines changed: 274 additions & 342 deletions

package-lock.json

Lines changed: 28 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@
2626
},
2727
"dependencies": {
2828
"commander": "^4.1.1",
29-
"ignore": "^5.1.8"
29+
"ignore": "^5.1.8",
30+
"p-map": "^4.0.0"
3031
},
3132
"devDependencies": {
3233
"@types/jest": "^26.0.5",

src/cli.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { who } from './commands/who';
88
import { git } from './commands/git';
99
import { log } from './lib/logger';
1010

11-
import { OUTPUT_FORMAT } from './lib/writers/types';
11+
import { OUTPUT_FORMAT } from './lib/types';
1212
import { validate } from './commands/validate';
1313

1414
commander.command('audit')

src/commands/__snapshots__/audit.test.int.ts.snap

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -93,32 +93,32 @@ exports[`audit jsonl should do all commands in combination when asked: stdout 1`
9393
exports[`audit jsonl should list ownership for all files: stderr 1`] = `""`;
9494

9595
exports[`audit jsonl should list ownership for all files: stdout 1`] = `
96-
"{\\"path\\":\\".github/CODEOWNERS\\",\\"owners\\":[\\"@global-owner1\\",\\"@global-owner2\\"],\\"lines\\":29}
97-
{\\"path\\":\\".gitignore\\",\\"owners\\":[\\"@global-owner1\\",\\"@global-owner2\\"],\\"lines\\":4}
98-
{\\"path\\":\\"build/logs/deep/recursive-root-dir-owner.log\\",\\"owners\\":[\\"@doctocat\\"],\\"lines\\":0}
99-
{\\"path\\":\\"build/logs/recursive-root-dir-owner.log\\",\\"owners\\":[\\"@doctocat\\"],\\"lines\\":0}
100-
{\\"path\\":\\"deep/apps/recursive-deep-dir-owner.ts\\",\\"owners\\":[\\"@octocat\\"],\\"lines\\":0}
101-
{\\"path\\":\\"deep/nested-ignore/.gitignore\\",\\"owners\\":[\\"@global-owner1\\",\\"@global-owner2\\"],\\"lines\\":2}
102-
{\\"path\\":\\"deep/nested-ignore/overridden-ignore.js\\",\\"owners\\":[\\"@js-owner\\"],\\"lines\\":0}
103-
{\\"path\\":\\"default-wildcard-owners.md\\",\\"owners\\":[\\"@global-owner1\\",\\"@global-owner2\\"],\\"lines\\":0}
104-
{\\"path\\":\\"docs/non-recursive-dir-owner.md\\",\\"owners\\":[\\"@doctocat\\"],\\"lines\\":0}
105-
{\\"path\\":\\"src/ext-wildcard-owner.js\\",\\"owners\\":[\\"@js-owner\\"],\\"lines\\":0}
96+
"{\\"path\\":\\".github/CODEOWNERS\\",\\"owners\\":[\\"@global-owner1\\",\\"@global-owner2\\"]}
97+
{\\"path\\":\\".gitignore\\",\\"owners\\":[\\"@global-owner1\\",\\"@global-owner2\\"]}
98+
{\\"path\\":\\"build/logs/deep/recursive-root-dir-owner.log\\",\\"owners\\":[\\"@doctocat\\"]}
99+
{\\"path\\":\\"build/logs/recursive-root-dir-owner.log\\",\\"owners\\":[\\"@doctocat\\"]}
100+
{\\"path\\":\\"deep/apps/recursive-deep-dir-owner.ts\\",\\"owners\\":[\\"@octocat\\"]}
101+
{\\"path\\":\\"deep/nested-ignore/.gitignore\\",\\"owners\\":[\\"@global-owner1\\",\\"@global-owner2\\"]}
102+
{\\"path\\":\\"deep/nested-ignore/overridden-ignore.js\\",\\"owners\\":[\\"@js-owner\\"]}
103+
{\\"path\\":\\"default-wildcard-owners.md\\",\\"owners\\":[\\"@global-owner1\\",\\"@global-owner2\\"]}
104+
{\\"path\\":\\"docs/non-recursive-dir-owner.md\\",\\"owners\\":[\\"@doctocat\\"]}
105+
{\\"path\\":\\"src/ext-wildcard-owner.js\\",\\"owners\\":[\\"@js-owner\\"]}
106106
"
107107
`;
108108

109109
exports[`audit jsonl should only consider files tracked in git root when asked: stderr 1`] = `""`;
110110

111111
exports[`audit jsonl should only consider files tracked in git root when asked: stdout 1`] = `
112-
"{\\"path\\":\\".github/CODEOWNERS\\",\\"owners\\":[\\"@global-owner1\\",\\"@global-owner2\\"],\\"lines\\":29}
113-
{\\"path\\":\\".gitignore\\",\\"owners\\":[\\"@global-owner1\\",\\"@global-owner2\\"],\\"lines\\":4}
114-
{\\"path\\":\\"build/logs/deep/recursive-root-dir-owner.log\\",\\"owners\\":[\\"@doctocat\\"],\\"lines\\":0}
115-
{\\"path\\":\\"build/logs/recursive-root-dir-owner.log\\",\\"owners\\":[\\"@doctocat\\"],\\"lines\\":0}
116-
{\\"path\\":\\"deep/apps/recursive-deep-dir-owner.ts\\",\\"owners\\":[\\"@octocat\\"],\\"lines\\":0}
117-
{\\"path\\":\\"deep/nested-ignore/.gitignore\\",\\"owners\\":[\\"@global-owner1\\",\\"@global-owner2\\"],\\"lines\\":2}
118-
{\\"path\\":\\"deep/nested-ignore/overridden-ignore.js\\",\\"owners\\":[\\"@js-owner\\"],\\"lines\\":0}
119-
{\\"path\\":\\"default-wildcard-owners.md\\",\\"owners\\":[\\"@global-owner1\\",\\"@global-owner2\\"],\\"lines\\":0}
120-
{\\"path\\":\\"docs/non-recursive-dir-owner.md\\",\\"owners\\":[\\"@doctocat\\"],\\"lines\\":0}
121-
{\\"path\\":\\"src/ext-wildcard-owner.js\\",\\"owners\\":[\\"@js-owner\\"],\\"lines\\":0}
112+
"{\\"path\\":\\".github/CODEOWNERS\\",\\"owners\\":[\\"@global-owner1\\",\\"@global-owner2\\"]}
113+
{\\"path\\":\\".gitignore\\",\\"owners\\":[\\"@global-owner1\\",\\"@global-owner2\\"]}
114+
{\\"path\\":\\"build/logs/deep/recursive-root-dir-owner.log\\",\\"owners\\":[\\"@doctocat\\"]}
115+
{\\"path\\":\\"build/logs/recursive-root-dir-owner.log\\",\\"owners\\":[\\"@doctocat\\"]}
116+
{\\"path\\":\\"deep/apps/recursive-deep-dir-owner.ts\\",\\"owners\\":[\\"@octocat\\"]}
117+
{\\"path\\":\\"deep/nested-ignore/.gitignore\\",\\"owners\\":[\\"@global-owner1\\",\\"@global-owner2\\"]}
118+
{\\"path\\":\\"deep/nested-ignore/overridden-ignore.js\\",\\"owners\\":[\\"@js-owner\\"]}
119+
{\\"path\\":\\"default-wildcard-owners.md\\",\\"owners\\":[\\"@global-owner1\\",\\"@global-owner2\\"]}
120+
{\\"path\\":\\"docs/non-recursive-dir-owner.md\\",\\"owners\\":[\\"@doctocat\\"]}
121+
{\\"path\\":\\"src/ext-wildcard-owner.js\\",\\"owners\\":[\\"@js-owner\\"]}
122122
"
123123
`;
124124

@@ -129,11 +129,11 @@ exports[`audit jsonl should show only unloved files when asked: stdout 1`] = `""
129129
exports[`audit jsonl should use a specific root when asked: stderr 1`] = `""`;
130130

131131
exports[`audit jsonl should use a specific root when asked: stdout 1`] = `
132-
"{\\"path\\":\\"deep/apps/recursive-deep-dir-owner.ts\\",\\"owners\\":[\\"@octocat\\"],\\"lines\\":0}
133-
{\\"path\\":\\"deep/nested-ignore/.gitignore\\",\\"owners\\":[\\"@global-owner1\\",\\"@global-owner2\\"],\\"lines\\":2}
134-
{\\"path\\":\\"deep/nested-ignore/explicit-ignore.js\\",\\"owners\\":[\\"@js-owner\\"],\\"lines\\":0}
135-
{\\"path\\":\\"deep/nested-ignore/node_modules/ignored-by-inherited-rule.txt\\",\\"owners\\":[\\"@global-owner1\\",\\"@global-owner2\\"],\\"lines\\":0}
136-
{\\"path\\":\\"deep/nested-ignore/overridden-ignore.js\\",\\"owners\\":[\\"@js-owner\\"],\\"lines\\":0}
132+
"{\\"path\\":\\"deep/apps/recursive-deep-dir-owner.ts\\",\\"owners\\":[\\"@octocat\\"]}
133+
{\\"path\\":\\"deep/nested-ignore/.gitignore\\",\\"owners\\":[\\"@global-owner1\\",\\"@global-owner2\\"]}
134+
{\\"path\\":\\"deep/nested-ignore/explicit-ignore.js\\",\\"owners\\":[\\"@js-owner\\"]}
135+
{\\"path\\":\\"deep/nested-ignore/node_modules/ignored-by-inherited-rule.txt\\",\\"owners\\":[\\"@global-owner1\\",\\"@global-owner2\\"]}
136+
{\\"path\\":\\"deep/nested-ignore/overridden-ignore.js\\",\\"owners\\":[\\"@js-owner\\"]}
137137
"
138138
`;
139139

src/commands/__snapshots__/git.test.int.ts.snap

Lines changed: 52 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -67,64 +67,64 @@ tslint.json
6767
exports[`git jsonl should list ownership at the specific commit when a commit sha is provided: stderr 1`] = `""`;
6868

6969
exports[`git jsonl should list ownership at the specific commit when a commit sha is provided: stdout 1`] = `
70-
"{\\"path\\":\\".github/CODEOWNERS\\",\\"owners\\":[],\\"lines\\":0}
71-
{\\"path\\":\\".gitignore\\",\\"owners\\":[],\\"lines\\":0}
72-
{\\"path\\":\\".idea/codeStyles/codeStyleConfig.xml\\",\\"owners\\":[],\\"lines\\":0}
73-
{\\"path\\":\\".idea/github-codeowners.iml\\",\\"owners\\":[],\\"lines\\":0}
74-
{\\"path\\":\\".idea/inspectionProfiles/Project_Default.xml\\",\\"owners\\":[],\\"lines\\":0}
75-
{\\"path\\":\\".idea/jsLibraryMappings.xml\\",\\"owners\\":[],\\"lines\\":0}
76-
{\\"path\\":\\".idea/misc.xml\\",\\"owners\\":[],\\"lines\\":0}
77-
{\\"path\\":\\".idea/modules.xml\\",\\"owners\\":[],\\"lines\\":0}
78-
{\\"path\\":\\".idea/vcs.xml\\",\\"owners\\":[],\\"lines\\":0}
79-
{\\"path\\":\\"README.md\\",\\"owners\\":[],\\"lines\\":0}
80-
{\\"path\\":\\"package-lock.json\\",\\"owners\\":[],\\"lines\\":0}
81-
{\\"path\\":\\"package.json\\",\\"owners\\":[],\\"lines\\":0}
82-
{\\"path\\":\\"src/cli.ts\\",\\"owners\\":[\\"@jjmschofield\\"],\\"lines\\":0}
83-
{\\"path\\":\\"src/commands/audit.ts\\",\\"owners\\":[\\"@jjmschofield\\"],\\"lines\\":0}
84-
{\\"path\\":\\"src/commands/git.ts\\",\\"owners\\":[\\"@jjmschofield\\"],\\"lines\\":0}
85-
{\\"path\\":\\"src/commands/who.ts\\",\\"owners\\":[\\"@jjmschofield\\"],\\"lines\\":0}
86-
{\\"path\\":\\"src/lib/OwnedFile.ts\\",\\"owners\\":[\\"@jjmschofield\\"],\\"lines\\":0}
87-
{\\"path\\":\\"src/lib/OwnershipEngine.ts\\",\\"owners\\":[\\"@jjmschofield\\"],\\"lines\\":0}
88-
{\\"path\\":\\"src/lib/dir.ts\\",\\"owners\\":[\\"@jjmschofield\\"],\\"lines\\":0}
89-
{\\"path\\":\\"src/lib/stats.ts\\",\\"owners\\":[\\"@jjmschofield\\"],\\"lines\\":0}
90-
{\\"path\\":\\"src/lib/types.ts\\",\\"owners\\":[\\"@jjmschofield\\"],\\"lines\\":0}
91-
{\\"path\\":\\"src/lib/writers.ts\\",\\"owners\\":[\\"@jjmschofield\\"],\\"lines\\":0}
92-
{\\"path\\":\\"tsconfig.json\\",\\"owners\\":[],\\"lines\\":0}
93-
{\\"path\\":\\"tslint.json\\",\\"owners\\":[],\\"lines\\":0}
70+
"{\\"path\\":\\".github/CODEOWNERS\\",\\"owners\\":[]}
71+
{\\"path\\":\\".gitignore\\",\\"owners\\":[]}
72+
{\\"path\\":\\".idea/codeStyles/codeStyleConfig.xml\\",\\"owners\\":[]}
73+
{\\"path\\":\\".idea/github-codeowners.iml\\",\\"owners\\":[]}
74+
{\\"path\\":\\".idea/inspectionProfiles/Project_Default.xml\\",\\"owners\\":[]}
75+
{\\"path\\":\\".idea/jsLibraryMappings.xml\\",\\"owners\\":[]}
76+
{\\"path\\":\\".idea/misc.xml\\",\\"owners\\":[]}
77+
{\\"path\\":\\".idea/modules.xml\\",\\"owners\\":[]}
78+
{\\"path\\":\\".idea/vcs.xml\\",\\"owners\\":[]}
79+
{\\"path\\":\\"README.md\\",\\"owners\\":[]}
80+
{\\"path\\":\\"package-lock.json\\",\\"owners\\":[]}
81+
{\\"path\\":\\"package.json\\",\\"owners\\":[]}
82+
{\\"path\\":\\"src/cli.ts\\",\\"owners\\":[\\"@jjmschofield\\"]}
83+
{\\"path\\":\\"src/commands/audit.ts\\",\\"owners\\":[\\"@jjmschofield\\"]}
84+
{\\"path\\":\\"src/commands/git.ts\\",\\"owners\\":[\\"@jjmschofield\\"]}
85+
{\\"path\\":\\"src/commands/who.ts\\",\\"owners\\":[\\"@jjmschofield\\"]}
86+
{\\"path\\":\\"src/lib/OwnedFile.ts\\",\\"owners\\":[\\"@jjmschofield\\"]}
87+
{\\"path\\":\\"src/lib/OwnershipEngine.ts\\",\\"owners\\":[\\"@jjmschofield\\"]}
88+
{\\"path\\":\\"src/lib/dir.ts\\",\\"owners\\":[\\"@jjmschofield\\"]}
89+
{\\"path\\":\\"src/lib/stats.ts\\",\\"owners\\":[\\"@jjmschofield\\"]}
90+
{\\"path\\":\\"src/lib/types.ts\\",\\"owners\\":[\\"@jjmschofield\\"]}
91+
{\\"path\\":\\"src/lib/writers.ts\\",\\"owners\\":[\\"@jjmschofield\\"]}
92+
{\\"path\\":\\"tsconfig.json\\",\\"owners\\":[]}
93+
{\\"path\\":\\"tslint.json\\",\\"owners\\":[]}
9494
"
9595
`;
9696

9797
exports[`git jsonl should list ownership of files changed between specific commits: stderr 1`] = `""`;
9898

9999
exports[`git jsonl should list ownership of files changed between specific commits: stdout 1`] = `
100-
"{\\"path\\":\\".circleci/config.yml\\",\\"owners\\":[],\\"lines\\":0}
101-
{\\"path\\":\\".gitignore\\",\\"owners\\":[],\\"lines\\":0}
102-
{\\"path\\":\\".idea/runConfigurations/test_int.xml\\",\\"owners\\":[],\\"lines\\":0}
103-
{\\"path\\":\\"README.md\\",\\"owners\\":[],\\"lines\\":0}
104-
{\\"path\\":\\"__mocks__/recursive-readdir.js\\",\\"owners\\":[],\\"lines\\":0}
105-
{\\"path\\":\\"jest.config.js\\",\\"owners\\":[],\\"lines\\":0}
106-
{\\"path\\":\\"package-lock.json\\",\\"owners\\":[],\\"lines\\":0}
107-
{\\"path\\":\\"package.json\\",\\"owners\\":[],\\"lines\\":0}
108-
{\\"path\\":\\"src/cli.ts\\",\\"owners\\":[\\"@jjmschofield\\"],\\"lines\\":0}
109-
{\\"path\\":\\"src/commands/__fixtures__/default/files.json\\",\\"owners\\":[\\"@jjmschofield\\"],\\"lines\\":0}
110-
{\\"path\\":\\"src/commands/__fixtures__/default/gitignore\\",\\"owners\\":[\\"@jjmschofield\\"],\\"lines\\":0}
111-
{\\"path\\":\\"src/commands/__fixtures__/default/gitignore-deep\\",\\"owners\\":[\\"@jjmschofield\\"],\\"lines\\":0}
112-
{\\"path\\":\\"src/commands/__fixtures__/default/index.ts\\",\\"owners\\":[\\"@jjmschofield\\"],\\"lines\\":0}
113-
{\\"path\\":\\"src/commands/__fixtures__/default/owners\\",\\"owners\\":[\\"@jjmschofield\\"],\\"lines\\":0}
114-
{\\"path\\":\\"src/commands/__fixtures__/project-builder.test.helper.ts\\",\\"owners\\":[\\"@jjmschofield\\"],\\"lines\\":0}
115-
{\\"path\\":\\"src/commands/__fixtures__/types.ts\\",\\"owners\\":[\\"@jjmschofield\\"],\\"lines\\":0}
116-
{\\"path\\":\\"src/commands/__snapshots__/audit.test.int.ts.snap\\",\\"owners\\":[\\"@jjmschofield\\"],\\"lines\\":0}
117-
{\\"path\\":\\"src/commands/audit.test.int.ts\\",\\"owners\\":[\\"@jjmschofield\\"],\\"lines\\":0}
118-
{\\"path\\":\\"src/lib/OwnedFile.ts\\",\\"owners\\":[\\"@jjmschofield\\"],\\"lines\\":0}
119-
{\\"path\\":\\"src/lib/OwnershipEngine.test.ts\\",\\"owners\\":[\\"@jjmschofield\\"],\\"lines\\":0}
120-
{\\"path\\":\\"src/lib/OwnershipEngine.ts\\",\\"owners\\":[\\"@jjmschofield\\"],\\"lines\\":0}
121-
{\\"path\\":\\"src/lib/dir.ts\\",\\"owners\\":[\\"@jjmschofield\\"],\\"lines\\":0}
122-
{\\"path\\":\\"src/lib/gitignore.test.ts\\",\\"owners\\":[\\"@jjmschofield\\"],\\"lines\\":0}
123-
{\\"path\\":\\"src/lib/gitignore.ts\\",\\"owners\\":[\\"@jjmschofield\\"],\\"lines\\":0}
124-
{\\"path\\":\\"src/lib/logger.ts\\",\\"owners\\":[\\"@jjmschofield\\"],\\"lines\\":0}
125-
{\\"path\\":\\"src/lib/writers.ts\\",\\"owners\\":[\\"@jjmschofield\\"],\\"lines\\":0}
126-
{\\"path\\":\\"tsconfig.json\\",\\"owners\\":[],\\"lines\\":0}
127-
{\\"path\\":\\"tslint.json\\",\\"owners\\":[],\\"lines\\":0}
100+
"{\\"path\\":\\".circleci/config.yml\\",\\"owners\\":[]}
101+
{\\"path\\":\\".gitignore\\",\\"owners\\":[]}
102+
{\\"path\\":\\".idea/runConfigurations/test_int.xml\\",\\"owners\\":[]}
103+
{\\"path\\":\\"README.md\\",\\"owners\\":[]}
104+
{\\"path\\":\\"__mocks__/recursive-readdir.js\\",\\"owners\\":[]}
105+
{\\"path\\":\\"jest.config.js\\",\\"owners\\":[]}
106+
{\\"path\\":\\"package-lock.json\\",\\"owners\\":[]}
107+
{\\"path\\":\\"package.json\\",\\"owners\\":[]}
108+
{\\"path\\":\\"src/cli.ts\\",\\"owners\\":[\\"@jjmschofield\\"]}
109+
{\\"path\\":\\"src/commands/__fixtures__/default/files.json\\",\\"owners\\":[\\"@jjmschofield\\"]}
110+
{\\"path\\":\\"src/commands/__fixtures__/default/gitignore\\",\\"owners\\":[\\"@jjmschofield\\"]}
111+
{\\"path\\":\\"src/commands/__fixtures__/default/gitignore-deep\\",\\"owners\\":[\\"@jjmschofield\\"]}
112+
{\\"path\\":\\"src/commands/__fixtures__/default/index.ts\\",\\"owners\\":[\\"@jjmschofield\\"]}
113+
{\\"path\\":\\"src/commands/__fixtures__/default/owners\\",\\"owners\\":[\\"@jjmschofield\\"]}
114+
{\\"path\\":\\"src/commands/__fixtures__/project-builder.test.helper.ts\\",\\"owners\\":[\\"@jjmschofield\\"]}
115+
{\\"path\\":\\"src/commands/__fixtures__/types.ts\\",\\"owners\\":[\\"@jjmschofield\\"]}
116+
{\\"path\\":\\"src/commands/__snapshots__/audit.test.int.ts.snap\\",\\"owners\\":[\\"@jjmschofield\\"]}
117+
{\\"path\\":\\"src/commands/audit.test.int.ts\\",\\"owners\\":[\\"@jjmschofield\\"]}
118+
{\\"path\\":\\"src/lib/OwnedFile.ts\\",\\"owners\\":[\\"@jjmschofield\\"]}
119+
{\\"path\\":\\"src/lib/OwnershipEngine.test.ts\\",\\"owners\\":[\\"@jjmschofield\\"]}
120+
{\\"path\\":\\"src/lib/OwnershipEngine.ts\\",\\"owners\\":[\\"@jjmschofield\\"]}
121+
{\\"path\\":\\"src/lib/dir.ts\\",\\"owners\\":[\\"@jjmschofield\\"]}
122+
{\\"path\\":\\"src/lib/gitignore.test.ts\\",\\"owners\\":[\\"@jjmschofield\\"]}
123+
{\\"path\\":\\"src/lib/gitignore.ts\\",\\"owners\\":[\\"@jjmschofield\\"]}
124+
{\\"path\\":\\"src/lib/logger.ts\\",\\"owners\\":[\\"@jjmschofield\\"]}
125+
{\\"path\\":\\"src/lib/writers.ts\\",\\"owners\\":[\\"@jjmschofield\\"]}
126+
{\\"path\\":\\"tsconfig.json\\",\\"owners\\":[]}
127+
{\\"path\\":\\"tslint.json\\",\\"owners\\":[]}
128128
"
129129
`;
130130

src/commands/audit.test.int.ts

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -76,18 +76,6 @@ describe('audit', () => {
7676
expect(stdout).toMatchSnapshot('stdout');
7777
expect(stderr).toMatchSnapshot('stderr');
7878
});
79-
80-
it('should be reasonably performant', async () => {
81-
const start = Date.now();
82-
83-
await runCli(`audit -o ${output}`);
84-
85-
const end = Date.now();
86-
87-
const execMs = end - start;
88-
89-
expect(execMs).toBeLessThan(200);
90-
});
9179
});
9280
}
9381
});

src/commands/audit.ts

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
import { OUTPUT_FORMAT, writeOwnedFile, writeStats } from '../lib/writers';
2-
import { calcFileStats } from '../lib/stats';
3-
import { getFileOwnership } from '../lib/ownership';
1+
import pMap from 'p-map';
2+
import { OUTPUT_FORMAT } from '../lib/types';
3+
import { calcFileStats, statsWriter } from '../lib/stats';
4+
import { getOwnership } from '../lib/ownership';
5+
import { FILE_DISCOVERY_STRATEGY, getFilePaths } from '../lib/file';
46

57
interface AuditOptions {
68
codeowners: string;
@@ -13,21 +15,26 @@ interface AuditOptions {
1315
}
1416

1517
export const audit = async (options: AuditOptions) => {
16-
const files = await getFileOwnership(options);
18+
const strategy = options.onlyGit ? FILE_DISCOVERY_STRATEGY.GIT_LS : FILE_DISCOVERY_STRATEGY.FILE_SYSTEM;
19+
const filePaths = await getFilePaths(options.dir, strategy, options.root);
20+
21+
const files = await getOwnership(options.codeowners, filePaths);
1722

1823
if (options.stats) {
24+
await pMap(files, f => f.updateLineCount(), { concurrency: 100 });
25+
1926
const stats = calcFileStats(files);
20-
writeStats(stats, options, process.stdout);
27+
statsWriter(stats, options, process.stdout);
2128
return;
2229
}
2330

2431
for (const file of files) {
2532
if (options.unloved) {
2633
if (file.owners.length < 1) {
27-
writeOwnedFile(file, options, process.stdout);
34+
file.write(options.output, process.stdout);
2835
}
2936
} else {
30-
writeOwnedFile(file, options, process.stdout);
37+
file.write(options.output, process.stdout);
3138
}
3239
}
3340
};

src/commands/git.test.int.ts

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -36,18 +36,6 @@ describe('git', () => {
3636
expect(stdout).toMatchSnapshot('stdout');
3737
expect(stderr).toMatchSnapshot('stderr');
3838
});
39-
40-
it('should be reasonably performant', async () => {
41-
const start = Date.now();
42-
43-
await runCli(`git 2d9bde975c5a5b1a20c57ce0918b0071dcd44e61 062f7fe9568b8f66ca97f67c6be9ead0eaba7b38 -o ${output}`);
44-
45-
const end = Date.now();
46-
47-
const execMs = end - start;
48-
49-
expect(execMs).toBeLessThan(200);
50-
});
5139
});
5240
}
5341
});

0 commit comments

Comments
 (0)