Rewrite generate-xcfilelists in Python
[WebKit-https.git] / Tools / Scripts / webkitpy / xcode / __init__.py
index ef65bee..7a218c8 100644 (file)
@@ -1 +1,26 @@
 # Required for Python to search this directory for module files
+
+import hashlib
+import struct
+
+
+# The default location for Xcode's "DerivedData" (build output and intermediate
+# files) is a unique directory in ~/Library/Developer/Xcode/DerivedData with a
+# name incorporating a hash based on the full path of the project or workspace
+# being built. The following function takes that path and returns the
+# corresponding hash.
+#
+# The algorithm is adapted from the following article:
+#
+#   <https://pewpewthespells.com/blog/xcode_deriveddata_hashes.pdf>
+
+def xcode_hash_for_path(path):
+    def convert_to_string(n):
+        s = ''
+        for _ in range(0, 14):
+            (n, r) = divmod(n, 26)
+            s = chr(r + 97) + s
+        return s
+
+    (part1, part2) = struct.unpack(">QQ", hashlib.md5(path.encode()).digest())
+    return convert_to_string(part1) + convert_to_string(part2)