mirror of
https://github.com/aptly-dev/aptly.git
synced 2026-06-04 05:10:40 +00:00
snapshot: explicity call FilterLatestRefs() where needed rather than calling from Merge()
This commit is contained in:
+3
-3
@@ -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, false)
|
existingPackageRefs = existingPackageRefs.Merge(repo.RefList(), 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, false)
|
existingPackageRefs = existingPackageRefs.Merge(repo.RefList(), 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, false)
|
existingPackageRefs = existingPackageRefs.Merge(snapshot.RefList(), false)
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -29,15 +29,16 @@ func aptlySnapshotMerge(cmd *commander.Command, args []string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
latest := context.flags.Lookup("latest").Value.Get().(bool)
|
latest := context.flags.Lookup("latest").Value.Get().(bool)
|
||||||
|
overrideMatching := !latest
|
||||||
|
|
||||||
result := sources[0].RefList()
|
result := sources[0].RefList()
|
||||||
|
|
||||||
for i := 1; i < len(sources); i++ {
|
for i := 1; i < len(sources); i++ {
|
||||||
if latest {
|
result = result.Merge(sources[i].RefList(), overrideMatching)
|
||||||
result = result.Merge(sources[i].RefList(), false, true)
|
}
|
||||||
} else {
|
|
||||||
result = result.Merge(sources[i].RefList(), true, false)
|
if latest {
|
||||||
}
|
result = deb.FilterLatestRefs(result)
|
||||||
}
|
}
|
||||||
|
|
||||||
sourceDescription := make([]string, len(sources))
|
sourceDescription := make([]string, len(sources))
|
||||||
|
|||||||
+17
-24
@@ -220,12 +220,9 @@ func (l *PackageRefList) Diff(r *PackageRefList, packageCollection *PackageColle
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Merge merges reflist r into current reflist. If overrideMatching, merge
|
// Merge merges reflist r into current reflist. If overrideMatching, merge
|
||||||
// replaces matching packages (by architecture/name) with reference from r. If
|
// replaces matching packages (by architecture/name) with reference from r.
|
||||||
// latestWins, compare versions between common packages and take the latest from
|
// Otherwise, all packages are saved.
|
||||||
// the set. Otherwise, all packages are saved.
|
func (l *PackageRefList) Merge(r *PackageRefList, overrideMatching bool) (result *PackageRefList) {
|
||||||
func (l *PackageRefList) Merge(r *PackageRefList, overrideMatching bool,
|
|
||||||
latestWins 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
|
||||||
@@ -285,24 +282,18 @@ func (l *PackageRefList) Merge(r *PackageRefList, overrideMatching bool,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Filter results down to the latest packages only if requested
|
|
||||||
if latestWins {
|
|
||||||
result = FilterLatestPackages(result)
|
|
||||||
}
|
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// FilterLatestPackages takes in a reflist with potentially multiples of the
|
// FilterLatestRefs takes in a reflist with potentially multiples of the same
|
||||||
// same packages and returns a reflist containing only the latest of each
|
// packages and returns a reflist containing only the latest of each package.
|
||||||
// package. This implements a "latest wins" approach which can be used while
|
// This implements a "latest wins" approach which can be used while merging two
|
||||||
// merging two or more snapshots together.
|
// or more snapshots together.
|
||||||
func FilterLatestPackages(r *PackageRefList) *PackageRefList {
|
func FilterLatestRefs(r *PackageRefList) *PackageRefList {
|
||||||
// A running tab of latest seen package refs.
|
// A running tab of latest seen package refs.
|
||||||
latestRefs := make(map[string]int)
|
latestRefs := make(map[string]int)
|
||||||
|
|
||||||
i := 0
|
for i := 0; i < len(r.Refs); i++ {
|
||||||
for _ = range r.Refs {
|
|
||||||
partsL := bytes.Split(r.Refs[i], []byte(" "))
|
partsL := bytes.Split(r.Refs[i], []byte(" "))
|
||||||
archL, nameL, verL := partsL[0][1:], partsL[1], partsL[2]
|
archL, nameL, verL := partsL[0][1:], partsL[1], partsL[2]
|
||||||
pkgId := string(nameL) + "." + string(archL)
|
pkgId := string(nameL) + "." + string(archL)
|
||||||
@@ -310,7 +301,6 @@ func FilterLatestPackages(r *PackageRefList) *PackageRefList {
|
|||||||
// If the package hasn't been seen before, add it and advance.
|
// If the package hasn't been seen before, add it and advance.
|
||||||
if _, ok := latestRefs[pkgId]; !ok {
|
if _, ok := latestRefs[pkgId]; !ok {
|
||||||
latestRefs[pkgId] = i
|
latestRefs[pkgId] = i
|
||||||
i++
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -320,13 +310,16 @@ func FilterLatestPackages(r *PackageRefList) *PackageRefList {
|
|||||||
vres := CompareVersions(string(verL), string(verR))
|
vres := CompareVersions(string(verL), string(verR))
|
||||||
|
|
||||||
// Remove the older or duplicate refs from the result
|
// Remove the older or duplicate refs from the result
|
||||||
if vres <= 0 {
|
if vres > 0 {
|
||||||
r.Refs = append(r.Refs[0:i], r.Refs[i+1:]...)
|
old := latestRefs[pkgId]
|
||||||
latestRefs[pkgId] = i
|
r.Refs = append(r.Refs[0:old], r.Refs[old+1:]...)
|
||||||
|
latestRefs[pkgId] = i - 1
|
||||||
} else {
|
} else {
|
||||||
oi := latestRefs[pkgId]
|
r.Refs = append(r.Refs[0:i], r.Refs[i+1:]...)
|
||||||
r.Refs = append(r.Refs[0:oi], r.Refs[oi+1:]...)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Compensate for the reduced set
|
||||||
|
i -= 1
|
||||||
}
|
}
|
||||||
|
|
||||||
return r
|
return r
|
||||||
|
|||||||
Reference in New Issue
Block a user