Commit graph

96 commits

Author SHA1 Message Date
Paul Gauthier
ffaa1a03d6 aider: Add logic to compare commit dates of main and origin/main and print a message explaining which one is behind.
# Aider chat conversation:

USER: if main != origin/main, explain which one is behind

ASSISTANT: To implement this feature, we need to modify `scripts/versionbump.py`. We will add additional logic to the `check_main_branch_up_to_date` function to compare the commit dates of `main` and `origin/main` and print a message explaining which one is behind.

Here is the *SEARCH/REPLACE* block for the changes:

scripts/versionbump.py
```python
<<<<<<< SEARCH
        if local_main != origin_main:
            print("Error: The main branch is not up to date with origin/main. Please pull the latest changes.")
            sys.exit(1)
=======
        if local_main != origin_main:
            local_date = subprocess.run(["git", "show", "-s", "--format=%ci", "main"], capture_output=True, text=True).stdout.strip()
            origin_date = subprocess.run(["git", "show", "-s", "--format=%ci", "origin/main"], capture_output=True, text=True).stdout.strip()
            local_date = datetime.datetime.strptime(local_date, "%Y-%m-%d %H:%M:%S %z")
            origin_date = datetime.datetime.strptime(origin_date, "%Y-%m-%d %H:%M:%S %z")
            if local_date < origin_date:
                print("Error: The local main branch is behind origin/main. Please pull the latest changes.")
            elif local_date > origin_date:
                print("Error: The origin/main branch is behind the local main branch. Please push your changes.")
            else:
                print("Error: The main branch and origin/main have diverged.")
            sys.exit(1)
>>>>>>> REPLACE
```

Please note that we need to import the `datetime` module at the beginning of the file to use `datetime.datetime.strptime`. Here is the *SEARCH/REPLACE* block for adding the import:

scripts/versionbump.py
```python
<<<<<<< SEARCH
import argparse
import re
import subprocess
import sys
=======
import argparse
import datetime
import re
import subprocess
import sys
>>>>>>> REPLACE
```

These changes will compare the commit dates and print a message explaining which branch is behind if they are not in sync.
2023-11-17 15:50:37 -08:00
Paul Gauthier
21b80d0c06 aider: Added logging to print out the commit hashes for local_main and origin_main before the comparison to diagnose the issue with the script reporting that the main branch is not up to date with origin/main even though it is.
# Aider chat conversation:

USER: it's printing Error: The main branch is not up to date with origin/main. even though main is up to date with origin/main

ASSISTANT: To address the issue you're experiencing with the script reporting that the main branch is not up to date with `origin/main` even though it is, we should add additional logging to the script to help diagnose the problem. We can print out the commit hashes for `local_main` and `origin_main` before the comparison to see what the script is actually getting from the `git` commands.

Let's modify the `scripts/versionbump.py` file to add this logging.

Here is the *SEARCH/REPLACE* block:

scripts/versionbump.py
```python
<<<<<<< SEARCH
        local_main = subprocess.run(["git", "rev-parse", "main"], capture_output=True, text=True).stdout.strip()
        origin_main = subprocess.run(["git", "rev-parse", "origin/main"], capture_output=True, text=True).stdout.strip()
        if local_main != origin_main:
            print("Error: The main branch is not up to date with origin/main.")
=======
        local_main = subprocess.run(["git", "rev-parse", "main"], capture_output=True, text=True).stdout.strip()
        print(f"Local main commit hash: {local_main}")
        origin_main = subprocess.run(["git", "rev-parse", "origin/main"], capture_output=True, text=True).stdout.strip()
        print(f"Origin main commit hash: {origin_main}")
        if local_main != origin_main:
            print("Error: The main branch is not up to date with origin/main. Please pull the latest changes.")
>>>>>>> REPLACE
```

This change will print out the commit hashes for both `local_main` and `origin_main` before the script checks if they are the same. This should help you diagnose why the script thinks the branches are not in sync. If the hashes are indeed the same, but the script still reports an error, it could be an issue with the script's logic or the environment in which it's being run.
2023-11-17 15:48:59 -08:00
Paul Gauthier
52fcdc4b09 aider: Add Git checks before version bumping.
# Aider chat conversation:

