From: Didier Raboud Date: Wed, 15 May 2013 19:27:53 +0000 (+0200) Subject: Get Distributor ID from /etc/dpkg/origins/default if existant X-Git-Tag: archive/raspbian/10.2018112800+rpi1^2~72 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=6684d327586112cc777ac89fc422bfde2724d2e6;p=lsb.git Get Distributor ID from /etc/dpkg/origins/default if existant This helps Debian derivatives to avoid forking the lsb package. Closes: #703677 --- diff --git a/lsb_release.py b/lsb_release.py index f9cfb53..d36eeb6 100644 --- a/lsb_release.py +++ b/lsb_release.py @@ -252,7 +252,25 @@ def guess_release_from_apt(origin='Debian', component='main', return releases[0][1] def guess_debian_release(): - distinfo = {'ID' : 'Debian'} + distinfo = {} + + distinfo['ID'] = 'Debian' + # Use /etc/dpkg/origins/default to fetch the distribution name + etc_dpkg_origins_default = os.environ.get('LSB_ETC_DPKG_ORIGINS_DEFAULT','/etc/dpkg/origins/default') + if os.path.exists(etc_dpkg_origins_default): + try: + with open(etc_dpkg_origins_default) as dpkg_origins_file: + for line in dpkg_origins_file: + try: + (header, content) = line.split(': ', 1) + header = header.lower() + content = content.strip() + if header == 'vendor': + distinfo['ID'] = content + except ValueError: + pass + except IOError as msg: + print('Unable to open ' + etc_dpkg_origins_default + ':', str(msg), file=sys.stderr) kern = os.uname()[0] if kern in ('Linux', 'Hurd', 'NetBSD'): diff --git a/test/test_lsb_release.py b/test/test_lsb_release.py index 63e632c..d100c21 100644 --- a/test/test_lsb_release.py +++ b/test/test_lsb_release.py @@ -217,6 +217,27 @@ class TestLSBRelease(unittest.TestCase): def test_guess_debian_release(self): distinfo = get_arch_distinfo() + + # Test different dpkg origin with an fake "unstable releases" that ends in /sid, and an invalid apt-cache policy + distinfo['ID'] = rnd_string(5,12) + fn = 'test/dpkg_origins_default_' + rnd_string(5,5) + f = open(fn,'w') + f.write('Vendor: ' + distinfo['ID'] + "\n") + f.close() + os.environ['LSB_ETC_DPKG_ORIGINS_DEFAULT'] = fn + + distinfo['RELEASE'] = 'testing/unstable' + distinfo['DESCRIPTION'] = '%(ID)s %(OS)s %(RELEASE)s' % distinfo + fn2 = 'test/debian_version_' + rnd_string(5,12) + f = open(fn2,'w') + f.write(rnd_string(5,12) + '/sid') + f.close() + os.environ['LSB_ETC_DEBIAN_VERSION'] = fn2 + self.assertEqual(lr.guess_debian_release(),distinfo) + os.remove(fn) + # Make sure no existing /etc/dpkg/origins/default is used + os.environ['LSB_ETC_DPKG_ORIGINS_DEFAULT'] = '/non-existant' + distinfo['ID'] = 'Debian' # Test "stable releases" with numeric debian_versions for rno in lr.RELEASE_CODENAME_LOOKUP: