Skip to content

Commit 0b3c28f

Browse files
authored
fix: symlink with empty mtime (#955)
* fix: symlink with empty mtime * fix: not actually need this * fix: mtime * refactor: simplify * test: lint
1 parent b2a1c0e commit 0b3c28f

File tree

3 files changed

+52
-1
lines changed

3 files changed

+52
-1
lines changed

files/files.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,8 @@ func (c *Content) WithFileInfoDefaults(umask fs.FileMode, mtime time.Time) *Cont
146146
info, err := os.Stat(cc.Source)
147147
if err == nil {
148148
if cc.FileInfo.MTime.IsZero() {
149+
// if we can stat the file and mtime not set, use original
150+
// file's mtime
149151
cc.FileInfo.MTime = info.ModTime()
150152
}
151153
if cc.FileInfo.Mode == 0 {
@@ -155,8 +157,9 @@ func (c *Content) WithFileInfoDefaults(umask fs.FileMode, mtime time.Time) *Cont
155157
}
156158
}
157159

160+
// finally, if mtime is still 0, set time.Now()
158161
if cc.FileInfo.MTime.IsZero() {
159-
cc.FileInfo.MTime = mtime
162+
cc.FileInfo.MTime = time.Now()
160163
}
161164
return cc
162165
}

files/files_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1025,6 +1025,25 @@ func TestIssue954(t *testing.T) {
10251025
}, found)
10261026
}
10271027

1028+
func TestIssue952(t *testing.T) {
1029+
contents := files.Contents{
1030+
{
1031+
Source: "/source",
1032+
Destination: "/dest",
1033+
Type: files.TypeSymlink,
1034+
},
1035+
}
1036+
1037+
result, err := files.PrepareForPackager(contents, 0, "", false, mtime)
1038+
require.NoError(t, err)
1039+
require.Len(t, result, 1)
1040+
1041+
symlink := result[0]
1042+
require.Equal(t, files.TypeSymlink, symlink.Type)
1043+
require.Equal(t, "/dest", symlink.Destination)
1044+
require.Equal(t, mtime, symlink.FileInfo.MTime)
1045+
}
1046+
10281047
func TestIssue829(t *testing.T) {
10291048
var config testStruct
10301049
dec := yaml.NewDecoder(strings.NewReader(`---

rpm/rpm_test.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,35 @@ func TestRPM(t *testing.T) {
153153
require.Equal(t, "Foo does things", description)
154154
}
155155

156+
func TestIssue952(t *testing.T) {
157+
info := exampleInfo()
158+
info.MTime = time.Time{}
159+
160+
info.Contents = files.Contents{
161+
&files.Content{
162+
Source: "/file-that-does-not-exist",
163+
Destination: "/etc/link",
164+
Type: files.TypeSymlink,
165+
},
166+
}
167+
168+
var buf bytes.Buffer
169+
err := DefaultRPM.Package(info, &buf)
170+
require.NoError(t, err)
171+
172+
rpm, err := rpmutils.ReadRpm(&buf)
173+
require.NoError(t, err)
174+
175+
files, err := rpm.Header.GetFiles()
176+
require.NoError(t, err)
177+
require.Len(t, files, 1)
178+
f := files[0]
179+
require.Equal(t, cpio.S_ISLNK, f.Mode())
180+
require.Equal(t, "/etc/link", f.Name())
181+
require.Equal(t, "/file-that-does-not-exist", f.Linkname())
182+
require.Positive(t, f.Mtime())
183+
}
184+
156185
func TestSRPM(t *testing.T) {
157186
f, err := os.CreateTemp(t.TempDir(), "test.rpm")
158187
require.NoError(t, err)

0 commit comments

Comments
 (0)