diff --git a/bin/framework-pull-upstream.sh b/bin/framework-pull-upstream.sh index 967df192b..74f777951 100755 --- a/bin/framework-pull-upstream.sh +++ b/bin/framework-pull-upstream.sh @@ -164,11 +164,12 @@ fi CURRENT_HEAD=$(git rev-parse HEAD 2>&1) UPSTREAM_HEAD=$(git rev-parse "$UPSTREAM_BRANCH" 2>&1) +ALREADY_UP_TO_DATE=false if [ "$CURRENT_HEAD" = "$UPSTREAM_HEAD" ]; then echo "" echo "✓ Already up to date" echo "" - exit 0 + ALREADY_UP_TO_DATE=true fi # Handle --diff option: show diff and exit @@ -365,110 +366,117 @@ if [ "$IS_PROJECT_MODE" = false ]; then fi fi -# Extract and display changelog -echo "" -echo "⚠ RSpade framework has upstream changes" -echo "" - -# Get commit subjects, filter out Claude Code attribution and blank lines -CHANGELOG=$(git log --pretty=format:"%s" HEAD.."$UPSTREAM_BRANCH" 2>&1 | \ - grep -v "Claude Code" | \ - grep -v "Co-Authored-By:" | \ - grep -v "^$" | \ - sed 's/^/ • /') - -if [ -n "$CHANGELOG" ]; then - echo "Changelog:" +# Apply framework updates (skip if already up to date) +if [ "$ALREADY_UP_TO_DATE" = false ]; then + # Extract and display changelog echo "" - echo "$CHANGELOG" + echo "⚠ RSpade framework has upstream changes" echo "" -fi -# Show file diff stats (exclude ./rsx if in project mode) -if [ "$IS_PROJECT_MODE" = true ]; then - DIFF_STATS=$(git diff --stat HEAD.."$UPSTREAM_BRANCH" -- . ":(exclude)rsx" 2>&1) -else - DIFF_STATS=$(git diff --stat HEAD.."$UPSTREAM_BRANCH" 2>&1) -fi + # Get commit subjects, filter out Claude Code attribution and blank lines + CHANGELOG=$(git log --pretty=format:"%s" HEAD.."$UPSTREAM_BRANCH" 2>&1 | \ + grep -v "Claude Code" | \ + grep -v "Co-Authored-By:" | \ + grep -v "^$" | \ + sed 's/^/ • /') -if [ -n "$DIFF_STATS" ]; then - echo "Files that will be updated:" - echo "" - echo "$DIFF_STATS" | sed 's/^/ /' - echo "" -fi - -# Apply updates based on mode -echo "Applying framework updates..." - -if [ "$IS_PROJECT_MODE" = true ]; then - # Project mode: merge with --no-ff (preserves ./rsx via .gitattributes) - if ! git merge --no-ff "$UPSTREAM_BRANCH" 2>&1; then - echo "ERROR: Framework update failed." + if [ -n "$CHANGELOG" ]; then + echo "Changelog:" + echo "" + echo "$CHANGELOG" echo "" - - # Show current git state - GIT_STATUS=$(git status --short 2>&1) - if [ -n "$GIT_STATUS" ]; then - echo "Current git state:" - echo "" - echo "$GIT_STATUS" | sed 's/^/ /' - echo "" - fi - - echo "Check status: php artisan rsx:framework:status" - exit 1 fi - echo " ✓ Framework updated (./rsx preserved by .gitattributes)" -else - # Framework mode: fast-forward only (updates everything including ./rsx) - MERGE_OUTPUT=$(git merge --ff-only "$UPSTREAM_BRANCH" 2>&1) || { - if echo "$MERGE_OUTPUT" | grep -q "up to date\|up-to-date"; then - echo " ✓ Already up to date" - else + + # Show file diff stats (exclude ./rsx if in project mode) + if [ "$IS_PROJECT_MODE" = true ]; then + DIFF_STATS=$(git diff --stat HEAD.."$UPSTREAM_BRANCH" -- . ":(exclude)rsx" 2>&1) + else + DIFF_STATS=$(git diff --stat HEAD.."$UPSTREAM_BRANCH" 2>&1) + fi + + if [ -n "$DIFF_STATS" ]; then + echo "Files that will be updated:" + echo "" + echo "$DIFF_STATS" | sed 's/^/ /' + echo "" + fi + + # Apply updates based on mode + echo "Applying framework updates..." + + if [ "$IS_PROJECT_MODE" = true ]; then + # Project mode: merge with --no-ff (preserves ./rsx via .gitattributes) + if ! git merge --no-ff "$UPSTREAM_BRANCH" 2>&1; then echo "ERROR: Framework update failed." echo "" - echo "ERROR: Cannot fast-forward: you have local modifications" - echo "" - # Show modified files + # Show current git state GIT_STATUS=$(git status --short 2>&1) if [ -n "$GIT_STATUS" ]; then - echo "Modified files blocking update:" + echo "Current git state:" echo "" echo "$GIT_STATUS" | sed 's/^/ /' echo "" fi - echo "To resolve:" - echo "" - echo " 1. VIEW DIFFERENCES" - echo " php artisan rsx:framework:pull --diff" - echo "" - echo " 2. STASH CHANGES AND UPDATE (recommended)" - echo " php artisan rsx:framework:pull --stash" - echo "" - echo " 3. DISCARD MODIFICATIONS" - echo " git reset --hard $UPSTREAM_BRANCH" - echo "" - echo " 4. COMMIT THEN UPDATE" - echo " git add -A" - echo " git commit -m \"Framework modifications\"" - echo " php artisan rsx:framework:pull" - echo "" - echo " 5. CHECK STATUS" - echo " php artisan rsx:framework:status" + echo "Check status: php artisan rsx:framework:status" exit 1 fi - } - echo " ✓ Framework updated" + echo " ✓ Framework updated (./rsx preserved by .gitattributes)" + else + # Framework mode: fast-forward only (updates everything including ./rsx) + MERGE_OUTPUT=$(git merge --ff-only "$UPSTREAM_BRANCH" 2>&1) || { + if echo "$MERGE_OUTPUT" | grep -q "up to date\|up-to-date"; then + echo " ✓ Already up to date" + else + echo "ERROR: Framework update failed." + echo "" + echo "ERROR: Cannot fast-forward: you have local modifications" + echo "" + + # Show modified files + GIT_STATUS=$(git status --short 2>&1) + if [ -n "$GIT_STATUS" ]; then + echo "Modified files blocking update:" + echo "" + echo "$GIT_STATUS" | sed 's/^/ /' + echo "" + fi + + echo "To resolve:" + echo "" + echo " 1. VIEW DIFFERENCES" + echo " php artisan rsx:framework:pull --diff" + echo "" + echo " 2. STASH CHANGES AND UPDATE (recommended)" + echo " php artisan rsx:framework:pull --stash" + echo "" + echo " 3. DISCARD MODIFICATIONS" + echo " git reset --hard $UPSTREAM_BRANCH" + echo "" + echo " 4. COMMIT THEN UPDATE" + echo " git add -A" + echo " git commit -m \"Framework modifications\"" + echo " php artisan rsx:framework:pull" + echo "" + echo " 5. CHECK STATUS" + echo " php artisan rsx:framework:status" + exit 1 + fi + } + echo " ✓ Framework updated" + fi fi echo "" -echo "✓ Framework updated successfully" +if [ "$ALREADY_UP_TO_DATE" = true ]; then + echo "→ Running framework maintenance (migrations and cache rebuild)..." +else + echo "✓ Framework updated successfully" +fi echo "" -if [ "$IS_PROJECT_MODE" = true ]; then +if [ "$IS_PROJECT_MODE" = true ] && [ "$ALREADY_UP_TO_DATE" = false ]; then echo "Your application code in ./rsx was preserved." echo "" fi