async function handleRepository()

in index.js [167:216]


	async function handleRepository(repository, displayName = repository, isPrivate = false) {
		console.log(`[${displayName}] Processing repository ${displayName}`);
		const [ owner, repo ] = repository.split('/');

		console.log(`[${displayName}] Loading cache entries...`);
		const cache = await loadCacheForRepo(owner, repo);
		console.log(`[${displayName}] Found ${Object.keys(cache).length} cache entries`);

		let page = 1;
		let shouldCheckNextPage = true;
		while(shouldCheckNextPage) {
			console.log(`[${displayName}#${page}] Requesting issues using etag: ${cache[page]}`);
			try {
				const headers = cache[page] ? { 'If-None-Match': cache[page] } : {};
				const response = await octokit.issues.listForRepo({
					owner,
					repo,
					page,
					per_page: 100,
					state: 'all',
					sort: 'created',
					direction: 'asc',
					headers: headers
				});
				console.log(`[${displayName}#${page}] Remaining request limit: %s/%s`,
					response.headers['x-ratelimit-remaining'],
					response.headers['x-ratelimit-limit']
				);
				const indexName = isPrivate ? `private-issues-${owner}-${repo}` : `issues-${owner}-${repo}`;
				await processGitHubIssues(owner, repo, response, page, indexName, displayName);
				shouldCheckNextPage = response.headers.link && response.headers.link.includes('rel="next"');
				page++;
			} catch (error) {
				if (error.name === 'HttpError' && error.status === 304) {
					// Ignore not modified responses and continue with the next page.
					console.log(`[${displayName}#${page}] Page was not modified. Continue with next page.`);
					page++;
					continue;
				}

				if(error.request && error.request.request.retryCount) {
					console.error(`[${displayName}#${page}] Failed request for page after ${error.request.request.retryCount} retries.`);
					console.error(`[${displayName}#${page}] ${error.toString()}`);
				} else {
					console.error(error);
				}
				throw error;
			}
		}
	}