Generate_context behavior when overwrite_if_exists = True and _copy_without_render is specified

Author: nicainCreated Jan 5, 2018Updated Jan 27, 2026
Labelsbug
  • Cookiecutter version: 1.6.0
  • Python version: py27, py35, py36
  • Operating System: Ubuntu 16.04.3 LTS

Description:

When overwrite_if_exists = True, and _copy_without_render is specified, the use of shutil.copytree in generate.py::generate_files means that the files cannot be over-written. This seems like incorrect behavior to me.

What I've run:

Traceback (most recent call last):
  File "/home/nicholasc/anaconda2/bin/cookiecutter", line 11, in <module>
    load_entry_point('cookiecutter==1.6.0', 'console_scripts', 'cookiecutter')()
  File "/home/nicholasc/anaconda2/lib/python2.7/site-packages/click/core.py", line 722, in __call__
    return self.main(*args, **kwargs)
  File "/home/nicholasc/anaconda2/lib/python2.7/site-packages/click/core.py", line 697, in main
    rv = self.invoke(ctx)
  File "/home/nicholasc/anaconda2/lib/python2.7/site-packages/click/core.py", line 895, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/nicholasc/anaconda2/lib/python2.7/site-packages/click/core.py", line 535, in invoke
    return callback(*args, **kwargs)
  File "/home/nicholasc/anaconda2/lib/python2.7/site-packages/cookiecutter/cli.py", line 120, in main
    password=os.environ.get('COOKIECUTTER_REPO_PASSWORD')
  File "/home/nicholasc/anaconda2/lib/python2.7/site-packages/cookiecutter/main.py", line 94, in cookiecutter
    output_dir=output_dir
  File "/home/nicholasc/anaconda2/lib/python2.7/site-packages/cookiecutter/generate.py", line 328, in generate_files
    shutil.copytree(indir, outdir)
  File "/home/nicholasc/anaconda2/lib/python2.7/shutil.py", line 177, in copytree
    os.makedirs(dst)
  File "/home/nicholasc/anaconda2/lib/python2.7/os.py", line 157, in makedirs
    mkdir(name, mode)
OSError: [Errno 17] File exists: '/home/nicholasc/tmp/ccdebug/projectname/docs/aibs_sphinx'

I have prepared a fix and will submit a PR that highlights the difference, and works around.

Source: cookiecutter/cookiecutter