mirror of
				https://github.com/ansible-collections/community.general.git
				synced 2025-10-26 21:59:38 -07:00 
			
		
		
		
	* Add sanity test (currently fails). * doc_fragments can also be non-GPLv3+. * Replace 'Author:' by 'Copyright:' in some specific cases. * Avoid matching string for license checkers. * Reformulate not to throw license detection off. * Add PSF copyright notice for plugins/module_utils/_mount.py. * Add generic copyright notices. * Update changelog fragment.
		
			
				
	
	
		
			54 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # -*- coding: utf-8 -*-
 | |
| # This code is part of Ansible, but is an independent component.
 | |
| # This particular file snippet, and this file snippet only, is based on
 | |
| # Lib/posixpath.py of cpython
 | |
| #
 | |
| # Copyright (c) 2001-2022 Python Software Foundation.  All rights reserved.
 | |
| # It is licensed under the PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
 | |
| # (See LICENSES/PSF-2.0.txt in this collection)
 | |
| # SPDX-License-Identifier: PSF-2.0
 | |
| 
 | |
| from __future__ import absolute_import, division, print_function
 | |
| 
 | |
| __metaclass__ = type
 | |
| 
 | |
| import os
 | |
| 
 | |
| 
 | |
| def ismount(path):
 | |
|     """Test whether a path is a mount point
 | |
|     This is a copy of the upstream version of ismount(). Originally this was copied here as a workaround
 | |
|     until Python issue 2466 was fixed. Now it is here so this will work on older versions of Python
 | |
|     that may not have the upstream fix.
 | |
|     https://github.com/ansible/ansible-modules-core/issues/2186
 | |
|     http://bugs.python.org/issue2466
 | |
|     """
 | |
|     try:
 | |
|         s1 = os.lstat(path)
 | |
|     except (OSError, ValueError):
 | |
|         # It doesn't exist -- so not a mount point. :-)
 | |
|         return False
 | |
|     else:
 | |
|         # A symlink can never be a mount point
 | |
|         if os.path.stat.S_ISLNK(s1.st_mode):
 | |
|             return False
 | |
| 
 | |
|     if isinstance(path, bytes):
 | |
|         parent = os.path.join(path, b'..')
 | |
|     else:
 | |
|         parent = os.path.join(path, '..')
 | |
|     parent = os.path.realpath(parent)
 | |
|     try:
 | |
|         s2 = os.lstat(parent)
 | |
|     except (OSError, ValueError):
 | |
|         return False
 | |
| 
 | |
|     dev1 = s1.st_dev
 | |
|     dev2 = s2.st_dev
 | |
|     if dev1 != dev2:
 | |
|         return True     # path/.. on a different device as path
 | |
|     ino1 = s1.st_ino
 | |
|     ino2 = s2.st_ino
 | |
|     if ino1 == ino2:
 | |
|         return True     # path/.. is the same i-node as path
 | |
|     return False
 |