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 return err
} }
if repo.RefList() != nil { if repo.RefList() != nil {
existingPackageRefs = existingPackageRefs.Merge(repo.RefList(), false) existingPackageRefs = existingPackageRefs.Merge(repo.RefList(), false, false)
} }
return nil return nil
}) })
@@ -41,7 +41,7 @@ func aptlyDbCleanup(cmd *commander.Command, args []string) error {
return err return err
} }
if repo.RefList() != nil { if repo.RefList() != nil {
existingPackageRefs = existingPackageRefs.Merge(repo.RefList(), false) existingPackageRefs = existingPackageRefs.Merge(repo.RefList(), false, false)
} }
return nil return nil
}) })
@@ -54,7 +54,7 @@ func aptlyDbCleanup(cmd *commander.Command, args []string) error {
if err != nil { if err != nil {
return err return err
} }
existingPackageRefs = existingPackageRefs.Merge(snapshot.RefList(), false) existingPackageRefs = existingPackageRefs.Merge(snapshot.RefList(), false, false)
return nil return nil
}) })
if err != nil { if err != nil {
+1 -1
View File
@@ -31,7 +31,7 @@ func aptlySnapshotMerge(cmd *commander.Command, args []string) error {
result := sources[0].RefList() result := sources[0].RefList()
for i := 1; i < len(sources); i++ { 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)) sourceDescription := make([]string, len(sources))
+22 -3
View File
@@ -219,9 +219,13 @@ func (l *PackageRefList) Diff(r *PackageRefList, packageCollection *PackageColle
return return
} }
// Merge merges reflist r into current reflist. If overrideMatching, merge replaces matching packages (by architecture/name) // Merge merges reflist r into current reflist. If overrideMatching, merge
// with reference from r, otherwise all packages are saved. // replaces matching packages (by architecture/name) with reference from r. If
func (l *PackageRefList) Merge(r *PackageRefList, overrideMatching bool) (result *PackageRefList) { // 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 // pointer to left and right reflists
il, ir := 0, 0 il, ir := 0, 0
// length of reflists // length of reflists
@@ -269,6 +273,21 @@ func (l *PackageRefList) Merge(r *PackageRefList, overrideMatching bool) (result
continue 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 // otherwise append smallest of two
if rel < 0 { if rel < 0 {