[oe-commits] Chris Larson : base.bbclass: Add base_path_relative.

GIT User account git at amethyst.openembedded.net
Sat Mar 21 19:43:19 UTC 2009


Module: openembedded.git
Branch: org.openembedded.dev
Commit: 4cd7e03d78aed8ee6f3bd18d569a0ee9b2587633
URL:    http://gitweb.openembedded.net/?p=openembedded.git&a=commit;h=4cd7e03d78aed8ee6f3bd18d569a0ee9b2587633

Author: Chris Larson <clarson at mvista.com>
Date:   Fri Mar 13 13:35:56 2009 -0700

base.bbclass: Add base_path_relative.

base_path_relative returns a relative path from src to dest.

Examples:

>>> base_path_relative("/usr/bin", "/tmp/foo/bar")
../../tmp/foo/bar

>>> base_path_relative("/usr/bin", "/usr/lib")
../lib

>>> base_path_relative("/tmp", "/tmp/foo/bar")
foo/bar

Signed-off-by: Chris Larson <clarson at mvista.com>

---

 classes/base.bbclass |   29 +++++++++++++++++++++++++++++
 1 files changed, 29 insertions(+), 0 deletions(-)

diff --git a/classes/base.bbclass b/classes/base.bbclass
index 11f6554..9bcd2ab 100644
--- a/classes/base.bbclass
+++ b/classes/base.bbclass
@@ -10,6 +10,35 @@ def base_path_join(a, *p):
             path += '/' + b
     return path
 
+def base_path_relative(src, dest):
+    """ Return a relative path from src to dest.
+
+    >>> base_path_relative("/usr/bin", "/tmp/foo/bar")
+    ../../tmp/foo/bar
+
+    >>> base_path_relative("/usr/bin", "/usr/lib")
+    ../lib
+
+    >>> base_path_relative("/tmp", "/tmp/foo/bar")
+    foo/bar
+    """
+    from os.path import sep, pardir, normpath, commonprefix
+
+    destlist = normpath(dest).split(sep)
+    srclist = normpath(src).split(sep)
+
+    # Find common section of the path
+    common = commonprefix([destlist, srclist])
+    commonlen = len(common)
+
+    # Climb back to the point where they differentiate
+    relpath = [ pardir ] * (len(srclist) - commonlen)
+    if commonlen < len(destlist):
+        # Add remaining portion
+        relpath += destlist[commonlen:]
+
+    return sep.join(relpath)
+
 # for MD5/SHA handling
 def base_chk_load_parser(config_path):
     import ConfigParser, os, bb





More information about the Openembedded-commits mailing list