-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
results.mjs
23 lines (17 loc) · 1005 Bytes
/
results.mjs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import { execSync } from 'child_process';
import { commitToCoAuthors } from 'commit-to-co-authors';
import getDefaultBranch from './getDefaultBranch.mjs';
/** @type {(remote: string) => Set<string>} */
export default function getResults(remote) {
const defaultBranch = getDefaultBranch(remote);
const logCommitters = `${execSync(`git shortlog -sne ${remote}/${defaultBranch}..HEAD`)}`;
const mappedLogCommitters = logCommitters.matchAll(/\t(?<author>.*)$/gm)
// @ts-expect-error waiting on https://github.com/microsoft/TypeScript/pull/58222
.map(/** @type {(m: { groups: { author: string } }) => string} */ ({ groups: { author } }) => author);
/** @type {Set<string>} */
const fromLogs = new Set(mappedLogCommitters);
const logText = `${execSync(`git log --no-expand-tabs --pretty=full ${remote}/${defaultBranch}..HEAD`)}`;
/** @type {Set<string>} */
const fromMsgs = new Set(commitToCoAuthors(logText).map(({ name, email }) => `${name} <${email}>`));
return fromMsgs.union(fromLogs);
}