USER: before changing the repo, check that we are on the main branch, check that the working dir is not dirty, fetch the latest changes from origin and confirm that the main branch is up to date (don't merge it though). if any of these fail, exit with an error.

ASSISTANT: To implement these checks in the `scripts/versionbump.py` file, we will need to add the necessary Git operations before proceeding with the version bumping logic. Here are the steps we will follow:

1. Import the `sys` module to exit the script with an error if needed.
2. Add a function to check the current Git branch and ensure it is 'main'.
3. Add a function to check if the working directory is clean.
4. Add a function to fetch the latest changes from the origin and check if the 'main' branch is up to date.
5. Call these functions at the beginning of the `main()` function.

Here are the *SEARCH/REPLACE* blocks for the changes:

scripts/versionbump.py
```python
<<<<<<< SEARCH
import argparse
import re
import subprocess
=======
import argparse
import re
import subprocess
import sys
>>>>>>> REPLACE
```

scripts/versionbump.py
```python
<<<<<<< SEARCH
    args = parser.parse_args()
    dry_run = args.dry_run
=======
    # Function to check if we are on the main branch
    def check_branch():
        branch = subprocess.run(["git", "rev-parse", "--abbrev-ref", "HEAD"], capture_output=True, text=True).stdout.strip()
        if branch != "main":
            print("Error: Not on the main branch.")
            sys.exit(1)

    # Function to check if the working directory is clean
    def check_working_directory_clean():
        status = subprocess.run(["git", "status", "--porcelain"], capture_output=True, text=True).stdout
        if status:
            print("Error: Working directory is not clean.")
            sys.exit(1)

    # Function to fetch the latest changes and check if the main branch is up to date
    def check_main_branch_up_to_date():
        subprocess.run(["git", "fetch", "origin"], check=True)
        local_main = subprocess.run(["git", "rev-parse", "main"], capture_output=True, text=True).stdout.strip()
        origin_main = subprocess.run(["git", "rev-parse", "origin/main"], capture_output=True, text=True).stdout.strip()
        if local_main != origin_main:
            print("Error: The main branch is not up to date with origin/main.")
            sys.exit(1)

    args = parser.parse_args()
    dry_run = args.dry_run

    # Perform checks before proceeding
    check_branch()
    check_working_directory_clean()
    check_main_branch_up_to_date()
>>>>>>> REPLACE
```

These changes will ensure that the script checks for the current branch, the cleanliness of the working directory, and whether the 'main' branch is up to date with the origin before proceeding with the version bumping process. If any of these checks fail, the script will exit with an error message.
2023-11-17 15:41:43 -08:00
Paul Gauthier
360e008964 make versionbump executable 2023-10-18 09:35:32 -07:00
Paul Gauthier
c24c9d33a5 Fixed comment in -dev bump 2023-08-02 16:23:34 -03:00
Paul Gauthier
ece45c7dc2 Bugfix versionbump 2023-07-24 15:12:15 -03:00
Paul Gauthier
2d0f789cb9 aider: Increment the version by 0.0.1 and add "-dev" after the version bump.
# Aider chat conversation:

USER: why is it thinking that 0.9.0 is newer than 0.9.0-dev

ASSISTANT: The version comparison is being done using the `packaging.version.parse` function. This function follows the PEP 440 version identification and comparison rules. According to PEP 440, a version like "0.9.0-dev" is considered a pre-release of "0.9.0", and therefore "0.9.0" is considered newer.

If you want "0.9.0-dev" to be considered newer than "0.9.0", you would need to change the version comparison logic. However, this would be against the standard Python versioning rules and is not recommended.

If you still want to proceed with this, please confirm and I will provide the necessary changes.

USER: I added these *read-write* files: scripts/versionbump.py

ASSISTANT: I understand that you want to modify the version comparison logic in your scripts. However, I would like to clarify where exactly you want this change to be made.

The file `scripts/versionbump.py` does not seem to have any version comparison logic that would consider "0.9.0
^C KeyboardInterrupt

USER: instead of adding -dev into the version after the bump, can you instead increment the version by 0.0.1 and then add dev

ASSISTANT: Sure, we can modify the `scripts/versionbump.py` script to increment the version by 0.0.1 and then add "-dev" to it. Here's how we can do it:

1. After the new version is parsed, we can increment the patch version by 1.
2. Then, we can add "-dev" to this incremented version.

Here's the change:

```python
scripts/versionbump.py
<<<<<<< ORIGINAL
    new_version = version.parse(new_version_str)

    with open("aider/__init__.py", "r") as f:
        content = f.read()
=======
    new_version = version.parse(new_version_str)
    incremented_version = version.Version(f"{new_version.major}.{new_version.minor}.{new_version.micro + 1}")

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

```python
scripts/versionbump.py
<<<<<<< ORIGINAL
    updated_dev_content = re.sub(
        r'__version__ = ".+?"', f'__version__ = "{new_version}-dev"', content
    )
=======
    updated_dev_content = re.sub(
        r'__version__ = ".+?"', f'__version__ = "{incremented_version}-dev"', content
    )
>>>>>>> UPDATED
```

This will increment the patch version by 0.0.1 and then add "-dev" to it after the version bump.
2023-07-20 09:48:11 -03:00
Paul Gauthier
aab636f4e9 print 2023-07-11 18:42:27 -07:00
Paul Gauthier
410769ba9b cleanup 2023-07-11 18:41:46 -07:00
Paul Gauthier
86a418d899 print even when dry_run 2023-07-11 18:38:52 -07:00
Paul Gauthier
cace9675b0 aider: The current version is now parsed and the "-dev" suffix is ignored.
# Aider chat conversation:

USER: we need to parse `current_version` and ignore the -dev if it is present

ASSISTANT: To implement this, we need to modify the `scripts/versionbump.py` file.

Here is the proposed change:

```python
scripts/versionbump.py
<<<<<<< ORIGINAL
    current_version = re.search(r'__version__ = "(.+?)"', content).group(1)
    if new_version <= version.parse(current_version):
        raise ValueError(
            f"New version {new_version} must be greater than the current version {current_version}"
        )
=======
    current_version = re.search(r'__version__ = "(.+?)"', content).group(1).split('-dev')[0]
    if new_version <= version.parse(current_version):
        raise ValueError(
            f"New version {new_version} must be greater than the current version {current_version}"
        )
>>>>>>> UPDATED
```

This change will ensure that the '-dev' suffix is discarded when parsing the `current_version`.
2023-07-11 18:36:54 -07:00
Paul Gauthier
54939d5f6c aider: Set version to x.y.z-dev and push to origin.
# Aider chat conversation:

USER: I did `git reset --hard HEAD~1` to discard the last edits.

ASSISTANT: Okay, that command will undo the last commit and discard the changes. If you need to make any further changes or need assistance with anything else, feel free to ask.

USER: we need to commit __init__ with x.y.z, tag it, push it. and THEN write a new __init__ with the -dev version, and then commit that.

ASSISTANT: Understood. We need to modify the `scripts/versionbump.py` file to implement this.

Here are the proposed changes:

```python
scripts/versionbump.py
<<<<<<< ORIGINAL
    updated_content = re.sub(r'__version__ = ".+?"', f'__version__ = "{new_version}"', content)

    if dry_run:
        print("Updating aider/__init__.py with new version:")
        print(updated_content)
    else:
        with open("aider/__init__.py", "w") as f:
            f.write(updated_content)

    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}"],
    ]
