#28154: Infinite loop in collectstatic
-----------------------------------------------+------------------------
               Reporter:  Matthew Somerville   |          Owner:  nobody
                   Type:  Bug                  |         Status:  new
              Component:  contrib.staticfiles  |        Version:  1.11
               Severity:  Normal               |       Keywords:
           Triage Stage:  Unreviewed           |      Has patch:  0
    Needs documentation:  0                    |    Needs tests:  0
Patch needs improvement:  0                    |  Easy pickings:  0
                  UI/UX:  0                    |
-----------------------------------------------+------------------------
 If the static directory contains a broken symlink in place of a file that
 collectstatic wishes to copy*, then the code gets stuck in an infinite
 loop, because the os.open fails (O_CREAT | O_EXCL will fail if a symlink
 exists, even if it's to a non-existent file), but then get_available_name
 returns the same name (as it calls self.exists, which returns False for a
 broken symlink).

 I guess two possibilities are:
 1. don't care about broken symlinks. Change the flags setting in
 django/core/files/storage.py to not include O_EXCL if
 `os.path.islink(full_path) and not os.path.exists(full_path)`.
 2. do care, change os.path.exists in the `exists` function to use
 os.path.lexists instead.

 I'm not sure which would be preferable to prevent this infinite loop.

 *I came across this issue because collectstatic had been run both inside
 and outside a Vagrant box, so symlinks created inside the box did not
 exist when collectstatic was then run outside.

--
Ticket URL: <https://code.djangoproject.com/ticket/28154>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/049.164d892cdeaa67f99c99d73e5bcfb0e1%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to