From 769e984ef4cb905e7e6dd1624ae9b1777605f6cf Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Tue, 3 Sep 2019 12:57:44 +0300 Subject: [PATCH] Fix issues with `progress == nil` causing panics Part of PR #459 This prepares for more methods to be exposed via the API. --- deb/remote.go | 20 ++++++++++++++------ http/download.go | 10 ++++++++-- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/deb/remote.go b/deb/remote.go index 7ecd3e755..f61cf174f 100644 --- a/deb/remote.go +++ b/deb/remote.go @@ -505,8 +505,10 @@ func (repo *RemoteRepo) DownloadPackageIndexes(progress aptly.Progress, d aptly. } defer packagesFile.Close() - stat, _ := packagesFile.Stat() - progress.InitBar(stat.Size(), true) + if progress != nil { + stat, _ := packagesFile.Stat() + progress.InitBar(stat.Size(), true) + } sreader := NewControlFileReader(packagesReader, false, isInstaller) @@ -519,8 +521,10 @@ func (repo *RemoteRepo) DownloadPackageIndexes(progress aptly.Progress, d aptly. break } - off, _ := packagesFile.Seek(0, 1) - progress.SetBar(int(off)) + if progress != nil { + off, _ := packagesFile.Seek(0, 1) + progress.SetBar(int(off)) + } var p *Package @@ -541,13 +545,17 @@ func (repo *RemoteRepo) DownloadPackageIndexes(progress aptly.Progress, d aptly. } err = repo.packageList.Add(p) if _, ok := err.(*PackageConflictError); ok { - progress.ColoredPrintf("@y[!]@| @!skipping package %s: duplicate in packages index@|", p) + if progress != nil { + progress.ColoredPrintf("@y[!]@| @!skipping package %s: duplicate in packages index@|", p) + } } else if err != nil { return err } } - progress.ShutdownBar() + if progress != nil { + progress.ShutdownBar() + } } return nil diff --git a/http/download.go b/http/download.go index 45c297b04..402ac49e3 100644 --- a/http/download.go +++ b/http/download.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "io" + "io/ioutil" "net" "net/http" "net/url" @@ -53,11 +54,16 @@ func NewDownloader(downLimit int64, maxTries int, progress aptly.Progress) aptly }, } + progressWriter := io.Writer(progress) + if progress == nil { + progressWriter = ioutil.Discard + } + downloader.client.CheckRedirect = downloader.checkRedirect if downLimit > 0 { - downloader.aggWriter = flowrate.NewWriter(progress, downLimit) + downloader.aggWriter = flowrate.NewWriter(progressWriter, downLimit) } else { - downloader.aggWriter = progress + downloader.aggWriter = progressWriter } return downloader