From bd1c8b625d2ae15d833aa024a9325cecebf289f3 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Thu, 4 Jan 2024 12:25:43 -0800 Subject: [PATCH] aider: Add --check-update to make aider check for update and return status in the exit code. # Aider chat conversation: USER: add --check-update to make aider check for update and return status in the exit code. ASSISTANT: To implement the `--check-update` option, I will make the following changes: 1. Add the `--check-update` argument to the argument parser in `aider/main.py`. 2. Modify the `check_version` function in `aider/versioncheck.py` to return a boolean indicating whether an update is available. 3. Use the returned value from `check_version` in `aider/main.py` to set the exit status code when `--check-update` is used. Here are the diffs for those changes: ```diff --- aider/versioncheck.py +++ aider/versioncheck.py @@ ... @@ def check_version(print_cmd): try: response = requests.get("https://pypi.org/pypi/aider-chat/json") data = response.json() latest_version = data["info"]["version"] current_version = aider.__version__ - if packaging.version.parse(latest_version) <= packaging.version.parse(current_version): - return + is_update_available = packaging.version.parse(latest_version) > packaging.version.parse(current_version) - print_cmd(f"Newer version v{latest_version} is available. To upgrade, run:") - py = sys.executable - print_cmd(f"{py} -m pip install --upgrade aider-chat") + if is_update_available: + print_cmd(f"Newer version v{latest_version} is available. To upgrade, run:") + py = sys.executable + print_cmd(f"{py} -m pip install --upgrade aider-chat") + + return is_update_available except Exception as err: print_cmd(f"Error checking pypi for new version: {err}") + return False --- aider/main.py +++ aider/main.py @@ ... @@ other_group.add_argument( "--version", action="version", version=f"%(prog)s {__version__}", help="Show the version number and exit", ) + other_group.add_argument( + "--check-update", + action="store_true", + help="Check for updates and return status in the exit code", + default=False, + ) other_group.add_argument( "--apply", metavar="FILE", @@ ... @@ check_version(io.tool_error) + if args.check_update: + update_available = check_version(lambda msg: None) + sys.exit(0 if not update_available else 1) + if "VSCODE_GIT_IPC_HANDLE" in os.environ: args.pretty = False io.tool_output("VSCode terminal detected, pretty output has been disabled.") ``` These changes will add the `--check-update` option to the command-line interface and use the `check_version` function to determine if an update is available, exiting with status code `0` if no update is available and `1` if an update is available. USER: UnifiedDiffNoMatch: hunk failed to apply! aider/versioncheck.py does not contain lines that match the diff you provided! Try again. DO NOT skip blank lines, comments, docstrings, etc! The diff needs to apply cleanly to the lines in aider/versioncheck.py! aider/versioncheck.py does not contain these 17 exact lines in a row: ``` def check_version(print_cmd): try: response = requests.get("https://pypi.org/pypi/aider-chat/json") data = response.json() latest_version = data["info"]["version"] current_version = aider.__version__ if packaging.version.parse(latest_version) <= packaging.version.parse(current_version): return print_cmd(f"Newer version v{latest_version} is available. To upgrade, run:") py = sys.executable print_cmd(f"{py} -m pip install --upgrade aider-chat") except Exception as err: print_cmd(f"Error checking pypi for new version: {err}") -- aider/main.py ``` UnifiedDiffNoMatch: hunk failed to apply! aider/versioncheck.py does not contain lines that match the diff you provided! Try again. DO NOT skip blank lines, comments, docstrings, etc! The diff needs to apply cleanly to the lines in aider/versioncheck.py! aider/versioncheck.py does not contain these 9 exact lines in a row: ``` other_group.add_argument( "--version", action="version", version=f"%(prog)s {__version__}", help="Show the version number and exit", ) other_group.add_argument( "--apply", metavar="FILE", ``` UnifiedDiffNoMatch: hunk failed to apply! aider/versioncheck.py does not contain lines that match the diff you provided! Try again. DO NOT skip blank lines, comments, docstrings, etc! The diff needs to apply cleanly to the lines in aider/versioncheck.py! aider/versioncheck.py does not contain these 5 exact lines in a row: ``` check_version(io.tool_error) if "VSCODE_GIT_IPC_HANDLE" in os.environ: args.pretty = False io.tool_output("VSCode terminal detected, pretty output has been disabled.") ``` ASSISTANT: I apologize for the confusion. Let's try again with the correct diffs. Here are the diffs for the changes to `aider/versioncheck.py` and `aider/main.py`: ```diff --- aider/versioncheck.py +++ aider/versioncheck.py @@ ... @@ import sys import packaging.version import requests import aider def check_version(print_cmd): try: response = requests.get("https://pypi.org/pypi/aider-chat/json") data = response.json() latest_version = data["info"]["version"] current_version = aider.__version__ - if packaging.version.parse(latest_version) <= packaging.version.parse(current_version): - return + is_update_available = packaging.version.parse(latest_version) > packaging.version.parse(current_version) - print_cmd(f"Newer version v{latest_version} is available. To upgrade, run:") - py = sys.executable - print_cmd(f"{py} -m pip install --upgrade aider-chat") + if is_update_available: + print_cmd(f"Newer version v{latest_version} is available. To upgrade, run:") + py = sys.executable + print_cmd(f"{py} -m pip install --upgrade aider-chat") + + return is_update_available except Exception as err: print_cmd(f"Error checking pypi for new version: {err}") + return False ``` ```diff --- aider/main.py +++ aider/main.py @@ ... @@ other_group.add_argument( "--version", action="version", version=f"%(prog)s {__version__}", help="Show the version number and exit", ) + other_group.add_argument( + "--check-update", + action="store_true", + help="Check for updates and return status in the exit code", + default=False, + ) other_group.add_argument( "--apply", metavar="FILE", @@ ... @@ check_version(io.tool_error) + if args.check_update: + update_available = check_version(lambda msg: None) + sys.exit(0 if not update_available else 1) + if "VSCODE_GIT_IPC_HANDLE" in os.environ: args.pretty = False io.tool_output("VSCode terminal detected, pretty output has been disabled.") ``` These diffs should apply cleanly to the current contents of the files. The `check_version` function in `aider/versioncheck.py` now returns a boolean indicating whether an update is available, and `aider/main.py` has been updated to include the `--check-update` argument and to use the return value from `check_version` to set the exit status code. --- aider/main.py | 10 ++++++++++ aider/versioncheck.py | 13 ++++++++----- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/aider/main.py b/aider/main.py index db0d986e2..086fbaccd 100644 --- a/aider/main.py +++ b/aider/main.py @@ -353,6 +353,12 @@ def main(argv=None, input=None, output=None, force_git_root=None): version=f"%(prog)s {__version__}", help="Show the version number and exit", ) + other_group.add_argument( + "--check-update", + action="store_true", + help="Check for updates and return status in the exit code", + default=False, + ) other_group.add_argument( "--apply", metavar="FILE", @@ -472,6 +478,10 @@ def main(argv=None, input=None, output=None, force_git_root=None): check_version(io.tool_error) + if args.check_update: + update_available = check_version(lambda msg: None) + sys.exit(0 if not update_available else 1) + if "VSCODE_GIT_IPC_HANDLE" in os.environ: args.pretty = False io.tool_output("VSCode terminal detected, pretty output has been disabled.") diff --git a/aider/versioncheck.py b/aider/versioncheck.py index 3c4ff2811..59a83f79c 100644 --- a/aider/versioncheck.py +++ b/aider/versioncheck.py @@ -13,14 +13,17 @@ def check_version(print_cmd): latest_version = data["info"]["version"] current_version = aider.__version__ - if packaging.version.parse(latest_version) <= packaging.version.parse(current_version): - return + is_update_available = packaging.version.parse(latest_version) > packaging.version.parse(current_version) - print_cmd(f"Newer version v{latest_version} is available. To upgrade, run:") - py = sys.executable - print_cmd(f"{py} -m pip install --upgrade aider-chat") + if is_update_available: + print_cmd(f"Newer version v{latest_version} is available. To upgrade, run:") + py = sys.executable + print_cmd(f"{py} -m pip install --upgrade aider-chat") + + return is_update_available except Exception as err: print_cmd(f"Error checking pypi for new version: {err}") + return False if __name__ == "__main__":