feat: add remotes and stash
This commit is contained in:
143
module-07-interactive-rebase/setup.ps1
Normal file
143
module-07-interactive-rebase/setup.ps1
Normal file
@@ -0,0 +1,143 @@
|
||||
#!/usr/bin/env pwsh
|
||||
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Sets up the interactive rebase challenge environment.
|
||||
|
||||
.DESCRIPTION
|
||||
Creates a Git repository with messy commit history that needs to be
|
||||
cleaned up using reset and recommit techniques.
|
||||
#>
|
||||
|
||||
# Remove existing challenge directory if present
|
||||
if (Test-Path "challenge") {
|
||||
Write-Host "Removing existing challenge directory..." -ForegroundColor Yellow
|
||||
Remove-Item -Path "challenge" -Recurse -Force
|
||||
}
|
||||
|
||||
# Create challenge directory
|
||||
Write-Host "Creating challenge environment..." -ForegroundColor Cyan
|
||||
New-Item -ItemType Directory -Path "challenge" | Out-Null
|
||||
Set-Location "challenge"
|
||||
|
||||
# Initialize git repository
|
||||
git init | Out-Null
|
||||
git config user.name "Workshop User" | Out-Null
|
||||
git config user.email "user@workshop.local" | Out-Null
|
||||
|
||||
# Create initial commit
|
||||
$readme = @"
|
||||
# User Management System
|
||||
|
||||
A simple user management application.
|
||||
"@
|
||||
|
||||
Set-Content -Path "README.md" -Value $readme
|
||||
git add README.md
|
||||
git commit -m "Initial commit" | Out-Null
|
||||
|
||||
# Create messy commits that should be squashed
|
||||
|
||||
# Commit 1: WIP user profile
|
||||
$userProfile = @"
|
||||
class UserProfile {
|
||||
constructor(name, email) {
|
||||
this.name = name;
|
||||
this.email = email;
|
||||
}
|
||||
}
|
||||
"@
|
||||
|
||||
Set-Content -Path "user-profile.js" -Value $userProfile
|
||||
git add user-profile.js
|
||||
git commit -m "WIP: user profile" | Out-Null
|
||||
|
||||
# Commit 2: Add validation (typo in message)
|
||||
$userProfileWithValidation = @"
|
||||
class UserProfile {
|
||||
constructor(name, email) {
|
||||
this.name = name;
|
||||
this.email = email;
|
||||
}
|
||||
|
||||
validate() {
|
||||
if (!this.name || !this.email) {
|
||||
throw new Error('Name and email are required');
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
"@
|
||||
|
||||
Set-Content -Path "user-profile.js" -Value $userProfileWithValidation
|
||||
git add user-profile.js
|
||||
git commit -m "add validaton" | Out-Null # Intentional typo
|
||||
|
||||
# Commit 3: Fix validation
|
||||
$userProfileFixed = @"
|
||||
class UserProfile {
|
||||
constructor(name, email) {
|
||||
this.name = name;
|
||||
this.email = email;
|
||||
}
|
||||
|
||||
validate() {
|
||||
if (!this.name || !this.email) {
|
||||
throw new Error('Name and email are required');
|
||||
}
|
||||
if (!this.email.includes('@')) {
|
||||
throw new Error('Invalid email format');
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
"@
|
||||
|
||||
Set-Content -Path "user-profile.js" -Value $userProfileFixed
|
||||
git add user-profile.js
|
||||
git commit -m "fix validation bug" | Out-Null
|
||||
|
||||
# Commit 4: Add tests (another WIP commit)
|
||||
$tests = @"
|
||||
const assert = require('assert');
|
||||
const UserProfile = require('./user-profile');
|
||||
|
||||
describe('UserProfile', () => {
|
||||
it('should validate correct user data', () => {
|
||||
const user = new UserProfile('John', 'john@example.com');
|
||||
assert.strictEqual(user.validate(), true);
|
||||
});
|
||||
|
||||
it('should reject missing name', () => {
|
||||
const user = new UserProfile('', 'john@example.com');
|
||||
assert.throws(() => user.validate());
|
||||
});
|
||||
|
||||
it('should reject invalid email', () => {
|
||||
const user = new UserProfile('John', 'invalid-email');
|
||||
assert.throws(() => user.validate());
|
||||
});
|
||||
});
|
||||
"@
|
||||
|
||||
Set-Content -Path "user-profile.test.js" -Value $tests
|
||||
git add user-profile.test.js
|
||||
git commit -m "WIP tests" | Out-Null
|
||||
|
||||
# Return to module directory
|
||||
Set-Location ..
|
||||
|
||||
Write-Host "`n========================================" -ForegroundColor Green
|
||||
Write-Host "Challenge environment created!" -ForegroundColor Green
|
||||
Write-Host "========================================" -ForegroundColor Green
|
||||
Write-Host "`nYou have a repository with messy commit history:" -ForegroundColor Cyan
|
||||
Write-Host "- WIP commits" -ForegroundColor Yellow
|
||||
Write-Host "- Typos in commit messages" -ForegroundColor Yellow
|
||||
Write-Host "- Multiple commits that should be combined" -ForegroundColor Yellow
|
||||
Write-Host "`nYour task:" -ForegroundColor Yellow
|
||||
Write-Host "1. Navigate to the challenge directory: cd challenge" -ForegroundColor White
|
||||
Write-Host "2. View the messy history: git log --oneline" -ForegroundColor White
|
||||
Write-Host "3. Use 'git reset --soft HEAD~4' to uncommit the last 4 commits" -ForegroundColor White
|
||||
Write-Host "4. Create a single clean commit with a descriptive message" -ForegroundColor White
|
||||
Write-Host " Example: git commit -m 'Add user profile feature with validation'" -ForegroundColor White
|
||||
Write-Host "`nRun '../verify.ps1' from the challenge directory to check your solution.`n" -ForegroundColor Cyan
|
||||
Reference in New Issue
Block a user