diff options
author | Michal Toman <mtoman@redhat.com> | 2011-03-07 12:37:42 +0100 |
---|---|---|
committer | Michal Toman <mtoman@redhat.com> | 2011-03-07 12:37:42 +0100 |
commit | 757c90f2a618287ff92fd6a1b929a3278d8f3bef (patch) | |
tree | f2806a3cdcb14cd15364715036ee05494d09f7c2 /src/retrace | |
parent | 1e2ccb9242a76abeb27ce98aa44c08b3449cccfb (diff) | |
download | abrt-757c90f2a618287ff92fd6a1b929a3278d8f3bef.tar.gz abrt-757c90f2a618287ff92fd6a1b929a3278d8f3bef.tar.xz abrt-757c90f2a618287ff92fd6a1b929a3278d8f3bef.zip |
retrace server: guess release if 'os_release' file is missing
Diffstat (limited to 'src/retrace')
-rw-r--r-- | src/retrace/retrace.py | 12 | ||||
-rwxr-xr-x | src/retrace/worker.py | 45 |
2 files changed, 42 insertions, 15 deletions
diff --git a/src/retrace/retrace.py b/src/retrace/retrace.py index 46adb740..cc67f62f 100644 --- a/src/retrace/retrace.py +++ b/src/retrace/retrace.py @@ -25,6 +25,10 @@ RELEASE_PARSERS = { "fedora": re.compile("^Fedora[^0-9]+([0-9]+)[^\(]\(([^\)]+)\)$"), } +GUESS_RELEASE_PARSERS = { + "fedora": re.compile("\.fc([0-9]+)"), +} + TASKPASS_ALPHABET = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" CONFIG_FILE = "/etc/abrt/retrace.conf" @@ -109,6 +113,14 @@ def guess_arch(coredump_path): return None +def guess_release(package): + for distro in GUESS_RELEASE_PARSERS.keys(): + match = GUESS_RELEASE_PARSERS[distro].search(package) + if match: + return distro, match.group(1) + + return None, None + def gen_task_password(taskdir): generator = random.SystemRandom() taskpass = "" diff --git a/src/retrace/worker.py b/src/retrace/worker.py index 2bb33237..f7381c72 100755 --- a/src/retrace/worker.py +++ b/src/retrace/worker.py @@ -68,6 +68,16 @@ if __name__ == "__main__": LOG.close() sys.exit(16) + # read package file + try: + package_file = open("%s/crash/package" % savedir, "r") + crash_package = package_file.read() + package_file.close() + except Exception as ex: + LOG.write("Unable to read crash package from 'package' file: %s.\n" % ex) + LOG.close() + sys.exit(17) + # read release, distribution and version from release file release_path = "%s/crash/os_release" % savedir if not os.path.isfile(release_path): @@ -77,23 +87,28 @@ if __name__ == "__main__": release_file = open(release_path, "r") release = release_file.read() release_file.close() - except Exception as ex: - LOG.write("Unable to read distribution and version from 'release' file: %s.\n" % ex) - LOG.close() - sys.exit(17) - version = distribution = None - for distro in RELEASE_PARSERS.keys(): - match = RELEASE_PARSERS[distro].match(release) - if match: - version = match.group(1) - distribution = distro - break + version = distribution = None + for distro in RELEASE_PARSERS.keys(): + match = RELEASE_PARSERS[distro].match(release) + if match: + version = match.group(1) + distribution = distro + break - if not version or not distribution: - LOG.write("Release '%s' is not supported.\n" % release) - LOG.close() - sys.exit(18) + if not version or not distribution: + raise Exception, "Release '%s' is not supported.\n" + + except Exception as ex: + LOG.write("Unable to read distribution and version from 'release' file: %s.\n" % ex) + LOG.write("Trying to guess distribution and version... ") + distribution, version = guess_release(crash_package) + if distribution and version: + LOG.write("%s-%s\n" % (distribution, version)) + else: + LOG.write("Failure\n") + LOG.close() + sys.exit(18) # read package file try: |