-
-
Notifications
You must be signed in to change notification settings - Fork 61
Expand file tree
/
Copy pathShow-BuildTree.ps1
More file actions
108 lines (89 loc) · 2.22 KB
/
Copy pathShow-BuildTree.ps1
File metadata and controls
108 lines (89 loc) · 2.22 KB
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
98
99
100
101
102
103
104
105
106
107
108
<#
.Synopsis
Shows Invoke-Build task trees with brief information.
Copyright (c) Roman Kuzmin
.Description
This script analyses task references and shows parent tasks and child trees
for the specified tasks. Tasks are not invoked.
.Parameter Task
Task names.
If it is "*" then all root tasks are used.
If it is omitted or "." then the default task is used.
.Parameter File
The build script.
If it is omitted then the default script is used.
.Parameter Parameters
Build script parameters needed in special cases when they alter tasks.
.Parameter Upstream
Tells to show upstream tasks for each task.
.Outputs
Specified task trees.
.Link
https://github.com/nightroman/Invoke-Build
#>
param(
[Parameter(Position=0)]
[string[]]$Task
,
[Parameter(Position=1)]
[string]$File
,
[Parameter(Position=2)]
[hashtable]$Parameters
,
[switch]$Upstream
)
$ErrorActionPreference=1; trap {$PSCmdlet.ThrowTerminatingError($_)}
$private:_Task = $Task
$private:_File = $File
$private:_Parameters = if ($Parameters) {$Parameters} else {@{}}
${*Upstream} = $Upstream
Remove-Variable Task, File, Parameters, Upstream
# Shows the task tree.
function ShowTaskTree($Task, $Docs, $Step = 0) {
if ($Step -eq 0) {''}
$tab = ' ' * $Step
++$Step
# synopsis
$synopsis = Get-BuildSynopsis $Task $docs
# name
$info = $tab + $Task.Name
# upstream
if ($references.get_Count()) {
$reference = $references[$Task]
if ($reference.get_Count()) {
$info += ' (' + (($reference.get_Keys() | Sort-Object) -join ', ') + ')'
}
}
# synopsis, output
if ($synopsis) {"$info # $synopsis"} else {$info}
# task jobs
foreach($_ in $Task.Jobs) {
if ($_ -is [string]) {
ShowTaskTree $tasks[$_.TrimStart('?')] $Docs $Step
}
else {
$tab + ' {}'
}
}
}
function ShowBuildTree {
# references
$tasks = ${*}.All
$references = @{}
if (${*Upstream}) {
foreach($it in $tasks.get_Values()) {
$references[$it] = @{}
}
foreach($it in $tasks.get_Values()) {foreach($job in $it.Jobs) {if ($job -is [string]) {
$references[$tasks[$job]][$it.Name] = 0
}}}
}
# show trees
$docs = @{}
foreach($name in $BuildTask) {
ShowTaskTree $tasks[$name] $docs
}
}
Set-Alias *What ShowBuildTree
Invoke-Build $_Task $_File @_Parameters -WhatIf