blob: d66633825d257408ee9a362dc7604c3d307e77a6 (
plain) (
blame)
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
|
#!/usr/bin/env pwsh
# Save original directory, restore after execution
$_load_original_dir = Get-Location
# Load completion script mling.ps1 from the current directory
$mlingScript = Join-Path -Path (Get-Location) -ChildPath ".comp/mling_comp.ps1"
if (Test-Path $mlingScript) {
. $mlingScript
}
# Change to script directory
$scriptPath = Split-Path -Parent $MyInvocation.MyCommand.Path
try {
Set-Location $scriptPath -ErrorAction Stop
} catch {
Write-Error "load.ps1: failed to cd to script directory"
return
}
# Add bin directories from all namespaces to PATH
Get-ChildItem -Directory -Path "*/bin/" | ForEach-Object {
$env:PATH = "$($_.FullName);$env:PATH"
}
# Helper function: execute script with appropriate shell
function _load_script {
param([string]$script)
# Only handle .ps1 scripts
if ($script -like "*.ps1") {
& $script 2>$null
}
}
# Iterate over all namespaces
Get-ChildItem -Directory | ForEach-Object {
$_namespace = $_.Name
# Skip if UNTRUSTED marker exists
if (Test-Path "$_namespace\UNTRUSTED") { return }
$_comp_dir = "$_namespace\comp"
if (-not (Test-Path $_comp_dir -PathType Container)) { return }
# Find all loadable scripts under comp
$_scripts = Get-ChildItem -Path $_comp_dir -File -Include "*.ps1" -ErrorAction SilentlyContinue
if (-not $_scripts) { return }
# Count scripts
$_count = ($_scripts | Measure-Object).Count
# If TRUSTED marker exists, load directly
if (Test-Path "$_namespace\TRUSTED") {
$_scripts | ForEach-Object {
_load_script $_.FullName
}
return
}
# No marker, ask user
$answer = Read-Host "'$_namespace' has $_count completion script(s) to load, do you trust it? [Y/n] "
if ($answer -eq "" -or $answer -match "^(y|yes)$") {
# Mark as TRUSTED
New-Item -ItemType File -Path "$_namespace\TRUSTED" -Force | Out-Null
# Ask whether to load immediately
$load_answer = Read-Host "Load it immediately? [Y/n] "
if ($load_answer -eq "" -or $load_answer -match "^(y|yes)$") {
$_scripts | ForEach-Object {
_load_script $_.FullName
}
}
} else {
New-Item -ItemType File -Path "$_namespace\UNTRUSTED" -Force | Out-Null
}
}
# Restore original working directory
try {
Set-Location $_load_original_dir -ErrorAction Stop
} catch {}
# Cleanup
Remove-Variable -Name _load_original_dir -ErrorAction SilentlyContinue
Remove-Item Function:_load_script -ErrorAction SilentlyContinue
|