code: func (o Output) ConfigSets() []ConfigSet {
  	names := make([]string, 0, len(o.Roots))
  	for name := range o.Roots {
  		names = append(names, name)
  	}
  	sort.Strings(names) // order is important for logs
  
  	cs := make([]ConfigSet, len(names))
  	for i, nm := range names {
  		root := o.Roots[nm]
  
  		// Normalize in preparation for prefix matching.
  		root = path.Clean(root)
  		if root == "." {
  			root = "" // match EVERYTHING
  		} else {
  			root = root + "/" // match only what's under 'root/...'
  		}
  
  		files := map[string][]byte{}
  		for f, body := range o.Data {
  			f = path.Clean(f)
  			if strings.HasPrefix(f, root) {
  				files[f[len(root):]] = body
  			}
  		}
  
  		cs[i] = ConfigSet{Name: nm, Data: files}
  	}
  
  	return cs
  }
docs: // ConfigSets partitions this output into 0 or more config sets based on Roots.