forked from ScoopInstaller/Scoop
-
Notifications
You must be signed in to change notification settings - Fork 11
/
scoop.ps1
74 lines (62 loc) · 2.54 KB
/
scoop.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#Requires -Version 5
param([String] $Command)
Set-StrictMode -Off
if (($PSVersionTable.PSVersion.Major) -lt 5) {
Write-Host @'
PowerShell 5 or later is required
Upgrade PowerShell: 'https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-core-on-windows?view=powershell-7.1'
'@ -ForegroundColor 'DarkRed'
exit 1
}
# This simple import is fine as for the command this is entry. It is also desired to refresh all the variables/functions
'core', 'buckets', 'Helpers', 'commands', 'Git' | ForEach-Object {
. (Join-Path $PSScriptRoot "..\lib\$_.ps1")
}
$ExitCode = 0
# Powershell automatically bind bash like short parameters as $args, and does not put it in $Command parameter
# ONLY if:
# - No command passed
# - -v or --version passed
# On *nix --version is passed in $args instead of command
$version = (($Command -eq '--version') -or ($args.Contains('--version'))) -or (!$Command -and ($args.Contains('-v')))
# Scoop itself help should be shown only if explicitly asked:
# - No version asked
# - No command passed
# - /?, /help,, /h, --help, -h passed
$scoopHelp = !$version -and (!$Command -or (($Command -in @($null, '--help', '/?', '/help', '/h')) -or (!$Command -and ($args.Contains('-h')))))
# Valid command execution
$validCommand = $Command -and ($Command -in (commands))
# Command help should be shown only if:
# - No help for scoop asked
# - $Command is passed
# - --help, -h is in $args
$commandHelp = !$scoopHelp -and $validCommand -and (($args.Contains('--help')) -or ($args.Contains('-h')))
if ($version) {
Write-UserMessage -Output -Message @(
"PowerShell version: $($PSVersionTable.PSVersion)"
"Useragent: $SHOVEL_USERAGENT"
'Current Scoop (Shovel) version:'
)
Invoke-GitCmd -Command 'VersionLog' -Repository (versiondir 'scoop' 'current')
# TODO: Export to lib/buckets
Get-LocalBucket | ForEach-Object {
$b = Find-BucketDirectory $_ -Root
if (Join-Path $b '.git' | Test-Path -PathType 'Container') {
Write-UserMessage -Message "`r`n'$_' bucket:" -Output
Invoke-GitCmd -Command 'VersionLog' -Repository $b
}
}
} elseif ($scoopHelp) {
Invoke-ScoopCommand 'help'
$ExitCode = $LASTEXITCODE
} elseif ($commandHelp) {
Invoke-ScoopCommand 'help' @($Command)
$ExitCode = $LASTEXITCODE
} elseif ($validCommand) {
Invoke-ScoopCommand $Command $args
$ExitCode = $LASTEXITCODE
} else {
Write-UserMessage -Message "scoop: '$Command' isn't a scoop command. See 'scoop help'." -Output
$ExitCode = 2
}
exit $ExitCode