The GitHub repo is still the source of truth and this is a read-only vendor. This should let us experiment more incrementally with the monorepo. Differential Revision: https://phabricator.services.mozilla.com/D282538
85 lines
2.5 KiB
Python
85 lines
2.5 KiB
Python
#!/usr/bin/env python3
|
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
|
|
"""
|
|
Clean the world.
|
|
|
|
Note that this is probably only a partial clean - in particular, no attempt
|
|
is made to clean the iOS/Swift world, because markh doesn't know what that
|
|
involves.
|
|
|
|
Please make a PR with anything you notice that should be cleaned but isn't!
|
|
"""
|
|
|
|
import argparse
|
|
import shlex
|
|
import shutil
|
|
import subprocess
|
|
from pathlib import Path
|
|
|
|
PROJECT_ROOT = Path(__file__).parent.parent
|
|
|
|
|
|
def run_command(dry_run, cmdline, **kwargs):
|
|
print("Executing:", " ".join(shlex.quote(str(part)) for part in cmdline))
|
|
if not dry_run:
|
|
subprocess.check_call(cmdline, **kwargs)
|
|
|
|
|
|
def find_generated_directories(look_dir):
|
|
for child in look_dir.iterdir():
|
|
if child.name == "support":
|
|
for sub in find_generated_directories(child):
|
|
yield sub
|
|
else:
|
|
# `android/build` directories should be removed.
|
|
sub = child / "android" / "build"
|
|
if sub.is_dir():
|
|
yield sub
|
|
# TODO: ios/swift?
|
|
|
|
|
|
def clean_android(dry_run):
|
|
# pathlib.Path will join "." and "gradlew" as "gradlew", which doesn't
|
|
# work as "." is not on the path!
|
|
gradlew = (PROJECT_ROOT / "gradlew").resolve()
|
|
# Running gradle is fairly likely to fail if the environment isn't setup,
|
|
# so we ignore errors there...
|
|
try:
|
|
run_command(dry_run, [gradlew, "clean"], shell=True)
|
|
except subprocess.CalledProcessError:
|
|
print("`./gradle clean` failed, but looking for other Android stuff...")
|
|
# ... and still try and find obviously generated directories.
|
|
for to_rm in find_generated_directories(PROJECT_ROOT / "components"):
|
|
print("Removing:", to_rm)
|
|
if not dry_run:
|
|
shutil.rmtree(to_rm)
|
|
|
|
|
|
def parse_args():
|
|
parser = argparse.ArgumentParser(
|
|
description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter
|
|
)
|
|
parser.add_argument(
|
|
"-n",
|
|
"--dry-run",
|
|
dest="dry_run",
|
|
action="store_true",
|
|
help="show what would be executed/removed without actually doing it.",
|
|
)
|
|
return parser.parse_args()
|
|
|
|
|
|
def main():
|
|
args = parse_args()
|
|
run_command(args.dry_run, ["cargo", "clean"])
|
|
clean_android(args.dry_run)
|
|
# TODO: add swift etc.
|
|
print("We should be clean! (except for iOS - fix me? :)")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|