Skip to content

Commit cdd9a62

Browse files
authored
fix: use parent owner/group on typedir (#754)
closes #738
1 parent d56350e commit cdd9a62

File tree

2 files changed

+82
-12
lines changed

2 files changed

+82
-12
lines changed

files/files.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -471,7 +471,13 @@ func addTree(
471471

472472
destination := filepath.Join(tree.Destination, relPath)
473473

474-
c := &Content{}
474+
c := &Content{
475+
FileInfo: &ContentFileInfo{},
476+
}
477+
if tree.FileInfo != nil {
478+
c.FileInfo.Owner = tree.FileInfo.Owner
479+
c.FileInfo.Group = tree.FileInfo.Group
480+
}
475481

476482
switch {
477483
case d.IsDir():
@@ -482,28 +488,22 @@ func addTree(
482488

483489
c.Type = TypeDir
484490
c.Destination = NormalizeAbsoluteDirPath(destination)
485-
c.FileInfo = &ContentFileInfo{
486-
Owner: "root",
487-
Group: "root",
488-
Mode: info.Mode() &^ umask,
489-
MTime: info.ModTime(),
490-
}
491+
c.FileInfo.Mode = info.Mode() &^ umask
492+
c.FileInfo.MTime = info.ModTime()
491493
case d.Type()&os.ModeSymlink != 0:
492494
linkDestination, err := os.Readlink(path)
493495
if err != nil {
494496
return err
495497
}
496498

499+
c.Type = TypeSymlink
497500
c.Source = filepath.ToSlash(strings.TrimPrefix(linkDestination, filepath.VolumeName(linkDestination)))
498501
c.Destination = NormalizeAbsoluteFilePath(destination)
499-
c.Type = TypeSymlink
500502
default:
503+
c.Type = TypeFile
501504
c.Source = path
502505
c.Destination = NormalizeAbsoluteFilePath(destination)
503-
c.Type = TypeFile
504-
c.FileInfo = &ContentFileInfo{
505-
Mode: d.Type() &^ umask,
506-
}
506+
c.FileInfo.Mode = d.Type() &^ umask
507507
}
508508

509509
all[c.Destination] = c.WithFileInfoDefaults(umask, mtime)

files/files_test.go

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -751,6 +751,76 @@ func TestRelevantFiles(t *testing.T) {
751751
})
752752
}
753753

754+
func TestTreeOwner(t *testing.T) {
755+
results, err := files.PrepareForPackager(
756+
files.Contents{
757+
{
758+
Source: filepath.Join("testdata", "tree"),
759+
Destination: "/base",
760+
Type: files.TypeTree,
761+
FileInfo: &files.ContentFileInfo{
762+
Owner: "goreleaser",
763+
Group: "goreleaser",
764+
MTime: mtime,
765+
},
766+
},
767+
},
768+
0,
769+
"",
770+
false,
771+
mtime,
772+
)
773+
require.NoError(t, err)
774+
775+
for _, f := range results {
776+
require.Equal(t, "goreleaser", f.FileInfo.Owner, f.Destination)
777+
require.Equal(t, "goreleaser", f.FileInfo.Group, f.Destination)
778+
}
779+
780+
require.Equal(t, files.Contents{
781+
{
782+
Source: "",
783+
Destination: "/base/",
784+
Type: files.TypeDir,
785+
},
786+
{
787+
Source: "",
788+
Destination: "/base/files/",
789+
Type: files.TypeDir,
790+
},
791+
{
792+
Source: filepath.Join("testdata", "tree", "files", "a"),
793+
Destination: "/base/files/a",
794+
Type: files.TypeFile,
795+
},
796+
{
797+
Source: "",
798+
Destination: "/base/files/b/",
799+
Type: files.TypeDir,
800+
},
801+
{
802+
Source: filepath.Join("testdata", "tree", "files", "b", "c"),
803+
Destination: "/base/files/b/c",
804+
Type: files.TypeFile,
805+
},
806+
{
807+
Source: "",
808+
Destination: "/base/symlinks/",
809+
Type: files.TypeDir,
810+
},
811+
{
812+
Source: "/etc/foo",
813+
Destination: "/base/symlinks/link1",
814+
Type: files.TypeSymlink,
815+
},
816+
{
817+
Source: "../files/a",
818+
Destination: "/base/symlinks/link2",
819+
Type: files.TypeSymlink,
820+
},
821+
}, withoutFileInfo(results))
822+
}
823+
754824
func TestTree(t *testing.T) {
755825
results, err := files.PrepareForPackager(
756826
files.Contents{

0 commit comments

Comments
 (0)