aider/scripts
Paul Gauthier 8c09670a5b aider: Print out stats for each file and summary stats at the end, including the percentage of lines modified.
# Aider chat conversation:

USER: in process, print out stats for each file and summary stats at the end

ASSISTANT: Here are the changes to `scripts/blame.py` to print out stats for each file and summary stats at the end:

1. Modify the `process` function to print stats for each file.
2. Add logic to accumulate and print summary stats at the end.

```python
scripts/blame.py
```python
<<<<<<< SEARCH
    for fname in fnames:
=======
    total_lines = 0
    total_aider_lines = 0

    for fname in fnames:
        num_lines, num_aider_lines = get_lines_with_commit_hash(fname, aider_commits)
        total_lines += num_lines
        total_aider_lines += num_aider_lines
        print(f"{fname}: {num_aider_lines}/{num_lines} lines modified by aider")

    print(f"Total: {total_aider_lines}/{total_lines} lines modified by aider")
>>>>>>> REPLACE
```

USER:
# Fix any errors below, if possible.

Traceback (most recent call last):
  File "/Users/gauthier/Projects/aider/scripts/blame.py", line 69
    get_lines_with_commit_hash(fname, aider_commits)
IndentationError: unexpected indent

## Running: flake8 --select=E9,F821,F823,F831,F406,F407,F701,F702,F704,F706 --show-source --isolated scripts/blame.py

scripts/blame.py:69:9: E999 IndentationError: unexpected indent
        get_lines_with_commit_hash(fname, aider_commits)
        ^

## See relevant line below marked with █.

scripts/blame.py:
...⋮...
 57│def process(fnames):
 58│    aider_commits = get_aider_commits()
...⋮...
 66│        print(f"{fname}: {num_aider_lines}/{num_lines} lines modified by aider")
 67│
 68│    print(f"Total: {total_aider_lines}/{total_lines} lines modified by aider")
 69█        get_lines_with_commit_hash(fname, aider_commits)
 70│
 71│def main():
 72│    if len(sys.argv) < 2:
...⋮...

ASSISTANT: Let's fix the indentation error and ensure the code is correct. Here is the corrected *SEARCH/REPLACE* block:

```python
scripts/blame.py
```python
<<<<<<< SEARCH
    total_lines = 0
    total_aider_lines = 0

    for fname in fnames:
        num_lines, num_aider_lines = get_lines_with_commit_hash(fname, aider_commits)
        total_lines += num_lines
        total_aider_lines += num_aider_lines
        print(f"{fname}: {num_aider_lines}/{num_lines} lines modified by aider")

    print(f"Total: {total_aider_lines}/{total_lines} lines modified by aider")
        get_lines_with_commit_hash(fname, aider_commits)
=======
    for fname in fnames:
        num_lines, num_aider_lines = get_lines_with_commit_hash(fname, aider_commits)
        total_lines += num_lines
        total_aider_lines += num_aider_lines
        print(f"{fname}: {num_aider_lines}/{num_lines} lines modified by aider")

    print(f"Total: {total_aider_lines}/{total_lines} lines modified by aider")
>>>>>>> REPLACE
```

USER:
# Fix any errors below, if possible.

## Running: flake8 --select=E9,F821,F823,F831,F406,F407,F701,F702,F704,F706 --show-source --isolated scripts/blame.py

scripts/blame.py:61:9: F821 undefined name 'total_lines'
        total_lines += num_lines
        ^
scripts/blame.py:62:9: F821 undefined name 'total_aider_lines'
        total_aider_lines += num_aider_lines
        ^

## See relevant lines below marked with █.

scripts/blame.py:
...⋮...
 57│def process(fnames):
 58│    aider_commits = get_aider_commits()
 59│    for fname in fnames:
 60│        num_lines, num_aider_lines = get_lines_with_commit_hash(fname, aider_commits)
 61█        total_lines += num_lines
 62█        total_aider_lines += num_aider_lines
 63│        print(f"{fname}: {num_aider_lines}/{num_lines} lines modified by aider")
 64│
 65│    print(f"Total: {total_aider_lines}/{total_lines} lines modified by aider")
 66│
...⋮...

ASSISTANT: The issue is that `total_lines` and `total_aider_lines` were not defined. Let's define them at the beginning of the `process` function.

Here is the corrected *SEARCH/REPLACE* block:

```python
scripts/blame.py
```python
<<<<<<< SEARCH
    for fname in fnames:
=======
    total_lines = 0
    total_aider_lines = 0

    for fname in fnames:
>>>>>>> REPLACE
```

```python
scripts/blame.py
```python
<<<<<<< SEARCH
    for fname in fnames:
        num_lines, num_aider_lines = get_lines_with_commit_hash(fname, aider_commits)
        total_lines += num_lines
        total_aider_lines += num_aider_lines
        print(f"{fname}: {num_aider_lines}/{num_lines} lines modified by aider")

    print(f"Total: {total_aider_lines}/{total_lines} lines modified by aider")
        get_lines_with_commit_hash(fname, aider_commits)
=======
    for fname in fnames:
        num_lines, num_aider_lines = get_lines_with_commit_hash(fname, aider_commits)
        total_lines += num_lines
        total_aider_lines += num_aider_lines
        print(f"{fname}: {num_aider_lines}/{num_lines} lines modified by aider")

    print(f"Total: {total_aider_lines}/{total_lines} lines modified by aider")
>>>>>>> REPLACE
```

