diff options
author | UK992 <urbankrajnc92@gmail.com> | 2017-05-25 20:44:16 +0200 |
---|---|---|
committer | UK992 <urbankrajnc92@gmail.com> | 2017-05-25 20:44:16 +0200 |
commit | 0e072df8c35e1889f1a3de98b6c4acf46f868e8a (patch) | |
tree | d75c16489de8cd47af70cd58563565e954d2f63a /python/servo/bootstrap_commands.py | |
parent | 3c267d7fddd036f6bcc9ebf000ed37665cf7496d (diff) | |
download | servo-0e072df8c35e1889f1a3de98b6c4acf46f868e8a.tar.gz servo-0e072df8c35e1889f1a3de98b6c4acf46f868e8a.zip |
Improve `clean-cargo-cache`
Diffstat (limited to 'python/servo/bootstrap_commands.py')
-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) |