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





Reply via email to