enhanced-mcp-tools/tests/test_git_detection.py
Ryan Malloy 92b158b847
Some checks failed
CI / Code Quality (push) Failing after 17s
CI / Test (ubuntu-latest, 3.10) (push) Failing after 5s
CI / Test (ubuntu-latest, 3.11) (push) Failing after 4s
CI / Test (ubuntu-latest, 3.12) (push) Failing after 4s
CI / Test (ubuntu-latest, 3.13) (push) Failing after 4s
CI / Coverage (push) Failing after 25s
CI / Test (macos-latest, 3.13) (push) Has been cancelled
CI / Test (macos-latest, 3.10) (push) Has been cancelled
CI / Test (macos-latest, 3.11) (push) Has been cancelled
CI / Test (macos-latest, 3.12) (push) Has been cancelled
CI / Test (windows-latest, 3.10) (push) Has been cancelled
CI / Test (windows-latest, 3.11) (push) Has been cancelled
CI / Test (windows-latest, 3.12) (push) Has been cancelled
CI / Test (windows-latest, 3.13) (push) Has been cancelled
🚀 Initial release: Enhanced MCP Tools v1.0.0
 Features:
- 50+ development tools across 13 specialized categories
-  Sneller Analytics: High-performance vectorized SQL (TB/s throughput)
- 🎬 Asciinema Integration: Terminal recording and sharing
- 🧠 AI-Powered Recommendations: Intelligent tool suggestions
- 🔀 Advanced Git Integration: Smart operations with AI suggestions
- 📁 Enhanced File Operations: Monitoring, bulk ops, backups
- 🔍 Semantic Code Search: AST-based intelligent analysis
- 🏗️ Development Workflow: Testing, linting, formatting
- 🌐 Network & API Tools: HTTP client, mock servers
- 📦 Archive & Compression: Multi-format operations
- 🔬 Process Tracing: System call monitoring
- 🌍 Environment Management: Virtual envs, dependencies

🎯 Ready for production with comprehensive documentation and MCP Inspector support!
2025-06-23 02:33:23 -06:00

183 lines
7.1 KiB
Python

