rasta/rasta_exp/nb_year_whithout_commit.py
Jean-Marie Mineau cd1e91bb99
first commit
2023-11-16 14:30:24 +01:00

103 lines
3.3 KiB
Python

#!/usr/bin/env python3
# Dep: GitPython
import time
from typing import Any
from git import Repo
from pathlib import Path
import json
SOURCES = {
"a3e": "https://github.com/tanzirul/a3e",
"a5": "https://github.com/tvidas/a5",
"adagio": "https://github.com/hgascon/adagio",
"amandroid": "https://github.com/arguslab/Argus-SAF",
"anadroid": "https://github.com/maggieddie/pushdownoo",
"androguard": "https://github.com/androguard/androguard/",
"apparecium": "https://github.com/askk/apparecium",
"blueseal": "https://github.com/ub-rms/blueseal",
"choi_et_al": "https://github.com/kwanghoon/JavaAnalysis",
"didfail": "https://bitbucket.org/wklieber/didfail.git",
"droidsafe": "https://github.com/MIT-PAC/droidsafe-src",
"flowdroid": "https://github.com/secure-software-engineering/FlowDroid",
"gator": None, # "http://web.cse.ohio-state.edu/presto/software/gator/",
"ic3": "https://github.com/siis/ic3",
"iccta": "https://github.com/lilicoding/soot-infoflow-android-iccta.git",
"lotrack": "https://github.com/MaxLillack/Lotrack",
"mallodroid": "https://github.com/sfahl/mallodroid",
"redexer": "https://github.com/plum-umd/redexer",
"saaf": "https://github.com/SAAF-Developers/saaf",
"thresher": "https://github.com/cuplv/thresher",
"thresher": "https://github.com/cuplv/thresher",
"wognsen_et_al": "https://bitbucket.org/erw/dalvik-bytecode-analysis-tool.git",
}
# git clone --filter=blob:none --no-checkout --single-branch --branch master git://some.repo.git .
def rm_tree(path: Path):
"""Delete a whole tree from the file system"""
if path.is_file():
path.unlink()
else:
for child in path.iterdir():
rm_tree(child)
path.rmdir()
def get_nb_y_wo_commit(name, src) -> dict[str, Any]:
p = Path("/") / "tmp" / "git_compute_years_witout_commit"
p.mkdir(exist_ok=True)
repo_path = p / name
repo = Repo.clone_from(
src, repo_path, multi_options=["--filter=blob:none", "--no-checkout"]
)
for ref in repo.remote().refs:
repo.git.fetch(
"origin", "/".join(str(ref).split("/")[1:]), "--filter=blob:none"
)
years = set()
for c in repo.iter_commits("--all"):
years.add(time.gmtime(c.authored_date).tm_year)
first_year = min(years)
current_year = time.localtime().tm_year
nb_y_wo_commit = 0
for y in range(first_year, current_year + 1):
if y not in years:
nb_y_wo_commit += 1
print(f"Year of the first commit: {first_year}")
print(
f"NB of years without commit from {first_year} to {current_year}: {nb_y_wo_commit}"
)
rm_tree(repo_path)
return {
"name": name,
"src": src,
"year_first_commit": first_year,
"year_wo_commit": nb_y_wo_commit,
}
if __name__ == "__main__":
results = [
{
"name": "gator",
"src": "http://web.cse.ohio-state.edu/presto/software/gator/",
"year_first_commit": 2014,
"year_wo_commit": 4,
}
]
for tool in SOURCES:
src = SOURCES[tool]
if src is None:
print(f"{tool}: Not a git repo")
else:
print(f"{tool}:")
results.append(get_nb_y_wo_commit(tool, src))
print()
print(json.dumps(results)) # TODO: write in a format good for latex