diff --git a/src/distro/distro.py b/src/distro/distro.py index c731e8c..8fc5a41 100755 --- a/src/distro/distro.py +++ b/src/distro/distro.py @@ -898,6 +898,15 @@ def version(self, pretty: bool = False, best: bool = False) -> str: if self.uname_attr("id").startswith("aix"): # On AIX platforms, prefer oslevel command output. versions.insert(0, self.oslevel_info()) + elif self.id() == "debian" or "debian" in self.like().split(): + # On Debian-like, add debian_version file content to candidates list. + try: + with open( + os.path.join(self.etc_dir, "debian_version"), encoding="ascii" + ) as fp: + versions.append(fp.readline().rstrip()) + except FileNotFoundError: + pass version = "" if best: # This algorithm uses the last version in priority order that has diff --git a/tests/resources/distros/debian10/bin/lsb_release b/tests/resources/distros/debian10/bin/lsb_release new file mode 100644 index 0000000..7d269dc --- /dev/null +++ b/tests/resources/distros/debian10/bin/lsb_release @@ -0,0 +1,21 @@ +#!/bin/bash +# +# lsb_release command for testing the ld module. +# Only the -a option is supported. +# +# This version of the lsb_release command works without a corresponding +# etc/lsb-release file. +# + +if [[ "$@" != "-a" ]]; then + echo "Usage: lsb_release -a" + exit 2 +fi + +echo "No LSB modules are available." +echo "Distributor ID: Debian" +echo "Description: Debian GNU/Linux 10 (buster)" +echo "Release: 10" +echo "Codename: buster" + +exit 0 diff --git a/tests/resources/distros/debian10/etc/debian_version b/tests/resources/distros/debian10/etc/debian_version new file mode 100644 index 0000000..7f0c091 --- /dev/null +++ b/tests/resources/distros/debian10/etc/debian_version @@ -0,0 +1 @@ +10.11 diff --git a/tests/resources/distros/debian10/etc/os-release b/tests/resources/distros/debian10/etc/os-release new file mode 100644 index 0000000..9b5419d --- /dev/null +++ b/tests/resources/distros/debian10/etc/os-release @@ -0,0 +1,9 @@ +PRETTY_NAME="Debian GNU/Linux 10 (buster)" +NAME="Debian GNU/Linux" +VERSION_ID="10" +VERSION="10 (buster)" +VERSION_CODENAME=buster +ID=debian +HOME_URL="https://www.debian.org/" +SUPPORT_URL="https://www.debian.org/support" +BUG_REPORT_URL="https://bugs.debian.org/" diff --git a/tests/test_distro.py b/tests/test_distro.py index 7c27316..36061d8 100644 --- a/tests/test_distro.py +++ b/tests/test_distro.py @@ -138,11 +138,10 @@ def _setup_for_distro(self, distro_root: str) -> None: class TestOSRelease: def setup_method(self, test_method: FunctionType) -> None: dist = test_method.__name__.split("_")[1] - os_release = os.path.join(DISTROS_DIR, dist, "etc", "os-release") self.distro = distro.LinuxDistribution( include_lsb=False, - os_release_file=os_release, distro_release_file="path-to-non-existing-file", + root_dir=os.path.join(DISTROS_DIR, dist), ) def _test_outcome(self, outcome: Dict[str, str]) -> None: @@ -217,11 +216,23 @@ def test_debian8_os_release(self) -> None: "pretty_name": "Debian GNU/Linux 8 (jessie)", "version": "8", "pretty_version": "8 (jessie)", - "best_version": "8", + "best_version": "8.2", "codename": "jessie", } self._test_outcome(desired_outcome) + def test_debian10_os_release(self) -> None: + desired_outcome = { + "id": "debian", + "name": "Debian GNU/Linux", + "pretty_name": "Debian GNU/Linux 10 (buster)", + "version": "10", + "pretty_version": "10 (buster)", + "best_version": "10.11", + "codename": "buster", + } + self._test_outcome(desired_outcome) + def test_fedora19_os_release(self) -> None: desired_outcome = { "id": "fedora", @@ -346,7 +357,7 @@ def test_raspbian7_os_release(self) -> None: "pretty_name": "Raspbian GNU/Linux 7 (wheezy)", "version": "7", "pretty_version": "7 (wheezy)", - "best_version": "7", + "best_version": "7.1", "like": "debian", "codename": "wheezy", } @@ -359,7 +370,7 @@ def test_raspbian8_os_release(self) -> None: "pretty_name": "Raspbian GNU/Linux 8 (jessie)", "version": "8", "pretty_version": "8 (jessie)", - "best_version": "8", + "best_version": "8.0", "like": "debian", "codename": "jessie", } @@ -1230,6 +1241,20 @@ def test_debian8_release(self) -> None: self._test_outcome(desired_outcome) self._test_non_existing_release_file() + def test_debian10_release(self) -> None: + desired_outcome = { + "id": "debian", + "name": "Debian GNU/Linux", + "pretty_name": "Debian GNU/Linux 10 (buster)", + "version": "10", + "pretty_version": "10 (buster)", + "best_version": "10.11", + "codename": "buster", + "major_version": "10", + } + self._test_outcome(desired_outcome) + self._test_non_existing_release_file() + def test_exherbo_release(self) -> None: desired_outcome = { "id": "exherbo", @@ -1448,7 +1473,7 @@ def test_raspbian7_release(self) -> None: "pretty_name": "Raspbian GNU/Linux 7 (wheezy)", "version": "7", "pretty_version": "7 (wheezy)", - "best_version": "7", + "best_version": "7.1", "like": "debian", "codename": "wheezy", "major_version": "7", @@ -1463,7 +1488,7 @@ def test_raspbian8_release(self) -> None: "pretty_name": "Raspbian GNU/Linux 8 (jessie)", "version": "8", "pretty_version": "8 (jessie)", - "best_version": "8", + "best_version": "8.0", "like": "debian", "codename": "jessie", "major_version": "8",