Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions src/distro/distro.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
21 changes: 21 additions & 0 deletions tests/resources/distros/debian10/bin/lsb_release
Original file line number Diff line number Diff line change
@@ -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
1 change: 1 addition & 0 deletions tests/resources/distros/debian10/etc/debian_version
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
10.11
9 changes: 9 additions & 0 deletions tests/resources/distros/debian10/etc/os-release
Original file line number Diff line number Diff line change
@@ -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/"
39 changes: 32 additions & 7 deletions tests/test_distro.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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",
Expand Down Expand Up @@ -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",
}
Expand All @@ -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",
}
Expand Down Expand Up @@ -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",
Expand Down Expand Up @@ -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",
Expand All @@ -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",
Expand Down