From d4fbed617f2a1921bdebdf488408cdfbace3cd37 Mon Sep 17 00:00:00 2001 From: Stefano Rivera Date: Sun, 13 Nov 2011 20:15:19 +0200 Subject: [PATCH] Use EditBugReport instead of requestsync's edit_report. Drop that. --- requestbackport | 7 +-- requestsync | 19 ++++---- ubuntutools/requestsync/common.py | 77 ------------------------------- ubuntutools/requestsync/lp.py | 9 ++-- ubuntutools/requestsync/mail.py | 25 ++++------ 5 files changed, 29 insertions(+), 108 deletions(-) diff --git a/requestbackport b/requestbackport index e961fc1..40c8245 100755 --- a/requestbackport +++ b/requestbackport @@ -26,8 +26,7 @@ from ubuntutools.lp.lpapicache import Launchpad, Distribution from ubuntutools.lp.udtexceptions import PackageNotFoundException from ubuntutools.config import UDTConfig from ubuntutools.rdepends import query_rdepends, RDependsException -from ubuntutools.requestsync.common import edit_report -from ubuntutools.question import YesNoQuestion +from ubuntutools.question import YesNoQuestion, EditBugReport class DestinationException(Exception): @@ -195,7 +194,9 @@ def request_backport(package_spph, source, destinations): + [""] ) % subst) - subject, body = edit_report(subject, body, changes_required=True) + editor = EditBugReport(subject, body) + editor.edit() + subject, body = editor.get_report() Logger.normal('The final report is:\nSummary: %s\nDescription:\n%s\n', subject, body) diff --git a/requestsync b/requestsync index 752998f..22aefc3 100755 --- a/requestsync +++ b/requestsync @@ -36,8 +36,8 @@ from distro_info import UbuntuDistroInfo from ubuntutools.config import UDTConfig, ubu_email from ubuntutools.lp import udtexceptions from ubuntutools.misc import require_utf8 -from ubuntutools.requestsync.common import (edit_report, get_debian_changelog, - raw_input_exit_on_ctrlc) +from ubuntutools.question import confirmation_prompt, EditBugReport +from ubuntutools.requestsync.common import get_debian_changelog # # entry point @@ -205,8 +205,7 @@ def main(): print ("'%s' doesn't exist in 'Ubuntu %s'.\n" "Do you want to sync a new package?" % (srcpkg, release)) - raw_input_exit_on_ctrlc('Press [Enter] to continue ' - 'or [Ctrl-C] to abort. ') + confirmation_prompt() newsource = True # Get the requested Debian source package @@ -283,8 +282,7 @@ def main(): '>>> ENTER_EXPLANATION_HERE <<<\n\n') if need_interaction: - raw_input_exit_on_ctrlc('Press [Enter] to continue.' - 'Press [Ctrl-C] to abort now. ') + confirmation_prompt() base_version = force_base_version or ubuntu_version @@ -306,8 +304,13 @@ def main(): changelog = "XXX FIXME: add changelog here XXX" report += changelog - (title, report) = edit_report(title, report, - changes_required=need_interaction) + editor = EditBugReport(title, report) + if need_interaction: + editor.edit() + else: + editor.optional_edit() + title, report = editor.get_report() + if 'XXX FIXME' in report: print >> sys.stderr, ("E: changelog boilerplate found in report, " "please manually add changelog when using '-C'") diff --git a/ubuntutools/requestsync/common.py b/ubuntutools/requestsync/common.py index 37f90cb..37511f5 100644 --- a/ubuntutools/requestsync/common.py +++ b/ubuntutools/requestsync/common.py @@ -22,22 +22,10 @@ import os import sys import urllib2 -import re -import tempfile from debian.changelog import Changelog from ubuntutools import subprocess -def raw_input_exit_on_ctrlc(*args, **kwargs): - ''' - A wrapper around raw_input() to exit with a normalized message on Control-C - ''' - try: - return raw_input(*args, **kwargs) - except KeyboardInterrupt: - print '\nAbort requested. No sync request filed.' - sys.exit(1) - def get_changelog(srcpkg, distro): ''' Download and return a parsed changelog for srcpackage, from @@ -83,68 +71,3 @@ def get_debian_changelog(srcpkg, version): break new_entries.append(unicode(block)) return u''.join(new_entries) - -def edit_report(subject, body, changes_required = False): - ''' - Ask if the user wants to edit a report (consisting of subject and body) - in sensible-editor. - - If changes_required is True then the file has to be edited before we - can proceed. - - Returns (new_subject, new_body). - ''' - - editing_finished = False - while not editing_finished: - report = 'Summary (one line):\n%s\n\nDescription:\n%s' % (subject, body) - - if not changes_required: - print 'Currently the report looks as follows:\n%s' % report - while True: - val = raw_input_exit_on_ctrlc('Do you want to edit the report ' - '[y/N]? ') - if val.lower() in ('y', 'yes'): - break - elif val.lower() in ('n', 'no', ''): - editing_finished = True - break - else: - print 'Invalid answer.' - - if not editing_finished: - # Create tempfile and remember mtime - report_file = tempfile.NamedTemporaryFile(prefix='requestsync_') - report_file.write(report.encode('utf-8')) - report_file.flush() - mtime_before = os.stat(report_file.name).st_mtime - - # Launch editor - try: - subprocess.check_call(['sensible-editor', report_file.name]) - except subprocess.CalledProcessError, e: - print >> sys.stderr, ('Error calling sensible-editor: %s\n' - 'Aborting.' % e) - sys.exit(1) - - # Check if the tempfile has been changed - if changes_required: - if mtime_before == os.stat(report_file.name).st_mtime: - print ('The report has not been changed, but you have to ' - 'explain why the Ubuntu changes can be dropped.') - raw_input_exit_on_ctrlc('Press [Enter] to retry or ' - '[Control-C] to abort. ') - else: - changes_required = False - - report_file.seek(0) - report = report_file.read().decode('utf-8') - report_file.close() - - # Undecorate report again - (subject, body) = report.split("\nDescription:\n", 1) - # Remove prefix and whitespace from subject - subject = re.sub('^Summary \(one line\):\s*', '', subject, - 1).strip() - - return (subject, body) diff --git a/ubuntutools/requestsync/lp.py b/ubuntutools/requestsync/lp.py index b6067da..b201ef9 100644 --- a/ubuntutools/requestsync/lp.py +++ b/ubuntutools/requestsync/lp.py @@ -26,9 +26,9 @@ import urllib2 from debian.deb822 import Changes from distro_info import DebianDistroInfo -from ubuntutools.requestsync.common import raw_input_exit_on_ctrlc from ubuntutools.lp.lpapicache import (Launchpad, Distribution, PersonTeam, DistributionSourcePackage) +from ubuntutools.question import confirmation_prompt def get_debian_srcpkg(name, release): debian = Distribution('debian') @@ -60,7 +60,7 @@ Your sync request shall require an approval by a member of the appropriate sponsorship team, who shall be subscribed to this bug report. This must be done before it can be processed by a member of the Ubuntu Archive team.''' - raw_input_exit_on_ctrlc('If the above is correct please press [Enter] ') + confirmation_prompt() return need_sponsor @@ -88,8 +88,7 @@ def check_existing_reports(srcpkg): 'Please check the above URL to verify this before ' 'continuing.' % (bug.title, bug.web_link)) - raw_input_exit_on_ctrlc('Press [Enter] to continue or [Ctrl-C] ' - 'to abort. ') + confirmation_prompt() def get_ubuntu_delta_changelog(srcpkg): ''' @@ -133,7 +132,7 @@ def post_bug(srcpkg, subscribe, status, bugtitle, bugtext): print ('The final report is:\nSummary: %s\nDescription:\n%s\n' % (bugtitle, bugtext)) - raw_input_exit_on_ctrlc('Press [Enter] to continue or [Ctrl-C] to abort. ') + confirmation_prompt() if srcpkg: bug_target = DistributionSourcePackage( diff --git a/ubuntutools/requestsync/mail.py b/ubuntutools/requestsync/mail.py index 862feb7..6335ee2 100644 --- a/ubuntutools/requestsync/mail.py +++ b/ubuntutools/requestsync/mail.py @@ -30,8 +30,8 @@ from devscripts.logger import Logger from distro_info import DebianDistroInfo from ubuntutools.archive import rmadison, FakeSPPH -from ubuntutools.requestsync.common import (get_changelog, - raw_input_exit_on_ctrlc) +from ubuntutools.requestsync.common import get_changelog +from ubuntutools.question import confirmation_prompt, YesNoQuestion from ubuntutools import subprocess from ubuntutools.lp.udtexceptions import PackageNotFoundException @@ -71,17 +71,12 @@ def need_sponsorship(name, component, release): component. ''' - while True: - print ("Do you have upload permissions for the '%s' component " - "or the package '%s' in Ubuntu %s?" - % (component, name, release)) - val = raw_input_exit_on_ctrlc("If in doubt answer 'n'. [y/N]? ") - if val.lower() in ('y', 'yes'): - return False - elif val.lower() in ('n', 'no', ''): - return True - else: - print 'Invalid answer' + val = YesNoQuestion().ask("Do you have upload permissions for the " + "'%s' component or the package '%s' in " + "Ubuntu %s?\n" + "If in doubt answer 'n'." + % (component, name, release), 'no') + return val == 'no' def check_existing_reports(srcpkg): ''' @@ -90,7 +85,7 @@ def check_existing_reports(srcpkg): print ('Please check on ' 'https://bugs.launchpad.net/ubuntu/+source/%s/+bugs\n' 'for duplicate sync requests before continuing.' % srcpkg) - raw_input_exit_on_ctrlc('Press [Enter] to continue or [Ctrl-C] to abort. ') + confirmation_prompt() def get_ubuntu_delta_changelog(srcpkg): ''' @@ -166,7 +161,7 @@ Content-Type: text/plain; charset=UTF-8 %s''' % (myemailaddr, to, bugtitle, signed_report) print 'The final report is:\n%s' % mail - raw_input_exit_on_ctrlc('Press [Enter] to continue or [Ctrl-C] to abort. ') + confirmation_prompt() # connect to the server try: