Commit graph

2540 commits

Author SHA1 Message Date
Paul Gauthier
66da82094d use index.entries 2023-07-24 13:47:33 -03:00
Paul Gauthier
df096272bc aider: Refactored get_tracked_files method to use index.entries instead of index.diff to enumerate staged files.
# Aider chat conversation:

USER: is there any way to enumerate the staged files using the index besides index.diff

ASSISTANT: Yes, you can enumerate the staged files using the `index.entries` property of the `IndexFile` object. This property returns a dictionary-like object where the keys are the file paths and the values are `IndexEntry` objects.

Here's how you can modify the `get_tracked_files` method in the `GitRepo` class to use `index.entries` instead of `index.diff`:

```python
aider/repo.py
<<<<<<< ORIGINAL
    def get_tracked_files(self):
        if not self.repo:
            return []

        try:
            commit = self.repo.head.commit
        except ValueError:
            commit = None

        files = []
        if commit:
            for blob in commit.tree.traverse():
                if blob.type == "blob":  # blob is a file
                    files.append(blob.path)

        # Add staged files
        index = self.repo.index
        staged_files = [item.a_path for item in index.diff(None)]
        dump(staged_files)
        files.extend(staged_files)

        # convert to appropriate os.sep, since git always normalizes to /
        res = set(str(Path(PurePosixPath(path))) for path in files)

        return res
=======
    def get_tracked_files(self):
        if not self.repo:
            return []

        try:
            commit = self.repo.head.commit
        except ValueError:
            commit = None

        files = []
        if commit:
            for blob in commit.tree.traverse():
                if blob.type == "blob":  # blob is a file
                    files.append(blob.path)

        # Add staged files
        index = self.repo.index
        staged_files = [str(Path(PurePosixPath(path))) for path in index.entries.keys()]
        dump(staged_files)
        files.extend(staged_files)

        # convert to appropriate os.sep, since git always normalizes to /
        res = set(str(Path(PurePosixPath(path))) for path in files)

        return res
>>>>>>> UPDATED
```

This change will make the `get_tracked_files` method return all files in the index, not just the ones that have been modified. If you only want to get the files that have been modified, you should stick with using `index.diff`.
2023-07-24 13:45:10 -03:00
Paul Gauthier
f87ec8c38b Refactor getting staged files to handle ValueError. 2023-07-24 13:44:22 -03:00
Paul Gauthier
89542d2139 aider: Handle the case where the repository has never had any commits by using index.diff(None) to get the staged files.
# Aider chat conversation:

USER: index.diff("HEAD") fails when the repo has never had any commits

ASSISTANT: To handle the case where the repository has never had any commits, we can add a try-except block around the `index.diff("HEAD")` call in the `get_tracked_files` method of the `GitRepo` class in the `aider/repo.py` file. If a `git.exc.BadName` exception is raised, we can assume that there are no commits and return an empty list for the staged files.

Here is the proposed change:

```python
aider/repo.py
<<<<<<< ORIGINAL
        # Add staged files
        index = self.repo.index
        staged_files = [item.a_path for item in index.diff("HEAD")]
        files.extend(staged_files)
=======
        # Add staged files

^C KeyboardInterrupt

USER: there can be staged files when there are not commits

ASSISTANT: You're correct. If there are no commits, `index.diff("HEAD")` will fail, but there can still be staged files. We can use `index.diff(None)` to get the staged files in this case. Here's the proposed change:

```python
aider/repo.py
<<<<<<< ORIGINAL
        # Add staged files
        index = self.repo.index
        staged_files = [item.a_path for item in index.diff("HEAD")]
        files.extend(staged_files)
=======
        # Add staged files
        index = self.repo.index
        try:
            staged_files = [item.a_path for item in index.diff("HEAD")]
        except git.exc.BadName:
            staged_files = [item.a_path for item in index.diff(None)]
        files.extend(staged_files)