#!/usr/bin/env python3
"""
Test script for git repository detection in file listings
Tests the new git repository detection functionality across all file listing tools
"""
import asyncio
import json
from pathlib import Path
from enhanced_mcp.file_operations import EnhancedFileOperations
async def test_git_repository_detection():
"""Test git repository detection functionality"""
# Initialize the file operations class
file_ops = EnhancedFileOperations()
print("🔍 Testing Git Repository Detection in File Listings")
print("=" * 60)
# Test on the current project directory (should be a git repo)
project_dir = "/home/rpm/claude/enhanced-mcp-tools"
print(f"📁 Testing in: {project_dir}")
# Test 1: Enhanced Directory Listing with Git Detection
print("\n=== Test 1: Enhanced Directory Listing with Git Detection ===")
enhanced_result = await file_ops.enhanced_list_directory(
directory_path=project_dir,
include_hidden=False,
include_git_info=True,
recursive_depth=1,
file_pattern="*.py",
)
if "error" in enhanced_result:
print(f"❌ Error: {enhanced_result['error']}")
else:
print("✅ Enhanced directory listing completed!")
# Show git repository info
git_repo_info = enhanced_result.get("git_repository")
if git_repo_info:
print("📊 Git Repository Detection:")
print(f" Is git repo: {git_repo_info.get('is_git_repo', False)}")
if git_repo_info.get("is_git_repo"):
print(f" Git root: {git_repo_info.get('git_root', 'Unknown')}")
print(f" Current branch: {git_repo_info.get('current_branch', 'Unknown')}")
print(f" Git type: {git_repo_info.get('git_type', 'Unknown')}")
# Show summary
summary = enhanced_result["summary"]
print("📋 Summary:")
print(f" Total items: {summary['total_items']}")
print(f" Files: {summary['files']}")
print(f" Directories: {summary['directories']}")
print(f" Git tracked items: {summary['git_tracked_items']}")
# Show first few items with git flags
print("📄 Sample items with git flags:")
for i, item in enumerate(enhanced_result["items"][:3]):
git_flag = "🔄" if item.get("in_git_repo", False) else "📁"
print(f" {git_flag} {item['name']} (in_git_repo: {item.get('in_git_repo', False)})")
# Test 2: Tree Directory Listing with Git Detection
print("\n=== Test 2: Tree Directory Listing with Git Detection ===")
tree_result = await file_ops.list_directory_tree(
root_path=project_dir,
max_depth=2,
include_hidden=False,
include_metadata=True,
exclude_patterns=["*.pyc", "__pycache__", ".venv"],
)
if "error" in tree_result:
print(f"❌ Error: {tree_result['error']}")
else:
print("✅ Tree directory listing completed!")
# Check first few items for git flags
def check_git_flags(node, depth=0):
"""Recursively check git flags in tree nodes"""
indent = " " * depth
git_flag = "🔄" if node.get("in_git_repo", False) else "📁"
print(
f"{indent}{git_flag} {node['name']} (in_git_repo: {node.get('in_git_repo', False)})"
)
if depth < 1: # Limit depth for readability
for child in node.get("children", [])[:3]:
check_git_flags(child, depth + 1)
print("📄 Tree structure with git flags:")
check_git_flags(tree_result["tree"])
# Test 3: tre Directory Tree with Git Detection
print("\n=== Test 3: tre Directory Tree with Git Detection ===")
tre_result = await file_ops.tre_directory_tree(
root_path=project_dir,
max_depth=2,
include_hidden=False,
exclude_patterns=[r"\.venv", r"__pycache__"],
)
if tre_result.get("success"):
print("✅ tre directory tree completed!")
stats = tre_result["metadata"]["statistics"]
print("📊 tre Statistics:")
print(f" Total items: {stats['total']}")
print(f" Files: {stats['files']}")
print(f" Directories: {stats['directories']}")
print(f" Git tracked: {stats.get('git_tracked', 0)}")
# Check git flags in tre output
def check_tre_git_flags(node, depth=0):
"""Check git flags in tre tree structure"""
indent = " " * depth
git_flag = "🔄" if node.get("in_git_repo", False) else "📁"
type_icon = "📁" if node.get("type") == "directory" else "📄"
print(
f"{indent}{git_flag}{type_icon} {node['name']} (in_git_repo: {node.get('in_git_repo', False)})"
)
if depth < 1: # Limit depth for readability
for child in node.get("contents", [])[:3]:
check_tre_git_flags(child, depth + 1)
print("📄 tre structure with git flags:")
check_tre_git_flags(tre_result["tree"])
else:
print(f"❌ tre Error: {tre_result.get('error', 'Unknown error')}")
# Test 4: Non-git Directory (for comparison)
print("\n=== Test 4: Non-git Directory (for comparison) ===")
temp_dir = "/tmp"
non_git_result = await file_ops.enhanced_list_directory(
directory_path=temp_dir, include_hidden=False, include_git_info=True, recursive_depth=1
)
if "error" in non_git_result:
print(f"❌ Error: {non_git_result['error']}")
else:
git_repo_info = non_git_result.get("git_repository")
print("📊 Non-git directory test:")
print(f" Is git repo: {git_repo_info.get('is_git_repo', False)}")
print(f" Git tracked items: {non_git_result['summary']['git_tracked_items']}")
# Test 5: Git Repository Detection Edge Cases
print("\n=== Test 5: Git Repository Detection Edge Cases ===")
edge_cases = [
{"path": "/", "description": "Root directory"},
{"path": "/home", "description": "Home directory"},
{"path": "/nonexistent", "description": "Non-existent directory"},
]
for case in edge_cases:
try:
result = await file_ops.enhanced_list_directory(
directory_path=case["path"], include_git_info=True, recursive_depth=1
)
if "error" in result:
print(f" {case['description']}: ❌ {result['error']}")
else:
git_info = result.get("git_repository", {})
is_git = git_info.get("is_git_repo", False)
print(f" {case['description']}: {'🔄' if is_git else '📁'} (git: {is_git})")
except Exception as e:
print(f" {case['description']}: ❌ Exception: {str(e)}")
print("\n🎉 Git repository detection tests completed!")
print("✅ All file listing tools now include git repository flags!")
print("🔄 Files/directories in git repositories are automatically detected!")
print("📁 Non-git files are clearly marked as well!")
if __name__ == "__main__":
asyncio.run(test_git_repository_detection())