mirror of
https://github.com/goreleaser/nfpm
synced 2024-09-26 09:40:46 +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:
parent
b76edbd93c
commit
62c61a56bd
@ -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(),
|
||||
|
@ -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 {
|
||||
|
Loading…
Reference in New Issue
Block a user