示例#1
0
func readDir(d db.DB, q url.Values, s string) (db.SourceInfoUncomp, error) {
	returnMetrics := q.Get("returnMetrics") == "1"
	returnUnits := q.Get("returnUnits") == "1"
	returnSelectForDefaults := q.Get("returnSelectForDefaults") == "1"
	defaultsOnly := q.Get("defaultsOnly") == "1"

	var prefixMatch bool
	if (len(s) > 0) && (s[len(s)-1:len(s)] == "*") {
		prefixMatch = true
		s = s[:len(s)-1]
	}

	dirSearchReq := db.DirectorySearchRequest{
		Prefix:                  s,
		FileRestrict:            "",
		ReturnMetrics:           returnMetrics,
		ReturnUnits:             returnUnits,
		ReturnSelectForDefaults: returnSelectForDefaults,
		DefaultsOnly:            defaultsOnly,
		DirPrefixMatch:          prefixMatch,
		FilePrefixMatch:         false}

	// Directory only search.
	sInfo, err := d.ReadDir(dirSearchReq)
	if err != nil {
		return db.SourceInfoUncomp{}, err
	}

	// File only search.
	if len(sInfo.Names) == 0 {
		path, file := common.GetSrcComponents(s)
		dirSearchReq.Prefix = path
		dirSearchReq.FileRestrict = file
		dirSearchReq.DirPrefixMatch = false
		dirSearchReq.FilePrefixMatch = prefixMatch
		sInfo, err = d.ReadDir(dirSearchReq)
		if err != nil {
			return db.SourceInfoUncomp{}, err
		}
	}

	return sInfo, nil
}