git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2 1/3] Cast byte strings to unicode strings in python3

From
Ben Keene via GitGitGadget <gitgitgadget@gmail.com>
Date
Nov 15, 2019, 14:42 UTC
Message-ID
<0bca930ff82623bbef172b4cb6c36ef8e5c46098.1573828978.git.gitgitgadget@gmail.com>
In-Reply-To
<pull.465.v2.git.1573828978.gitgitgadget@gmail.com>
From: Ben Keene <bkeene@partswatch.com>
Signed-off-by: Ben Keene <seraphire@gmail.com>
---
 git-p4.py | 26 ++++++++++++++++++++++++--
 1 file changed, 24 insertions(+), 2 deletions(-)
diff --git a/git-p4.py b/git-p4.py
index 60c73b6a37..6e8b3a26cd 100755
--- a/git-p4.py
+++ b/git-p4.py
@@ -36,12 +36,22 @@
     unicode = str
     bytes = bytes
     basestring = (str,bytes)
+    isunicode = True
+    def ustring(text):
+        """Returns the byte string as a unicode string"""
+        if text == '' or text == b'':
+            return ''
+        return unicode(text, "utf-8")
 else:
     # 'unicode' exists, must be Python 2
     str = str
     unicode = unicode
     bytes = str
     basestring = basestring
+    isunicode = False
+    def ustring(text):
+        """Returns the byte string unchanged"""
+        return text
 
 try:
     from subprocess import CalledProcessError
@@ -196,6 +206,8 @@ def read_pipe_full(c):
     expand = isinstance(c,basestring)
     p = subprocess.Popen(c, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=expand)
     (out, err) = p.communicate()
+    out = ustring(out)
+    err = ustring(err)
     return (p.returncode, out, err)
 
 def read_pipe(c, ignore_error=False):
@@ -263,6 +275,7 @@ def p4_has_move_command():
     cmd = p4_build_cmd(["move", "-k", "@from", "@to"])
     p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
     (out, err) = p.communicate()
+    err = ustring(err)
     # return code will be 1 in either case
     if err.find("Invalid option") >= 0:
         return False
@@ -646,10 +659,18 @@ def p4CmdList(cmd, stdin=None, stdin_mode='w+b', cb=None, skip_info=False,
             if skip_info:
                 if 'code' in entry and entry['code'] == 'info':
                     continue
+                if b'code' in entry and entry[b'code'] == b'info':
+                    continue
             if cb is not None:
                 cb(entry)
             else:
-                result.append(entry)
+                if isunicode:
+                    out = {}
+                    for key, value in entry.items():
+                        out[ustring(key)] = ustring(value)
+                    result.append(out)
+                else:
+                    result.append(entry)
     except EOFError:
         pass
     exitCode = p4.wait()
@@ -792,7 +813,7 @@ def gitConfig(key, typeSpecifier=None):
         cmd += [ key ]
         s = read_pipe(cmd, ignore_error=True)
         _gitConfig[key] = s.strip()
-    return _gitConfig[key]
+    return ustring(_gitConfig[key])
 
 def gitConfigBool(key):
     """Return a bool, using git config --bool.  It is True only if the
@@ -860,6 +881,7 @@ def branch_exists(branch):
     cmd = [ "git", "rev-parse", "--symbolic", "--verify", branch ]
     p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
     out, _ = p.communicate()
+    out = ustring(out)
     if p.returncode:
         return False
     # expect exactly one line of output: the branch name
-- 
gitgitgadget
Previous: Ben Keene via GitGitGadgetNext: Junio C Hamano
Message 9 of 17 in “Feature: New Variable git-p4.binary”
  1. 0/2 Feature: New Variable git-p4.binaryBen Keene via GitGitGadget, Nov 13, 2019
  2. 2/2 Added general variable git-p4.binary and added a default for windows of 'P4.EXE'Ben Keene via GitGitGadget, Nov 13, 2019
  3. 1/2 Cast byte strings to unicode strings in python3Ben Keene via GitGitGadget, Nov 13, 2019
  4. Junio C HamanoNov 14, 2019
  5. Luke DiamandNov 14, 2019
  6. Ben KeeneNov 14, 2019
  7. Luke DiamandNov 15, 2019
  8. 0/3 Feature: New Variable git-p4.p4programBen Keene via GitGitGadget, Nov 15, 2019
  9. 1/3 Cast byte strings to unicode strings in python3Ben Keene via GitGitGadget, Nov 15, 2019
  10. Junio C HamanoNov 16, 2019
  11. Junio C HamanoNov 16, 2019
  12. 3/3 Changed the name of the parameter from git-p4.binary to git-p4.p4programBen Keene via GitGitGadget, Nov 15, 2019
  13. 2/3 Added general variable git-p4.binary and added a default for windows of 'P4.EXE'Ben Keene via GitGitGadget, Nov 15, 2019
  14. Junio C HamanoNov 16, 2019
  15. Junio C HamanoNov 16, 2019
  16. Junio C HamanoNov 18, 2019
  17. Ben KeeneDec 3, 2019

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.