func()

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)
}