update_crate_tests: Remove cwd
Env.cwd is misleading as it captures the location of the crate/package
being updated. Move the detection logic to the Package class and rename
the attribute.
There is the expectation that before running soong_ui, cwd is set to
ANDROID_BUILD_TOP; and before running write_mapping, that cwd is set to
the package directory. Add comments to capture this.
Test: update_crate_tests.py in external/rust/crates/libc
Change-Id: I5c4f16afe0b92b7c85173e4149ee17dd39c773c2
diff --git a/scripts/update_crate_tests.py b/scripts/update_crate_tests.py
index 5ad95ab..3f4bb92 100755
--- a/scripts/update_crate_tests.py
+++ b/scripts/update_crate_tests.py
@@ -41,24 +41,13 @@
class Env(object):
- def __init__(self, path):
+ def __init__(self):
try:
self.ANDROID_BUILD_TOP = os.environ['ANDROID_BUILD_TOP']
except KeyError:
raise UpdaterException('$ANDROID_BUILD_TOP is not defined; you '
'must first source build/envsetup.sh and '
'select a target.')
- if path == None:
- self.cwd = os.getcwd()
- else:
- self.cwd = path
- try:
- self.cwd_relative = self.cwd.split(self.ANDROID_BUILD_TOP)[1]
- except IndexError:
- raise UpdaterException('The path ' + self.cwd + ' is not under ' +
- self.ANDROID_BUILD_TOP + '; You must be in the '
- 'directory of a crate or pass its absolute path '
- 'as first argument.')
class Bazel(object):
@@ -68,6 +57,8 @@
raise UpdaterException('This script has only been tested on Linux.')
self.path = os.path.join(env.ANDROID_BUILD_TOP, "tools", "bazel")
soong_ui = os.path.join(env.ANDROID_BUILD_TOP, "build", "soong", "soong_ui.bash")
+
+ # soong_ui requires to be at the root of the repository.
os.chdir(env.ANDROID_BUILD_TOP)
print("Generating Bazel files...")
cmd = [soong_ui, "--make-mode", "GENERATE_BAZEL_FILES=1", "nothing"]
@@ -82,7 +73,6 @@
subprocess.check_output(cmd, stderr=subprocess.STDOUT, text=True)
except subprocess.CalledProcessError as e:
raise UpdaterException('Unable to update TEST_MAPPING: ' + e.output)
- os.chdir(env.cwd)
# Return all modules for a given path.
def query_modules(self, path):
@@ -125,8 +115,22 @@
class Package(object):
- def __init__(self, path, bazel):
- modules = bazel.query_modules(path)
+ def __init__(self, path, env, bazel):
+ if path == None:
+ self.dir = os.getcwd()
+ else:
+ self.dir = path
+ try:
+ self.dir_rel = self.dir.split(env.ANDROID_BUILD_TOP)[1]
+ except IndexError:
+ raise UpdaterException('The path ' + self.dir + ' is not under ' +
+ env.ANDROID_BUILD_TOP + '; You must be in the '
+ 'directory of a crate or pass its absolute path '
+ 'as first argument.')
+
+ # Move to the package_directory.
+ os.chdir(self.dir)
+ modules = bazel.query_modules(self.dir_rel)
self.rdep_tests = bazel.query_rdep_tests(modules)
def get_rdep_tests(self):
@@ -135,11 +139,12 @@
class TestMapping(object):
def __init__(self, path):
- self.env = Env(path)
- self.bazel = Bazel(self.env)
+ env = Env()
+ bazel = Bazel(env)
+ self.package = Package(path, env, bazel)
def create(self):
- tests = Package(self.env.cwd_relative, self.bazel).get_rdep_tests()
+ tests = self.package.get_rdep_tests()
if not bool(tests):
return
test_mapping = self.tests_to_mapping(tests)
@@ -164,6 +169,7 @@
json_file.write("\n")
print("TEST_MAPPING successfully updated!")
+
def main():
if len(sys.argv) == 2:
path = sys.argv[1]