From 856bb5c8f266f5276f1a576f47be622d7cb384e7 Mon Sep 17 00:00:00 2001 From: Claudiu Belu Date: Wed, 15 Jun 2022 15:17:24 +0300 Subject: [PATCH] Replaces path.Operation with filepath.Operation (staging) The path module has a few different functions: Clean, Split, Join, Ext, Dir, Base, IsAbs. These functions do not take into account the OS-specific path separator, meaning that they won't behave as intended on Windows. For example, Dir is supposed to return all but the last element of the path. For the path "C:\some\dir\somewhere", it is supposed to return "C:\some\dir\", however, it returns ".". Instead of these functions, the ones in filepath should be used instead. --- .../client-go/tools/clientcmd/api/helpers.go | 5 ++--- .../client-go/tools/clientcmd/config.go | 3 +-- .../client-go/tools/clientcmd/loader_test.go | 19 +++++++++---------- .../pkg/cmd/clusterinfo/clusterinfo_dump.go | 5 +++-- .../cmd/clusterinfo/clusterinfo_dump_test.go | 4 ++-- .../kubectl/pkg/cmd/config/config_test.go | 6 +++--- .../pkg/cmd/create/create_configmap.go | 4 ++-- .../kubectl/pkg/cmd/create/create_secret.go | 4 ++-- .../pkg/cmd/create/create_secret_tls_test.go | 6 +++--- .../k8s.io/kubectl/pkg/cmd/diff/diff_test.go | 11 +++++------ 10 files changed, 32 insertions(+), 35 deletions(-) diff --git a/staging/src/k8s.io/client-go/tools/clientcmd/api/helpers.go b/staging/src/k8s.io/client-go/tools/clientcmd/api/helpers.go index dd5f9180673..261dcacb5bf 100644 --- a/staging/src/k8s.io/client-go/tools/clientcmd/api/helpers.go +++ b/staging/src/k8s.io/client-go/tools/clientcmd/api/helpers.go @@ -21,7 +21,6 @@ import ( "errors" "fmt" "os" - "path" "path/filepath" "reflect" "strings" @@ -115,7 +114,7 @@ func ShortenConfig(config *Config) { // FlattenConfig changes the config object into a self-contained config (useful for making secrets) func FlattenConfig(config *Config) error { for key, authInfo := range config.AuthInfos { - baseDir, err := MakeAbs(path.Dir(authInfo.LocationOfOrigin), "") + baseDir, err := MakeAbs(filepath.Dir(authInfo.LocationOfOrigin), "") if err != nil { return err } @@ -130,7 +129,7 @@ func FlattenConfig(config *Config) error { config.AuthInfos[key] = authInfo } for key, cluster := range config.Clusters { - baseDir, err := MakeAbs(path.Dir(cluster.LocationOfOrigin), "") + baseDir, err := MakeAbs(filepath.Dir(cluster.LocationOfOrigin), "") if err != nil { return err } diff --git a/staging/src/k8s.io/client-go/tools/clientcmd/config.go b/staging/src/k8s.io/client-go/tools/clientcmd/config.go index 31f8963160e..2cd213ccb3e 100644 --- a/staging/src/k8s.io/client-go/tools/clientcmd/config.go +++ b/staging/src/k8s.io/client-go/tools/clientcmd/config.go @@ -19,7 +19,6 @@ package clientcmd import ( "errors" "os" - "path" "path/filepath" "reflect" "sort" @@ -148,7 +147,7 @@ func NewDefaultPathOptions() *PathOptions { EnvVar: RecommendedConfigPathEnvVar, ExplicitFileFlag: RecommendedConfigPathFlag, - GlobalFileSubpath: path.Join(RecommendedHomeDir, RecommendedFileName), + GlobalFileSubpath: filepath.Join(RecommendedHomeDir, RecommendedFileName), LoadingRules: NewDefaultClientConfigLoadingRules(), } diff --git a/staging/src/k8s.io/client-go/tools/clientcmd/loader_test.go b/staging/src/k8s.io/client-go/tools/clientcmd/loader_test.go index fbc45283891..778ef03ca6b 100644 --- a/staging/src/k8s.io/client-go/tools/clientcmd/loader_test.go +++ b/staging/src/k8s.io/client-go/tools/clientcmd/loader_test.go @@ -21,7 +21,6 @@ import ( "flag" "fmt" "os" - "path" "path/filepath" "reflect" "strings" @@ -539,13 +538,13 @@ func TestResolveRelativePaths(t *testing.T) { configDir1, _ := os.MkdirTemp("", "") defer os.RemoveAll(configDir1) - configFile1 := path.Join(configDir1, ".kubeconfig") + configFile1 := filepath.Join(configDir1, ".kubeconfig") configDir1, _ = filepath.Abs(configDir1) configDir2, _ := os.MkdirTemp("", "") defer os.RemoveAll(configDir2) configDir2, _ = os.MkdirTemp(configDir2, "") - configFile2 := path.Join(configDir2, ".kubeconfig") + configFile2 := filepath.Join(configDir2, ".kubeconfig") configDir2, _ = filepath.Abs(configDir2) WriteToFile(pathResolutionConfig1, configFile1) @@ -564,11 +563,11 @@ func TestResolveRelativePaths(t *testing.T) { for key, cluster := range mergedConfig.Clusters { if key == "relative-server-1" { foundClusterCount++ - matchStringArg(path.Join(configDir1, pathResolutionConfig1.Clusters["relative-server-1"].CertificateAuthority), cluster.CertificateAuthority, t) + matchStringArg(filepath.Join(configDir1, pathResolutionConfig1.Clusters["relative-server-1"].CertificateAuthority), cluster.CertificateAuthority, t) } if key == "relative-server-2" { foundClusterCount++ - matchStringArg(path.Join(configDir2, pathResolutionConfig2.Clusters["relative-server-2"].CertificateAuthority), cluster.CertificateAuthority, t) + matchStringArg(filepath.Join(configDir2, pathResolutionConfig2.Clusters["relative-server-2"].CertificateAuthority), cluster.CertificateAuthority, t) } if key == "absolute-server-1" { foundClusterCount++ @@ -587,13 +586,13 @@ func TestResolveRelativePaths(t *testing.T) { for key, authInfo := range mergedConfig.AuthInfos { if key == "relative-user-1" { foundAuthInfoCount++ - matchStringArg(path.Join(configDir1, pathResolutionConfig1.AuthInfos["relative-user-1"].ClientCertificate), authInfo.ClientCertificate, t) - matchStringArg(path.Join(configDir1, pathResolutionConfig1.AuthInfos["relative-user-1"].ClientKey), authInfo.ClientKey, t) + matchStringArg(filepath.Join(configDir1, pathResolutionConfig1.AuthInfos["relative-user-1"].ClientCertificate), authInfo.ClientCertificate, t) + matchStringArg(filepath.Join(configDir1, pathResolutionConfig1.AuthInfos["relative-user-1"].ClientKey), authInfo.ClientKey, t) } if key == "relative-user-2" { foundAuthInfoCount++ - matchStringArg(path.Join(configDir2, pathResolutionConfig2.AuthInfos["relative-user-2"].ClientCertificate), authInfo.ClientCertificate, t) - matchStringArg(path.Join(configDir2, pathResolutionConfig2.AuthInfos["relative-user-2"].ClientKey), authInfo.ClientKey, t) + matchStringArg(filepath.Join(configDir2, pathResolutionConfig2.AuthInfos["relative-user-2"].ClientCertificate), authInfo.ClientCertificate, t) + matchStringArg(filepath.Join(configDir2, pathResolutionConfig2.AuthInfos["relative-user-2"].ClientKey), authInfo.ClientKey, t) } if key == "absolute-user-1" { foundAuthInfoCount++ @@ -607,7 +606,7 @@ func TestResolveRelativePaths(t *testing.T) { } if key == "relative-cmd-1" { foundAuthInfoCount++ - matchStringArg(path.Join(configDir1, pathResolutionConfig1.AuthInfos[key].Exec.Command), authInfo.Exec.Command, t) + matchStringArg(filepath.Join(configDir1, pathResolutionConfig1.AuthInfos[key].Exec.Command), authInfo.Exec.Command, t) } if key == "absolute-cmd-1" { foundAuthInfoCount++ diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/clusterinfo/clusterinfo_dump.go b/staging/src/k8s.io/kubectl/pkg/cmd/clusterinfo/clusterinfo_dump.go index 34fb617acb8..e67f849fd2f 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/clusterinfo/clusterinfo_dump.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/clusterinfo/clusterinfo_dump.go @@ -22,6 +22,7 @@ import ( "io" "os" "path" + "path/filepath" "time" "github.com/spf13/cobra" @@ -118,8 +119,8 @@ func setupOutputWriter(dir string, defaultWriter io.Writer, filename string, fil if len(dir) == 0 || dir == "-" { return defaultWriter } - fullFile := path.Join(dir, filename) + fileExtension - parent := path.Dir(fullFile) + fullFile := filepath.Join(dir, filename) + fileExtension + parent := filepath.Dir(fullFile) cmdutil.CheckErr(os.MkdirAll(parent, 0755)) file, err := os.Create(fullFile) diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/clusterinfo/clusterinfo_dump_test.go b/staging/src/k8s.io/kubectl/pkg/cmd/clusterinfo/clusterinfo_dump_test.go index ed7406d9c85..8f178a4f386 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/clusterinfo/clusterinfo_dump_test.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/clusterinfo/clusterinfo_dump_test.go @@ -18,7 +18,7 @@ package clusterinfo import ( "os" - "path" + "path/filepath" "testing" "k8s.io/cli-runtime/pkg/genericiooptions" @@ -60,7 +60,7 @@ func TestSetupOutputWriterFile(t *testing.T) { if err != nil { t.Errorf("unexpected error: %v", err) } - fullPath := path.Join(dir, file) + extension + fullPath := filepath.Join(dir, file) + extension defer os.RemoveAll(dir) _, _, buf, _ := genericiooptions.NewTestIOStreams() diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/config/config_test.go b/staging/src/k8s.io/kubectl/pkg/cmd/config/config_test.go index 28603f261e0..a4bac0fa21a 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/config/config_test.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/config/config_test.go @@ -19,7 +19,7 @@ package config import ( "fmt" "os" - "path" + "path/filepath" "reflect" "strings" "testing" @@ -415,7 +415,7 @@ func TestEmptyTokenAndCertAllowed(t *testing.T) { defer utiltesting.CloseAndRemove(t, fakeCertFile) expectedConfig := newRedFederalCowHammerConfig() authInfo := clientcmdapi.NewAuthInfo() - authInfo.ClientCertificate = path.Base(fakeCertFile.Name()) + authInfo.ClientCertificate = filepath.Base(fakeCertFile.Name()) expectedConfig.AuthInfos["another-user"] = authInfo test := configCommandTest{ @@ -660,7 +660,7 @@ func TestCAClearsInsecure(t *testing.T) { clusterInfoWithInsecure.InsecureSkipTLSVerify = true clusterInfoWithCA := clientcmdapi.NewCluster() - clusterInfoWithCA.CertificateAuthority = path.Base(fakeCAFile.Name()) + clusterInfoWithCA.CertificateAuthority = filepath.Base(fakeCAFile.Name()) startingConfig := newRedFederalCowHammerConfig() startingConfig.Clusters["another-cluster"] = clusterInfoWithInsecure diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_configmap.go b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_configmap.go index 988cbb1efc6..f43f91b0134 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_configmap.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_configmap.go @@ -20,7 +20,7 @@ import ( "context" "fmt" "os" - "path" + "path/filepath" "strings" "unicode/utf8" @@ -320,7 +320,7 @@ func handleConfigMapFromFileSources(configMap *corev1.ConfigMap, fileSources []s return fmt.Errorf("error listing files in %s: %v", filePath, err) } for _, item := range fileList { - itemPath := path.Join(filePath, item.Name()) + itemPath := filepath.Join(filePath, item.Name()) if item.Type().IsRegular() { keyName = item.Name() err = addKeyFromFileToConfigMap(configMap, keyName, itemPath) diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_secret.go b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_secret.go index b9bb191f9f5..4b4f394a97c 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_secret.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_secret.go @@ -20,7 +20,7 @@ import ( "context" "fmt" "os" - "path" + "path/filepath" "strings" "github.com/spf13/cobra" @@ -349,7 +349,7 @@ func handleSecretFromFileSources(secret *corev1.Secret, fileSources []string) er return fmt.Errorf("error listing files in %s: %v", filePath, err) } for _, item := range fileList { - itemPath := path.Join(filePath, item.Name()) + itemPath := filepath.Join(filePath, item.Name()) if item.Type().IsRegular() { keyName = item.Name() if err := addKeyFromFileToSecret(secret, keyName, itemPath); err != nil { diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_secret_tls_test.go b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_secret_tls_test.go index 51f3a7730cd..900d0579763 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_secret_tls_test.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_secret_tls_test.go @@ -18,7 +18,7 @@ package create import ( "os" - "path" + "path/filepath" "testing" corev1 "k8s.io/api/core/v1" @@ -197,8 +197,8 @@ func write(path, contents string, t *testing.T) { } func writeKeyPair(tmpDirPath, key, cert string, t *testing.T) (keyPath, certPath string) { - keyPath = path.Join(tmpDirPath, "tls.key") - certPath = path.Join(tmpDirPath, "tls.cert") + keyPath = filepath.Join(tmpDirPath, "tls.key") + certPath = filepath.Join(tmpDirPath, "tls.cert") write(keyPath, key, t) write(certPath, cert, t) return diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/diff/diff_test.go b/staging/src/k8s.io/kubectl/pkg/cmd/diff/diff_test.go index 037858c5c22..391900418cb 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/diff/diff_test.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/diff/diff_test.go @@ -20,7 +20,6 @@ import ( "bytes" "fmt" "os" - "path" "path/filepath" "strings" "testing" @@ -130,7 +129,7 @@ func TestDiffVersion(t *testing.T) { if err != nil { t.Fatal(err) } - fcontent, err := os.ReadFile(path.Join(diff.Dir.Name, obj.Name())) + fcontent, err := os.ReadFile(filepath.Join(diff.Dir.Name, obj.Name())) if err != nil { t.Fatal(err) } @@ -201,7 +200,7 @@ func TestDiffer(t *testing.T) { if err != nil { t.Fatal(err) } - fcontent, err := os.ReadFile(path.Join(diff.From.Dir.Name, obj.Name())) + fcontent, err := os.ReadFile(filepath.Join(diff.From.Dir.Name, obj.Name())) if err != nil { t.Fatal(err) } @@ -210,7 +209,7 @@ func TestDiffer(t *testing.T) { t.Fatalf("File has %q, expected %q", string(fcontent), econtent) } - fcontent, err = os.ReadFile(path.Join(diff.To.Dir.Name, obj.Name())) + fcontent, err = os.ReadFile(filepath.Join(diff.To.Dir.Name, obj.Name())) if err != nil { t.Fatal(err) } @@ -286,12 +285,12 @@ metadata: t.Fatal(err) } - actualFromContent, _ := os.ReadFile(path.Join(diff.From.Dir.Name, obj.Name())) + actualFromContent, _ := os.ReadFile(filepath.Join(diff.From.Dir.Name, obj.Name())) if string(actualFromContent) != tc.expectedFromContent { t.Fatalf("File has %q, expected %q", string(actualFromContent), tc.expectedFromContent) } - actualToContent, _ := os.ReadFile(path.Join(diff.To.Dir.Name, obj.Name())) + actualToContent, _ := os.ReadFile(filepath.Join(diff.To.Dir.Name, obj.Name())) if string(actualToContent) != tc.expectedToContent { t.Fatalf("File has %q, expected %q", string(actualToContent), tc.expectedToContent) }