[issue14773] fwalk breaks on dangling symlinks

2012-05-16 Thread Hynek Schlawack

Changes by Hynek Schlawack h...@ox.cx:


--
stage: commit review - committed/rejected
status: open - closed

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14773
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue14773] fwalk breaks on dangling symlinks

2012-05-16 Thread Hynek Schlawack

Changes by Hynek Schlawack h...@ox.cx:


--
resolution:  - fixed

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14773
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue14773] fwalk breaks on dangling symlinks

2012-05-15 Thread Hynek Schlawack

Hynek Schlawack h...@ox.cx added the comment:

I just realized it doesn't really make sense because if a file disappears for 
real, we'll get another FileNotFoundException when checking whether it's a 
symlink and the continue is never reached.

So behold v3. :)

This time, I have tested it by injecting a

if name == 'tmp4':
import os
os.unlinkat(topfd, name)

right before the S_ISDIR in fwalk.

Some tests failed because said tmp4 was obviously missing – the old code threw 
FileNotFoundExceptions. After restoration the whole test suite passes in 
regression mode.

--
stage: commit review - patch review
Added file: http://bugs.python.org/file25596/fwalk.diff

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14773
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue14773] fwalk breaks on dangling symlinks

2012-05-15 Thread Antoine Pitrou

Changes by Antoine Pitrou pit...@free.fr:


--
stage: patch review - commit review

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14773
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue14773] fwalk breaks on dangling symlinks

2012-05-15 Thread Roundup Robot

Roundup Robot devn...@psf.upfronthosting.co.za added the comment:

New changeset cbe7560d4443 by Hynek Schlawack in branch 'default':
#14773: Fix os.fwalk() failing on dangling symlinks
http://hg.python.org/cpython/rev/cbe7560d4443

--
nosy: +python-dev

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14773
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue14773] fwalk breaks on dangling symlinks

2012-05-13 Thread Charles-François Natali

Charles-François Natali neolo...@free.fr added the comment:

 Just to stress it once more: a fwalk that _ignores_ dangling symlinks is 
 worthless for rmtree. And wasn't rmtree the initial reason to implement fwalk 
 in the first place? ;)

Indeed, my bad :-)

 So I've changed the patch to ignore everything missing except for dangling 
 links (which throw unfortunately the same exception).

Looks good to me.

--
stage: patch review - commit review

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14773
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue14773] fwalk breaks on dangling symlinks

2012-05-12 Thread Charles-François Natali

Charles-François Natali neolo...@free.fr added the comment:

I'm not sure we really need to check for a dangling symlink in case of 
FileNotFoundError: whether it's a dangling symlink, or the file disappeared 
in-between-, skipping it is OK.

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14773
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue14773] fwalk breaks on dangling symlinks

2012-05-12 Thread Hynek Schlawack

Hynek Schlawack h...@ox.cx added the comment:

But if it is a dangling symlink, you want to add it to nondirs while missing 
files could be skipped, no? You can't skip dangling symlinks if you want to 
implement rmtree. The normal walk() doesn't too.

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14773
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue14773] fwalk breaks on dangling symlinks

2012-05-12 Thread Hynek Schlawack

Hynek Schlawack h...@ox.cx added the comment:

So I've changed the patch to ignore everything missing except for dangling 
links (which throw unfortunately the same exception).

Just to stress it once more: a fwalk that _ignores_ dangling symlinks is 
worthless for rmtree. And wasn't rmtree the initial reason to implement fwalk 
in the first place? ;)

--
Added file: http://bugs.python.org/file25556/fwalk-ignore-missing-files.diff

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14773
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue14773] fwalk breaks on dangling symlinks

2012-05-10 Thread Hynek Schlawack

New submission from Hynek Schlawack h...@ox.cx:

I'm implementing a safe rmtree using fwalk. Everything works perfectly except 
for one thing: if the directory contains dangling symlinks, fwalk goes belly-up:

$ ls -l test/
total 0
lrwxrwxrwx 1 vagrant vagrant 4 May 10 16:36 doesntwork - this

$ ./python
Python 3.3.0a3+ (default:b32baa5b7626+, May 10 2012, 14:56:20) 
[GCC 4.6.3] on linux
Type help, copyright, credits or license for more information.
 import os
[71253 refs]
 list(os.fwalk('test'))
Traceback (most recent call last):
  File stdin, line 1, in module
  File /home/vagrant/p/Lib/os.py, line 342, in fwalk
for x in _fwalk(topfd, top, topdown, onerror, followlinks):
  File /home/vagrant/p/Lib/os.py, line 361, in _walk
if st.S_ISDIR(fstatat(topfd, name).st_mode):
FileNotFoundError: [Errno 2] No such file or directory


Unfortunately this makes it impossible to implement rmtree. The reason is the 
following code:

for name in names:
# Here, we don't use AT_SYMLINK_NOFOLLOW to be consistent with
# walk() which reports symlinks to directories as directories. We do
# however check for symlinks before recursing into a subdirectory.
if st.S_ISDIR(fstatat(topfd, name).st_mode):
dirs.append(name)
else:
nondirs.append(name)

The unsafe walk tree uses os.path.isdir() instead of os.fstatat() and handles 
this case gracefully.

A simple try-except protection with a symlink check fixes it and the tests 
pass. This is a blocker for #4489. I have expanded the test of the WalkerTests 
suite.

Tested on Linux (= works) and OS X (= skipped).

--
assignee: hynek
components: Library (Lib)
files: make-fwalk-handle-dangling-symlinks.diff
keywords: patch
messages: 160364
nosy: hynek, neologix
priority: normal
severity: normal
stage: patch review
status: open
title: fwalk breaks on dangling symlinks
type: behavior
versions: Python 3.3
Added file: 
http://bugs.python.org/file25523/make-fwalk-handle-dangling-symlinks.diff

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14773
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com