diff --git a/.cursor/index.mdc b/.cursorrules similarity index 95% rename from .cursor/index.mdc rename to .cursorrules index 5b9200b..3ebccca 100644 --- a/.cursor/index.mdc +++ b/.cursorrules @@ -1,7 +1,3 @@ ---- -alwaysApply: true ---- - # repo-to-text ## Project Overview diff --git a/AGENTS.md b/AGENTS.md deleted file mode 120000 index 94443be..0000000 --- a/AGENTS.md +++ /dev/null @@ -1 +0,0 @@ -.cursor/index.mdc \ No newline at end of file diff --git a/CLAUDE.md b/CLAUDE.md deleted file mode 120000 index 94443be..0000000 --- a/CLAUDE.md +++ /dev/null @@ -1 +0,0 @@ -.cursor/index.mdc \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index ff44c8d..19e9e99 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "repo-to-text" -version = "0.8.0" +version = "0.7.0" authors = [ { name = "Kirill Markin", email = "markinkirill@gmail.com" }, ] diff --git a/repo_to_text/core/core.py b/repo_to_text/core/core.py index ccc9460..6dfcda9 100644 --- a/repo_to_text/core/core.py +++ b/repo_to_text/core/core.py @@ -4,7 +4,6 @@ Core functionality for repo-to-text import os import subprocess -import platform from typing import Tuple, Optional, List, Dict, Any, Set from datetime import datetime, timezone from importlib.machinery import ModuleSpec @@ -37,20 +36,12 @@ def get_tree_structure( def run_tree_command(path: str) -> str: """Run the tree command and return its output.""" - if platform.system() == "Windows": - cmd = ["cmd", "/c", "tree", "/a", "/f", path] - else: - cmd = ["tree", "-a", "-f", "--noreport", path] - result = subprocess.run( - cmd, + ['tree', '-a', '-f', '--noreport', path], stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - text=True, - encoding='utf-8', check=True ) - return result.stdout + return result.stdout.decode('utf-8') def filter_tree_output( tree_output: str, @@ -352,33 +343,6 @@ def save_repo_to_text( return output_filepaths[0] return "" -def _read_file_content(file_path: str) -> str: - """Read file content, handling binary files and broken symlinks. - - Args: - file_path: Path to the file to read - - Returns: - str: File content or appropriate message for special cases - """ - try: - with open(file_path, 'r', encoding='utf-8') as f: - return f.read() - except UnicodeDecodeError: - logging.debug('Handling binary file contents: %s', file_path) - with open(file_path, 'rb') as f_bin: - binary_content: bytes = f_bin.read() - return binary_content.decode('latin1') - except FileNotFoundError as e: - # Minimal handling for bad symlinks - if os.path.islink(file_path) and not os.path.exists(file_path): - try: - target = os.readlink(file_path) - except OSError: - target = '' - return f"[symlink] -> {target}" - raise e - def generate_output_content( path: str, @@ -453,8 +417,17 @@ def generate_output_content( cleaned_relative_path = relative_path.replace('./', '', 1) _add_chunk_to_output(f'\n\n') - file_content = _read_file_content(file_path) - _add_chunk_to_output(file_content) + + try: + with open(file_path, 'r', encoding='utf-8') as f: + file_content = f.read() + _add_chunk_to_output(file_content) + except UnicodeDecodeError: + logging.debug('Handling binary file contents: %s', file_path) + with open(file_path, 'rb') as f_bin: + binary_content: bytes = f_bin.read() + _add_chunk_to_output(binary_content.decode('latin1')) # Add decoded binary + _add_chunk_to_output('\n\n') _add_chunk_to_output('\n\n')