fix: display UI to fork a repo only when fork doesn't exist (#2802)
This commit is contained in:
parent
eaeaf44832
commit
7f90d0e065
@ -145,6 +145,28 @@ export default class GitHub {
|
|||||||
return this._userIsOriginMaintainerPromises[username];
|
return this._userIsOriginMaintainerPromises[username];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async forkExists({ token }) {
|
||||||
|
try {
|
||||||
|
const currentUser = await this.currentUser({ token });
|
||||||
|
const repoName = this.originRepo.split('/')[1];
|
||||||
|
const repo = await fetch(`${this.api_root}/repos/${currentUser.login}/${repoName}`, {
|
||||||
|
method: 'GET',
|
||||||
|
headers: {
|
||||||
|
Authorization: `token ${token}`,
|
||||||
|
},
|
||||||
|
}).then(res => res.json());
|
||||||
|
|
||||||
|
// https://developer.github.com/v3/repos/#get
|
||||||
|
// The parent and source objects are present when the repository is a fork.
|
||||||
|
// parent is the repository this repository was forked from, source is the ultimate source for the network.
|
||||||
|
const forkExists =
|
||||||
|
repo.fork === true && repo.parent && repo.parent.full_name === this.originRepo;
|
||||||
|
return forkExists;
|
||||||
|
} catch {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async authenticateWithFork({ userData, getPermissionToFork }) {
|
async authenticateWithFork({ userData, getPermissionToFork }) {
|
||||||
if (!this.openAuthoringEnabled) {
|
if (!this.openAuthoringEnabled) {
|
||||||
throw new Error('Cannot authenticate with fork; Open Authoring is turned off.');
|
throw new Error('Cannot authenticate with fork; Open Authoring is turned off.');
|
||||||
@ -158,7 +180,9 @@ export default class GitHub {
|
|||||||
return Promise.resolve();
|
return Promise.resolve();
|
||||||
}
|
}
|
||||||
|
|
||||||
await getPermissionToFork();
|
if (!(await this.forkExists({ token }))) {
|
||||||
|
await getPermissionToFork();
|
||||||
|
}
|
||||||
|
|
||||||
const fork = await fetch(`${this.api_root}/repos/${this.originRepo}/forks`, {
|
const fork = await fetch(`${this.api_root}/repos/${this.originRepo}/forks`, {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
|
Loading…
x
Reference in New Issue
Block a user