mirror of
git://git.yoctoproject.org/poky.git
synced 2025-07-19 21:09:03 +02:00
path.py: add make_relative_symlink method
This method allows you to convert an absolute symlink into a relative one. (From OE-Core rev: 71062c1e0fb45a4b4e58ea5d217706aa2b402d88) Signed-off-by: Scott Garman <scott.a.garman@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
5fff3ea93b
commit
19e92dfe06
|
@ -40,6 +40,33 @@ def relative(src, dest):
|
||||||
|
|
||||||
return os.path.sep.join(relpath)
|
return os.path.sep.join(relpath)
|
||||||
|
|
||||||
|
def make_relative_symlink(path):
|
||||||
|
""" Convert an absolute symlink to a relative one """
|
||||||
|
if not os.path.islink(path):
|
||||||
|
return
|
||||||
|
link = os.readlink(path)
|
||||||
|
if not os.path.isabs(link):
|
||||||
|
return
|
||||||
|
|
||||||
|
# find the common ancestor directory
|
||||||
|
ancestor = path
|
||||||
|
depth = 0
|
||||||
|
while ancestor and not link.startswith(ancestor):
|
||||||
|
ancestor = ancestor.rpartition('/')[0]
|
||||||
|
depth += 1
|
||||||
|
|
||||||
|
if not ancestor:
|
||||||
|
print "make_relative_symlink() Error: unable to find the common ancestor of %s and its target" % path
|
||||||
|
return
|
||||||
|
|
||||||
|
base = link.partition(ancestor)[2].strip('/')
|
||||||
|
while depth > 1:
|
||||||
|
base = "../" + base
|
||||||
|
depth -= 1
|
||||||
|
|
||||||
|
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", True), path)
|
rel = relative(metadata.getVar("TOPDIR", True), path)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user