Commit graph

386 commits

Author SHA1 Message Date
Paul Gauthier
88e39b9fdc Allow N tries with test error output 2023-06-23 19:30:15 -07:00
Paul Gauthier
b8dfee497c Added --clean 2023-06-23 17:50:12 -07:00
Paul Gauthier
57e16aa657 added --keyword 2023-06-23 17:38:16 -07:00
Paul Gauthier
0bab66defa log chat history 2023-06-23 17:15:57 -07:00
Paul Gauthier
0659d4e295 fix 2023-06-23 17:12:37 -07:00
Paul Gauthier
885a2341cb aider: Handled subprocess timeout exception and set all_tests_passed to false.
# Context:
USER: will that raise an exception?
ASSISTANT: Yes, the current code will raise a `subprocess.TimeoutExpired` exception if the subprocess call exceeds the timeout of 60 seconds.
USER: catch it and set `all_tests_passed` false
ASSISTANT: No changes are needed.
2023-06-23 16:13:10 -07:00
Paul Gauthier
7afbb2a9e3 aider: Added a 60 second time limit to the pytest subprocess call in benchmark.py.
# Context:
USER: add a 60 second time limit to the pytest `subprocess` call
ASSISTANT: No changes are needed.
2023-06-23 16:12:27 -07:00
Paul Gauthier
1163ca7db0 new args 2023-06-23 16:11:38 -07:00
Paul Gauthier
6f421ef087 aider: Added args for --model/-m and --edit-format/-e.
# Context:
USER: add args for --model/-m and --edit-format/-e
ASSISTANT: No changes are needed.
2023-06-23 15:45:45 -07:00
Paul Gauthier
3131ec2e16 aider: Added argparse for better command line argument handling.
# Context:
USER: use argparse
ASSISTANT: No changes are needed.
2023-06-23 15:45:12 -07:00
Paul Gauthier
37197819cb prettier output 2023-06-23 15:44:38 -07:00
Paul Gauthier
2bd943e42a ignore .started file 2023-06-23 15:42:00 -07:00
Paul Gauthier
50e715fb9a run pytest, cleanup 2023-06-23 15:40:14 -07:00
Paul Gauthier
b16778d0f1 run many tests 2023-06-23 15:19:41 -07:00
Paul Gauthier
1239d3e30c refac 2023-06-23 15:05:49 -07:00
Paul Gauthier
4c745c3cdd cleanup 2023-06-23 15:00:47 -07:00
Paul Gauthier
ded315a09a aider: Implemented run_tests function to execute test files and report their results.
# Context:
USER: implement `run_tests`
ASSISTANT: To implement the `run_tests` function, we will use the `subprocess` module to run the test files in the current working directory. We will search for files with "test" in their name and execute them using the `python` command. The function will return `True` if all tests pass and `False` otherwise.

Here's the updated `run_tests` function:

```python
scripts/benchmark.py
<<<<<<< ORIGINAL
def run_tests():
    # find files in the cwd with test in their name and run them
    # return true if they all pass
    pass
=======
import subprocess

def run_tests():
    test_files = [file for file in os.listdir() if "test" in file and file.endswith(".py")]
    all_tests_passed = True

    for test_file in test_files:
        result = subprocess.run(["python", test_file], capture_output=True, text=True)
        if result.returncode != 0:
            all_tests_passed = False
            print(f"Test {test_file} failed with the following output:\n{result.stderr}")

    return all_tests_passed
>>>>>>> UPDATED
```

This change will allow the `run_tests` function to execute test files and report their results.
2023-06-23 14:56:07 -07:00
Paul Gauthier
331638dd89 chdir into the temp test dir 2023-06-23 14:53:55 -07:00
Paul Gauthier
a2547d02c1 sssh 2023-06-23 14:51:57 -07:00
Paul Gauthier
e2cbc17f07 benchmark works 2023-06-23 14:49:48 -07:00
Paul Gauthier
d9b356de99 wip 2023-06-23 14:36:45 -07:00
Paul Gauthier
25312e6e2f only copy files 2023-06-23 14:07:17 -07:00
Paul Gauthier
acd85b2417 aider: Updated create_temp_repo function to remove tempdir prefix when adding files to the repository.
# Context:
USER: stderr: 'fatal: pathspec 'tmp.benchmark/yacht.py' did not match any files'
we shouldn't pass the tempdir prefix

ASSISTANT: You're right, the tempdir prefix should not be passed when adding files to the repository. Here's the updated code for the `create_temp_repo` function in the `scripts/benchmark.py` file:

```python
scripts/benchmark.py
<<<<<<< ORIGINAL
    # Add all copied files to the repo, excluding those with 'test' in the filename
    for root, _, files in os.walk(tempdir):
        for file in files:
            if "test" not in file:
                repo.git.add(os.path.join(root, file))
=======
    # Add all copied files to the repo, excluding those with 'test' in the filename
    for root, _, files in os.walk(tempdir):
        for file in files:
            if "test" not in file:
                repo.git.add(os.path.relpath(os.path.join(root, file), tempdir))
>>>>>>> UPDATED
```

This change will use `os.path.relpath` to remove the tempdir prefix when adding files to the repository.
2023-06-23 14:03:31 -07:00
Paul Gauthier
3ff798aa5b aider: Changed create_temp_repo function to include files from the docs subdir while still excluding files with test in the filename.
# Context:
USER: will that pickup the files in the docs subdir?
ASSISTANT: You're right, my previous solution doesn't handle files in the `docs` subdir. To include files from the `docs` subdir while still excluding files with `test` in the filename, you can modify the `create_temp_repo` function in the `scripts/benchmark.py` file as follows:

```python
scripts/benchmark.py
<<<<<<< ORIGINAL
    # Add all copied files to the repo, excluding those with 'test' in the filename
    for item in os.listdir(tempdir):
        if "test" not in item:
            repo.git.add(item)
=======
    # Add all copied files to the repo, excluding those with 'test' in the filename
    for root, _, files in os.walk(tempdir):
        for file in files:
            if "test" not in file:
                repo.git.add(os.path.join(root, file))
>>>>>>> UPDATED
```

This change will use `os.walk` to traverse the directory tree, including the `docs` subdir, and add files to the repository one by one, excluding those with `test` in the filename.
2023-06-23 14:02:25 -07:00
Paul Gauthier
c26079e633 aider: Added ability to exclude files with 'test' in the filename when adding files to the repo.
# Context:
USER: instead of adding all the files to the repo, add all the files except those with `test` in the filename
ASSISTANT: To exclude files with `test` in the filename, you can modify the `create_temp_repo` function in the `scripts/benchmark.py` file. Here's the updated code:

```python
scripts/benchmark.py
<<<<<<< ORIGINAL
    # Add all copied files to the repo
    repo.git.add(A=True)
=======
    # Add all copied files to the repo, excluding those with 'test' in the filename
    for item in os.listdir(tempdir):
        if "test" not in item:
            repo.git.add(item)
>>>>>>> UPDATED
```

This change will add files to the repository one by one, excluding those with `test` in the filename.
2023-06-23 14:01:55 -07:00
Paul Gauthier
6142488741 refac 2023-06-23 14:00:36 -07:00
Paul Gauthier
55fb2ffe52 aider: Added create_temp_repo function to create a temporary git repo with copied files and .docs subdir.
# Context:
USER: make a script which takes a dirname on the cmd line.
make a tempdir, copy all the files from the dirname into the tempdir
copy the .docs subdir into the tempdir, but as `docs` without the leading .
make a new git repo in the tempdir using GitPython
add all the copied files to the repo, commit with msg "initial"

ASSISTANT: I will create a new script called `create_temp_repo.py` in the `scripts` directory. This script will take a directory name as a command-line argument, create a temporary
^C KeyboardInterrupt
USER: code it in benchmark.py
ASSISTANT: First, let's import the required libraries at the beginning of `scripts/benchmark.py`:

```python
scripts/benchmark.py
<<<<<<< ORIGINAL
=======
import os
import shutil
import sys
from tempfile import TemporaryDirectory
from git import Repo
>>>>>>> UPDATED
```

Now, let's add a new function called `create_temp_repo` in `scripts/benchmark.py`:

```python
scripts/benchmark.py
<<<<<<< ORIGINAL
=======
def create_temp_repo(dirname):
    with TemporaryDirectory() as tempdir:
        # Copy all files from dirname to tempdir
        for item in os.listdir(dirname):
            s = os.path.join(dirname, item)
            d = os.path.join(tempdir, item)
            if os.path.isdir(s):
                shutil.copytree(s, d, False, None)
            else:
                shutil.copy2(s, d)

        # Copy .docs subdir to tempdir as 'docs'
        docs_src = os.path.join(dirname, ".docs")
        docs_dst = os.path.join(tempdir, "docs")
        shutil.copytree(docs_src, docs_dst, False, None)

        # Create a new git repo in tempdir
        repo = Repo.init(tempdir)

        # Add all copied files to the repo
        repo.git.add(A=True)

        # Commit with message "initial"
        repo.git.commit(m="initial")

    return tempdir
>>>>>>> UPDATED
```

