c2264cabae
Stopgap measure so that people stop installing into System32 (since that's the default Powershell elevated prompt directory for some reason).
95 lines
3.0 KiB
PowerShell
95 lines
3.0 KiB
PowerShell
#!/usr/bin/env pwsh
|
|
|
|
#Requires -Version 5
|
|
param($path = "$home/rustlings")
|
|
|
|
Write-Host "Let's get you set up with Rustlings!"
|
|
|
|
Write-Host "Checking requirements..."
|
|
if (Get-Command git -ErrorAction SilentlyContinue) {
|
|
Write-Host "SUCCESS: Git is installed"
|
|
} else {
|
|
Write-Host "WARNING: Git does not seem to be installed."
|
|
Write-Host "Please download Git using your package manager or over https://git-scm.com/!"
|
|
exit 1
|
|
}
|
|
|
|
if (Get-Command rustc -ErrorAction SilentlyContinue) {
|
|
Write-Host "SUCCESS: Rust is installed"
|
|
} else {
|
|
Write-Host "WARNING: Rust does not seem to be installed."
|
|
Write-Host "Please download Rust using https://rustup.rs!"
|
|
exit 1
|
|
}
|
|
|
|
if (Get-Command cargo -ErrorAction SilentlyContinue) {
|
|
Write-Host "SUCCESS: Cargo is installed"
|
|
} else {
|
|
Write-Host "WARNING: Cargo does not seem to be installed."
|
|
Write-Host "Please download Rust and Cargo using https://rustup.rs!"
|
|
exit 1
|
|
}
|
|
|
|
# Function that compares two versions strings v1 and v2 given in arguments (e.g 1.31 and 1.33.0).
|
|
# Returns 1 if v1 > v2, 0 if v1 == v2, 2 if v1 < v2.
|
|
function vercomp($v1, $v2) {
|
|
if ($v1 -eq $v2) {
|
|
return 0
|
|
}
|
|
|
|
$v1 = $v1.Replace(".", "0")
|
|
$v2 = $v2.Replace(".", "0")
|
|
if ($v1.Length -gt $v2.Length) {
|
|
$v2 = $v2.PadRight($v1.Length, "0")
|
|
} else {
|
|
$v1 = $v1.PadRight($v2.Length, "0")
|
|
}
|
|
|
|
if ($v1 -gt $v2) {
|
|
return 1
|
|
} else {
|
|
return 2
|
|
}
|
|
}
|
|
|
|
$rustVersion = $(rustc --version).Split(" ")[1]
|
|
$minRustVersion = "1.56"
|
|
if ((vercomp $rustVersion $minRustVersion) -eq 2) {
|
|
Write-Host "WARNING: Rust version is too old: $rustVersion - needs at least $minRustVersion"
|
|
Write-Host "Please update Rust with 'rustup update'"
|
|
exit 1
|
|
} else {
|
|
Write-Host "SUCCESS: Rust is up to date"
|
|
}
|
|
|
|
Write-Host "Cloning Rustlings at $path"
|
|
git clone -q https://github.com/rust-lang/rustlings $path
|
|
if (!($LASTEXITCODE -eq 0)) {
|
|
exit 1
|
|
}
|
|
|
|
# UseBasicParsing is deprecated, pwsh 6 or above will automatically use it,
|
|
# but anyone running pwsh 5 will have to pass the argument.
|
|
$version = Invoke-WebRequest -UseBasicParsing https://api.github.com/repos/rust-lang/rustlings/releases/latest `
|
|
| ConvertFrom-Json | Select-Object -ExpandProperty tag_name
|
|
|
|
Write-Host "Checking out version $version..."
|
|
Set-Location $path
|
|
git checkout -q tags/$version
|
|
|
|
Write-Host "Installing the 'rustlings' executable..."
|
|
cargo install --force --path .
|
|
if (!(Get-Command rustlings -ErrorAction SilentlyContinue)) {
|
|
Write-Host "WARNING: Please check that you have '~/.cargo/bin' in your PATH environment variable!"
|
|
}
|
|
|
|
# Checking whether Clippy is installed.
|
|
# Due to a bug in Cargo, this must be done with Rustup: https://github.com/rust-lang/rustup/issues/1514
|
|
$clippy = (rustup component list | Select-String "clippy" | Select-String "installed") | Out-String
|
|
if (!$clippy) {
|
|
Write-Host "Installing the 'cargo-clippy' executable..."
|
|
rustup component add clippy
|
|
}
|
|
|
|
Write-Host "All done! Navigate to $path and run 'rustlings' to get started!"
|