mirror of
https://github.com/niess/python-appimage.git
synced 2025-07-21 12:51:16 +02:00
76 lines
2.0 KiB
Python
76 lines
2.0 KiB
Python
from distutils.dir_util import mkpath as _mkpath, remove_tree as _remove_tree
|
|
from distutils.file_util import copy_file as _copy_file
|
|
import errno
|
|
import os
|
|
|
|
from .log import debug
|
|
|
|
|
|
__all__ = ['copy_file', 'copy_tree', 'make_tree', 'remove_file', 'remove_tree']
|
|
|
|
|
|
# Wrap some file system related functions
|
|
def make_tree(path):
|
|
'''Create directories recursively if they don't exist
|
|
'''
|
|
debug('MKDIR', path)
|
|
return _mkpath(path)
|
|
|
|
|
|
def copy_file(source, destination, update=False, verbose=True):
|
|
'''
|
|
'''
|
|
name = os.path.basename(source)
|
|
if verbose:
|
|
debug('COPY', '%s from %s', name, os.path.dirname(source))
|
|
_copy_file(source, destination, update=update)
|
|
|
|
|
|
def copy_tree(source, destination):
|
|
'''Copy (or update) a directory preserving symlinks
|
|
'''
|
|
if not os.path.exists(source):
|
|
raise OSError(errno.ENOENT, 'No such file or directory: ' + source)
|
|
|
|
name = os.path.basename(source)
|
|
debug('COPY', '%s from %s', name, os.path.dirname(source))
|
|
|
|
for root, _, files in os.walk(source):
|
|
relpath = os.path.relpath(root, source)
|
|
dirname = os.path.join(destination, relpath)
|
|
_mkpath(dirname)
|
|
for file_ in files:
|
|
src = os.path.join(root, file_)
|
|
dst = os.path.join(dirname, file_)
|
|
if os.path.islink(src):
|
|
try:
|
|
os.remove(dst)
|
|
except OSError:
|
|
pass
|
|
linkto = os.readlink(src)
|
|
os.symlink(linkto, dst)
|
|
else:
|
|
copy_file(src, dst, update=True, verbose=False)
|
|
|
|
|
|
def remove_file(path):
|
|
'''remove a file if it exists
|
|
'''
|
|
name = os.path.basename(path)
|
|
debug('REMOVE', '%s from %s', name, os.path.dirname(path))
|
|
try:
|
|
os.remove(path)
|
|
except OSError:
|
|
pass
|
|
|
|
|
|
def remove_tree(path):
|
|
'''remove a directory if it exists
|
|
'''
|
|
name = os.path.basename(path)
|
|
debug('REMOVE', '%s from %s', name, os.path.dirname(path))
|
|
try:
|
|
_remove_tree(path)
|
|
except OSError:
|
|
pass
|