Finally, let's call the `create_temp_repo` function with the command-line argument in the `__main__` block:

```python
scripts/benchmark.py
<<<<<<< ORIGINAL
=======
if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("Usage: python benchmark.py <dirname>")
        sys.exit(1)

    dirname = sys.argv[1]
    temp_repo_path = create_temp_repo(dirname)
    print(f"Temporary repo created at: {temp_repo_path}")
>>>>>>> UPDATED
```

Now, you can run the script with the command `python scripts/benchmark.py <dirname>`, where `<dirname>` is the directory you want to create a temporary repo for.
2023-06-23 13:55:04 -07:00
Paul Gauthier
fb2f3ba6c2 Added new files to the git repo: scripts/benchmark.py 2023-06-23 13:50:19 -07:00
Paul Gauthier
f1350f169f refac 2023-06-20 16:59:55 -07:00
Paul Gauthier
ba4c2cf981 Fixed versionbump.py to raise an error message with the invalid version string. 2023-06-17 07:25:34 -07:00
Paul Gauthier
adaf2e55be aider: Updated versionbump.py script to ensure that new_version is a 3-piece semver.
# Context:
USER: make sure `new_version` is a 3 piece semver
ASSISTANT: I will update the `scripts/versionbump.py` script to ensure that `new_version` is a 3-piece semver.

```python
scripts/versionbump.py
<<<<<<< ORIGINAL
    new_version = version.parse(args.new_version)
    if not isinstance(new_version, version.Version):
        raise ValueError("Invalid version format")
=======
    new_version_str = args.new_version
    if not re.match(r'^\d+\.\d+\.\d+$', new_version_str):
        raise ValueError("Invalid version format, must be x.y.z")

    new_version = version.parse(new_version_str)
>>>>>>> UPDATED
```

Now the script will check if the provided `new_version` is in the x.y.z format before proceeding.
2023-06-17 07:24:42 -07:00
Paul Gauthier
1aa8699e15 Updated versionbump.py to include the new version in the error message and print the updated content when running in dry-run mode. 2023-06-17 07:24:11 -07:00
Paul Gauthier
2b1fab43a1 aider: Added a --dry-run argument to the scripts/versionbump.py script to print each step without actually modifying the __init__.py file or running the git commands.
# Context:
USER: add a --dry-run arg that just prints each step, so it won't overwrite __init__.py or actually rnu the git cmds
ASSISTANT: I will add a `--dry-run` argument to the `scripts/versionbump.py` script. When this argument is provided, the script will print each step without actually modifying the `__init__.py` file or running the git commands.

Here are the changes:

```python
scripts/versionbump.py
<<<<<<< ORIGINAL
def main():
    parser = argparse.ArgumentParser(description="Bump version")
    parser.add_argument("new_version", help="New version in x.y.z format")
=======
def main():
    parser = argparse.ArgumentParser(description="Bump version")
    parser.add_argument("new_version", help="New version in x.y.z format")
    parser.add_argument("--dry-run", action="store_true", help="Print each step without actually executing them")
>>>>>>> UPDATED

scripts/versionbump.py
<<<<<<< ORIGINAL
    args = parser.parse_args()
=======
    args = parser.parse_args()
    dry_run = args.dry_run
>>>>>>> UPDATED

scripts/versionbump.py
<<<<<<< ORIGINAL
    with open("aider/__init__.py", "w") as f:
        f.write(updated_content)
=======
    if dry_run:
        print("Updating aider/__init__.py with new version")
    else:
        with open("aider/__init__.py", "w") as f:
            f.write(updated_content)
>>>>>>> UPDATED

scripts/versionbump.py
<<<<<<< ORIGINAL
    subprocess.run(["git", "add", "aider/__init__.py"], check=True)
    subprocess.run(["git", "commit", "-m", f"version bump to {new_version}"], check=True)
    subprocess.run(["git", "tag", f"v{new_version}"], check=True)
    subprocess.run(["git", "push", "origin"], check=True)
    subprocess.run(["git", "push", "origin", f"v{new_version}"], check=True)
=======
    git_commands = [
        ["git", "add", "aider/__init__.py"],
        ["git", "commit", "-m", f"version bump to {new_version}"],
        ["git", "tag", f"v{new_version}"],
        ["git", "push", "origin"],
        ["git", "push", "origin", f"v{new_version}"],
    ]

    for cmd in git_commands:
        if dry_run:
            print(f"Running: {' '.join(cmd)}")
        else:
            subprocess.run(cmd, check=True)
>>>>>>> UPDATED
```

Now you can run the script with the `--dry-run` argument to see the steps without actually executing them:

```bash
python scripts/versionbump.py x.y.z --dry-run
```
2023-06-17 07:22:45 -07:00
Paul Gauthier
2181923859 aider: Added check=True parameter to subprocess.run() calls in scripts/versionbump.py to raise CalledProcessError exception if any of the git commands fail.
# Context:
USER: will those `subprocess` calls raise exceptions if the git commands error?
ASSISTANT: Yes, by default, the `subprocess.run()` function will not raise an exception if the command returns a non-zero exit code. However, you can add the `check=True` parameter to the `subprocess.run()` calls to make them raise a `CalledProcessError` exception if the command returns a non-zero exit code. Here's the updated `scripts/versionbump.py` with the `check=True` parameter added:

```python
scripts/versionbump.py
<<<<<<< ORIGINAL
    subprocess.run(["git", "add", "aider/__init__.py"])
    subprocess.run(["git", "commit", "-m", f"version bump to {new_version}"])
    subprocess.run(["git", "tag", f"v{new_version}"])
    subprocess.run(["git", "push", "origin"])
    subprocess.run(["git", "push", "origin", f"v{new_version}"])
=======
    subprocess.run(["git", "add", "aider/__init__.py"], check=True)
    subprocess.run(["git", "commit", "-m", f"version bump to {new_version}"], check=True)
    subprocess.run(["git", "tag", f"v{new_version}"], check=True)
    subprocess.run(["git", "push", "origin"], check=True)
    subprocess.run(["git", "push", "origin", f"v{new_version}"], check=True)
>>>>>>> UPDATED
```

With these changes, if any of the git commands fail, the script will raise a `CalledProcessError` exception and terminate.
2023-06-17 07:20:58 -07:00
Paul Gauthier
25ae54f6bf aider: Updated versionbump.py script to handle version bumping, git commit, tag, and push.
# Context:
USER: write a dcript that takes x.y.z semver on the cmd line. it should:
1. verify that the version is greater than `__version__`
2. wupdate the `__version__` in init.py
3. git commit that change with msg `version bump to x.y.z`
4. git tag that new commit with "vx.y.z" (note the leading v)
5. git push to origin
6. git push the new tag to origin

ASSISTANT: I will create a new script called `scripts/versionbump.py` to handle the version bumping process. Here are the changes:

```python
scripts/versionbump.py
<<<<<<< ORIGINAL
=======
import argparse
import os
import re
import subprocess
from packaging import version

def main():
    parser = argparse.ArgumentParser(description="Bump version")
    parser.add_argument("new_version", help="New version in x.y.z format")
    args = parser.parse_args()

    new_version = version.parse(args.new_version)
    if not isinstance(new_version, version.Version):
        raise ValueError("Invalid version format")

    with open("aider/__init__.py", "r") as f:
        content = f.read()

    current_version = re.search(r'__version__ = "(.+?)"', content).group(1)
    if new_version <= version.parse(current_version):
        raise ValueError("New version must be greater than the current version")

    updated_content = re.sub(r'__version__ = ".+?"', f'__version__ = "{new_version}"', content)

    with open("aider/__init__.py", "w") as f:
        f.write(updated_content)

    subprocess.run(["git", "add", "aider/__init__.py"])
    subprocess.run(["git", "commit", "-m", f"version bump to {new_version}"])
    subprocess.run(["git", "tag", f"v{new_version}"])
    subprocess.run(["git", "push", "origin"])
    subprocess.run(["git", "push", "origin", f"v{new_version}"])

if __name__ == "__main__":
    main()
>>>>>>> UPDATED
```

This script will perform the requested actions. Make sure to install the `packaging` library if you haven't already:

```bash
pip install packaging
```

You can run the script with the new version as an argument:

```bash
python scripts/versionbump.py x.y.z
```
2023-06-17 07:20:02 -07:00
Paul Gauthier
6f5496d201 Added new files to the git repo: scripts/versionbump.py 2023-06-17 07:17:05 -07:00