Add tarlinks function

master3.3
Mike Hiretsky 12 years ago
parent 20e5aa8fb5
commit 260226ea25

@ -24,6 +24,7 @@ from calculate.lib import cl_overriding
import re
import sys
from itertools import *
import tarfile
try:
from magic import open as type_file, MAGIC_NONE as MAGIC_NONE
@ -731,3 +732,40 @@ class FStab(object):
else:
filterfunc = lambda x: x[what] != noteq
return bool(filter(filterfunc,self.cache))
def tarLinks(rootpath,archpath,skip=[]):
"""Add symbolic links to archive file"""
links = []
if skip:
reSkip = re.compile("|".join(map(lambda x:x.replace("*",".*"),
skip))).search
else:
reSkip = lambda x:False
lenprefix = len(path.normpath(rootpath))+1
if path.exists(archpath):
os.unlink(archpath)
# create arch
tar = tarfile.open(archpath,"w:bz2")
# find links
for root, dirs, files in os.walk(rootpath):
for link in filter(os.path.islink,
map(lambda x:path.join(root,x),
dirs+files)):
# try add link
try:
if not reSkip(link):
ti = tar.gettarinfo(link)
ti.name = link[lenprefix:]
tar.addfile(ti)
links.append(link)
except OSError:
pass
# discard mounted paths
removeDirs = map(lambda x:x[0],
filter(lambda x:path.islink(x[1]) or path.ismount(x[1]),
map(lambda x:(x,path.join(root,x)),
dirs)))
map(lambda x:dirs.remove(x),
removeDirs)
tar.close()
return links

Loading…
Cancel
Save