
This change establishes Python 3 compatibility for the major part of
Gerrit build tool chain. Only two scripts remain non Python 3
compatible:
* Documentation/replace_macros.py
* tools/bzl/license-map.py
Those scripts explicitly invoked with python2 version.
Test Plan:
a. Python 2.7
* Switch to system where /usr/bin/python points to Python 2.7
* bazel build release
* bazel test //...
* tools/eclipse/project.py
b. Python 3.6
* Switch to system where /usr/bin/python points to Python 3.6
* bazel build release
* bazel test //...
* tools/eclipse/project.py
Pre-requisites for the test plan:
In case bazel action and repository caching is activated on the SUT, the
caches would need to be wiped out, to make sure that the complete build
tool chain was tested. On my system I had to run these commands:
* bazel clean --expunge_async
* rm -rf ~/.gerritcodereview/buck-cache/downloaded-artifacts/*
* rm -rf ~/.gerritcodereview/bazel-cache/cas/*
* rm -rf ~/.gerritcodereview/bazel-cache/repository/*
Bug: Issue 8151
Change-Id: Iece59d0c5149b77a02754b3fed4ce84d5d8085ee
(cherry picked from commit 0c9e13c11a
)
47 lines
1.5 KiB
Python
47 lines
1.5 KiB
Python
# Copyright (C) 2013 The Android Open Source Project
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
import os
|
|
|
|
|
|
def hash_bower_component(hash_obj, path):
|
|
"""Hash the contents of a bower component directory.
|
|
|
|
This is a stable hash of a directory downloaded with `bower install`, minus
|
|
the .bower.json file, which is autogenerated each time by bower. Used in lieu
|
|
of hashing a zipfile of the contents, since zipfiles are difficult to hash in
|
|
a stable manner.
|
|
|
|
Args:
|
|
hash_obj: an open hash object, e.g. hashlib.sha1().
|
|
path: path to the directory to hash.
|
|
|
|
Returns:
|
|
The passed-in hash_obj.
|
|
"""
|
|
if not os.path.isdir(path):
|
|
raise ValueError('Not a directory: %s' % path)
|
|
|
|
path = os.path.abspath(path)
|
|
for root, dirs, files in os.walk(path):
|
|
dirs.sort()
|
|
for f in sorted(files):
|
|
if f == '.bower.json':
|
|
continue
|
|
p = os.path.join(root, f)
|
|
hash_obj.update(p[len(path)+1:].encode("utf-8"))
|
|
hash_obj.update(open(p, "rb").read())
|
|
|
|
return hash_obj
|