Handle --nofoo like --no-foo in parse_options.sh and update the Bash tools.

This commit is contained in:
Daniel Nichter
2012-07-21 11:57:53 -06:00
parent e1b39b3d5f
commit 487d14228b
6 changed files with 80 additions and 27 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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.

View File

@@ -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.
# ############################################################################