1804
1806
real_handlers[kind](abspath, relpath)
1809
def copy_ownership(dst, src=None):
1810
"""Copy usr/grp ownership from src file/dir to dst file/dir.
1812
If src is None, the containing directory is used as source. If chown
1813
fails, the error is ignored and a warning is printed.
1815
has_chown = getattr(os, 'chown')
1816
if has_chown is None: return
1819
src = os.path.dirname(dst)
1825
os.chown(dst, s.st_uid, s.st_gid)
1827
trace.warning("Unable to copy ownership from '%s' to '%s': IOError: %s." % (src, dst, e))
1830
def mkdir_with_ownership(path, ownership_src=None):
1831
"""Create the directory 'path' with specified ownership.
1833
If ownership_src is given, copies (chown) usr/grp ownership
1834
from 'ownership_src' to 'path'. If ownership_src is None, use the
1835
containing dir ownership.
1838
copy_ownership(path, ownership_src)
1841
def open_with_ownership(filename, mode='r', bufsize=-1, ownership_src=None):
1842
"""Open the file 'filename' with the specified ownership.
1844
If ownership_src is specified, copy usr/grp ownership from ownership_src
1845
to filename. If ownership_src is None, copy ownership from containing
1847
Returns the opened file object.
1849
f = open(filename, mode, bufsize)
1850
copy_ownership(filename, ownership_src)
1807
1854
def path_prefix_key(path):
1808
1855
"""Generate a prefix-order path key for path.