From 403c7272cd33fbcbde06aa7d6c78fa54d4b9cba6 Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Sat, 31 Jan 2015 21:27:26 +0300 Subject: [PATCH] When loading package index for the mirror, ignore duplicate packages (and print about them). #183 --- deb/list.go | 7 ++++++- deb/remote.go | 6 +++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/deb/list.go b/deb/list.go index f6d0918b..dc59d232 100644 --- a/deb/list.go +++ b/deb/list.go @@ -38,6 +38,11 @@ type PackageList struct { providesIndex map[string][]*Package } +// PackageConflictError means that package can't be added to the list due to error +type PackageConflictError struct { + error +} + // Verify interface var ( _ sort.Interface = &PackageList{} @@ -90,7 +95,7 @@ func (l *PackageList) Add(p *Package) error { existing, ok := l.packages[key] if ok { if !existing.Equals(p) { - return fmt.Errorf("conflict in package %s", p) + return &PackageConflictError{fmt.Errorf("conflict in package %s", p)} } return nil } diff --git a/deb/remote.go b/deb/remote.go index 67169581..881fe292 100644 --- a/deb/remote.go +++ b/deb/remote.go @@ -468,7 +468,11 @@ func (repo *RemoteRepo) DownloadPackageIndexes(progress aptly.Progress, d aptly. } err = repo.packageList.Add(p) if err != nil { - return err + if _, ok := err.(*PackageConflictError); ok { + progress.ColoredPrintf("@y[!]@| @!skipping package %s: duplicate in packages index@|", p) + } else { + return err + } } err = collectionFactory.PackageCollection().Update(p)