aider/scripts/benchmark.py
Paul Gauthier 55fb2ffe52 aider: Added create_temp_repo function to create a temporary git repo with copied files and .docs subdir.
# Context:
USER: make a script which takes a dirname on the cmd line.
make a tempdir, copy all the files from the dirname into the tempdir
copy the .docs subdir into the tempdir, but as `docs` without the leading .
make a new git repo in the tempdir using GitPython
add all the copied files to the repo, commit with msg "initial"

ASSISTANT: I will create a new script called `create_temp_repo.py` in the `scripts` directory. This script will take a directory name as a command-line argument, create a temporary
^C KeyboardInterrupt
USER: code it in benchmark.py
ASSISTANT: First, let's import the required libraries at the beginning of `scripts/benchmark.py`:

```python
scripts/benchmark.py
<<<<<<< ORIGINAL
=======
import os
import shutil
import sys
from tempfile import TemporaryDirectory
from git import Repo
>>>>>>> UPDATED
```

Now, let's add a new function called `create_temp_repo` in `scripts/benchmark.py`:

```python
scripts/benchmark.py
<<<<<<< ORIGINAL
=======
def create_temp_repo(dirname):
    with TemporaryDirectory() as tempdir:
        # Copy all files from dirname to tempdir
        for item in os.listdir(dirname):
            s = os.path.join(dirname, item)
            d = os.path.join(tempdir, item)
            if os.path.isdir(s):
                shutil.copytree(s, d, False, None)
            else:
                shutil.copy2(s, d)

        # Copy .docs subdir to tempdir as 'docs'
        docs_src = os.path.join(dirname, ".docs")
        docs_dst = os.path.join(tempdir, "docs")
        shutil.copytree(docs_src, docs_dst, False, None)

        # Create a new git repo in tempdir
        repo = Repo.init(tempdir)

        # Add all copied files to the repo
        repo.git.add(A=True)

        # Commit with message "initial"
        repo.git.commit(m="initial")

    return tempdir
>>>>>>> UPDATED
```

Finally, let's call the `create_temp_repo` function with the command-line argument in the `__main__` block:

```python
scripts/benchmark.py
<<<<<<< ORIGINAL
=======
if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("Usage: python benchmark.py <dirname>")
        sys.exit(1)

    dirname = sys.argv[1]
    temp_repo_path = create_temp_repo(dirname)
    print(f"Temporary repo created at: {temp_repo_path}")
>>>>>>> UPDATED
```

Now, you can run the script with the command `python scripts/benchmark.py <dirname>`, where `<dirname>` is the directory you want to create a temporary repo for.
2023-06-23 13:55:04 -07:00

39 lines
1.2 KiB
Python

import os
import shutil
import sys
from tempfile import TemporaryDirectory
from git import Repo
def create_temp_repo(dirname):
with TemporaryDirectory() as tempdir:
# Copy all files from dirname to tempdir
for item in os.listdir(dirname):
s = os.path.join(dirname, item)
d = os.path.join(tempdir, item)
if os.path.isdir(s):
shutil.copytree(s, d, False, None)
else:
shutil.copy2(s, d)
# Copy .docs subdir to tempdir as 'docs'
docs_src = os.path.join(dirname, ".docs")
docs_dst = os.path.join(tempdir, "docs")
shutil.copytree(docs_src, docs_dst, False, None)
# Create a new git repo in tempdir
repo = Repo.init(tempdir)
# Add all copied files to the repo
repo.git.add(A=True)
# Commit with message "initial"
repo.git.commit(m="initial")
return tempdir
if __name__ == "__main__":
if len(sys.argv) != 2:
print("Usage: python benchmark.py <dirname>")
sys.exit(1)
dirname = sys.argv[1]
temp_repo_path = create_temp_repo(dirname)
print(f"Temporary repo created at: {temp_repo_path}")