bashly 0.9.0 → 0.9.2
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/README.md +1 -4
- data/lib/bashly/commands/add.rb +5 -2
- data/lib/bashly/commands/generate.rb +2 -1
- data/lib/bashly/config_validator.rb +7 -5
- data/lib/bashly/libraries/completions_function.rb +1 -1
- data/lib/bashly/libraries/help.rb +1 -1
- data/lib/bashly/libraries.yml +8 -8
- data/lib/bashly/library.rb +1 -0
- data/lib/bashly/script/command.rb +2 -2
- data/lib/bashly/script/wrapper.rb +1 -1
- data/lib/bashly/settings.rb +26 -22
- data/lib/bashly/templates/settings.yml +3 -0
- data/lib/bashly/version.rb +1 -1
- data/lib/bashly/views/command/command_fallback.gtx +10 -5
- data/lib/bashly/views/command/command_filter.gtx +1 -2
- data/lib/bashly/views/command/default_assignments.gtx +2 -2
- data/lib/bashly/views/command/dependencies_filter.gtx +1 -2
- data/lib/bashly/views/command/fixed_flags_filter.gtx +2 -2
- data/lib/bashly/views/command/parse_requirements_case_catch_all.gtx +2 -2
- data/lib/bashly/views/command/parse_requirements_case_repeatable.gtx +5 -6
- data/lib/bashly/views/command/parse_requirements_case_simple.gtx +2 -2
- data/lib/bashly/views/command/required_args_filter.gtx +1 -1
- data/lib/bashly/views/command/required_flags_filter.gtx +1 -1
- data/lib/bashly/views/command/run.gtx +6 -4
- data/lib/bashly/views/command/whitelist_filter.gtx +2 -2
- data/lib/bashly/views/flag/case_arg.gtx +4 -4
- data/lib/bashly/views/flag/case_no_arg.gtx +2 -2
- data/lib/bashly/views/flag/conflicts.gtx +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ebf951958bb0478fb95b88273b87ccb2f297d36b655996b79d16c2ffdb32e773
|
4
|
+
data.tar.gz: aa3a9c218e9876fea287f141191baa4d95b40ae8b5569a7418c40911373e43ef
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 468d632281f56529a13770dce48d3bfbfc19433f2d32f52c0741b0d3c3ff80b15ad78b1936897e451d341f74b0d68ed6e5dd753ed4ed155984890b97ef8fbcf9
|
7
|
+
data.tar.gz: 4af3052a3d4b66b647bb461b6300eae17f72cfa61ef419f917fc6a23b881cb0af11dfb37d04628b2afedbf99f080ab04e2a5104d90d4ce148a01ceda1c2c2816
|
data/README.md
CHANGED
@@ -27,7 +27,6 @@ usually handled by a framework in any other programming language.
|
|
27
27
|
It is available both as a [ruby gem](https://rubygems.org/gems/bashly) and as
|
28
28
|
a [docker image](https://hub.docker.com/r/dannyben/bashly).
|
29
29
|
|
30
|
-
|
31
30
|
## Documentation
|
32
31
|
|
33
32
|
- [Bashly Homepage][docs]
|
@@ -49,6 +48,7 @@ a [docker image](https://hub.docker.com/r/dannyben/bashly).
|
|
49
48
|
Bashly is responsible for:
|
50
49
|
|
51
50
|
- Generating a **single, standalone bash script**.
|
51
|
+
- Generating a **human readable, shellcheck-compliant and shfmt-compliant script**.
|
52
52
|
- Generating **usage texts** and help screens, showing your tool's arguments, flags and commands (works for sub-commands also).
|
53
53
|
- Parsing the user's command line and extracting:
|
54
54
|
- Optional or required **positional arguments**.
|
@@ -72,15 +72,12 @@ to contribute, feel free to [open an issue][issues] or
|
|
72
72
|
|
73
73
|
Visit the *[How to contribute][contributing]* page for more information.
|
74
74
|
|
75
|
-
|
76
75
|
## Stargazers and Forkers
|
77
76
|
|
78
77
|
[](https://github.com/DannyBen/bashly/stargazers)
|
79
78
|
|
80
79
|
[](https://github.com/DannyBen/bashly/network/members)
|
81
80
|
|
82
|
-
|
83
|
-
|
84
81
|
[issues]: https://github.com/DannyBen/bashly/issues
|
85
82
|
[discussions]: https://github.com/DannyBen/bashly/discussions
|
86
83
|
[docs]: https://bashly.dannyb.co/
|
data/lib/bashly/commands/add.rb
CHANGED
@@ -34,8 +34,11 @@ module Bashly
|
|
34
34
|
command 'comp', 'Generate a bash completions script or function.'
|
35
35
|
command 'config', 'Add standard functions for handling INI files to the lib directory.'
|
36
36
|
command 'help', 'Add a help command, in addition to the standard --help flag.'
|
37
|
-
command 'lib',
|
38
|
-
|
37
|
+
command 'lib', <<~USAGE
|
38
|
+
Create the lib directory for any additional user scripts.
|
39
|
+
All *.sh scripts in this directory will be included in the final bash script.
|
40
|
+
Note that if you configured a different partials_extension, then the extensions of the files in this directory need to match.
|
41
|
+
USAGE
|
39
42
|
|
40
43
|
command 'settings', 'Copy a sample settings.yml file to your project, allowing you to customize some ' \
|
41
44
|
'bashly options.'
|
@@ -130,7 +130,8 @@ module Bashly
|
|
130
130
|
def create_user_files
|
131
131
|
quiet_say "creating user files in !txtgrn!#{Settings.source_dir}"
|
132
132
|
|
133
|
-
create_file "#{Settings.source_dir}/initialize.
|
133
|
+
create_file "#{Settings.source_dir}/initialize.#{Settings.partials_extension}",
|
134
|
+
command.render(:default_initialize_script)
|
134
135
|
|
135
136
|
if command.commands.empty?
|
136
137
|
create_root_command_file
|
@@ -37,6 +37,12 @@ module Bashly
|
|
37
37
|
assert_boolean "#{key}.required", value['required']
|
38
38
|
end
|
39
39
|
|
40
|
+
def assert_default_command(key, value)
|
41
|
+
return unless value
|
42
|
+
|
43
|
+
assert [true, false, nil, 'force'].include?(value), "#{key} must be a boolean, or the string 'force'"
|
44
|
+
end
|
45
|
+
|
40
46
|
def assert_dependencies(key, value)
|
41
47
|
return unless value
|
42
48
|
|
@@ -145,7 +151,7 @@ module Bashly
|
|
145
151
|
assert_optional_string "#{key}.function", value['function']
|
146
152
|
|
147
153
|
assert_boolean "#{key}.private", value['private']
|
148
|
-
|
154
|
+
assert_default_command "#{key}.default", value['default']
|
149
155
|
assert_expose "#{key}.expose", value['expose']
|
150
156
|
assert_version "#{key}.version", value['version']
|
151
157
|
assert_catch_all "#{key}.catch_all", value['catch_all']
|
@@ -171,10 +177,6 @@ module Bashly
|
|
171
177
|
"#{key}.function must contain lowercase alphanumeric characters and underscores only"
|
172
178
|
end
|
173
179
|
|
174
|
-
if value['default']
|
175
|
-
assert value['args'], "#{key}.default makes no sense without args"
|
176
|
-
end
|
177
|
-
|
178
180
|
if value['catch_all'] && value['args']
|
179
181
|
repeatable_arg = value['args'].find { |a| a['repeatable'] }&.dig 'name'
|
180
182
|
refute repeatable_arg, "#{key}.catch_all makes no sense with repeatable arg (#{repeatable_arg})"
|
data/lib/bashly/libraries.yml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
colors:
|
2
2
|
files:
|
3
3
|
- source: "templates/lib/colors.sh"
|
4
|
-
target: "%{user_lib_dir}/colors
|
4
|
+
target: "%{user_lib_dir}/colors.%{user_ext}"
|
5
5
|
|
6
6
|
completions: :CompletionsFunction
|
7
7
|
completions_script: :CompletionsScript
|
@@ -10,14 +10,14 @@ completions_yaml: :CompletionsYAML
|
|
10
10
|
config:
|
11
11
|
files:
|
12
12
|
- source: "templates/lib/config.sh"
|
13
|
-
target: "%{user_lib_dir}/config
|
13
|
+
target: "%{user_lib_dir}/config.%{user_ext}"
|
14
14
|
|
15
15
|
help: :Help
|
16
16
|
|
17
17
|
lib:
|
18
18
|
files:
|
19
19
|
- source: "templates/lib/sample_function.sh"
|
20
|
-
target: "%{user_lib_dir}/sample_function
|
20
|
+
target: "%{user_lib_dir}/sample_function.%{user_ext}"
|
21
21
|
|
22
22
|
settings:
|
23
23
|
files:
|
@@ -46,15 +46,15 @@ test:
|
|
46
46
|
validations:
|
47
47
|
files:
|
48
48
|
- source: "templates/lib/validations/validate_dir_exists.sh"
|
49
|
-
target: "%{user_lib_dir}/validations/validate_dir_exists
|
49
|
+
target: "%{user_lib_dir}/validations/validate_dir_exists.%{user_ext}"
|
50
50
|
- source: "templates/lib/validations/validate_file_exists.sh"
|
51
|
-
target: "%{user_lib_dir}/validations/validate_file_exists
|
51
|
+
target: "%{user_lib_dir}/validations/validate_file_exists.%{user_ext}"
|
52
52
|
- source: "templates/lib/validations/validate_integer.sh"
|
53
|
-
target: "%{user_lib_dir}/validations/validate_integer
|
53
|
+
target: "%{user_lib_dir}/validations/validate_integer.%{user_ext}"
|
54
54
|
- source: "templates/lib/validations/validate_not_empty.sh"
|
55
|
-
target: "%{user_lib_dir}/validations/validate_not_empty
|
55
|
+
target: "%{user_lib_dir}/validations/validate_not_empty.%{user_ext}"
|
56
56
|
|
57
57
|
yaml:
|
58
58
|
files:
|
59
59
|
- source: "templates/lib/yaml.sh"
|
60
|
-
target: "%{user_lib_dir}/yaml
|
60
|
+
target: "%{user_lib_dir}/yaml.%{user_ext}"
|
data/lib/bashly/library.rb
CHANGED
@@ -156,7 +156,7 @@ module Bashly
|
|
156
156
|
# Returns the bash filename that is expected to hold the user code
|
157
157
|
# for this command
|
158
158
|
def filename
|
159
|
-
options['filename'] || "#{action_name.to_underscore}_command.
|
159
|
+
options['filename'] || "#{action_name.to_underscore}_command.#{Settings.partials_extension}"
|
160
160
|
end
|
161
161
|
|
162
162
|
# Returns an array of Flags
|
@@ -281,7 +281,7 @@ module Bashly
|
|
281
281
|
# This is meant to provide the user with the ability to add custom
|
282
282
|
# functions
|
283
283
|
def user_lib
|
284
|
-
@user_lib ||= Dir["#{Settings.full_lib_dir}
|
284
|
+
@user_lib ||= Dir["#{Settings.full_lib_dir}/**/*.#{Settings.partials_extension}"].sort
|
285
285
|
end
|
286
286
|
|
287
287
|
# Returns an array of all the args with a whitelist
|
data/lib/bashly/settings.rb
CHANGED
@@ -3,47 +3,51 @@ module Bashly
|
|
3
3
|
class << self
|
4
4
|
include AssetHelper
|
5
5
|
|
6
|
-
attr_writer :compact_short_flags, :
|
7
|
-
:
|
6
|
+
attr_writer :compact_short_flags, :lib_dir, :partials_extension,
|
7
|
+
:source_dir, :strict, :tab_indent, :target_dir
|
8
8
|
|
9
|
-
def
|
10
|
-
@
|
9
|
+
def compact_short_flags
|
10
|
+
@compact_short_flags ||= get :compact_short_flags
|
11
11
|
end
|
12
12
|
|
13
|
-
def
|
14
|
-
@
|
13
|
+
def env
|
14
|
+
@env ||= get(:env)&.to_sym
|
15
15
|
end
|
16
16
|
|
17
|
-
def
|
18
|
-
@
|
17
|
+
def env=(value)
|
18
|
+
@env = value&.to_sym
|
19
19
|
end
|
20
20
|
|
21
|
-
def
|
22
|
-
|
21
|
+
def full_lib_dir
|
22
|
+
"#{source_dir}/#{lib_dir}"
|
23
23
|
end
|
24
24
|
|
25
|
-
def
|
26
|
-
@
|
25
|
+
def lib_dir
|
26
|
+
@lib_dir ||= get :lib_dir
|
27
27
|
end
|
28
28
|
|
29
|
-
def
|
30
|
-
@
|
29
|
+
def partials_extension
|
30
|
+
@partials_extension ||= get :partials_extension
|
31
31
|
end
|
32
32
|
|
33
|
-
def
|
34
|
-
|
33
|
+
def production?
|
34
|
+
env == :production
|
35
35
|
end
|
36
36
|
|
37
|
-
def
|
38
|
-
@
|
37
|
+
def source_dir
|
38
|
+
@source_dir ||= get :source_dir
|
39
39
|
end
|
40
40
|
|
41
|
-
def
|
42
|
-
|
41
|
+
def strict
|
42
|
+
@strict ||= get :strict
|
43
43
|
end
|
44
44
|
|
45
|
-
def
|
46
|
-
|
45
|
+
def tab_indent
|
46
|
+
@tab_indent ||= get :tab_indent
|
47
|
+
end
|
48
|
+
|
49
|
+
def target_dir
|
50
|
+
@target_dir ||= get :target_dir
|
47
51
|
end
|
48
52
|
|
49
53
|
private
|
data/lib/bashly/version.rb
CHANGED
@@ -1,10 +1,13 @@
|
|
1
1
|
= view_marker
|
2
2
|
|
3
|
-
|
4
|
-
>
|
5
|
-
>
|
6
|
-
>
|
7
|
-
>
|
3
|
+
if !default_command || default_command.default != 'force'
|
4
|
+
> "")
|
5
|
+
> {{ function_name }}_usage >&2
|
6
|
+
> exit 1
|
7
|
+
> ;;
|
8
|
+
>
|
9
|
+
end
|
10
|
+
|
8
11
|
> *)
|
9
12
|
|
10
13
|
if default_command
|
@@ -21,6 +24,7 @@ elsif extensible.is_a? String
|
|
21
24
|
> printf "{{ strings[:invalid_command] }}\n" "$action" >&2
|
22
25
|
> exit 1
|
23
26
|
> fi
|
27
|
+
> ;;
|
24
28
|
>
|
25
29
|
|
26
30
|
elsif extensible
|
@@ -31,6 +35,7 @@ elsif extensible
|
|
31
35
|
> printf "{{ strings[:invalid_command] }}\n" "$action" >&2
|
32
36
|
> exit 1
|
33
37
|
> fi
|
38
|
+
> ;;
|
34
39
|
>
|
35
40
|
|
36
41
|
else
|
@@ -2,11 +2,11 @@ if default_args.any? or default_flags.any?
|
|
2
2
|
= view_marker
|
3
3
|
|
4
4
|
default_args.each do |arg|
|
5
|
-
> [[ -n ${args[{{ arg.name }}]:-} ]] || args[{{ arg.name }}]="{{ arg.default }}"
|
5
|
+
> [[ -n ${args['{{ arg.name }}']:-} ]] || args['{{ arg.name }}']="{{ arg.default }}"
|
6
6
|
end
|
7
7
|
|
8
8
|
default_flags.each do |flag|
|
9
|
-
> [[ -n ${args[{{ flag.long }}]:-} ]] || args[{{ flag.long }}]="{{ flag.default }}"
|
9
|
+
> [[ -n ${args['{{ flag.long }}']:-} ]] || args['{{ flag.long }}']="{{ flag.default }}"
|
10
10
|
end
|
11
11
|
|
12
12
|
>
|
@@ -5,8 +5,7 @@ if dependencies
|
|
5
5
|
> if ! command -v {{ dependency }} >/dev/null 2>&1; then
|
6
6
|
> printf "{{ strings[:missing_dependency] % { dependency: dependency } }}\n" >&2
|
7
7
|
if message and !message.empty?
|
8
|
-
>
|
9
|
-
> printf "{{ message }}\n" >&2
|
8
|
+
> printf "%s\n" "{{ message }}" >&2
|
10
9
|
end
|
11
10
|
> exit 1
|
12
11
|
> fi
|
@@ -4,14 +4,14 @@
|
|
4
4
|
> case "${1:-}" in
|
5
5
|
|
6
6
|
if root_command?
|
7
|
-
= short_flag_exist?("-v") ? "--version)" : "--version | -v)".indent(4)
|
7
|
+
= (short_flag_exist?("-v") ? "--version)" : "--version | -v)").indent(4)
|
8
8
|
> version_command
|
9
9
|
> exit
|
10
10
|
> ;;
|
11
11
|
>
|
12
12
|
end
|
13
13
|
|
14
|
-
= short_flag_exist?("-h") ? "--help)" : "--help | -h)".indent(4)
|
14
|
+
= (short_flag_exist?("-h") ? "--help)" : "--help | -h)").indent(4)
|
15
15
|
> long_usage=yes
|
16
16
|
> <%= function_name %>_usage
|
17
17
|
> exit
|
@@ -3,9 +3,9 @@
|
|
3
3
|
if args.any?
|
4
4
|
condition = "if"
|
5
5
|
args.each do |arg|
|
6
|
-
> {{ condition }} [[ -z ${args[{{ arg.name }}]+x} ]]; then
|
6
|
+
> {{ condition }} [[ -z ${args['{{ arg.name }}']+x} ]]; then
|
7
7
|
= arg.render(:validations).indent 2
|
8
|
-
> args[{{ arg.name }}]=$1
|
8
|
+
> args['{{ arg.name }}']=$1
|
9
9
|
> shift
|
10
10
|
|
11
11
|
condition = "elif"
|
@@ -2,18 +2,17 @@
|
|
2
2
|
|
3
3
|
condition = "if"
|
4
4
|
args.each do |arg|
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
= arg.render(:validations)
|
6
|
+
> {{ condition }} [[ -z ${args['{{ arg.name }}']+x} ]]; then
|
8
7
|
if arg.repeatable
|
9
|
-
> args[{{ arg.name }}]="\"$1\""
|
8
|
+
> args['{{ arg.name }}']="\"$1\""
|
10
9
|
> shift
|
11
10
|
> else
|
12
|
-
> args[{{ arg.name }}]="${args[{{ arg.name }}]} \"$1\""
|
11
|
+
> args['{{ arg.name }}']="${args[{{ arg.name }}]} \"$1\""
|
13
12
|
> shift
|
14
13
|
|
15
14
|
else
|
16
|
-
> args[{{ arg.name }}]=$1
|
15
|
+
> args['{{ arg.name }}']=$1
|
17
16
|
> shift
|
18
17
|
|
19
18
|
end
|
@@ -3,9 +3,9 @@
|
|
3
3
|
if args.any?
|
4
4
|
condition = "if"
|
5
5
|
args.each do |arg|
|
6
|
-
> {{ condition }} [[ -z ${args[{{ arg.name }}]+x} ]]; then
|
6
|
+
> {{ condition }} [[ -z ${args['{{ arg.name }}']+x} ]]; then
|
7
7
|
> {{ arg.render(:validations).indent 2 }}
|
8
|
-
> args[{{ arg.name }}]=$1
|
8
|
+
> args['{{ arg.name }}']=$1
|
9
9
|
> shift
|
10
10
|
|
11
11
|
condition = "elif"
|
@@ -2,7 +2,7 @@ if required_args.any?
|
|
2
2
|
= view_marker
|
3
3
|
|
4
4
|
required_args.each do |arg|
|
5
|
-
> if [[ -z ${args[{{ arg.name }}]+x} ]]; then
|
5
|
+
> if [[ -z ${args['{{ arg.name }}']+x} ]]; then
|
6
6
|
> printf "{{ strings[:missing_required_argument] % { arg: arg.name.upcase, usage: usage_string } }}\n" >&2
|
7
7
|
> exit 1
|
8
8
|
> fi
|
@@ -2,7 +2,7 @@ if required_flags.any?
|
|
2
2
|
= view_marker
|
3
3
|
|
4
4
|
required_flags.each do |flag|
|
5
|
-
> if [[ -z ${args[{{ flag.long }}]+x} ]]; then
|
5
|
+
> if [[ -z ${args['{{ flag.long }}']+x} ]]; then
|
6
6
|
> printf "{{ strings[:missing_required_flag] % { usage: flag.usage_string } }}\n" >&2
|
7
7
|
> exit 1
|
8
8
|
> fi
|
@@ -11,7 +11,7 @@
|
|
11
11
|
|
12
12
|
deep_commands.each do |command|
|
13
13
|
> "{{ command.action_name }}")
|
14
|
-
> if [[ ${args[--help]:-} ]]; then
|
14
|
+
> if [[ ${args['--help']:-} ]]; then
|
15
15
|
> long_usage=yes
|
16
16
|
> {{ command.function_name }}_usage
|
17
17
|
> else
|
@@ -21,9 +21,11 @@ deep_commands.each do |command|
|
|
21
21
|
>
|
22
22
|
end
|
23
23
|
|
24
|
-
|
25
|
-
>
|
26
|
-
>
|
24
|
+
if commands.empty?
|
25
|
+
> "root")
|
26
|
+
> root_command
|
27
|
+
> ;;
|
28
|
+
end
|
27
29
|
>
|
28
30
|
> esac
|
29
31
|
> }
|
@@ -12,7 +12,7 @@ if whitelisted_args.any? or whitelisted_flags.any?
|
|
12
12
|
> done
|
13
13
|
|
14
14
|
else
|
15
|
-
> if [[ ! ${args[{{ arg.name }}]} =~ ^({{ arg.allowed.join '|' }})$ ]]; then
|
15
|
+
> if [[ ! ${args['{{ arg.name }}']} =~ ^({{ arg.allowed.join '|' }})$ ]]; then
|
16
16
|
> printf "%s\n" "{{ strings[:disallowed_argument] % { name: arg.name, allowed: arg.allowed.join(', ') } }}" >&2
|
17
17
|
> exit 1
|
18
18
|
> fi
|
@@ -31,7 +31,7 @@ if whitelisted_args.any? or whitelisted_flags.any?
|
|
31
31
|
> done
|
32
32
|
|
33
33
|
else
|
34
|
-
> if [[ ! ${args[{{ flag.name }}]} =~ ^({{ flag.allowed.join '|' }})$ ]]; then
|
34
|
+
> if [[ ! ${args['{{ flag.name }}']} =~ ^({{ flag.allowed.join '|' }})$ ]]; then
|
35
35
|
> printf "%s\n" "{{ strings[:disallowed_flag] % { name: flag.name, allowed: flag.allowed.join(', ') } }}" >&2
|
36
36
|
> exit 1
|
37
37
|
> fi
|
@@ -4,14 +4,14 @@
|
|
4
4
|
= render(:validations).indent 2
|
5
5
|
|
6
6
|
if repeatable
|
7
|
-
> if [[ -z ${args[{{ name }}]+x} ]]; then
|
8
|
-
> args[{{ name }}]="\"$2\""
|
7
|
+
> if [[ -z ${args['{{ name }}']+x} ]]; then
|
8
|
+
> args['{{ name }}']="\"$2\""
|
9
9
|
> else
|
10
|
-
> args[{{ name }}]="${args[{{ name }}]} \"$2\""
|
10
|
+
> args['{{ name }}']="${args[{{ name }}]} \"$2\""
|
11
11
|
> fi
|
12
12
|
|
13
13
|
else
|
14
|
-
> args[{{ name }}]="$2"
|
14
|
+
> args['{{ name }}']="$2"
|
15
15
|
|
16
16
|
end
|
17
17
|
|
@@ -3,7 +3,7 @@ if conflicts
|
|
3
3
|
= view_marker
|
4
4
|
|
5
5
|
if conflicts.count == 1
|
6
|
-
> if [[ -n "${args[{{ conflicts.first }}]:-}" ]]; then
|
6
|
+
> if [[ -n "${args['{{ conflicts.first }}']:-}" ]]; then
|
7
7
|
> printf "{{ strings[:conflicting_flags] }}\n" "$key" "{{ conflicts.first }}" >&2
|
8
8
|
> exit 1
|
9
9
|
> fi
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bashly
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Danny Ben Shitrit
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-12-
|
11
|
+
date: 2022-12-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: completely
|