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:
Scott Garman 2012-03-12 17:07:19 -07:00 committed by Richard Purdie
parent 5fff3ea93b
commit 19e92dfe06
1 changed files with 27 additions and 0 deletions

View File

@ -40,6 +40,33 @@ def relative(src, dest):
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):
""" Prepare a path for display to the user. """
rel = relative(metadata.getVar("TOPDIR", True), path)