func()

in ibazel/workspace/workspace.go [35:66]


func (m *MainWorkspace) FindWorkspace() (string, error) {
	path, err := os.Getwd()
	if err != nil {
		return "", err
	}

	volume := filepath.VolumeName(path)

	for {
		// filepath.Dir() includes a trailing separator if we're at the root
		if path == volume+string(filepath.Separator) {
			path = volume
		}

		// Check if we're at the workspace path
		if _, err := os.Stat(filepath.Join(path, "WORKSPACE")); !os.IsNotExist(err) {
			return path, nil
		}

		if _, err := os.Stat(filepath.Join(path, "WORKSPACE.bazel")); !os.IsNotExist(err) {
			return path, nil
		}

		// If we've reached the root, then we know the cwd isn't within a workspace
		if path == volume {
			return "", errors.New("ibazel was not invoked from within a workspace\n")
		}

		// Move one level up the path
		path = filepath.Dir(path)
	}
}