diff --git a/internal/getproviders/filesystem_search.go b/internal/getproviders/filesystem_search.go index ff10acf461..55857f4c13 100644 --- a/internal/getproviders/filesystem_search.go +++ b/internal/getproviders/filesystem_search.go @@ -204,3 +204,17 @@ func SearchLocalDirectory(baseDir string) (map[addrs.Provider]PackageMetaList, e } return ret, nil } + +// UnpackedDirectoryPathForPackage is similar to +// PackageMeta.UnpackedDirectoryPath but makes its decision based on +// individually-passed provider address, version, and target platform so that +// it can be used by callers outside this package that may have other +// types that represent package identifiers. +func UnpackedDirectoryPathForPackage(baseDir string, provider addrs.Provider, version Version, platform Platform) string { + return filepath.ToSlash(filepath.Join( + baseDir, + provider.Hostname.ForDisplay(), provider.Namespace, provider.Type, + version.String(), + platform.String(), + )) +} diff --git a/internal/getproviders/types.go b/internal/getproviders/types.go index ac41b20e1d..c675cd0073 100644 --- a/internal/getproviders/types.go +++ b/internal/getproviders/types.go @@ -133,6 +133,17 @@ func (m PackageMeta) LessThan(other PackageMeta) bool { } } +// UnpackedDirectoryPath determines the path under the given base +// directory where SearchLocalDirectory or the FilesystemMirrorSource would +// expect to find an unpacked copy of the receiving PackageMeta. +// +// The result always uses forward slashes as path separator, even on Windows, +// to produce a consistent result on all platforms. Windows accepts both +// direction of slash as long as each individual path string is self-consistent. +func (m PackageMeta) UnpackedDirectoryPath(baseDir string) string { + return UnpackedDirectoryPathForPackage(baseDir, m.Provider, m.Version, m.TargetPlatform) +} + // PackageLocation represents a location where a provider distribution package // can be obtained. A value of this type contains one of the following // concrete types: PackageLocalArchive, PackageLocalDir, or PackageHTTPURL.