forked from ScoopInstaller/Scoop
-
Notifications
You must be signed in to change notification settings - Fork 0
/
scoop-status.ps1
97 lines (83 loc) · 2.63 KB
/
scoop-status.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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# Usage: scoop status
# Summary: Show status and check for new app versions
. "$PSScriptRoot\..\lib\manifest.ps1" # 'manifest' 'parse_json' "install_info"
. "$PSScriptRoot\..\lib\versions.ps1" # 'Select-CurrentVersion'
# check if scoop needs updating
$currentdir = fullpath $(versiondir 'scoop' 'current')
$needs_update = $false
if (Test-Path "$currentdir\.git") {
git_cmd -C "`"$currentdir`"" fetch -q origin
$commits = $(git -C $currentdir log "HEAD..origin/$(get_config SCOOP_BRANCH)" --oneline)
if ($commits) { $needs_update = $true }
} else {
$needs_update = $true
}
if ($needs_update) {
warn "Scoop is out of date. Run 'scoop update' to get the latest changes."
} else { success 'Scoop is up to date.' }
$failed = @()
$outdated = @()
$removed = @()
$missing_deps = @()
$onhold = @()
$true, $false | ForEach-Object { # local and global apps
$global = $_
$dir = appsdir $global
if (!(Test-Path $dir)) { return }
Get-ChildItem $dir | Where-Object name -NE 'scoop' | ForEach-Object {
$app = $_.name
$status = app_status $app $global
if ($status.failed) {
$failed += @{ $app = $status.version }
}
if ($status.removed) {
$removed += @{ $app = $status.version }
}
if ($status.outdated) {
$outdated += @{ $app = @($status.version, $status.latest_version) }
if ($status.hold) {
$onhold += @{ $app = @($status.version, $status.latest_version) }
}
}
if ($status.missing_deps) {
$missing_deps += , (@($app) + @($status.missing_deps))
}
}
}
if ($outdated) {
Write-Host -f DarkCyan 'Updates are available for:'
$outdated.keys | ForEach-Object {
$versions = $outdated.$_
" $_`: $($versions[0]) -> $($versions[1])"
}
}
if ($onhold) {
Write-Host -f DarkCyan 'These apps are outdated and on hold:'
$onhold.keys | ForEach-Object {
$versions = $onhold.$_
" $_`: $($versions[0]) -> $($versions[1])"
}
}
if ($removed) {
Write-Host -f DarkCyan 'These app manifests have been removed:'
$removed.keys | ForEach-Object {
" $_"
}
}
if ($failed) {
Write-Host -f DarkCyan 'These apps failed to install:'
$failed.keys | ForEach-Object {
" $_"
}
}
if ($missing_deps) {
Write-Host -f DarkCyan 'Missing runtime dependencies:'
$missing_deps | ForEach-Object {
$app, $deps = $_
" '$app' requires '$([string]::join("', '", $deps))'"
}
}
if (!$old -and !$removed -and !$failed -and !$missing_deps -and !$needs_update) {
success 'Everything is ok!'
}
exit 0