Repository Metadata System - Complete Guide
Overview
The Repository Metadata System provides comprehensive tracking and management of repository metadata including read/write permissions, clone status, version information, synchronization dates, and much more. This system creates a structured database of all repository information for intelligent management and automation.
Features
🏗️ Comprehensive Metadata Tracking
- Access & Permissions: Read/write status, admin rights, private/public status
- Clone & Sync Status: Clone dates, sync status, local repository information
- Version Information: Branches, tags, releases, commit tracking
- Statistics: Stars, forks, watchers, issues, repository size, activity
- Local Repository Info: Git status, uncommitted changes, branch information
- Custom Fields: Tags, priority, category, notes for organization
🔧 GitHub API Integration
- Automatic Data Fetching: Real-time repository information from GitHub
- Permission Detection: Automatic access level determination
- Statistics Updates: Live stats including stars, forks, issues
- Language Analysis: Repository language breakdown
- Activity Tracking: Last activity and update timestamps
💻 Command Line Interface
- Metadata Management: Update, show, and manage repository metadata
- Comprehensive Reporting: Detailed reports with filtering and analysis
- Sync Status Monitoring: Track repository synchronization status
- Cleanup Tools: Remove metadata for non-existent repositories
Metadata Structure
Core Repository Information
{
"full_name": "docxology/codomyrmex",
"owner": "docxology",
"name": "codomyrmex",
"repo_type": "OWN",
"url": "https://github.com/docxology/codomyrmex.git",
"clone_url": "https://github.com/docxology/codomyrmex.git",
"description": "Repository description"
}
Access & Permissions
{
"access_level": "read_write",
"is_private": false,
"is_fork": false,
"can_push": true,
"can_admin": false
}
Clone & Sync Information
{
"clone_status": "cloned",
"sync_status": "up_to_date",
"local_path": "/Users/user/repos/project",
"clone_date": "2025-08-29T14:30:00Z",
"last_sync_date": "2025-08-29T14:35:00Z",
"last_fetch_date": "2025-08-29T14:35:00Z"
}
Version Information
{
"default_branch": "main",
"current_local_branch": "feature/new-feature",
"latest_remote_commit": "abc123...",
"latest_local_commit": "def456...",
"version_tags": ["v1.0.0", "v1.1.0"],
"latest_release": "v1.1.0"
}
Repository Statistics
{
"total_commits": 150,
"contributors": 5,
"stars": 25,
"forks": 8,
"watchers": 12,
"issues": 3,
"pull_requests": 2,
"size_kb": 1755,
"languages": {"Python": 85, "JavaScript": 15},
"last_activity": "2025-08-29T14:14:15Z"
}
Local Repository Information
{
"path": "/Users/user/repos/project",
"exists": true,
"is_git_repo": true,
"current_branch": "main",
"uncommitted_changes": true,
"untracked_files": ["new_file.py"],
"modified_files": ["existing_file.py"],
"staged_files": ["ready_file.py"],
"last_commit_hash": "c70676d4",
"last_commit_date": "2025-08-29T07:14:09",
"last_commit_message": "Add new feature",
"total_local_commits": 150
}
Custom Fields
{
"tags": ["important", "active-development"],
"notes": "Primary development repository",
"priority": 1,
"category": "core-project"
}
Command Line Interface
Installation & Setup
# The metadata CLI is available at:
python src/codomyrmex/git_operations/metadata_cli.py
# Or create an alias for convenience:
alias metadata-cli="python /path/to/codomyrmex/src/codomyrmex/git_operations/metadata_cli.py"
Basic Commands
1. Update Metadata
# Update single repository
python metadata_cli.py update --repository docxology/codomyrmex --type OWN --path /local/path
# Update from repository library
python metadata_cli.py update --from-library repository_library.txt
# Update with GitHub token for enhanced data
python metadata_cli.py --token YOUR_GITHUB_TOKEN update --repository docxology/codomyrmex
2. Show Metadata
# Show specific repository
python metadata_cli.py show --repository docxology/codomyrmex
# Show all repositories summary
python metadata_cli.py show
# Show with verbose details
python metadata_cli.py -v show
3. Generate Reports
# Basic report
python metadata_cli.py report
# Detailed report with analysis
python metadata_cli.py report --detailed
# Export report to JSON
python metadata_cli.py report --detailed --export report.json
4. Check Sync Status
# Check synchronization status
python metadata_cli.py sync-status
# Verbose sync status with details
python metadata_cli.py -v sync-status
5. Cleanup Metadata
# Dry run to see what would be removed
python metadata_cli.py cleanup --dry-run
# Actually remove metadata for non-existent repositories
python metadata_cli.py cleanup
Python API Usage
Basic Metadata Management
from codomyrmex.git_operations.core.metadata import (
RepositoryMetadataManager, AccessLevel, CloneStatus
)
# Initialize manager
manager = RepositoryMetadataManager(
metadata_file="custom_metadata.json",
github_token="your_github_token"
)
# Create or update metadata
metadata = manager.create_or_update_metadata(
full_name="docxology/codomyrmex",
owner="docxology",
name="codomyrmex",
repo_type="OWN",
url="https://github.com/docxology/codomyrmex.git",
description="Main project repository",
local_path="/Users/user/repos/codomyrmex"
)
# Save metadata
manager.save_metadata()
Querying Metadata
# Get specific repository metadata
metadata = manager.get_repository_metadata("docxology/codomyrmex")
if metadata:
print(f"Clone Status: {metadata.clone_status.value}")
print(f"Stars: {metadata.stats.stars}")
print(f"Last Activity: {metadata.stats.last_activity}")
# Get repositories by status
cloned_repos = manager.get_repositories_by_status(CloneStatus.CLONED)
print(f"Cloned repositories: {len(cloned_repos)}")
# Get repositories by access level
writable_repos = manager.get_repositories_by_access(AccessLevel.READ_WRITE)
print(f"Writable repositories: {len(writable_repos)}")
# Get outdated repositories
outdated = manager.get_outdated_repositories(days=30)
print(f"Repositories not synced in 30 days: {len(outdated)}")
Bulk Operations
# Bulk update from repository list
repositories = [
{
'owner': 'docxology',
'name': 'codomyrmex',
'type': 'OWN',
'url': 'https://github.com/docxology/codomyrmex.git',
'description': 'Main project',
'local_path': 'docxology/codomyrmex'
},
# ... more repositories
]
results = manager.bulk_update_metadata(repositories, "/Users/user/repos")
successful = sum(1 for success in results.values() if success)
print(f"Updated {successful}/{len(results)} repositories")
Generating Reports
# Generate comprehensive report
report = manager.generate_metadata_report()
print(f"Total repositories: {report['total_repositories']}")
print(f"Clone status breakdown: {report['status_breakdown']}")
print(f"Access level breakdown: {report['access_breakdown']}")
print(f"Total stars: {report['total_stars']}")
print(f"Outdated repositories: {report['outdated_repositories']}")
Integration with Repository Manager
Enhanced Repository Manager
from codomyrmex.git_operations.core.repository import RepositoryManager
# Initialize with metadata support
manager = RepositoryManager(
library_file="repository_library.txt",
base_path="/Users/user/repos",
metadata_file="metadata.json",
github_token="your_github_token"
)
# Clone repository with automatic metadata tracking
success = manager.clone_repository("docxology/codomyrmex")
# Metadata is automatically created and updated with:
# - Clone date and status
# - Local repository information
# - GitHub statistics
# - Access permissions
Automatic Metadata Updates
# The repository manager automatically:
# 1. Creates metadata when cloning repositories
# 2. Updates clone status and dates
# 3. Tracks local repository information
# 4. Fetches GitHub statistics and permissions
# 5. Saves metadata after operations
# Example workflow
repos_to_clone = ["docxology/codomyrmex", "docxology/docxology"]
for repo_name in repos_to_clone:
success = manager.clone_repository(repo_name)
if success:
# Metadata automatically updated with:
# - clone_date
# - clone_status = CLONED
# - local_info (branch, commits, etc.)
# - GitHub stats (stars, forks, etc.)
print(f"✅ Cloned {repo_name} with metadata tracking")
Metadata Fields Reference
Repository Types
- OWN: Your original repositories for development
- FORK: Forked repositories for contributions
- USE: External repositories for reference/usage
Access Levels
- READ_ONLY: Can read repository content
- READ_WRITE: Can read and push changes
- ADMIN: Full administrative access
- UNKNOWN: Access level not determined
Clone Status
- NOT_CLONED: Repository not cloned locally
- CLONED: Repository successfully cloned
- OUTDATED: Local copy needs updating
- ERROR: Error during clone/sync operations
- UNKNOWN: Status not determined
Sync Status
- UP_TO_DATE: Local and remote are synchronized
- AHEAD: Local has commits not pushed to remote
- BEHIND: Remote has commits not pulled locally
- DIVERGED: Local and remote have different commits
- UNKNOWN: Sync status not determined
Advanced Usage Examples
Repository Health Monitoring
def monitor_repository_health(manager):
"""Monitor repository health and generate alerts."""
# Check for repositories with uncommitted changes
all_repos = list(manager.metadata.values())
uncommitted = [r for r in all_repos if r.local_info.uncommitted_changes]
if uncommitted:
print("⚠️ Repositories with uncommitted changes:")
for repo in uncommitted:
print(f" {repo.full_name}: {len(repo.local_info.modified_files)} modified files")
# Check for outdated repositories
outdated = manager.get_outdated_repositories(7) # 7 days
if outdated:
print("📅 Repositories not synced in 7 days:")
for repo in outdated:
print(f" {repo.full_name}: {repo.last_sync_date or 'Never'}")
# Check for repositories with issues
issues = [r for r in all_repos if r.stats.issues > 0]
if issues:
print("🐛 Repositories with open issues:")
for repo in issues:
print(f" {repo.full_name}: {repo.stats.issues} issues")
# Usage
monitor_repository_health(manager)
Development Workflow Integration
def development_workflow_status(manager):
"""Check development workflow status."""
# Get development repositories
dev_repos = [r for r in manager.metadata.values() if r.repo_type == "OWN"]
print(f"📊 Development Repository Status ({len(dev_repos)} repos)")
print("-" * 50)
for repo in dev_repos:
status_icon = "✅" if repo.clone_status.value == "cloned" else "❌"
changes_icon = "📝" if repo.local_info.uncommitted_changes else "🔒"
print(f"{status_icon} {changes_icon} {repo.full_name}")
print(f" Branch: {repo.local_info.current_branch}")
print(f" Last Commit: {repo.local_info.last_commit_date}")
print(f" Stars: {repo.stats.stars}, Forks: {repo.stats.forks}")
if repo.local_info.uncommitted_changes:
print(f" ⚠️ {len(repo.local_info.modified_files)} modified, "
f"{len(repo.local_info.untracked_files)} untracked files")
print()
# Usage
development_workflow_status(manager)
Automated Reporting
def generate_weekly_report(manager):
"""Generate weekly repository activity report."""
from datetime import datetime, timedelta
# Get repositories active in the last week
week_ago = datetime.now() - timedelta(days=7)
active_repos = []
for repo in manager.metadata.values():
if repo.stats.last_activity:
try:
last_activity = datetime.fromisoformat(
repo.stats.last_activity.replace('Z', '+00:00')
)
if last_activity > week_ago:
active_repos.append((repo, last_activity))
except ValueError:
continue
# Sort by activity
active_repos.sort(key=lambda x: x[1], reverse=True)
print("📊 WEEKLY REPOSITORY ACTIVITY REPORT")
print("=" * 50)
print(f"Report Period: {week_ago.strftime('%Y-%m-%d')} to {datetime.now().strftime('%Y-%m-%d')}")
print(f"Active Repositories: {len(active_repos)}")
print()
for repo, activity_date in active_repos[:10]: # Top 10
print(f"🔥 {repo.full_name}")
print(f" Last Activity: {activity_date.strftime('%Y-%m-%d %H:%M')}")
print(f" Type: {repo.repo_type}")
print(f" Stars: {repo.stats.stars}, Issues: {repo.stats.issues}")
print()
# Usage
generate_weekly_report(manager)
Best Practices
1. Regular Metadata Updates
# Set up a cron job or scheduled task to update metadata regularly
# Daily update of all repositories
python metadata_cli.py update --from-library repository_library.txt
# Weekly detailed report
python metadata_cli.py report --detailed --export weekly_report.json
2. GitHub Token Usage
# Use GitHub token for enhanced metadata and higher API limits
export GITHUB_TOKEN="your_personal_access_token"
python metadata_cli.py --token $GITHUB_TOKEN update --from-library library.txt
3. Metadata Organization
# Use custom fields for organization
metadata.tags = ["important", "active-development", "python"]
metadata.priority = 1 # 0=normal, 1=high, 2=critical
metadata.category = "core-project"
metadata.notes = "Primary development repository with CI/CD"
4. Monitoring and Alerts
# Set up monitoring for important repositories
def check_critical_repos(manager):
critical_repos = [r for r in manager.metadata.values() if r.priority >= 1]
for repo in critical_repos:
if repo.local_info.uncommitted_changes:
print(f"🚨 CRITICAL: {repo.full_name} has uncommitted changes")
if not repo.last_sync_date:
print(f"⚠️ WARNING: {repo.full_name} never synced")
5. Backup and Recovery
# Regular backup of metadata
cp repository_metadata.json repository_metadata.backup.$(date +%Y%m%d)
# Recovery from backup
cp repository_metadata.backup.20250829 repository_metadata.json
Troubleshooting
Common Issues
1. Metadata Not Saving
# Check if metadata manager is properly initialized
manager = RepositoryMetadataManager()
print(f"Metadata file: {manager.metadata_file}")
print(f"File exists: {manager.metadata_file.exists()}")
# Manually save metadata
success = manager.save_metadata()
print(f"Save successful: {success}")
2. GitHub API Rate Limits
# Use GitHub token to increase rate limits
python metadata_cli.py --token YOUR_TOKEN update --repository owner/repo
# Check rate limit status
curl -H "Authorization: token YOUR_TOKEN" https://api.github.com/rate_limit
3. Local Repository Detection Issues
# Check local repository information
metadata = manager.get_repository_metadata("owner/repo")
if metadata:
print(f"Local path: {metadata.local_path}")
print(f"Path exists: {Path(metadata.local_path).exists()}")
print(f"Is git repo: {metadata.local_info.is_git_repo}")
4. Permission Issues
# Check file permissions
ls -la repository_metadata.json
# Fix permissions if needed
chmod 644 repository_metadata.json
Integration Examples
With CI/CD Pipelines
# GitHub Actions example
name: Update Repository Metadata
on:
schedule:
- cron: '0 6 * * *' # Daily at 6 AM
jobs:
update-metadata:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Update Metadata
run: |
python metadata_cli.py --token ${{ secrets.GITHUB_TOKEN }} \
update --from-library repository_library.txt
python metadata_cli.py report --export metadata_report.json
- name: Upload Report
uses: actions/upload-artifact@v2
with:
name: metadata-report
path: metadata_report.json
With Development Scripts
#!/usr/bin/env python3
"""Development environment status checker."""
from codomyrmex.git_operations.core.metadata import RepositoryMetadataManager
def main():
manager = RepositoryMetadataManager()
# Check development environment status
dev_repos = [r for r in manager.metadata.values() if r.repo_type == "OWN"]
print("🔧 Development Environment Status")
print("=" * 40)
for repo in dev_repos:
if repo.clone_status.value == "cloned":
if repo.local_info.uncommitted_changes:
print(f"⚠️ {repo.full_name}: Has uncommitted changes")
else:
print(f"✅ {repo.full_name}: Clean")
else:
print(f"❌ {repo.full_name}: Not cloned")
if __name__ == "__main__":
main()
This comprehensive metadata system provides complete visibility and control over your repository ecosystem, enabling intelligent automation and informed decision-making for your development workflow!
Navigation Links
- Parent: Project Overview
- Module Index: All Agents
- Documentation: Reference Guides
- Home: Root README