Fix tree command for Windows (fixes #26)

- Add platform detection to run_tree_command
- Use 'cmd /c tree /a /f' syntax on Windows
- Keep 'tree -a -f --noreport' syntax on Unix/Linux/Mac
- Modernize subprocess call with text=True and encoding='utf-8'
- Add stderr=subprocess.PIPE for better error handling

All 43 tests pass successfully.
This commit is contained in:
Kirill Markin 2025-10-25 15:02:18 +02:00
parent de1c84eca3
commit 3721ed45f0
No known key found for this signature in database
GPG key ID: 03AB9530E15B9C1C

View file

@ -4,6 +4,7 @@ Core functionality for repo-to-text
import os import os
import subprocess import subprocess
import platform
from typing import Tuple, Optional, List, Dict, Any, Set from typing import Tuple, Optional, List, Dict, Any, Set
from datetime import datetime, timezone from datetime import datetime, timezone
from importlib.machinery import ModuleSpec from importlib.machinery import ModuleSpec
@ -36,12 +37,20 @@ def get_tree_structure(
def run_tree_command(path: str) -> str: def run_tree_command(path: str) -> str:
"""Run the tree command and return its output.""" """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( result = subprocess.run(
['tree', '-a', '-f', '--noreport', path], cmd,
stdout=subprocess.PIPE, stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True,
encoding='utf-8',
check=True check=True
) )
return result.stdout.decode('utf-8') return result.stdout
def filter_tree_output( def filter_tree_output(
tree_output: str, tree_output: str,