[issue26791] shutil.move fails to move symlink (Invalid cross-device link)

2016-04-17 Thread Renato Alves

Renato Alves added the comment:

Also related to http://bugs.python.org/issue212317

--

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



[issue26791] shutil.move fails to move symlink (Invalid cross-device link)

2016-04-17 Thread Renato Alves

Changes by Renato Alves <alves@gmail.com>:


--
versions: +Python 2.7, Python 3.5

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



[issue26791] shutil.move fails to move symlink (Invalid cross-device link)

2016-04-17 Thread Renato Alves

New submission from Renato Alves:

Hi everyone,

I'm not really sure if this is a new issue but digging through the bug reports 
from the past I couldn't find an answer.
There's http://bugs.python.org/issue1438480 but this seems to be a different 
issue.
I also found http://bugs.python.org/issue9993 that addressed problems with 
symlinks but didn't correct the behavior reported here.

The problem can be visualized with the following code.
Code fails on python 2.7 as well as python 3.4+. Not tested in python <2.7 and 
<3.4.


import shutil
import os

TMPDIR = "/tmp/tmpdir"
TESTLINK = "test_dir"

if not os.path.isdir(TMPDIR):
os.mkdir(TMPDIR)

if not os.path.islink(TESTLINK):
os.symlink(TMPDIR, TESTLINK)

shutil.move(TESTLINK, TMPDIR)


When executed it gives me:

% python3 test.py
Traceback (most recent call last):
  File "test.py", line 14, in 
shutil.move(TESTLINK, TMPDIR)
  File "/usr/lib64/python3.4/shutil.py", line 516, in move
os.rename(src, dst)
OSError: [Errno 18] Invalid cross-device link: 'test_dir' -> '/tmp/tmpdir'


This happens because /tmp is:

  tmpfs on /tmp type tmpfs (rw,nosuid,nodev,noatime,nodiratime)


In the past the recommendation to handle this problem was to stop using 
os.rename and use shutil.move instead.
This was even discussed in a bug report - http://bugs.python.org/issue14848

If one searches for this exception there's plenty of advice [1][2][3][4] in the 
same direction.
However, given that shutil.move uses os.rename internally, the problem returns.

On the other end doing the equivalent action in the shell with 'mv' works fine.


[1] - http://stackoverflow.com/a/15300474
[2] - https://mail.python.org/pipermail/python-list/2005-February/342892.html
[3] - 
http://www.thecodingforums.com/threads/errno-18-invalid-cross-device-link-using-os-rename.341597/
[4] - https://github.com/pypa/pip/issues/103

--
components: Library (Lib)
messages: 263616
nosy: Unode
priority: normal
severity: normal
status: open
title: shutil.move fails to move symlink (Invalid cross-device link)
versions: Python 3.4

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