>>>>>>> UPDATED
```
2023-07-24 13:43:05 -03:00
Paul Gauthier
bef1d00ab1 Refactor test_get_tracked_files_with_new_staged_file to use a GitTemporaryDirectory and add new assertions. 2023-07-24 13:42:05 -03:00
Paul Gauthier
85166341d1 aider: Add staged files to the list of tracked files in the get_tracked_files method.
# Aider chat conversation:

USER: doing commit.tree.traverse() is not picking up files which have been git added but not yet committed

ASSISTANT: To include files that have been staged but not yet committed, you need to use the `git diff --cached` command. This command shows the changes between the index and your last commit; in other words, what you would be committing if you run "git commit" without "-a" option.

However, this change requires modification of the `aider/repo.py` file, which is currently read-only. Could you please make it read-write so that I can propose the necessary changes?

USER: I added these *read-write* files: aider/repo.py

ASSISTANT: Great, now that we have write access to `aider/repo.py`, we can modify the `get_tracked_files` method to include files that have been staged but not yet committed.

Here are the steps:

1. We will use the `git diff --cached --name-only` command to get a list of staged files. This command lists the file names that have been added (staged) but not yet committed.

2. We will add these staged files to the list of tracked files.

Here is the *edit block* for the changes:

```python
aider/repo.py
<<<<<<< ORIGINAL
    def get_tracked
^C KeyboardInterrupt

USER: is there a way to use traverse?

ASSISTANT: Yes, you can use the `git.IndexFile` object to traverse the staged files. The `IndexFile` object represents the git index, which is where files are staged before they are committed.

Here are the steps:

1. Get the `IndexFile` object from the `Repo` object.
2. Traverse the `IndexFile` object to get the staged files.

Here is the *edit block* for the changes:

```python
aider/repo.py
<<<<<<< ORIGINAL
    def get_tracked_files(self):
        if not self.repo:
            return []

        try:
            commit = self.repo.head.commit
        except ValueError:
            return set()

        files = []
        for blob in commit.tree.traverse():
            if blob.type == "blob":  # blob is a file
                files.append(blob.path)

        # convert to appropriate os.sep, since git always normalizes to /
        res = set(str(Path(PurePosixPath(path))) for path in files)

        return res
=======
    def get_tracked_files(self):
        if not self.repo:
            return []

        try:
            commit = self.repo.head.commit
        except ValueError:
            return set()

        files = []
        for blob in commit.tree.traverse():
            if blob.type == "blob":  # blob is a file
                files.append(blob.path)

        # Add staged files
        index = self.repo.index
        staged_files = [item.a_path for item in index.diff("HEAD")]
        files.extend(staged_files)

        # convert to appropriate os.sep, since git always normalizes to /
        res = set(str(Path(PurePosixPath(path))) for path in files)

        return res
>>>>>>> UPDATED
```

This change will ensure that the `get_tracked_files` method returns both committed and staged files.
2023-07-24 13:03:38 -03:00
Paul Gauthier
143ca36733 Merge branch 'main' into refactor-repo 2023-07-23 10:23:38 -03:00
paul-gauthier
f6e5f4c539
Merge pull request #131 from joshuavial/command-docs
More complete docs for prompt commands
2023-07-23 10:23:10 -03:00
Paul Gauthier
4238986991 Updated HISTORY 2023-07-23 10:16:48 -03:00
paul-gauthier
e2466333ad
Merge pull request #141 from paul-gauthier/issue-139
/add and /drop problems when cwd != git_root #139 #95
2023-07-23 10:08:24 -03:00
Paul Gauthier
699f1598fc Ignore errors (Windows) 2023-07-23 10:04:18 -03:00
Paul Gauthier
0a5155e5bd brought over test_cmd_add_from_subdir from pr #97 2023-07-23 10:00:00 -03:00
Paul Gauthier
450a5fff19 Added test case and fix for /drop too 2023-07-23 08:41:56 -03:00
Paul Gauthier
d785d9a2e2 fix for #139 2023-07-23 08:34:56 -03:00
Paul Gauthier
9352bc67ca Added test case for issue #139 2023-07-23 08:34:19 -03:00
Paul Gauthier
47b550c62f aider: Switched open calls to use Path.write_text.
# Aider chat conversation:

