vapier 15/05/14 02:33:27
Added:
pwclient-20141110122616-0003-pwclient-basic-python3-support.patch
pwclient-20141110122616-0001-pwclient-handle-missing-.pwclientrc-better.patch
pwclient-20141110122616-0002-pwclient-use-print_function-for-better-py3-compatibi.patch
Log:
Version bump. Rework python support.
(Portage version: 2.2.18/cvs/Linux x86_64, signed Manifest commit with key
D2E96200)
Revision Changes Path
1.1
dev-vcs/pwclient/files/pwclient-20141110122616-0003-pwclient-basic-python3-support.patch
file :
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/dev-vcs/pwclient/files/pwclient-20141110122616-0003-pwclient-basic-python3-support.patch?rev=1.1&view=markup
plain:
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/dev-vcs/pwclient/files/pwclient-20141110122616-0003-pwclient-basic-python3-support.patch?rev=1.1&content-type=text/plain
Index: pwclient-20141110122616-0003-pwclient-basic-python3-support.patch
===================================================================
>From fcbd40fe7fa3fbdc5ffb386c5c7b72a8704e7136 Mon Sep 17 00:00:00 2001
From: Mike Frysinger <[email protected]>
Date: Wed, 6 May 2015 00:12:02 -0400
Subject: [PATCH 3/3] pwclient: basic python3 support
This fixes a few random issues to make the script work at least somewhat
under python 3:
- set the default encoding to utf-8
- handle xmlrpclib/xmlrpc.client module renames
- handle ConfigParser/configparser module renames
- add a unicode() stub for python 3
- fix old style class definition w/Filter
- use list comprehension instead of map()
- drop the unused version= keyword w/argparse
The code still runs under python 2 the same as before, and now works for
the most part under python 3 -- the handling of encoded content still needs
some work, but that'll require more surgery, and is best left to another
commit after this.
Signed-off-by: Mike Frysinger <[email protected]>
---
apps/patchwork/bin/pwclient | 31 +++++++++++++++++++++++--------
1 file changed, 23 insertions(+), 8 deletions(-)
diff --git a/apps/patchwork/bin/pwclient b/apps/patchwork/bin/pwclient
index 2e6daa5..5080a17 100755
--- a/apps/patchwork/bin/pwclient
+++ b/apps/patchwork/bin/pwclient
@@ -1,4 +1,5 @@
#!/usr/bin/env python
+# -*- coding: utf-8 -*-
#
# Patchwork command line client
# Copyright (C) 2008 Nate Case <[email protected]>
@@ -23,16 +24,31 @@ from __future__ import print_function
import os
import sys
-import xmlrpclib
+try:
+ import xmlrpclib
+except ImportError:
+ # Python 3 has merged/renamed things.
+ import xmlrpc.client as xmlrpclib
import argparse
import string
import tempfile
import subprocess
import base64
-import ConfigParser
+try:
+ import ConfigParser
+except ImportError:
+ # Python 3 has renamed things.
+ import configparser as ConfigParser
import shutil
import re
+# Add a shim for Python 2's unicode() helper.
+try:
+ unicode
+except NameError:
+ # Python 3 does everything by unicode now.
+ unicode = str
+
# 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
@@ -40,7 +56,7 @@ import re
DEFAULT_URL = "http://patchwork/xmlrpc/"
CONFIG_FILE = os.path.expanduser('~/.pwclientrc')
-class Filter:
+class Filter(object):
"""Filter for selecting patches."""
def __init__(self):
# These fields refer to specific objects, so they are special
@@ -135,7 +151,7 @@ def person_ids_by_name(rpc, name):
if len(name) == 0:
return []
people = rpc.person_list(name, 0)
- return map(lambda x: x['id'], people)
+ return [x['id'] for x in people]
def list_patches(patches, format_str=None):
"""Dump a list of patches to stdout."""
@@ -352,7 +368,7 @@ class _RecursiveHelpAction(argparse._HelpAction):
parser.exit()
def main():
- hash_parser = argparse.ArgumentParser(add_help=False, version=False)
+ hash_parser = argparse.ArgumentParser(add_help=False)
hash_parser.add_argument(
'-h', metavar='HASH', dest='hash', action='store',
help='''Lookup by patch hash'''
@@ -362,7 +378,7 @@ def main():
help='Patch ID',
)
- filter_parser = argparse.ArgumentParser(add_help=False, version=False)
+ filter_parser = argparse.ArgumentParser(add_help=False)
filter_parser.add_argument(
'-s', metavar='STATE',
help='''Filter by patch state (e.g., 'New', 'Accepted', etc.)'''
@@ -397,7 +413,7 @@ def main():
'patch_name', metavar='STR', nargs='?',
help='substring to search for patches by name',
)
- help_parser = argparse.ArgumentParser(add_help=False, version=False)
+ help_parser = argparse.ArgumentParser(add_help=False)
help_parser.add_argument(
'--help', action='help', help=argparse.SUPPRESS,
#help='''show this help message and exit'''
@@ -406,7 +422,6 @@ def main():
action_parser = argparse.ArgumentParser(
prog='pwclient',
add_help=False,
- version=False,
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog='''(apply | get | info | view | update) (-h HASH | ID [ID
...])''',
)
--
2.4.0
1.1
dev-vcs/pwclient/files/pwclient-20141110122616-0001-pwclient-handle-missing-.pwclientrc-better.patch
file :
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/dev-vcs/pwclient/files/pwclient-20141110122616-0001-pwclient-handle-missing-.pwclientrc-better.patch?rev=1.1&view=markup
plain:
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/dev-vcs/pwclient/files/pwclient-20141110122616-0001-pwclient-handle-missing-.pwclientrc-better.patch?rev=1.1&content-type=text/plain
Index:
pwclient-20141110122616-0001-pwclient-handle-missing-.pwclientrc-better.patch
===================================================================
>From 601e1362d63293ca567295f63cb52bcfeb5d9959 Mon Sep 17 00:00:00 2001
From: Mike Frysinger <[email protected]>
Date: Tue, 5 May 2015 23:19:57 -0400
Subject: [PATCH 1/3] pwclient: handle missing ~/.pwclientrc better
The upgrade path will crash if ~/.pwclientrc doesn't exist, so add an
explicit check for the file before we try to "upgrade" it.
The default error messages don't mention the config file, so it can be
a bit confusing what pwclient is complaining about when running.
Signed-off-by: Mike Frysinger <[email protected]>
---
apps/patchwork/bin/pwclient | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/apps/patchwork/bin/pwclient b/apps/patchwork/bin/pwclient
index 2a80981..56aa909 100755
--- a/apps/patchwork/bin/pwclient
+++ b/apps/patchwork/bin/pwclient
@@ -552,7 +552,7 @@ def main():
config = ConfigParser.ConfigParser()
config.read([CONFIG_FILE])
- if not config.has_section('options'):
+ if not config.has_section('options') and os.path.exists(CONFIG_FILE):
sys.stderr.write('~/.pwclientrc is in the old format. Migrating it...')
old_project = config.get('base','project')
@@ -590,10 +590,10 @@ def main():
sys.exit(1)
if not config.has_section(project_str):
- sys.stderr.write("No section for project %s\n" % project_str)
+ sys.stderr.write('No section for project %s in ~/.pwclientrc\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.stderr.write('No URL for project %s in ~/.pwclientrc\n' %
project_str)
sys.exit(1)
if not do_signoff and config.has_option('options', 'signoff'):
do_signoff = config.getboolean('options', 'signoff')
--
2.4.0
1.1
dev-vcs/pwclient/files/pwclient-20141110122616-0002-pwclient-use-print_function-for-better-py3-compatibi.patch
file :
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/dev-vcs/pwclient/files/pwclient-20141110122616-0002-pwclient-use-print_function-for-better-py3-compatibi.patch?rev=1.1&view=markup
plain:
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/dev-vcs/pwclient/files/pwclient-20141110122616-0002-pwclient-use-print_function-for-better-py3-compatibi.patch?rev=1.1&content-type=text/plain
Index:
pwclient-20141110122616-0002-pwclient-use-print_function-for-better-py3-compatibi.patch
===================================================================
>From 0991ccb0e7c0be66e087839f88a7120394c2f052 Mon Sep 17 00:00:00 2001
From: Mike Frysinger <[email protected]>
Date: Tue, 5 May 2015 23:54:16 -0400
Subject: [PATCH 2/3] pwclient: use print_function for better py3 compatibility
The script already tries to use print like a function in many places but
is really passing a parenthesized string. Import the print_function from
the future module so that it actually works as intended.
We also need to fix up a few latent print statements to make it work.
Signed-off-by: Mike Frysinger <[email protected]>
---
apps/patchwork/bin/pwclient | 26 ++++++++++++++------------
1 file changed, 14 insertions(+), 12 deletions(-)
diff --git a/apps/patchwork/bin/pwclient b/apps/patchwork/bin/pwclient
index 56aa909..2e6daa5 100755
--- a/apps/patchwork/bin/pwclient
+++ b/apps/patchwork/bin/pwclient
@@ -19,6 +19,8 @@
# along with Patchwork; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+from __future__ import print_function
+
import os
import sys
import xmlrpclib
@@ -170,9 +172,9 @@ def action_list(rpc, filter, submitter_str, delegate_str,
format_str=None):
else:
for id in ids:
person = rpc.person_get(id)
- print "Patches submitted by %s <%s>:" % \
- (unicode(person['name']).encode("utf-8"), \
- unicode(person['email']).encode("utf-8"))
+ print('Patches submitted by %s <%s>:' %
+ (unicode(person['name']).encode('utf-8'),
+ unicode(person['email']).encode('utf-8')))
f = filter
f.add("submitter_id", id)
patches = rpc.patch_list(f.d)
@@ -187,8 +189,8 @@ def action_list(rpc, filter, submitter_str, delegate_str,
format_str=None):
else:
for id in ids:
person = rpc.person_get(id)
- print "Patches delegated to %s <%s>:" % \
- (person['name'], person['email'])
+ print('Patches delegated to %s <%s>:' %
+ (person['name'], person['email']))
f = filter
f.add("delegate_id", id)
patches = rpc.patch_list(f.d)
@@ -245,7 +247,7 @@ def action_get(rpc, patch_id):
try:
f.write(unicode(s).encode("utf-8"))
f.close()
- print "Saved patch to %s" % fname
+ print('Saved patch to %s' % fname)
except:
sys.stderr.write("Failed to write to %s\n" % fname)
sys.exit(1)
@@ -258,13 +260,13 @@ def action_apply(rpc, patch_id, apply_cmd=None):
sys.exit(1)
if apply_cmd is None:
- print "Applying patch #%d to current directory" % patch_id
+ print('Applying patch #%d to current directory' % patch_id)
apply_cmd = ['patch', '-p1']
else:
- print "Applying patch #%d using %s" % (
- patch_id, repr(' '.join(apply_cmd)))
+ print('Applying patch #%d using %s' %
+ (patch_id, repr(' '.join(apply_cmd))))
- print "Description: %s" % patch['name']
+ print('Description: %s' % patch['name'])
s = rpc.patch_get_mbox(patch_id)
if len(s) > 0:
proc = subprocess.Popen(apply_cmd, stdin = subprocess.PIPE)
@@ -295,7 +297,7 @@ def action_update_patch(rpc, patch_id, state = None, commit
= None):
success = False
try:
success = rpc.patch_set(patch_id, params)
- except xmlrpclib.Fault, f:
+ except xmlrpclib.Fault as f:
sys.stderr.write("Error updating patch: %s\n" % f.faultString)
if not success:
@@ -668,7 +670,7 @@ def main():
for patch_id in non_empty(h, patch_ids):
s = rpc.patch_get_mbox(patch_id)
if len(s) > 0:
- print unicode(s).encode("utf-8")
+ print(unicode(s).encode('utf-8'))
elif action == 'info':
for patch_id in non_empty(h, patch_ids):
--
2.4.0