#!/usr/bin/env pwsh <# .SYNOPSIS Verifies the worktrees challenge solution. .DESCRIPTION Checks that the user successfully used worktrees to fix a bug while continuing work on a feature. #> Set-Location "challenge" -ErrorAction SilentlyContinue # Check if challenge directory exists if (-not (Test-Path "../verify.ps1")) { Write-Host "Error: Please run this script from the module directory" -ForegroundColor Red exit 1 } if (-not (Test-Path ".")) { Write-Host "Error: Challenge directory not found. Run setup.ps1 first." -ForegroundColor Red Set-Location .. exit 1 } Write-Host "Verifying your solution..." -ForegroundColor Cyan # Check if main-repo exists if (-not (Test-Path "main-repo")) { Write-Host "[FAIL] main-repo directory not found." -ForegroundColor Red Set-Location .. exit 1 } Set-Location "main-repo" # Check if it's a git repository if (-not (Test-Path ".git")) { Write-Host "[FAIL] main-repo is not a git repository." -ForegroundColor Red Set-Location ../.. exit 1 } # Check if bugfix branch exists $branches = git branch --all 2>$null if ($branches -notmatch "bugfix") { Write-Host "[FAIL] bugfix branch not found." -ForegroundColor Red Write-Host "Hint: Create a worktree with: git worktree add ../bugfix-worktree -b bugfix" -ForegroundColor Yellow Set-Location ../.. exit 1 } Write-Host "[PASS] Bugfix branch exists!" -ForegroundColor Green # Check bugfix branch for the fix git checkout bugfix 2>$null | Out-Null if (-not (Test-Path "calculator.js")) { Write-Host "[FAIL] calculator.js not found on bugfix branch." -ForegroundColor Red Set-Location ../.. exit 1 } $bugfixCalc = Get-Content "calculator.js" -Raw # Check if division by zero check was added if ($bugfixCalc -notmatch "b === 0|b == 0|division by zero|divide by zero") { Write-Host "[FAIL] Division by zero check not found in bugfix branch." -ForegroundColor Red Write-Host "Hint: Add a check in the divide method to prevent division by zero" -ForegroundColor Yellow Set-Location ../.. exit 1 } # Check for commit on bugfix branch $bugfixCommits = git log --pretty=format:"%s" bugfix 2>$null if ($bugfixCommits -notmatch "bug|fix|division|divide") { Write-Host "[FAIL] No bugfix commit found on bugfix branch." -ForegroundColor Red Write-Host "Hint: Commit your fix with a descriptive message" -ForegroundColor Yellow Set-Location ../.. exit 1 } Write-Host "[PASS] Bug fixed on bugfix branch!" -ForegroundColor Green # Check feature branch for continued work git checkout feature-advanced-math 2>$null | Out-Null $featureCalc = Get-Content "calculator.js" -Raw # Check if square root function was added if ($featureCalc -notmatch "sqrt|squareRoot") { Write-Host "[FAIL] Square root function not found on feature branch." -ForegroundColor Red Write-Host "Hint: Add the square root method to calculator.js on feature-advanced-math branch" -ForegroundColor Yellow Set-Location ../.. exit 1 } # Check that feature work was committed $featureCommits = git log --pretty=format:"%s" feature-advanced-math 2>$null $featureCommitArray = $featureCommits -split "`n" # Should have at least 3 commits: initial + README + power + sqrt if ($featureCommitArray.Count -lt 4) { Write-Host "[FAIL] Not enough commits on feature branch." -ForegroundColor Red Write-Host "Expected: initial, README, power, and square root commits" -ForegroundColor Yellow Write-Host "Found $($featureCommitArray.Count) commits" -ForegroundColor Yellow Set-Location ../.. exit 1 } # Check if the latest feature commit is about square root if ($featureCommitArray[0] -notmatch "sqrt|square|root") { Write-Host "[FAIL] Latest commit on feature branch should be about square root." -ForegroundColor Red Write-Host "Latest commit: $($featureCommitArray[0])" -ForegroundColor Yellow Set-Location ../.. exit 1 } Write-Host "[PASS] Feature work completed!" -ForegroundColor Green # Check if worktree was cleaned up (bugfix-worktree should not exist or be removed) Set-Location .. $worktreeStillExists = Test-Path "bugfix-worktree" if ($worktreeStillExists) { Write-Host "[WARNING] bugfix-worktree directory still exists." -ForegroundColor Yellow Write-Host "Hint: Clean up with: git worktree remove ../bugfix-worktree" -ForegroundColor Yellow # Don't fail on this, just warn } # Check worktree list Set-Location "main-repo" $worktrees = git worktree list 2>$null # Verify that the concept was understood (they should have created the worktree at some point) # We can check this by looking for the bugfix branch existence if ($branches -notmatch "bugfix") { Write-Host "[FAIL] No evidence of worktree usage." -ForegroundColor Red Set-Location ../.. exit 1 } # Success! Write-Host "`n========================================" -ForegroundColor Green Write-Host "SUCCESS! Challenge completed!" -ForegroundColor Green Write-Host "========================================" -ForegroundColor Green Write-Host "`nYou have successfully:" -ForegroundColor Cyan Write-Host "- Created a worktree for the bugfix" -ForegroundColor White Write-Host "- Fixed the division by zero bug" -ForegroundColor White Write-Host "- Committed the fix on the bugfix branch" -ForegroundColor White Write-Host "- Continued feature work in parallel" -ForegroundColor White Write-Host "- Added the square root function" -ForegroundColor White Write-Host "- Committed the feature work" -ForegroundColor White if (-not $worktreeStillExists) { Write-Host "- Cleaned up the worktree" -ForegroundColor White } Write-Host "`nYou now understand Git worktrees!" -ForegroundColor Green Write-Host "`nKey takeaway:" -ForegroundColor Yellow Write-Host "Worktrees let you work on multiple branches simultaneously" -ForegroundColor White Write-Host "without stashing, switching, or cloning the repository.`n" -ForegroundColor White Set-Location ../.. exit 0