Skip to main content

tools-p4-shelving

Perforce shelving for code review, sharing work-in-progress, backup, and collaboration workflows.

الانتقال إلى التثبيت

معلومات المصدر

المستودع
tjboudreaux/cc-plugin-perforce
آخر نشاط في المصدر
٦ فبراير ٢٠٢٦ في ٠٤:٠٨
لغة SKILL.md المكتشفة
الإنجليزية
النجوم
٨
التفرعات
٠

خيارات التثبيت

يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.

مراجعة ملفات المصدر

اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.

عرض SKILL.md

SKILL.md
تعليمات المصدر · معاينة للقراءة فقط
name
tools-p4-shelving
description
Perforce shelving for code review, sharing work-in-progress, backup, and collaboration workflows.
# Perforce Shelving ## Overview Shelving stores pending changes on the Perforce server without submitting them. This enables code review, work-in-progress backup, sharing between workspaces, and collaboration. ## When to Use - Backing up work-in-progress - Sharing changes for code review - Switching between tasks - Transferring work between workspaces - Parking changes temporarily - Pre-submit review (Swarm) ## Core Concepts ### Shelving vs Submitting | Feature | Shelving | Submitting | |---------|----------|------------| | Stored on server | Yes | Yes | | Creates revision | No | Yes | | Visible to others | Yes (optional) | Yes | | Reversible | Easy delete | Need revert | | Affects depot | No | Yes | | Builds triggered | Usually no | Usually yes | ## Basic Shelving ### Shelve Changes ```bash # Shelve all files in changelist p4 shelve -c 12345 # Shelve specific files p4 shelve -c 12345 file1.txt file2.txt # Shelve and keep files open p4 shelve -c 12345 # Shelve default changelist p4 shelve # Replace existing shelf p4 shelve -f -c 12345 # Shelve with delete of local files (submit-like) p4 shelve -c 12345 p4 revert -c 12345 //... ``` ### View Shelved Changes ```bash # List shelved changelists p4 changes -s shelved # List your shelved changelists p4 changes -s shelved -u $P4USER # Describe shelved changelist p4 describe -S 12345 # List files in shelf p4 describe -S -s 12345 # Diff shelved file vs depot p4 diff2 //depot/file.txt //depot/file.txt@=12345 ``` ### Unshelve Changes ```bash # Unshelve to same changelist p4 unshelve -s 12345 # Unshelve to different changelist p4 unshelve -s 12345 -c 12346 # Unshelve to new changelist p4 unshelve -s 12345 -c default # Then move to new CL if desired # Unshelve specific files p4 unshelve -s 12345 file.txt # Force unshelve (overwrite local changes) p4 unshelve -s 12345 -f ``` ### Delete Shelf ```bash # Delete shelved files from changelist p4 shelve -d -c 12345 # Delete specific files from shelf p4 shelve -d -c 12345 file.txt # Delete shelf completely p4 shelve -d -c 12345 //... # Promote shelf to commit (delete shelf after submit) p4 submit -e 12345 ``` ## Shelving Workflows ### Work-in-Progress Backup ```bash # End of day - shelve your work p4 shelve -c 12345 -f # Next day - continue working # Files already open, shelf is backup # If workspace lost, unshelve to recover p4 unshelve -s 12345 ``` ### Task Switching ```bash # Working on Feature A (CL 12345) # Urgent bug needs fixing # Shelve Feature A work p4 shelve -c 12345 # Revert local changes (keep shelf) p4 revert -c 12345 //... # Work on bug fix p4 edit bugfile.cs # ... fix bug ... p4 submit -d "Fix critical bug" # Resume Feature A p4 unshelve -s 12345 ``` ### Code Review Workflow ```bash # Developer: Shelve for review p4 shelve -c 12345 echo "Please review CL 12345" # Reviewer: Get shelved changes to review workspace p4 unshelve -s 12345 -c default # Review code... # Reviewer: Revert after review (or keep to test) p4 revert //... # Developer: After approval, submit p4 submit -c 12345 p4 shelve -d -c 12345 # Clean up shelf ``` ### Share Between Workspaces ```bash # Workspace A: Shelve changes p4 shelve -c 12345 # Workspace B: Get shelved changes # (in different workspace) p4 unshelve -s 12345 -c default # Now both workspaces have the changes ``` ### Pre-Integration Testing ```bash # Shelve feature branch changes p4 shelve -c 12345 # In integration workspace: # Sync to main p4 sync //depot/main/... # Unshelve feature changes p4 unshelve -s 12345 # Test integration # ... run tests ... # If tests pass, developer can submit # If tests fail, developer can fix ``` ## Advanced Shelving ### Shelve with Resolve ```bash # When unshelving conflicts with current workspace # Preview unshelve conflicts p4 unshelve -n -s 12345 # Unshelve and resolve p4 unshelve -s 12345 p4 resolve -am # Auto-merge # Or force overwrite p4 unshelve -f -s 12345 ``` ### Update Existing Shelf ```bash # Make more changes p4 edit file.txt # ... edit file ... # Update shelf with new changes p4 shelve -f -c 12345 # -f (force) replaces existing shelf ``` ### Partial Shelving ```bash # Shelve only some files from changelist p4 shelve -c 12345 important.cs critical.cs # Leave other files unshelved but still open ``` ### Shelve Across Streams ```bash # Shelve in one stream p4 shelve -c 12345 # Unshelve to different stream (if mappings allow) # May need branch mapping p4 unshelve -s 12345 -b branch_mapping ``` ## Shelf Management ### Find Old Shelves ```bash # Find your old shelves p4 changes -s shelved -u $P4USER # Find shelves older than 30 days p4 changes -s shelved -u $P4USER | while read line; do CL=$(echo $line | awk '{print $2}') DATE=$(p4 change -o $CL | grep "^Date:" | awk '{print $2}') echo "$CL: $DATE" done ``` ### Clean Up Old Shelves ```bash #!/bin/bash # cleanup-shelves.sh # Delete shelves older than 30 days CUTOFF=$(date -v-30d +%Y/%m/%d) p4 changes -s shelved -u $P4USER | while read line; do CL=$(echo $line | awk '{print $2}') DATE=$(echo $line | awk '{print $4}') if [[ "$DATE" < "$CUTOFF" ]]; then echo "Deleting old shelf: $CL ($DATE)" p4 shelve -d -c $CL //... fi done ``` ### Shelf Statistics ```bash # Count files in shelf p4 describe -S -s 12345 | grep "^\.\.\." | wc -l # Size of shelved files p4 describe -S -s 12345 | grep "^\.\.\." | while read line; do FILE=$(echo $line | awk '{print $1}') p4 fstat -Ol "$FILE@=$CL" 2>/dev/null | grep fileSize done ``` ## Swarm Integration ### Shelve for Swarm Review ```bash # Create review-ready changelist p4 change # Add description with review info # Shelve for Swarm p4 shelve -c 12345 # Swarm automatically detects and creates review # Or trigger manually: # POST to Swarm API ``` ### Update Review ```bash # Make changes based on feedback p4 edit file.txt # ... make changes ... # Update shelf (triggers review update in Swarm) p4 shelve -f -c 12345 ``` ### Commit After Approval ```bash # After review approved in Swarm p4 submit -e 12345 # -e submits shelved files directly # Cleans up shelf automatically ``` ## Best Practices 1. **Shelve frequently** - Backup work in progress 2. **Use descriptive changelist names** - Easy to identify shelves 3. **Clean up old shelves** - Don't leave orphaned shelves 4. **Force update** with `-f` when re-shelving 5. **Verify unshelve** - Check files are correct 6. **Delete shelf after submit** - Keep server clean 7. **Use for code review** - Before committing 8. **Don't rely solely on shelves** - Not a permanent backup 9. **Communicate shelf numbers** - For collaboration 10. **Test unshelved code** - Before submitting ## Troubleshooting | Issue | Solution | |-------|----------| | "Files not shelved" | Check files are open in changelist | | "Can't unshelve - conflicts" | Use `-f` to force or resolve | | "Shelf not found" | Check changelist number, may be deleted | | "No permission to unshelve" | Check protections, may need owner | | "Files differ" | Use `-f` to replace or resolve | | "Can't delete shelf" | Must delete all files first | ## Common Commands Reference ```bash # Shelve p4 shelve -c CL # Shelve changelist p4 shelve -f -c CL # Replace existing shelf p4 shelve -d -c CL # Delete shelf # Unshelve p4 unshelve -s CL # Unshelve to same CL p4 unshelve -s CL -c TARGET # Unshelve to different CL p4 unshelve -f -s CL # Force unshelve # View p4 describe -S CL # View shelved changelist p4 changes -s shelved # List all shelves p4 changes -s shelved -u USER # List user's shelves # Submit shelved p4 submit -e CL # Submit shelf directly ```
عرض على GitHub