async findBuildRequestWithSameRoots()

in resources/perf.webkit.org/public/v3/models/build-request.js [91:130]


    async findBuildRequestWithSameRoots()
    {
        if (!this.isBuild())
            return null;
        let scheduledBuildRequest = null;
        let runningBuildRequest = null;
        // Set ignoreCache = true as latest status of test groups is expected.
        const allTestGroupsInTask = await TestGroup.fetchForTask(this.analysisTaskId(), true);
        const rawManifest = await Manifest.fetchRawResponse();
        const earliestRootCreatingTimeForReuse = rawManifest.maxRootReuseAgeInDays ?
            Date.now() - rawManifest.maxRootReuseAgeInDays * 24 * 3600 * 1000 : 0;

        for (const group of allTestGroupsInTask) {
            if (group.id() == this.testGroupId())
                continue;
            if (group.isHidden())
                continue;
            for (const buildRequest of group.buildRequests()) {
                if (!buildRequest.isBuild())
                    continue;
                if (!this.platform().isInSameGroupAs(buildRequest.platform()))
                    continue;
                if (!buildRequest.commitSet().equalsIgnoringRoot(this.commitSet()))
                    continue;
                if (!buildRequest.commitSet().areAllRootsAvailable(earliestRootCreatingTimeForReuse))
                    continue;
                if (buildRequest.hasCompleted())
                    return buildRequest;
                if (buildRequest.isScheduled()
                    && (!scheduledBuildRequest || buildRequest.createdAt() < scheduledBuildRequest.createdAt())) {
                    scheduledBuildRequest = buildRequest;
                }
                if (buildRequest.status() == 'running'
                    && (!runningBuildRequest || buildRequest.createdAt() < runningBuildRequest.createdAt())) {
                    runningBuildRequest = buildRequest;
                }
            }
        }
        return runningBuildRequest || scheduledBuildRequest;
    }