1
1
Fork 0
mirror of https://github.com/goreleaser/nfpm synced 2024-05-27 00:36:10 +02:00

fix: Remove leading slashes from files in .tag.gz files in deb. (#209)

* fix: Remove leading slashes from symlinks and changelog in deb.

* test: Test that deb .tar.gz files don't contain leading slashes.

* fix: Fix acceptance tests by removing slashes globally.
This commit is contained in:
Erik G 2020-08-17 19:12:23 +02:00 committed by GitHub
parent b76edbd93c
commit 62c61a56bd
Signed by: GitHub
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 35 additions and 3 deletions

View File

@ -154,7 +154,7 @@ func createSymlinksInsideTarGz(info *nfpm.Info, out *tar.Writer, created map[str
}
err := newItemInsideTarGz(out, []byte{}, &tar.Header{
Name: src,
Name: strings.TrimLeft(src, "/"),
Linkname: dst,
Typeflag: tar.TypeSymlink,
ModTime: time.Now(),
@ -392,7 +392,7 @@ func newItemInsideTarGz(out *tar.Writer, content []byte, header *tar.Header) err
func newFileInsideTarGz(out *tar.Writer, name string, content []byte) error {
return newItemInsideTarGz(out, content, &tar.Header{
Name: filepath.ToSlash(name),
Name: strings.TrimLeft(filepath.ToSlash(name), "/"),
Size: int64(len(content)),
Mode: 0644,
ModTime: time.Now(),

View File

@ -619,11 +619,43 @@ func TestSymlink(t *testing.T) {
packagedSymlinkHeader, err := extractFileHeaderFromTarGz(dataTarGz, symlink)
require.NoError(t, err)
assert.Equal(t, symlink, packagedSymlinkHeader.Name)
assert.Equal(t, symlink, path.Join("/", packagedSymlinkHeader.Name))
assert.Equal(t, uint8(tar.TypeSymlink), packagedSymlinkHeader.Typeflag)
assert.Equal(t, symlinkTarget, packagedSymlinkHeader.Linkname)
}
func TestNoLeadingSlashInTarGzFiles(t *testing.T) {
info := exampleInfo()
info.Symlinks = map[string]string{
"/symlink/to/fake.txt": "/usr/share/doc/fake/fake.txt",
}
info.Changelog = "../testdata/changelog.yaml"
dataTarGz, md5sums, instSize, err := createDataTarGz(info)
require.NoError(t, err)
testNoLeadingSlashInTarGzFiles(t, dataTarGz)
controlTarGz, err := createControl(instSize, md5sums, info)
require.NoError(t, err)
testNoLeadingSlashInTarGzFiles(t, controlTarGz)
}
func testNoLeadingSlashInTarGzFiles(t *testing.T, tarGzFile []byte) {
tarFile, err := gzipInflate(tarGzFile)
require.NoError(t, err)
tr := tar.NewReader(bytes.NewReader(tarFile))
for {
hdr, err := tr.Next()
if err == io.EOF {
break // End of archive
}
require.NoError(t, err)
assert.False(t, strings.HasPrefix(hdr.Name, "/"), "%s starts with /", hdr.Name)
}
}
func extractFileFromTarGz(tarGzFile []byte, filename string) ([]byte, error) {
tarFile, err := gzipInflate(tarGzFile)
if err != nil {