summaryrefslogtreecommitdiff
path: root/lsb_release.py
diff options
context:
space:
mode:
authorDidier Raboud <odyx@debian.org>2015-08-12 12:51:09 +0200
committerDidier Raboud <odyx@debian.org>2015-08-12 14:18:16 +0200
commita13cd11eb235c4ff56a93fdd740cc1d516555ea0 (patch)
tree739079a2fd4ef60c9845c954bd7db7ae657c671f /lsb_release.py
parent7da1956a2ce618fc6727ef68c2e045cc0f132ff9 (diff)
Rework the releases codename handling:
- Depend and Build-Depend on distro-info-data, and populate the RELEASES_CODENAME_LOOKUP from that reference - Drop meaningless tests trying to compare random release names Gbp-Dch: Full
Diffstat (limited to 'lsb_release.py')
-rw-r--r--lsb_release.py57
1 files changed, 31 insertions, 26 deletions
diff --git a/lsb_release.py b/lsb_release.py
index 94dad4e..9bdd366 100644
--- a/lsb_release.py
+++ b/lsb_release.py
@@ -25,32 +25,30 @@ import subprocess
import os
import re
import warnings
+import csv
-# XXX: Update as needed
-# This should really be included in apt-cache policy output... it is already
-# in the Release file...
-RELEASE_CODENAME_LOOKUP = {
- '1.1' : 'buzz',
- '1.2' : 'rex',
- '1.3' : 'bo',
- '2.0' : 'hamm',
- '2.1' : 'slink',
- '2.2' : 'potato',
- '3.0' : 'woody',
- '3.1' : 'sarge',
- '4.0' : 'etch',
- '5.0' : 'lenny',
- '6.0' : 'squeeze',
- '7' : 'wheezy',
- '8' : 'jessie',
- }
-
-TESTING_CODENAME = 'unknown.new.testing'
-
-RELEASES_ORDER = list(RELEASE_CODENAME_LOOKUP.items())
-RELEASES_ORDER.sort()
-RELEASES_ORDER = list(list(zip(*RELEASES_ORDER))[1])
-RELEASES_ORDER.extend(['stable', 'testing', 'unstable', 'sid'])
+def get_distro_info(origin='Debian'):
+ try:
+ csvfile = open('/usr/share/distro-info/%s.csv' % origin.lower())
+ except FileNotFoundError:
+ # Unknown distro, fallback to Debian
+ csvfile = open('/usr/share/distro-info/debian.csv')
+
+ reader = csv.DictReader(csvfile)
+ global RELEASE_CODENAME_LOOKUP, RELEASES_ORDER, TESTING_CODENAME
+ RELEASE_CODENAME_LOOKUP = { r['version']: r['series'] for r in reader if r['version']}
+ RELEASES_ORDER = list(RELEASE_CODENAME_LOOKUP.items())
+ RELEASES_ORDER.sort(key=lambda n: float(n[0]))
+ RELEASES_ORDER = list(list(zip(*RELEASES_ORDER))[1])
+
+ if origin.lower() == 'debian':
+ TESTING_CODENAME = 'unknown.new.testing'
+ RELEASES_ORDER.extend(['stable', 'testing', 'unstable', 'sid'])
+
+ csvfile.close()
+
+# Populate default distro info
+get_distro_info()
def lookup_codename(release, unknown=None):
m = re.match(r'(\d+)\.(\d+)(r(\d+))?', release)
@@ -188,7 +186,10 @@ def release_index(x):
if suite in RELEASES_ORDER:
return int(len(RELEASES_ORDER) - RELEASES_ORDER.index(suite))
else:
- return suite
+ try:
+ return float(suite)
+ except ValueError:
+ return 0
return 0
def compare_release(x, y):
@@ -275,6 +276,10 @@ def guess_debian_release():
except IOError as msg:
print('Unable to open ' + etc_dpkg_origins_default + ':', str(msg), file=sys.stderr)
+ # Populate RELEASES_ORDER for the correct distro
+ if distinfo['ID'].lower() != 'Debian':
+ get_distro_info(distinfo['ID'])
+
kern = os.uname()[0]
if kern in ('Linux', 'Hurd', 'NetBSD'):
distinfo['OS'] = 'GNU/'+kern