Skip to content

Commit 8b45825

Browse files
author
Andrey Bychkov
committed
bpo-33435: Fixed incorrect version detection of linux in some distributions (platform.py)
1 parent a3f19c3 commit 8b45825

File tree

2 files changed

+35
-10
lines changed

2 files changed

+35
-10
lines changed

Lib/platform.py

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,23 @@ def _parse_release_file(firstline):
296296
id = l[1]
297297
return '', version, id
298298

299+
def _prase_os_release(os_release_file):
300+
params = ['NAME', 'VERSION_ID', 'ID']
301+
vars_ = []
302+
for line in os_release_file:
303+
for param in params:
304+
get_name = re.search(r'^' + param + '.*', line)
305+
index = params.index(param)
306+
if get_name != None:
307+
params[index] = get_name.group(0)
308+
for param in params:
309+
param_split = param.split('=')
310+
if len(param_split) > 1:
311+
vars_.append(param_split[1])
312+
else:
313+
vars_.append('')
314+
return vars_[0], vars_[1], vars_[2]
315+
299316
def linux_distribution(distname='', version='', id='',
300317

301318
supported_dists=_supported_dists,
@@ -333,16 +350,22 @@ def _linux_distribution(distname, version, id, supported_dists,
333350
except OSError:
334351
# Probably not a Unix system
335352
return distname, version, id
336-
etc.sort()
337-
for file in etc:
338-
m = _release_filename.match(file)
339-
if m is not None:
340-
_distname, dummy = m.groups()
341-
if _distname in supported_dists:
342-
distname = _distname
343-
break
344-
else:
345-
return _dist_try_harder(distname, version, id)
353+
try:
354+
os_release_path = os.path.join(_UNIXCONFDIR, 'os-release')
355+
with open(os_release_path, 'r', encoding='utf-8') as os_release_file:
356+
distname, version, id = _prase_os_release(os_release_file)
357+
return distname, version, id
358+
except OSError:
359+
etc.sort()
360+
for file in etc:
361+
m = _release_filename.match(file)
362+
if m is not None:
363+
_distname, dummy = m.groups()
364+
if _distname in supported_dists:
365+
distname = _distname
366+
break
367+
else:
368+
return _dist_try_harder(distname, version, id)
346369

347370
# Read the first line
348371
with open(os.path.join(_UNIXCONFDIR, file), 'r',
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fixed incorrect version detection of linux in some distributions (platform.py linux_distribution()).
2+
Now checked file os-release and if it is in the system then parse the information from it.

0 commit comments

Comments
 (0)