diff --git a/aider/commands.py b/aider/commands.py index a4caf7142..fd4472fbf 100644 --- a/aider/commands.py +++ b/aider/commands.py @@ -279,16 +279,17 @@ class Commands: if any(char in word for char in "*?[]"): self.io.tool_error(f"No files to add matching pattern: {word}") else: - if Path(word).exists(): - if Path(word).is_file(): - matched_files = [word] + fname = Path(self.coder.root) / word + if fname.exists(): + if fname.is_file(): + matched_files = [str(fname)] else: self.io.tool_error(f"Unable to add: {word}") elif self.io.confirm_ask( - f"No files matched '{word}'. Do you want to create the file?" + f"No files matched '{word}'. Do you want to create {fname}?" ): - (Path(self.coder.root) / word).touch() - matched_files = [word] + fname.touch() + matched_files = [str(fname)] all_matched_files.update(matched_files) diff --git a/tests/test_commands.py b/tests/test_commands.py index 70362651d..74a287dd8 100644 --- a/tests/test_commands.py +++ b/tests/test_commands.py @@ -276,3 +276,22 @@ class TestCommands(TestCase): commit_message = "Test commit message" commands.cmd_commit(commit_message) self.assertFalse(repo.is_dirty()) + + def test_cmd_add_from_sub_dir(self): + with GitTemporaryDirectory(): + io = InputOutput(pretty=False, yes=False) + from aider.coders import Coder + + coder = Coder.create(models.GPT35, None, io) + commands = Commands(io, coder) + + Path("side_dir").mkdir() + os.chdir("side_dir") + + # add a file that is in the side_dir + with open("temp.txt", "w"): + pass + + # this was blowing up with GitCommandError, per: + # https://github.com/paul-gauthier/aider/issues/201 + commands.cmd_add("temp.txt")