diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2017-05-28 22:27:18 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-05-28 22:27:18 -0500 |
commit | fecfd306c5e743a8fe8e558b1448e725e53cde7a (patch) | |
tree | 9a4cacb85b1438e19589009203840d2d5c274ae5 | |
parent | aca09436b71e6defe007e1d17a9d79214d094a7b (diff) | |
parent | 0e072df8c35e1889f1a3de98b6c4acf46f868e8a (diff) | |
download | servo-fecfd306c5e743a8fe8e558b1448e725e53cde7a.tar.gz servo-fecfd306c5e743a8fe8e558b1448e725e53cde7a.zip |
Auto merge of #17040 - UK992:clean-cargo-cache, r=jdm
Improve `clean-cargo-cache`
It won't delete pack files from `db` directory anymore, which cause https://github.com/servo/servo/issues/16787 and it will remove empty folders now.
<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/17040)
<!-- Reviewable:end -->
-rw-r--r-- | python/servo/bootstrap_commands.py | 39 |
1 files changed, 20 insertions, 19 deletions
diff --git a/python/servo/bootstrap_commands.py b/python/servo/bootstrap_commands.py index a798184ebdd..ceab1907f46 100644 --- a/python/servo/bootstrap_commands.py +++ b/python/servo/bootstrap_commands.py @@ -384,6 +384,8 @@ class MachCommands(CommandBase): cargo_dir = os.environ.get("CARGO_HOME") else: cargo_dir = path.join(self.context.topdir, ".cargo") + if not os.path.isdir(cargo_dir): + return cargo_file = open(path.join(self.context.topdir, "Cargo.lock")) content = toml.load(cargo_file) @@ -438,12 +440,17 @@ class MachCommands(CommandBase): "exist": [], } if os.path.isdir(path.join(git_checkout_dir, d)): - for d2 in os.listdir(path.join(git_checkout_dir, d)): + with cd(path.join(git_checkout_dir, d)): + git_crate_hash = glob.glob('*') + if not git_crate_hash or not os.path.isdir(path.join(git_db_dir, d)): + packages["git"][crate_name]["exist"].append(("del", d, "")) + continue + for d2 in git_crate_hash: dep_path = path.join(git_checkout_dir, d, d2) if os.path.isdir(dep_path): packages["git"][crate_name]["exist"].append((path.getmtime(dep_path), d, d2)) elif os.path.isdir(path.join(git_db_dir, d)): - packages["git"][crate_name]["exist"].append(("db", d, "")) + packages["git"][crate_name]["exist"].append(("del", d, "")) for d in os.listdir(crates_src_dir): crate_name = re.sub(r"\-\d+(\.\d+){1,3}.+", "", d) @@ -463,36 +470,30 @@ class MachCommands(CommandBase): for exist in sorted(existed_crates, reverse=True): current_crate = packages[packages_type][crate_name]["current"] size = 0 - exist_name = exist + exist_name = path.join(exist[1], exist[2]) if packages_type == "git" else exist exist_item = exist[2] if packages_type == "git" else exist if exist_item not in current_crate: crate_count += 1 - removing_anything = True - if int(crate_count) >= int(keep) or not current_crate: + if int(crate_count) >= int(keep) or not current_crate or \ + exist[0] == "del" or exist[2] == "master": + removing_anything = True crate_paths = [] if packages_type == "git": exist_checkout_path = path.join(git_checkout_dir, exist[1]) exist_db_path = path.join(git_db_dir, exist[1]) - exist_name = path.join(exist[1], exist[2]) exist_path = path.join(git_checkout_dir, exist_name) - if exist[0] == "db": - crate_paths.append(exist_db_path) + if exist[0] == "del": + if os.path.isdir(exist_checkout_path): + crate_paths.append(exist_checkout_path) + if os.path.isdir(exist_db_path): + crate_paths.append(exist_db_path) crate_count += -1 else: crate_paths.append(exist_path) - # remove crate from checkout if doesn't exist in db directory - if not os.path.isdir(exist_db_path): - crate_count += -1 - - with cd(path.join(exist_path, ".git", "objects", "pack")): - for pack in glob.glob("*"): - pack_path = path.join(exist_db_path, "objects", "pack", pack) - if os.path.exists(pack_path): - crate_paths.append(pack_path) - - if len(os.listdir(exist_checkout_path)) <= 1: + exist_checkout_list = glob.glob(path.join(exist_checkout_path, '*')) + if len(exist_checkout_list) <= 1: crate_paths.append(exist_checkout_path) if os.path.isdir(exist_db_path): crate_paths.append(exist_db_path) |