parent
964b06bf7e
commit
fe145b66c1
@ -27,6 +27,7 @@ import platform
|
|||||||
import subprocess
|
import subprocess
|
||||||
import importlib
|
import importlib
|
||||||
import collections
|
import collections
|
||||||
|
import pkg_resources
|
||||||
|
|
||||||
from PyQt5.QtCore import (QT_VERSION_STR, PYQT_VERSION_STR, qVersion,
|
from PyQt5.QtCore import (QT_VERSION_STR, PYQT_VERSION_STR, qVersion,
|
||||||
QLibraryInfo)
|
QLibraryInfo)
|
||||||
@ -49,6 +50,53 @@ from qutebrowser.misc import objects
|
|||||||
from qutebrowser.browser import pdfjs
|
from qutebrowser.browser import pdfjs
|
||||||
|
|
||||||
|
|
||||||
|
DistributionInfo = collections.namedtuple(
|
||||||
|
'DistributionInfo', ['id', 'parsed', 'version', 'pretty'])
|
||||||
|
|
||||||
|
|
||||||
|
Distribution = usertypes.enum(
|
||||||
|
'Distribution', ['unknown', 'ubuntu', 'debian', 'void', 'arch',
|
||||||
|
'gentoo', 'fedora', 'opensuse', 'linuxmint', 'manjaro'])
|
||||||
|
|
||||||
|
|
||||||
|
def distribution(filename='/etc/os-release'):
|
||||||
|
"""Get some information about the running Linux distribution.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A DistributionInfo object, or None if no info could be determined.
|
||||||
|
parsed: A Distribution enum member
|
||||||
|
version: A Version object, or None
|
||||||
|
pretty: Always a string (might be "Unknown")
|
||||||
|
"""
|
||||||
|
info = {}
|
||||||
|
try:
|
||||||
|
with open(filename, 'r', encoding='utf-8') as f:
|
||||||
|
for line in f:
|
||||||
|
line = line.strip()
|
||||||
|
if (not line) or line.startswith('#'):
|
||||||
|
continue
|
||||||
|
k, v = line.split("=", maxsplit=1)
|
||||||
|
info[k] = v.strip('"')
|
||||||
|
except (OSError, UnicodeDecodeError):
|
||||||
|
return None
|
||||||
|
|
||||||
|
pretty = info.get('PRETTY_NAME', 'Unknown')
|
||||||
|
|
||||||
|
if 'VERSION_ID' in info:
|
||||||
|
dist_version = pkg_resources.parse_version(info['VERSION_ID'])
|
||||||
|
else:
|
||||||
|
dist_version = None
|
||||||
|
|
||||||
|
dist_id = info.get('ID', None)
|
||||||
|
try:
|
||||||
|
parsed = Distribution[dist_id]
|
||||||
|
except KeyError:
|
||||||
|
parsed = Distribution.unknown
|
||||||
|
|
||||||
|
return DistributionInfo(parsed=parsed, version=dist_version, pretty=pretty,
|
||||||
|
id=dist_id)
|
||||||
|
|
||||||
|
|
||||||
def _git_str():
|
def _git_str():
|
||||||
"""Try to find out git version.
|
"""Try to find out git version.
|
||||||
|
|
||||||
|
@ -29,6 +29,7 @@ import types
|
|||||||
import importlib
|
import importlib
|
||||||
import logging
|
import logging
|
||||||
import textwrap
|
import textwrap
|
||||||
|
import pkg_resources
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
@ -37,6 +38,139 @@ from qutebrowser.utils import version, usertypes
|
|||||||
from qutebrowser.browser import pdfjs
|
from qutebrowser.browser import pdfjs
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('os_release, expected', [
|
||||||
|
# No file
|
||||||
|
(None, None),
|
||||||
|
# Invalid file
|
||||||
|
("\n# foo\n foo=bar=baz",
|
||||||
|
version.DistributionInfo(id=None, parsed=version.Distribution.unknown,
|
||||||
|
version=None, pretty='Unknown')),
|
||||||
|
# Archlinux
|
||||||
|
("""
|
||||||
|
NAME="Arch Linux"
|
||||||
|
PRETTY_NAME="Arch Linux"
|
||||||
|
ID=arch
|
||||||
|
ID_LIKE=archlinux
|
||||||
|
ANSI_COLOR="0;36"
|
||||||
|
HOME_URL="https://www.archlinux.org/"
|
||||||
|
SUPPORT_URL="https://bbs.archlinux.org/"
|
||||||
|
BUG_REPORT_URL="https://bugs.archlinux.org/"
|
||||||
|
""",
|
||||||
|
version.DistributionInfo(
|
||||||
|
id='arch', parsed=version.Distribution.arch, version=None,
|
||||||
|
pretty='Arch Linux')),
|
||||||
|
# Ubuntu 14.04
|
||||||
|
("""
|
||||||
|
NAME="Ubuntu"
|
||||||
|
VERSION="14.04.5 LTS, Trusty Tahr"
|
||||||
|
ID=ubuntu
|
||||||
|
ID_LIKE=debian
|
||||||
|
PRETTY_NAME="Ubuntu 14.04.5 LTS"
|
||||||
|
VERSION_ID="14.04"
|
||||||
|
""",
|
||||||
|
version.DistributionInfo(
|
||||||
|
id='ubuntu', parsed=version.Distribution.ubuntu,
|
||||||
|
version=pkg_resources.parse_version('14.4'),
|
||||||
|
pretty='Ubuntu 14.04.5 LTS')),
|
||||||
|
# Ubuntu 17.04
|
||||||
|
("""
|
||||||
|
NAME="Ubuntu"
|
||||||
|
VERSION="17.04 (Zesty Zapus)"
|
||||||
|
ID=ubuntu
|
||||||
|
ID_LIKE=debian
|
||||||
|
PRETTY_NAME="Ubuntu 17.04"
|
||||||
|
VERSION_ID="17.04"
|
||||||
|
""",
|
||||||
|
version.DistributionInfo(
|
||||||
|
id='ubuntu', parsed=version.Distribution.ubuntu,
|
||||||
|
version=pkg_resources.parse_version('17.4'),
|
||||||
|
pretty='Ubuntu 17.04')),
|
||||||
|
# Debian Jessie
|
||||||
|
("""
|
||||||
|
PRETTY_NAME="Debian GNU/Linux 8 (jessie)"
|
||||||
|
NAME="Debian GNU/Linux"
|
||||||
|
VERSION_ID="8"
|
||||||
|
VERSION="8 (jessie)"
|
||||||
|
ID=debian
|
||||||
|
""",
|
||||||
|
version.DistributionInfo(
|
||||||
|
id='debian', parsed=version.Distribution.debian,
|
||||||
|
version=pkg_resources.parse_version('8'),
|
||||||
|
pretty='Debian GNU/Linux 8 (jessie)')),
|
||||||
|
# Void Linux
|
||||||
|
("""
|
||||||
|
NAME="void"
|
||||||
|
ID="void"
|
||||||
|
DISTRIB_ID="void"
|
||||||
|
PRETTY_NAME="void"
|
||||||
|
""",
|
||||||
|
version.DistributionInfo(
|
||||||
|
id='void', parsed=version.Distribution.void,
|
||||||
|
version=None, pretty='void')),
|
||||||
|
# Gentoo
|
||||||
|
("""
|
||||||
|
NAME=Gentoo
|
||||||
|
ID=gentoo
|
||||||
|
PRETTY_NAME="Gentoo/Linux"
|
||||||
|
""",
|
||||||
|
version.DistributionInfo(
|
||||||
|
id='gentoo', parsed=version.Distribution.gentoo,
|
||||||
|
version=None, pretty='Gentoo/Linux')),
|
||||||
|
# Fedora
|
||||||
|
("""
|
||||||
|
NAME=Fedora
|
||||||
|
VERSION="25 (Twenty Five)"
|
||||||
|
ID=fedora
|
||||||
|
VERSION_ID=25
|
||||||
|
PRETTY_NAME="Fedora 25 (Twenty Five)"
|
||||||
|
""",
|
||||||
|
version.DistributionInfo(
|
||||||
|
id='fedora', parsed=version.Distribution.fedora,
|
||||||
|
version=pkg_resources.parse_version('25'),
|
||||||
|
pretty='Fedora 25 (Twenty Five)')),
|
||||||
|
# OpenSUSE
|
||||||
|
("""
|
||||||
|
NAME="openSUSE Leap"
|
||||||
|
VERSION="42.2"
|
||||||
|
ID=opensuse
|
||||||
|
ID_LIKE="suse"
|
||||||
|
VERSION_ID="42.2"
|
||||||
|
PRETTY_NAME="openSUSE Leap 42.2"
|
||||||
|
""",
|
||||||
|
version.DistributionInfo(
|
||||||
|
id='opensuse', parsed=version.Distribution.opensuse,
|
||||||
|
version=pkg_resources.parse_version('42.2'),
|
||||||
|
pretty='openSUSE Leap 42.2')),
|
||||||
|
# Linux Mint
|
||||||
|
("""
|
||||||
|
NAME="Linux Mint"
|
||||||
|
VERSION="18.1 (Serena)"
|
||||||
|
ID=linuxmint
|
||||||
|
ID_LIKE=ubuntu
|
||||||
|
PRETTY_NAME="Linux Mint 18.1"
|
||||||
|
VERSION_ID="18.1"
|
||||||
|
""",
|
||||||
|
version.DistributionInfo(
|
||||||
|
id='linuxmint', parsed=version.Distribution.linuxmint,
|
||||||
|
version=pkg_resources.parse_version('18.1'),
|
||||||
|
pretty='Linux Mint 18.1')),
|
||||||
|
# Manjaro
|
||||||
|
("""
|
||||||
|
NAME="Manjaro Linux"
|
||||||
|
ID=manjaro
|
||||||
|
PRETTY_NAME="Manjaro Linux"
|
||||||
|
""",
|
||||||
|
version.DistributionInfo(
|
||||||
|
id='manjaro', parsed=version.Distribution.manjaro,
|
||||||
|
version=None, pretty='Manjaro Linux')),
|
||||||
|
])
|
||||||
|
def test_distribution(tmpdir, os_release, expected):
|
||||||
|
os_release_file = tmpdir / 'os-release'
|
||||||
|
if os_release is not None:
|
||||||
|
os_release_file.write(textwrap.dedent(os_release))
|
||||||
|
assert version.distribution(str(os_release_file)) == expected
|
||||||
|
|
||||||
|
|
||||||
class GitStrSubprocessFake:
|
class GitStrSubprocessFake:
|
||||||
|
|
||||||
"""Object returned by the git_str_subprocess_fake fixture.
|
"""Object returned by the git_str_subprocess_fake fixture.
|
||||||
|
Loading…
Reference in New Issue
Block a user