mirror of
https://github.com/opentffoundation/opentf.git
synced 2026-02-14 10:01:05 -05:00
83 lines
2.7 KiB
Go
83 lines
2.7 KiB
Go
// Copyright (c) The OpenTofu Authors
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
// Copyright (c) 2023 HashiCorp, Inc.
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
package views
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/hashicorp/go-version"
|
|
"github.com/opentofu/opentofu/internal/initwd"
|
|
)
|
|
|
|
// moduleInstallationHookHuman is the implementation of [initwd.ModuleInstallHooks] that prints the modules
|
|
// installation progress information in human readable format.
|
|
type moduleInstallationHookHuman struct {
|
|
v *View
|
|
showLocalPaths bool
|
|
}
|
|
|
|
var _ initwd.ModuleInstallHooks = moduleInstallationHookHuman{}
|
|
|
|
func (h moduleInstallationHookHuman) Download(modulePath, packageAddr string, v *version.Version) {
|
|
if v != nil {
|
|
_, _ = h.v.streams.Println(fmt.Sprintf("Downloading %s %s for %s...", packageAddr, v, modulePath))
|
|
} else {
|
|
_, _ = h.v.streams.Println(fmt.Sprintf("Downloading %s for %s...", packageAddr, modulePath))
|
|
}
|
|
}
|
|
|
|
func (h moduleInstallationHookHuman) Install(modulePath string, v *version.Version, localDir string) {
|
|
if h.showLocalPaths {
|
|
_, _ = h.v.streams.Println(fmt.Sprintf("- %s in %s", modulePath, localDir))
|
|
} else {
|
|
_, _ = h.v.streams.Println(fmt.Sprintf("- %s", modulePath))
|
|
}
|
|
}
|
|
|
|
// moduleInstallationHookJSON is the implementation of [initwd.ModuleInstallHooks] that prints the modules
|
|
// installation progress information in JSON format.
|
|
type moduleInstallationHookJSON struct {
|
|
v *JSONView
|
|
showLocalPaths bool
|
|
}
|
|
|
|
var _ initwd.ModuleInstallHooks = moduleInstallationHookJSON{}
|
|
|
|
func (h moduleInstallationHookJSON) Download(modulePath, packageAddr string, v *version.Version) {
|
|
if v != nil {
|
|
h.v.Info(fmt.Sprintf("Downloading %s %s for %s...", packageAddr, v, modulePath))
|
|
} else {
|
|
h.v.Info(fmt.Sprintf("Downloading %s for %s...", packageAddr, modulePath))
|
|
}
|
|
}
|
|
|
|
func (h moduleInstallationHookJSON) Install(modulePath string, _ *version.Version, localDir string) {
|
|
if h.showLocalPaths {
|
|
h.v.Info(fmt.Sprintf("installing %s in %s", modulePath, localDir))
|
|
} else {
|
|
h.v.Info(fmt.Sprintf("installing %s", modulePath))
|
|
}
|
|
}
|
|
|
|
// moduleInstallationHookMulti is the implementation of [initwd.ModuleInstallHooks] that wraps multiple
|
|
// implementation of [initwd.ModuleInstallHooks] and acts as a proxy for all of those.
|
|
// This is used for the `-json-into` flag.
|
|
type moduleInstallationHookMulti []initwd.ModuleInstallHooks
|
|
|
|
var _ initwd.ModuleInstallHooks = moduleInstallationHookMulti(nil)
|
|
|
|
func (m moduleInstallationHookMulti) Download(modulePath, packageAddr string, v *version.Version) {
|
|
for _, h := range m {
|
|
h.Download(modulePath, packageAddr, v)
|
|
}
|
|
}
|
|
|
|
func (m moduleInstallationHookMulti) Install(modulePath string, v *version.Version, localDir string) {
|
|
for _, h := range m {
|
|
h.Install(modulePath, v, localDir)
|
|
}
|
|
}
|