This commit is contained in:
MLH
2024-12-09 02:07:00 +01:00
parent 1cd0f4482f
commit 63382be5b9

View File

@ -14,9 +14,13 @@ def load_configuration(config_path):
def copy_with_mode(src, dest, mode='copy'): def copy_with_mode(src, dest, mode='copy'):
""" """
Copy files or directories with different modes. Copy files or directories with different modes and specific source/target paths.
""" """
try: try:
# Ensure full paths are used
src = os.path.abspath(src)
dest = os.path.abspath(dest)
# Ensure destination directory exists # Ensure destination directory exists
os.makedirs(os.path.dirname(dest), exist_ok=True) os.makedirs(os.path.dirname(dest), exist_ok=True)
@ -122,68 +126,49 @@ def process_copy_and_modify_rules(config):
'modifications': 0 'modifications': 0
} }
# Get destination directory
dest_dir = config.get('destination_directory', '.')
os.makedirs(dest_dir, exist_ok=True)
# Process copy rules # Process copy rules
for copy_rule in config.get('copy_rules', []): for copy_rule in config.get('copy_rules', []):
sources = copy_rule.get('sources', []) sources = copy_rule.get('sources', [])
mode = copy_rule.get('mode', 'copy') mode = copy_rule.get('mode', 'copy')
for src in sources: for source_info in sources:
# Support both simple string and dictionary input
if isinstance(source_info, str):
src = source_info
dest = os.path.join(
config.get('destination_directory', '.'),
os.path.basename(src)
)
elif isinstance(source_info, dict):
src = source_info.get('source')
dest = source_info.get('target')
# Fallback if target is not specified
if not dest:
dest = os.path.join(
config.get('destination_directory', '.'),
os.path.basename(src)
)
else:
print(f'Invalid source configuration: {source_info}')
continue
# Expand potential wildcards # Expand potential wildcards
matching_sources = glob.glob(src) matching_sources = glob.glob(src)
for matched_src in matching_sources: for matched_src in matching_sources:
# Determine destination path # Determine full destination path
if os.path.isdir(matched_src): if os.path.isdir(matched_src):
dest = os.path.join(dest_dir, os.path.basename(matched_src)) full_dest = os.path.join(dest, os.path.basename(matched_src))
else: else:
dest = os.path.join(dest_dir, os.path.basename(matched_src)) full_dest = dest
# Perform copy # Perform copy
if copy_with_mode(matched_src, dest, mode): if copy_with_mode(matched_src, full_dest, mode):
successful_operations['copies'] += 1 successful_operations['copies'] += 1
# Process modification rules # Rest of the function remains the same as in the original script
for mod_rule in config.get('modification_rules', []): # ... (modification rules processing)
search_pattern = mod_rule.get('file_pattern')
insert_rules = mod_rule.get('insert_rules', [])
replace_rules = mod_rule.get('replace_rules', [])
# Walk through destination directory
for root, _, files in os.walk(dest_dir):
for filename in files:
# Check if file matches pattern
if matches_file_pattern(filename, search_pattern):
full_path = os.path.join(root, filename)
try:
# Read file content
with open(full_path, 'r', encoding='utf-8') as file:
content = file.read()
# Apply insert rules
content_after_insert, insert_modified = apply_insert_rules(
content, insert_rules
)
# Apply replace rules
final_content, replace_modified = apply_replace_rules(
content_after_insert, replace_rules
)
# Save modified file
if insert_modified or replace_modified:
with open(full_path, 'w', encoding='utf-8') as file:
file.write(final_content)
successful_operations['modifications'] += 1
print(f'Modified: {full_path}')
except Exception as e:
print(f'Error processing file {full_path}: {e}')
return successful_operations return successful_operations