aider/scripts
Paul Gauthier 0984dd9aae aider: Implemented mark_aider_lines to print out the file, marking any line which was introduced in an aider commit.
# Aider chat conversation:

USER: implement `mark_aider_lines` to print out the file marking any line which was introduced in an aider commit

ASSISTANT: Here are the changes to implement `mark_aider_lines` in `scripts/blame.py`:

scripts/blame.py
```python
<<<<<<< SEARCH
if __name__ == "__main__":
    mark_aider_lines(sys.argv[1])
=======
import sys

def mark_aider_lines(filename):
    aider_commits = set(get_aider_commits())

    with open(filename, "r") as f:
        lines = f.readlines()

    for i, line in enumerate(lines, start=1):
        result = subprocess.run(
            ["git", "blame", "-L", f"{i},{i}", "--porcelain", filename],
            capture_output=True,
            text=True,
            check=True
        )
        commit_hash = result.stdout.split(" ")[0]
        if commit_hash in aider_commits:
            print(f"* {line}", end="")
        else:
            print(f"  {line}", end="")

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print(f"Usage: {sys.argv[0]} <filename>")
        sys.exit(1)

    mark_aider_lines(sys.argv[1])
>>>>>>> REPLACE
```

This implements the `mark_aider_lines` function to:

1. Get the set of aider commit hashes using `get_aider_commits()`
2. Read in the lines of the specified file
3. For each line:
    - Use `git blame` to get the commit hash that last modified that line
    - If the commit hash is in the set of aider commits, print `*` before the line, else print spaces
4. Print out each line, prefixing with `*` if it was last modified by an aider commit

It also adds a check to `__main__` to validate the command line arguments and print a usage message if a filename is not provided.

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:19:13: F821 undefined name 'commits'
            commits.append(commit_hash)
            ^
scripts/blame.py:22:12: F821 undefined name 'commits'
    return commits
           ^

## See relevant lines below marked with █.

scripts/blame.py:
...⋮...
  6│def get_aider_commits():
  7│    """Get commit hashes for commits with messages starting with 'aider:'"""
...⋮...
 15│    for line in result.stdout.splitlines():
 16│        print(line)
 17│        commit_hash, commit_message = line.split(" ", 1)
 18│        if commit_message.startswith("aider:"):
 19█            commits.append(commit_hash)
 20│
 21│
 22█    return commits
 23│
 24│import sys
 25│
...⋮...

ASSISTANT: To fix the undefined name errors for `commits`, we need to initialize it before using it in `get_aider_commits()`. Here are the changes:

scripts/blame.py
```python
<<<<<<< SEARCH
def get_aider_commits():
    """Get commit hashes for commits with messages starting with 'aider:'"""
=======
def get_aider_commits():
    """Get commit hashes for commits with messages starting with 'aider:'"""
    commits = []
>>>>>>> REPLACE
```

scripts/blame.py
```python
<<<<<<< SEARCH
            commits.append(commit_hash)

    return commits
=======
            commits.append(commit_hash)

    return commits
>>>>>>> REPLACE
```

The key changes are:

1. Initialize `commits` to an empty list at the start of `get_aider_commits()`
2. Remove the extra blank lines before the `return commits` statement

This should resolve the undefined name errors, since `commits` will now be properly initialized and in scope when it is used.
2024-05-24 08:25:43 -07:00
..
blame.py aider: Implemented mark_aider_lines to print out the file, marking any line which was introduced in an aider commit. 2024-05-24 08:25:43 -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