in src/github/folderRepositoryManager.ts [1924:1969]
async findUpstreamForItem(item: {
remote: Remote;
githubRepository: GitHubRepository;
}): Promise<{ needsFork: boolean; upstream?: GitHubRepository; remote?: Remote }> {
let upstream: GitHubRepository | undefined;
let existingForkRemote: Remote | undefined;
for (const githubRepo of this.gitHubRepositories) {
if (
!upstream &&
githubRepo.remote.owner === item.remote.owner &&
githubRepo.remote.repositoryName === item.remote.repositoryName
) {
upstream = githubRepo;
continue;
}
const forkDetails = await githubRepo.getRepositoryForkDetails();
if (
forkDetails &&
forkDetails.isFork &&
forkDetails.parent.owner.login === item.remote.owner &&
forkDetails.parent.name === item.remote.repositoryName
) {
const foundforkPermission = await githubRepo.getViewerPermission();
if (
foundforkPermission === ViewerPermission.Admin ||
foundforkPermission === ViewerPermission.Maintain ||
foundforkPermission === ViewerPermission.Write
) {
existingForkRemote = githubRepo.remote;
break;
}
}
}
let needsFork = false;
if (upstream && !existingForkRemote) {
const permission = await item.githubRepository.getViewerPermission();
if (
permission === ViewerPermission.Read ||
permission === ViewerPermission.Triage ||
permission === ViewerPermission.Unknown
) {
needsFork = true;
}
}
return { needsFork, upstream, remote: existingForkRemote };
}