------------------------------------------------------------------------------
To reply, visit https://hellosplat.com/s/beanbag/tickets/4736/
------------------------------------------------------------------------------

New ticket #4736 by basil
For Beanbag, Inc. > RBTools

Status: New
Tags: Priority:Medium, Type:Defect


------------------------------------------------------------------------------
rbt patch --print does not work on Python 3
==============================================================================

# What version are you running?

```
$ rbt --version
RBTools 1.0.1
$ python2 --version
Python 2.7.10
$ python3 --version
Python 3.6.6
```

# What steps will reproduce the problem?

1. Create a virtual environment and install RBTools.
2. Run `rbt patch --print <review-id>`.

# What is the expected output? What do you see instead?

The expected output is a readable patch, and I get the expected output when the 
virtual environment in step 1 is created with Python 2:

```
diff --git a/path/to/file1 b/path/to/file1
index 
d27838edc524e3813ae1019d534067e9a8bceb4c..264a986b38050f935b2f2df40875e76087fbad0e
 100644
--- a/path/to/file1
+++ b/path/to/file1
@@ -41,6 +41,7 @@
[...]
```

However, when the virtual environment in step 1 is created with Python 3, I see 
the following instead:

```
b'diff --git a/path/to/file1 b/path/to/file1\nindex 
d27838edc524e3813ae1019d534067e9a8bceb4c..264a986b38050f935b2f2df40875e76087fbad0e
 100644\n--- a/path/to/file1\n+++ b/path/to/file1\n@@ -41,6 +41,7 @@
[...]
```

# What operating system are you using?

macOS High Sierra 10.13.6

# Attach the debug out from the command.

```
$ rbt patch --debug --print <review-id>
>>> RBTools 1.0.1
>>> Python 3.6.6 (v3.6.6:4cf1f54eb7, Jun 26 2018, 19:50:54) 
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)]
>>> Running on Darwin-17.7.0-x86_64-i386-64bit
>>> Home = /Users/basil
>>> Current directory = /Users/basil/path/to/repository
>>> Command line: rbt patch --debug --print 42917
>>> Making HTTP GET request to http://reviews.example.com/api/
>>> Making HTTP GET request to 
>>> http://reviews.example.com/api/review-requests/42917/diffs/
>>> Cached response for HTTP GET 
>>> http://reviews.example.com/api/review-requests/42917/diffs/ expired and was 
>>> modified
>>> Making HTTP GET request to 
>>> http://reviews.example.com/api/review-requests/42917/diffs/1/
>>> Cached response for HTTP GET 
>>> http://reviews.example.com/api/review-requests/42917/diffs/1/ expired and 
>>> was not modified
>>> Making HTTP GET request to 
>>> http://reviews.example.com/api/review-requests/42917/diffs/1/
>>> Cached response for HTTP GET 
>>> http://reviews.example.com/api/review-requests/42917/diffs/1/ expired and 
>>> was not modified
b'diff --git a/path/to/file1 b/path/to/file1\nindex 
d27838edc524e3813ae1019d534067e9a8bceb4c..264a986b38050f935b2f2df40875e76087fbad0e
 100644\n--- a/path/to/file1\n+++ b/path/to/file1\n@@ -41,6 +41,7 @@
[...]
```

# Please provide any additional information below.

This change to RBTools works around the problem successfully on both Python 2 
and Python 3:

```
diff --git a/rbtools/commands/patch.py b/rbtools/commands/patch.py
index 1ea5665..70c7a20 100644
--- a/rbtools/commands/patch.py
+++ b/rbtools/commands/patch.py
@@ -82,6 +82,9 @@ class Patch(Command):
         try:
             diff = diffs.get_item(diff_revision)
             diff_body = diff.get_patch().data
+            diff_body = (
+                diff_body.decode('utf-8') if isinstance(diff_body, bytes) else 
diff_body
+            )
             base_dir = getattr(diff, 'basedir', None) or ''
         except APIError:
             raise CommandError('The specified diff revision does not exist.')
```

------------------------------------------------------------------------------

-- 
You received this message because you are subscribed to the Google Groups 
"reviewboard-issues" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/reviewboard-issues.
For more options, visit https://groups.google.com/d/optout.

Reply via email to