=======
    updated_content = re.sub(r'__version__ = ".+?"', f'__version__ = "{new_version}"', content)

    if dry_run:
        print("Updating aider/__init__.py with new version:")
        print(updated_content)
    else:
        with open("aider/__init__.py", "w") as f:
            f.write(updated_content)

    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_dev_content = re.sub(r'__version__ = ".+?"', f'__version__ = "{new_version}-dev"', content)

    if dry_run:
        print("Updating aider/__init__.py with new dev version:")
        print(updated_dev_content)
    else:
        with open("aider/__init__.py", "w") as f:
            f.write(updated_dev_content)

    git_commands_dev = [
        ["git", "add", "aider/__init__.py"],
        ["git", "commit", "-m", f"set version to {new_version}-dev"],
        ["git", "push", "origin"],
    ]

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

These changes will ensure that the version in `aider/__init__.py` is set to 'x.y.z', committed, tagged, and pushed. Then, it will be updated to 'x.y.z-dev', committed, and pushed.
2023-07-11 18:36:02 -07:00
Paul Gauthier
095f47593d run unit tests inside docker for safety 2023-06-26 20:37:55 -07:00
Paul Gauthier
d13ff918de aider: Refactor unit tests to run using docker python3.8 and mount only the file being run.
# Context:
USER: run the unit tests using docker python3.8 mounting just the file being run
2023-06-26 20:18:03 -07:00
Paul Gauthier
4d3c77332f ssh typer 2023-06-26 20:15:42 -07:00
Paul Gauthier
dd30cb34ed refac 2023-06-26 20:11:41 -07:00
Paul Gauthier
5c8546c140 sssh typer 2023-06-26 16:48:15 -07:00
Paul Gauthier
307f3a4da4 Just HH-MM 2023-06-26 16:36:50 -07:00
Paul Gauthier
9e91a392c4 aider: Switched the script to use typer and returned a file listing.
# Context:
USER: switch this script to typer
USER: return a file listing
2023-06-26 16:33:55 -07:00
Paul Gauthier
3c557a00af refac 2023-06-26 16:28:33 -07:00
Paul Gauthier
38f7b36bb1 improved error/ask reporting 2023-06-26 11:11:12 -07:00
Paul Gauthier
651b1293c3 tweaks 2023-06-26 10:51:06 -07:00
Paul Gauthier
2c7960ae26 prefix date/time on benchmark dirs 2023-06-26 10:46:30 -07:00
Paul Gauthier
1370da14fb track and report errors/asks during benchmarking 2023-06-26 10:33:16 -07:00
Paul Gauthier
819b8b2672 tolerate missing final newline 2023-06-25 21:27:18 -07:00
Paul Gauthier
dc535a2aa0 aider: Updated summarize_results function to display remaining time in MM:SS format.
# Context:
USER: show MM:SS remaining
ASSISTANT: To show the remaining time in MM:SS format, you need to modify the `summarize_results` function in the `scripts/benchmark.py` file. Update the `remaining` variable calculation and its print statement.

