feat: Add --verbose and --no-gitignore options to cloud upload#362
feat: Add --verbose and --no-gitignore options to cloud upload#362phernandez merged 4 commits intomainfrom
Conversation
Improves cloud upload diagnostics and user experience when files are filtered by ignore patterns. Changes: - Add --verbose flag to show detailed filtering information - Lists all files being scanned - Shows which files are ignored and which are included - Displays ignore patterns being used - Shows summary of files to upload vs ignored - Add --no-gitignore flag to skip .gitignore patterns - Still respects .bmignore patterns - Useful when uploading files that are normally gitignored - Enhanced ignore_utils.py: - Add use_gitignore parameter to load_gitignore_patterns() - Allows selective loading of ignore patterns - Comprehensive test coverage: - Test verbose output - Test --no-gitignore skips .gitignore patterns - Test --no-gitignore still respects .bmignore - Test wildcard patterns (reproduces user's issue) Fixes #361 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
|
Claude finished @phernandez's task —— View job PR Review Complete ✓I've reviewed this PR against the Basic Memory team checklist. Overall, this is a well-implemented feature that addresses a real user pain point with good test coverage and clear documentation. Code Quality & Standards✅ Follows Basic Memory's coding conventions - Code adheres to CLAUDE.md guidelines Testing & Documentation✅ Excellent test coverage - 4 new tests cover all new functionality:
✅ Good docstring updates - Clear parameter documentation Basic Memory Architecture✅ Preserves local-first principles - Upload feature respects user control Security & Performance✅ Good security design - Issues Found🐛 Bug: Incorrect path variable in verbose outputLocation: if verbose:
bmignore_path = directory / ".gitignore" # ❌ Should be ".bmignore"
gitignore_exists = bmignore_path.exists() and use_gitignoreImpact: Verbose output will always show "Using .gitignore: No" because it's checking for the existence of Fix: if verbose:
gitignore_path = directory / ".gitignore" # ✅ Correct variable name
gitignore_exists = gitignore_path.exists() and use_gitignore💡 Enhancement Suggestions
SummaryThis PR successfully addresses issue #361 with:
Recommendation: Fix the --- | Branch: |
The variable was checking for .gitignore but was incorrectly named bmignore_path, causing confusion. This fixes the variable name to accurately reflect what's being checked. Addresses code review feedback on PR #362
|
Claude finished @phernandez's task —— View job PR Review Complete ✓I've reviewed the updated PR. The bug identified in the previous review has been fixed in commit Todo List:
SummaryStatus: Ready to merge ✓ The variable naming bug at line 118 has been corrected. The code now properly uses Code Quality & Standards✅ Follows Basic Memory's coding conventions - Adheres to CLAUDE.md guidelines Fixed code (upload.py:118-119): gitignore_path = directory / ".gitignore"
gitignore_exists = gitignore_path.exists() and use_gitignoreTesting & Documentation✅ Excellent test coverage - 4 comprehensive new tests (89 new lines):
✅ Good docstring updates - Clear parameter documentation in functions Basic Memory Architecture✅ Preserves local-first principles - Upload respects user control over files Security & Performance✅ Good security design - Feature Implementation QualityProblem Solved: Users experiencing "No files found to upload" with no explanation now have:
Implementation highlights:
Minor Suggestions (Optional)These are nice-to-haves, not blockers:
Final Recommendation✅ Ready to merge This PR successfully addresses issue #361 with:
Great work on the implementation and the quick fix! 🎉 Branch: |
Allows users to preview what files would be uploaded without actually uploading them. Useful for: - Checking which files will be uploaded before committing - Verifying ignore patterns are working correctly - Estimating upload size and file count Features: - Shows list of files that would be uploaded with their sizes - Works with --verbose to show detailed filtering info - Displays total file count and size - Skips actual upload and sync when enabled Usage: bm cloud upload ./files --project test --dry-run bm cloud upload ./notes --project work --dry-run --verbose Includes comprehensive test coverage for dry-run functionality.
|
Claude finished @phernandez's task —— View job PR Review Complete ✅I've reviewed PR #362 against the Basic Memory team checklist. This is an excellent implementation that addresses a real user pain point with comprehensive test coverage, clear documentation, and good architectural design. Code Quality & Standards✅ Follows Basic Memory's coding conventions - Adheres to CLAUDE.md guidelines Code highlights:
Testing & Documentation✅ Unit tests for new functions - 4 comprehensive new tests (lines 330-462 in test_upload.py):
✅ Integration tests - Dry-run tests validate end-to-end behavior without mocking (lines 419-461) Test quality:
Basic Memory Architecture✅ MCP tools follow atomic, composable design - N/A (CLI feature, not MCP tool) Architecture strengths:
Security & Performance✅ No hardcoded secrets - Clean implementation Security highlights:
Feature Implementation QualityProblem Solved: Users experiencing "No files found to upload" with no explanation now have:
Implementation highlights:
All Commits Review✅ Commit e44f46f - Initial feature implementation (verbose + no-gitignore) All commits have:
SummaryStatus: ✅ READY TO MERGE This PR successfully addresses issue #361 with:
Strengths:
Optional enhancements (can be done in follow-up PR):
Excellent work! This is production-ready code that demonstrates strong software engineering practices. 🎉 Branch: |
Signed-off-by: phernandez <paul@basicmachines.co>
|
Claude finished @phernandez's task —— View job PR Review Complete ✅I've reviewed PR #362 against the Basic Memory team checklist. This is an excellent implementation that addresses a real user pain point with comprehensive testing, clean code, and thoughtful design. Todo List:
Code Quality & Standards ✅All requirements met:
Code Quality Highlights:
Testing & Documentation ✅All requirements met:
Test Quality:
Documentation Quality:
Basic Memory Architecture ✅All requirements met:
Architecture Strengths:
Security & Performance ✅All requirements met:
Security Highlights:
Performance Highlights:
Feature Implementation Quality ✅Problem Solved: Users experiencing "No files found to upload" with no explanation (issue #361) now have:
Implementation Highlights:
Commit History Review ✅4 commits with logical progression:
All commits have:
Summary & RecommendationStatus: ✅ READY TO MERGE This PR successfully addresses issue #361 with:
Strengths:
Optional Enhancements (can be done in follow-up PR):
All checklist items satisfied. This is production-ready code demonstrating strong software engineering practices. Great work! 🎉 Branch: |
Summary
Adds three new options to
bm cloud uploadto improve diagnostics and user experience when files are filtered by ignore patterns.Problem: User reported "No files found to upload" with no explanation. Investigation revealed a
.gitignorefile containing just*(wildcard) which matched all files, but the command gave no indication why files were being filtered.Confirmed by user: "I do have a .gitignore on that folder and its contents is just an asterisk"
Changes
New CLI Options
--verbose/-v- Show detailed filtering information:--no-gitignore- Skip.gitignorepatterns:.bmignorepatterns (for safety).gitignoreconfigurations--dry-run- Preview without uploading:--verbosefor detailed filtering infoImplementation Details
ignore_utils.pywithuse_gitignoreparameterupload.pywith verbose output and dry-run logicupload_command.pywith new CLI flagsUsage Examples
Test Coverage
All 19 tests in test_upload.py pass with 91% coverage of upload.py.
Related
Closes #361
🤖 Generated with Claude Code
Co-Authored-By: Claude noreply@anthropic.com