mirror of
https://github.com/Aider-AI/aider.git
synced 2025-06-01 02:05:00 +00:00
Refactored the blame script to include a new function for analyzing commit history.
This commit is contained in:
parent
3e9873cc11
commit
a399b99d49
1 changed files with 61 additions and 9 deletions
|
@ -1,5 +1,6 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import tempfile
|
||||||
import sys
|
import sys
|
||||||
import subprocess
|
import subprocess
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
@ -37,7 +38,7 @@ def get_lines_with_commit_hash(filename, aider_commits, git_dname, verbose=False
|
||||||
|
|
||||||
def get_aider_commits(git_dname):
|
def get_aider_commits(git_dname):
|
||||||
"""Get commit hashes for commits with messages starting with 'aider:'"""
|
"""Get commit hashes for commits with messages starting with 'aider:'"""
|
||||||
commits = set()
|
|
||||||
result = subprocess.run(
|
result = subprocess.run(
|
||||||
["git", "-C", git_dname, "log", "--pretty=format:%H %s"],
|
["git", "-C", git_dname, "log", "--pretty=format:%H %s"],
|
||||||
capture_output=True,
|
capture_output=True,
|
||||||
|
@ -45,11 +46,16 @@ def get_aider_commits(git_dname):
|
||||||
check=True
|
check=True
|
||||||
)
|
)
|
||||||
|
|
||||||
for line in result.stdout.splitlines():
|
results = result.stdout.splitlines()
|
||||||
|
dump(len(results))
|
||||||
|
|
||||||
|
commits = set()
|
||||||
|
for line in results:
|
||||||
commit_hash, commit_message = line.split(" ", 1)
|
commit_hash, commit_message = line.split(" ", 1)
|
||||||
if commit_message.startswith("aider:"):
|
if commit_message.startswith("aider:"):
|
||||||
commits.add(commit_hash)
|
commits.add(commit_hash)
|
||||||
|
|
||||||
|
dump(len(commits))
|
||||||
return commits
|
return commits
|
||||||
|
|
||||||
|
|
||||||
|
@ -73,26 +79,72 @@ def process_fnames(fnames, git_dname):
|
||||||
|
|
||||||
total_percent_modified = (total_aider_lines / total_lines) * 100 if total_lines > 0 else 0
|
total_percent_modified = (total_aider_lines / total_lines) * 100 if total_lines > 0 else 0
|
||||||
print(f"Total: {total_aider_lines}/{total_lines} lines by aider ({total_percent_modified:.2f}%)")
|
print(f"Total: {total_aider_lines}/{total_lines} lines by aider ({total_percent_modified:.2f}%)")
|
||||||
return total_percent_modified
|
return total_aider_lines, total_lines, total_percent_modified
|
||||||
|
|
||||||
def process_repo(git_dname=None):
|
def process_repo(git_dname=None):
|
||||||
if not git_dname:
|
if not git_dname:
|
||||||
git_dname = "."
|
git_dname = "."
|
||||||
|
|
||||||
result = subprocess.run(
|
result = subprocess.run(
|
||||||
["git", "-C", git_dname, "ls-files"],
|
["git", "-C", git_dname, "ls-files"],
|
||||||
capture_output=True,
|
capture_output=True,
|
||||||
text=True,
|
text=True,
|
||||||
check=True
|
check=True
|
||||||
)
|
)
|
||||||
fnames = [fname for fname in result.stdout.splitlines() if fname.endswith('.py')]
|
git_dname = Path(git_dname)
|
||||||
process_fnames(fnames, git_dname)
|
fnames = [git_dname/fname for fname in result.stdout.splitlines() if fname.endswith('.py')]
|
||||||
|
|
||||||
|
return process_fnames(fnames, git_dname)
|
||||||
|
|
||||||
|
|
||||||
|
def history():
|
||||||
|
git_dname = "."
|
||||||
|
result = subprocess.run(
|
||||||
|
["git", "-C", git_dname, "log", "--pretty=format:%H %s"],
|
||||||
|
capture_output=True,
|
||||||
|
text=True,
|
||||||
|
check=True
|
||||||
|
)
|
||||||
|
|
||||||
|
commits = []
|
||||||
|
for line in result.stdout.splitlines():
|
||||||
|
commit_hash, commit_message = line.split(" ", 1)
|
||||||
|
commits.append(commit_hash)
|
||||||
|
|
||||||
|
commits.reverse()
|
||||||
|
dump(len(commits))
|
||||||
|
|
||||||
|
num_commits = len(commits)
|
||||||
|
N=3
|
||||||
|
step = num_commits//N
|
||||||
|
results = []
|
||||||
|
for i in range(0, num_commits+1, step):
|
||||||
|
dump(i, num_commits)
|
||||||
|
commit = commits[i]
|
||||||
|
|
||||||
|
repo_dname = tempfile.TemporaryDirectory().name
|
||||||
|
cmd = f"git clone . {repo_dname}"
|
||||||
|
subprocess.run(cmd.split(), check=True)
|
||||||
|
dump(commit)
|
||||||
|
cmd = f"git -c advice.detachedHead=false -C {repo_dname} checkout {commit}"
|
||||||
|
subprocess.run(cmd.split(), check=True)
|
||||||
|
|
||||||
|
aider_lines, total_lines, pct = process_repo(repo_dname)
|
||||||
|
results.append((i, aider_lines, total_lines, pct))
|
||||||
|
|
||||||
|
dump(results)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
if len(sys.argv) < 2:
|
history()
|
||||||
process_repo()
|
return
|
||||||
else:
|
|
||||||
fnames = sys.argv[1:]
|
|
||||||
|
|
||||||
|
if len(sys.argv) < 2:
|
||||||
|
return process_repo()
|
||||||
|
|
||||||
|
fnames = sys.argv[1:]
|
||||||
process_fnames(fnames)
|
process_fnames(fnames)
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue