lib/oe/path: Add replace_absolute_symlinks function
We need a function to walk a directory and replace absolute symlinks with relative ones. Add such a function to the path module of lib/oe. It does this relative to the directory being walked for files. (From OE-Core rev: 15376e5ff35367c1b40941d10e7b19302058a53e) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
48527d4ff3
commit
eac8f9b986
|
@ -50,6 +50,27 @@ def make_relative_symlink(path):
|
||||||
os.remove(path)
|
os.remove(path)
|
||||||
os.symlink(base, path)
|
os.symlink(base, path)
|
||||||
|
|
||||||
|
def replace_absolute_symlinks(basedir, d):
|
||||||
|
"""
|
||||||
|
Walk basedir looking for absolute symlinks and replacing them with relative ones.
|
||||||
|
The absolute links are assumed to be relative to basedir
|
||||||
|
(compared to make_relative_symlink above which tries to compute common ancestors
|
||||||
|
using pattern matching instead)
|
||||||
|
"""
|
||||||
|
for walkroot, dirs, files in os.walk(basedir):
|
||||||
|
for file in files + dirs:
|
||||||
|
path = os.path.join(walkroot, file)
|
||||||
|
if not os.path.islink(path):
|
||||||
|
continue
|
||||||
|
link = os.readlink(path)
|
||||||
|
if not os.path.isabs(link):
|
||||||
|
continue
|
||||||
|
walkdir = os.path.dirname(path.rpartition(basedir)[2])
|
||||||
|
base = os.path.relpath(link, walkdir)
|
||||||
|
bb.debug(2, "Replacing absolute path %s with relative path %s" % (link, base))
|
||||||
|
os.remove(path)
|
||||||
|
os.symlink(base, path)
|
||||||
|
|
||||||
def format_display(path, metadata):
|
def format_display(path, metadata):
|
||||||
""" Prepare a path for display to the user. """
|
""" Prepare a path for display to the user. """
|
||||||
rel = relative(metadata.getVar("TOPDIR"), path)
|
rel = relative(metadata.getVar("TOPDIR"), path)
|
||||||
|
|
Loading…
Reference in New Issue