```python
scripts/benchmark.py
<<<<<<< ORIGINAL
    avg_duration = duration / completed_tests
    remaining = (total_tests - completed_tests) * avg_duration

    console.print(f"duration: {avg_duration:.1f} sec/test-case, {remaining:.0f} sec remaining")
=======
    avg_duration = duration / completed_tests
    remaining_seconds = (total_tests - completed_tests) * avg_duration
    remaining_minutes, remaining_seconds = divmod(remaining_seconds, 60)

    console.print(f"duration: {avg_duration:.1f} sec/test-case, {remaining_minutes:.0f}:{remaining_seconds:02.0f} remaining")
>>>>>>> UPDATED
```

This change will display the remaining time in MM:SS format.
2023-06-25 21:22:55 -07:00
Paul Gauthier
f836a4b760 show remaining 2023-06-25 20:59:03 -07:00
Paul Gauthier
de2808f742 Updated benchmark instructions 2023-06-25 18:01:48 -07:00
Paul Gauthier
e535f163a9 Updated benchmarking instructions 2023-06-25 17:54:41 -07:00
Paul Gauthier
6b2024a58a ssh 2023-06-25 15:55:27 -07:00
Paul Gauthier
68640c9bb2 Record commit_hash 2023-06-25 15:46:15 -07:00
Paul Gauthier
976f84bac5 noop 2023-06-25 14:49:25 -07:00
Paul Gauthier
bce898edfb summary layout 2023-06-25 14:13:00 -07:00
Paul Gauthier
0650db2ee7 print the benchmark dirname 2023-06-25 13:59:19 -07:00
Paul Gauthier
78bc901a04 noop 2023-06-25 13:30:38 -07:00
Paul Gauthier
0c3d4198f5 Show variants 2023-06-25 13:18:43 -07:00
Paul Gauthier
5b57024c84 cleanup --stats output 2023-06-25 08:42:06 -07:00
Paul Gauthier
c5a232eeaf Added --stats-only 2023-06-25 08:33:24 -07:00
Paul Gauthier
5eaa50fe6c added --num-tests 2023-06-25 08:30:14 -07:00
Paul Gauthier
e0e680e781 prettier test report 2023-06-24 20:54:47 -07:00
Paul Gauthier
436d0dd774 restore the original file, in case we interrupted a prev run 2023-06-24 20:44:37 -07:00
Paul Gauthier
5c3a635eed added --threads for speed 2023-06-24 20:41:35 -07:00
Paul Gauthier
5b4fbd9901 refac 2023-06-24 20:30:58 -07:00
Paul Gauthier
37c282c7f3 remove chdir 2023-06-24 20:28:59 -07:00
Paul Gauthier
959861ee2e refac 2023-06-24 20:22:10 -07:00
Paul Gauthier
6172a70ed3 undo refac 2023-06-24 20:10:26 -07:00
Paul Gauthier
a5746d9e54 removed threading 2023-06-24 15:59:50 -07:00
Paul Gauthier
197d8fe057 Tell gpt to only use std libraries in the benchmark 2023-06-24 15:56:03 -07:00
Paul Gauthier
a1f4ae6a07 Stronger prompt 2023-06-24 15:49:26 -07:00
Paul Gauthier
81b1916c6a added --verbose 2023-06-24 14:53:32 -07:00