manuais-e-documentacao-itguys/.gemini/flatten_structure.py

80 lines
3.5 KiB
Python

import os
import shutil
ROOT_DIR = os.getcwd()
def flatten_structure_deep():
print("Starting Deep Flattening...")
# Iterate over all directories in root
for item in os.listdir(ROOT_DIR):
theme_dir = os.path.join(ROOT_DIR, item)
# We only care about "documentacao *" folders
if os.path.isdir(theme_dir) and item.startswith("documentacao "):
print(f"Processing Theme: {item}")
# Walk top-down through the directory
# We use os.walk but we need to be careful not to process files we just moved.
# So we list dir first.
subdirs = [d for d in os.listdir(theme_dir) if os.path.isdir(os.path.join(theme_dir, d))]
for subdir in subdirs:
if subdir == "assets":
continue # Skip root assets
subdir_path = os.path.join(theme_dir, subdir)
print(f" Flattening subfolder: {subdir}")
# Recursively move everything from this folder to theme_dir
for root, dirs, files in os.walk(subdir_path, topdown=False):
for name in files:
src_file = os.path.join(root, name)
# Calculate relative path to preserve context in filename if needed
# But user wants ROOT.
# Collision strategy: If file exists, prepend folder name.
dest_file = os.path.join(theme_dir, name)
if os.path.exists(dest_file):
# Collision! Prepend subdir name to filename
# Ex: "manual.md" -> "Asterisk_manual.md"
print(f" Collision for {name}. Renaming...")
new_name = f"{subdir}_{name}"
dest_file = os.path.join(theme_dir, new_name)
shutil.move(src_file, dest_file)
print(f" Moved: {name} -> {os.path.basename(dest_file)}")
for name in dirs:
# Handle Assets folders
if name == "assets":
assets_src = os.path.join(root, name)
theme_assets = os.path.join(theme_dir, "assets")
if not os.path.exists(theme_assets):
os.makedirs(theme_assets)
for asset_file in os.listdir(assets_src):
a_src = os.path.join(assets_src, asset_file)
a_dst = os.path.join(theme_assets, asset_file)
if not os.path.exists(a_dst):
shutil.move(a_src, a_dst)
try:
os.rmdir(assets_src)
except:
pass
# Remove the original subfolder if empty
try:
shutil.rmtree(subdir_path)
print(f" Removed folder: {subdir}")
except Exception as e:
print(f" Warning: Could not remove {subdir}: {e}")
if __name__ == "__main__":
flatten_structure_deep()