New submission from Vidar Fauske:

On Windows (Windows 10 in my case), given the following directory structure:
- rootfolder
 - a
 - b
  - junc (directory junction to ../a)

a call to `shutil.rmtree('root')` will fail with an exception 
`FileNotFoundError: [WinError 3]`, in a call to `os.listdir()` in 
`_rmtree_unsafe`. See attached minimal working example.

Note that sorting order is important: A link in 'a' pointing to 'b' does not 
fail. This is because `os.listdir()` raises an exception for 'b/junc' when its 
target ('a') has already been deleted.

Also, note that this is only for junctions, not directory links (`mklink /J` vs 
`mklink /D`), because:
 - Directory links flag false in the `stat.S_ISDIR(os.lstat('b/junc').st_mode)` 
test while junctions do not.
 - `os.islink()` returns false for both junctions, while directory links do not.

Indicated Python versions are those which I have personally tested on, and 
observed this behavior.

Current use case: Deleting a folder tree generated by an external tool, which 
creates junction links as part of its normal operation ('lerna' tool for the 
'npm' javascript package manager).

----------
components: IO, Library (Lib), Windows
files: mwe.py
messages: 300424
nosy: paul.moore, steve.dower, tim.golden, vidartf, zach.ware
priority: normal
severity: normal
status: open
title: shutil.rmtree fails when target has an internal directory junction 
(Windows)
versions: Python 3.3, Python 3.6
Added file: http://bugs.python.org/file47090/mwe.py

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue31226>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to