fixes
This commit is contained in:
@ -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
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user