Commit 352808fa authored by Edward Lemur's avatar Edward Lemur Committed by Commit Bot

git-number: Make tests run on Python 3.

Bug: 1009809
Change-Id: I044f10a7a04f4837cba6e17d8f3053471cd7a643
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/1841875
Auto-Submit: Edward Lesmes <ehmaldonado@chromium.org>
Reviewed-by: 's avatarAnthony Polito <apolito@google.com>
Commit-Queue: Edward Lesmes <ehmaldonado@chromium.org>
parent 1458d572
#!/usr/bin/env python #!/usr/bin/env vpython3
# Copyright 2013 The Chromium Authors. All rights reserved. # Copyright 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be # Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file. # found in the LICENSE file.
...@@ -22,6 +22,7 @@ repo that it operates on in the ref 'refs/number/commits'. ...@@ -22,6 +22,7 @@ repo that it operates on in the ref 'refs/number/commits'.
""" """
from __future__ import print_function from __future__ import print_function
from __future__ import division
import binascii import binascii
import collections import collections
...@@ -59,7 +60,10 @@ def pathlify(hash_prefix): ...@@ -59,7 +60,10 @@ def pathlify(hash_prefix):
>>> pathlify('\xDE\xAD') >>> pathlify('\xDE\xAD')
'de/ad' 'de/ad'
""" """
return '/'.join('%02x' % ord(b) for b in hash_prefix) if sys.version_info.major == 3:
return '/'.join('%02x' % b for b in hash_prefix)
else:
return '/'.join('%02x' % ord(b) for b in hash_prefix)
@git.memoize_one(threadsafe=False) @git.memoize_one(threadsafe=False)
...@@ -75,10 +79,9 @@ def get_number_tree(prefix_bytes): ...@@ -75,10 +79,9 @@ def get_number_tree(prefix_bytes):
ref = '%s:%s' % (REF, pathlify(prefix_bytes)) ref = '%s:%s' % (REF, pathlify(prefix_bytes))
try: try:
raw = buffer( raw = git.run('cat-file', 'blob', ref, autostrip=False, decode=False)
git.run('cat-file', 'blob', ref, autostrip=False, decode=False))
return dict(struct.unpack_from(CHUNK_FMT, raw, i * CHUNK_SIZE) return dict(struct.unpack_from(CHUNK_FMT, raw, i * CHUNK_SIZE)
for i in xrange(len(raw) / CHUNK_SIZE)) for i in range(len(raw) // CHUNK_SIZE))
except subprocess2.CalledProcessError: except subprocess2.CalledProcessError:
return {} return {}
...@@ -112,14 +115,15 @@ def intern_number_tree(tree): ...@@ -112,14 +115,15 @@ def intern_number_tree(tree):
'c552317aa95ca8c3f6aae3357a4be299fbcb25ce' 'c552317aa95ca8c3f6aae3357a4be299fbcb25ce'
""" """
with tempfile.TemporaryFile() as f: with tempfile.TemporaryFile() as f:
for k, v in sorted(tree.iteritems()): for k, v in sorted(tree.items()):
f.write(struct.pack(CHUNK_FMT, k, v)) f.write(struct.pack(CHUNK_FMT, k, v))
f.seek(0) f.seek(0)
return git.intern_f(f) return git.intern_f(f)
def leaf_map_fn((pre, tree)): def leaf_map_fn(pre_tree):
"""Converts a prefix and number tree into a git index line.""" """Converts a prefix and number tree into a git index line."""
pre, tree = pre_tree
return '100644 blob %s\t%s\0' % (intern_number_tree(tree), pathlify(pre)) return '100644 blob %s\t%s\0' % (intern_number_tree(tree), pathlify(pre))
...@@ -134,7 +138,7 @@ def finalize(targets): ...@@ -134,7 +138,7 @@ def finalize(targets):
if not DIRTY_TREES: if not DIRTY_TREES:
return return
msg = 'git-number Added %s numbers' % sum(DIRTY_TREES.itervalues()) msg = 'git-number Added %s numbers' % sum(DIRTY_TREES.values())
idx = os.path.join(git.run('rev-parse', '--git-dir'), 'number.idx') idx = os.path.join(git.run('rev-parse', '--git-dir'), 'number.idx')
env = os.environ.copy() env = os.environ.copy()
...@@ -150,7 +154,7 @@ def finalize(targets): ...@@ -150,7 +154,7 @@ def finalize(targets):
with git.ScopedPool(kind=POOL_KIND) as leaf_pool: with git.ScopedPool(kind=POOL_KIND) as leaf_pool:
for item in leaf_pool.imap(leaf_map_fn, prefixes_trees): for item in leaf_pool.imap(leaf_map_fn, prefixes_trees):
updater.stdin.write(item) updater.stdin.write(item.encode())
inc() inc()
updater.stdin.close() updater.stdin.close()
...@@ -167,7 +171,7 @@ def finalize(targets): ...@@ -167,7 +171,7 @@ def finalize(targets):
'-m', msg, '-m', msg,
'-p'] + git.hash_multi(REF) '-p'] + git.hash_multi(REF)
for t in targets: for t in targets:
commit_cmd.extend(['-p', binascii.hexlify(t)]) commit_cmd.extend(['-p', binascii.hexlify(t).decode()])
commit_cmd.append(tree_id) commit_cmd.append(tree_id)
commit_hash = git.run(*commit_cmd) commit_hash = git.run(*commit_cmd)
git.run('update-ref', REF, commit_hash) git.run('update-ref', REF, commit_hash)
...@@ -180,7 +184,11 @@ def preload_tree(prefix): ...@@ -180,7 +184,11 @@ def preload_tree(prefix):
def all_prefixes(depth=PREFIX_LEN): def all_prefixes(depth=PREFIX_LEN):
for x in (chr(i) for i in xrange(255)): if sys.version_info.major == 3:
prefixes = [bytes([i]) for i in range(255)]
else:
prefixes = [chr(i) for i in range(255)]
for x in prefixes:
# This isn't covered because PREFIX_LEN currently == 1 # This isn't covered because PREFIX_LEN currently == 1
if depth > 1: # pragma: no cover if depth > 1: # pragma: no cover
for r in all_prefixes(depth - 1): for r in all_prefixes(depth - 1):
...@@ -228,9 +236,9 @@ def load_generation_numbers(targets): ...@@ -228,9 +236,9 @@ def load_generation_numbers(targets):
# stdout as they're produced). GIL strikes again :/ # stdout as they're produced). GIL strikes again :/
cmd = [ cmd = [
'rev-list', '--topo-order', '--parents', '--reverse', '^' + REF, 'rev-list', '--topo-order', '--parents', '--reverse', '^' + REF,
] + map(binascii.hexlify, targets) ] + [binascii.hexlify(target).decode() for target in targets]
for line in git.run(*cmd).splitlines(): for line in git.run(*cmd).splitlines():
tokens = map(binascii.unhexlify, line.split()) tokens = [binascii.unhexlify(token) for token in line.split()]
rev_list.append((tokens[0], tokens[1:])) rev_list.append((tokens[0], tokens[1:]))
inc() inc()
......
...@@ -41,11 +41,11 @@ class Basic(git_test_utils.GitRepoReadWriteTestBase): ...@@ -41,11 +41,11 @@ class Basic(git_test_utils.GitRepoReadWriteTestBase):
super(Basic, self).tearDown() super(Basic, self).tearDown()
def _git_number(self, refs, cache=False): def _git_number(self, refs, cache=False):
refs = map(binascii.unhexlify, refs) refs = [binascii.unhexlify(ref) for ref in refs]
self.repo.run(self.gn.load_generation_numbers, refs) self.repo.run(self.gn.load_generation_numbers, refs)
if cache: if cache:
self.repo.run(self.gn.finalize, refs) self.repo.run(self.gn.finalize, refs)
return map(self.gn.get_num, refs) return [self.gn.get_num(ref) for ref in refs]
def testBasic(self): def testBasic(self):
self.assertEqual([0], self._git_number([self.repo['A']])) self.assertEqual([0], self._git_number([self.repo['A']]))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment