|
Packit |
8ea169 |
#!/usr/bin/python3 -u
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
import sys
|
|
Packit |
8ea169 |
import os
|
|
Packit |
8ea169 |
import locale
|
|
Packit |
8ea169 |
import gettext
|
|
Packit |
8ea169 |
import hashlib
|
|
Packit |
8ea169 |
import re
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
GETTEXT_PROGNAME = "abrt"
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
_ = gettext.gettext
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
tags = [
|
|
Packit |
8ea169 |
"WARNING:",
|
|
Packit |
8ea169 |
"[ER]IP[^:]",
|
|
Packit |
8ea169 |
" \\[<[a-f0-9]{8,16}>\\]"
|
|
Packit |
8ea169 |
]
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
checks = [
|
|
Packit |
8ea169 |
("i915", "xorg-x11-drv-intel"),
|
|
Packit |
8ea169 |
("nouveau", "xorg-x11-drv-nouveau"),
|
|
Packit |
8ea169 |
("radeon", "xorg-x11-drv-ati"),
|
|
Packit |
8ea169 |
("qxl", "xorg-x11-drv-qxl"),
|
|
Packit |
8ea169 |
]
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
def check_tag(line):
|
|
Packit |
8ea169 |
for tag in tags:
|
|
Packit |
8ea169 |
if re.match(tag, line) is not None:
|
|
Packit |
8ea169 |
for (mod, component) in checks:
|
|
Packit |
8ea169 |
if re.search(mod, line) is not None:
|
|
Packit |
8ea169 |
return component
|
|
Packit |
8ea169 |
return None
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
def get_new_component(filename):
|
|
Packit |
8ea169 |
try:
|
|
Packit |
8ea169 |
f = open(filename, "r")
|
|
Packit |
8ea169 |
except IOError as e:
|
|
Packit |
8ea169 |
return None
|
|
Packit |
8ea169 |
for line in f:
|
|
Packit |
8ea169 |
c = check_tag(line)
|
|
Packit |
8ea169 |
if c is not None:
|
|
Packit |
8ea169 |
f.close()
|
|
Packit |
8ea169 |
return c
|
|
Packit |
8ea169 |
f.close()
|
|
Packit |
8ea169 |
return None
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
def open_or_die(filename, mode):
|
|
Packit |
8ea169 |
try:
|
|
Packit |
8ea169 |
f = open(filename, mode)
|
|
Packit |
8ea169 |
except IOError as e:
|
|
Packit |
8ea169 |
sys.stderr.write(str(e) + "\n")
|
|
Packit |
8ea169 |
sys.exit(1)
|
|
Packit |
8ea169 |
return f
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
if __name__ == "__main__":
|
|
Packit |
8ea169 |
try:
|
|
Packit |
8ea169 |
locale.setlocale(locale.LC_ALL, "")
|
|
Packit |
8ea169 |
except locale.Error:
|
|
Packit |
8ea169 |
os.environ['LC_ALL'] = 'C'
|
|
Packit |
8ea169 |
locale.setlocale(locale.LC_ALL, "")
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
# Defeat "AttributeError: 'module' object has no attribute 'nl_langinfo'"
|
|
Packit |
8ea169 |
try:
|
|
Packit |
8ea169 |
gettext.bind_textdomain_codeset(GETTEXT_PROGNAME,
|
|
Packit |
8ea169 |
locale.nl_langinfo(locale.CODESET))
|
|
Packit |
8ea169 |
except AttributeError:
|
|
Packit |
8ea169 |
pass
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
gettext.bindtextdomain(GETTEXT_PROGNAME, '/usr/share/locale')
|
|
Packit |
8ea169 |
gettext.textdomain(GETTEXT_PROGNAME)
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
#
|
|
Packit |
8ea169 |
# Certain drivers are in the kernel but need to be tracked separtely
|
|
Packit |
8ea169 |
# in other components. This fixes those components.
|
|
Packit |
8ea169 |
#
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
new_component = get_new_component("backtrace")
|
|
Packit |
8ea169 |
if new_component is None:
|
|
Packit |
8ea169 |
sys.exit(0)
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
print("Oops looks like a problem in kernel module, new component {0}"
|
|
Packit |
8ea169 |
.format(new_component))
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
f = open_or_die("component", "w")
|
|
Packit |
8ea169 |
f.write(new_component)
|
|
Packit |
8ea169 |
f.close()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
# keep kernel maint in the loop even if the component gets changed
|
|
Packit |
8ea169 |
f = open_or_die("extra-cc", "w")
|
|
Packit |
8ea169 |
f.write("kernel-maint@redhat.com")
|
|
Packit |
8ea169 |
f.close()
|