Fix bug in _internal_copy_files where the rule would fail in downstream repositories.

Taken from https://github.com/protocolbuffers/upb/blob/main/bazel/protobuf.patch#L42

Fixes https://github.com/protocolbuffers/protobuf/issues/12620.

PiperOrigin-RevId: 528586464
diff --git a/python/internal.bzl b/python/internal.bzl
index 7441721..8f99bec 100644
--- a/python/internal.bzl
+++ b/python/internal.bzl
@@ -1,4 +1,12 @@
-# Internal helpers for building the Python protobuf runtime.
+"""
+Internal helpers for building the Python protobuf runtime.
+"""
+
+def _remove_cross_repo_path(path):
+    components = path.split("/")
+    if components[0] == "..":
+        return "/".join(components[2:])
+    return path
 
 def _internal_copy_files_impl(ctx):
     strip_prefix = ctx.attr.strip_prefix
@@ -7,10 +15,11 @@
 
     src_dests = []
     for src in ctx.files.srcs:
-        if src.short_path[:len(strip_prefix)] != strip_prefix:
+        short_path = _remove_cross_repo_path(src.short_path)
+        if short_path[:len(strip_prefix)] != strip_prefix:
             fail("Source does not start with %s: %s" %
-                 (strip_prefix, src.short_path))
-        dest = ctx.actions.declare_file(src.short_path[len(strip_prefix):])
+                 (strip_prefix, short_path))
+        dest = ctx.actions.declare_file(short_path[len(strip_prefix):])
         src_dests.append([src, dest])
 
     if ctx.attr.is_windows: