* [PATCH] Support having non-utf-8 characters returned by p4
@ 2020-12-04 23:19 David Racine via GitGitGadget
0 siblings, 0 replies; only message in thread
From: David Racine via GitGitGadget @ 2020-12-04 23:19 UTC (permalink / raw)
To: git; +Cc: Luke Diamand, David Racine, David Racine
From: David Racine <bass_dr@hotmail.com>
When perforce server is not configured for Unicode, and commands like
`p4 users` returns a string with non-ascii characters (eg. one of the
user's FullName has a french `é` in it), git-p4 was giving
`Exception: failure accessing depot: could not connect`.
With this patch, if such character is encountered, it will honor the new
`git-p4.textEncoding` config option, or silently replace the erronous
character and continue.
Signed-off-by: David Racine <bass_dr@hotmail.com>
---
git-p4: Support having non-utf-8 characters returned by p4
When perforce server is not configured for Unicode, and commands like p4
users returns a string with non-ascii characters (eg. one of the user's
FullName has a french é in it), git-p4 was giving Exception: failure
accessing depot: could not connect. With this patch, if such character
is encountered, it will honor the new git-p4.textEncoding config option,
or silently replace the erronous character and continue.
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-928%2Fbassdr%2Fpatch-1-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-928/bassdr/patch-1-v1
Pull-Request: https://github.com/git/git/pull/928
git-p4.py | 23 +++++++++++++++++------
1 file changed, 17 insertions(+), 6 deletions(-)
diff --git a/git-p4.py b/git-p4.py
index 6ae5bbfe99..6cbd153419 100755
--- a/git-p4.py
+++ b/git-p4.py
@@ -195,16 +195,27 @@ def decode_path(path):
"""Decode a given string (bytes or otherwise) using configured path encoding options
"""
encoding = gitConfig('git-p4.pathEncoding') or 'utf_8'
+ return p4_decode_stream(path, encoding)
+
+def p4_decode_text(user):
+ """Decode a given string (bytes or otherwise) using configured text encoding options
+ """
+ encoding = gitConfig('git-p4.textEncoding') or 'utf-8'
+ return p4_decode_stream(s, encoding)
+
+def p4_decode_stream(s, encoding):
+ """Decode a given string (bytes or otherwise) using encoding argument
+ """
if bytes is not str:
- return path.decode(encoding, errors='replace') if isinstance(path, bytes) else path
+ return s.decode(encoding, errors='replace') if isinstance(s, bytes) else s
else:
try:
- path.decode('ascii')
+ s.decode('ascii')
except:
- path = path.decode(encoding, errors='replace')
+ s = s.decode(encoding, errors='replace')
if verbose:
- print('Path with non-ASCII characters detected. Used {} to decode: {}'.format(encoding, path))
- return path
+ print('Text with non-ASCII characters detected. Used {} to decode: {}'.format(encoding, s))
+ return s
def run_git_hook(cmd, param=[]):
"""Execute a hook if the hook exists."""
@@ -771,7 +782,7 @@ def p4CmdList(cmd, stdin=None, stdin_mode='w+b', cb=None, skip_info=False,
for key, value in entry.items():
key = key.decode()
if isinstance(value, bytes) and not (key in ('data', 'path', 'clientFile') or key.startswith('depotFile')):
- value = value.decode()
+ value = p4_decode_text(value)
decoded_entry[key] = value
# Parse out data if it's an error response
if decoded_entry.get('code') == 'error' and 'data' in decoded_entry:
base-commit: 3a0b884caba2752da0af626fb2de7d597c844e8b
--
gitgitgadget
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2020-12-04 23:20 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-12-04 23:19 [PATCH] Support having non-utf-8 characters returned by p4 David Racine via GitGitGadget
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.