USER: also swith the open calls to use Path.write_text

ASSISTANT: To switch the `open` calls to use `Path.write_text` in `test_cmd_add_drop_directory`, we need to modify the `tests/test_commands.py` file. Here are the changes:

```python
tests/test_commands.py
<<<<<<< ORIGINAL
        with open(Path("test_dir/test_file1.txt"), "w") as f:
            f.write("Test file 1")
        with open(Path("test_dir/test_file2.txt"), "w") as f:
            f.write("Test file 2")
        with open(Path("test_dir/another_dir/test_file.txt"), "w") as f:
            f.write("Test file 3")
=======
        Path("test_dir/test_file1.txt").write_text("Test file 1")
        Path("test_dir/test_file2.txt").write_text("Test file 2")
        Path("test_dir/another_dir/test_file.txt").write_text("Test file 3")
>>>>>>> UPDATED
```

This change replaces the `open` calls with `Path().write_text()` from the pathlib module.
2023-07-23 08:19:17 -03:00
Paul Gauthier
d695fe103b aider: Switched all the os calls to use pathlib in test_cmd_add_drop_directory.
# Aider chat conversation:

USER: switch all the os calls to use pathlib in `test_cmd_add_drop_directory`

ASSISTANT: To switch all the os calls to use pathlib in `test_cmd_add_drop_directory`, we need to modify the `tests/test_commands.py` file. Here are the changes:

```python
tests/test_commands.py
<<<<<<< ORIGINAL
        # Create a directory and add files to it
        os.mkdir("test_dir")
        os.mkdir("test_dir/another_dir")
        with open("test_dir/test_file1.txt", "w") as f:
            f.write("Test file 1")
        with open("test_dir/test_file2.txt", "w") as f:
            f.write("Test file 2")
        with open("test_dir/another_dir/test_file.txt", "w") as f:
            f.write("Test file 3")
=======
        # Create a directory and add files to it using pathlib
        Path("test_dir").mkdir()
        Path("test_dir/another_dir").mkdir()
        with open(Path("test_dir/test_file1.txt"), "w") as f:
            f.write("Test file 1")
        with open(Path("test_dir/test_file2.txt"), "w") as f:
            f.write("Test file 2")
        with open(Path("test_dir/another_dir/test_file.txt"), "w") as f:
            f.write("Test file 3")
>>>>>>> UPDATED
```

This change replaces the `os.mkdir` calls with `Path().mkdir()` from the pathlib module. It also changes the file paths in the `open` calls to use `Path()`.
2023-07-23 08:18:34 -03:00
Paul Gauthier
9ab21d36a6 bugfix 2023-07-22 09:47:54 -03:00
Paul Gauthier
0e56ac6a70 Merge branch 'main' into refactor-repo 2023-07-22 09:42:39 -03:00
Paul Gauthier
0e9dbddfde set version to 0.10.0-dev 2023-07-22 09:02:19 -03:00
Paul Gauthier
a1ff22dc20 version bump to 0.10.0 2023-07-22 09:02:03 -03:00
Paul Gauthier
3ac98b3261 cleanup 2023-07-22 08:56:40 -03:00
Paul Gauthier
4e40c8ac15 make .gitignore before making repo 2023-07-22 08:51:57 -03:00
Paul Gauthier
61565b66e1 Updated HISTORY 2023-07-21 16:39:52 -03:00
Paul Gauthier
661a521693 aider.repo.simple_send_with_retries 2023-07-21 16:20:27 -03:00
Paul Gauthier
e2a32fec7e linting 2023-07-21 16:08:50 -03:00
Paul Gauthier
9f8ea93ce6 AiderRepo -> GitRepo 2023-07-21 16:08:27 -03:00
Paul Gauthier
7c1e3c1b6a cleanup 2023-07-21 16:00:19 -03:00
Paul Gauthier
c4a07f1f84 aider: The real get_commit_message is being replaced with a mock function in the test_main_with_empty_git_dir_new_file test.
# Aider chat conversation:

