snapshot: first pass at newest-wins functionality.

This commit is contained in:
Ryan Uber
2014-04-21 18:45:06 -07:00
parent fb8686a634
commit 992a5cee37
3 changed files with 26 additions and 7 deletions
+3 -3
View File
@@ -27,7 +27,7 @@ func aptlyDbCleanup(cmd *commander.Command, args []string) error {
return err
}
if repo.RefList() != nil {
existingPackageRefs = existingPackageRefs.Merge(repo.RefList(), false)
existingPackageRefs = existingPackageRefs.Merge(repo.RefList(), false, false)
}
return nil
})
@@ -41,7 +41,7 @@ func aptlyDbCleanup(cmd *commander.Command, args []string) error {
return err
}
if repo.RefList() != nil {
existingPackageRefs = existingPackageRefs.Merge(repo.RefList(), false)
existingPackageRefs = existingPackageRefs.Merge(repo.RefList(), false, false)
}
return nil
})
@@ -54,7 +54,7 @@ func aptlyDbCleanup(cmd *commander.Command, args []string) error {
if err != nil {
return err
}
existingPackageRefs = existingPackageRefs.Merge(snapshot.RefList(), false)
existingPackageRefs = existingPackageRefs.Merge(snapshot.RefList(), false, false)
return nil
})
if err != nil {
+1 -1
View File
@@ -31,7 +31,7 @@ func aptlySnapshotMerge(cmd *commander.Command, args []string) error {
result := sources[0].RefList()
for i := 1; i < len(sources); i++ {
result = result.Merge(sources[i].RefList(), true)
result = result.Merge(sources[i].RefList(), true, true)
}
sourceDescription := make([]string, len(sources))
+22 -3
View File
@@ -219,9 +219,13 @@ func (l *PackageRefList) Diff(r *PackageRefList, packageCollection *PackageColle
return
}
// Merge merges reflist r into current reflist. If overrideMatching, merge replaces matching packages (by architecture/name)
// with reference from r, otherwise all packages are saved.
func (l *PackageRefList) Merge(r *PackageRefList, overrideMatching bool) (result *PackageRefList) {
// Merge merges reflist r into current reflist. If overrideMatching, merge
// replaces matching packages (by architecture/name) with reference from r. If
// newestWins, compare versions between common packages and take the latest from
// the set. Otherwise, all packages are saved.
func (l *PackageRefList) Merge(r *PackageRefList, overrideMatching bool,
newestWins bool) (result *PackageRefList) {
// pointer to left and right reflists
il, ir := 0, 0
// length of reflists
@@ -269,6 +273,21 @@ func (l *PackageRefList) Merge(r *PackageRefList, overrideMatching bool) (result
continue
}
}
if newestWins {
partsL := bytes.Split(rl, []byte(" "))
verL := string(partsL[2])
partsR := bytes.Split(rr, []byte(" "))
verR := string(partsR[2])
vres := CompareVersions(verL, verR)
if vres <= 0 {
result.Refs = append(result.Refs, r.Refs[ir])
il++
ir++
continue
}
}
// otherwise append smallest of two
if rel < 0 {