All these are calling subprocess in 'text mode', where it will try to decode stdout/stderr using the default encoding (utf-8 for us). If it doesn't decode, subprocess will raise an exception and kobo doesn't handle it, it just passes it along to us, so things blow up - see https://pagure.io/releng/issue/12474 . To avoid this, let's set `errors="replace"`, which tells the decoder to replace invalid data with ? characters. This way we should get as much of the output as can be read, and no crashes. We also replace `universal_newlines=True` with `text=True` as the latter is shorter, clearer, and what Python 3 subprocess wants us to use, it considers `universal_newlines` to just be a backwards-compatibility thing - "The universal_newlines argument is equivalent to text and is provided for backwards compatibility" Signed-off-by: Adam Williamson <awilliam@redhat.com> Merges: https://pagure.io/pungi/pull-request/1812
34 lines
1 KiB
Python
34 lines
1 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
import os
|
|
import re
|
|
|
|
|
|
def get_full_version():
|
|
"""
|
|
Find full version of Pungi: if running from git, this will return cleaned
|
|
output of `git describe`, otherwise it will look for installed version.
|
|
"""
|
|
location = os.path.join(os.path.dirname(os.path.realpath(__file__)), "..")
|
|
if os.path.isdir(os.path.join(location, ".git")):
|
|
import subprocess
|
|
|
|
proc = subprocess.Popen(
|
|
["git", "--git-dir=%s/.git" % location, "describe", "--tags"],
|
|
stdout=subprocess.PIPE,
|
|
text=True,
|
|
errors="replace",
|
|
)
|
|
output, _ = proc.communicate()
|
|
return re.sub(r"-1.fc\d\d?", "", output.strip().replace("pungi-", ""))
|
|
else:
|
|
import subprocess
|
|
|
|
proc = subprocess.Popen(
|
|
["rpm", "-q", "pungi"], stdout=subprocess.PIPE, text=True, errors="replace"
|
|
)
|
|
(output, err) = proc.communicate()
|
|
if not err:
|
|
return output.rstrip()
|
|
else:
|
|
return "unknown"
|