Some fixes for supporting python3

* Fix imports.
* Use python3 syntax.
* Wrap map() calls with list().
* Use list() only wherever needed.
  (Thanks Conley!)
* Fix dictionary iteration methods
  (s/iteritems/items/).
* Make use of sorted() in appropriate places
* Use iterators directly in the loop.
* Don't use .keys() wherever it isn't needed.
* Use sys.maxsize instead of sys.maxint

TODO:
* Make repo work fully with python3. :)

Some of this was done by the '2to3' tool [1], by
applying the needed fixes in a way that doesn't
break compatibility with python2.

Links:
[1]: http://docs.python.org/2/library/2to3.html

Change-Id: Ibdf3bf9a530d716db905733cb9bfef83a48820f7
Signed-off-by: Chirayu Desai <cdesai@cyanogenmod.org>
This commit is contained in:
Chirayu Desai
2013-03-01 19:14:38 +05:30
parent fef4ae74e2
commit 217ea7d274
14 changed files with 130 additions and 90 deletions

View File

@ -38,8 +38,8 @@ for py in os.listdir(my_dir):
try:
cmd = getattr(mod, clsn)()
except AttributeError:
raise SyntaxError, '%s/%s does not define class %s' % (
__name__, py, clsn)
raise SyntaxError('%s/%s does not define class %s' % (
__name__, py, clsn))
name = name.replace('_', '-')
cmd.NAME = name

View File

@ -98,14 +98,13 @@ is shown, then the branch appears in all projects.
project_cnt = len(projects)
for project in projects:
for name, b in project.GetBranches().iteritems():
for name, b in project.GetBranches().items():
b.project = project
if name not in all_branches:
all_branches[name] = BranchInfo(name)
all_branches[name].add(b)
names = all_branches.keys()
names.sort()
names = list(sorted(all_branches))
if not names:
print(' (no branches)', file=sys.stderr)

View File

@ -34,8 +34,7 @@ Displays detailed usage information about a command.
def _PrintAllCommands(self):
print('usage: repo COMMAND [ARGS]')
print('The complete list of recognized repo commands are:')
commandNames = self.commands.keys()
commandNames.sort()
commandNames = list(sorted(self.commands))
maxlen = 0
for name in commandNames:
@ -55,10 +54,9 @@ Displays detailed usage information about a command.
def _PrintCommonCommands(self):
print('usage: repo COMMAND [ARGS]')
print('The most commonly used repo commands are:')
commandNames = [name
for name in self.commands.keys()
if self.commands[name].common]
commandNames.sort()
commandNames = list(sorted([name
for name, command in self.commands.items()
if command.common]))
maxlen = 0
for name in commandNames:

View File

@ -163,7 +163,7 @@ class Info(PagedCommand):
all_branches = []
for project in self.GetProjects(args):
br = [project.GetUploadableBranch(x)
for x in project.GetBranches().keys()]
for x in project.GetBranches()]
br = [x for x in br if x]
if self.opt.current_branch:
br = [x for x in br if x.name == project.CurrentBranch]

View File

@ -42,7 +42,7 @@ are displayed.
all_branches = []
for project in self.GetProjects(args):
br = [project.GetUploadableBranch(x)
for x in project.GetBranches().keys()]
for x in project.GetBranches()]
br = [x for x in br if x]
if opt.current_branch:
br = [x for x in br if x.name == project.CurrentBranch]

View File

@ -21,10 +21,15 @@ except ImportError:
import dummy_threading as _threading
import glob
try:
# For python2
import StringIO as io
except ImportError:
# For python3
import io
import itertools
import os
import sys
import StringIO
from color import Coloring
@ -142,7 +147,7 @@ the following meanings:
for project in all_projects:
sem.acquire()
class BufList(StringIO.StringIO):
class BufList(io.StringIO):
def dump(self, ostream):
for entry in self.buflist:
ostream.write(entry)
@ -182,7 +187,7 @@ the following meanings:
try:
os.chdir(self.manifest.topdir)
outstring = StringIO.StringIO()
outstring = io.StringIO()
self._FindOrphans(glob.glob('.*') + \
glob.glob('*'), \
proj_dirs, proj_dirs_parents, outstring)

View File

@ -24,8 +24,24 @@ import socket
import subprocess
import sys
import time
import urlparse
import xmlrpclib
try:
# For python3
import urllib.parse
except ImportError:
# For python2
import imp
import urlparse
urllib = imp.new_module('urllib')
urllib.parse = urlparse
try:
# For python3
import xmlrpc.client
except ImportError:
# For python2
import imp
import xmlrpclib
xmlrpc = imp.new_module('xmlrpc')
xmlrpc.client = xmlrpclib
try:
import threading as _threading
@ -498,7 +514,7 @@ later is required to fix a server side protocol bug.
file=sys.stderr)
else:
try:
parse_result = urlparse.urlparse(manifest_server)
parse_result = urllib.parse(manifest_server)
if parse_result.hostname:
username, _account, password = \
info.authenticators(parse_result.hostname)
@ -516,7 +532,7 @@ later is required to fix a server side protocol bug.
1)
try:
server = xmlrpclib.Server(manifest_server)
server = xmlrpc.client.Server(manifest_server)
if opt.smart_sync:
p = self.manifest.manifestProject
b = p.GetBranch(p.CurrentBranch)
@ -525,8 +541,7 @@ later is required to fix a server side protocol bug.
branch = branch[len(R_HEADS):]
env = os.environ.copy()
if (env.has_key('TARGET_PRODUCT') and
env.has_key('TARGET_BUILD_VARIANT')):
if 'TARGET_PRODUCT' in env and 'TARGET_BUILD_VARIANT' in env:
target = '%s-%s' % (env['TARGET_PRODUCT'],
env['TARGET_BUILD_VARIANT'])
[success, manifest_str] = server.GetApprovedManifest(branch, target)
@ -554,11 +569,11 @@ later is required to fix a server side protocol bug.
else:
print('error: %s' % manifest_str, file=sys.stderr)
sys.exit(1)
except (socket.error, IOError, xmlrpclib.Fault) as e:
except (socket.error, IOError, xmlrpc.client.Fault) as e:
print('error: cannot connect to manifest server %s:\n%s'
% (self.manifest.manifest_server, e), file=sys.stderr)
sys.exit(1)
except xmlrpclib.ProtocolError as e:
except xmlrpc.client.ProtocolError as e:
print('error: cannot connect to manifest server %s:\n%d %s'
% (self.manifest.manifest_server, e.errcode, e.errmsg),
file=sys.stderr)

View File

@ -23,6 +23,11 @@ from editor import Editor
from error import HookError, UploadError
from project import RepoHook
try:
input = raw_input
except NameError:
pass
UNUSUAL_COMMIT_THRESHOLD = 5
def _ConfirmManyUploads(multiple_branches=False):
@ -33,7 +38,7 @@ def _ConfirmManyUploads(multiple_branches=False):
print('ATTENTION: You are uploading an unusually high number of commits.')
print('YOU PROBABLY DO NOT MEAN TO DO THIS. (Did you rebase across '
'branches?)')
answer = raw_input("If you are sure you intend to do this, type 'yes': ").strip()
answer = input("If you are sure you intend to do this, type 'yes': ").strip()
return answer == "yes"
def _die(fmt, *args):