unpackfs: Automatically detect the exclude list from the mounts.
See issue #173.
This commit is contained in:
parent
6a70029198
commit
f0203a072c
@ -42,6 +42,19 @@ class UnpackEntry:
|
|||||||
ON_POSIX = 'posix' in sys.builtin_module_names
|
ON_POSIX = 'posix' in sys.builtin_module_names
|
||||||
|
|
||||||
|
|
||||||
|
def list_excludes(destination):
|
||||||
|
prefix = destination.replace('//', '/')
|
||||||
|
if not prefix.endswith('/'):
|
||||||
|
prefix = prefix + '/'
|
||||||
|
lst = []
|
||||||
|
for line in open('/etc/mtab').readlines():
|
||||||
|
device, mount_point, _ = line.split(" ", 2)
|
||||||
|
if mount_point.startswith(prefix):
|
||||||
|
# -1 to include the / at the end of the prefix
|
||||||
|
lst.extend(['--exclude', mount_point[len(prefix)-1:]])
|
||||||
|
return lst
|
||||||
|
|
||||||
|
|
||||||
def file_copy(source, dest, progress_cb):
|
def file_copy(source, dest, progress_cb):
|
||||||
# Environment used for executing rsync properly
|
# Environment used for executing rsync properly
|
||||||
# Setting locale to C (fix issue with tr_TR locale)
|
# Setting locale to C (fix issue with tr_TR locale)
|
||||||
@ -53,7 +66,10 @@ def file_copy(source, dest, progress_cb):
|
|||||||
# "/dest", then files will be copied in "/dest/bar".
|
# "/dest", then files will be copied in "/dest/bar".
|
||||||
source += "/"
|
source += "/"
|
||||||
|
|
||||||
process = subprocess.Popen(['rsync', '-aHAXr', '--exclude', '/dev/', '--exclude', '/proc/', '--exclude', '/sys/', '--exclude', '/run/', '--progress', source, dest],
|
args = ['rsync', '-aHAXr']
|
||||||
|
args.extend(list_excludes(dest))
|
||||||
|
args.extend(['--progress', source, dest])
|
||||||
|
process = subprocess.Popen(args,
|
||||||
env=at_env,
|
env=at_env,
|
||||||
bufsize=1,
|
bufsize=1,
|
||||||
stdout=subprocess.PIPE,
|
stdout=subprocess.PIPE,
|
||||||
|
Loading…
Reference in New Issue
Block a user