scout-gear 2.0.0 → 5.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.vimproject +65 -2
- data/Rakefile +2 -0
- data/VERSION +1 -1
- data/bin/scout +233 -24
- data/lib/scout/cmd.rb +344 -0
- data/lib/scout/concurrent_stream.rb +259 -0
- data/lib/scout/exceptions.rb +15 -8
- data/lib/scout/indiferent_hash/options.rb +8 -26
- data/lib/scout/log/color.rb +2 -2
- data/lib/scout/log/fingerprint.rb +11 -1
- data/lib/scout/log/progress/report.rb +0 -1
- data/lib/scout/log/progress/util.rb +1 -1
- data/lib/scout/log/progress.rb +4 -4
- data/lib/scout/log.rb +10 -2
- data/lib/scout/meta_extension.rb +19 -3
- data/lib/scout/misc/digest.rb +56 -0
- data/lib/scout/misc/filesystem.rb +26 -0
- data/lib/scout/misc/format.rb +17 -6
- data/lib/scout/misc/insist.rb +56 -0
- data/lib/scout/misc/monitor.rb +23 -0
- data/lib/scout/misc.rb +5 -11
- data/lib/scout/open/lock.rb +61 -0
- data/lib/scout/open/remote.rb +120 -0
- data/lib/scout/open/stream.rb +373 -0
- data/lib/scout/open/util.rb +225 -0
- data/lib/scout/open.rb +169 -0
- data/lib/scout/path/find.rb +68 -21
- data/lib/scout/path/tmpfile.rb +8 -0
- data/lib/scout/path/util.rb +14 -1
- data/lib/scout/path.rb +6 -30
- data/lib/scout/persist/open.rb +17 -0
- data/lib/scout/persist/path.rb +15 -0
- data/lib/scout/persist/serialize.rb +151 -0
- data/lib/scout/persist.rb +54 -0
- data/lib/scout/resource/path.rb +20 -0
- data/lib/scout/resource/produce/rake.rb +69 -0
- data/lib/scout/resource/produce.rb +246 -0
- data/lib/scout/resource/scout.rb +3 -0
- data/lib/scout/resource/util.rb +48 -0
- data/lib/scout/resource.rb +39 -0
- data/lib/scout/simple_opt/accessor.rb +1 -1
- data/lib/scout/simple_opt/doc.rb +29 -23
- data/lib/scout/simple_opt/parse.rb +4 -3
- data/lib/scout/tmpfile.rb +39 -1
- data/lib/scout/workflow/definition.rb +78 -0
- data/lib/scout/workflow/documentation.rb +83 -0
- data/lib/scout/workflow/step/info.rb +77 -0
- data/lib/scout/workflow/step/load.rb +18 -0
- data/lib/scout/workflow/step.rb +132 -0
- data/lib/scout/workflow/task/inputs.rb +114 -0
- data/lib/scout/workflow/task.rb +155 -0
- data/lib/scout/workflow/usage.rb +314 -0
- data/lib/scout/workflow/util.rb +11 -0
- data/lib/scout/workflow.rb +40 -0
- data/lib/scout-gear.rb +4 -0
- data/lib/scout.rb +1 -0
- data/lib/workflow-scout.rb +2 -0
- data/scout-gear.gemspec +77 -5
- data/scout_commands/alias +48 -0
- data/scout_commands/find +83 -0
- data/scout_commands/glob +0 -0
- data/scout_commands/rbbt +23 -0
- data/scout_commands/workflow/info +29 -0
- data/scout_commands/workflow/list +27 -0
- data/scout_commands/workflow/task +58 -0
- data/scout_commands/workflow/task_old +706 -0
- data/test/scout/indiferent_hash/test_options.rb +11 -1
- data/test/scout/misc/test_digest.rb +30 -0
- data/test/scout/misc/test_filesystem.rb +30 -0
- data/test/scout/misc/test_insist.rb +13 -0
- data/test/scout/open/test_lock.rb +52 -0
- data/test/scout/open/test_remote.rb +25 -0
- data/test/scout/open/test_stream.rb +515 -0
- data/test/scout/open/test_util.rb +73 -0
- data/test/scout/path/test_find.rb +28 -0
- data/test/scout/persist/test_open.rb +37 -0
- data/test/scout/persist/test_path.rb +37 -0
- data/test/scout/persist/test_serialize.rb +114 -0
- data/test/scout/resource/test_path.rb +40 -0
- data/test/scout/resource/test_produce.rb +62 -0
- data/test/scout/resource/test_util.rb +27 -0
- data/test/scout/simple_opt/test_doc.rb +16 -0
- data/test/scout/test_cmd.rb +85 -0
- data/test/scout/test_concurrent_stream.rb +29 -0
- data/test/scout/test_meta_extension.rb +9 -0
- data/test/scout/test_misc.rb +0 -7
- data/test/scout/test_open.rb +146 -0
- data/test/scout/test_path.rb +3 -1
- data/test/scout/test_persist.rb +83 -0
- data/test/scout/test_resource.rb +26 -0
- data/test/scout/test_workflow.rb +87 -0
- data/test/scout/workflow/step/test_info.rb +30 -0
- data/test/scout/workflow/step/test_load.rb +65 -0
- data/test/scout/workflow/task/test_inputs.rb +182 -0
- data/test/scout/workflow/test_definition.rb +0 -0
- data/test/scout/workflow/test_documentation.rb +30 -0
- data/test/scout/workflow/test_step.rb +36 -0
- data/test/scout/workflow/test_task.rb +179 -0
- data/test/scout/workflow/test_usage.rb +35 -0
- data/test/scout/workflow/test_util.rb +17 -0
- data/test/test_helper.rb +17 -0
- data/test/test_scout-gear.rb +0 -0
- metadata +75 -3
@@ -0,0 +1,314 @@
|
|
1
|
+
require 'scout/simple_opt'
|
2
|
+
|
3
|
+
module Task
|
4
|
+
def usage(workflow = nil, deps = nil)
|
5
|
+
str = StringIO.new
|
6
|
+
str.puts Log.color(:yellow, name)
|
7
|
+
str.puts Log.color(:yellow, "-" * name.length)
|
8
|
+
str.puts "\n" << Misc.format_paragraph(description.strip) << "\n" if description and not description.empty?
|
9
|
+
str.puts
|
10
|
+
|
11
|
+
selects = []
|
12
|
+
if inputs && inputs.any?
|
13
|
+
str.puts Log.color(:magenta, "Inputs")
|
14
|
+
str.puts
|
15
|
+
str.puts SOPT.input_array_doc(inputs)
|
16
|
+
str.puts
|
17
|
+
end
|
18
|
+
|
19
|
+
if deps and deps.any?
|
20
|
+
seen = inputs.collect{|name,_| name }
|
21
|
+
dep_inputs = {}
|
22
|
+
deps.each do |dep_workflow,task_name|
|
23
|
+
task = dep_workflow.tasks[task_name]
|
24
|
+
next if task.inputs.nil?
|
25
|
+
inputs = task.inputs.reject{|name, _| seen.include? name }
|
26
|
+
next unless inputs.any?
|
27
|
+
dep = workflow.nil? || dep_workflow.name != workflow.name ? ["#{dep_workflow.name}", task_name.to_s] *"#" : task_name.to_s
|
28
|
+
dep_inputs[dep] = inputs
|
29
|
+
end
|
30
|
+
|
31
|
+
str.puts Log.color(:magenta, "Inputs from dependencies:") if dep_inputs.any?
|
32
|
+
dep_inputs.each do |dep,inputs|
|
33
|
+
str.puts
|
34
|
+
str.puts Log.color :yellow, dep + ":"
|
35
|
+
str.puts
|
36
|
+
str.puts SOPT.input_array_doc(inputs)
|
37
|
+
str.puts
|
38
|
+
end
|
39
|
+
|
40
|
+
#task_inputs = dep_inputs deps, workflow
|
41
|
+
#task_inputs.each do |task,new_inputs|
|
42
|
+
# new_inputs.zip(task.input_types.values_at(*new_inputs)).select do |i,t|
|
43
|
+
# t.to_sym == :select and task.input_options[i][:select_options]
|
44
|
+
# end.each do |i,t|
|
45
|
+
# selects << [i, task.input_options[i][:select_options]]
|
46
|
+
# end
|
47
|
+
|
48
|
+
# next if new_inputs.empty?
|
49
|
+
|
50
|
+
# if task.workflow and task.workflow != workflow
|
51
|
+
# puts " #{Log.color :yellow, ["[#{task.workflow.to_s}]", task.name.to_s] *" "}:"
|
52
|
+
# else
|
53
|
+
# puts " #{Log.color :yellow, task.name.to_s}:"
|
54
|
+
# end
|
55
|
+
# puts unless Log.compact
|
56
|
+
# puts SOPT.input_doc(new_inputs, task.input_types, task.input_descriptions, task.input_defaults, true)
|
57
|
+
# puts unless Log.compact
|
58
|
+
#end
|
59
|
+
#puts
|
60
|
+
end
|
61
|
+
|
62
|
+
case
|
63
|
+
when inputs && inputs.select{|name,type| type == :array }.any?
|
64
|
+
str.puts Log.color(:green, Misc.format_paragraph("Lists are specified as arguments using ',' or '|'. When specified as files the '\\n'
|
65
|
+
also works in addition to the others. You may use the '--array_separator' option
|
66
|
+
the change this default. Whenever a file is specified it may also accept STDIN using
|
67
|
+
the '-' character."))
|
68
|
+
str.puts
|
69
|
+
|
70
|
+
when inputs && inputs.select{|name,type| type == :file || type == :tsv }.any?
|
71
|
+
str.puts Log.color(:green, Misc.format_paragraph("Whenever a file is specified it may also accept STDIN using the '-' character."))
|
72
|
+
str.puts
|
73
|
+
end
|
74
|
+
|
75
|
+
str.puts Log.color(:magenta, "Returns: ") << Log.color(:blue, type.to_s) << "\n"
|
76
|
+
str.puts
|
77
|
+
|
78
|
+
if selects.any?
|
79
|
+
str.puts Log.color(:magenta, "Input select options")
|
80
|
+
str.puts
|
81
|
+
selects.collect{|p| p}.uniq.each do |input,options|
|
82
|
+
str.puts Log.color(:blue, input.to_s + ": ") << Misc.format_paragraph(options.collect{|o| Array === o ? o.first.to_s : o.to_s} * ", ") << "\n"
|
83
|
+
str.puts unless Log.compact
|
84
|
+
end
|
85
|
+
str.puts
|
86
|
+
end
|
87
|
+
str.rewind
|
88
|
+
str.read
|
89
|
+
end
|
90
|
+
|
91
|
+
def SOPT_str
|
92
|
+
sopt_options = []
|
93
|
+
self.recursive_inputs.each do |name,type,desc,default,options|
|
94
|
+
shortcut = (options && options[:shortcut]) || name.to_s.slice(0,1)
|
95
|
+
boolean = type == :boolean
|
96
|
+
|
97
|
+
sopt_options << "-#{shortcut}--#{name}#{boolean ? "" : "*"}"
|
98
|
+
end
|
99
|
+
|
100
|
+
sopt_options * ":"
|
101
|
+
end
|
102
|
+
|
103
|
+
def get_SOPT(task)
|
104
|
+
sopt_option_string = self.SOPT_str
|
105
|
+
SOPT.get sopt_option_string
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
module Workflow
|
110
|
+
|
111
|
+
def dep_tree(task_name, seen = nil)
|
112
|
+
@dep_tree ||= {}
|
113
|
+
key = [self, task_name]
|
114
|
+
|
115
|
+
return @dep_tree[key] if @dep_tree.include?(key)
|
116
|
+
save = seen.nil?
|
117
|
+
seen = Set.new if seen.nil?
|
118
|
+
|
119
|
+
dep_tree = {}
|
120
|
+
task = self.tasks[task_name]
|
121
|
+
task.deps.each do |dep|
|
122
|
+
next if seen.include? dep
|
123
|
+
seen << dep
|
124
|
+
workflow, task, *rest = dep
|
125
|
+
|
126
|
+
key = [workflow, task]
|
127
|
+
|
128
|
+
dep_tree[key] = workflow.dep_tree(task, seen)
|
129
|
+
end if task.deps
|
130
|
+
|
131
|
+
@dep_tree[key] = dep_tree if save
|
132
|
+
|
133
|
+
dep_tree
|
134
|
+
end
|
135
|
+
|
136
|
+
def recursive_deps(task_name)
|
137
|
+
dependencies = []
|
138
|
+
dep_tree(task_name, dependencies)
|
139
|
+
dependencies
|
140
|
+
end
|
141
|
+
|
142
|
+
def _prov_tasks(tree)
|
143
|
+
tasks = []
|
144
|
+
heap = [tree]
|
145
|
+
while heap.any?
|
146
|
+
t = heap.pop
|
147
|
+
t.each do |k,v|
|
148
|
+
tasks << k
|
149
|
+
heap << v
|
150
|
+
end
|
151
|
+
end
|
152
|
+
tasks
|
153
|
+
end
|
154
|
+
|
155
|
+
def prov_string(tree)
|
156
|
+
description = ""
|
157
|
+
|
158
|
+
last = nil
|
159
|
+
seen = Set.new
|
160
|
+
|
161
|
+
tasks = _prov_tasks(tree)
|
162
|
+
tasks.each do |workflow,task_name|
|
163
|
+
|
164
|
+
next if seen.include?([workflow,task_name])
|
165
|
+
|
166
|
+
child = last && last.include?([workflow, task_name])
|
167
|
+
first = last.nil?
|
168
|
+
last = _prov_tasks(workflow.dep_tree(task_name))
|
169
|
+
|
170
|
+
break if child
|
171
|
+
|
172
|
+
if child
|
173
|
+
description << "->" << task_name.to_s
|
174
|
+
elsif first
|
175
|
+
description << "" << task_name.to_s
|
176
|
+
else
|
177
|
+
description << ";" << task_name.to_s
|
178
|
+
end
|
179
|
+
|
180
|
+
seen << [workflow, task_name]
|
181
|
+
end
|
182
|
+
description
|
183
|
+
end
|
184
|
+
|
185
|
+
def prov_tree(tree, offset = 0, seen = [])
|
186
|
+
|
187
|
+
return "" if tree.empty?
|
188
|
+
|
189
|
+
lines = []
|
190
|
+
|
191
|
+
offset_str = " " * offset
|
192
|
+
|
193
|
+
lines << offset_str
|
194
|
+
|
195
|
+
tree.each do |p,dtree|
|
196
|
+
next if seen.include?(p)
|
197
|
+
seen.push(p)
|
198
|
+
workflow, task = p
|
199
|
+
lines << offset_str + [workflow.to_s, task.to_s] * "#" + "\n" + workflow.prov_tree(dtree, offset + 1, seen)
|
200
|
+
end
|
201
|
+
|
202
|
+
lines * "\n"
|
203
|
+
end
|
204
|
+
|
205
|
+
def usage(task = nil, abridge = false)
|
206
|
+
|
207
|
+
str = StringIO.new
|
208
|
+
|
209
|
+
if self.documentation[:title] and not self.documentation[:title].empty?
|
210
|
+
title = self.name + " - " + self.documentation[:title]
|
211
|
+
str.puts Log.color :magenta, title
|
212
|
+
str.puts Log.color :magenta, "=" * title.length
|
213
|
+
else
|
214
|
+
str.puts Log.color :magenta, self.name
|
215
|
+
str.puts Log.color :magenta, "=" * self.name.length
|
216
|
+
end
|
217
|
+
|
218
|
+
if self.documentation[:description] and not self.documentation[:description].empty?
|
219
|
+
str.puts
|
220
|
+
str.puts Misc.format_paragraph self.documentation[:description]
|
221
|
+
str.puts
|
222
|
+
end
|
223
|
+
|
224
|
+
|
225
|
+
if task.nil?
|
226
|
+
|
227
|
+
str.puts Log.color :magenta, "## TASKS"
|
228
|
+
if self.documentation[:task_description] and not self.documentation[:task_description].empty?
|
229
|
+
str.puts
|
230
|
+
str.puts Misc.format_paragraph self.documentation[:task_description]
|
231
|
+
end
|
232
|
+
str.puts
|
233
|
+
|
234
|
+
final = Set.new
|
235
|
+
not_final = Set.new
|
236
|
+
tasks.each do |name,task|
|
237
|
+
tree = dep_tree(name)
|
238
|
+
not_final += tree.keys
|
239
|
+
final << name unless not_final.include?(name)
|
240
|
+
end
|
241
|
+
|
242
|
+
not_final.each do |p|
|
243
|
+
final -= [p.last]
|
244
|
+
end
|
245
|
+
|
246
|
+
tasks.each do |name,task|
|
247
|
+
description = task.description || ""
|
248
|
+
description = description.split("\n\n").first
|
249
|
+
|
250
|
+
next if abridge && ! final.include?(name)
|
251
|
+
str.puts Misc.format_definition_list_item(name.to_s, description, nil, nil, :yellow)
|
252
|
+
|
253
|
+
prov_string = prov_string(dep_tree(name))
|
254
|
+
str.puts Misc.format_paragraph Log.color(:blue, "->" + prov_string) if prov_string && ! prov_string.empty?
|
255
|
+
end
|
256
|
+
|
257
|
+
else
|
258
|
+
|
259
|
+
if Task === task
|
260
|
+
task_name = task.name
|
261
|
+
else
|
262
|
+
task_name = task
|
263
|
+
task = self.tasks[task_name]
|
264
|
+
end
|
265
|
+
|
266
|
+
#dependencies = self.rec_dependencies(task_name).collect{|dep_name| Array === dep_name ? dep_name.first.tasks[dep_name[1].to_sym] : self.tasks[dep_name.to_sym]}
|
267
|
+
str.puts task.usage(self, self.recursive_deps(task_name))
|
268
|
+
|
269
|
+
dep_tree = {[self, task_name] => dep_tree(task_name)}
|
270
|
+
prov_tree = prov_tree(dep_tree)
|
271
|
+
if prov_tree && ! prov_tree.empty? && prov_tree.split("\n").length > 2
|
272
|
+
|
273
|
+
str.puts Log.color :magenta, "## DEPENDENCY GRAPH (abridged)"
|
274
|
+
str.puts
|
275
|
+
prov_tree.split("\n").each do |line|
|
276
|
+
next if line.strip.empty?
|
277
|
+
if m = line.match(/^( *)(\w+?)#(\w*)/i)
|
278
|
+
offset, workflow, task_name = m.values_at 1, 2, 3
|
279
|
+
str.puts [offset, Log.color(:magenta, workflow), "#", Log.color(:yellow, task_name)] * ""
|
280
|
+
else
|
281
|
+
str.puts Log.color :blue, line
|
282
|
+
end
|
283
|
+
end
|
284
|
+
str.puts
|
285
|
+
end
|
286
|
+
end
|
287
|
+
|
288
|
+
str.rewind
|
289
|
+
str.read
|
290
|
+
end
|
291
|
+
|
292
|
+
def SOPT_str(task)
|
293
|
+
sopt_options = []
|
294
|
+
self.tasks[task].recursive_inputs.each do |name,type,desc,default,options|
|
295
|
+
shortcut = options[:shortcut] || name.to_s.slice(0,1)
|
296
|
+
boolean = type == :boolean
|
297
|
+
|
298
|
+
sopt_options << "-#{short}--#{name}#{boolean ? "" : "*"}"
|
299
|
+
end
|
300
|
+
|
301
|
+
sopt_options * ":"
|
302
|
+
end
|
303
|
+
|
304
|
+
def get_SOPT(task)
|
305
|
+
sopt_option_string = self.SOPT_str(task)
|
306
|
+
SOPT.get sopt_option_string
|
307
|
+
end
|
308
|
+
|
309
|
+
def self.get_SOPT(workflow, task)
|
310
|
+
workflow = Workflow.require_workflow workflow if String === workflow
|
311
|
+
task = workflow.tasks[task.to_sym] if String === task || Symbol === task
|
312
|
+
workflow.get_SOPT(task)
|
313
|
+
end
|
314
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require_relative 'workflow/definition'
|
2
|
+
require_relative 'workflow/util'
|
3
|
+
require_relative 'workflow/task'
|
4
|
+
require_relative 'workflow/step'
|
5
|
+
require_relative 'workflow/documentation'
|
6
|
+
require_relative 'workflow/usage'
|
7
|
+
|
8
|
+
require_relative 'resource'
|
9
|
+
require_relative 'resource/scout'
|
10
|
+
|
11
|
+
module Workflow
|
12
|
+
class << self
|
13
|
+
attr_accessor :workflows
|
14
|
+
def workflows
|
15
|
+
@workflows ||= []
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
attr_accessor :libdir
|
20
|
+
def self.extended(base)
|
21
|
+
self.workflows << base
|
22
|
+
libdir = Path.caller_lib_dir
|
23
|
+
return if libdir.nil?
|
24
|
+
base.libdir = Path.setup(libdir).tap{|p| p.resource = base}
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.require_workflow(workflow)
|
28
|
+
workflow = Path.setup('workflows')[workflow]["workflow.rb"] unless Open.exists?(workflow)
|
29
|
+
if Open.exists?(workflow)
|
30
|
+
workflow = workflow.find if Path === workflow
|
31
|
+
load workflow
|
32
|
+
end
|
33
|
+
workflows.last
|
34
|
+
end
|
35
|
+
|
36
|
+
def job(name, *args)
|
37
|
+
task = tasks[name]
|
38
|
+
task.job(*args)
|
39
|
+
end
|
40
|
+
end
|
data/lib/scout-gear.rb
CHANGED
@@ -1,5 +1,9 @@
|
|
1
|
+
require_relative 'scout/exceptions'
|
1
2
|
require_relative 'scout/indiferent_hash'
|
2
3
|
require_relative 'scout/tmpfile'
|
3
4
|
require_relative 'scout/log'
|
4
5
|
require_relative 'scout/path'
|
5
6
|
require_relative 'scout/simple_opt'
|
7
|
+
require_relative 'scout/resource'
|
8
|
+
require_relative 'scout/resource/scout'
|
9
|
+
require_relative 'scout/persist'
|
data/lib/scout.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'workflow-scout'
|
data/scout-gear.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: scout-gear 2.0
|
5
|
+
# stub: scout-gear 5.2.0 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "scout-gear".freeze
|
9
|
-
s.version = "2.0
|
9
|
+
s.version = "5.2.0"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib".freeze]
|
13
13
|
s.authors = ["Miguel Vazquez".freeze]
|
14
|
-
s.date = "2023-
|
14
|
+
s.date = "2023-04-28"
|
15
15
|
s.description = "Temporary files, logs, etc.".freeze
|
16
16
|
s.email = "mikisvaz@gmail.com".freeze
|
17
17
|
s.executables = ["scout".freeze]
|
@@ -29,6 +29,9 @@ Gem::Specification.new do |s|
|
|
29
29
|
"VERSION",
|
30
30
|
"bin/scout",
|
31
31
|
"lib/scout-gear.rb",
|
32
|
+
"lib/scout.rb",
|
33
|
+
"lib/scout/cmd.rb",
|
34
|
+
"lib/scout/concurrent_stream.rb",
|
32
35
|
"lib/scout/exceptions.rb",
|
33
36
|
"lib/scout/indiferent_hash.rb",
|
34
37
|
"lib/scout/indiferent_hash/case_insensitive.rb",
|
@@ -42,10 +45,30 @@ Gem::Specification.new do |s|
|
|
42
45
|
"lib/scout/log/progress/util.rb",
|
43
46
|
"lib/scout/meta_extension.rb",
|
44
47
|
"lib/scout/misc.rb",
|
48
|
+
"lib/scout/misc/digest.rb",
|
49
|
+
"lib/scout/misc/filesystem.rb",
|
45
50
|
"lib/scout/misc/format.rb",
|
51
|
+
"lib/scout/misc/insist.rb",
|
52
|
+
"lib/scout/misc/monitor.rb",
|
53
|
+
"lib/scout/open.rb",
|
54
|
+
"lib/scout/open/lock.rb",
|
55
|
+
"lib/scout/open/remote.rb",
|
56
|
+
"lib/scout/open/stream.rb",
|
57
|
+
"lib/scout/open/util.rb",
|
46
58
|
"lib/scout/path.rb",
|
47
59
|
"lib/scout/path/find.rb",
|
60
|
+
"lib/scout/path/tmpfile.rb",
|
48
61
|
"lib/scout/path/util.rb",
|
62
|
+
"lib/scout/persist.rb",
|
63
|
+
"lib/scout/persist/open.rb",
|
64
|
+
"lib/scout/persist/path.rb",
|
65
|
+
"lib/scout/persist/serialize.rb",
|
66
|
+
"lib/scout/resource.rb",
|
67
|
+
"lib/scout/resource/path.rb",
|
68
|
+
"lib/scout/resource/produce.rb",
|
69
|
+
"lib/scout/resource/produce/rake.rb",
|
70
|
+
"lib/scout/resource/scout.rb",
|
71
|
+
"lib/scout/resource/util.rb",
|
49
72
|
"lib/scout/simple_opt.rb",
|
50
73
|
"lib/scout/simple_opt/accessor.rb",
|
51
74
|
"lib/scout/simple_opt/doc.rb",
|
@@ -53,26 +76,75 @@ Gem::Specification.new do |s|
|
|
53
76
|
"lib/scout/simple_opt/parse.rb",
|
54
77
|
"lib/scout/simple_opt/setup.rb",
|
55
78
|
"lib/scout/tmpfile.rb",
|
79
|
+
"lib/scout/workflow.rb",
|
80
|
+
"lib/scout/workflow/definition.rb",
|
81
|
+
"lib/scout/workflow/documentation.rb",
|
82
|
+
"lib/scout/workflow/step.rb",
|
83
|
+
"lib/scout/workflow/step/info.rb",
|
84
|
+
"lib/scout/workflow/step/load.rb",
|
85
|
+
"lib/scout/workflow/task.rb",
|
86
|
+
"lib/scout/workflow/task/inputs.rb",
|
87
|
+
"lib/scout/workflow/usage.rb",
|
88
|
+
"lib/scout/workflow/util.rb",
|
89
|
+
"lib/workflow-scout.rb",
|
56
90
|
"scout-gear.gemspec",
|
91
|
+
"scout_commands/alias",
|
92
|
+
"scout_commands/find",
|
93
|
+
"scout_commands/glob",
|
94
|
+
"scout_commands/rbbt",
|
95
|
+
"scout_commands/workflow/info",
|
96
|
+
"scout_commands/workflow/list",
|
97
|
+
"scout_commands/workflow/task",
|
98
|
+
"scout_commands/workflow/task_old",
|
57
99
|
"test/scout/indiferent_hash/test_case_insensitive.rb",
|
58
100
|
"test/scout/indiferent_hash/test_options.rb",
|
59
101
|
"test/scout/log/test_progress.rb",
|
102
|
+
"test/scout/misc/test_digest.rb",
|
103
|
+
"test/scout/misc/test_filesystem.rb",
|
104
|
+
"test/scout/misc/test_insist.rb",
|
105
|
+
"test/scout/open/test_lock.rb",
|
106
|
+
"test/scout/open/test_remote.rb",
|
107
|
+
"test/scout/open/test_stream.rb",
|
108
|
+
"test/scout/open/test_util.rb",
|
60
109
|
"test/scout/path/test_find.rb",
|
61
110
|
"test/scout/path/test_util.rb",
|
111
|
+
"test/scout/persist/test_open.rb",
|
112
|
+
"test/scout/persist/test_path.rb",
|
113
|
+
"test/scout/persist/test_serialize.rb",
|
114
|
+
"test/scout/resource/test_path.rb",
|
115
|
+
"test/scout/resource/test_produce.rb",
|
116
|
+
"test/scout/resource/test_util.rb",
|
117
|
+
"test/scout/simple_opt/test_doc.rb",
|
62
118
|
"test/scout/simple_opt/test_get.rb",
|
63
119
|
"test/scout/simple_opt/test_parse.rb",
|
64
120
|
"test/scout/simple_opt/test_setup.rb",
|
121
|
+
"test/scout/test_cmd.rb",
|
122
|
+
"test/scout/test_concurrent_stream.rb",
|
65
123
|
"test/scout/test_indiferent_hash.rb",
|
66
124
|
"test/scout/test_log.rb",
|
67
125
|
"test/scout/test_meta_extension.rb",
|
68
126
|
"test/scout/test_misc.rb",
|
127
|
+
"test/scout/test_open.rb",
|
69
128
|
"test/scout/test_path.rb",
|
129
|
+
"test/scout/test_persist.rb",
|
130
|
+
"test/scout/test_resource.rb",
|
70
131
|
"test/scout/test_tmpfile.rb",
|
71
|
-
"test/
|
132
|
+
"test/scout/test_workflow.rb",
|
133
|
+
"test/scout/workflow/step/test_info.rb",
|
134
|
+
"test/scout/workflow/step/test_load.rb",
|
135
|
+
"test/scout/workflow/task/test_inputs.rb",
|
136
|
+
"test/scout/workflow/test_definition.rb",
|
137
|
+
"test/scout/workflow/test_documentation.rb",
|
138
|
+
"test/scout/workflow/test_step.rb",
|
139
|
+
"test/scout/workflow/test_task.rb",
|
140
|
+
"test/scout/workflow/test_usage.rb",
|
141
|
+
"test/scout/workflow/test_util.rb",
|
142
|
+
"test/test_helper.rb",
|
143
|
+
"test/test_scout-gear.rb"
|
72
144
|
]
|
73
145
|
s.homepage = "http://github.com/mikisvaz/scout-gear".freeze
|
74
146
|
s.licenses = ["MIT".freeze]
|
75
|
-
s.rubygems_version = "3.4.
|
147
|
+
s.rubygems_version = "3.4.11".freeze
|
76
148
|
s.summary = "basic gear for scouts".freeze
|
77
149
|
|
78
150
|
s.specification_version = 4
|
@@ -0,0 +1,48 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'scout-gear'
|
4
|
+
|
5
|
+
$0 = "scout #{$previous_commands.any? ? $previous_commands*" " + " " : "" }#{ File.basename(__FILE__) }" if $previous_commands
|
6
|
+
|
7
|
+
options = SOPT.setup <<EOF
|
8
|
+
|
9
|
+
Creates a one work comman alias.
|
10
|
+
|
11
|
+
$ #{$0} <alias> [<options>] [<othercmd>]*
|
12
|
+
|
13
|
+
The other commands might include options. But beware the some might reach the alias if they where consumed
|
14
|
+
earlier, like --dev or --log. Edit #{Scout.ect.cmd_alias.find} to fine tune.
|
15
|
+
|
16
|
+
-h--help Print this help
|
17
|
+
EOF
|
18
|
+
if options[:help]
|
19
|
+
if defined? scout_usage
|
20
|
+
scout_usage
|
21
|
+
else
|
22
|
+
puts SOPT.doc
|
23
|
+
end
|
24
|
+
exit 0
|
25
|
+
end
|
26
|
+
|
27
|
+
cmd, *rest = ARGV
|
28
|
+
|
29
|
+
aliases ||= Scout.etc.cmd_alias.exists? ? Scout.etc.cmd_alias.yaml : {}
|
30
|
+
|
31
|
+
if cmd.nil?
|
32
|
+
aliases.each do |name, parts|
|
33
|
+
parts = parts.collect{|p|
|
34
|
+
p =~ /^[\w:_\/-]*$/ ? p : "'" << p << "'"
|
35
|
+
}
|
36
|
+
puts [Log.color(:magenta, name), parts * " "] * ": "
|
37
|
+
end
|
38
|
+
exit 0
|
39
|
+
end
|
40
|
+
|
41
|
+
if rest.empty?
|
42
|
+
aliases.delete cmd
|
43
|
+
else
|
44
|
+
aliases[cmd] = rest
|
45
|
+
end
|
46
|
+
|
47
|
+
Open.write(Scout.etc.cmd_alias.find,(aliases.to_yaml))
|
48
|
+
|
data/scout_commands/find
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'scout-gear'
|
4
|
+
|
5
|
+
$0 = "scout #{$previous_commands.any? ? $previous_commands*" " + " " : "" }#{ File.basename(__FILE__) }" if $previous_commands
|
6
|
+
|
7
|
+
options = SOPT.setup <<EOF
|
8
|
+
|
9
|
+
Find files
|
10
|
+
|
11
|
+
$ #{$0} [<options>] (<resource> <path>|<path>)
|
12
|
+
|
13
|
+
-h--help Print this help
|
14
|
+
-r--requires* Files to require; 'all' for all in Scout.etc.requires
|
15
|
+
-lw--load_workflow* Files to require; 'all' for all in Scout.etc.requires
|
16
|
+
-w--where* Where to look for the path
|
17
|
+
EOF
|
18
|
+
if options[:help]
|
19
|
+
if defined? scout_usage
|
20
|
+
scout_usage
|
21
|
+
else
|
22
|
+
puts SOPT.doc
|
23
|
+
end
|
24
|
+
exit 0
|
25
|
+
end
|
26
|
+
|
27
|
+
resource, path = ARGV
|
28
|
+
path, resource = resource, nil if path.nil?
|
29
|
+
|
30
|
+
raise MissingParameterException.new(:path) if path.nil?
|
31
|
+
|
32
|
+
case options[:workflows]
|
33
|
+
when nil, false, "false", "none"
|
34
|
+
when "all"
|
35
|
+
Scout.etc.workflows.list.each do |workflow|
|
36
|
+
Workflow.require_workflow file
|
37
|
+
end if Scout.etc.workflows.exists?
|
38
|
+
else
|
39
|
+
options[:workflows].split(/[ ,;|]/).each do |workflow|
|
40
|
+
Workflow.require_workflow workflow
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
case options[:requires]
|
45
|
+
when nil, false, "false", "none"
|
46
|
+
when "all"
|
47
|
+
Scout.etc.requires.list.each do |file|
|
48
|
+
require file
|
49
|
+
end if Scout.etc.requires.exists?
|
50
|
+
else
|
51
|
+
options[:requires].split(/[ ,;|]/).each do |file|
|
52
|
+
require file
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
location = nil
|
57
|
+
where = options[:where]
|
58
|
+
all = options[:all]
|
59
|
+
|
60
|
+
begin
|
61
|
+
resource = Workflow.require_workflow resource
|
62
|
+
rescue
|
63
|
+
begin
|
64
|
+
resource = Kernel.const_get(resource)
|
65
|
+
rescue
|
66
|
+
raise "Resource not found: #{ resource }"
|
67
|
+
end
|
68
|
+
end if resource
|
69
|
+
|
70
|
+
path = (resource || Scout)[path.dup]
|
71
|
+
|
72
|
+
if where.nil? || where == 'all' || path.search_paths.include?(where.to_sym)
|
73
|
+
location = path.find(where)
|
74
|
+
|
75
|
+
if Array === location
|
76
|
+
puts location * "\n"
|
77
|
+
else
|
78
|
+
location = nil if ! Open.exists?(location)
|
79
|
+
puts location
|
80
|
+
end
|
81
|
+
else
|
82
|
+
puts SSHLine.command(where, $0, ARGV, options.merge("where" => :all))
|
83
|
+
end
|
data/scout_commands/glob
ADDED
File without changes
|
data/scout_commands/rbbt
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
case
|
3
|
+
when File.exist?(file = File.join(__dir__, '../modules/rbbt-util/bin/rbbt'))
|
4
|
+
$LOAD_PATH.unshift(lib_dir = File.join(file, '../..', 'lib'))
|
5
|
+
require_relative File.join(lib_dir,'rbbt-util')
|
6
|
+
Path.add_path(:rbbt, File.expand_path(File.join(File.dirname(lib_dir), "/{TOPLEVEL}/{SUBPATH}")))
|
7
|
+
Path.default_pkgdir = Rbbt
|
8
|
+
load file
|
9
|
+
when File.exist?(file = File.join(ENV["HOME"], 'git/scout-gear/modules/rbbt-util/bin/rbbt'))
|
10
|
+
$LOAD_PATH.unshift(lib_dir = File.join(file, '../..', 'lib'))
|
11
|
+
require_relative File.join(lib_dir,'rbbt-util')
|
12
|
+
Path.add_path(:rbbt, File.expand_path(File.join(File.dirname(lib_dir), "/{TOPLEVEL}/{SUBPATH}")))
|
13
|
+
Path.default_pkgdir = Rbbt
|
14
|
+
load file
|
15
|
+
when File.exist?(file = File.join(ENV["HOME"], 'git/rbbt-util/bin/rbbt'))
|
16
|
+
$LOAD_PATH.unshift(lib_dir = File.join(file, '../..', 'lib'))
|
17
|
+
require_relative File.join(lib_dir,'rbbt-util')
|
18
|
+
Path.add_path(:rbbt, File.expand_path(File.join(File.dirname(lib_dir), "/{TOPLEVEL}/{SUBPATH}")))
|
19
|
+
Path.default_pkgdir = Rbbt
|
20
|
+
load file
|
21
|
+
else
|
22
|
+
raise "Cant find rbbt"
|
23
|
+
end
|