patcher: Add Python 3 support (see issue #2856)

This commit is contained in:
Marshall Greenblatt 2020-01-09 16:42:00 +02:00
parent 503ec7c2e6
commit 16e8710a81
4 changed files with 25 additions and 12 deletions

View File

@ -2,6 +2,7 @@
# reserved. Use of this source code is governed by a BSD-style license that
# can be found in the LICENSE file
from __future__ import absolute_import
from subprocess import Popen, PIPE
import sys
@ -32,8 +33,9 @@ def exec_cmd(cmd, path, input_string=None):
shell=(sys.platform == 'win32'))
out, err = process.communicate(input=input_string)
ret = process.returncode
except IOError, (errno, strerror):
except IOError as e:
(errno, strerror) = e.args
raise
except:
raise
return {'out': out, 'err': err, 'ret': ret}
return {'out': out.decode(), 'err': err.decode(), 'ret': ret}

View File

@ -2,6 +2,7 @@
# reserved. Use of this source code is governed by a BSD-style license that
# can be found in the LICENSE file.
from __future__ import absolute_import
from glob import iglob
import os
import shutil
@ -19,7 +20,8 @@ def read_file(name, normalize=True):
# normalize line endings
data = data.replace("\r\n", "\n")
return data
except IOError, (errno, strerror):
except IOError as e:
(errno, strerror) = e.args
sys.stderr.write('Failed to read file ' + name + ': ' + strerror)
raise
else:
@ -32,7 +34,8 @@ def write_file(name, data):
f = open(name, 'w')
# write the data
f.write(data)
except IOError, (errno, strerror):
except IOError as e:
(errno, strerror) = e.args
sys.stderr.write('Failed to write file ' + name + ': ' + strerror)
raise
else:
@ -55,7 +58,8 @@ def copy_file(src, dst, quiet=True):
shutil.copy2(src, dst)
if not quiet:
sys.stdout.write('Transferring ' + src + ' file.\n')
except IOError, (errno, strerror):
except IOError as e:
(errno, strerror) = e.args
sys.stderr.write('Failed to copy file from ' + src + ' to ' + dst + ': ' +
strerror)
raise
@ -67,7 +71,8 @@ def move_file(src, dst, quiet=True):
shutil.move(src, dst)
if not quiet:
sys.stdout.write('Moving ' + src + ' file.\n')
except IOError, (errno, strerror):
except IOError as e:
(errno, strerror) = e.args
sys.stderr.write('Failed to move file from ' + src + ' to ' + dst + ': ' +
strerror)
raise
@ -90,7 +95,8 @@ def remove_file(name, quiet=True):
os.remove(name)
if not quiet:
sys.stdout.write('Removing ' + name + ' file.\n')
except IOError, (errno, strerror):
except IOError as e:
(errno, strerror) = e.args
sys.stderr.write('Failed to remove file ' + name + ': ' + strerror)
raise
@ -102,7 +108,8 @@ def copy_dir(src, dst, quiet=True):
shutil.copytree(src, dst)
if not quiet:
sys.stdout.write('Transferring ' + src + ' directory.\n')
except IOError, (errno, strerror):
except IOError as e:
(errno, strerror) = e.args
sys.stderr.write('Failed to copy directory from ' + src + ' to ' + dst +
': ' + strerror)
raise
@ -115,7 +122,8 @@ def remove_dir(name, quiet=True):
shutil.rmtree(name)
if not quiet:
sys.stdout.write('Removing ' + name + ' directory.\n')
except IOError, (errno, strerror):
except IOError as e:
(errno, strerror) = e.args
sys.stderr.write('Failed to remove directory ' + name + ': ' + strerror)
raise
@ -127,7 +135,8 @@ def make_dir(name, quiet=True):
if not quiet:
sys.stdout.write('Creating ' + name + ' directory.\n')
os.makedirs(name)
except IOError, (errno, strerror):
except IOError as e:
(errno, strerror) = e.args
sys.stderr.write('Failed to create directory ' + name + ': ' + strerror)
raise

View File

@ -2,6 +2,7 @@
# reserved. Use of this source code is governed by a BSD-style license that
# can be found in the LICENSE file
from __future__ import absolute_import
from exec_util import exec_cmd
import os
import sys
@ -130,7 +131,7 @@ def git_apply_patch_file(patch_path, patch_dir):
if sys.platform == 'win32':
# Convert the patch to Unix line endings. This is necessary to avoid
# whitespace errors with git apply.
patch_string = patch_string.replace('\r\n', '\n')
patch_string = patch_string.replace(b'\r\n', b'\n')
# Git apply fails silently if not run relative to a respository root.
if not is_checkout(patch_dir):

View File

@ -2,6 +2,7 @@
# reserved. Use of this source code is governed by a BSD-style license that
# can be found in the LICENSE file.
from __future__ import absolute_import
import pickle
from optparse import OptionParser
import os
@ -54,7 +55,7 @@ def apply_patch_config():
# Parse the configuration file.
scope = {}
execfile(config_file, scope)
exec (compile(open(config_file, "rb").read(), config_file, 'exec'), scope)
patches = scope["patches"]
results = {'apply': 0, 'skip': 0, 'fail': 0}