mirror of
https://github.com/aptly-dev/aptly.git
synced 2026-06-02 04:50:49 +00:00
15618c8ea8
There are two fixes here: 1. Abort package download immediately as ^C is pressed. 2. Import all the already downloaded files into package pool, so that next time mirror is updated, aptly won't download them once again.
49 lines
1.3 KiB
Go
49 lines
1.3 KiB
Go
package http
|
|
|
|
import (
|
|
"context"
|
|
"io/ioutil"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/smira/aptly/aptly"
|
|
"github.com/smira/aptly/utils"
|
|
)
|
|
|
|
// DownloadTemp starts new download to temporary file and returns File
|
|
//
|
|
// Temporary file would be already removed, so no need to cleanup
|
|
func DownloadTemp(ctx context.Context, downloader aptly.Downloader, url string) (*os.File, error) {
|
|
return DownloadTempWithChecksum(ctx, downloader, url, nil, false, 1)
|
|
}
|
|
|
|
// DownloadTempWithChecksum is a DownloadTemp with checksum verification
|
|
//
|
|
// Temporary file would be already removed, so no need to cleanup
|
|
func DownloadTempWithChecksum(ctx context.Context, downloader aptly.Downloader, url string, expected *utils.ChecksumInfo, ignoreMismatch bool, maxTries int) (*os.File, error) {
|
|
tempdir, err := ioutil.TempDir(os.TempDir(), "aptly")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer os.RemoveAll(tempdir)
|
|
|
|
tempfile := filepath.Join(tempdir, "buffer")
|
|
|
|
if expected != nil && downloader.GetProgress() != nil {
|
|
downloader.GetProgress().InitBar(expected.Size, true)
|
|
defer downloader.GetProgress().ShutdownBar()
|
|
}
|
|
|
|
err = downloader.DownloadWithChecksum(ctx, url, tempfile, expected, ignoreMismatch, maxTries)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
file, err := os.Open(tempfile)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return file, nil
|
|
}
|