X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=apps%2Fpatchwork%2Fbin%2Fpwclient;h=dfbea30862756950e46b4a845e4e426726402284;hb=429ef9ba9dcc8f92b8362c1b0fca0916db05e84b;hp=e642195153a08e95b19dd0e38126dfd991e60b7b;hpb=bfb1ddb628ed1bea06d6eba5c6cc7a1c71abf5af;p=patchwork diff --git a/apps/patchwork/bin/pwclient b/apps/patchwork/bin/pwclient index e642195..dfbea30 100755 --- a/apps/patchwork/bin/pwclient +++ b/apps/patchwork/bin/pwclient @@ -28,13 +28,14 @@ import tempfile import subprocess import base64 import ConfigParser +import shutil # Default Patchwork remote XML-RPC server URL # This script will check the PW_XMLRPC_URL environment variable # for the URL to access. If that is unspecified, it will fallback to # the hardcoded default value specified here. DEFAULT_URL = "http://patchwork/xmlrpc/" -CONFIG_FILES = [os.path.expanduser('~/.pwclientrc')] +CONFIG_FILE = os.path.expanduser('~/.pwclientrc') class Filter: """Filter for selecting patches.""" @@ -165,10 +166,10 @@ def person_ids_by_name(rpc, name): def list_patches(patches): """Dump a list of patches to stdout.""" - print("%-5s %-12s %s" % ("ID", "State", "Name")) - print("%-5s %-12s %s" % ("--", "-----", "----")) + print("%-7s %-12s %s" % ("ID", "State", "Name")) + print("%-7s %-12s %s" % ("--", "-----", "----")) for patch in patches: - print("%-5d %-12s %s" % (patch['id'], patch['state'], patch['name'])) + print("%-7d %-12s %s" % (patch['id'], patch['state'], patch['name'])) def action_list(rpc, filter, submitter_str, delegate_str): filter.resolve_ids(rpc) @@ -231,7 +232,7 @@ def action_info(rpc, patch_id): print(s) print('-' * len(s)) for key, value in sorted(patch.iteritems()): - print("- %- 14s: %s" % (key, value)) + print("- %- 14s: %s" % (key, unicode(value).encode("utf-8"))) def action_get(rpc, patch_id): patch = rpc.patch_get(patch_id) @@ -350,16 +351,6 @@ def main(): msgid_str = "" url = DEFAULT_URL - config = ConfigParser.ConfigParser() - config.read(CONFIG_FILES) - - # grab settings from config files - if config.has_option('base', 'url'): - url = config.get('base', 'url') - - if config.has_option('base', 'project'): - project_str = config.get('base', 'project') - for name, value in opts: if name == '-s': state_str = value @@ -389,17 +380,67 @@ def main(): sys.stderr.write("Too many arguments specified\n") usage() + # grab settings from config files + config = ConfigParser.ConfigParser() + config.read([CONFIG_FILE]) + + if not config.has_section('options'): + sys.stderr.write('~/.pwclientrc is in the old format. Migrating it...') + + old_project = config.get('base','project') + + new_config = ConfigParser.ConfigParser() + new_config.add_section('options') + + new_config.set('options','default',old_project) + new_config.add_section(old_project) + + new_config.set(old_project,'url',config.get('base','url')) + if config.has_option('auth', 'username'): + new_config.set(old_project,'username',config.get('auth','username')) + if config.has_option('auth', 'password'): + new_config.set(old_project,'password',config.get('auth','password')) + + old_config_file = CONFIG_FILE + '.orig' + shutil.copy2(CONFIG_FILE,old_config_file) + + with open(CONFIG_FILE, 'wb') as fd: + new_config.write(fd) + + sys.stderr.write(' Done.\n') + sys.stderr.write('Your old ~/.pwclientrc was saved to %s\n' % old_config_file) + sys.stderr.write('and was converted to the new format. You may want to\n') + sys.stderr.write('inspect it before continuing.\n') + sys.exit(1) + + if not project_str: + try: + project_str = config.get('options', 'default') + except: + sys.stderr.write("No default project configured in ~/.pwclientrc\n") + usage() + + if not config.has_section(project_str): + sys.stderr.write("No section for project %s\n" % project_str) + sys.exit(1) + + if not config.has_option(project_str, 'url'): + sys.stderr.write("No URL for project %s\n" % project_str) + sys.exit(1) + + url = config.get(project_str, 'url') + (username, password) = (None, None) transport = None if action in auth_actions: - if config.has_option('auth', 'username') and \ - config.has_option('auth', 'password'): + if config.has_option(project_str, 'username') and \ + config.has_option(project_str, 'password'): use_https = url.startswith('https') transport = BasicHTTPAuthTransport( \ - config.get('auth', 'username'), - config.get('auth', 'password'), + config.get(project_str, 'username'), + config.get(project_str, 'password'), use_https) else: