mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-12-24 02:01:42 +08:00
Handle --nofoo like --no-foo in parse_options.sh and update the Bash tools.
This commit is contained in:
@@ -351,12 +351,20 @@ _parse_command_line() {
|
||||
|
||||
real_opt="$opt"
|
||||
|
||||
if $(echo $opt | grep '^--no-' >/dev/null); then
|
||||
opt_is_negated=1
|
||||
opt=$(echo $opt | sed 's/^--no-//')
|
||||
if $(echo $opt | grep '^--no[^-]' >/dev/null); then
|
||||
local base_opt=$(echo $opt | sed 's/^--no//')
|
||||
if [ -f "$PT_TMPDIR/po/$base_opt" ]; then
|
||||
opt_is_negated=1
|
||||
opt="$base_opt"
|
||||
fi
|
||||
else
|
||||
opt_is_negated=""
|
||||
opt=$(echo $opt | sed 's/^-*//')
|
||||
if $(echo $opt | grep '^--no-' >/dev/null); then
|
||||
opt_is_negated=1
|
||||
opt=$(echo $opt | sed 's/^--no-//')
|
||||
else
|
||||
opt_is_negated=""
|
||||
opt=$(echo $opt | sed 's/^-*//')
|
||||
fi
|
||||
fi
|
||||
|
||||
if $(echo $opt | grep '^[a-z-][a-z-]*=' >/dev/null 2>&1); then
|
||||
|
||||
@@ -353,12 +353,20 @@ _parse_command_line() {
|
||||
|
||||
real_opt="$opt"
|
||||
|
||||
if $(echo $opt | grep '^--no-' >/dev/null); then
|
||||
opt_is_negated=1
|
||||
opt=$(echo $opt | sed 's/^--no-//')
|
||||
if $(echo $opt | grep '^--no[^-]' >/dev/null); then
|
||||
local base_opt=$(echo $opt | sed 's/^--no//')
|
||||
if [ -f "$PT_TMPDIR/po/$base_opt" ]; then
|
||||
opt_is_negated=1
|
||||
opt="$base_opt"
|
||||
fi
|
||||
else
|
||||
opt_is_negated=""
|
||||
opt=$(echo $opt | sed 's/^-*//')
|
||||
if $(echo $opt | grep '^--no-' >/dev/null); then
|
||||
opt_is_negated=1
|
||||
opt=$(echo $opt | sed 's/^--no-//')
|
||||
else
|
||||
opt_is_negated=""
|
||||
opt=$(echo $opt | sed 's/^-*//')
|
||||
fi
|
||||
fi
|
||||
|
||||
if $(echo $opt | grep '^[a-z-][a-z-]*=' >/dev/null 2>&1); then
|
||||
|
||||
18
bin/pt-stalk
18
bin/pt-stalk
@@ -353,12 +353,20 @@ _parse_command_line() {
|
||||
|
||||
real_opt="$opt"
|
||||
|
||||
if $(echo $opt | grep '^--no-' >/dev/null); then
|
||||
opt_is_negated=1
|
||||
opt=$(echo $opt | sed 's/^--no-//')
|
||||
if $(echo $opt | grep '^--no[^-]' >/dev/null); then
|
||||
local base_opt=$(echo $opt | sed 's/^--no//')
|
||||
if [ -f "$PT_TMPDIR/po/$base_opt" ]; then
|
||||
opt_is_negated=1
|
||||
opt="$base_opt"
|
||||
fi
|
||||
else
|
||||
opt_is_negated=""
|
||||
opt=$(echo $opt | sed 's/^-*//')
|
||||
if $(echo $opt | grep '^--no-' >/dev/null); then
|
||||
opt_is_negated=1
|
||||
opt=$(echo $opt | sed 's/^--no-//')
|
||||
else
|
||||
opt_is_negated=""
|
||||
opt=$(echo $opt | sed 's/^-*//')
|
||||
fi
|
||||
fi
|
||||
|
||||
if $(echo $opt | grep '^[a-z-][a-z-]*=' >/dev/null 2>&1); then
|
||||
|
||||
@@ -360,12 +360,20 @@ _parse_command_line() {
|
||||
|
||||
real_opt="$opt"
|
||||
|
||||
if $(echo $opt | grep '^--no-' >/dev/null); then
|
||||
opt_is_negated=1
|
||||
opt=$(echo $opt | sed 's/^--no-//')
|
||||
if $(echo $opt | grep '^--no[^-]' >/dev/null); then
|
||||
local base_opt=$(echo $opt | sed 's/^--no//')
|
||||
if [ -f "$PT_TMPDIR/po/$base_opt" ]; then
|
||||
opt_is_negated=1
|
||||
opt="$base_opt"
|
||||
fi
|
||||
else
|
||||
opt_is_negated=""
|
||||
opt=$(echo $opt | sed 's/^-*//')
|
||||
if $(echo $opt | grep '^--no-' >/dev/null); then
|
||||
opt_is_negated=1
|
||||
opt=$(echo $opt | sed 's/^--no-//')
|
||||
else
|
||||
opt_is_negated=""
|
||||
opt=$(echo $opt | sed 's/^-*//')
|
||||
fi
|
||||
fi
|
||||
|
||||
if $(echo $opt | grep '^[a-z-][a-z-]*=' >/dev/null 2>&1); then
|
||||
|
||||
@@ -415,13 +415,25 @@ _parse_command_line() {
|
||||
# Save real opt from cmd line for error messages.
|
||||
real_opt="$opt"
|
||||
|
||||
# Strip leading -- or --no- from option.
|
||||
if $(echo $opt | grep '^--no-' >/dev/null); then
|
||||
opt_is_negated=1
|
||||
opt=$(echo $opt | sed 's/^--no-//')
|
||||
# Handle the --nofoo variant of --no-foo.
|
||||
if $(echo $opt | grep '^--no[^-]' >/dev/null); then
|
||||
local base_opt=$(echo $opt | sed 's/^--no//')
|
||||
# Only long options can be negated, so if there's no spec file
|
||||
# for the base option name, then we've been fooled: the leading
|
||||
# --no is actually part of the option's real name, like --north.
|
||||
if [ -f "$PT_TMPDIR/po/$base_opt" ]; then
|
||||
opt_is_negated=1
|
||||
opt="$base_opt"
|
||||
fi
|
||||
else
|
||||
opt_is_negated=""
|
||||
opt=$(echo $opt | sed 's/^-*//')
|
||||
# Handle normal cases: --option and --no-option.
|
||||
if $(echo $opt | grep '^--no-' >/dev/null); then
|
||||
opt_is_negated=1
|
||||
opt=$(echo $opt | sed 's/^--no-//')
|
||||
else
|
||||
opt_is_negated=""
|
||||
opt=$(echo $opt | sed 's/^-*//')
|
||||
fi
|
||||
fi
|
||||
|
||||
# Split opt=val pair.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
plan 80
|
||||
plan 81
|
||||
|
||||
TMPFILE="$TEST_PT_TMPDIR/parse-opts-output"
|
||||
TOOL="pt-stalk"
|
||||
@@ -67,6 +67,15 @@ is "$OPT_INT_OPT" "" "Default int option (neg)"
|
||||
is "$OPT_INT_OPT2" "42" "Default int option with default (neg)"
|
||||
is "$OPT_VERSION" "" "--version (neg)"
|
||||
|
||||
# ############################################################################
|
||||
# Negate an option like --nooption.
|
||||
# https://bugs.launchpad.net/percona-toolkit/+bug/954990
|
||||
# ############################################################################
|
||||
|
||||
parse_options "$T_LIB_DIR/samples/bash/po001.sh" --nonoption
|
||||
|
||||
is "$OPT_NOPTION" "" "--nooption negates option like --no-option"
|
||||
|
||||
# ############################################################################
|
||||
# Short form.
|
||||
# ############################################################################
|
||||
|
||||
Reference in New Issue
Block a user