drupal-cleanup
Installation
SKILL.md
Drupal Cleanup
List and clean up cloned drupal.org repositories in ~/.cache/drupal-contrib/.
⚠️ Side Effect Warning
Removing a repository permanently deletes the local clone including:
- All branches not pushed to issue forks
- Any uncommitted changes
- Local-only commits
The skill checks for uncommitted changes and unpushed branches before deletion and requires explicit user confirmation. Once deleted, the repository must be re-cloned.
Usage
- "List my cloned drupal.org repos"
- "Remove the paragraphs repository from my local cache"
- "Clean up all drupal contrib repos"
/drupal-cleanup— List all repos/drupal-cleanup list— List with details/drupal-cleanup {project}— Remove specific project/drupal-cleanup --all— Remove all cloned repos
Environment Detection
Tier 1 — Portable (Claude Desktop, Codex, any environment)
When Bash tools are unavailable:
For listing:
- Ask user to run:
ls -la ~/.cache/drupal-contrib/and share output - Provide analysis and recommendations based on shared output
- Guide cleanup decisions
For removal (requires Bash in Tier 2):
- Provide the exact commands for user to run manually with explanations
Tier 2 — Claude Code Enhanced
When running in Claude Code with Bash available:
Listing repos:
# Check if cache directory exists
ls -la ~/.cache/drupal-contrib/ 2>/dev/null || echo "No repos cloned yet"
# Get size and details of each project
for dir in ~/.cache/drupal-contrib/*/; do
project=$(basename "$dir")
size=$(du -sh "$dir" 2>/dev/null | cut -f1)
branches=$(cd "$dir" && git branch | wc -l)
status=$(cd "$dir" && git status --short | wc -l)
echo "$project | $size | $branches branches | $status modified files"
done
Removing specific project:
- Check for uncommitted changes:
cd ~/.cache/drupal-contrib/{project} && git status --short - Check for unpushed branches:
git log --branches --not --remotes --oneline | wc -l - Present findings to user
- ⛔ STOP: Warn about irreversible deletion and require confirmation:
⚠️ This will permanently delete ~/.cache/drupal-contrib/{project}/ Status: {uncommitted changes / unpushed commits if any} Reply "yes" to proceed, "no" to cancel. - After "yes" confirmation only:
rm -rf ~/.cache/drupal-contrib/{project}/
Removing all repos:
- Show summary: all projects, total size, any with uncommitted work
- ⛔ STOP: Require explicit confirmation:
⚠️ This will permanently delete ALL repos in ~/.cache/drupal-contrib/: {list of projects with their sizes} Total: {X} MB across {N} projects {Warning if any have uncommitted changes} Reply "yes, delete all" to proceed, or "no" to cancel. - After "yes, delete all" confirmation only:
rm -rf ~/.cache/drupal-contrib/
Listing Output Format
**Cloned Drupal.org Repositories**
Location: ~/.cache/drupal-contrib/
| Project | Size | Branches | Modified | Status |
|---------|------|----------|----------|--------|
| paragraphs | 45 MB | 3 | 2 days ago | Clean |
| webform | 120 MB | 1 | 1 week ago | Clean |
| easy_lqp | 12 MB | 2 | Today | ⚠️ Modified |
**Total**: 177 MB across 3 projects
**To remove a repo**: Use the drupal-cleanup skill with the project name
**To remove all**: Use the drupal-cleanup skill with --all flag
Safety Checks
Before any deletion, this skill checks:
- Uncommitted changes — Modified files not yet staged
- Unstaged files — New files not tracked by git
- Unpushed branches — Local commits not pushed to issue fork
If any are found, the user is warned before proceeding.
When to Clean Up
Consider cleaning up when:
- An MR has been merged
- You're done contributing to a project
- Disk space is low
- You want a fresh start
Before cleanup, ensure:
- All branches are pushed to issue forks on git.drupalcode.org
- No uncommitted changes exist
- MRs are in stable state
Re-cloning After Cleanup
# Via drupal-mr skill (re-clones automatically):
# "Create MR for {project} issue {number}"
# Or manually:
git clone git@git.drupal.org:project/{project}.git ~/.cache/drupal-contrib/{project}
Related Skills
- drupal-mr — Create MRs (will re-clone if needed)
- drupal-issue — Create issues on drupal.org
- drupal-contribute — Full contribution workflow