Add contributor filtering

This commit is contained in:
2018-06-02 20:15:53 +05:30
parent 89ce43ed41
commit a58a437210
+89 -10
View File
@@ -32,6 +32,11 @@ interface ResponseFromCompareCommits {
}; };
} }
interface ResponseFromGetContributors {
data: OwnerFromGetContributors[] | undefined;
meta: {};
}
interface RepoFromGetUserRepo { interface RepoFromGetUserRepo {
default_branch: string; default_branch: string;
description: string; description: string;
@@ -57,6 +62,8 @@ interface OwnerFromGetUserRepo {
type: UserType; type: UserType;
} }
type OwnerFromGetContributors = OwnerFromGetUserRepo;
enum UserType { enum UserType {
User = 'User', User = 'User',
} }
@@ -202,6 +209,36 @@ async function fetchNoneOfForkBranchesIsAhead(
}; };
} }
async function fetchUserIsNotContributor(
repoName: string
): Promise<RepoNameWithUnusedFlag> {
const responseFromGetContributors: ResponseFromGetContributors = ((await octokit.repos.getContributors(
{
owner: username,
repo: repoName,
anon: '0',
per_page: 100,
page: 1,
}
)) as any) as ResponseFromGetContributors;
let contributors = responseFromGetContributors.data;
if (contributors === undefined) {
contributors = [];
}
const foundContributor = contributors.find(
tmpContributor => tmpContributor.login === username
);
return {
// tslint:disable-next-line:object-literal-shorthand
repoName: repoName,
unused: foundContributor === undefined,
};
}
async function fetchUnusedForkedRepos() { async function fetchUnusedForkedRepos() {
const repos: ResponseFromGetUserRepo = await octokit.repos.getForUser({ const repos: ResponseFromGetUserRepo = await octokit.repos.getForUser({
// tslint:disable-next-line:object-literal-shorthand // tslint:disable-next-line:object-literal-shorthand
@@ -209,7 +246,7 @@ async function fetchUnusedForkedRepos() {
// type, // type,
// sort, // sort,
// direction, // direction,
per_page: 20, // solve pagination // change this value // handle abuse detection per_page: 100, // solve pagination // change this value // handle abuse detection
// page, // page,
}); });
@@ -274,17 +311,59 @@ async function fetchUnusedForkedRepos() {
} }
} }
const allPromiseRepoNameWithUnusedFlag = allRepoNameWithBranchesAndParent.map( const allRepoWithFlagMerged: RepoNameWithUnusedFlag[] = [];
(repoInfo: RepoNameWithBranchesAndParent) => {
return fetchNoneOfForkBranchesIsAhead(repoInfo); {
const allPromiseRepoWithFlagFromCommit = allRepoNameWithBranchesAndParent.map(
(repoInfo: RepoNameWithBranchesAndParent) => {
return fetchNoneOfForkBranchesIsAhead(repoInfo);
}
);
const allPromiseRepoWithFlagFromContrib = allRepoNameWithBranchesAndParent.map(
({ repoName }) => {
return fetchUserIsNotContributor(repoName);
}
);
const allRepoWithFlagFromCommit: RepoNameWithUnusedFlag[] = await Promise.all(
allPromiseRepoWithFlagFromCommit
);
const allRepoWithFlagFromContrib: RepoNameWithUnusedFlag[] = await Promise.all(
allPromiseRepoWithFlagFromContrib
);
{
assert.strictEqual(
allRepoWithFlagFromCommit.length,
allRepoWithFlagFromContrib.length,
'Length of `allRepoWithFlagFromCommit` and `allRepoWithFlagFromContrib` should be same'
);
const repoCount = allRepoWithFlagFromCommit.length;
for (let index = 0; index < repoCount; index++) {
const tmpObjFromCommit = allRepoWithFlagFromCommit[index];
const tmpObjFromContrib = allRepoWithFlagFromContrib[index];
assert.strictEqual(
tmpObjFromCommit.repoName,
tmpObjFromContrib.repoName,
'Reponame from same index of `allRepoWithFlagFromCommit` and `allRepoWithFlagFromContrib` should be same'
);
const tmpRepoName = tmpObjFromCommit.repoName;
allRepoWithFlagMerged.push({
repoName: tmpRepoName,
unused: tmpObjFromCommit.unused && tmpObjFromContrib.unused,
});
}
} }
); }
const allRepoNameWithUnusedFlag = await Promise.all( const unusedRepoNames = allRepoWithFlagMerged
allPromiseRepoNameWithUnusedFlag
);
const unusedRepoNames = allRepoNameWithUnusedFlag
.filter(tmp => tmp.unused) .filter(tmp => tmp.unused)
.map(tmp => tmp.repoName); .map(tmp => tmp.repoName);