]> granicus.if.org Git - python/commitdiff
Added 'change_root()' to forcibly slap a new root directory onto a pathname,
authorGreg Ward <gward@python.net>
Thu, 27 Apr 2000 01:53:46 +0000 (01:53 +0000)
committerGreg Ward <gward@python.net>
Thu, 27 Apr 2000 01:53:46 +0000 (01:53 +0000)
even if it's already absolute.  Currently only implemented for Unix; I'm
not entirely sure of the right thing to do for DOS/Windows, and have no
clue what to do for Mac OS.

Lib/distutils/util.py

index ca20ae047a625976c961d42399079efb287022e0..8e642e16c6d9b330aa0f6d6a48591ca789ff63dc 100644 (file)
@@ -85,6 +85,32 @@ def native_path (pathname):
 # native_path ()
 
 
+def change_root (new_root, pathname):
+
+    """Return 'pathname' with 'new_root' prepended.  If 'pathname' is
+    relative, this is equivalent to "os.path.join(new_root,pathname)".
+    Otherwise, it requires making 'pathname' relative and then joining the
+    two, which is tricky on DOS/Windows and Mac OS."""
+
+    if not abspath (pathname):
+        return os.path.join (new_root, pathname)
+
+    elif os.name == 'posix':
+        return os.path.join (new_root, pathname[1:])
+
+    elif os.name == 'nt':
+        (root_drive, root_path) = os.path.splitdrive (new_root)
+        (drive, path) = os.path.splitdrive (pathname)
+        raise RuntimeError, "I give up -- not sure how to do this on Windows"
+
+    elif os.name == 'mac':
+        raise RuntimeError, "no clue how to do this on Mac OS"
+
+    else:
+        raise DistutilsPlatformError, \
+              "nothing known about platform '%s'" % os.name
+
+
 def _check_environ ():
     """Ensure that 'os.environ' has all the environment variables we
        guarantee that users can use in config files, command-line