Patchwork [3/4] tracetool: avoid str.rpartition() Python 2.5 function

login
register
mail settings
Submitter Stefan Hajnoczi
Date April 27, 2012, 2:23 p.m.
Message ID <1335536625-4621-4-git-send-email-stefanha@linux.vnet.ibm.com>
Download mbox | patch
Permalink /patch/155494/
State New
Headers show

Comments

Stefan Hajnoczi - April 27, 2012, 2:23 p.m.
The str.rpartition() function is related to str.split() and is used for
splitting strings.  It was introduced in Python 2.5 and therefore cannot
be used in tracetool as Python 2.4 compatibility is required.

Replace the code using str.rsplit().

Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
---
 scripts/tracetool/__init__.py |   17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)
Lluís Vilanova - April 27, 2012, 5:47 p.m.
Stefan Hajnoczi writes:

> The str.rpartition() function is related to str.split() and is used for
> splitting strings.  It was introduced in Python 2.5 and therefore cannot
> be used in tracetool as Python 2.4 compatibility is required.

> Replace the code using str.rsplit().

> Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>

Reviewed-by: Lluís Vilanova <vilanova@ac.upc.edu>


> ---
>  scripts/tracetool/__init__.py |   17 ++++++++++-------
>  1 file changed, 10 insertions(+), 7 deletions(-)

> diff --git a/scripts/tracetool/__init__.py b/scripts/tracetool/__init__.py
> index 49858c9..175df08 100644
> --- a/scripts/tracetool/__init__.py
> +++ b/scripts/tracetool/__init__.py
> @@ -64,14 +64,17 @@ class Arguments:
>          res = []
>          for arg in arg_str.split(","):
>              arg = arg.strip()
> -            parts = arg.split()
> -            head, sep, tail = parts[-1].rpartition("*")
> -            parts = parts[:-1]
> -            if tail == "void":
> -                assert len(parts) == 0 and sep == ""
> +            if arg == 'void':
>                  continue
> -            arg_type = " ".join(parts + [ " ".join([head, sep]).strip() ]).strip()
> -            res.append((arg_type, tail))
> +
> +            if '*' in arg:
> +                arg_type, identifier = arg.rsplit('*', 1)
> +                arg_type += '*'
> +                identifier = identifier.strip()
> +            else:
> +                arg_type, identifier = arg.rsplit(None, 1)
> +
> +            res.append((arg_type, identifier))
>          return Arguments(res)
 
>      def __iter__(self):
> -- 
> 1.7.10

Patch

diff --git a/scripts/tracetool/__init__.py b/scripts/tracetool/__init__.py
index 49858c9..175df08 100644
--- a/scripts/tracetool/__init__.py
+++ b/scripts/tracetool/__init__.py
@@ -64,14 +64,17 @@  class Arguments:
         res = []
         for arg in arg_str.split(","):
             arg = arg.strip()
-            parts = arg.split()
-            head, sep, tail = parts[-1].rpartition("*")
-            parts = parts[:-1]
-            if tail == "void":
-                assert len(parts) == 0 and sep == ""
+            if arg == 'void':
                 continue
-            arg_type = " ".join(parts + [ " ".join([head, sep]).strip() ]).strip()
-            res.append((arg_type, tail))
+
+            if '*' in arg:
+                arg_type, identifier = arg.rsplit('*', 1)
+                arg_type += '*'
+                identifier = identifier.strip()
+            else:
+                arg_type, identifier = arg.rsplit(None, 1)
+
+            res.append((arg_type, identifier))
         return Arguments(res)
 
     def __iter__(self):