summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKarel Klic <kklic@redhat.com>2010-02-04 17:45:28 +0100
committerKarel Klic <kklic@redhat.com>2010-02-04 17:45:28 +0100
commitad55daf143dcf6f00f2c5000d0ab6c752e8ff323 (patch)
tree39095ef17423680a1e92710dba846bf22d40c315 /src
parent0308401fb1399186d22722364e262353dcd9d129 (diff)
downloadabrt-ad55daf143dcf6f00f2c5000d0ab6c752e8ff323.tar.gz
abrt-ad55daf143dcf6f00f2c5000d0ab6c752e8ff323.tar.xz
abrt-ad55daf143dcf6f00f2c5000d0ab6c752e8ff323.zip
Component-wise duplicates
Diffstat (limited to 'src')
-rwxr-xr-xsrc/Backtrace/abrt-bz-dupchecker46
1 files changed, 26 insertions, 20 deletions
diff --git a/src/Backtrace/abrt-bz-dupchecker b/src/Backtrace/abrt-bz-dupchecker
index 0fd13f99..d7748c72 100755
--- a/src/Backtrace/abrt-bz-dupchecker
+++ b/src/Backtrace/abrt-bz-dupchecker
@@ -62,6 +62,8 @@ for buginfo in buginfos:
print "Bug {0} has status {1}, skipping.".format(buginfo.bug_id, buginfo.bug_status)
continue
+ bug = bz.getbug(buginfo.bug_id)
+
# Skip bugs with already downloaded backtraces.
filename = "{0}.bt".format(buginfo.bug_id)
if os.path.isfile(filename):
@@ -69,7 +71,6 @@ for buginfo in buginfos:
print "Skipping {0} (already exists).".format(filename)
else:
# Get backtrace from bug and store it as a file.
- bug = bz.getbug(buginfo.bug_id)
downloaded = False
for attachment in bug.attachments:
if attachment['filename'] == 'backtrace':
@@ -95,7 +96,7 @@ for buginfo in buginfos:
command.append("--remove-noncrash-frames")
helper = subprocess.Popen(command, stdout=subprocess.PIPE)
- out, err = helper.communicate()
+ backtrace, err = helper.communicate()
helper.wait()
if helper.returncode != 0:
@@ -103,16 +104,21 @@ for buginfo in buginfos:
continue
# Empty backtrace is provided by Python apps.
- if len(out) == 0:
+ if len(backtrace) == 0:
continue
- if out in database:
- database[out].append(buginfo.bug_id)
- if options.verbose:
- print "Duplicate found: {0}".format(database[out])
- print "Backtrace: {0}".format(out)
+ bugitem = {'id':buginfo.bug_id, 'comments':len(bug.longdescs)}
+ if backtrace in database:
+ components = database[backtrace]
+ if buginfo.component in components:
+ components[buginfo.component].append(bugitem)
+ if options.verbose:
+ print "Duplicate found: {0}".format(database[out]['id'])
+ print "Backtrace: {0}".format(out)
+ else:
+ components[buginfo.component] = [ bugitem ]
else:
- database[out] = [ buginfo.bug_id ]
+ database[backtrace] = { buginfo.component: [ bugitem ] }
bz.logout()
@@ -121,18 +127,18 @@ print "=========================================================================
# The number of duplicates.
dupcount = 0
-for key, value in database.items():
- if len(value) > 1:
- dupcount += len(value) - 1
+for backtrace, components in database.items():
+ for component, bugitems in components.items():
+ if len(bugitems) > 1:
+ dupcount += len(value) - 1
print "Total number of duplicate bugs detected: {0}".format(dupcount)
print "------------------------------"
-dupcount = 0
-for key, value in database.items():
- if len(value) > 1:
- dupcount += len(value) - 1
- print "Duplicates: {0}".format(value)
- print "Backtrace: {0}".format(key)
-
-print "{0} duplicates found.".format(dupcount)
+# Print the duplicates
+for backtrace, components in database.items():
+ for component, bugitems in components.items():
+ if len(bugitems) > 1:
+ print "Component: {0}".format(component)
+ print "Duplicates: {0}".format(map(lambda x: "{0} ({1})".format(x['id'],x['comments']), bugitems).join(", "))
+ print "Backtrace: {0}".format(backtrace)