Eryk Sun <eryk...@gmail.com> added the comment:

> What do you mean by "portable version of mountpoint"?

posixpath.ismount is based on a portable method to detect a mountpoint in Unix 
systems, since POSIX lacks a portable function for this. The implementation is 
simple. A symlink is never a mountpoint. Otherwise compare the lstat of the 
path and its parent directory. It's a mountpoint if the st_dev fields are 
different. If not, it's a mountpoint if the st_ino fields are the same (e.g. 
"/").

The portable method may fail in particular cases. For instance, a bind mount in 
the Linux kernel (not bindfs) doesn't create a new device. For example, given 
"/opt" is bound to "opt" in the current directory on the same filesystem, 
ismount returns a false negative:


    >>> posixpath.ismount('opt')
    False

But it's a mountpoint according to the "/proc/self/mountinfo" table:

    >>> os.system('mountpoint opt')
    opt is a mountpoint
    0

The above false negative is documented, so a precedent exists to simply 
document the false positive with a btrfs subvolume. Developers can make of it 
what they will. If it matters to not count this case as a mountpoint, a script 
will have to implement its own platform-specific solution (e.g. use subprocess 
to call `mountpoint`).

----------
nosy: +eryksun
versions: +Python 3.8, Python 3.9

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

Reply via email to