aboutsummaryrefslogtreecommitdiffstats
path: root/reverse_path.py
diff options
context:
space:
mode:
authorDan Willemsen <dwillemsen@google.com>2016-03-24 20:38:08 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2016-03-24 20:38:08 +0000
commiteea8e6c7e113d2090dfb684a66e4caaf4eddda59 (patch)
tree15e1cf0d5c8255863f1ba2239deb4a272fcae56a /reverse_path.py
parentca860ac720e2990bf60d701883ee86bdf9b736a1 (diff)
parent6ac18ecb84332b6e84f498434812541f58a64ed4 (diff)
downloadbuild_soong-eea8e6c7e113d2090dfb684a66e4caaf4eddda59.tar.gz
build_soong-eea8e6c7e113d2090dfb684a66e4caaf4eddda59.tar.bz2
build_soong-eea8e6c7e113d2090dfb684a66e4caaf4eddda59.zip
Merge "Improve BUILDDIR handling with symlinks"
Diffstat (limited to 'reverse_path.py')
-rwxr-xr-xreverse_path.py40
1 files changed, 40 insertions, 0 deletions
diff --git a/reverse_path.py b/reverse_path.py
new file mode 100755
index 00000000..7b7d6217
--- /dev/null
+++ b/reverse_path.py
@@ -0,0 +1,40 @@
+#!/usr/bin/env python
+
+from __future__ import print_function
+
+import os
+import sys
+
+# Find the best reverse path to reference the current directory from another
+# directory. We use this to find relative paths to and from the source and build
+# directories.
+#
+# If the directory is given as an absolute path, return an absolute path to the
+# current directory.
+#
+# If there's a symlink involved, and the same relative path would not work if
+# the symlink was replace with a regular directory, then return an absolute
+# path. This handles paths like out -> /mnt/ssd/out
+#
+# For symlinks that can use the same relative path (out -> out.1), just return
+# the relative path. That way out.1 can be renamed as long as the symlink is
+# updated.
+#
+# For everything else, just return the relative path. That allows the source and
+# output directories to be moved as long as they stay in the same position
+# relative to each other.
+def reverse_path(path):
+ if path.startswith("/"):
+ return os.path.abspath('.')
+
+ realpath = os.path.relpath(os.path.realpath('.'), os.path.realpath(path))
+ relpath = os.path.relpath('.', path)
+
+ if realpath != relpath:
+ return os.path.abspath('.')
+
+ return relpath
+
+
+if __name__ == '__main__':
+ print(reverse_path(sys.argv[1]))