mirror of
https://git.freebsd.org/ports.git
synced 2025-06-08 22:30:38 -04:00
distro (for: Linux Distribution) provides information about the Linux distribution it runs on, such as a reliable machine-readable ID, or version information. It is a renewed alternative implementation for Python's original platform.linux_distribution function, but it also provides much more functionality which isn't necessarily Python bound like a command-line interface. WWW: https://github.com/nir0s/distro
106 lines
3.5 KiB
Text
106 lines
3.5 KiB
Text
--- distro.py.orig 2017-12-24 16:29:31 UTC
|
|
+++ distro.py
|
|
@@ -1,4 +1,4 @@
|
|
-# Copyright 2015,2016 Nir Cohen
|
|
+# Copyright 2015,2016,2017 Nir Cohen
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
@@ -932,9 +932,16 @@ class LinuxDistribution(object):
|
|
cmd = ('lsb_release', '-a')
|
|
stdout = subprocess.check_output(cmd, stderr=devnull)
|
|
except OSError: # Command not found
|
|
- return {}
|
|
+ try:
|
|
+ cmd = ('uname', '-rs')
|
|
+ stdout = subprocess.check_output(cmd, stderr=devnull)
|
|
+ except OSError:
|
|
+ return {}
|
|
content = stdout.decode(sys.getfilesystemencoding()).splitlines()
|
|
- return self._parse_lsb_release_content(content)
|
|
+ if cmd[0] == 'lsb_release':
|
|
+ return self._parse_lsb_release_content(content)
|
|
+ else:
|
|
+ return self._parse_uname_content(content)
|
|
|
|
@staticmethod
|
|
def _parse_lsb_release_content(lines):
|
|
@@ -958,6 +965,18 @@ class LinuxDistribution(object):
|
|
continue
|
|
k, v = kv
|
|
props.update({k.replace(' ', '_').lower(): v.strip()})
|
|
+ return props
|
|
+
|
|
+ @staticmethod
|
|
+ def _parse_uname_content(lines):
|
|
+ props = {}
|
|
+ match = re.search(r'^([^\s]+)\s+([\d\.]+)', lines[0].strip())
|
|
+ if match:
|
|
+ name, version = match.groups()
|
|
+ props['id'] = name.lower()
|
|
+ props['distributor_id'] = name
|
|
+ props['release'] = version
|
|
+ props['description'] = name + ' ' + version
|
|
return props
|
|
|
|
@cached_property
|
|
--- tests/resources/distros/freebsd111/bin/uname.orig 2017-12-31 03:40:48 UTC
|
|
+++ tests/resources/distros/freebsd111/bin/uname
|
|
@@ -0,0 +1,4 @@
|
|
+#!/bin/bash
|
|
+
|
|
+echo "FreeBSD 11.1-RELEASE"
|
|
+
|
|
--- tests/resources/distros/netbsd711/bin/uname.orig 2017-12-31 03:40:48 UTC
|
|
+++ tests/resources/distros/netbsd711/bin/uname
|
|
@@ -0,0 +1,4 @@
|
|
+#!/bin/bash
|
|
+
|
|
+echo "NetBSD 7.1.1"
|
|
+
|
|
--- tests/resources/distros/openbsd62/bin/uname.orig 2017-12-31 03:40:48 UTC
|
|
+++ tests/resources/distros/openbsd62/bin/uname
|
|
@@ -0,0 +1,4 @@
|
|
+#!/bin/bash
|
|
+
|
|
+echo "OpenBSD 6.2"
|
|
+
|
|
--- tests/test_distro.py.orig 2017-12-24 16:26:25 UTC
|
|
+++ tests/test_distro.py
|
|
@@ -450,6 +450,36 @@ class TestLSBRelease(DistroTestCase):
|
|
# }
|
|
# self._test_outcome(desired_outcome)
|
|
|
|
+ def test_openbsd62_uname(self):
|
|
+ self._test_outcome({
|
|
+ 'id': 'openbsd',
|
|
+ 'name': 'OpenBSD',
|
|
+ 'version': '6.2',
|
|
+ 'pretty_name': 'OpenBSD 6.2',
|
|
+ 'pretty_version': '6.2',
|
|
+ 'best_version': '6.2'
|
|
+ })
|
|
+
|
|
+ def test_netbsd711_uname(self):
|
|
+ self._test_outcome({
|
|
+ 'id': 'netbsd',
|
|
+ 'name': 'NetBSD',
|
|
+ 'version': '7.1.1',
|
|
+ 'pretty_name': 'NetBSD 7.1.1',
|
|
+ 'pretty_version': '7.1.1',
|
|
+ 'best_version': '7.1.1'
|
|
+ })
|
|
+
|
|
+ def test_freebsd111_uname(self):
|
|
+ self._test_outcome({
|
|
+ 'id': 'freebsd',
|
|
+ 'name': 'FreeBSD',
|
|
+ 'version': '11.1',
|
|
+ 'pretty_name': 'FreeBSD 11.1',
|
|
+ 'pretty_version': '11.1',
|
|
+ 'best_version': '11.1'
|
|
+ })
|
|
+
|
|
def test_ubuntu14normal_lsb_release(self):
|
|
self._setup_for_distro(os.path.join(TESTDISTROS, 'lsb',
|
|
'ubuntu14_normal'))
|