mirror of
https://github.com/aptly-dev/aptly.git
synced 2026-06-03 05:00:56 +00:00
snapshot: first pass at newest-wins functionality.
This commit is contained in:
+3
-3
@@ -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 {
|
||||
|
||||
@@ -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
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user