summaryrefslogtreecommitdiffstats
path: root/src/retrace
diff options
context:
space:
mode:
authorMichal Toman <mtoman@redhat.com>2011-03-07 12:37:42 +0100
committerMichal Toman <mtoman@redhat.com>2011-03-07 12:37:42 +0100
commit757c90f2a618287ff92fd6a1b929a3278d8f3bef (patch)
treef2806a3cdcb14cd15364715036ee05494d09f7c2 /src/retrace
parent1e2ccb9242a76abeb27ce98aa44c08b3449cccfb (diff)
downloadabrt-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.py12
-rwxr-xr-xsrc/retrace/worker.py45
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: