Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitaac180b

Browse files
committed
Revert "feat(provisionersdk): follow symlinks while archiving"
This reverts commitf38ecdb.
1 parentfe1e504 commitaac180b

File tree

2 files changed

+40
-106
lines changed

2 files changed

+40
-106
lines changed

‎provisionersdk/archive.go‎

Lines changed: 29 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"archive/tar"
55
"bytes"
66
"io"
7-
"io/fs"
87
"os"
98
"path/filepath"
109
"strings"
@@ -32,37 +31,43 @@ func dirHasExt(dir string, ext string) (bool, error) {
3231
returnfalse,nil
3332
}
3433

34+
// Tar archives a Terraform directory.
35+
funcTar(directorystring,limitint64) ([]byte,error) {
36+
varbuffer bytes.Buffer
37+
tarWriter:=tar.NewWriter(&buffer)
38+
totalSize:=int64(0)
3539

36-
typearchiverstruct {
40+
consttfExt=".tf"
41+
hasTf,err:=dirHasExt(directory,tfExt)
42+
iferr!=nil {
43+
returnnil,err
44+
}
45+
if!hasTf {
46+
absPath,err:=filepath.Abs(directory)
47+
iferr!=nil {
48+
returnnil,err
49+
}
3750

38-
}
51+
// Show absolute path to aid in debugging. E.g. showing "." is
52+
// useless.
53+
returnnil,xerrors.Errorf(
54+
"%s is not a valid template since it has no %s files",
55+
absPath,tfExt,
56+
)
57+
}
3958

40-
func (a*archiver)walkFn(pathstring,fileInfo os.FileInfo,errerror)error {
59+
err=filepath.Walk(directory,func(filestring,fileInfo os.FileInfo,errerror)error {
4160
iferr!=nil {
4261
returnerr
4362
}
63+
varlinkstring
4464
iffileInfo.Mode()&os.ModeSymlink==os.ModeSymlink {
45-
// Per https://github.com/coder/coder/issues/5677, we want to
46-
// follow symlinks.
47-
varlinkDeststring
48-
linkDest,err=os.Readlink(file)
65+
link,err=os.Readlink(file)
4966
iferr!=nil {
5067
returnerr
5168
}
52-
53-
destInfo,err:=os.Stat(linkDest)
54-
iferr!=nil {
55-
returnerr
56-
}
57-
ifdestInfo.IsDir() {
58-
returnfilepath.Walk(linkDest,func(pathstring,info fs.FileInfo,errerror)error {
59-
walkFn(path,info,err)
60-
})
61-
}
62-
returnnil
6369
}
64-
65-
header,err:=tar.FileInfoHeader(fileInfo,"")
70+
header,err:=tar.FileInfoHeader(fileInfo,link)
6671
iferr!=nil {
6772
returnerr
6873
}
@@ -71,10 +76,11 @@ func (a *archiver) walkFn(path string, fileInfo os.FileInfo, err error) error {
7176
returnerr
7277
}
7378
ifstrings.HasPrefix(rel,".")||strings.HasPrefix(filepath.Base(rel),".") {
74-
// Don't archive hidden files!
7579
iffileInfo.IsDir()&&rel!="." {
80+
// Don't archive hidden files!
7681
returnfilepath.SkipDir
7782
}
83+
// Don't archive hidden files!
7884
returnnil
7985
}
8086
ifstrings.Contains(rel,".tfstate") {
@@ -103,35 +109,7 @@ func (a *archiver) walkFn(path string, fileInfo os.FileInfo, err error) error {
103109
returnxerrors.Errorf("Archive too big. Must be <= %d bytes",limit)
104110
}
105111
returndata.Close()
106-
}
107-
}
108-
109-
// Tar archives a Terraform directory.
110-
funcTar(directorystring,limitint64) ([]byte,error) {
111-
varbuffer bytes.Buffer
112-
tarWriter:=tar.NewWriter(&buffer)
113-
totalSize:=int64(0)
114-
115-
consttfExt=".tf"
116-
hasTf,err:=dirHasExt(directory,tfExt)
117-
iferr!=nil {
118-
returnnil,err
119-
}
120-
if!hasTf {
121-
absPath,err:=filepath.Abs(directory)
122-
iferr!=nil {
123-
returnnil,err
124-
}
125-
126-
// Show absolute path to aid in debugging. E.g. showing "." is
127-
// useless.
128-
returnnil,xerrors.Errorf(
129-
"%s is not a valid template since it has no %s files",
130-
absPath,tfExt,
131-
)
132-
}
133-
134-
err=filepath.Walk(directory,tarWalkFn())
112+
})
135113
iferr!=nil {
136114
returnnil,err
137115
}

‎provisionersdk/archive_test.go‎

Lines changed: 11 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import (
1212

1313
funcTestTar(t*testing.T) {
1414
t.Parallel()
15-
1615
t.Run("NoTF",func(t*testing.T) {
1716
t.Parallel()
1817
dir:=t.TempDir()
@@ -91,58 +90,15 @@ func TestTar(t *testing.T) {
9190

9291
funcTestUntar(t*testing.T) {
9392
t.Parallel()
94-
t.Run("Normal",func(t*testing.T) {
95-
t.Parallel()
96-
97-
dir:=t.TempDir()
98-
file,err:=os.CreateTemp(dir,"*.tf")
99-
require.NoError(t,err)
100-
_=file.Close()
101-
archive,err:=provisionersdk.Tar(dir,1024)
102-
require.NoError(t,err)
103-
dir=t.TempDir()
104-
err=provisionersdk.Untar(dir,archive)
105-
require.NoError(t,err)
106-
_,err=os.Stat(filepath.Join(dir,filepath.Base(file.Name())))
107-
require.NoError(t,err)
108-
})
109-
t.Run("FollowSymlinks",func(t*testing.T) {
110-
t.Parallel()
111-
112-
externalDir:=t.TempDir()
113-
externalFile,err:=os.CreateTemp(externalDir,"")
114-
require.NoError(t,err)
115-
constexternalFileContents="dogdogdog"
116-
externalFile.WriteString(externalFileContents)
117-
externalFile.Close()
118-
119-
dir:=t.TempDir()
120-
121-
file,err:=os.CreateTemp(dir,"*.tf")
122-
require.NoError(t,err)
123-
_=file.Close()
124-
125-
err=os.Symlink(
126-
externalDir,
127-
filepath.Join(dir,"link"),
128-
)
129-
require.NoError(t,err)
130-
131-
checkDir:=func(dirstring) {
132-
gotContents,err:=os.ReadFile(filepath.Join(dir,"link",filepath.Base(externalFile.Name())))
133-
require.NoError(t,err)
134-
require.EqualValues(t,externalFileContents,gotContents)
135-
}
136-
137-
checkDir(dir)
138-
139-
archive,err:=provisionersdk.Tar(dir,1024)
140-
require.NoError(t,err)
141-
142-
extractDir:=t.TempDir()
143-
err=provisionersdk.Untar(extractDir,archive)
144-
require.NoError(t,err)
145-
146-
checkDir(extractDir)
147-
})
93+
dir:=t.TempDir()
94+
file,err:=os.CreateTemp(dir,"*.tf")
95+
require.NoError(t,err)
96+
_=file.Close()
97+
archive,err:=provisionersdk.Tar(dir,1024)
98+
require.NoError(t,err)
99+
dir=t.TempDir()
100+
err=provisionersdk.Untar(dir,archive)
101+
require.NoError(t,err)
102+
_,err=os.Stat(filepath.Join(dir,filepath.Base(file.Name())))
103+
require.NoError(t,err)
148104
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp