HTRACE-97. Support both -D and --D when specifying conf vars on the command-line (cmccabe)
diff --git a/htrace-core/src/go/src/org/apache/htrace/conf/config.go b/htrace-core/src/go/src/org/apache/htrace/conf/config.go
index 4453c44..f9784c5 100644
--- a/htrace-core/src/go/src/org/apache/htrace/conf/config.go
+++ b/htrace-core/src/go/src/org/apache/htrace/conf/config.go
@@ -115,6 +115,26 @@
return nil, nil
}
+// Try to parse a command-line element as a key=value pair.
+func parseAsConfigFlag(flag string) (string, string) {
+ var confPart string
+ if strings.HasPrefix(flag, "-D") {
+ confPart = flag[2:]
+ } else if strings.HasPrefix(flag, "--D") {
+ confPart = flag[3:]
+ } else {
+ return "", ""
+ }
+ if len(confPart) == 0 {
+ return "", ""
+ }
+ idx := strings.Index(confPart, "=")
+ if idx == -1 {
+ return confPart, "true"
+ }
+ return confPart[0:idx], confPart[idx+1:]
+}
+
// Build a new configuration object from the provided conf.Builder.
func (bld *Builder) Build() (*Config, error) {
// Load values and defaults
@@ -141,14 +161,11 @@
var i int
for i < len(bld.Argv) {
str := bld.Argv[i]
- if strings.HasPrefix(str, "-D") {
- idx := strings.Index(str, "=")
- if idx == -1 {
- key := str[2:]
+ key, val := parseAsConfigFlag(str)
+ if key != "" {
+ if val == "" {
cnf.settings[key] = "true"
} else {
- key := str[2:idx]
- val := str[idx+1:]
cnf.settings[key] = val
}
bld.Argv = append(bld.Argv[:i], bld.Argv[i+1:]...)