#!/usr/bin/env python3
"""
Usage:
- To concatenate all WPT expectation files in the metadata directory into metadata.tx:
concat-extract-metadata.py --concat metadata > metadata.txt
- To extract expectation files from metadata.txt into the metadata directory:
concat-extract-metadata.py --extract metadata.txt metadata
"""
import argparse
import os
def concat_metadata_files(metadata_directory):
concatenated_metadata = ""
for root, _, files in os.walk(metadata_directory):
for filename in files:
if filename.endswith(".ini"):
filepath = os.path.join(root, filename)
relative_path = os.path.relpath(filepath, metadata_directory)
with open(filepath, "r") as file:
file_content = file.read()
concatenated_metadata += f"--- {relative_path} ---\n"
concatenated_metadata += file_content + "\n"
return concatenated_metadata
def extract_metadata_files(concatenated_metadata_file, output_metadata_directory):
with open(concatenated_metadata_file, "r") as file:
concatenated_metadata = file.read()
lines = concatenated_metadata.splitlines()
current_filename = None
current_content = []
def flush_content_to_file(filename, content, output_directory):
filepath = os.path.join(output_directory, filename)
os.makedirs(os.path.dirname(filepath), exist_ok=True)
with open(filepath, "w") as file:
file.write("\n".join(content))
return filepath
for line in lines:
if line.startswith("---"):
if current_filename:
flush_content_to_file(current_filename, current_content, output_metadata_directory)
current_filename = line[4:-4].strip()
current_content = []
else:
current_content.append(line)
if current_filename:
flush_content_to_file(current_filename, current_content, output_metadata_directory)
parser = argparse.ArgumentParser(description="Concatenate and extract WPT metadata files")
parser.add_argument("--concat", help="Concatenate expectation files from specified directory")
parser.add_argument("--extract", nargs=2, help="Extract expectation files from specified input concatenated file")
args = parser.parse_args()
if args.concat:
metadata_directory_path = args.concat
print(concat_metadata_files(metadata_directory_path))
if args.extract:
input_concatenated_metadata_filename, output_metadata_directory = args.extract
extract_metadata_files(input_concatenated_metadata_filename, output_metadata_directory)