A shell script to quickly switch in or out your development repositories
ComposerUsage:
`./switch vendor/package`, e.g.:
./switch eugenefvdm/api-collection
The script:
#!/bin/bash # Check if package name is provided if [ -z "$1" ]; then echo "Usage: $0 <vendor/package>" echo "Example: $0 eugenefvdm/api-collection" exit 1 fi # Store full package name FULL_PACKAGE_NAME="$1" # Extract package name from vendor/package format PACKAGE_NAME=$(echo "$1" | cut -d'/' -f2) # Check if composer.json exists if [ ! -f "composer.json" ]; then echo "Error: composer.json not found in current directory" exit 1 fi # Create a temporary file TMP_FILE=$(mktemp) # Check if the repository already exists - fixed the grep pattern if grep -q "\"url\": \"../$(echo $PACKAGE_NAME | sed 's/\//\\\//g')\"" composer.json; then echo "Found repository for $PACKAGE_NAME, removing it..." # Use jq to remove the repository entry if it exists jq --arg pkg "../$PACKAGE_NAME" ' if .repositories then .repositories = (.repositories | map(select(.url != $pkg))) | if .repositories == [] then del(.repositories) else . end else . end' composer.json > "$TMP_FILE" mv "$TMP_FILE" composer.json echo "Removed repository entry for $PACKAGE_NAME" else echo "Repository for $PACKAGE_NAME not found, adding it..." # Use jq to add the repository jq --arg pkg "../$PACKAGE_NAME" ' if .repositories then .repositories += [{"type": "path", "url": $pkg}] else . + {"repositories": [{"type": "path", "url": $pkg}]} end' composer.json > "$TMP_FILE" mv "$TMP_FILE" composer.json echo "Added repository entry for $PACKAGE_NAME" fi # Format the JSON file if command -v jq &> /dev/null; then jq '.' composer.json > "$TMP_FILE" && mv "$TMP_FILE" composer.json fi # Run composer require with the package name echo "Running 'composer require $FULL_PACKAGE_NAME'" composer require "$FULL_PACKAGE_NAME" echo "Done!" lang-bash