From cb6a9e819d05402ee8b9cde356d509ab22de4780 Mon Sep 17 00:00:00 2001 From: "W. Trevor King" Date: Sat, 21 Nov 2009 12:52:37 -0500 Subject: [PATCH] `be email-bugs` now uses `be show` internals to produce consistent XML. Broke the bulk of show.py out into new function show.output(), which is used by both show.py and email_bugs.py to reduce duplication of effort and increase consistency of the XML. Also a few relevant help string updates. --- becommands/email_bugs.py | 60 ++++++++++++++++-------------- becommands/import_xml.py | 5 ++- becommands/show.py | 79 +++++++++++++++++++++------------------- 3 files changed, 78 insertions(+), 66 deletions(-) diff --git a/becommands/email_bugs.py b/becommands/email_bugs.py index c188332..27f0b91 100644 --- a/becommands/email_bugs.py +++ b/becommands/email_bugs.py @@ -27,6 +27,7 @@ from libbe import cmdutil, bugdir from libbe.subproc import invoke from libbe.utility import time_to_str from libbe.vcs import detect_vcs, installed_vcs +import show __desc__ = __doc__ @@ -52,31 +53,41 @@ def execute(args, manipulate_encodings=True): Subject: [be-bug:xml] Updates to a, b - - - a - a - minor - open - John Doe <jdoe@example.com> - Thu, 01 Jan 1970 00:00:00 +0000 - Bug A - - - b - b - minor - closed - Jane Doe <jdoe@example.com> - Thu, 01 Jan 1970 00:00:00 +0000 - Bug B - - + + + ... + ... + ... + ... + + + a + a + minor + open + John Doe <jdoe@example.com> + Thu, 01 Jan 1970 00:00:00 +0000 + Bug A + + + b + b + minor + closed + Jane Doe <jdoe@example.com> + Thu, 01 Jan 1970 00:00:00 +0000 + Bug B + + >>> bd.cleanup() Note that the '=3D' bits in are the way quoted-printable escapes '='. + + The unclosed ... is because revision ids can be long + enough to cause line wraps, and we want to ensure we match even if + the closing is split by the wrapping. """ parser = get_parser() options, args = parser.parse_args(args) @@ -86,19 +97,14 @@ def execute(args, manipulate_encodings=True): raise cmdutil.UsageError bd = bugdir.BugDir(from_disk=True, manipulate_encodings=manipulate_encodings) - lines = [u'' % bd.encoding, - u''] - for shortname in args: - bug = cmdutil.bug_from_id(bd, shortname) - lines.append(bug.xml(show_comments=True)) - lines.append(u'') + xml = show.output(args, bd, as_xml=True, with_comments=True) subject = options.subject if subject == None: subject = '[be-bug:xml] Updates to %s' % ', '.join(args) submit_email = TextEmail(to_address=options.to_address, from_address=options.from_address, subject=subject, - body=u'\n'.join(lines), + body=xml, encoding=bd.encoding, subtype='xml') if options.output == True: diff --git a/becommands/import_xml.py b/becommands/import_xml.py index 212c7a7..2572075 100644 --- a/becommands/import_xml.py +++ b/becommands/import_xml.py @@ -247,8 +247,11 @@ User creates a new bug ... User exports bug as xml and emails it to the developers - user$ be show --xml --version 48f > 48f.xml + user$ be show --xml 48f > 48f.xml user$ cat 48f.xml | mail -s "Demuxulizer bug xml" devs@b.com +or equivalently (with a slightly fancier be-handle-mail compatible +email): + user$ be email-bugs 48f Devs recieve email, and save it's contents as demux-bug.xml dev$ cat demux-bug.xml | be import-xml - """ diff --git a/becommands/show.py b/becommands/show.py index 1211e3d..11890a8 100644 --- a/becommands/show.py +++ b/becommands/show.py @@ -79,42 +79,7 @@ def execute(args, manipulate_encodings=True): "--only-raw-body requires a comment ID, not '%s'" % args[0]) sys.__stdout__.write(comment.body) sys.exit(0) - - bugs,root_comments = _sort_ids(args, options.comments) - if options.XML: - print _xml_header(bd.encoding) - else: - spaces_left = len(args) - 1 - for bugname in bugs: - bug = cmdutil.bug_from_id(bd, bugname) - if options.XML: - print bug.xml(indent=2, show_comments=options.comments) - else: - print bug.string(show_comments=options.comments) - if spaces_left > 0: - spaces_left -= 1 - print '' # add a blank line between bugs/comments - for bugname,comments in root_comments.items(): - bug = cmdutil.bug_from_id(bd, bugname) - if options.XML: - print ' ' - print ' %s' % bug.uuid - for commname in comments: - try: - comment = bug.comment_root.comment_from_shortname(commname) - except comment.InvalidShortname, e: - raise UserError(e.message) - if options.XML: - print comment.xml(indent=4, shortname=bugname) - else: - print comment.string(shortname=shortname) - if spaces_left > 0: - spaces_left -= 1 - print '' # add a blank line between bugs/comments - if options.XML: - print '' - if options.XML: - print _xml_footer() + print output(args, bd, as_xml=options.XML, with_comments=options.comments) def get_parser(): parser = cmdutil.CmdOptionParser("be show [options] ID [ID ...]") @@ -173,7 +138,45 @@ def _xml_header(encoding): value = _version.version_info[tag.replace('-', '_')] lines.append(' <%s>%s' % (tag, value, tag)) lines.append(' ') - return '\n'.join(lines) + return lines def _xml_footer(): - return '' + return [''] + +def output(ids, bd, as_xml=True, with_comments=True): + bugs,root_comments = _sort_ids(ids, with_comments) + lines = [] + if as_xml: + lines.extend(_xml_header(bd.encoding)) + else: + spaces_left = len(ids) - 1 + for bugname in bugs: + bug = cmdutil.bug_from_id(bd, bugname) + if as_xml: + lines.append(bug.xml(indent=2, show_comments=with_comments)) + else: + lines.append(bug.string(show_comments=with_comments)) + if spaces_left > 0: + spaces_left -= 1 + lines.append('') # add a blank line between bugs/comments + for bugname,comments in root_comments.items(): + bug = cmdutil.bug_from_id(bd, bugname) + if as_xml: + lines.extend([' ', ' %s' % bug.uuid]) + for commname in comments: + try: + comment = bug.comment_root.comment_from_shortname(commname) + except comment.InvalidShortname, e: + raise UserError(e.message) + if as_xml: + lines.append(comment.xml(indent=4, shortname=bugname)) + else: + lines.append(comment.string(shortname=shortname)) + if spaces_left > 0: + spaces_left -= 1 + lines.append('') # add a blank line between bugs/comments + if as_xml: + lines.append('') + if as_xml: + lines.extend(_xml_footer()) + return '\n'.join(lines) -- 2.26.2