USER: # 1 SEARCH/REPLACE block failed to match!

## SearchReplaceNoExactMatch: This SEARCH block failed to exactly match lines in scripts/blame.py
<<<<<<< SEARCH
    for fname in fnames:
        num_lines, num_aider_lines = get_lines_with_commit_hash(fname, aider_commits)
        total_lines += num_lines
        total_aider_lines += num_aider_lines
        print(f"{fname}: {num_aider_lines}/{num_lines} lines modified by aider")

    print(f"Total: {total_aider_lines}/{total_lines} lines modified by aider")
        get_lines_with_commit_hash(fname, aider_commits)
=======
    for fname in fnames:
        num_lines, num_aider_lines = get_lines_with_commit_hash(fname, aider_commits)
        total_lines += num_lines
        total_aider_lines += num_aider_lines
        print(f"{fname}: {num_aider_lines}/{num_lines} lines modified by aider")

    print(f"Total: {total_aider_lines}/{total_lines} lines modified by aider")
>>>>>>> REPLACE

Did you mean to match some of these actual lines from scripts/blame.py?

```

def process(fnames):
    aider_commits = get_aider_commits()
    total_lines = 0
    total_aider_lines = 0

    for fname in fnames:
        num_lines, num_aider_lines = get_lines_with_commit_hash(fname, aider_commits)
        total_lines += num_lines
        total_aider_lines += num_aider_lines
        print(f"{fname}: {num_aider_lines}/{num_lines} lines modified by aider")

    print(f"Total: {total_aider_lines}/{total_lines} lines modified by aider")

def main():
    if len(sys.argv) < 2:
        print(f"Usage: {sys.argv[0]} <filename> ...")
        sys.exit(1)
```

Are you sure you need this SEARCH/REPLACE block?
The REPLACE lines are already in scripts/blame.py!

The SEARCH section must exactly match an existing block of lines including all white space, comments, indentation, docstrings, etc

# The other 1 SEARCH/REPLACE block were applied successfully.
Don't re-send them.
Just reply with fixed versions of the block above that failed to match.

ASSISTANT: Let's correct the *SEARCH/REPLACE* block to ensure it matches the existing code exactly.

```python
scripts/blame.py
```python
<<<<<<< SEARCH
    aider_commits = get_aider_commits()
=======
    aider_commits = get_aider_commits()
    total_lines = 0
    total_aider_lines = 0
>>>>>>> REPLACE
```

```python
scripts/blame.py
```python
<<<<<<< SEARCH
    for fname in fnames:
        num_lines, num_aider_lines = get_lines_with_commit_hash(fname, aider_commits)
        total_lines += num_lines
        total_aider_lines += num_aider_lines
        print(f"{fname}: {num_aider_lines}/{num_lines} lines modified by aider")

    print(f"Total: {total_aider_lines}/{total_lines} lines modified by aider")
        get_lines_with_commit_hash(fname, aider_commits)
=======
    for fname in fnames:
        num_lines, num_aider_lines = get_lines_with_commit_hash(fname, aider_commits)
        total_lines += num_lines
        total_aider_lines += num_aider_lines
        print(f"{fname}: {num_aider_lines}/{num_lines} lines modified by aider")

    print(f"Total: {total_aider_lines}/{total_lines} lines modified by aider")
>>>>>>> REPLACE
```

USER: show percent modified

ASSISTANT: To show the percentage of lines modified, we need to calculate the percentage and include it in the print statements.

Here are the updated *SEARCH/REPLACE* blocks:

```python
scripts/blame.py
```python
<<<<<<< SEARCH
        print(f"{fname}: {num_aider_lines}/{num_lines} lines modified by aider")

    print(f"Total: {total_aider_lines}/{total_lines} lines modified by aider")
=======
        percent_modified = (num_aider_lines / num_lines) * 100 if num_lines > 0 else 0
        print(f"{fname}: {num_aider_lines}/{num_lines} lines modified by aider ({percent_modified:.2f}%)")

    total_percent_modified = (total_aider_lines / total_lines) * 100 if total_lines > 0 else 0
    print(f"Total: {total_aider_lines}/{total_lines} lines modified by aider ({total_percent_modified:.2f}%)")
>>>>>>> REPLACE
```
2024-05-24 08:40:48 -07:00
..
blame.py aider: Print out stats for each file and summary stats at the end, including the percentage of lines modified. 2024-05-24 08:40:48 -07:00
Dockerfile.jekyll moved 2024-05-15 11:00:18 -07:00
jekyll_build.sh renamed dockerfile 2024-05-15 11:29:34 -07:00
jekyll_run.sh moved 2024-05-15 11:00:18 -07:00
versionbump.py aider: Add logic to compare commit dates of main and origin/main and print a message explaining which one is behind. 2023-11-17 15:50:37 -08:00