Merge #11881: Remove Python2 support
1874058
Make base58 python contrib code work with python3 (Evan Klitzke)bc6fdf2
Change all python files to use Python3 (John Newbery) Pull request description: Following discussion here: https://github.com/bitcoin/bitcoin/pull/11843#issuecomment-351033742 It's easier for maintainers if all python tools/scripts support only a single version of Python. There are only a few scripts that aren't explicitly python3 at this point, so this PR changes those remaining scripts to explicitly require python3. Tree-SHA512: 5d38eef6e0fc7d8515e23a1f4c75e8b4160fd0fe23cba52a1f41689b114e54a9e503e0724829e8b41982ef98f2d113df80d9e238213b74f09ceaed0344a19e24
This commit is contained in:
commit
624bee9659
13 changed files with 80 additions and 87 deletions
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
# Copyright (c) 2015-2017 The Bitcoin Core developers
|
# Copyright (c) 2015-2017 The Bitcoin Core developers
|
||||||
# Distributed under the MIT software license, see the accompanying
|
# Distributed under the MIT software license, see the accompanying
|
||||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
@ -16,29 +16,29 @@ import sys
|
||||||
|
|
||||||
FOLDER_GREP = 'src'
|
FOLDER_GREP = 'src'
|
||||||
FOLDER_TEST = 'src/test/'
|
FOLDER_TEST = 'src/test/'
|
||||||
CMD_ROOT_DIR = '`git rev-parse --show-toplevel`/%s' % FOLDER_GREP
|
CMD_ROOT_DIR = '`git rev-parse --show-toplevel`/{}'.format(FOLDER_GREP)
|
||||||
CMD_GREP_ARGS = r"egrep -r -I '(map(Multi)?Args(\.count\(|\[)|Get(Bool)?Arg\()\"\-[^\"]+?\"' %s | grep -v '%s'" % (CMD_ROOT_DIR, FOLDER_TEST)
|
CMD_GREP_ARGS = r"egrep -r -I '(map(Multi)?Args(\.count\(|\[)|Get(Bool)?Arg\()\"\-[^\"]+?\"' {} | grep -v '{}'".format(CMD_ROOT_DIR, FOLDER_TEST)
|
||||||
CMD_GREP_DOCS = r"egrep -r -I 'HelpMessageOpt\(\"\-[^\"=]+?(=|\")' %s" % (CMD_ROOT_DIR)
|
CMD_GREP_DOCS = r"egrep -r -I 'HelpMessageOpt\(\"\-[^\"=]+?(=|\")' {}".format(CMD_ROOT_DIR)
|
||||||
REGEX_ARG = re.compile(r'(?:map(?:Multi)?Args(?:\.count\(|\[)|Get(?:Bool)?Arg\()\"(\-[^\"]+?)\"')
|
REGEX_ARG = re.compile(r'(?:map(?:Multi)?Args(?:\.count\(|\[)|Get(?:Bool)?Arg\()\"(\-[^\"]+?)\"')
|
||||||
REGEX_DOC = re.compile(r'HelpMessageOpt\(\"(\-[^\"=]+?)(?:=|\")')
|
REGEX_DOC = re.compile(r'HelpMessageOpt\(\"(\-[^\"=]+?)(?:=|\")')
|
||||||
# list unsupported, deprecated and duplicate args as they need no documentation
|
# list unsupported, deprecated and duplicate args as they need no documentation
|
||||||
SET_DOC_OPTIONAL = set(['-rpcssl', '-benchmark', '-h', '-help', '-socks', '-tor', '-debugnet', '-whitelistalwaysrelay', '-prematurewitness', '-walletprematurewitness', '-promiscuousmempoolflags', '-blockminsize', '-dbcrashratio', '-forcecompactdb', '-usehd'])
|
SET_DOC_OPTIONAL = set(['-rpcssl', '-benchmark', '-h', '-help', '-socks', '-tor', '-debugnet', '-whitelistalwaysrelay', '-prematurewitness', '-walletprematurewitness', '-promiscuousmempoolflags', '-blockminsize', '-dbcrashratio', '-forcecompactdb', '-usehd'])
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
used = check_output(CMD_GREP_ARGS, shell=True)
|
used = check_output(CMD_GREP_ARGS, shell=True, universal_newlines=True)
|
||||||
docd = check_output(CMD_GREP_DOCS, shell=True)
|
docd = check_output(CMD_GREP_DOCS, shell=True, universal_newlines=True)
|
||||||
|
|
||||||
args_used = set(re.findall(REGEX_ARG,used))
|
args_used = set(re.findall(REGEX_ARG,used))
|
||||||
args_docd = set(re.findall(REGEX_DOC,docd)).union(SET_DOC_OPTIONAL)
|
args_docd = set(re.findall(REGEX_DOC,docd)).union(SET_DOC_OPTIONAL)
|
||||||
args_need_doc = args_used.difference(args_docd)
|
args_need_doc = args_used.difference(args_docd)
|
||||||
args_unknown = args_docd.difference(args_used)
|
args_unknown = args_docd.difference(args_used)
|
||||||
|
|
||||||
print "Args used : %s" % len(args_used)
|
print("Args used : {}".format(len(args_used)))
|
||||||
print "Args documented : %s" % len(args_docd)
|
print("Args documented : {}".format(len(args_docd)))
|
||||||
print "Args undocumented: %s" % len(args_need_doc)
|
print("Args undocumented: {}".format(len(args_need_doc)))
|
||||||
print args_need_doc
|
print(args_need_doc)
|
||||||
print "Args unknown : %s" % len(args_unknown)
|
print("Args unknown : {}".format(len(args_unknown)))
|
||||||
print args_unknown
|
print(args_unknown)
|
||||||
|
|
||||||
sys.exit(len(args_need_doc))
|
sys.exit(len(args_need_doc))
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
#===- clang-format-diff.py - ClangFormat Diff Reformatter ----*- python -*--===#
|
#===- clang-format-diff.py - ClangFormat Diff Reformatter ----*- python -*--===#
|
||||||
#
|
#
|
||||||
|
@ -69,10 +69,10 @@ Example usage for git/svn users:
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
import difflib
|
import difflib
|
||||||
|
import io
|
||||||
import re
|
import re
|
||||||
import string
|
import string
|
||||||
import subprocess
|
import subprocess
|
||||||
import StringIO
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
@ -133,9 +133,9 @@ def main():
|
||||||
['-lines', str(start_line) + ':' + str(end_line)])
|
['-lines', str(start_line) + ':' + str(end_line)])
|
||||||
|
|
||||||
# Reformat files containing changes in place.
|
# Reformat files containing changes in place.
|
||||||
for filename, lines in lines_by_file.iteritems():
|
for filename, lines in lines_by_file.items():
|
||||||
if args.i and args.verbose:
|
if args.i and args.verbose:
|
||||||
print 'Formatting', filename
|
print('Formatting {}'.format(filename))
|
||||||
command = [binary, filename]
|
command = [binary, filename]
|
||||||
if args.i:
|
if args.i:
|
||||||
command.append('-i')
|
command.append('-i')
|
||||||
|
@ -143,8 +143,11 @@ def main():
|
||||||
command.append('-sort-includes')
|
command.append('-sort-includes')
|
||||||
command.extend(lines)
|
command.extend(lines)
|
||||||
command.extend(['-style=file', '-fallback-style=none'])
|
command.extend(['-style=file', '-fallback-style=none'])
|
||||||
p = subprocess.Popen(command, stdout=subprocess.PIPE,
|
p = subprocess.Popen(command,
|
||||||
stderr=None, stdin=subprocess.PIPE)
|
stdout=subprocess.PIPE,
|
||||||
|
stderr=None,
|
||||||
|
stdin=subprocess.PIPE,
|
||||||
|
universal_newlines=True)
|
||||||
stdout, stderr = p.communicate()
|
stdout, stderr = p.communicate()
|
||||||
if p.returncode != 0:
|
if p.returncode != 0:
|
||||||
sys.exit(p.returncode)
|
sys.exit(p.returncode)
|
||||||
|
@ -152,11 +155,11 @@ def main():
|
||||||
if not args.i:
|
if not args.i:
|
||||||
with open(filename) as f:
|
with open(filename) as f:
|
||||||
code = f.readlines()
|
code = f.readlines()
|
||||||
formatted_code = StringIO.StringIO(stdout).readlines()
|
formatted_code = io.StringIO(stdout).readlines()
|
||||||
diff = difflib.unified_diff(code, formatted_code,
|
diff = difflib.unified_diff(code, formatted_code,
|
||||||
filename, filename,
|
filename, filename,
|
||||||
'(before formatting)', '(after formatting)')
|
'(before formatting)', '(after formatting)')
|
||||||
diff_string = string.join(diff, '')
|
diff_string = ''.join(diff)
|
||||||
if len(diff_string) > 0:
|
if len(diff_string) > 0:
|
||||||
sys.stdout.write(diff_string)
|
sys.stdout.write(diff_string)
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
# Copyright (c) 2014-2017 The Bitcoin Core developers
|
# Copyright (c) 2014-2017 The Bitcoin Core developers
|
||||||
# Distributed under the MIT software license, see the accompanying
|
# Distributed under the MIT software license, see the accompanying
|
||||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
@ -10,7 +10,7 @@ import os
|
||||||
import sys
|
import sys
|
||||||
import subprocess
|
import subprocess
|
||||||
import hashlib
|
import hashlib
|
||||||
from PIL import Image
|
from PIL import Image # pip3 install Pillow
|
||||||
|
|
||||||
def file_hash(filename):
|
def file_hash(filename):
|
||||||
'''Return hash of raw file contents'''
|
'''Return hash of raw file contents'''
|
||||||
|
@ -27,7 +27,7 @@ def content_hash(filename):
|
||||||
pngcrush = 'pngcrush'
|
pngcrush = 'pngcrush'
|
||||||
git = 'git'
|
git = 'git'
|
||||||
folders = ["src/qt/res/movies", "src/qt/res/icons", "share/pixmaps"]
|
folders = ["src/qt/res/movies", "src/qt/res/icons", "share/pixmaps"]
|
||||||
basePath = subprocess.check_output([git, 'rev-parse', '--show-toplevel']).rstrip('\n')
|
basePath = subprocess.check_output([git, 'rev-parse', '--show-toplevel'], universal_newlines=True).rstrip('\n')
|
||||||
totalSaveBytes = 0
|
totalSaveBytes = 0
|
||||||
noHashChange = True
|
noHashChange = True
|
||||||
|
|
||||||
|
@ -37,42 +37,40 @@ for folder in folders:
|
||||||
for file in os.listdir(absFolder):
|
for file in os.listdir(absFolder):
|
||||||
extension = os.path.splitext(file)[1]
|
extension = os.path.splitext(file)[1]
|
||||||
if extension.lower() == '.png':
|
if extension.lower() == '.png':
|
||||||
print("optimizing "+file+"..."),
|
print("optimizing {}...".format(file), end =' ')
|
||||||
file_path = os.path.join(absFolder, file)
|
file_path = os.path.join(absFolder, file)
|
||||||
fileMetaMap = {'file' : file, 'osize': os.path.getsize(file_path), 'sha256Old' : file_hash(file_path)}
|
fileMetaMap = {'file' : file, 'osize': os.path.getsize(file_path), 'sha256Old' : file_hash(file_path)}
|
||||||
fileMetaMap['contentHashPre'] = content_hash(file_path)
|
fileMetaMap['contentHashPre'] = content_hash(file_path)
|
||||||
|
|
||||||
pngCrushOutput = ""
|
|
||||||
try:
|
try:
|
||||||
pngCrushOutput = subprocess.check_output(
|
subprocess.call([pngcrush, "-brute", "-ow", "-rem", "gAMA", "-rem", "cHRM", "-rem", "iCCP", "-rem", "sRGB", "-rem", "alla", "-rem", "text", file_path],
|
||||||
[pngcrush, "-brute", "-ow", "-rem", "gAMA", "-rem", "cHRM", "-rem", "iCCP", "-rem", "sRGB", "-rem", "alla", "-rem", "text", file_path],
|
stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
|
||||||
stderr=subprocess.STDOUT).rstrip('\n')
|
|
||||||
except:
|
except:
|
||||||
print "pngcrush is not installed, aborting..."
|
print("pngcrush is not installed, aborting...")
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
#verify
|
#verify
|
||||||
if "Not a PNG file" in subprocess.check_output([pngcrush, "-n", "-v", file_path], stderr=subprocess.STDOUT):
|
if "Not a PNG file" in subprocess.check_output([pngcrush, "-n", "-v", file_path], stderr=subprocess.STDOUT, universal_newlines=True):
|
||||||
print "PNG file "+file+" is corrupted after crushing, check out pngcursh version"
|
print("PNG file "+file+" is corrupted after crushing, check out pngcursh version")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
fileMetaMap['sha256New'] = file_hash(file_path)
|
fileMetaMap['sha256New'] = file_hash(file_path)
|
||||||
fileMetaMap['contentHashPost'] = content_hash(file_path)
|
fileMetaMap['contentHashPost'] = content_hash(file_path)
|
||||||
|
|
||||||
if fileMetaMap['contentHashPre'] != fileMetaMap['contentHashPost']:
|
if fileMetaMap['contentHashPre'] != fileMetaMap['contentHashPost']:
|
||||||
print "Image contents of PNG file "+file+" before and after crushing don't match"
|
print("Image contents of PNG file {} before and after crushing don't match".format(file))
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
fileMetaMap['psize'] = os.path.getsize(file_path)
|
fileMetaMap['psize'] = os.path.getsize(file_path)
|
||||||
outputArray.append(fileMetaMap)
|
outputArray.append(fileMetaMap)
|
||||||
print("done\n"),
|
print("done")
|
||||||
|
|
||||||
print "summary:\n+++++++++++++++++"
|
print("summary:\n+++++++++++++++++")
|
||||||
for fileDict in outputArray:
|
for fileDict in outputArray:
|
||||||
oldHash = fileDict['sha256Old']
|
oldHash = fileDict['sha256Old']
|
||||||
newHash = fileDict['sha256New']
|
newHash = fileDict['sha256New']
|
||||||
totalSaveBytes += fileDict['osize'] - fileDict['psize']
|
totalSaveBytes += fileDict['osize'] - fileDict['psize']
|
||||||
noHashChange = noHashChange and (oldHash == newHash)
|
noHashChange = noHashChange and (oldHash == newHash)
|
||||||
print fileDict['file']+"\n size diff from: "+str(fileDict['osize'])+" to: "+str(fileDict['psize'])+"\n old sha256: "+oldHash+"\n new sha256: "+newHash+"\n"
|
print(fileDict['file']+"\n size diff from: "+str(fileDict['osize'])+" to: "+str(fileDict['psize'])+"\n old sha256: "+oldHash+"\n new sha256: "+newHash+"\n")
|
||||||
|
|
||||||
print "completed. Checksum stable: "+str(noHashChange)+". Total reduction: "+str(totalSaveBytes)+" bytes"
|
print("completed. Checksum stable: "+str(noHashChange)+". Total reduction: "+str(totalSaveBytes)+" bytes")
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
# Copyright (c) 2015-2017 The Bitcoin Core developers
|
# Copyright (c) 2015-2017 The Bitcoin Core developers
|
||||||
# Distributed under the MIT software license, see the accompanying
|
# Distributed under the MIT software license, see the accompanying
|
||||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
@ -8,7 +8,6 @@ Exit status will be 0 if successful, and the program will be silent.
|
||||||
Otherwise the exit status will be 1 and it will log which executables failed which checks.
|
Otherwise the exit status will be 1 and it will log which executables failed which checks.
|
||||||
Needs `readelf` (for ELF) and `objdump` (for PE).
|
Needs `readelf` (for ELF) and `objdump` (for PE).
|
||||||
'''
|
'''
|
||||||
from __future__ import division,print_function,unicode_literals
|
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
# Copyright (c) 2014 Wladimir J. van der Laan
|
# Copyright (c) 2014 Wladimir J. van der Laan
|
||||||
# Distributed under the MIT software license, see the accompanying
|
# Distributed under the MIT software license, see the accompanying
|
||||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
@ -11,7 +11,6 @@ Example usage:
|
||||||
|
|
||||||
find ../gitian-builder/build -type f -executable | xargs python contrib/devtools/symbol-check.py
|
find ../gitian-builder/build -type f -executable | xargs python contrib/devtools/symbol-check.py
|
||||||
'''
|
'''
|
||||||
from __future__ import division, print_function, unicode_literals
|
|
||||||
import subprocess
|
import subprocess
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
# Copyright (c) 2014 Wladimir J. van der Laan
|
# Copyright (c) 2014 Wladimir J. van der Laan
|
||||||
# Distributed under the MIT software license, see the accompanying
|
# Distributed under the MIT software license, see the accompanying
|
||||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
@ -15,7 +15,6 @@ It will do the following automatically:
|
||||||
TODO:
|
TODO:
|
||||||
- auto-add new translations to the build system according to the translation process
|
- auto-add new translations to the build system according to the translation process
|
||||||
'''
|
'''
|
||||||
from __future__ import division, print_function
|
|
||||||
import subprocess
|
import subprocess
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
# Copyright (c) 2013-2016 The Bitcoin Core developers
|
# Copyright (c) 2013-2016 The Bitcoin Core developers
|
||||||
# Distributed under the MIT software license, see the accompanying
|
# Distributed under the MIT software license, see the accompanying
|
||||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
from __future__ import division,print_function,unicode_literals
|
|
||||||
import biplist
|
import biplist
|
||||||
from ds_store import DSStore
|
from ds_store import DSStore
|
||||||
from mac_alias import Alias
|
from mac_alias import Alias
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
from __future__ import division, print_function, unicode_literals
|
|
||||||
#
|
#
|
||||||
# Copyright (C) 2011 Patrick "p2k" Schneider <me@p2k-network.org>
|
# Copyright (C) 2011 Patrick "p2k" Schneider <me@p2k-network.org>
|
||||||
#
|
#
|
||||||
|
@ -203,7 +202,7 @@ def getFrameworks(binaryPath, verbose):
|
||||||
if verbose >= 3:
|
if verbose >= 3:
|
||||||
print("Inspecting with otool: " + binaryPath)
|
print("Inspecting with otool: " + binaryPath)
|
||||||
otoolbin=os.getenv("OTOOL", "otool")
|
otoolbin=os.getenv("OTOOL", "otool")
|
||||||
otool = subprocess.Popen([otoolbin, "-L", binaryPath], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
otool = subprocess.Popen([otoolbin, "-L", binaryPath], stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
|
||||||
o_stdout, o_stderr = otool.communicate()
|
o_stdout, o_stderr = otool.communicate()
|
||||||
if otool.returncode != 0:
|
if otool.returncode != 0:
|
||||||
if verbose >= 1:
|
if verbose >= 1:
|
||||||
|
@ -211,7 +210,7 @@ def getFrameworks(binaryPath, verbose):
|
||||||
sys.stderr.flush()
|
sys.stderr.flush()
|
||||||
raise RuntimeError("otool failed with return code %d" % otool.returncode)
|
raise RuntimeError("otool failed with return code %d" % otool.returncode)
|
||||||
|
|
||||||
otoolLines = o_stdout.decode().split("\n")
|
otoolLines = o_stdout.split("\n")
|
||||||
otoolLines.pop(0) # First line is the inspected binary
|
otoolLines.pop(0) # First line is the inspected binary
|
||||||
if ".framework" in binaryPath or binaryPath.endswith(".dylib"):
|
if ".framework" in binaryPath or binaryPath.endswith(".dylib"):
|
||||||
otoolLines.pop(0) # Frameworks and dylibs list themselves as a dependency.
|
otoolLines.pop(0) # Frameworks and dylibs list themselves as a dependency.
|
||||||
|
@ -714,22 +713,6 @@ elif config.sign:
|
||||||
|
|
||||||
if config.dmg is not None:
|
if config.dmg is not None:
|
||||||
|
|
||||||
#Patch in check_output for Python 2.6
|
|
||||||
if "check_output" not in dir( subprocess ):
|
|
||||||
def f(*popenargs, **kwargs):
|
|
||||||
if 'stdout' in kwargs:
|
|
||||||
raise ValueError('stdout argument not allowed, it will be overridden.')
|
|
||||||
process = subprocess.Popen(stdout=subprocess.PIPE, *popenargs, **kwargs)
|
|
||||||
output, unused_err = process.communicate()
|
|
||||||
retcode = process.poll()
|
|
||||||
if retcode:
|
|
||||||
cmd = kwargs.get("args")
|
|
||||||
if cmd is None:
|
|
||||||
cmd = popenargs[0]
|
|
||||||
raise CalledProcessError(retcode, cmd)
|
|
||||||
return output
|
|
||||||
subprocess.check_output = f
|
|
||||||
|
|
||||||
def runHDIUtil(verb, image_basename, **kwargs):
|
def runHDIUtil(verb, image_basename, **kwargs):
|
||||||
hdiutil_args = ["hdiutil", verb, image_basename + ".dmg"]
|
hdiutil_args = ["hdiutil", verb, image_basename + ".dmg"]
|
||||||
if "capture_stdout" in kwargs:
|
if "capture_stdout" in kwargs:
|
||||||
|
@ -747,7 +730,7 @@ if config.dmg is not None:
|
||||||
if not value is True:
|
if not value is True:
|
||||||
hdiutil_args.append(str(value))
|
hdiutil_args.append(str(value))
|
||||||
|
|
||||||
return run(hdiutil_args)
|
return run(hdiutil_args, universal_newlines=True)
|
||||||
|
|
||||||
if verbose >= 2:
|
if verbose >= 2:
|
||||||
if fancy is None:
|
if fancy is None:
|
||||||
|
@ -789,7 +772,7 @@ if config.dmg is not None:
|
||||||
except subprocess.CalledProcessError as e:
|
except subprocess.CalledProcessError as e:
|
||||||
sys.exit(e.returncode)
|
sys.exit(e.returncode)
|
||||||
|
|
||||||
m = re.search("/Volumes/(.+$)", output.decode())
|
m = re.search("/Volumes/(.+$)", output)
|
||||||
disk_root = m.group(0)
|
disk_root = m.group(0)
|
||||||
disk_name = m.group(1)
|
disk_name = m.group(1)
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,9 @@ def b58encode(v):
|
||||||
"""
|
"""
|
||||||
long_value = 0
|
long_value = 0
|
||||||
for (i, c) in enumerate(v[::-1]):
|
for (i, c) in enumerate(v[::-1]):
|
||||||
long_value += (256**i) * ord(c)
|
if isinstance(c, str):
|
||||||
|
c = ord(c)
|
||||||
|
long_value += (256**i) * c
|
||||||
|
|
||||||
result = ''
|
result = ''
|
||||||
while long_value >= __b58base:
|
while long_value >= __b58base:
|
||||||
|
@ -41,7 +43,7 @@ def b58encode(v):
|
||||||
# leading 0-bytes in the input become leading-1s
|
# leading 0-bytes in the input become leading-1s
|
||||||
nPad = 0
|
nPad = 0
|
||||||
for c in v:
|
for c in v:
|
||||||
if c == '\0': nPad += 1
|
if c == 0: nPad += 1
|
||||||
else: break
|
else: break
|
||||||
|
|
||||||
return (__b58chars[0]*nPad) + result
|
return (__b58chars[0]*nPad) + result
|
||||||
|
@ -50,8 +52,10 @@ def b58decode(v, length = None):
|
||||||
""" decode v into a string of len bytes
|
""" decode v into a string of len bytes
|
||||||
"""
|
"""
|
||||||
long_value = 0
|
long_value = 0
|
||||||
for (i, c) in enumerate(v[::-1]):
|
for i, c in enumerate(v[::-1]):
|
||||||
long_value += __b58chars.find(c) * (__b58base**i)
|
pos = __b58chars.find(c)
|
||||||
|
assert pos != -1
|
||||||
|
long_value += pos * (__b58base**i)
|
||||||
|
|
||||||
result = bytes()
|
result = bytes()
|
||||||
while long_value >= 256:
|
while long_value >= 256:
|
||||||
|
@ -62,10 +66,12 @@ def b58decode(v, length = None):
|
||||||
|
|
||||||
nPad = 0
|
nPad = 0
|
||||||
for c in v:
|
for c in v:
|
||||||
if c == __b58chars[0]: nPad += 1
|
if c == __b58chars[0]:
|
||||||
else: break
|
nPad += 1
|
||||||
|
continue
|
||||||
|
break
|
||||||
|
|
||||||
result = chr(0)*nPad + result
|
result = bytes(nPad) + result
|
||||||
if length is not None and len(result) != length:
|
if length is not None and len(result) != length:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
# Copyright (c) 2012-2017 The Bitcoin Core developers
|
# Copyright (c) 2012-2017 The Bitcoin Core developers
|
||||||
# Distributed under the MIT software license, see the accompanying
|
# Distributed under the MIT software license, see the accompanying
|
||||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
'''
|
'''
|
||||||
Generate valid and invalid base58 address and private key test vectors.
|
Generate valid and invalid base58 address and private key test vectors.
|
||||||
|
|
||||||
Usage:
|
Usage:
|
||||||
gen_base58_test_vectors.py valid 50 > ../../src/test/data/base58_keys_valid.json
|
gen_base58_test_vectors.py valid 50 > ../../src/test/data/base58_keys_valid.json
|
||||||
gen_base58_test_vectors.py invalid 50 > ../../src/test/data/base58_keys_invalid.json
|
gen_base58_test_vectors.py invalid 50 > ../../src/test/data/base58_keys_invalid.json
|
||||||
'''
|
'''
|
||||||
|
@ -46,8 +46,8 @@ def is_valid(v):
|
||||||
if result is None:
|
if result is None:
|
||||||
return False
|
return False
|
||||||
for template in templates:
|
for template in templates:
|
||||||
prefix = str(bytearray(template[0]))
|
prefix = bytearray(template[0])
|
||||||
suffix = str(bytearray(template[2]))
|
suffix = bytearray(template[2])
|
||||||
if result.startswith(prefix) and result.endswith(suffix):
|
if result.startswith(prefix) and result.endswith(suffix):
|
||||||
if (len(result) - len(prefix) - len(suffix)) == template[1]:
|
if (len(result) - len(prefix) - len(suffix)) == template[1]:
|
||||||
return True
|
return True
|
||||||
|
@ -57,20 +57,23 @@ def gen_valid_vectors():
|
||||||
'''Generate valid test vectors'''
|
'''Generate valid test vectors'''
|
||||||
while True:
|
while True:
|
||||||
for template in templates:
|
for template in templates:
|
||||||
prefix = str(bytearray(template[0]))
|
prefix = bytearray(template[0])
|
||||||
payload = os.urandom(template[1])
|
payload = bytearray(os.urandom(template[1]))
|
||||||
suffix = str(bytearray(template[2]))
|
suffix = bytearray(template[2])
|
||||||
rv = b58encode_chk(prefix + payload + suffix)
|
rv = b58encode_chk(prefix + payload + suffix)
|
||||||
assert is_valid(rv)
|
assert is_valid(rv)
|
||||||
metadata = dict([(x,y) for (x,y) in zip(metadata_keys,template[3]) if y is not None])
|
metadata = {x: y for x, y in zip(metadata_keys,template[3]) if y is not None}
|
||||||
yield (rv, b2a_hex(payload), metadata)
|
hexrepr = b2a_hex(payload)
|
||||||
|
if isinstance(hexrepr, bytes):
|
||||||
|
hexrepr = hexrepr.decode('utf8')
|
||||||
|
yield (rv, hexrepr, metadata)
|
||||||
|
|
||||||
def gen_invalid_vector(template, corrupt_prefix, randomize_payload_size, corrupt_suffix):
|
def gen_invalid_vector(template, corrupt_prefix, randomize_payload_size, corrupt_suffix):
|
||||||
'''Generate possibly invalid vector'''
|
'''Generate possibly invalid vector'''
|
||||||
if corrupt_prefix:
|
if corrupt_prefix:
|
||||||
prefix = os.urandom(1)
|
prefix = os.urandom(1)
|
||||||
else:
|
else:
|
||||||
prefix = str(bytearray(template[0]))
|
prefix = bytearray(template[0])
|
||||||
|
|
||||||
if randomize_payload_size:
|
if randomize_payload_size:
|
||||||
payload = os.urandom(max(int(random.expovariate(0.5)), 50))
|
payload = os.urandom(max(int(random.expovariate(0.5)), 50))
|
||||||
|
@ -80,7 +83,7 @@ def gen_invalid_vector(template, corrupt_prefix, randomize_payload_size, corrupt
|
||||||
if corrupt_suffix:
|
if corrupt_suffix:
|
||||||
suffix = os.urandom(len(template[2]))
|
suffix = os.urandom(len(template[2]))
|
||||||
else:
|
else:
|
||||||
suffix = str(bytearray(template[2]))
|
suffix = bytearray(template[2])
|
||||||
|
|
||||||
return b58encode_chk(prefix + payload + suffix)
|
return b58encode_chk(prefix + payload + suffix)
|
||||||
|
|
||||||
|
|
|
@ -117,6 +117,11 @@ deprecated in V0.15.1, and has now been removed. Miners should use the
|
||||||
`-blockmaxweight` option if they want to limit the weight of their blocks'
|
`-blockmaxweight` option if they want to limit the weight of their blocks'
|
||||||
weights.
|
weights.
|
||||||
|
|
||||||
|
Python Support
|
||||||
|
--------------
|
||||||
|
|
||||||
|
Support for Python 2 has been discontinued for all test files and tools.
|
||||||
|
|
||||||
Credits
|
Credits
|
||||||
=======
|
=======
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
# Copyright (c) 2012-2017 The Bitcoin Core developers
|
# Copyright (c) 2012-2017 The Bitcoin Core developers
|
||||||
# Distributed under the MIT software license, see the accompanying
|
# Distributed under the MIT software license, see the accompanying
|
||||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
@ -6,7 +6,6 @@
|
||||||
Extract _("...") strings for translation and convert to Qt stringdefs so that
|
Extract _("...") strings for translation and convert to Qt stringdefs so that
|
||||||
they can be picked up by Qt linguist.
|
they can be picked up by Qt linguist.
|
||||||
'''
|
'''
|
||||||
from __future__ import division,print_function,unicode_literals
|
|
||||||
from subprocess import Popen, PIPE
|
from subprocess import Popen, PIPE
|
||||||
import operator
|
import operator
|
||||||
import os
|
import os
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
# Copyright (c) 2015-2017 The Bitcoin Core developers
|
# Copyright (c) 2015-2017 The Bitcoin Core developers
|
||||||
# Distributed under the MIT software license, see the accompanying
|
# Distributed under the MIT software license, see the accompanying
|
||||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
Loading…
Reference in a new issue