func()

in ibazel/ibazel.go [453:501]


func (i *IBazel) queryForSourceFiles(query string) ([]string, error) {
	b := i.newBazel()

	localRepositories, err := i.realLocalRepositoryPaths()

	if err != nil {
		return nil, err
	}

	res, err := b.Query(i.queryArgs(query)...)
	if err != nil {
		log.Errorf("Bazel query failed: %v", err)
		return nil, err
	}

	workspacePath, err := i.workspaceFinder.FindWorkspace()
	if err != nil {
		log.Errorf("Error finding workspace: %v", err)
		return nil, err
	}

	toWatch := make([]string, 0, 10000)
	for _, target := range res.Target {
		switch *target.Type {
		case blaze_query.Target_SOURCE_FILE:
			label := *target.SourceFile.Name
			if strings.HasPrefix(label, "@") {
				repo, target := parseTarget(label)
				if realPath, ok := localRepositories[repo]; ok {
					label = strings.Replace(target, ":", string(filepath.Separator), 1)
					toWatch = append(toWatch, filepath.Join(realPath, label))
					break
				}
				continue
			}
			if strings.HasPrefix(label, "//external") {
				continue
			}

			label = strings.Replace(strings.TrimPrefix(label, "//"), ":", string(filepath.Separator), 1)
			toWatch = append(toWatch, filepath.Join(workspacePath, label))
			break
		default:
			log.Errorf("%v\n", target)
		}
	}

	return toWatch, nil
}