Skip to content

Commit

Permalink
Auto merge of #17040 - UK992:clean-cargo-cache, r=jdm
Browse files Browse the repository at this point in the history
Improve `clean-cargo-cache`

It won't delete pack files from `db` directory anymore, which cause #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 -->
  • Loading branch information
bors-servo committed May 29, 2017
2 parents aca0943 + 0e072df commit fecfd30
Showing 1 changed file with 20 additions and 19 deletions.
39 changes: 20 additions & 19 deletions python/servo/bootstrap_commands.py
Original file line number Diff line number Diff line change
Expand Up @@ -384,6 +384,8 @@ def get_size(path):
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)

Expand Down Expand Up @@ -438,12 +440,17 @@ def get_size(path):
"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)
Expand All @@ -463,36 +470,30 @@ def get_size(path):
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)
Expand Down

0 comments on commit fecfd30

Please sign in to comment.