Compare commits

..

No commits in common. "main" and "v0.7.0" have entirely different histories.
main ... v0.7.0

5 changed files with 14 additions and 47 deletions

View file

@ -1,7 +1,3 @@
---
alwaysApply: true
---
# repo-to-text
## Project Overview

View file

@ -1 +0,0 @@
.cursor/index.mdc

View file

@ -1 +0,0 @@
.cursor/index.mdc

View file

@ -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" },
]

View file

@ -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<content full_path="{cleaned_relative_path}">\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</content>\n')
_add_chunk_to_output('\n</repo-to-text>\n')