USER: the real `get_commit_message` is being called in `test_main_with_empty_git_dir_new_file`

ASSISTANT: To prevent the real `get_commit_message` from being called during the test `test_main_with_empty_git_dir_new_file`, we can use the `unittest.mock.patch` decorator to replace it with a mock function.

Here's how to do it:

```python
tests/test_main.py
<<<<<<< ORIGINAL
    def test_main_with_empty_git_dir_new_file(self):
        make_repo()
        main(["--yes", "foo.txt"], input=DummyInput(), output=DummyOutput())
        self.assertTrue(os.path.exists("foo.txt"))
=======
    @patch("aider.repo.AiderRepo.get_commit_message", return_value="mock commit message")
    def test_main_with_empty_git_dir_new_file(self, _):
        make_repo()
        main(["--yes", "foo.txt"], input=DummyInput(), output=DummyOutput())
        self.assertTrue(os.path.exists("foo.txt"))
>>>>>>> UPDATED
```

This change will replace the `get_commit_message` method with a mock that always returns "mock commit message" during the execution of `test_main_with_empty_git_dir_new_file`.
2023-07-21 15:59:13 -03:00
Paul Gauthier
dfb106d384 aider: Refactor the test_main_with_empty_dir_new_file function in tests/test_main.py to correctly mock the get_commit_message function.
# Aider chat conversation:

USER: I ran this command:

 pytest tests/test_main.py  -k test_main_with_empty_git_dir_new_file

And got this output:

============================= test session starts ==============================
platform darwin -- Python 3.11.3, pytest-7.3.1, pluggy-1.0.0
rootdir: /Users/gauthier/Projects/aider
configfile: pytest.ini
collected 9 items / 8 deselected / 1 selected

tests/test_main.py F                                                     [100%]

=================================== FAILURES ===================================
________________ TestMain.test_main_with_empty_git_dir_new_file ________________

self = <tests.test_main.TestMain testMethod=test_main_with_empty_git_dir_new_file>

    def test_main_with_empty_git_dir_new_file(self):
        make_repo()
>       main(["--yes", "foo.txt"], input=DummyInput(), output=DummyOutput())

tests/test_main.py:44:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
aider/main.py:452: in main
    coder.dirty_commit()
aider/coders/base_coder.py:850: in dirty_commit
    self.repo.commit(message=message)
aider/repo.py:64: in commit
    commit_message = self.get_commit_message(diffs, context)
aider/repo.py:110: in get_commit_message
    _hash, response = send_with_retries(
.venv/lib/python3.11/site-packages/backoff/_sync.py:105: in retry
    ret = target(*args, **kwargs)
aider/sendchat.py:43: in send_with_retries
    res = openai.ChatCompletion.create(**kwargs)
.venv/lib/python3.11/site-packages/openai/api_resources/chat_completion.py:25: in create
    return super().create(*args, **kwargs)
.venv/lib/python3.11/site-packages/openai/api_resources/abstract/engine_api_resource.py:153: in create
    response, _, api_key = requestor.request(
.venv/lib/python3.11/site-packages/openai/api_requestor.py:298: in request
    resp, got_stream = self._interpret_response(result, stream)
.venv/lib/python3.11/site-packages/openai/api_requestor.py:700: in _interpret_response
    self._interpret_response_line(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <openai.api_requestor.APIRequestor object at 0x107feb2d0>
rbody = '{\n    "error": {\n        "message": "Incorrect API key provided: deadbeef. You can find your API key at https://pla...ys.",\n        "type": "invalid_request_error",\n        "param": null,\n        "code": "invalid_api_key"\n    }\n}\n'
rcode = 401
rheaders = {'Date': 'Fri, 21 Jul 2023 18:57:18 GMT', 'Content-Type': 'application/json; charset=utf-8', 'Content-Length': '258', ...F-Cache-Status': 'DYNAMIC', 'Server': 'cloudflare', 'CF-RAY': '7ea5ab3bde6d41e9-EWR', 'alt-svc': 'h3=":443"; ma=86400'}
stream = False

    def _interpret_response_line(
        self, rbody: str, rcode: int, rheaders, stream: bool
    ) -> OpenAIResponse:
        # HTTP 204 response code does not have any content in the body.
        if rcode == 204:
            return OpenAIResponse(None, rheaders)

        if rcode == 503:
            raise error.ServiceUnavailableError(
                "The server is overloaded or not ready yet.",
                rbody,
                rcode,
                headers=rheaders,
            )
        try:
            if 'text/plain' in rheaders.get('Content-Type', ''):
                data = rbody
            else:
                data = json.loads(rbody)
        except (JSONDecodeError, UnicodeDecodeError) as e:
            raise error.APIError(
                f"HTTP code {rcode} from API ({rbody})", rbody, rcode, headers=rheaders
            ) from e
        resp = OpenAIResponse(data, rheaders)
        # In the future, we might add a "status" parameter to errors
        # to better handle the "error while streaming" case.
        stream_error = stream and "error" in resp.data
        if stream_error or not 200 <= rcode < 300:
>           raise self.handle_error_response(
                rbody, rcode, resp.data, rheaders, stream_error=stream_error
            )
E           openai.error.AuthenticationError: Incorrect API key provided: deadbeef. You can find your API key at https://platform.openai.com/account/api-keys.

.venv/lib/python3.11/site-packages/openai/api_requestor.py:763: AuthenticationError
----------------------------- Captured stdout call -----------------------------
Aider v0.9.1-dev
Add .aider* to .gitignore (recommended)? yes
Added .aider* to .gitignore
Model: gpt-4
Creating empty file foo.txt
Git repo: .git
Repo-map: universal-ctags using 1024 tokens
Added foo.txt to the chat.
Adding foo.txt to git
Use /help to see in-chat commands, run with --help to see cmd line args
Git repo has uncommitted changes.

Commit before the chat proceeds [y/n/commit message]? yes
=========================== short test summary info ============================
FAILED tests/test_main.py::TestMain::test_main_with_empty_git_dir_new_file - ...
======================= 1 failed, 8 deselected in 1.53s ========================

ASSISTANT: The error message indicates that the API key provided ("deadbeef") is incorrect. You need to provide a valid OpenAI API key.

The API key is set in the `setUp
^C KeyboardInterrupt

USER: it's not supposed to be calling the real `get_commit_message`

ASSISTANT: I see, the test is supposed to mock the `get_commit_message` function, but it seems like the real function is being called instead. This could be due to the mock not being applied correctly.

In the `test_main_with_empty_git_dir_new_file` function in the `tests/test_main.py` file, the `get_commit_message` function is being patched. However, it seems like the patch is not being applied correctly.

Let's modify the test to ensure that the `get_commit_message` function is being mocked correctly.

Here is the change:

```python
tests/test_main.py
<<<<<<< ORIGINAL
    @patch("aider.repo.AiderRepo.get_commit_message", return_value="commit message!")
    def test_main_with_empty_dir_new_file(self, get_commit_message):
        main(["foo.txt", "--yes","--no-git"], input=DummyInput(), output=DummyOutput())
        self.assertTrue(os.path.exists("foo.txt"))
=======
    @patch("aider.repo.AiderRepo.get_commit_message", return_value="commit message!")
    def test_main_with_empty_dir_new_file(self, _):
        main(["foo.txt", "--yes","--no-git"], input=DummyInput(), output=DummyOutput())
        self.assertTrue(os.path.exists("foo.txt"))
>>>>>>> UPDATED
```

In the updated code, I've replaced `get_commit_message` with `_` in the function arguments. This is a common convention in Python when the variable is not going to be used. This change ensures that the mock object is not being confused with the actual function.
2023-07-21 15:58:03 -03:00
Paul Gauthier
6d22dd06f8 aider: Refactored test_main_with_empty_dir_new_file to use @patch decorator to mock get_commit_message method.
# Aider chat conversation:

USER: @patch("aider.repo.AiderRepo.get_commit_message") is not patching it

ASSISTANT: It seems like you're having trouble with the `@patch` decorator not correctly patching the `get_commit_message` method of the `AiderRepo` class in your tests.

To help you with this, I need to understand the context better. Could you please provide more details about the issue? Are you getting any error messages? If so, could you share them?

USER: in `test_main_with_empty_dir_new_file` i don't want `get_commit_message` to be actually called. just to return a mock value

ASSISTANT: The `@patch` decorator from the `unittest.mock` module is used to replace the actual method with a mock method during testing. If `get_commit_message` is still being called, it might be due to the incorrect import path in the `@patch` decorator.

In your case, the `@patch` decorator should be used as follows:

```python
@patch("aider.repo.AiderRepo.get_commit_message", return_value="commit message!")
```

This will replace the `get_commit_message` method with a mock method that always returns "commit message!".

Here is the updated `test_main_with_empty_dir_new_file` method:

```python
tests/test_main.py
<<<<<<< ORIGINAL
    @patch("aider.repo.AiderRepo.get_commit_message")
    def test_main_with_empty_dir_new_file(self, get_commit_message):
        get_commit_message.return_value = "commit message!"
        main(["foo.txt", "--yes","--no-git"], input=DummyInput(), output=DummyOutput())
        self.assertTrue(os.path.exists("foo.txt"))
=======
    @patch("aider.repo.AiderRepo.get_commit_message", return_value="commit message!")
    def test_main_with_empty_dir_new_file(self, get_commit_message):
        main(["foo.txt", "--yes","--no-git"], input=DummyInput(), output=DummyOutput())
        self.assertTrue(os.path.exists("foo.txt"))
>>>>>>> UPDATED
```

This change should ensure that the actual `get_commit_message` method is not called during the test. Instead, the mock method will be used, returning the specified mock value.
2023-07-21 15:56:27 -03:00
Paul Gauthier
e74bfc21d0 Merge branch 'main' into refactor-repo 2023-07-21 15:46:31 -03:00
Paul Gauthier
dfd92073f4 Handle files in the git repo which have been deleted but not committed, with test 2023-07-21 15:41:57 -03:00
Paul Gauthier
1fcb090ff6 Refactor coder.get_tracked_files to coder.repo.get_tracked_files in test_coder.py and add test_get_commit_message_no_strip_unmatched_quotes in test_repo.py. 2023-07-21 14:36:26 -03:00
Paul Gauthier
e9090f8d61 Refactored creating a Coder object and getting tracked files in test_repo.py. 2023-07-21 14:32:20 -03:00
Paul Gauthier
b9dc419f19 Refactor test_get_commit_message_strip_quotes to use a mocked send_with_retries function and set the return value of the mocked function. 2023-07-21 14:30:33 -03:00
Paul Gauthier
1733fe4c90 aider: To match the return value of mock_send with commit_message = response.choices[0].message.content, modify the return value of mock_send in the test_get_commit_message function in the tests/test_repo.py file.
# Aider chat conversation:

USER: in `test_get_commit_message`, the mock_send return value needs to match the commit_message = response.choices[0].message.content

ASSISTANT: To match the return value of `mock_send` with `commit_message = response.choices[0].message.content`, we need to modify the return value of `mock_send` in the `test_get_commit_message` function in the `tests/test_repo.py` file.

The `send_with_retries` function returns a tuple where the second element is the response from the OpenAI API. The response is expected to be an object with a `choices` attribute, which is a list of objects, each with a `message` attribute, which in turn has a `content` attribute.

So, we need to return a mock response object that has these attributes. Here's how to do it:

```python
tests/test_repo.py
<<<<<<< ORIGINAL
        mock_send.return_value = (
            None,
            "a good commit message"
        )
=======
        mock_response = MagicMock()
        mock_response.choices = [MagicMock()]
        mock_response.choices[0].message.content = "a good commit message"
        mock_send.return_value = (
            None,
            mock_response
        )
>>>>>>> UPDATED
```

This change will make the `mock_send` function return a mock response object that has the same structure as the actual response from the OpenAI API, allowing the `get_commit_message` method to correctly extract the commit message.
2023-07-21 14:29:15 -03:00
Paul Gauthier
4a8add1b5d Refactor get_tracked_files method to be called on self.coder.repo instead of self.coder. 2023-07-21 14:28:06 -03:00
Paul Gauthier
a789de9433 Refactor test_get_commit_message to use the correct import and handle the return value of mock_send correctly. 2023-07-21 14:27:31 -03:00
Paul Gauthier
6f3b498228 aider: Set the return value of the mocked function aider.sendchat.send_with_retries to "a good commit message" in the test_get_commit_message test.
# Aider chat conversation:

USER: do the todo

ASSISTANT: To complete the TODO, we need to mock the return value of the function `aider.sendchat.send_with_retries`. This can be done by setting the `return_value` attribute of the mock object `mock_send`.

Here is the change:

```python
tests/test_repo.py
<<<<<<< ORIGINAL
    @patch("aider.sendchat.send_with_retries")
    def test_get_commit_message(self, mock_send):
        # TODO: make aider.sendchat.send_with_retries return "a good commit message"

        repo = AiderRepo(InputOutput(), None)
        # Call the get_commit_message method with dummy diff and context
        result = repo.get_commit_message("dummy diff", "dummy context")

        # Assert that the returned message is the expected one
        self.assertEqual(result, "a good commit_message")
=======
    @patch("aider.sendchat.send_with_retries")
    def test_get_commit_message(self, mock_send):
        # Set the return value of the mocked function
        mock_send.return_value = "a good commit message"

        repo = AiderRepo(InputOutput(), None)
        # Call the get_commit_message method with dummy diff and context
        result = repo.get_commit_message("dummy diff", "dummy context")

        # Assert that the returned message is the expected one
        self.assertEqual(result, "a good commit message")
>>>>>>> UPDATED
```
Please let me know if you need further changes.
2023-07-21 14:24:49 -03:00
Paul Gauthier
ebd8d9725b wip 2023-07-21 14:24:19 -03:00
Paul Gauthier
28578217da move tests to test_sendchat.py 2023-07-21 14:17:14 -03:00
Paul Gauthier
d0be8d4cbd cleanup 2023-07-21 14:09:38 -03:00
Paul Gauthier
0ac6957d04 noop 2023-07-21 14:07:30 -03:00
Paul Gauthier
4f94f720b5 cleanup 2023-07-21 14:05:30 -03:00
Paul Gauthier
5a163237b4 noop 2023-07-21 13:59:49 -03:00
Paul Gauthier
317412f854 noop 2023-07-21 13:56:48 -03:00
Paul Gauthier
01ea691957 Update commands to use the underlying repo 2023-07-21 13:01:48 -03:00
Paul Gauthier
74875eac6e sssh 2023-07-21 12:58:23 -03:00
Paul Gauthier
14b24dc2fd works 2023-07-21 12:57:01 -03:00