Skip to content

Commit 6d44662

Browse files
Supports debian_version file content for version(best=True) calls (#333)
1 parent 4c0bd86 commit 6d44662

File tree

5 files changed

+72
-7
lines changed

5 files changed

+72
-7
lines changed

src/distro/distro.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -898,6 +898,15 @@ def version(self, pretty: bool = False, best: bool = False) -> str:
898898
if self.uname_attr("id").startswith("aix"):
899899
# On AIX platforms, prefer oslevel command output.
900900
versions.insert(0, self.oslevel_info())
901+
elif self.id() == "debian" or "debian" in self.like().split():
902+
# On Debian-like, add debian_version file content to candidates list.
903+
try:
904+
with open(
905+
os.path.join(self.etc_dir, "debian_version"), encoding="ascii"
906+
) as fp:
907+
versions.append(fp.readline().rstrip())
908+
except FileNotFoundError:
909+
pass
901910
version = ""
902911
if best:
903912
# This algorithm uses the last version in priority order that has
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#!/bin/bash
2+
#
3+
# lsb_release command for testing the ld module.
4+
# Only the -a option is supported.
5+
#
6+
# This version of the lsb_release command works without a corresponding
7+
# etc/lsb-release file.
8+
#
9+
10+
if [[ "$@" != "-a" ]]; then
11+
echo "Usage: lsb_release -a"
12+
exit 2
13+
fi
14+
15+
echo "No LSB modules are available."
16+
echo "Distributor ID: Debian"
17+
echo "Description: Debian GNU/Linux 10 (buster)"
18+
echo "Release: 10"
19+
echo "Codename: buster"
20+
21+
exit 0
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
10.11
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
2+
NAME="Debian GNU/Linux"
3+
VERSION_ID="10"
4+
VERSION="10 (buster)"
5+
VERSION_CODENAME=buster
6+
ID=debian
7+
HOME_URL="https://www.debian.org/"
8+
SUPPORT_URL="https://www.debian.org/support"
9+
BUG_REPORT_URL="https://bugs.debian.org/"

tests/test_distro.py

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -138,11 +138,10 @@ def _setup_for_distro(self, distro_root: str) -> None:
138138
class TestOSRelease:
139139
def setup_method(self, test_method: FunctionType) -> None:
140140
dist = test_method.__name__.split("_")[1]
141-
os_release = os.path.join(DISTROS_DIR, dist, "etc", "os-release")
142141
self.distro = distro.LinuxDistribution(
143142
include_lsb=False,
144-
os_release_file=os_release,
145143
distro_release_file="path-to-non-existing-file",
144+
root_dir=os.path.join(DISTROS_DIR, dist),
146145
)
147146

148147
def _test_outcome(self, outcome: Dict[str, str]) -> None:
@@ -217,11 +216,23 @@ def test_debian8_os_release(self) -> None:
217216
"pretty_name": "Debian GNU/Linux 8 (jessie)",
218217
"version": "8",
219218
"pretty_version": "8 (jessie)",
220-
"best_version": "8",
219+
"best_version": "8.2",
221220
"codename": "jessie",
222221
}
223222
self._test_outcome(desired_outcome)
224223

224+
def test_debian10_os_release(self) -> None:
225+
desired_outcome = {
226+
"id": "debian",
227+
"name": "Debian GNU/Linux",
228+
"pretty_name": "Debian GNU/Linux 10 (buster)",
229+
"version": "10",
230+
"pretty_version": "10 (buster)",
231+
"best_version": "10.11",
232+
"codename": "buster",
233+
}
234+
self._test_outcome(desired_outcome)
235+
225236
def test_fedora19_os_release(self) -> None:
226237
desired_outcome = {
227238
"id": "fedora",
@@ -346,7 +357,7 @@ def test_raspbian7_os_release(self) -> None:
346357
"pretty_name": "Raspbian GNU/Linux 7 (wheezy)",
347358
"version": "7",
348359
"pretty_version": "7 (wheezy)",
349-
"best_version": "7",
360+
"best_version": "7.1",
350361
"like": "debian",
351362
"codename": "wheezy",
352363
}
@@ -359,7 +370,7 @@ def test_raspbian8_os_release(self) -> None:
359370
"pretty_name": "Raspbian GNU/Linux 8 (jessie)",
360371
"version": "8",
361372
"pretty_version": "8 (jessie)",
362-
"best_version": "8",
373+
"best_version": "8.0",
363374
"like": "debian",
364375
"codename": "jessie",
365376
}
@@ -1230,6 +1241,20 @@ def test_debian8_release(self) -> None:
12301241
self._test_outcome(desired_outcome)
12311242
self._test_non_existing_release_file()
12321243

1244+
def test_debian10_release(self) -> None:
1245+
desired_outcome = {
1246+
"id": "debian",
1247+
"name": "Debian GNU/Linux",
1248+
"pretty_name": "Debian GNU/Linux 10 (buster)",
1249+
"version": "10",
1250+
"pretty_version": "10 (buster)",
1251+
"best_version": "10.11",
1252+
"codename": "buster",
1253+
"major_version": "10",
1254+
}
1255+
self._test_outcome(desired_outcome)
1256+
self._test_non_existing_release_file()
1257+
12331258
def test_exherbo_release(self) -> None:
12341259
desired_outcome = {
12351260
"id": "exherbo",
@@ -1448,7 +1473,7 @@ def test_raspbian7_release(self) -> None:
14481473
"pretty_name": "Raspbian GNU/Linux 7 (wheezy)",
14491474
"version": "7",
14501475
"pretty_version": "7 (wheezy)",
1451-
"best_version": "7",
1476+
"best_version": "7.1",
14521477
"like": "debian",
14531478
"codename": "wheezy",
14541479
"major_version": "7",
@@ -1463,7 +1488,7 @@ def test_raspbian8_release(self) -> None:
14631488
"pretty_name": "Raspbian GNU/Linux 8 (jessie)",
14641489
"version": "8",
14651490
"pretty_version": "8 (jessie)",
1466-
"best_version": "8",
1491+
"best_version": "8.0",
14671492
"like": "debian",
14681493
"codename": "jessie",
14691494
"major_version": "8",

0 commit comments

Comments
 (0)