Ejemplo n.º 1
0
    def __init__(
        self,
        base_dir,
        repository,
        changeset,
        platform=DEFAULT_FILTER,
        suite=DEFAULT_FILTER,
        push_id=None,
        date=None,
    ):
        assert isinstance(repository, str)
        assert isinstance(changeset, str)
        self.base_dir = base_dir
        self.repository = repository
        self.changeset = changeset
        self.platform = platform
        self.suite = suite

        # Get extra information from HGMO
        if push_id or date:
            self.push_id = push_id
            self.date = date
        else:
            self.push_id, date = hgmo_revision_details(repository, changeset)
            self.date = int(date)
Ejemplo n.º 2
0
    def find_closest_report(self,
                            repository,
                            changeset,
                            platform=DEFAULT_FILTER,
                            suite=DEFAULT_FILTER):
        """
        Find the closest report from specified changeset:
        1. Lookup the changeset push in cache
        2. Lookup the changeset push in HGMO
        3. Find the first report after that push
        """

        # Lookup push from cache (fast)
        key = KEY_CHANGESET.format(repository=repository, changeset=changeset)
        push_id = self.redis.hget(key, "push")
        if push_id:
            # Redis lib uses bytes for all output
            push_id = int(push_id.decode("utf-8"))
            date = self.redis.hget(key, "date").decode("utf-8")

            # Check the report variant is available locally
            report = Report(
                self.reports_dir,
                repository,
                changeset,
                platform,
                suite,
                push_id=push_id,
                date=date,
            )
            if not os.path.exists(report.path):
                self.ingest_report(report)
        else:

            # Lookup push from HGMO (slow)
            push_id, _ = hgmo_revision_details(repository, changeset)

            # Ingest pushes as we clearly don't have it in cache
            self.ingest_pushes(repository,
                               platform,
                               suite,
                               min_push_id=push_id - 1,
                               nb_pages=1)

        # Load report from that push
        return self.find_report(repository,
                                platform,
                                suite,
                                push_range=(push_id, MAX_PUSH))