From 56ce3468b4f2faa1cccfea01dc91e7db73fb3843 Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Wed, 4 Dec 2019 19:30:48 -0500 Subject: assume environment always accepts strings Different Python & OS versions have different environ behavior wrt accepted types & encoding. Since we're migrating to be Python 3 only, lets change our code to assume strings always work as that's what the newer Python 3 does. This will fail under Python 2 for some env vars, mostly on Windows, but the effort of maintaining shim layers that can handle these edge cases isn't worth it when we're dropping that code. We leave the logic in the `repo` launcher for now as it is simple, and we want it to be able to switch versions a bit longer than the rest of the tree. Here's the support table: | *NIX | Windows | Python 2 | ASCII string | str or bytes, not unicode | Python 3 | str or bytes | str only | Windows uses strings natively in its environment all the time. But it doesn't allow unicode strings under Python 2, so we have to encode. Python 2 on *NIX is funky in that it always lowers to ASCII, so we had to manually encode to avoid errors regardless of unicode or str. Python 3 on Windows & *NIX will accept strings. *NIX will also accept bytes but Windows will not. Bug: https://crbug.com/gerrit/12145 Change-Id: I3cf8f95a06902754ea1f08ad4b28503f7063531b Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/248972 Tested-by: Mike Frysinger Reviewed-by: Michael Mortensen Reviewed-by: Mike Frysinger --- git_command.py | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) (limited to 'git_command.py') diff --git a/git_command.py b/git_command.py index 26668a39..a2782151 100644 --- a/git_command.py +++ b/git_command.py @@ -214,10 +214,6 @@ def git_require(min_version, fail=False, msg=''): return False -def _setenv(env, name, value): - env[name] = value.encode() - - class GitCommand(object): def __init__(self, project, @@ -237,21 +233,21 @@ class GitCommand(object): self.tee = {'stdout': not capture_stdout, 'stderr': not capture_stderr} if disable_editor: - _setenv(env, 'GIT_EDITOR', ':') + env['GIT_EDITOR'] = ':' if ssh_proxy: - _setenv(env, 'REPO_SSH_SOCK', ssh_sock()) - _setenv(env, 'GIT_SSH', _ssh_proxy()) - _setenv(env, 'GIT_SSH_VARIANT', 'ssh') + env['REPO_SSH_SOCK'] = ssh_sock() + env['GIT_SSH'] = _ssh_proxy() + env['GIT_SSH_VARIANT'] = 'ssh' if 'http_proxy' in env and 'darwin' == sys.platform: s = "'http.proxy=%s'" % (env['http_proxy'],) p = env.get('GIT_CONFIG_PARAMETERS') if p is not None: s = p + ' ' + s - _setenv(env, 'GIT_CONFIG_PARAMETERS', s) + env['GIT_CONFIG_PARAMETERS'] = s if 'GIT_ALLOW_PROTOCOL' not in env: - _setenv(env, 'GIT_ALLOW_PROTOCOL', - 'file:git:http:https:ssh:persistent-http:persistent-https:sso:rpc') - _setenv(env, 'GIT_HTTP_USER_AGENT', user_agent.git) + env['GIT_ALLOW_PROTOCOL'] = ( + 'file:git:http:https:ssh:persistent-http:persistent-https:sso:rpc') + env['GIT_HTTP_USER_AGENT'] = user_agent.git if project: if not cwd: @@ -262,7 +258,7 @@ class GitCommand(object): command = [GIT] if bare: if gitdir: - _setenv(env, GIT_DIR, gitdir) + env[GIT_DIR] = gitdir cwd = None command.append(cmdv[0]) # Need to use the --progress flag for fetch/clone so output will be -- cgit v1.2.3-54-g00ecf