diff --git a/README.md b/README.md index 988ad7d..ef3cf3b 100644 --- a/README.md +++ b/README.md @@ -116,6 +116,22 @@ You can copy this file from the [existing example in the project](https://github Using these settings, you can control which files and directories are included or excluded from the final text file. +### Wildcards and Inclusions + +Using Wildcard Patterns + +- `*.ext`: Matches any file ending with .ext in any directory. +- `dir/*.ext`: Matches files ending with .ext in the specified directory dir/. +- `**/*.ext`: Matches files ending with .ext in any subdirectory (recursive). + +If you want to include certain files that would otherwise be ignored, use the ! pattern: + +```yaml +ignore-tree-and-content: + - "*.txt" + - "!README.txt" +``` + ## gitignore Rule to Ignore generated files To ignore the generated text files, add the following lines to your `.gitignore` file: diff --git a/repo_to_text/main.py b/repo_to_text/main.py index 63f2e13..521357a 100644 --- a/repo_to_text/main.py +++ b/repo_to_text/main.py @@ -100,6 +100,17 @@ def load_ignore_specs(path='.'): return gitignore_spec, content_ignore_spec, tree_and_content_ignore_spec def should_ignore_file(file_path, relative_path, gitignore_spec, content_ignore_spec, tree_and_content_ignore_spec): + # Normalize relative_path to use forward slashes + relative_path = relative_path.replace(os.sep, '/') + + # Remove leading './' if present + if relative_path.startswith('./'): + relative_path = relative_path[2:] + + # Append '/' to directories to match patterns ending with '/' + if os.path.isdir(file_path): + relative_path += '/' + result = ( is_ignored_path(file_path) or (gitignore_spec and gitignore_spec.match_file(relative_path)) or @@ -107,8 +118,11 @@ def should_ignore_file(file_path, relative_path, gitignore_spec, content_ignore_ (tree_and_content_ignore_spec and tree_and_content_ignore_spec.match_file(relative_path)) or os.path.basename(file_path).startswith('repo-to-text_') ) - - logging.debug(f'Checking if file should be ignored: {file_path}, relative path: {relative_path}, result: {result}') + + logging.debug(f'Checking if file should be ignored:') + logging.debug(f' file_path: {file_path}') + logging.debug(f' relative_path: {relative_path}') + logging.debug(f' Result: {result}') return result def is_ignored_path(file_path: str) -> bool: