def changesetentry()

in hgext/firefoxreleases/__init__.py [0:0]


def changesetentry(orig, web, ctx):
    """Add metadata for an individual changeset in hgweb."""
    d = orig(web, ctx)

    d = pycompat.byteskwargs(d)

    repo = web.repo

    db = db_for_repo(repo)
    if not db:
        return pycompat.strkwargs(d)

    releases = release_info_for_changeset(db, repo, ctx)

    if releases[b"this"]:
        d[b"firefox_releases_here"] = []
        d[b"firefox_releases_first"] = []

        for config, build in sorted(releases[b"this"].items()):
            build[b"anchor"] = releasedb.build_anchor(build)

            # Set links to previous and future releases.
            if config in releases[b"previous"]:
                build[b"previousnode"] = releases[b"previous"][config][b"revision"]

            d[b"firefox_releases_here"].append(build)
            d[b"firefox_releases_first"].append(build)

    if releases[b"future"]:
        d.setdefault(b"firefox_releases_first", [])

        for config, build in sorted(releases[b"future"].items()):
            build[b"anchor"] = releasedb.build_anchor(build)

            if build not in d[b"firefox_releases_first"]:
                d[b"firefox_releases_first"].append(build)

    if releases[b"previous"]:
        d[b"firefox_releases_last"] = []

        for config, build in sorted(releases[b"previous"].items()):
            build[b"anchor"] = releasedb.build_anchor(build)

            d[b"firefox_releases_last"].append(build)

    # Used so we don't display "first release with" and "last release without".
    # We omit displaying in this scenario because we're not confident in the
    # data and don't want to take chances with inaccurate data.
    if b"firefox_releases_first" in d and b"firefox_releases_last" in d:
        d[b"have_first_and_last_firefox_releases"] = True

    # Do some template fixes
    # TODO build via a generator
    if b"firefox_releases_first" in d:
        d[b"firefox_releases_first"] = templateutil.mappinglist(
            d[b"firefox_releases_first"]
        )

    if b"firefox_releases_last" in d:
        d[b"firefox_releases_last"] = templateutil.mappinglist(
            d[b"firefox_releases_last"]
        )

    if b"firefox_releases_here" in d:
        d[b"firefox_releases_here"] = templateutil.mappinglist(
            d[b"firefox_releases_here"]
        )

    return pycompat.strkwargs(d)