Skip to content

Commit

Permalink
fix: proceed symlinks in contents as is
Browse files Browse the repository at this point in the history
  • Loading branch information
Felixoid committed Feb 9, 2022
1 parent aba336a commit 6d538a4
Show file tree
Hide file tree
Showing 9 changed files with 72 additions and 71 deletions.
35 changes: 0 additions & 35 deletions deb/deb_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -647,41 +647,6 @@ func TestDebNoTriggersInControlIfNoneProvided(t *testing.T) {
require.False(t, tarContains(t, inflate(t, "gz", controlTarGz), "triggers"))
}

func TestSymlinkInFiles(t *testing.T) {
var (
symlinkTarget = "../testdata/whatever.conf"
packagedTarget = "/etc/fake/whatever.conf"
)

info := &nfpm.Info{
Name: "symlink-in-files",
Arch: "amd64",
Description: "This package's config references a file via symlink.",
Version: "1.0.0",
Overridables: nfpm.Overridables{
Contents: []*files.Content{
{
Source: symlinkTo(t, symlinkTarget),
Destination: packagedTarget,
},
},
},
}
err := info.Validate()
require.NoError(t, err)

realSymlinkTarget, err := ioutil.ReadFile(symlinkTarget)
require.NoError(t, err)

dataTarball, _, _, dataTarballName, err := createDataTarball(info)
require.NoError(t, err)

packagedSymlinkTarget := extractFileFromTar(t,
inflate(t, dataTarballName, dataTarball), packagedTarget)

require.Equal(t, string(realSymlinkTarget), string(packagedSymlinkTarget))
}

func TestSymlink(t *testing.T) {
var (
configFilePath = "/usr/share/doc/fake/fake.txt"
Expand Down
8 changes: 6 additions & 2 deletions files/files.go
Original file line number Diff line number Diff line change
Expand Up @@ -177,15 +177,19 @@ func ExpandContentGlobs(contents Contents, disableGlobbing bool) (files Contents

func appendGlobbedFiles(all Contents, globbed map[string]string, origFile *Content) (Contents, error) {
for src, dst := range globbed {
newFile := &Content{
newFile := (&Content{
Destination: ToNixPath(dst),
Source: ToNixPath(src),
Type: origFile.Type,
FileInfo: origFile.FileInfo,
Packager: origFile.Packager,
}).WithFileInfoDefaults()
if dst, err := os.Readlink(src); err == nil {
newFile.Source = dst
newFile.Type = "symlink"
}

all = append(all, newFile.WithFileInfoDefaults())
all = append(all, newFile)
}

return all, nil
Expand Down
62 changes: 62 additions & 0 deletions files/files_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,68 @@ contents:
require.Equal(t, f.FileInfo.MTime, ct)
}

func TestSymlinksInDirectory(t *testing.T) {
var config testStruct
dec := yaml.NewDecoder(strings.NewReader(`---
contents:
- src: testdata/symlinks/subdir
dst: /bla
- src: testdata/symlinks/link-1
dst: /
- src: testdata/symlinks/link-2
dst: /
- src: existent
dst: /bla/link-3
type: symlink
`))
dec.KnownFields(true)
err := dec.Decode(&config)
require.NoError(t, err)

config.Contents, err = files.ExpandContentGlobs(config.Contents, true)
require.NoError(t, err)
require.Len(t, config.Contents, 6)

// Nulling FileInfo to check equality between expected and result
for _, c := range config.Contents {
c.FileInfo = nil
}

expected := files.Contents{
{
Source: "testdata/symlinks/subdir/existent",
Destination: "/bla/existent",
Type: "",
},
{
Source: "non-existent",
Destination: "/bla/link-1",
Type: "symlink",
},
{
Source: "existent",
Destination: "/bla/link-2",
Type: "symlink",
},
{
Source: "existent",
Destination: "/bla/link-3",
Type: "symlink",
},
{
Source: "broken",
Destination: "/link-1",
Type: "symlink",
},
{
Source: "./bla",
Destination: "/link-2",
Type: "symlink",
},
}
require.Equal(t, expected, config.Contents)
}

func TestRace(t *testing.T) {
var config testStruct
dec := yaml.NewDecoder(strings.NewReader(`---
Expand Down
1 change: 1 addition & 0 deletions files/testdata/symlinks/link-1
1 change: 1 addition & 0 deletions files/testdata/symlinks/link-2
Empty file.
1 change: 1 addition & 0 deletions files/testdata/symlinks/subdir/link-1
1 change: 1 addition & 0 deletions files/testdata/symlinks/subdir/link-2
34 changes: 0 additions & 34 deletions rpm/rpm_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -604,40 +604,6 @@ func TestRPMNoChangelogTagsWithoutChangelogConfigured(t *testing.T) {
require.Error(t, err)
}

func TestSymlinkInFiles(t *testing.T) {
var (
symlinkTarget = "../testdata/whatever.conf"
packagedTarget = "/etc/fake/whatever.conf"
)

info := &nfpm.Info{
Name: "symlink-in-files",
Arch: "amd64",
Description: "This package's config references a file via symlink.",
Version: "1.0.0",
Overridables: nfpm.Overridables{
Contents: []*files.Content{
{
Source: symlinkTo(t, symlinkTarget),
Destination: packagedTarget,
},
},
},
}

realSymlinkTarget, err := ioutil.ReadFile(symlinkTarget)
require.NoError(t, err)

var rpmFileBuffer bytes.Buffer
err = Default.Package(info, &rpmFileBuffer)
require.NoError(t, err)

packagedSymlinkTarget, err := extractFileFromRpm(rpmFileBuffer.Bytes(), packagedTarget)
require.NoError(t, err)

require.Equal(t, string(realSymlinkTarget), string(packagedSymlinkTarget))
}

func TestSymlink(t *testing.T) {
var (
configFilePath = "/usr/share/doc/fake/fake.txt"
Expand Down

0 comments on commit 6d538a4

Please sign in to comment.