writing-clue-files

Differences between revisions 8 and 9
Revision 8 as of 2007-02-12 20:04:20
Size: 4673
Editor: 81
Comment:
Revision 9 as of 2007-02-12 20:34:52
Size: 3943
Editor: 81
Comment: better examples
Deletions are marked like this. Additions are marked like this.
Line 7: Line 7:
{{{
<?xml version="1.0"?>
{{{<?xml version="1.0"?>
Line 14: Line 13:
{{{
<clue>
{{{ <clue>
Line 32: Line 30:
Clues can be inherited from other clue files. ''totem'' can for example inherit clues from ''gnome'' and ''gstreamer'': '''Declaring duplicates:''' If you create a clue that searches for duplicates of bug #X you can note that specifically in the clue file. Bughelper will then refrain from listing this bug in these searches.

{{{
  <dontlist>
    <bug>48355</bug>
  </dontlist>
}}}

'''Inheritance:''' Clues can be inherited from other clue files. ''totem'' can for example inherit clues from ''gnome'' and ''gstreamer'':
Line 40: Line 46:
You can also use the logical opperators AND, OR and NOT to create detailed bug searches. Example: '''Logical operators:''' You can also combine the logical opperators AND, OR and NOT to create detailed bug searches. Example:
Line 43: Line 49:
            <and>
                <or>
                        <op>text</op>
                        <op bin="not">text2</op>
                </or>
                <op>text3</op>
            </and>
  <clue>
    <contains>
      <and>
        <op>apples</op>
          <or>
            <op>oranges</op>
            <op>pears</op>
          </or>
          <bin=not op>bananas</op>
      </and>
    </contains>
    <info>Bug description must contain 'apples' AND either 'oranges' OR 'pears'. It may not contain 'bananas'.</info>
  </clue>
Line 53: Line 64:
=== Example === == Examples ==
Line 55: Line 66:
packages/ubiquity.info: Real-life examples from {{{packages/ubiquity.info}}}:
Line 60: Line 71:
        <dontlist>
            <bug>48355</bug>
        </dontlist>
Line 61: Line 75:
            <op>Failed to unmount /var/lib/ubiquity/source</op>            <and>
                <op>IOError: [Errno 28] No space left on device</op>
                <op>copy_all</op>
                <op bin="not">stepPartAdvanced</op>
        </and>
Line 63: Line 81:
        <info>This might be something that Henrik knows more about</info>         <info>This is a dupe of 48355 if the system partitions are big enough</info>
Line 66: Line 84:
        <dontlist>
            <bug>48856</bug>
        </dontlist>
Line 67: Line 88:
            <op>IOError: [Errno 28] No space left on device</op>       <and>
                <op>AttributeError: 'NoneType' object has no attribute 'stdin'</op>
                <op>print >>self.gparted_subp.stdin, "apply"</op>
             </and>
Line 69: Line 93:
        <info>This bug can be rejected as it was the user's fault.</info>
    </clue>
    <clue>
        <contains>
            <op>ubiquity: ['/bin/hw-detect'] exited with code 1</op>
        </contains>
        <info>This can be probably reassigned to another package.</info>
    </clue>
    <clue>
        <contains>
            <op>['/usr/lib/ubiquity/localechooser/prebaseconfig'] exited with code 1</op>
        </contains>
        <info>This might be something that Henrik knows more about.</info>
    </clue>
    <clue>
        <contains>
            <op>UnicodeDecodeError: 'utf8' codec can't decode bytes in position</op>
        </contains>
        <info>This might be something that Henrik knows more about</info>
    </clue>
    <clue>
        <contains>
            <op>AttributeError: 'NoneType' object has no attribute 'stdin'</op>
        </contains>
        <info>This might be something that Henrik knows more about</info>
    </clue>
    <clue>
        <contains>
            <op>/usr/lib/python2.4/site-packages/debconf.py</op>
        </contains>
        <info>This might be something that Henrik knows more about</info>
    </clue>
    <clue>
        <contains>
            <op>OSError</op>
        </contains>
        <info>This might be something that Henrik knows more about</info>
        <info>This is a duplicate of 48856, which was fixed in 1.0.13 and 1.1.1</info>
Line 108: Line 96:
Line 109: Line 98:




=== Declare duplicate numbers ===

If you add a clue that basically points out, that bug A (which contains a certain condition) is a duplicate of bug B, you probably don't want bughelper to list 'B' every time, you run that query. Therefore you can do the following

{{{
./bugxml -a totem "XRHFAOJAH.so" "This is a duplicate of Bug 13466." -d 13466}}}

Writing clue files

As described in the introductory documentation you can create simple cluefiles bugxml -a. For more complex search criteria you need to edit the XML files as described here.

The basic clue file created with bugxml has this header:

{{{<?xml version="1.0"?> <clues version="0.1"> }}}

and contains a single clue on the form:

{{{ <clue>

  • <contains>

    • <op>crash</op>

    </contains> <info>A CRASHER BUG</info>

  • </clue>

}}}

and finally closes with:

{{{</clues> }}}

You can add a long list of clues with the <clues> </clues> tag, each with a list of search strings within <op> </op> tags. Each clue also requires an <info> tag to hold a brief description of the bug type. Uf the clue vdescribes a duplicate then this description would typically be the title of the original bug.

Optional elements

Declaring duplicates: If you create a clue that searches for duplicates of bug #X you can note that specifically in the clue file. Bughelper will then refrain from listing this bug in these searches.

  <dontlist>
    <bug>48355</bug>
  </dontlist>

Inheritance: Clues can be inherited from other clue files. totem can for example inherit clues from gnome and gstreamer:

    <inherits>
        <inherit>gnome</inherit>
        <inherit>gstreamer</inherit>
    </inherits>

Logical operators: You can also combine the logical opperators AND, OR and NOT to create detailed bug searches. Example:

  <clue>
    <contains>
      <and>
        <op>apples</op>
          <or>
            <op>oranges</op>
            <op>pears</op>
          </or>
          <bin=not op>bananas</op>
      </and>
    </contains>
    <info>Bug description must contain 'apples' AND either 'oranges' OR 'pears'. It may not contain 'bananas'.</info>
  </clue>

Examples

Real-life examples from packages/ubiquity.info:

<clues>
    <clue>
        <dontlist>
            <bug>48355</bug>
        </dontlist>
        <contains>
           <and>
                <op>IOError: [Errno 28] No space left on device</op>
                <op>copy_all</op>
                <op bin="not">stepPartAdvanced</op>
               </and>
        </contains>
        <info>This is a dupe of 48355 if the system partitions are big enough</info>
    </clue>
    <clue>
        <dontlist>
            <bug>48856</bug>
        </dontlist>
        <contains>
             <and>
                <op>AttributeError: 'NoneType' object has no attribute 'stdin'</op>
                <op>print >>self.gparted_subp.stdin, "apply"</op>
             </and>
        </contains>
        <info>This is a duplicate of 48856, which was fixed in 1.0.13 and 1.1.1</info>
    </clue>
</clues>

Sharing clue files

zthe real benefits of bughelper become apparent when bug triagers and developers share their knowledge of the through common clue files.

To start sharing clue files you must first check out the latest a copy of the shared repository as a local bzr branch:

bzr checkout sftp://YOUR-LAUNCHPAD-ID@bazaar.launchpad.net/~bugsquad/bughelper-data/main bughelper-data

This is actually the same repository that bughelper updates its cluefiles from normally, but with this format you can make changes and upload them again with bzr.

Simply edit the .info for a gien package, commit the changes with

 bzr commit -m "added a totem clue"

and push the changes back up to the shared repository with:

{{{??? }}}

Optionally, you can edit the Local-Packages-Dir: line of ~/.bughelper/config` to contain the path to the bughelper-data bzr directory. This will alow you to work directly with the shared repository and stay in sync.


Go back to [:BugHelper/Documentation].BR CategoryBugSquad

BugHelper/doc/writing-clue-files (last edited 2008-08-06 17:00:36 by localhost)