cmd-utils 1.1.2 → 1.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/Gemfile +4 -6
- data/Gemfile.lock +19 -25
- data/README.md +58 -27
- data/Rakefile +5 -5
- data/VERSION +1 -1
- data/cmd-utils.gemspec +21 -20
- data/lib/arg-utils.rb +52 -0
- data/lib/cmd-utils.rb +8 -270
- data/lib/error-utils.rb +56 -0
- data/lib/lookup.rb +4 -1
- data/lib/run-utils.rb +79 -0
- data/lib/ssh-utils.rb +19 -12
- data/lib/talk-utils.rb +160 -0
- data/test/helper.rb +53 -19
- data/test/test-lookup.rb +4 -2
- data/test/test-run-utils.rb +31 -0
- data/test/{test-cmd-utils.rb → test-talk-utils.rb} +8 -59
- metadata +24 -34
- data/test/test_cmd-utils.rb.off +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 19937d5ab0376abd84254c084edaec772b501d42
|
4
|
+
data.tar.gz: 130e9b5ec4997a36db8c4e46503650ca55f53288
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a1fe074ab79e0f4e541f3ab7c3325ad60e836e40ff8895168591131ea1391433347eb5f3dbb1e3d9a25eb053643105c48ccd2f66e7303fbd91e75da28c87c9ac
|
7
|
+
data.tar.gz: 9f359fed8970713e8a5ce436ce031a9b5d67d0ac80383691a89daa195d275c001f84f573e039664f776a8f2dcfe7e4ec539e0e9a897c60291ab4268bd14d7d0b
|
data/Gemfile
CHANGED
@@ -6,10 +6,8 @@ source "http://rubygems.org"
|
|
6
6
|
# Add dependencies to develop your gem here.
|
7
7
|
# Include everything needed to run rake, tests, features, etc.
|
8
8
|
group :development do
|
9
|
-
gem "minitest",
|
10
|
-
|
11
|
-
gem "
|
12
|
-
gem "
|
13
|
-
gem "jeweler"
|
14
|
-
gem "simplecov"
|
9
|
+
gem "minitest", '~> 5.3'
|
10
|
+
gem "rdoc", "~> 4.1"
|
11
|
+
gem "bundler", "~> 1.0"
|
12
|
+
gem "jeweler", "~> 2.0"
|
15
13
|
end
|
data/Gemfile.lock
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
-
addressable (2.3.
|
4
|
+
addressable (2.3.6)
|
5
5
|
builder (3.2.2)
|
6
|
-
descendants_tracker (0.0.
|
7
|
-
|
6
|
+
descendants_tracker (0.0.4)
|
7
|
+
thread_safe (~> 0.3, >= 0.3.1)
|
8
8
|
faraday (0.9.0)
|
9
9
|
multipart-post (>= 1.2, < 3)
|
10
|
-
git (1.2.
|
10
|
+
git (1.2.7)
|
11
11
|
github_api (0.11.3)
|
12
12
|
addressable (~> 2.3)
|
13
13
|
descendants_tracker (~> 0.0.1)
|
@@ -16,7 +16,7 @@ GEM
|
|
16
16
|
multi_json (>= 1.7.5, < 2.0)
|
17
17
|
nokogiri (~> 1.6.0)
|
18
18
|
oauth2
|
19
|
-
hashie (
|
19
|
+
hashie (3.0.0)
|
20
20
|
highline (1.6.21)
|
21
21
|
jeweler (2.0.1)
|
22
22
|
builder
|
@@ -28,37 +28,31 @@ GEM
|
|
28
28
|
rake
|
29
29
|
rdoc
|
30
30
|
json (1.8.1)
|
31
|
-
jwt (0.
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
multi_json (1.8.4)
|
31
|
+
jwt (1.0.0)
|
32
|
+
mini_portile (0.6.0)
|
33
|
+
minitest (5.3.5)
|
34
|
+
multi_json (1.10.1)
|
36
35
|
multi_xml (0.5.5)
|
37
36
|
multipart-post (2.0.0)
|
38
|
-
nokogiri (1.6.1)
|
39
|
-
mini_portile (
|
40
|
-
oauth2 (0.9.
|
37
|
+
nokogiri (1.6.2.1)
|
38
|
+
mini_portile (= 0.6.0)
|
39
|
+
oauth2 (0.9.4)
|
41
40
|
faraday (>= 0.8, < 0.10)
|
42
|
-
jwt (~>
|
41
|
+
jwt (~> 1.0)
|
43
42
|
multi_json (~> 1.3)
|
44
43
|
multi_xml (~> 0.5)
|
45
44
|
rack (~> 1.2)
|
46
45
|
rack (1.5.2)
|
47
|
-
rake (10.
|
46
|
+
rake (10.3.2)
|
48
47
|
rdoc (4.1.1)
|
49
48
|
json (~> 1.4)
|
50
|
-
|
51
|
-
docile (~> 1.1.0)
|
52
|
-
multi_json
|
53
|
-
simplecov-html (~> 0.8.0)
|
54
|
-
simplecov-html (0.8.0)
|
49
|
+
thread_safe (0.3.4)
|
55
50
|
|
56
51
|
PLATFORMS
|
57
52
|
ruby
|
58
53
|
|
59
54
|
DEPENDENCIES
|
60
|
-
bundler
|
61
|
-
jeweler
|
62
|
-
minitest (
|
63
|
-
rdoc
|
64
|
-
simplecov
|
55
|
+
bundler (~> 1.0)
|
56
|
+
jeweler (~> 2.0)
|
57
|
+
minitest (~> 5.3)
|
58
|
+
rdoc (~> 4.1)
|
data/README.md
CHANGED
@@ -1,5 +1,4 @@
|
|
1
|
-
cmd-utils
|
2
|
-
=========
|
1
|
+
# cmd-utils
|
3
2
|
|
4
3
|
Utilities for writing command line tools in ruby.
|
5
4
|
|
@@ -9,27 +8,35 @@ Installation:
|
|
9
8
|
|
10
9
|
Usage:
|
11
10
|
|
12
|
-
require 'cmd-utils'
|
13
|
-
|
11
|
+
require 'cmd-utils' # include all libraries in this repo
|
12
|
+
|
13
|
+
or
|
14
|
+
|
15
|
+
require 'arg-utils'
|
16
|
+
require 'error-utils'
|
14
17
|
require 'lookup'
|
18
|
+
require 'run-utils'
|
19
|
+
require 'ssh-utils'
|
20
|
+
require 'talk-utils'
|
15
21
|
|
16
22
|
This gem provides:
|
17
23
|
|
18
|
-
*
|
19
|
-
*
|
20
|
-
*
|
21
|
-
*
|
22
|
-
*
|
24
|
+
* `arg-utils`: help manage variable argumentlists.
|
25
|
+
* `talk-utils`: routines for output on `$stderr`, controlled by several global variables.
|
26
|
+
* `error-utils`: error-reporting-and-exit.
|
27
|
+
* `run-utils`: system call handling, with verbose or debug output, error and "ok" message handling.
|
28
|
+
* `ssh-utils`: remote system command invocation (based on ssh).
|
29
|
+
* `lookup`: ambiguous, case-insensitive string lookups in arrays or hashs, with error handling.
|
30
|
+
* `cmd-utils`: includes all the above libraries.
|
23
31
|
|
24
|
-
talk, dtalk, qtalk, vtalk, nrtalk, nvtalk
|
25
|
-
=========================================
|
32
|
+
## talk-utils: talk, dtalk, qtalk, vtalk, nrtalk, nvtalk
|
26
33
|
|
27
34
|
These utilities provide simple utilities that rely on the following global variables:
|
28
35
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
36
|
+
$verbose -- enables vtalk(f) function output
|
37
|
+
$norun -- enables nrtalk(f) output, and disables the run command execution
|
38
|
+
$quiet -- disables talk(f) output, and enables qtalk(f) function output
|
39
|
+
$debug -- enables dtalk(f) function output
|
33
40
|
|
34
41
|
These routines provide option-controlled output. The arguments can be given as
|
35
42
|
part of the the function calls, or, can be provided as the return value of a
|
@@ -94,8 +101,26 @@ Error output:
|
|
94
101
|
The `error` routine take an optional numeric first argument which is used to
|
95
102
|
set the exit code. If not given, the exit code is 1.
|
96
103
|
|
97
|
-
`
|
98
|
-
|
104
|
+
## error-utils: `error`, `errorf`
|
105
|
+
|
106
|
+
The `error` and `errorf` family of methods make it easy display an error message
|
107
|
+
and then exit, possibly with a specific error code.
|
108
|
+
|
109
|
+
The arguments may be given as a parameters on the method, or as return values
|
110
|
+
from a yield block.
|
111
|
+
|
112
|
+
error MSG
|
113
|
+
error {MSG}
|
114
|
+
error CODE, MSG
|
115
|
+
error( CODE) { MSG }
|
116
|
+
error{ CODE, MSG }
|
117
|
+
|
118
|
+
errorf FMT, *ARGS
|
119
|
+
errorf( FMT){ ARGS }
|
120
|
+
errorf{ FMT, ARGS }
|
121
|
+
|
122
|
+
|
123
|
+
## run-utils: `cmd_run`, `safe_run`
|
99
124
|
|
100
125
|
cmd_run cmd
|
101
126
|
cmd_run { cmd }
|
@@ -134,11 +159,10 @@ command evaluation with the `$verbose` treatment.
|
|
134
159
|
safe_run { cmd }
|
135
160
|
safe_run {[cmd, errmsg, okmsg]}
|
136
161
|
|
137
|
-
ssh-utils
|
138
|
-
=========
|
162
|
+
## ssh-utils
|
139
163
|
|
140
164
|
A module to define some routines for running commands across many systems using
|
141
|
-
ssh. Environment variables can be specified (PATH is used by default).
|
165
|
+
ssh. Environment variables can be specified (`PATH` is used by default).
|
142
166
|
|
143
167
|
Usage:
|
144
168
|
|
@@ -146,14 +170,13 @@ Usage:
|
|
146
170
|
|
147
171
|
on serverlist, :debug = true do |server|
|
148
172
|
as user do
|
149
|
-
with PATH
|
173
|
+
with PATH do
|
150
174
|
remote_run :whoami
|
151
175
|
end
|
152
176
|
end
|
153
177
|
end
|
154
178
|
|
155
|
-
|
156
|
-
-------------------
|
179
|
+
### `on`
|
157
180
|
|
158
181
|
on SERVERLIST, OPTIONSHASH |server|
|
159
182
|
BLOCK-TO-EXECUTE-FOR-EACH-SERVER
|
@@ -193,6 +216,7 @@ is globally available, but the `:debug` option is a block-local specification.
|
|
193
216
|
Sets the `:verbose` flag for use within the associated block. The `$verbose` flag
|
194
217
|
is globally available, but the `:verbose` option is a block-local specification.
|
195
218
|
|
219
|
+
### `as`
|
196
220
|
|
197
221
|
as USERLIST, OPTIONSHASH
|
198
222
|
BLOCK-TO-EXECUTE-FOR-EACH-USER
|
@@ -215,10 +239,18 @@ option. For example, the following two sections are equivalent:
|
|
215
239
|
remote_run :whoami
|
216
240
|
end
|
217
241
|
|
242
|
+
### `with`
|
243
|
+
|
244
|
+
as USERLIST, OPTIONSHASH do
|
245
|
+
with SOMEENVAR do
|
246
|
+
BLOCK-TO-EXECUTE-WITH-SOMEENVAR
|
247
|
+
end
|
248
|
+
end
|
218
249
|
|
250
|
+
The `with` method is used to set additional environment variables, or to
|
251
|
+
reset them.
|
219
252
|
|
220
|
-
lookup
|
221
|
-
======
|
253
|
+
## lookup-utils:
|
222
254
|
|
223
255
|
usage:
|
224
256
|
|
@@ -249,7 +281,6 @@ nil.
|
|
249
281
|
If `err_ambigmsg` is nil, do not raise a `LookupAmbigError`, and return the list
|
250
282
|
of possible results.
|
251
283
|
|
252
|
-
Author
|
253
|
-
------
|
284
|
+
# Author
|
254
285
|
|
255
286
|
Alan K. Stebbens <aks@stebbens.org>
|
data/Rakefile
CHANGED
@@ -32,11 +32,11 @@ Rake::TestTask.new(:test) do |test|
|
|
32
32
|
test.verbose = true
|
33
33
|
end
|
34
34
|
|
35
|
-
desc "Code coverage detail"
|
36
|
-
task :simplecov do
|
37
|
-
ENV['COVERAGE'] = "true"
|
38
|
-
Rake::Task['test'].execute
|
39
|
-
end
|
35
|
+
#desc "Code coverage detail"
|
36
|
+
#task :simplecov do
|
37
|
+
# ENV['COVERAGE'] = "true"
|
38
|
+
# Rake::Task['test'].execute
|
39
|
+
#end
|
40
40
|
|
41
41
|
task :default => :test
|
42
42
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.2.0
|
data/cmd-utils.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: cmd-utils 1.
|
5
|
+
# stub: cmd-utils 1.2.0 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "cmd-utils"
|
9
|
-
s.version = "1.
|
9
|
+
s.version = "1.2.0"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib"]
|
13
13
|
s.authors = ["Alan K. Stebbens"]
|
14
|
-
s.date = "2014-
|
14
|
+
s.date = "2014-06-25"
|
15
15
|
s.description = "Several ruby libraries for building command-line utilities."
|
16
16
|
s.email = "aks@stebbens.org"
|
17
17
|
s.extra_rdoc_files = [
|
@@ -27,13 +27,17 @@ Gem::Specification.new do |s|
|
|
27
27
|
"Rakefile",
|
28
28
|
"VERSION",
|
29
29
|
"cmd-utils.gemspec",
|
30
|
+
"lib/arg-utils.rb",
|
30
31
|
"lib/cmd-utils.rb",
|
32
|
+
"lib/error-utils.rb",
|
31
33
|
"lib/lookup.rb",
|
34
|
+
"lib/run-utils.rb",
|
32
35
|
"lib/ssh-utils.rb",
|
36
|
+
"lib/talk-utils.rb",
|
33
37
|
"test/helper.rb",
|
34
|
-
"test/test-cmd-utils.rb",
|
35
38
|
"test/test-lookup.rb",
|
36
|
-
"test/
|
39
|
+
"test/test-run-utils.rb",
|
40
|
+
"test/test-talk-utils.rb"
|
37
41
|
]
|
38
42
|
s.homepage = "http://bitbucket.org/aks_/cmd-utils"
|
39
43
|
s.licenses = ["MIT"]
|
@@ -44,24 +48,21 @@ Gem::Specification.new do |s|
|
|
44
48
|
s.specification_version = 4
|
45
49
|
|
46
50
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
47
|
-
s.add_development_dependency(%q<minitest>, ["
|
48
|
-
s.add_development_dependency(%q<rdoc>, ["
|
49
|
-
s.add_development_dependency(%q<bundler>, ["
|
50
|
-
s.add_development_dependency(%q<jeweler>, ["
|
51
|
-
s.add_development_dependency(%q<simplecov>, [">= 0"])
|
51
|
+
s.add_development_dependency(%q<minitest>, ["~> 5.3"])
|
52
|
+
s.add_development_dependency(%q<rdoc>, ["~> 4.1"])
|
53
|
+
s.add_development_dependency(%q<bundler>, ["~> 1.0"])
|
54
|
+
s.add_development_dependency(%q<jeweler>, ["~> 2.0"])
|
52
55
|
else
|
53
|
-
s.add_dependency(%q<minitest>, ["
|
54
|
-
s.add_dependency(%q<rdoc>, ["
|
55
|
-
s.add_dependency(%q<bundler>, ["
|
56
|
-
s.add_dependency(%q<jeweler>, ["
|
57
|
-
s.add_dependency(%q<simplecov>, [">= 0"])
|
56
|
+
s.add_dependency(%q<minitest>, ["~> 5.3"])
|
57
|
+
s.add_dependency(%q<rdoc>, ["~> 4.1"])
|
58
|
+
s.add_dependency(%q<bundler>, ["~> 1.0"])
|
59
|
+
s.add_dependency(%q<jeweler>, ["~> 2.0"])
|
58
60
|
end
|
59
61
|
else
|
60
|
-
s.add_dependency(%q<minitest>, ["
|
61
|
-
s.add_dependency(%q<rdoc>, ["
|
62
|
-
s.add_dependency(%q<bundler>, ["
|
63
|
-
s.add_dependency(%q<jeweler>, ["
|
64
|
-
s.add_dependency(%q<simplecov>, [">= 0"])
|
62
|
+
s.add_dependency(%q<minitest>, ["~> 5.3"])
|
63
|
+
s.add_dependency(%q<rdoc>, ["~> 4.1"])
|
64
|
+
s.add_dependency(%q<bundler>, ["~> 1.0"])
|
65
|
+
s.add_dependency(%q<jeweler>, ["~> 2.0"])
|
65
66
|
end
|
66
67
|
end
|
67
68
|
|
data/lib/arg-utils.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
# arg-utils.rb -- simple methods for managing variable argument lists
|
2
|
+
#
|
3
|
+
# Alan K. Stebbens <aks@stebbens.org>
|
4
|
+
#
|
5
|
+
#
|
6
|
+
# require 'arg-utils'
|
7
|
+
#
|
8
|
+
# defines two methods:
|
9
|
+
#
|
10
|
+
# _msgargs(args, block_given?) { yield }
|
11
|
+
# _fmtargs(args, block_given?) { yield }
|
12
|
+
#
|
13
|
+
# These two functions can be used to pass a variable list of arguments
|
14
|
+
# to a function accepting such, including possibly using a BLOCK to
|
15
|
+
# produce some (or all) of the values.
|
16
|
+
#
|
17
|
+
# Example:
|
18
|
+
#
|
19
|
+
# def dtalkf(*args) {
|
20
|
+
# if $debug
|
21
|
+
# $stderr.printf(*_fmtargs(args, block_given?) { yield })
|
22
|
+
# end
|
23
|
+
# }
|
24
|
+
#
|
25
|
+
# The arguments pass to `printf` will come from either the arguments
|
26
|
+
# passed to `dtalkf` or the BLOCK given on the call to `dtalkf`.
|
27
|
+
#
|
28
|
+
|
29
|
+
####
|
30
|
+
# _msgargs(args, block_given?) { yield }
|
31
|
+
#
|
32
|
+
# merge args with any block results
|
33
|
+
|
34
|
+
def _msgargs args, flag
|
35
|
+
args.concat([yield].flatten) if flag
|
36
|
+
args
|
37
|
+
end
|
38
|
+
|
39
|
+
####
|
40
|
+
# _fmtargs(args, block_given?) { yield }
|
41
|
+
#
|
42
|
+
# merge args with any block results
|
43
|
+
# provide default format string if only one argument
|
44
|
+
|
45
|
+
def _fmtargs args, flag
|
46
|
+
args.concat([yield].flatten) if flag
|
47
|
+
args.unshift('%s') if args.size < 2
|
48
|
+
args
|
49
|
+
end
|
50
|
+
|
51
|
+
# end of arg-utils.sh
|
52
|
+
# vim: set ai sw=2
|
data/lib/cmd-utils.rb
CHANGED
@@ -1,279 +1,17 @@
|
|
1
|
-
# cmd-utils.rb --
|
1
|
+
# cmd-utils.rb -- a collection of utilities for ruby command line tools
|
2
2
|
#
|
3
3
|
# Alan K. Stebbens <aks@stebbens.org>
|
4
4
|
#
|
5
|
-
#
|
6
5
|
# require 'cmd-utils'
|
7
6
|
#
|
8
|
-
#
|
9
|
-
#
|
10
|
-
# The output and run methods rely on some external variables:
|
11
|
-
#
|
12
|
-
# $verbose -- enables vtalk(f) output
|
13
|
-
# $norun -- enables nrtalk(f) output and controls the "run" command
|
14
|
-
# $quiet -- enables qtalk(f) output, and disables talk(f) output
|
15
|
-
# $debug -- enables dtalk(f) output
|
16
|
-
#
|
17
|
-
# These routines provide conditional output. The arguments can be given as
|
18
|
-
# part of the the function calls, or, can be provided as the return value of a
|
19
|
-
# block. The advantage of using a block is that the block is not evaluated
|
20
|
-
# unless the conditions requiring output are met. So, if the expression to
|
21
|
-
# compute a value that _might_ be printed is expensive, do the computation
|
22
|
-
# inside a block.
|
23
|
-
#
|
24
|
-
##
|
25
|
-
# talk - Print msg on STDERR unless `$quiet` is set
|
26
|
-
#
|
27
|
-
# :call-seq:
|
28
|
-
# talk msg ..
|
29
|
-
# talk { msg .. }
|
30
|
-
# talkf fmt, args ...
|
31
|
-
# talkf fmt { [ args ... ] }
|
32
|
-
|
33
|
-
def talk *args
|
34
|
-
if !$quiet && (args.size > 0 || block_given?)
|
35
|
-
$stderr.puts(*_msgargs(args, block_given?) { yield })
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def talkf *args
|
40
|
-
if !$quiet && (args.size > 0 || block_given?)
|
41
|
-
$stderr.printf(*_fmtargs(args, block_given?) { yield } )
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
# _msgargs(args, block_given?) { yield }
|
46
|
-
#
|
47
|
-
# merge args with any block results
|
48
|
-
|
49
|
-
def _msgargs args, flag
|
50
|
-
args.concat([yield].flatten) if flag
|
51
|
-
args
|
52
|
-
end
|
53
|
-
|
54
|
-
# _fmtargs(args, block_given?) { yield }
|
55
|
-
#
|
56
|
-
# merge args with any block results
|
57
|
-
# provide default format string if only one argument
|
58
|
-
|
59
|
-
def _fmtargs args, flag
|
60
|
-
args.concat([yield].flatten) if flag
|
61
|
-
args.unshift('%s') if args.size < 2
|
62
|
-
args
|
63
|
-
end
|
64
|
-
|
65
|
-
##
|
66
|
-
# dtalk - "debug talk"
|
67
|
-
# Print msg on STDERR only if `$debug` is set
|
68
|
-
#
|
69
|
-
# :call-seq:
|
70
|
-
# dtalk msg
|
71
|
-
# dtalk { msg }
|
72
|
-
# dtalkf fmt, args ..
|
73
|
-
# dtalkf fmt { [ args .. ] }
|
74
|
-
|
75
|
-
def dtalk *args
|
76
|
-
if $debug && (args.size > 0 || block_given?)
|
77
|
-
$stderr.puts(*_msgargs(args, block_given?) { yield })
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
def dtalkf *args
|
82
|
-
if $debug && (args.size> 0 || block_given?)
|
83
|
-
$stderr.printf(*_fmtargs(args, block_given?) { yield })
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
##
|
88
|
-
# qtalk - "quiet talk"
|
89
|
-
# print msg on STDERR only if `$quiet` is set
|
90
|
-
#
|
91
|
-
# :call-seq:
|
92
|
-
# qtalk msg
|
93
|
-
# qtalk { msg }
|
94
|
-
# qtalkf fmt, args ..
|
95
|
-
# qtalkf fmt { [ args .. ] }
|
96
|
-
|
97
|
-
def qtalk *args
|
98
|
-
if $quiet && (args.size > 0 || block_given?)
|
99
|
-
$stderr.puts(*_msgargs(args, block_given?) { yield })
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
def qtalkf *args
|
104
|
-
if $quiet && (args.size > 0 || block_given?)
|
105
|
-
$stderr.printf(*_fmtargs(args, block_given?) { yield } )
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
##
|
110
|
-
# vtalk - "verbose talk"
|
111
|
-
# Print msg on STDERR if `$verbose` is set
|
112
|
-
#
|
113
|
-
# :call-seq:
|
114
|
-
# vtalk msg
|
115
|
-
# vtalk { msg }
|
116
|
-
# vtalkf fmt, args ..
|
117
|
-
# vtalkf fmt { args .. }
|
118
|
-
|
119
|
-
def vtalk *args
|
120
|
-
if $verbose && (args.size > 0 || block_given?)
|
121
|
-
$stderr.puts(*_msgargs(args, block_given?) { yield })
|
122
|
-
end
|
123
|
-
end
|
124
|
-
|
125
|
-
def vtalkf *args
|
126
|
-
if $verbose && (args.size > 0 || block_given?)
|
127
|
-
$stderr.printf(*_fmtargs(args, block_given?) { yield } )
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
##
|
132
|
-
# nvtalk -- "non-verbose" talk
|
133
|
-
# Print msg on STDERR unless `$verbose` is set
|
134
|
-
#
|
135
|
-
# :call-seq:
|
136
|
-
# nvtalk msg
|
137
|
-
# nvtalk { msg }
|
138
|
-
|
139
|
-
def nvtalk *args
|
140
|
-
unless $verbose && (args.size > 0 || block_given?)
|
141
|
-
$stderr.puts(*_msgargs(args, block_given?) { yield })
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
|
-
def nvtalkf *args
|
146
|
-
unless $verbose && (args.size > 0 || block_given?)
|
147
|
-
$stderr.printf(*_fmtargs(args, block_given?) { yield } )
|
148
|
-
end
|
149
|
-
end
|
150
|
-
|
151
|
-
##
|
152
|
-
# nrtalk -- "no run" talk
|
153
|
-
# Print msg, prefixed with "(norun) ", on STDERR only if `$norun` is set
|
154
|
-
#
|
155
|
-
# :call-seq:
|
156
|
-
# nrtalk msg
|
157
|
-
# nrtalk { msg }
|
158
|
-
# nrtalkf fmt, msg
|
159
|
-
# nrtalkf fmt { msg }
|
160
|
-
|
161
|
-
def nrtalk *args
|
162
|
-
if $norun && (args.size > 0 || block_given?)
|
163
|
-
newargs = _msgargs(args, block_given?) { yield }
|
164
|
-
newargs[0] = '(norun) ' + newargs[0] unless newargs.size == 0 || newargs[0].nil? || newargs[0].include?('(norun)')
|
165
|
-
$stderr.puts(*newargs)
|
166
|
-
end
|
167
|
-
end
|
168
|
-
|
169
|
-
def nrtalkf *args
|
170
|
-
if $norun && (args.size > 0 || block_given?)
|
171
|
-
newargs = _fmtargs(args, block_given?) { yield }
|
172
|
-
newargs[0] = '(norun) ' + newargs[0] unless newargs.size == 0 || newargs[0].nil? || newargs[0].include?('(norun)')
|
173
|
-
$stderr.printf(*newargs)
|
174
|
-
end
|
175
|
-
end
|
176
|
-
|
177
|
-
##
|
178
|
-
# error -- print an error message on STDERR, and then exit.
|
179
|
-
# :call-seq:
|
180
|
-
# error [code], msg
|
181
|
-
# error( [code]) { msg }
|
182
|
-
# error {[[code], msg ] }
|
183
|
-
#
|
184
|
-
# Code defaults to 1 if not given.
|
185
|
-
|
186
|
-
def error *args
|
187
|
-
args = _msgargs(args, block_given?) { yield }
|
188
|
-
code = args.size > 0 && args[0].class == Fixnum ? args.shift : 1
|
189
|
-
$stderr.puts(*args)
|
190
|
-
$stderr.flush
|
191
|
-
exit code
|
192
|
-
end
|
193
|
-
|
194
|
-
##
|
195
|
-
# errorf -- print a formatted message on STDERR, and then exit
|
196
|
-
#
|
197
|
-
# :call-seq:
|
198
|
-
# errorf [code], fmt, args ..
|
199
|
-
# errorf( [code], fmt) { args .. }
|
200
|
-
# errorf( [code]) { fmt, args .. }
|
201
|
-
# errorf {[[code], fmt, args .. ] }
|
202
|
-
|
203
|
-
def errorf *args
|
204
|
-
args = _fmtargs(args, block_given?) { yield }
|
205
|
-
# default the error code to 1 unless the first argument is a Fixnum
|
206
|
-
code = args.size > 0 && args[0].class == Fixnum ? args.shift : 1
|
207
|
-
$stderr.printf(*args)
|
208
|
-
$stderr.flush
|
209
|
-
exit code
|
210
|
-
end
|
211
|
-
|
212
|
-
##
|
213
|
-
# run -- run a command with support for testing, diagnostics and verbosity
|
214
|
-
# safe_run -- run a command with support for diagnostics and verbosity
|
215
|
-
#
|
216
|
-
# Both may be given optional `errmsg` and `okmsg`, which are printed if given
|
217
|
-
# for the corresponding condition.
|
218
|
-
#
|
219
|
-
# :call-seq:
|
220
|
-
# run cmd
|
221
|
-
# run { cmd }
|
222
|
-
# run cmd, errmsg
|
223
|
-
# run { [cmd, errmsg] }
|
224
|
-
# run { [cmd, errmsg, okmg] }
|
225
|
-
# run cmd, errmsg, okmsg
|
226
|
-
#
|
227
|
-
# safe_run cmd
|
228
|
-
# safe_run cmd, errmsg
|
229
|
-
# safe_run cmd, errmsg, okmsg
|
230
|
-
# safe_run { cmd }
|
231
|
-
# safe_run { [cmd, errmsg] }
|
232
|
-
# safe_run { [cmd, errmsg, okmsg] }
|
233
|
-
#
|
234
|
-
# if `$norun` is set, print `(norun) ` followed by `cmd` on `STDERR`, and
|
235
|
-
# return.
|
236
|
-
#
|
237
|
-
# if `$verbose` is set, print `>> ` followed by `cmd` on `STDERR`.
|
238
|
-
#
|
239
|
-
# Invoke the `cmd` with the `system()` call.
|
240
|
-
#
|
241
|
-
# If there is an error, show the command (preceded by `>> `) if `$verbose` is
|
242
|
-
# not set, then show the error code, followed by the given `errmsg` or the
|
243
|
-
# default error message.
|
244
|
-
#
|
245
|
-
# The `cmd` can be given either as an argument, or as the returned value from a
|
246
|
-
# block. Important: the block should return a string value to be passed to
|
247
|
-
# the system call.
|
248
|
-
|
249
|
-
def cmd_run *args
|
250
|
-
args = _msgargs(args, block_given?) { yield }
|
251
|
-
if $norun
|
252
|
-
nrtalk(args.first)
|
253
|
-
elsif args.size > 0
|
254
|
-
safe_run *args
|
255
|
-
end
|
256
|
-
end
|
257
|
-
|
258
|
-
alias run cmd_run
|
7
|
+
# This brings in several related utilities.
|
259
8
|
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
$stderr.puts okmsg if okmsg
|
267
|
-
return true
|
268
|
-
else # an error occured
|
269
|
-
qtalkf ">> %s\n", cmd
|
270
|
-
erm = sprintf(errmsg ? errmsg : "Command failed with code %d", $?>>8)
|
271
|
-
$stderr.puts erm
|
272
|
-
$stderr.flush
|
273
|
-
raise SystemCallError, erm # instead of exit, use raise
|
274
|
-
end
|
275
|
-
end
|
276
|
-
end
|
9
|
+
require 'arg-utils'
|
10
|
+
require 'talk-utils'
|
11
|
+
require 'error-utils'
|
12
|
+
require 'lookup'
|
13
|
+
require 'run-utils'
|
14
|
+
require 'ssh-utils'
|
277
15
|
|
278
16
|
# end of cmd-utils.sh
|
279
17
|
# vim: set ai sw=2
|