diff options
author | Scott Garman <scott.a.garman@intel.com> | 2012-03-12 17:07:19 -0700 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2012-03-13 11:51:45 +0000 |
commit | 71062c1e0fb45a4b4e58ea5d217706aa2b402d88 (patch) | |
tree | aea4805a989ccd327978d3baabcd3ad467ae8d9d | |
parent | cd504c7f1bd0440a114cb304f141b2b8197c7f66 (diff) | |
download | openembedded-core-71062c1e0fb45a4b4e58ea5d217706aa2b402d88.tar.gz openembedded-core-71062c1e0fb45a4b4e58ea5d217706aa2b402d88.tar.bz2 openembedded-core-71062c1e0fb45a4b4e58ea5d217706aa2b402d88.tar.xz openembedded-core-71062c1e0fb45a4b4e58ea5d217706aa2b402d88.zip |
path.py: add make_relative_symlink method
This method allows you to convert an absolute symlink into a
relative one.
Signed-off-by: Scott Garman <scott.a.garman@intel.com>
-rw-r--r-- | meta/lib/oe/path.py | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/meta/lib/oe/path.py b/meta/lib/oe/path.py index 683b09701..1fdfa8724 100644 --- a/meta/lib/oe/path.py +++ b/meta/lib/oe/path.py @@ -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) |