When merging reflists, never allow duplicate (name, version, arch) tuples. #154

Even for conficting packages.
This commit is contained in:
Andrey Smirnov
2014-12-11 21:56:50 +03:00
parent ba32d16c8a
commit 0e552eda55
2 changed files with 57 additions and 17 deletions
+16 -6
View File
@@ -285,13 +285,23 @@ func (l *PackageRefList) Merge(r *PackageRefList, overrideMatching bool) (result
overridenName = nil
overriddenArch = nil
} else {
partsL := bytes.Split(rl, []byte(" "))
archL, nameL, versionL := partsL[0][1:], partsL[1], partsL[2]
partsR := bytes.Split(rr, []byte(" "))
archR, nameR, versionR := partsR[0][1:], partsR[1], partsR[2]
if bytes.Equal(archL, archR) && bytes.Equal(nameL, nameR) && bytes.Equal(versionL, versionR) {
// conflicting duplicates with same arch, name, version, but different file hash
result.Refs = append(result.Refs, r.Refs[ir])
il++
ir++
overridenName = nil
overriddenArch = nil
continue
}
if overrideMatching {
partsL := bytes.Split(rl, []byte(" "))
archL, nameL := partsL[0][1:], partsL[1]
partsR := bytes.Split(rr, []byte(" "))
archR, nameR := partsR[0][1:], partsR[1]
if bytes.Equal(archL, overriddenArch) && bytes.Equal(nameL, overridenName) {
// this package has already been overriden on the right
il++