mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2025-03-29 04:23:34 +01:00
52 lines
2.2 KiB
Python
52 lines
2.2 KiB
Python
import os
|
|
import argparse
|
|
import pathspec
|
|
|
|
def load_gitignore_patterns(source_dir):
|
|
"""Loads .gitignore patterns from the given source directory and returns a PathSpec object."""
|
|
gitignore_path = os.path.join(source_dir, ".gitignore")
|
|
if not os.path.exists(gitignore_path):
|
|
return pathspec.PathSpec.from_lines("gitwildmatch", [])
|
|
|
|
with open(gitignore_path, "r", encoding="utf-8") as f:
|
|
patterns = f.readlines()
|
|
|
|
return pathspec.PathSpec.from_lines("gitwildmatch", patterns)
|
|
|
|
def generate_yaml_index(source_dir, output_file):
|
|
"""Generates an index file listing all YAML files in the specified directory while respecting .gitignore rules."""
|
|
|
|
yaml_files = []
|
|
spec = load_gitignore_patterns(source_dir) # Load .gitignore rules
|
|
|
|
# Walk through the source directory and collect YAML files
|
|
for root, _, files in os.walk(source_dir):
|
|
for file in files:
|
|
file_path = os.path.relpath(os.path.join(root, file), start=source_dir)
|
|
|
|
if file.endswith(('.yml', '.yaml')) and not spec.match_file(file_path):
|
|
yaml_files.append(os.path.join(root, file))
|
|
|
|
# Create the output directory if it doesn't exist
|
|
os.makedirs(os.path.dirname(output_file), exist_ok=True)
|
|
|
|
# Write the YAML index to the output file
|
|
with open(output_file, "w", encoding="utf-8") as f:
|
|
f.write("YAML Files\n===========\n\n")
|
|
f.write("This document lists all `.yaml` and `.yml` files found in the specified directory, excluding ignored files.\n\n")
|
|
|
|
for file in sorted(yaml_files):
|
|
relative_file_path = os.path.relpath(file, start=os.path.dirname(output_file))
|
|
f.write(f".. literalinclude:: {relative_file_path}\n :language: yaml\n :linenos:\n\n")
|
|
|
|
|
|
print(f"YAML index has been generated at {output_file}")
|
|
|
|
if __name__ == "__main__":
|
|
parser = argparse.ArgumentParser(description="Generate an index for YAML files while respecting .gitignore.")
|
|
parser.add_argument("--source-dir", required=True, help="Directory containing YAML files.")
|
|
parser.add_argument("--output-file", required=True, help="Path to the output .rst file.")
|
|
|
|
args = parser.parse_args()
|
|
generate_yaml_index(args.source_dir, args.output_file)
|