in src/desktop/ci/job_log_content_provider.ts [226:270]
async provideTextDocumentContent(uri: vscode.Uri): Promise<string | undefined> {
const { repositoryRoot, job: id } = fromJobLogUri(uri);
if (!jobLogCache.get(id)) {
const projectInRepository = getProjectRepository().getProjectOrFail(repositoryRoot);
const gitlabService = getGitLabService(projectInRepository);
const response = await gitlabService.getJobTrace(projectInRepository.project, id);
assert(response);
const { rawTrace, eTag } = response;
const branchState = await currentBranchRefresher.getOrRetrieveState();
let isRunning: boolean;
if (branchState.type !== 'invalid') {
const jobItem = branchState.jobs.find(j => j.id === id);
isRunning = jobItem?.status === 'running';
} else {
isRunning = false;
}
if (isRunning) {
jobLogCache.setForRunning(repositoryRoot, id, rawTrace, eTag);
} else {
jobLogCache.set(id, rawTrace);
}
} else {
jobLogCache.touch(id);
}
const cacheItem = jobLogCache.get(id);
assert(cacheItem);
this.#suppressScrollToggle = true;
if (!cacheItem.filtered) {
const { rawTrace, eTag } = cacheItem;
const { sections, decorations, filtered } =
await this.#decorationProvider.provideDecorationsForPrettifiedAnsi(rawTrace, eTag !== null);
jobLogCache.addDecorations(id, sections, decorations, filtered);
return filtered;
}
return cacheItem.filtered;
}