Example #1
0
def show_report(number, system, mirrors,
                http_proxy, timeout, screen=None, queryonly=False, title='',
                archived='no'):
    from reportbug import debianbts

    ui = screen
    if not ui:
        ui = initialize_urwid_ui()

    sysinfo = debianbts.SYSTEMS[system]
    display_message('Retrieving report #%d from %s bug tracking system...',
        number, sysinfo['name'], title=title, ui=ui)

    info = debianbts.get_report(number, timeout, system, mirrors=mirrors,
                                http_proxy=http_proxy, archived=archived)
    if not info:
        long_message('Bug report #%d not found.', number, title=title, ui=ui)
        return

    options = dict(o='Ok', d='More details (launch browser)',
                   m='Submit more information', q='Quit')
    valid = 'Odmq'

    while 1:
        (bugtitle, bodies) = info
        body = bodies[0]

        r = select_options(body, valid, title=bugtitle, ui=ui, help=options)
        ui = None
        if not r or (r == 'o'):
            break
        elif r == 'q':
            return -1
        elif r == 'm':
            return number

        launch_browser(debianbts.get_report_url(system, number, archived))
    return
Example #2
0
def show_report(number, system, mirrors,
                http_proxy, timeout, screen=None, queryonly=False, title='',
                archived='no'):
    sysinfo = debianbts.SYSTEMS[system]
    ewrite('Retrieving report #%d from %s bug tracking system...\n',
           number, sysinfo['name'])

    try:
        info = debianbts.get_report(number, timeout, system, mirrors=mirrors,
                                    followups=1,
                                    http_proxy=http_proxy, archived=archived)
    except:
        info = None

    if not info:
        ewrite('No report available: #%s\n', number)
        raise NoBugs

    # extract the package name, either it's reported against
    # the binary package or the source one
    foundpackage = info[1][0].lower()
    try:
        foundpackage = foundpackage.split('package: ')[1].split('\n')[0]
    except IndexError:
        try:
            foundpackage = foundpackage.split('source: ')[1].split('\n')[0]
        except:
            ewrite('Cannot retrieve bug\'s package, exiting...\n')
            sys.exit(-1)

    (title, messages) = info
    # save report subject in main
    m = sys.modules['__main__']
    m.reporttitle = ' '.join(title.split()[2:])
    m.foundpackage = foundpackage

    current_message = 0
    skip_pager = False

    while 1:
        if current_message:
            text = 'Followup %d - %s\n\n%s' % (current_message, title,
                                                 messages[current_message])
        else:
            text = 'Original report - %s\n\n%s' % (title, messages[0])

        if not skip_pager:
            fd = os.popen('sensible-pager', 'w')
            try:
                fd.write(text)
                fd.close()
            except IOError, x:
                if x.errno == errno.EPIPE:
                    pass
                else:
                    raise
        skip_pager = False

        options = 'xOrbq'

        if (current_message+1) < len(messages):
            options = 'N'+options.lower()
        if (current_message):
            options = 'p'+options

        x = select_options("What do you want to do now?", options,
                           {'x' : 'Provide extra information.',
                            'o' : 'Show other bug reports (return to '
                            'bug listing).',
                            'n' : 'Show next message (followup).',
                            'p' : 'Show previous message (followup).',
                            'r' : 'Redisplay this message.',
                            'b' : 'Launch web browser to read '
                            'full log.',
                            'q' : "I'm bored; quit please."},
                           allow_numbers = range(1, len(messages)+1))
        if x == 'x':
            return number
        elif x == 'q':
            raise NoReport
        elif x == 'b':
            launch_browser(debianbts.get_report_url(
                system, number, mirrors, archived))
            skip_pager = True
        elif x == 'o':
            break
        elif x == 'n':
            current_message += 1
        elif x == 'p':
            current_message -= 1