Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion rpm.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,9 @@ type RPMMetaData struct {
// Prefixes is used for relocatable packages, usually with a one item
// slice, e.g. `["/opt"]`.
Prefixes []string
// SourceRPM indicates this is a source RPM (as opposed to a binary RPM).
// When true, the SOURCERPM tag is omitted from the header.
SourceRPM bool
Provides,
Obsoletes,
Suggests,
Expand Down Expand Up @@ -425,7 +428,9 @@ func (r *RPM) writeGenIndexes(h *index) {

// rpm utilities look for the sourcerpm tag to deduce if this is not a source rpm (if it has a sourcerpm,
// it is NOT a source rpm).
h.Add(tagSourceRPM, EntryString(fmt.Sprintf("%s-%s.src.rpm", r.Name, r.FullVersion())))
if !r.SourceRPM {
h.Add(tagSourceRPM, EntryString(fmt.Sprintf("%s-%s.src.rpm", r.Name, r.FullVersion())))
}
if r.pretrans != "" {
h.Add(tagPretrans, EntryString(r.pretrans))
h.Add(tagPretransProg, EntryString("/bin/sh"))
Expand Down
45 changes: 45 additions & 0 deletions rpm_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,51 @@ func TestAllowListDirs(t *testing.T) {
}
}

func TestSourceRPMNoSourceRPMTag(t *testing.T) {
r, err := NewRPM(RPMMetaData{
Name: "test",
Version: "1.0",
Release: "1",
Summary: "test summary",
Licence: "MIT",
SourceRPM: true,
})
if err != nil {
t.Fatalf("NewRPM returned error %v", err)
}

var b bytes.Buffer
if err := r.Write(&b); err != nil {
t.Fatalf("Write returned error %v", err)
}

data := b.Bytes()
sourceRPMValue := "test-1.0-1.src.rpm"
if bytes.Contains(data, []byte(sourceRPMValue)) {
t.Errorf("source RPM should not contain SOURCERPM tag value %q, but found it", sourceRPMValue)
}

r2, err := NewRPM(RPMMetaData{
Name: "test",
Version: "1.0",
Release: "1",
Summary: "test summary",
Licence: "MIT",
})
if err != nil {
t.Fatalf("NewRPM returned error %v", err)
}

b.Reset()
if err := r2.Write(&b); err != nil {
t.Fatalf("Write returned error %v", err)
}

if !bytes.Contains(b.Bytes(), []byte(sourceRPMValue)) {
t.Errorf("binary RPM should contain SOURCERPM tag value %q, but did not find it", sourceRPMValue)
}
}

func TestMinimalSpec(t *testing.T) {
r, err := NewRPM(RPMMetaData{
Name: "test",
Expand Down