devtools: make github-merge.py use py3

This makes github-merge.py the first developer tool to go
all Python 3 (for context see #7717).

The changes are straightforward as the script already was
`from __future__ import division,print_function,unicode_literals`.

However urllib2 changed name, and json will only accept unicode data not
bytes.

This retains py2 compatibility for now: not strictly necessary
as it's not used by the build system - but it was easy.
This commit is contained in:
Wladimir J. van der Laan 2016-03-23 11:55:46 +01:00
parent 490064111f
commit f11c5a3cbd

View File

@ -1,4 +1,4 @@
#!/usr/bin/env python2 #!/usr/bin/env python3
# Copyright (c) 2016 Bitcoin Core Developers # Copyright (c) 2016 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.
@ -19,6 +19,11 @@ import os,sys
from sys import stdin,stdout,stderr from sys import stdin,stdout,stderr
import argparse import argparse
import subprocess import subprocess
import json,codecs
try:
from urllib.request import Request,urlopen
except:
from urllib2 import Request,urlopen
# External tools (can be overridden using environment) # External tools (can be overridden using environment)
GIT = os.getenv('GIT','git') GIT = os.getenv('GIT','git')
@ -38,7 +43,7 @@ def git_config_get(option, default=None):
Get named configuration option from git repository. Get named configuration option from git repository.
''' '''
try: try:
return subprocess.check_output([GIT,'config','--get',option]).rstrip() return subprocess.check_output([GIT,'config','--get',option]).rstrip().decode('utf-8')
except subprocess.CalledProcessError as e: except subprocess.CalledProcessError as e:
return default return default
@ -47,18 +52,19 @@ def retrieve_pr_title(repo,pull):
Retrieve pull request title from github. Retrieve pull request title from github.
Return None if no title can be found, or an error happens. Return None if no title can be found, or an error happens.
''' '''
import urllib2,json
try: try:
req = urllib2.Request("https://api.github.com/repos/"+repo+"/pulls/"+pull) req = Request("https://api.github.com/repos/"+repo+"/pulls/"+pull)
result = urllib2.urlopen(req) result = urlopen(req)
result = json.load(result) reader = codecs.getreader('utf-8')
return result['title'] obj = json.load(reader(result))
return obj['title']
except Exception as e: except Exception as e:
print('Warning: unable to retrieve pull title from github: %s' % e) print('Warning: unable to retrieve pull title from github: %s' % e)
return None return None
def ask_prompt(text): def ask_prompt(text):
print(text,end=" ",file=stderr) print(text,end=" ",file=stderr)
stderr.flush()
reply = stdin.readline().rstrip() reply = stdin.readline().rstrip()
print("",file=stderr) print("",file=stderr)
return reply return reply