This is an automated email from the ASF dual-hosted git repository.

xuanwo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-opendal.git


The following commit(s) were added to refs/heads/main by this push:
     new e3070e66c fix(ci): Make sure merge_local_staging handles all subdir 
(#3788)
e3070e66c is described below

commit e3070e66c71d57415c4a6364443e1189d7344711
Author: Xuanwo <[email protected]>
AuthorDate: Wed Dec 20 13:32:44 2023 +0800

    fix(ci): Make sure merge_local_staging handles all subdir (#3788)
    
    * fix(ci): Make sure merge_local_staging handles all subdir
    
    Signed-off-by: Xuanwo <[email protected]>
    
    * Add some logs
    
    Signed-off-by: Xuanwo <[email protected]>
    
    * address comments
    
    Signed-off-by: Xuanwo <[email protected]>
    
    * Add comments
    
    Signed-off-by: Xuanwo <[email protected]>
    
    * refactor
    
    Signed-off-by: Xuanwo <[email protected]>
    
    * Print tree after merging
    
    Signed-off-by: Xuanwo <[email protected]>
    
    * Add more log for merging
    
    Signed-off-by: Xuanwo <[email protected]>
    
    * polish
    
    Signed-off-by: Xuanwo <[email protected]>
    
    ---------
    
    Signed-off-by: Xuanwo <[email protected]>
---
 scripts/merge_local_staging.py | 86 ++++++++++++++++++++++++++++--------------
 1 file changed, 58 insertions(+), 28 deletions(-)

diff --git a/scripts/merge_local_staging.py b/scripts/merge_local_staging.py
index a70272c43..b63a215b4 100644
--- a/scripts/merge_local_staging.py
+++ b/scripts/merge_local_staging.py
@@ -16,41 +16,71 @@
 # specific language governing permissions and limitations
 # under the License.
 
-import os
-import shutil
 import sys
+from pathlib import Path
+import shutil
 
 
-def copy_and_append_index(target_directory, dir_path):
-    sub_dir_name = os.path.basename(os.listdir(dir_path)[0])
-    sub_dir_path = os.path.join(dir_path, sub_dir_name)
+# Copy the contents of the source directory to the target directory,
+# appending the contents of the .index file
+def copy_and_append_index(target, source):
+    for src_dir in source.iterdir():
+        if src_dir.is_dir():
+            dst_dir = target / src_dir.name
+            dst_dir.mkdir(parents=True, exist_ok=True)
 
-    # Create target subdirectory if it doesn't exist
-    target_sub_dir = os.path.join(target_directory, sub_dir_name)
-    os.makedirs(target_sub_dir, exist_ok=True)
+            src_path = src_dir / ".index"
+            dst_path = dst_dir / ".index"
+            if src_path.exists():
+                with src_path.open("r") as src, dst_path.open("a") as dst:
+                    print(f"Appending {src_path} to {dst_path}")
+                    dst.write(src.read())
 
-    # Append contents of .index file
-    with open(os.path.join(sub_dir_path, ".index"), "r") as index_file:
-        with open(os.path.join(target_sub_dir, ".index"), "a") as 
target_index_file:
-            target_index_file.write(index_file.read())
+            for item in src_dir.iterdir():
+                if item.name != ".index":  # Avoid copying the .index file 
twice
+                    print(f"Copying {item} to {dst_dir}")
+                    if item.is_dir():
+                        shutil.copytree(item, dst_dir / item.name, 
dirs_exist_ok=True)
+                    else:
+                        shutil.copy2(item, dst_dir / item.name)
+
+
+def print_directory_contents(directory, prefix=""):
+    for item in directory.iterdir():
+        print(f"{prefix}{item.relative_to(directory)}")
+        if item.is_dir():
+            print_directory_contents(item, prefix + "    ")
 
-    # Copy contents from source subdirectory to target subdirectory
-    for item in os.listdir(sub_dir_path):
-        s = os.path.join(sub_dir_path, item)
-        d = os.path.join(target_sub_dir, item)
-        if os.path.isdir(s):
-            shutil.copytree(s, d, dirs_exist_ok=True)
-        else:
-            shutil.copy2(s, d)
 
+def print_index_contents(directory):
+    for sub_dir in directory.rglob('.index'):
+        with sub_dir.open("r") as file:
+            print(file.read())
+
+
+def main():
+    if len(sys.argv) < 3:
+        print("Usage: merge_local_staging.py <target> <source> [<source> ...]")
+        sys.exit(1)
+
+    target = Path(sys.argv[1])
+    print(f"Target directory set to {target}")
+
+    for dir_path in sys.argv[2:]:
+        source = Path(dir_path)
+        if source.is_dir():
+            print(f"Processing {source}")
+            copy_and_append_index(target, source)
+        else:
+            print(f"{dir_path} is not a valid directory.")
+            sys.exit(1)
 
-if len(sys.argv) < 3:
-    print("Expected target directory and at least one local staging directory")
-    sys.exit(1)
+    # Print content of target for debugging.
+    print(f"Content of {target}:")
+    print_directory_contents(target)
+    print(f"Content of index:")
+    print_index_contents(target)
 
-target_directory = sys.argv[1]
 
-# Loop through each provided directory argument
-for i in range(2, len(sys.argv)):
-    dir_path = sys.argv[i]
-    copy_and_append_index(target_directory, dir_path)
+if __name__ == "__main__":
+    main()

Reply via email to