Skip to content

Instantly share code, notes, and snippets.

@andersk
Last active July 6, 2018 04:04
Show Gist options
  • Select an option

  • Save andersk/72bf1e03fb5c8fff0b13e3dc497d85cd to your computer and use it in GitHub Desktop.

Select an option

Save andersk/72bf1e03fb5c8fff0b13e3dc497d85cd to your computer and use it in GitHub Desktop.

Revisions

  1. andersk revised this gist Jul 6, 2018. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions check-ubuntu-version-monotonicity.py
    Original file line number Diff line number Diff line change
    @@ -1,6 +1,6 @@
    #!/usr/bin/python3
    import apt_pkg
    import deb822
    import debian.deb822
    import gzip
    import sys
    from io import BytesIO
    @@ -30,7 +30,7 @@ def get_pocket_component_versions(pocket, component):
    with urlopen(url) as fz, gzip.open(fz) as f:
    return {
    src["Package"]: src["Version"]
    for src in deb822.Sources.iter_paragraphs(BytesIO(f.read()))
    for src in debian.deb822.Sources.iter_paragraphs(BytesIO(f.read()))
    }


  2. andersk created this gist Jul 6, 2018.
    54 changes: 54 additions & 0 deletions check-ubuntu-version-monotonicity.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,54 @@
    #!/usr/bin/python3
    import apt_pkg
    import deb822
    import gzip
    import sys
    from io import BytesIO
    from ubuntutools.lp.lpapicache import Distribution
    from urllib.request import urlopen

    COMPONENTS = ["main", "restricted", "universe", "multiverse"]
    POCKETS = ["", "-security", "-updates"]

    apt_pkg.init_system()


    def merge_versions(version_dicts):
    out = {}
    for d in version_dicts:
    for p, v in d.items():
    if p not in out or apt_pkg.version_compare(v, out[p]) > 0:
    out[p] = v
    return out


    def get_pocket_component_versions(pocket, component):
    url = (
    f"http://archive.ubuntu.com/ubuntu/dists/{pocket}/{component}/source/Sources.gz"
    )
    print(f"Reading {url}", file=sys.stderr)
    with urlopen(url) as fz, gzip.open(fz) as f:
    return {
    src["Package"]: src["Version"]
    for src in deb822.Sources.iter_paragraphs(BytesIO(f.read()))
    }


    def get_release_versions(release):
    return merge_versions(
    get_pocket_component_versions(release + pocket, component)
    for pocket in POCKETS
    for component in COMPONENTS
    )


    dist = Distribution("ubuntu")
    releases = [series.name for series in dist.series if series.active]
    versions = {release: get_release_versions(release) for release in releases}

    for new, old in zip(releases[:-1], releases[1:]):
    print(f"Comparing {new}, {old}:")
    for p in sorted(set(versions[new]) & set(versions[old])):
    if apt_pkg.version_compare(versions[new][p], versions[old][p]) < 0:
    print(f"{p} {versions[new][p]} < {versions[old][p]}")
    print()