aider/scripts/versionbump.py
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

113 lines
3.9 KiB
Python
Executable file

#!/usr/bin/env python
import argparse
import re
import subprocess
import sys
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")
parser.add_argument(
"--dry-run", action="store_true", help="Print each step without actually executing them"
)
# 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()
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.")
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()
new_version_str = args.new_version
if not re.match(r"^\d+\.\d+\.\d+$", new_version_str):
raise ValueError(f"Invalid version format, must be x.y.z: {new_version_str}")
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()
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}"
)
updated_content = re.sub(r'__version__ = ".+?"', f'__version__ = "{new_version}"', content)
print("Updating aider/__init__.py with new version:")
print(updated_content)
if not dry_run:
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:
print(f"Running: {' '.join(cmd)}")
if not dry_run:
subprocess.run(cmd, check=True)
updated_dev_content = re.sub(
r'__version__ = ".+?"', f'__version__ = "{incremented_version}-dev"', content
)
print()
print("Updating aider/__init__.py with new dev version:")
print(updated_dev_content)
if not dry_run:
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 {incremented_version}-dev"],
["git", "push", "origin"],
]
for cmd in git_commands_dev:
print(f"Running: {' '.join(cmd)}")
if not dry_run:
subprocess.run(cmd, check=True)
if __name__ == "__main__":
main()