def display_releases(current: Union[(str, Hash)], filter_branches: Set[str], releases: List[Release]) -> None:
    max_branch_len = max(10, max((len(release.branch) for release in releases), default=10))
    release_format = (('{: <5} {: <' + str(max_branch_len)) + '} {: <10} {: <10} {: <14}')
    click.echo(release_format.format('Live', 'Branch', 'Version', 'Size', 'Hash'))
    for (_, grouped_releases) in itertools.groupby(releases, (lambda r: r.branch)):
        for release in grouped_releases:
            if ((not filter_branches) or (release.branch in filter_branches)):
                click.echo(release_format.format((' -->' if ((release.key == current) or (release.hash == current)) else ''), release.branch, str(release.version), sizeof_fmt(release.size), str(release.hash)))
def display_releases(current: Union[(str, Hash)], filter_branches: Set[str], releases: List[Release]) -> None:
    max_branch_len = max(10, max((len(release.branch) for release in releases), default=10))
    release_format = (('{: <5} {: <' + str(max_branch_len)) + '} {: <10} {: <10} {: <14}')
    click.echo(release_format.format('Live', 'Branch', 'Version', 'Size', 'Hash'))
    for (_, grouped_releases) in itertools.groupby(releases, (lambda r: r.branch)):
        for release in grouped_releases:
            if ((not filter_branches) or (release.branch in filter_branches)):
                click.echo(release_format.format((' -->' if ((release.key == current) or (release.hash == current)) else ), release.branch, str(release.version), sizeof_fmt(release.size), str(release.hash)))