aboutsummaryrefslogtreecommitdiffstats
path: root/python/servo/bootstrap_commands.py
diff options
context:
space:
mode:
authorUK992 <urbankrajnc92@gmail.com>2017-05-25 20:44:16 +0200
committerUK992 <urbankrajnc92@gmail.com>2017-05-25 20:44:16 +0200
commit0e072df8c35e1889f1a3de98b6c4acf46f868e8a (patch)
treed75c16489de8cd47af70cd58563565e954d2f63a /python/servo/bootstrap_commands.py
parent3c267d7fddd036f6bcc9ebf000ed37665cf7496d (diff)
downloadservo-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.py39
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)