mirror of
https://github.com/dlang/phobos.git
synced 2025-04-27 13:40:20 +03:00
fix Issue 15220 - [REG2.065] std.getopt parses -o=value as "=value"
This commit is contained in:
parent
a26d37bd06
commit
3c7c3ecfd6
1 changed files with 22 additions and 0 deletions
22
std/getopt.d
22
std/getopt.d
|
@ -658,6 +658,8 @@ private bool handleOption(R)(string option, R receiver, ref string[] args,
|
|||
// e.g. -j100 to work as "pass argument 100 to option -j".
|
||||
if (!isAlpha(c))
|
||||
{
|
||||
if (c == '=')
|
||||
j++;
|
||||
expanded ~= a[j + 1 .. $];
|
||||
break;
|
||||
}
|
||||
|
@ -931,6 +933,13 @@ private bool optMatch(string arg, string optPattern, ref string value,
|
|||
}
|
||||
else
|
||||
{
|
||||
if (!isLong && eqPos==1)
|
||||
{
|
||||
// argument looks like -o=value
|
||||
value = arg[2 .. $];
|
||||
arg = arg[0 .. 1];
|
||||
}
|
||||
else
|
||||
if (!isLong && !cfg.bundling)
|
||||
{
|
||||
// argument looks like -ovalue and there's no bundling
|
||||
|
@ -1214,6 +1223,7 @@ unittest
|
|||
getopt(args, "t", &foo, "d", &bar);
|
||||
assert(foo == "hello");
|
||||
assert(bar == "bar=baz");
|
||||
|
||||
// From bugzilla 5762
|
||||
string a;
|
||||
args = ["prog", "-a-0x12"];
|
||||
|
@ -1222,11 +1232,23 @@ unittest
|
|||
args = ["prog", "--addr=-0x12"];
|
||||
getopt(args, config.bundling, "a|addr", &a);
|
||||
assert(a == "-0x12");
|
||||
|
||||
// From https://d.puremagic.com/issues/show_bug.cgi?id=11764
|
||||
args = ["main", "-test"];
|
||||
bool opt;
|
||||
args.getopt(config.passThrough, "opt", &opt);
|
||||
assert(args == ["main", "-test"]);
|
||||
|
||||
// From https://issues.dlang.org/show_bug.cgi?id=15220
|
||||
args = ["main", "-o=str"];
|
||||
string o;
|
||||
args.getopt("o", &o);
|
||||
assert(o == "str");
|
||||
|
||||
args = ["main", "-o=str"];
|
||||
o = null;
|
||||
args.getopt(config.bundling, "o", &o);
|
||||
assert(o == "str");
|
||||
}
|
||||
|
||||
unittest // 5228
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue