aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/cli/internal/run/global_hash.go
diff options
context:
space:
mode:
author简律纯 <hsiangnianian@outlook.com>2023-04-28 01:36:55 +0800
committer简律纯 <hsiangnianian@outlook.com>2023-04-28 01:36:55 +0800
commitfc8c5fdce62fb229202659408798a7b6c98f6e8b (patch)
tree7554f80e50de4af6fd255afa7c21bcdd58a7af34 /cli/internal/run/global_hash.go
parentdd84b9d64fb98746a230cd24233ff50a562c39c9 (diff)
downloadHydroRoll-fc8c5fdce62fb229202659408798a7b6c98f6e8b.tar.gz
HydroRoll-fc8c5fdce62fb229202659408798a7b6c98f6e8b.zip
Diffstat (limited to 'cli/internal/run/global_hash.go')
-rw-r--r--cli/internal/run/global_hash.go164
1 files changed, 0 insertions, 164 deletions
diff --git a/cli/internal/run/global_hash.go b/cli/internal/run/global_hash.go
deleted file mode 100644
index 2ebf642..0000000
--- a/cli/internal/run/global_hash.go
+++ /dev/null
@@ -1,164 +0,0 @@
-package run
-
-import (
- "fmt"
- "path/filepath"
- "strings"
-
- "github.com/hashicorp/go-hclog"
- "github.com/mitchellh/cli"
- "github.com/vercel/turbo/cli/internal/env"
- "github.com/vercel/turbo/cli/internal/fs"
- "github.com/vercel/turbo/cli/internal/globby"
- "github.com/vercel/turbo/cli/internal/hashing"
- "github.com/vercel/turbo/cli/internal/lockfile"
- "github.com/vercel/turbo/cli/internal/packagemanager"
- "github.com/vercel/turbo/cli/internal/turbopath"
- "github.com/vercel/turbo/cli/internal/util"
-)
-
-const _globalCacheKey = "Buffalo buffalo Buffalo buffalo buffalo buffalo Buffalo buffalo"
-
-// Variables that we always include
-var _defaultEnvVars = []string{
- "VERCEL_ANALYTICS_ID",
-}
-
-// GlobalHashable represents all the things that we use to create the global hash
-type GlobalHashable struct {
- globalFileHashMap map[turbopath.AnchoredUnixPath]string
- rootExternalDepsHash string
- envVars env.DetailedMap
- globalCacheKey string
- pipeline fs.PristinePipeline
- envVarPassthroughs []string
- envMode util.EnvMode
-}
-
-// This exists because the global hash used to have different fields. Changing
-// to a new struct layout changes the global hash. We can remove this converter
-// when we are going to have to update the global hash for something else.
-type oldGlobalHashable struct {
- globalFileHashMap map[turbopath.AnchoredUnixPath]string
- rootExternalDepsHash string
- envVars env.EnvironmentVariablePairs
- globalCacheKey string
- pipeline fs.PristinePipeline
-}
-
-// calculateGlobalHashFromHashable returns a hash string from the globalHashable
-func calculateGlobalHashFromHashable(full GlobalHashable) (string, error) {
- switch full.envMode {
- case util.Infer:
- if full.envVarPassthroughs != nil {
- // In infer mode, if there is any passThru config (even if it is an empty array)
- // we'll hash the whole object, so we can detect changes to that config
- // Further, resolve the envMode to the concrete value.
- full.envMode = util.Strict
- return fs.HashObject(full)
- }
-
- // If we're in infer mode, and there is no global pass through config,
- // we use the old struct layout. this will be true for everyone not using the strict env
- // feature, and we don't want to break their cache.
- return fs.HashObject(oldGlobalHashable{
- globalFileHashMap: full.globalFileHashMap,
- rootExternalDepsHash: full.rootExternalDepsHash,
- envVars: full.envVars.All.ToHashable(),
- globalCacheKey: full.globalCacheKey,
- pipeline: full.pipeline,
- })
- case util.Loose:
- // Remove the passthroughs from hash consideration if we're explicitly loose.
- full.envVarPassthroughs = nil
- return fs.HashObject(full)
- case util.Strict:
- // Collapse `nil` and `[]` in strict mode.
- if full.envVarPassthroughs == nil {
- full.envVarPassthroughs = make([]string, 0)
- }
- return fs.HashObject(full)
- default:
- panic("unimplemented environment mode")
- }
-}
-
-func calculateGlobalHash(
- rootpath turbopath.AbsoluteSystemPath,
- rootPackageJSON *fs.PackageJSON,
- pipeline fs.Pipeline,
- envVarDependencies []string,
- globalFileDependencies []string,
- packageManager *packagemanager.PackageManager,
- lockFile lockfile.Lockfile,
- envVarPassthroughs []string,
- envMode util.EnvMode,
- logger hclog.Logger,
- ui cli.Ui,
- isStructuredOutput bool,
-) (GlobalHashable, error) {
- // Calculate env var dependencies
- envVars := []string{}
- envVars = append(envVars, envVarDependencies...)
- envVars = append(envVars, _defaultEnvVars...)
- globalHashableEnvVars, err := env.GetHashableEnvVars(envVars, []string{".*THASH.*"}, "")
- if err != nil {
- return GlobalHashable{}, err
- }
-
- // The only way we can add env vars into the hash via matching is via THASH,
- // so we only do a simple check here for entries in `BySource.Matching`.
- // If we enable globalEnv to accept wildcard characters, we'll need to update this
- // check.
- if !isStructuredOutput && len(globalHashableEnvVars.BySource.Matching) > 0 {
- ui.Warn(fmt.Sprintf("[DEPRECATED] Using .*THASH.* to specify an environment variable for inclusion into the hash is deprecated. You specified: %s.", strings.Join(globalHashableEnvVars.BySource.Matching.Names(), ", ")))
- }
-
- logger.Debug("global hash env vars", "vars", globalHashableEnvVars.All.Names())
-
- // Calculate global file dependencies
- globalDeps := make(util.Set)
- if len(globalFileDependencies) > 0 {
- ignores, err := packageManager.GetWorkspaceIgnores(rootpath)
- if err != nil {
- return GlobalHashable{}, err
- }
-
- f, err := globby.GlobFiles(rootpath.ToStringDuringMigration(), globalFileDependencies, ignores)
- if err != nil {
- return GlobalHashable{}, err
- }
-
- for _, val := range f {
- globalDeps.Add(val)
- }
- }
-
- if lockFile == nil {
- // If we don't have lockfile information available, add the specfile and lockfile to global deps
- globalDeps.Add(filepath.Join(rootpath.ToStringDuringMigration(), packageManager.Specfile))
- globalDeps.Add(filepath.Join(rootpath.ToStringDuringMigration(), packageManager.Lockfile))
- }
-
- // No prefix, global deps already have full paths
- globalDepsArray := globalDeps.UnsafeListOfStrings()
- globalDepsPaths := make([]turbopath.AbsoluteSystemPath, len(globalDepsArray))
- for i, path := range globalDepsArray {
- globalDepsPaths[i] = turbopath.AbsoluteSystemPathFromUpstream(path)
- }
-
- globalFileHashMap, err := hashing.GetHashableDeps(rootpath, globalDepsPaths)
- if err != nil {
- return GlobalHashable{}, fmt.Errorf("error hashing files: %w", err)
- }
-
- return GlobalHashable{
- globalFileHashMap: globalFileHashMap,
- rootExternalDepsHash: rootPackageJSON.ExternalDepsHash,
- envVars: globalHashableEnvVars,
- globalCacheKey: _globalCacheKey,
- pipeline: pipeline.Pristine(),
- envVarPassthroughs: envVarPassthroughs,
- envMode: envMode,
- }, nil
-}