in path.go [278:313]
func (p cfgPath) Remove(cfg *Config, opt *options) (bool, error) {
fields := p.fields
// Loop over intermediate objects. Returns an error if any intermediate is
// actually no object.
cur := value(cfgSub{cfg})
for ; len(fields) > 1; fields = fields[1:] {
field := fields[0]
next, err := field.GetValue(opt, cur)
if err != nil {
// Ignore ErrMissing when walking down a config tree. If intermediary is
// missing we can't remove our setting.
if err.Reason() == ErrMissing {
err = nil
}
return false, err
}
if next == nil {
return false, err
}
cur = next
}
// resolve config object in case we deal with references
tmp, err := cur.toConfig(opt)
if err != nil {
return false, err
}
cur = cfgSub{tmp}
field := fields[0]
return field.Remove(opt, cur)
}