diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e82307bb..fa9dd64c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,10 +30,10 @@ jobs: GOPROXY: "https://proxy.golang.org" steps: - - name: "Install Packages" + - name: "Install Test Packages" run: | sudo apt-get update - sudo apt-get install -y --no-install-recommends graphviz gnupg2 gpgv2 git gcc make devscripts python3 python3-requests-unixsocket python3-termcolor python3-swiftclient python3-boto python3-azure-storage python3-etcd3 python3-plyvel flake8 + sudo apt-get install -y --no-install-recommends graphviz gnupg2 gpgv2 git gcc make devscripts python3 python3-requests-unixsocket python3-termcolor python3-swiftclient python3-boto python3-azure-storage python3-etcd3 python3-plyvel flake8 faketime - name: "Checkout Repository" uses: actions/checkout@v4 @@ -93,7 +93,7 @@ jobs: - name: "Merge Code Coverage" run: | - go install github.com/wadey/gocovmerge@latest + go install github.com/wadey/gocovmerge@v0.0.0-20160331181800-b5bfa59ec0ad ~/go/bin/gocovmerge unit.out ${{ runner.temp }}/*.out > coverage.txt - name: "Upload Code Coverage" @@ -139,7 +139,7 @@ jobs: APT_LISTCHANGES_FRONTEND: none DEBIAN_FRONTEND: noninteractive steps: - - name: "Install packages" + - name: "Install Build Packages" run: | apt-get update apt-get install -y --no-install-recommends make ca-certificates git curl build-essential devscripts dh-golang jq bash-completion lintian \ @@ -207,6 +207,23 @@ jobs: run: | .github/workflows/scripts/upload-artifacts.sh release ${{ matrix.suite }} + - name: "Get aptly version" + env: + FORCE_CI: ${{ steps.force_ci.outputs.FORCE_CI }} + run: | + aptlyver=$(make -s version) + echo "Aptly Version: $aptlyver" + echo "VERSION=$aptlyver" >> $GITHUB_OUTPUT + id: releaseversion + + - name: "Upload CI Artifacts" + if: github.ref != 'refs/heads/master' && !startsWith(github.event.ref, 'refs/tags') + uses: actions/upload-artifact@v4 + with: + name: aptly_${{ steps.releaseversion.outputs.VERSION }}_${{ matrix.suite }}_${{ matrix.arch }} + path: build/ + retention-days: 7 + ci-binary-build: name: "Build" needs: test @@ -267,6 +284,15 @@ jobs: path: build/aptly_${{ steps.releaseversion.outputs.VERSION }}_${{ matrix.goos }}_${{ matrix.goarch }}.zip compression-level: 0 # no compression + - name: "Upload CI Artifacts" + uses: actions/upload-artifact@v4 + if: "!startsWith(github.event.ref, 'refs/tags')" + with: + name: aptly_${{ steps.releaseversion.outputs.VERSION }}_${{ matrix.goos }}_${{ matrix.goarch }} + path: build/aptly_${{ steps.releaseversion.outputs.VERSION }}_${{ matrix.goos }}_${{ matrix.goarch }}.zip + compression-level: 0 # no compression + retention-days: 7 + gh-release: name: "Github Release" runs-on: ubuntu-latest diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml index 8da4335a..dad2bdc5 100644 --- a/.github/workflows/golangci-lint.yml +++ b/.github/workflows/golangci-lint.yml @@ -44,7 +44,7 @@ jobs: # Require: The version of golangci-lint to use. # When `install-mode` is `binary` (default) the value can be v1.2 or v1.2.3 or `latest` to use the latest version. # When `install-mode` is `goinstall` the value can be v1.2.3, `latest`, or the hash of a commit. - version: v1.54.1 + version: v1.64.5 # Optional: working directory, useful for monorepos # working-directory: somedir diff --git a/.golangci.yml b/.golangci.yml index a8060193..1e62d33b 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,16 +1,11 @@ -run: - tests: false - - +version: "2" linters: - disable-all: true - enable: - - goconst - - gofmt - - goimports - - govet - - ineffassign - - misspell - - revive - - staticcheck - - vetshadow + settings: + staticcheck: + checks: + - "all" + - "-QF1004" # could use strings.ReplaceAll instead + - "-QF1012" # Use fmt.Fprintf(...) instead of WriteString(fmt.Sprintf(...)) + - "-QF1003" # could use tagged switch + - "-ST1000" # at least one file in a package should have a package comment + - "-QF1001" # could apply De Morgan's law diff --git a/AUTHORS b/AUTHORS index d62f1573..e9bb9f38 100644 --- a/AUTHORS +++ b/AUTHORS @@ -68,3 +68,4 @@ List of contributors, in chronological order: * Blake Kostner (https://github.com/btkostner) * Leigh London (https://github.com/leighlondon) * Gordian Schoenherr (https://github.com/schoenherrg) +* Silke Hofstra (https://github.com/silkeh) diff --git a/Makefile b/Makefile index 680c738c..ffe2e8a3 100644 --- a/Makefile +++ b/Makefile @@ -2,13 +2,18 @@ GOPATH=$(shell go env GOPATH) VERSION=$(shell make -s version) PYTHON?=python3 BINPATH?=$(GOPATH)/bin -GOLANGCI_LINT_VERSION=v1.54.1 # version supporting go 1.19 +GOLANGCI_LINT_VERSION=v2.0.2 # version supporting go 1.24 COVERAGE_DIR?=$(shell mktemp -d) GOOS=$(shell go env GOHOSTOS) GOARCH=$(shell go env GOHOSTARCH) -# Uncomment to update system test gold files -# CAPTURE := "--capture" +# Unit Tests and some sysmte tests rely on expired certificates, turn back the time +export TEST_FAKETIME := 2025-01-02 03:04:05 + +# export CAPUTRE=1 for regenrating test gold files +ifeq ($(CAPTURE),1) +CAPTURE_ARG := --capture +endif help: ## Print this help @grep -E '^[a-zA-Z][a-zA-Z0-9_-]*:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' @@ -50,7 +55,7 @@ swagger-install: echo "// @version $(VERSION)" >> docs/swagger.conf azurite-start: - azurite -l /tmp/aptly-azurite & \ + azurite -l /tmp/aptly-azurite > ~/.azurite.log 2>&1 & \ echo $$! > ~/.azurite.pid azurite-stop: @@ -69,9 +74,9 @@ flake8: ## run flake8 on system test python files lint: prepare # Install golangci-lint - @test -f $(BINPATH)/golangci-lint || go install github.com/golangci/golangci-lint/cmd/golangci-lint@$(GOLANGCI_LINT_VERSION) + @test -f $(BINPATH)/golangci-lint || go install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@$(GOLANGCI_LINT_VERSION) # Running lint - @PATH=$(BINPATH)/:$(PATH) golangci-lint run + @NO_COLOR=true PATH=$(BINPATH)/:$(PATH) golangci-lint run --max-issues-per-linter=0 --max-same-issues=0 build: prepare swagger ## Build aptly @@ -84,11 +89,11 @@ install: # go install -v @out=`mktemp`; if ! go install -v > $$out 2>&1; then cat $$out; rm -f $$out; echo "\nBuild failed\n"; exit 1; else rm -f $$out; fi -test: prepare swagger etcd-install ## Run unit tests +test: prepare swagger etcd-install ## Run unit tests (add TEST=regex to specify which tests to run) @echo "\e[33m\e[1mStarting etcd ...\e[0m" @mkdir -p /tmp/aptly-etcd-data; system/t13_etcd/start-etcd.sh > /tmp/aptly-etcd-data/etcd.log 2>&1 & @echo "\e[33m\e[1mRunning go test ...\e[0m" - go test -v ./... -gocheck.v=true -coverprofile=unit.out; echo $$? > .unit-test.ret + faketime "$(TEST_FAKETIME)" go test -v ./... -gocheck.v=true -check.f "$(TEST)" -coverprofile=unit.out; echo $$? > .unit-test.ret @echo "\e[33m\e[1mStopping etcd ...\e[0m" @pid=`cat /tmp/etcd.pid`; kill $$pid @rm -f /tmp/aptly-etcd-data/etcd.log @@ -102,7 +107,7 @@ system-test: prepare swagger etcd-install ## Run system tests if [ ! -e ~/aptly-fixture-pool ]; then git clone https://github.com/aptly-dev/aptly-fixture-pool.git ~/aptly-fixture-pool/; fi test -f ~/etcd.db || (curl -o ~/etcd.db.xz http://repo.aptly.info/system-tests/etcd.db.xz && xz -d ~/etcd.db.xz) # Run system tests - PATH=$(BINPATH)/:$(PATH) && FORCE_COLOR=1 $(PYTHON) system/run.py --long --coverage-dir $(COVERAGE_DIR) $(CAPTURE) $(TEST) + PATH=$(BINPATH)/:$(PATH) FORCE_COLOR=1 $(PYTHON) system/run.py --long --coverage-dir $(COVERAGE_DIR) $(CAPTURE_ARG) $(TEST) bench: @echo "\e[33m\e[1mRunning benchmark ...\e[0m" @@ -162,6 +167,9 @@ binaries: prepare swagger ## Build binary releases (FreeBSD, macOS, Linux gener docker-image: ## Build aptly-dev docker image @docker build -f system/Dockerfile . -t aptly-dev +docker-image-no-cache: ## Build aptly-dev docker image (no cache) + @docker build --no-cache -f system/Dockerfile . -t aptly-dev + docker-build: ## Build aptly in docker container @docker run -it --rm -v ${PWD}:/work/src aptly-dev /work/src/system/docker-wrapper build @@ -171,13 +179,13 @@ docker-shell: ## Run aptly and other commands in docker container docker-deb: ## Build debian packages in docker container @docker run -it --rm -v ${PWD}:/work/src aptly-dev /work/src/system/docker-wrapper dpkg DEBARCH=amd64 -docker-unit-test: ## Run unit tests in docker container +docker-unit-test: ## Run unit tests in docker container (add TEST=regex to specify which tests to run) @docker run -it --rm -v ${PWD}:/work/src aptly-dev /work/src/system/docker-wrapper \ azurite-start \ AZURE_STORAGE_ENDPOINT=http://127.0.0.1:10000/devstoreaccount1 \ AZURE_STORAGE_ACCOUNT=devstoreaccount1 \ AZURE_STORAGE_ACCESS_KEY="Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==" \ - test \ + test TEST=$(TEST) \ azurite-stop docker-system-test: ## Run system tests in docker container (add TEST=t04_mirror or TEST=UpdateMirror26Test to run only specific tests) @@ -186,6 +194,8 @@ docker-system-test: ## Run system tests in docker container (add TEST=t04_mirro AZURE_STORAGE_ENDPOINT=http://127.0.0.1:10000/devstoreaccount1 \ AZURE_STORAGE_ACCOUNT=devstoreaccount1 \ AZURE_STORAGE_ACCESS_KEY="Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==" \ + AWS_ACCESS_KEY_ID=$(AWS_ACCESS_KEY_ID) \ + AWS_SECRET_ACCESS_KEY=$(AWS_SECRET_ACCESS_KEY) \ system-test TEST=$(TEST) \ azurite-stop diff --git a/Releasing.md b/Releasing.md index b1105c85..5176ff63 100644 --- a/Releasing.md +++ b/Releasing.md @@ -12,5 +12,6 @@ git push origin v$version master ``` - run swagger locally (`make docker-serve`) - copy generated docs/swagger.json to https://github.com/aptly-dev/www.aptly.info/tree/master/static/swagger/aptly_1.x.y.json -- releae www.aptly.info +- add new version to select tag in content/doc/api/swagger.md line 48 +- push commit to master - create release announcement on https://github.com/aptly-dev/aptly/discussions diff --git a/api/api.go b/api/api.go index 2e11c022..ab8c8ba5 100644 --- a/api/api.go +++ b/api/api.go @@ -41,7 +41,10 @@ type aptlyVersion struct { // @Success 200 {object} aptlyVersion // @Router /api/version [get] func apiVersion(c *gin.Context) { - c.JSON(200, gin.H{"Version": aptly.Version}) + version := aptlyVersion{ + Version: aptly.Version, + } + c.JSON(200, version) } type aptlyStatus struct { @@ -67,7 +70,8 @@ func apiReady(isReady *atomic.Value) func(*gin.Context) { return } - c.JSON(200, gin.H{"Status": "Aptly is ready"}) + status := aptlyStatus{Status: "Aptly is ready"} + c.JSON(200, status) } } @@ -165,7 +169,7 @@ func runTaskInBackground(name string, resources []string, proc task.Process) (ta return nil, err } - defer releaseDatabaseConnection() + defer func() { _ = releaseDatabaseConnection() }() return proc(out, detail) }) } @@ -174,18 +178,18 @@ func truthy(value interface{}) bool { if value == nil { return false } - switch value.(type) { + switch v := value.(type) { case string: - switch strings.ToLower(value.(string)) { + switch strings.ToLower(v) { case "n", "no", "f", "false", "0", "off": return false default: return true } case int: - return !(value.(int) == 0) + return v != 0 case bool: - return value.(bool) + return v } return true } @@ -210,11 +214,11 @@ func maybeRunTaskInBackground(c *gin.Context, name string, resources []string, p } // wait for task to finish - context.TaskList().WaitForTaskByID(task.ID) + _, _ = context.TaskList().WaitForTaskByID(task.ID) retValue, _ := context.TaskList().GetTaskReturnValueByID(task.ID) err, _ := context.TaskList().GetTaskErrorByID(task.ID) - context.TaskList().DeleteTaskByID(task.ID) + _, _ = context.TaskList().DeleteTaskByID(task.ID) if err != nil { AbortWithJSONError(c, retValue.Code, err) return @@ -282,11 +286,11 @@ func showPackages(c *gin.Context, reflist *deb.PackageRefList, collectionFactory // filter packages by version if c.Request.URL.Query().Get("maximumVersion") == "1" { list.PrepareIndex() - list.ForEach(func(p *deb.Package) error { + _ = list.ForEach(func(p *deb.Package) error { versionQ, err := query.Parse(fmt.Sprintf("Name (%s), $Version (<= %s)", p.Name, p.Version)) if err != nil { fmt.Println("filter packages by version, query string parse err: ", err) - c.AbortWithError(500, fmt.Errorf("unable to parse %s maximum version query string: %s", p.Name, err)) + _ = c.AbortWithError(500, fmt.Errorf("unable to parse %s maximum version query string: %s", p.Name, err)) } else { tmpList, err := list.Filter(deb.FilterOptions{ Queries: []deb.PackageQuery{versionQ}, @@ -294,15 +298,15 @@ func showPackages(c *gin.Context, reflist *deb.PackageRefList, collectionFactory if err == nil { if tmpList.Len() > 0 { - tmpList.ForEach(func(tp *deb.Package) error { + _ = tmpList.ForEach(func(tp *deb.Package) error { list.Remove(tp) return nil }) - list.Add(p) + _ = list.Add(p) } } else { fmt.Println("filter packages by version, filter err: ", err) - c.AbortWithError(500, fmt.Errorf("unable to get %s maximum version: %s", p.Name, err)) + _ = c.AbortWithError(500, fmt.Errorf("unable to get %s maximum version: %s", p.Name, err)) } } @@ -311,7 +315,7 @@ func showPackages(c *gin.Context, reflist *deb.PackageRefList, collectionFactory } if c.Request.URL.Query().Get("format") == "details" { - list.ForEach(func(p *deb.Package) error { + _ = list.ForEach(func(p *deb.Package) error { result = append(result, p) return nil }) @@ -322,7 +326,7 @@ func showPackages(c *gin.Context, reflist *deb.PackageRefList, collectionFactory } } -func AbortWithJSONError(c *gin.Context, code int, err error) *gin.Error { +func AbortWithJSONError(c *gin.Context, code int, err error) { c.Writer.Header().Set("Content-Type", "application/json; charset=utf-8") - return c.AbortWithError(code, err) + _ = c.AbortWithError(code, err) } diff --git a/api/api_test.go b/api/api_test.go index 8c62b31d..f9f3b7b1 100644 --- a/api/api_test.go +++ b/api/api_test.go @@ -24,14 +24,14 @@ func Test(t *testing.T) { TestingT(t) } -type ApiSuite struct { +type APISuite struct { context *ctx.AptlyContext flags *flag.FlagSet configFile *os.File router http.Handler } -var _ = Suite(&ApiSuite{}) +var _ = Suite(&APISuite{}) func createTestConfig() *os.File { file, err := os.CreateTemp("", "aptly") @@ -45,11 +45,11 @@ func createTestConfig() *os.File { if err != nil { return nil } - file.Write(jsonString) + _, _ = file.Write(jsonString) return file } -func (s *ApiSuite) setupContext() error { +func (s *APISuite) setupContext() error { aptly.Version = "testVersion" file := createTestConfig() if nil == file { @@ -75,23 +75,23 @@ func (s *ApiSuite) setupContext() error { return nil } -func (s *ApiSuite) SetUpSuite(c *C) { +func (s *APISuite) SetUpSuite(c *C) { err := s.setupContext() c.Assert(err, IsNil) } -func (s *ApiSuite) TearDownSuite(c *C) { - os.Remove(s.configFile.Name()) +func (s *APISuite) TearDownSuite(c *C) { + _ = os.Remove(s.configFile.Name()) s.context.Shutdown() } -func (s *ApiSuite) SetUpTest(c *C) { +func (s *APISuite) SetUpTest(c *C) { } -func (s *ApiSuite) TearDownTest(c *C) { +func (s *APISuite) TearDownTest(c *C) { } -func (s *ApiSuite) HTTPRequest(method string, url string, body io.Reader) (*httptest.ResponseRecorder, error) { +func (s *APISuite) HTTPRequest(method string, url string, body io.Reader) (*httptest.ResponseRecorder, error) { w := httptest.NewRecorder() req, err := http.NewRequest(method, url, body) if err != nil { @@ -102,32 +102,32 @@ func (s *ApiSuite) HTTPRequest(method string, url string, body io.Reader) (*http return w, nil } -func (s *ApiSuite) TestGinRunsInReleaseMode(c *C) { +func (s *APISuite) TestGinRunsInReleaseMode(c *C) { c.Check(gin.Mode(), Equals, gin.ReleaseMode) } -func (s *ApiSuite) TestGetVersion(c *C) { +func (s *APISuite) TestGetVersion(c *C) { response, err := s.HTTPRequest("GET", "/api/version", nil) c.Assert(err, IsNil) c.Check(response.Code, Equals, 200) c.Check(response.Body.String(), Matches, "{\"Version\":\""+aptly.Version+"\"}") } -func (s *ApiSuite) TestGetReadiness(c *C) { +func (s *APISuite) TestGetReadiness(c *C) { response, err := s.HTTPRequest("GET", "/api/ready", nil) c.Assert(err, IsNil) c.Check(response.Code, Equals, 200) c.Check(response.Body.String(), Matches, "{\"Status\":\"Aptly is ready\"}") } -func (s *ApiSuite) TestGetHealthiness(c *C) { +func (s *APISuite) TestGetHealthiness(c *C) { response, err := s.HTTPRequest("GET", "/api/healthy", nil) c.Assert(err, IsNil) c.Check(response.Code, Equals, 200) c.Check(response.Body.String(), Matches, "{\"Status\":\"Aptly is healthy\"}") } -func (s *ApiSuite) TestGetMetrics(c *C) { +func (s *APISuite) TestGetMetrics(c *C) { response, err := s.HTTPRequest("GET", "/api/metrics", nil) c.Assert(err, IsNil) c.Check(response.Code, Equals, 200) @@ -141,7 +141,7 @@ func (s *ApiSuite) TestGetMetrics(c *C) { c.Check(b, Matches, ".*aptly_build_info.*version=\"testVersion\".*") } -func (s *ApiSuite) TestRepoCreate(c *C) { +func (s *APISuite) TestRepoCreate(c *C) { body, err := json.Marshal(gin.H{ "Name": "dummy", }) @@ -150,7 +150,7 @@ func (s *ApiSuite) TestRepoCreate(c *C) { c.Assert(err, IsNil) } -func (s *ApiSuite) TestTruthy(c *C) { +func (s *APISuite) TestTruthy(c *C) { c.Check(truthy("no"), Equals, false) c.Check(truthy("n"), Equals, false) c.Check(truthy("off"), Equals, false) diff --git a/api/db.go b/api/db.go index 259a94aa..4abcab07 100644 --- a/api/db.go +++ b/api/db.go @@ -21,7 +21,7 @@ import ( // @Success 200 {object} string "Output" // @Failure 404 {object} Error "Not Found" // @Router /api/db/cleanup [post] -func apiDbCleanup(c *gin.Context) { +func apiDBCleanup(c *gin.Context) { resources := []string{string(task.AllResourcesKey)} maybeRunTaskInBackground(c, "Clean up db", resources, func(out aptly.Progress, detail *task.Detail) (*task.ProcessReturnValue, error) { var err error @@ -109,8 +109,8 @@ func apiDbCleanup(c *gin.Context) { if toDelete.Len() > 0 { batch := db.CreateBatch() - toDelete.ForEach(func(ref []byte) error { - collectionFactory.PackageCollection().DeleteByKey(ref, batch) + _ = toDelete.ForEach(func(ref []byte) error { + _ = collectionFactory.PackageCollection().DeleteByKey(ref, batch) return nil }) diff --git a/api/files.go b/api/files.go index 2d042a5d..7c6ad54d 100644 --- a/api/files.go +++ b/api/files.go @@ -122,7 +122,7 @@ func apiFilesUpload(c *gin.Context) { AbortWithJSONError(c, 500, err) return } - defer src.Close() + defer func() { _ = src.Close() }() destPath := filepath.Join(path, filepath.Base(file.Filename)) dst, err := os.Create(destPath) @@ -130,7 +130,7 @@ func apiFilesUpload(c *gin.Context) { AbortWithJSONError(c, 500, err) return } - defer dst.Close() + defer func() { _ = dst.Close() }() _, err = io.Copy(dst, src) if err != nil { diff --git a/api/gpg.go b/api/gpg.go index 4ea79b68..47ba1d92 100644 --- a/api/gpg.go +++ b/api/gpg.go @@ -13,26 +13,34 @@ import ( ) type gpgAddKeyParams struct { - // Keyserver, when downloading GpgKeyIDs - Keyserver string `json:"Keyserver" example:"hkp://keyserver.ubuntu.com:80"` - // GpgKeyIDs to download from Keyserver, comma separated list - GpgKeyID string `json:"GpgKeyID" example:"EF0F382A1A7B6500,8B48AD6246925553"` - // Armored gpg public ket, instead of downloading from keyserver - GpgKeyArmor string `json:"GpgKeyArmor" example:""` // Keyring for adding the keys (default: trustedkeys.gpg) Keyring string `json:"Keyring" example:"trustedkeys.gpg"` + + // Add ASCII armored gpg public key, do not download from keyserver + GpgKeyArmor string `json:"GpgKeyArmor" example:""` + + // Keyserver to download keys provided in `GpgKeyID` + Keyserver string `json:"Keyserver" example:"hkp://keyserver.ubuntu.com:80"` + // Keys do download from `Keyserver`, separated by space + GpgKeyID string `json:"GpgKeyID" example:"EF0F382A1A7B6500 8B48AD6246925553"` } // @Summary Add GPG Keys // @Description **Adds GPG keys to aptly keyring** // @Description // @Description Add GPG public keys for veryfing remote repositories for mirroring. +// @Description +// @Description Keys can be added in two ways: +// @Description * By providing the ASCII armord key in `GpgKeyArmor` (leave Keyserver and GpgKeyID empty) +// @Description * By providing a `Keyserver` and one or more key IDs in `GpgKeyID`, separated by space (leave GpgKeyArmor empty) +// @Description // @Tags Mirrors +// @Consume json +// @Param request body gpgAddKeyParams true "Parameters" // @Produce json // @Success 200 {object} string "OK" // @Failure 400 {object} Error "Bad Request" -// @Failure 404 {object} Error "Not Found" -// @Router /api/gpg [post] +// @Router /api/gpg/key [post] func apiGPGAddKey(c *gin.Context) { b := gpgAddKeyParams{} if c.Bind(&b) != nil { @@ -60,7 +68,7 @@ func apiGPGAddKey(c *gin.Context) { AbortWithJSONError(c, 400, err) return } - defer os.RemoveAll(tempdir) + defer func() { _ = os.RemoveAll(tempdir) }() keypath := filepath.Join(tempdir, "key") keyfile, e := os.Create(keypath) diff --git a/api/middleware_test.go b/api/middleware_test.go index 0681785c..4136fbf6 100644 --- a/api/middleware_test.go +++ b/api/middleware_test.go @@ -67,17 +67,17 @@ func (s *MiddlewareSuite) TestJSONMiddleware4xx(c *C) { outC := make(chan string) go func() { var buf bytes.Buffer - io.Copy(&buf, s.logReader) + _, _ = io.Copy(&buf, s.logReader) fmt.Println(buf.String()) outC <- buf.String() }() s.HTTPRequest(http.MethodGet, "/", nil) - s.logWriter.Close() + _ = s.logWriter.Close() capturedOutput := <-outC var jsonMap map[string]interface{} - json.Unmarshal([]byte(capturedOutput), &jsonMap) + _ = json.Unmarshal([]byte(capturedOutput), &jsonMap) if val, ok := jsonMap["level"]; ok { c.Check(val, Equals, "warn") @@ -130,17 +130,17 @@ func (s *MiddlewareSuite) TestJSONMiddleware2xx(c *C) { outC := make(chan string) go func() { var buf bytes.Buffer - io.Copy(&buf, s.logReader) + _, _ = io.Copy(&buf, s.logReader) fmt.Println(buf.String()) outC <- buf.String() }() s.HTTPRequest(http.MethodGet, "/api/healthy", nil) - s.logWriter.Close() + _ = s.logWriter.Close() capturedOutput := <-outC var jsonMap map[string]interface{} - json.Unmarshal([]byte(capturedOutput), &jsonMap) + _ = json.Unmarshal([]byte(capturedOutput), &jsonMap) if val, ok := jsonMap["level"]; ok { c.Check(val, Equals, "info") @@ -153,17 +153,17 @@ func (s *MiddlewareSuite) TestJSONMiddleware5xx(c *C) { outC := make(chan string) go func() { var buf bytes.Buffer - io.Copy(&buf, s.logReader) + _, _ = io.Copy(&buf, s.logReader) fmt.Println(buf.String()) outC <- buf.String() }() s.HTTPRequest(http.MethodGet, "/api/ready", nil) - s.logWriter.Close() + _ = s.logWriter.Close() capturedOutput := <-outC var jsonMap map[string]interface{} - json.Unmarshal([]byte(capturedOutput), &jsonMap) + _ = json.Unmarshal([]byte(capturedOutput), &jsonMap) if val, ok := jsonMap["level"]; ok { c.Check(val, Equals, "error") @@ -176,17 +176,17 @@ func (s *MiddlewareSuite) TestJSONMiddlewareRaw(c *C) { outC := make(chan string) go func() { var buf bytes.Buffer - io.Copy(&buf, s.logReader) + _, _ = io.Copy(&buf, s.logReader) fmt.Println(buf.String()) outC <- buf.String() }() s.HTTPRequest(http.MethodGet, "/api/healthy?test=raw", nil) - s.logWriter.Close() + _ = s.logWriter.Close() capturedOutput := <-outC var jsonMap map[string]interface{} - json.Unmarshal([]byte(capturedOutput), &jsonMap) + _ = json.Unmarshal([]byte(capturedOutput), &jsonMap) fmt.Println(capturedOutput) diff --git a/api/mirror.go b/api/mirror.go index df6ea643..f3dd123a 100644 --- a/api/mirror.go +++ b/api/mirror.go @@ -43,7 +43,7 @@ func apiMirrorsList(c *gin.Context) { collection := collectionFactory.RemoteRepoCollection() result := []*deb.RemoteRepo{} - collection.ForEach(func(repo *deb.RemoteRepo) error { + _ = collection.ForEach(func(repo *deb.RemoteRepo) error { result = append(result, repo) return nil }) @@ -319,7 +319,7 @@ func apiMirrorsPackages(c *gin.Context) { } if c.Request.URL.Query().Get("format") == "details" { - list.ForEach(func(p *deb.Package) error { + _ = list.ForEach(func(p *deb.Package) error { result = append(result, p) return nil }) @@ -491,7 +491,7 @@ func apiMirrorsUpdate(c *gin.Context) { e := context.ReOpenDatabase() if e == nil { remote.MarkAsIdle() - collection.Update(remote) + _ = collection.Update(remote) } }() @@ -579,7 +579,7 @@ func apiMirrorsUpdate(c *gin.Context) { file, e = os.CreateTemp("", task.File.Filename) if e == nil { task.TempDownPath = file.Name() - file.Close() + _ = file.Close() } } if e != nil { @@ -653,7 +653,7 @@ func apiMirrorsUpdate(c *gin.Context) { } log.Info().Msgf("%s: Finalizing download...", b.Name) - remote.FinalizeDownload(collectionFactory, out) + _ = remote.FinalizeDownload(collectionFactory, out) err = collectionFactory.RemoteRepoCollection().Update(remote) if err != nil { return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, fmt.Errorf("unable to update: %s", err) diff --git a/api/mirror_test.go b/api/mirror_test.go index 645e9fe0..8b9b751f 100644 --- a/api/mirror_test.go +++ b/api/mirror_test.go @@ -9,7 +9,7 @@ import ( ) type MirrorSuite struct { - ApiSuite + APISuite } var _ = Suite(&MirrorSuite{}) diff --git a/api/packages_test.go b/api/packages_test.go index 221a5ab1..7972e653 100644 --- a/api/packages_test.go +++ b/api/packages_test.go @@ -5,7 +5,7 @@ import ( ) type PackagesSuite struct { - ApiSuite + APISuite } var _ = Suite(&PackagesSuite{}) diff --git a/api/publish.go b/api/publish.go index e19afb17..1a2b5287 100644 --- a/api/publish.go +++ b/api/publish.go @@ -343,7 +343,7 @@ func apiPublishRepoOrSnapshot(c *gin.Context) { duplicate := collection.CheckDuplicate(published) if duplicate != nil { - collectionFactory.PublishedRepoCollection().LoadComplete(duplicate, collectionFactory) + _ = collectionFactory.PublishedRepoCollection().LoadComplete(duplicate, collectionFactory) return &task.ProcessReturnValue{Code: http.StatusBadRequest, Value: nil}, fmt.Errorf("prefix/distribution already used by another published repo: %s", duplicate) } @@ -471,7 +471,7 @@ func apiPublishUpdateSwitch(c *gin.Context) { maybeRunTaskInBackground(c, taskName, resources, func(out aptly.Progress, _ *task.Detail) (*task.ProcessReturnValue, error) { err = collection.LoadComplete(published, collectionFactory) if err != nil { - return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, fmt.Errorf("Unable to update: %s", err) + return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, fmt.Errorf("unable to update: %s", err) } revision := published.ObtainRevision() @@ -487,12 +487,12 @@ func apiPublishUpdateSwitch(c *gin.Context) { result, err := published.Update(collectionFactory, out) if err != nil { - return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, fmt.Errorf("Unable to update: %s", err) + return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, fmt.Errorf("unable to update: %s", err) } err = published.Publish(context.PackagePool(), context, collectionFactory, signer, out, b.ForceOverwrite, context.SkelPath()) if err != nil { - return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, fmt.Errorf("Unable to update: %s", err) + return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, fmt.Errorf("unable to update: %s", err) } err = collection.Update(published) @@ -625,7 +625,7 @@ func apiPublishAddSource(c *gin.Context) { resources := []string{string(published.Key())} taskName := fmt.Sprintf("Update published %s repository %s/%s", published.SourceKind, published.StoragePrefix(), published.Distribution) - maybeRunTaskInBackground(c, taskName, resources, func(out aptly.Progress, _ *task.Detail) (*task.ProcessReturnValue, error) { + maybeRunTaskInBackground(c, taskName, resources, func(_ aptly.Progress, _ *task.Detail) (*task.ProcessReturnValue, error) { err = collection.Update(published) if err != nil { return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, fmt.Errorf("unable to save to DB: %s", err) @@ -739,7 +739,7 @@ func apiPublishSetSources(c *gin.Context) { resources := []string{string(published.Key())} taskName := fmt.Sprintf("Update published %s repository %s/%s", published.SourceKind, published.StoragePrefix(), published.Distribution) - maybeRunTaskInBackground(c, taskName, resources, func(out aptly.Progress, _ *task.Detail) (*task.ProcessReturnValue, error) { + maybeRunTaskInBackground(c, taskName, resources, func(_ aptly.Progress, _ *task.Detail) (*task.ProcessReturnValue, error) { err = collection.Update(published) if err != nil { return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, fmt.Errorf("unable to save to DB: %s", err) @@ -789,7 +789,7 @@ func apiPublishDropChanges(c *gin.Context) { resources := []string{string(published.Key())} taskName := fmt.Sprintf("Update published %s repository %s/%s", published.SourceKind, published.StoragePrefix(), published.Distribution) - maybeRunTaskInBackground(c, taskName, resources, func(out aptly.Progress, _ *task.Detail) (*task.ProcessReturnValue, error) { + maybeRunTaskInBackground(c, taskName, resources, func(_ aptly.Progress, _ *task.Detail) (*task.ProcessReturnValue, error) { err = collection.Update(published) if err != nil { return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, fmt.Errorf("unable to save to DB: %s", err) @@ -869,7 +869,7 @@ func apiPublishUpdateSource(c *gin.Context) { resources := []string{string(published.Key())} taskName := fmt.Sprintf("Update published %s repository %s/%s", published.SourceKind, published.StoragePrefix(), published.Distribution) - maybeRunTaskInBackground(c, taskName, resources, func(out aptly.Progress, _ *task.Detail) (*task.ProcessReturnValue, error) { + maybeRunTaskInBackground(c, taskName, resources, func(_ aptly.Progress, _ *task.Detail) (*task.ProcessReturnValue, error) { err = collection.Update(published) if err != nil { return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, fmt.Errorf("unable to save to DB: %s", err) @@ -932,7 +932,7 @@ func apiPublishRemoveSource(c *gin.Context) { resources := []string{string(published.Key())} taskName := fmt.Sprintf("Update published %s repository %s/%s", published.SourceKind, published.StoragePrefix(), published.Distribution) - maybeRunTaskInBackground(c, taskName, resources, func(out aptly.Progress, _ *task.Detail) (*task.ProcessReturnValue, error) { + maybeRunTaskInBackground(c, taskName, resources, func(_ aptly.Progress, _ *task.Detail) (*task.ProcessReturnValue, error) { err = collection.Update(published) if err != nil { return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, fmt.Errorf("unable to save to DB: %s", err) diff --git a/api/repos.go b/api/repos.go index 4cc04f69..0ced5efd 100644 --- a/api/repos.go +++ b/api/repos.go @@ -29,14 +29,14 @@ func reposListInAPIMode(localRepos map[string]utils.FileSystemPublishRoot) gin.H return func(c *gin.Context) { c.Writer.Header().Set("Content-Type", "text/html; charset=utf-8") c.Writer.Flush() - c.Writer.WriteString("
\n")
+ _, _ = c.Writer.WriteString("\n")
if len(localRepos) == 0 {
- c.Writer.WriteString("default\n")
+ _, _ = c.Writer.WriteString("default\n")
}
for publishPrefix := range localRepos {
- c.Writer.WriteString(fmt.Sprintf("%[1]s\n", publishPrefix))
+ _, _ = c.Writer.WriteString(fmt.Sprintf("%[1]s\n", publishPrefix))
}
- c.Writer.WriteString("")
+ _, _ = c.Writer.WriteString("")
c.Writer.Flush()
}
}
@@ -76,7 +76,7 @@ func apiReposList(c *gin.Context) {
collectionFactory := context.NewCollectionFactory()
collection := collectionFactory.LocalRepoCollection()
- collection.ForEach(func(r *deb.LocalRepo) error {
+ _ = collection.ForEach(func(r *deb.LocalRepo) error {
result = append(result, r)
return nil
})
@@ -107,9 +107,9 @@ type repoCreateParams struct {
// @Description {"Name":"aptly-repo","Comment":"","DefaultDistribution":"","DefaultComponent":""}
// @Description ```
// @Tags Repos
-// @Produce json
// @Consume json
// @Param request body repoCreateParams true "Parameters"
+// @Produce json
// @Success 201 {object} deb.LocalRepo
// @Failure 404 {object} Error "Source snapshot not found"
// @Failure 409 {object} Error "Local repo already exists"
@@ -178,8 +178,10 @@ type reposEditParams struct {
// @Summary Update Repository
// @Description **Update local repository meta information**
// @Tags Repos
-// @Produce json
+// @Param name path string true "Repository name"
+// @Consume json
// @Param request body reposEditParams true "Parameters"
+// @Produce json
// @Success 200 {object} deb.LocalRepo "msg"
// @Failure 404 {object} Error "Not Found"
// @Failure 500 {object} Error "Internal Server Error"
@@ -231,8 +233,8 @@ func apiReposEdit(c *gin.Context) {
// @Summary Get Repository Info
// @Description Returns basic information about local repository.
// @Tags Repos
-// @Produce json
// @Param name path string true "Repository name"
+// @Produce json
// @Success 200 {object} deb.LocalRepo
// @Failure 404 {object} Error "Repository not found"
// @Router /api/repos/{name} [get]
@@ -254,9 +256,10 @@ func apiReposShow(c *gin.Context) {
// @Description Cannot drop repos that are published.
// @Description Needs force=1 to drop repos used as source by other repos.
// @Tags Repos
-// @Produce json
+// @Param name path string true "Repository name"
// @Param _async query bool false "Run in background and return task object"
// @Param force query int false "force: 1 to enable"
+// @Produce json
// @Success 200 {object} task.ProcessReturnValue "Repo object"
// @Failure 404 {object} Error "Not Found"
// @Failure 404 {object} Error "Repo Conflict"
@@ -306,12 +309,12 @@ func apiReposDrop(c *gin.Context) {
// @Description ["Pi386 aptly 0.8 966561016b44ed80"]
// @Description ```
// @Tags Repos
-// @Produce json
-// @Param name path string true "Snapshot to search"
+// @Param name path string true "Repository name"
// @Param q query string true "Package query (e.g Name%20(~%20matlab))"
// @Param withDeps query string true "Set to 1 to include dependencies when evaluating package query"
// @Param format query string true "Set to 'details' to return extra info about each package"
// @Param maximumVersion query string true "Set to 1 to only return the highest version for each package name"
+// @Produce json
// @Success 200 {object} string "msg"
// @Failure 404 {object} Error "Not Found"
// @Failure 404 {object} Error "Internal Server Error"
@@ -406,9 +409,10 @@ func apiReposPackagesAddDelete(c *gin.Context, taskNamePrefix string, cb func(li
// @Description
// @Description API verifies that packages actually exist in aptly database and checks constraint that conflicting packages can’t be part of the same local repository.
// @Tags Repos
-// @Produce json
+// @Param name path string true "Repository name"
// @Param request body reposPackagesAddDeleteParams true "Parameters"
// @Param _async query bool false "Run in background and return task object"
+// @Produce json
// @Success 200 {object} string "msg"
// @Failure 400 {object} Error "Bad Request"
// @Failure 404 {object} Error "Not Found"
@@ -426,9 +430,11 @@ func apiReposPackagesAdd(c *gin.Context) {
// @Description
// @Description Any package(s) can be removed from a local repository. Package references from a local repository can be retrieved with GET /api/repos/:name/packages.
// @Tags Repos
-// @Produce json
-// @Param request body reposPackagesAddDeleteParams true "Parameters"
+// @Param name path string true "Repository name"
// @Param _async query bool false "Run in background and return task object"
+// @Consume json
+// @Param request body reposPackagesAddDeleteParams true "Parameters"
+// @Produce json
// @Success 200 {object} string "msg"
// @Failure 400 {object} Error "Bad Request"
// @Failure 404 {object} Error "Not Found"
@@ -570,7 +576,7 @@ func apiReposPackageFromDir(c *gin.Context) {
}
// atempt to remove dir, if it fails, that's fine: probably it's not empty
- os.Remove(filepath.Join(context.UploadPath(), dirParam))
+ _ = os.Remove(filepath.Join(context.UploadPath(), dirParam))
}
if failedFiles == nil {
@@ -608,8 +614,8 @@ type reposCopyPackageParams struct {
// @Description Copies a package from a source to destination repository
// @Tags Repos
// @Produce json
-// @Param name path string true "Source repo"
-// @Param src path string true "Destination repo"
+// @Param name path string true "Destination repo"
+// @Param src path string true "Source repo"
// @Param file path string true "File/packages to copy"
// @Param _async query bool false "Run in background and return task object"
// @Success 200 {object} task.ProcessReturnValue "msg"
@@ -762,12 +768,15 @@ func apiReposCopyPackage(c *gin.Context) {
// @Summary Include File from Directory
// @Description Allows automatic processing of .changes file controlling package upload (uploaded using File Upload API) to the local repository. i.e. Exposes repo include command in api.
// @Tags Repos
-// @Produce json
+// @Param name path string true "Repository name"
+// @Param dir path string true "Directory of packages"
+// @Param file path string true "File/packages to include"
// @Param forceReplace query int false "when value is set to 1, when adding package that conflicts with existing package, remove existing package"
// @Param noRemoveFiles query int false "when value is set to 1, don’t remove files that have been imported successfully into repository"
// @Param acceptUnsigned query int false "when value is set to 1, accept unsigned .changes files"
// @Param ignoreSignature query int false "when value is set to 1 disable verification of .changes file signature"
// @Param _async query bool false "Run in background and return task object"
+// @Produce json
// @Success 200 {object} string "msg"
// @Failure 404 {object} Error "Not Found"
// @Router /api/repos/{name}/include/{dir}/{file} [post]
@@ -776,26 +785,22 @@ func apiReposIncludePackageFromFile(c *gin.Context) {
apiReposIncludePackageFromDir(c)
}
-type reposIncludePackageFromDirReport struct {
- Warnings []string
- Added []string
- Deleted []string
-}
-
type reposIncludePackageFromDirResponse struct {
- Report reposIncludePackageFromDirReport
+ Report *aptly.RecordingResultReporter
FailedFiles []string
}
// @Summary Include Directory
// @Description Allows automatic processing of .changes file controlling package upload (uploaded using File Upload API) to the local repository. i.e. Exposes repo include command in api.
// @Tags Repos
-// @Produce json
+// @Param name path string true "Repository name"
+// @Param dir path string true "Directory of packages"
// @Param forceReplace query int false "when value is set to 1, when adding package that conflicts with existing package, remove existing package"
// @Param noRemoveFiles query int false "when value is set to 1, don’t remove files that have been imported successfully into repository"
// @Param acceptUnsigned query int false "when value is set to 1, accept unsigned .changes files"
// @Param ignoreSignature query int false "when value is set to 1 disable verification of .changes file signature"
// @Param _async query bool false "Run in background and return task object"
+// @Produce json
// @Success 200 {object} reposIncludePackageFromDirResponse "Response"
// @Failure 404 {object} Error "Not Found"
// @Router /api/repos/{name}/include/{dir} [post]
@@ -836,7 +841,7 @@ func apiReposIncludePackageFromDir(c *gin.Context) {
}
var resources []string
- if len(repoTemplate.Tree.Root.Nodes) > 1 {
+ if len(repoTemplate.Root.Nodes) > 1 {
resources = append(resources, task.AllLocalReposResourcesKey)
} else {
// repo template string is simple text so only use resource key of specific repository
@@ -876,7 +881,7 @@ func apiReposIncludePackageFromDir(c *gin.Context) {
if !noRemoveFiles {
// atempt to remove dir, if it fails, that's fine: probably it's not empty
- os.Remove(filepath.Join(context.UploadPath(), dirParam))
+ _ = os.Remove(filepath.Join(context.UploadPath(), dirParam))
}
if failedFiles == nil {
@@ -896,9 +901,10 @@ func apiReposIncludePackageFromDir(c *gin.Context) {
out.Printf("Failed files: %s\n", strings.Join(failedFiles, ", "))
}
- return &task.ProcessReturnValue{Code: http.StatusOK, Value: gin.H{
- "Report": reporter,
- "FailedFiles": failedFiles,
- }}, nil
+ ret := reposIncludePackageFromDirResponse{
+ Report: reporter,
+ FailedFiles: failedFiles,
+ }
+ return &task.ProcessReturnValue{Code: http.StatusOK, Value: ret}, nil
})
}
diff --git a/api/router.go b/api/router.go
index 3536ab09..3cd7d427 100644
--- a/api/router.go
+++ b/api/router.go
@@ -2,7 +2,6 @@ package api
import (
"net/http"
- "os"
"sync/atomic"
"github.com/aptly-dev/aptly/aptly"
@@ -56,13 +55,9 @@ func Router(c *ctx.AptlyContext) http.Handler {
router.UseRawPath = true
if c.Config().LogFormat == "json" {
- c.StructuredLogging(true)
- utils.SetupJSONLogger(c.Config().LogLevel, os.Stdout)
gin.DefaultWriter = utils.LogWriter{Logger: log.Logger}
router.Use(JSONLogger())
} else {
- c.StructuredLogging(false)
- utils.SetupDefaultLogger(c.Config().LogLevel)
router.Use(gin.Logger())
}
@@ -220,7 +215,7 @@ func Router(c *ctx.AptlyContext) http.Handler {
api.GET("/graph.:ext", apiGraph)
}
{
- api.POST("/db/cleanup", apiDbCleanup)
+ api.POST("/db/cleanup", apiDBCleanup)
}
{
api.GET("/tasks", apiTasksList)
diff --git a/api/snapshot.go b/api/snapshot.go
index 6082b09a..be729717 100644
--- a/api/snapshot.go
+++ b/api/snapshot.go
@@ -33,7 +33,7 @@ func apiSnapshotsList(c *gin.Context) {
}
result := []*deb.Snapshot{}
- collection.ForEachSorted(SortMethodString, func(snapshot *deb.Snapshot) error {
+ _ = collection.ForEachSorted(SortMethodString, func(snapshot *deb.Snapshot) error {
result = append(result, snapshot)
return nil
})
@@ -555,7 +555,7 @@ func apiSnapshotsMerge(c *gin.Context) {
}
if len(body.Sources) < 1 {
- AbortWithJSONError(c, http.StatusBadRequest, fmt.Errorf("At least one source snapshot is required"))
+ AbortWithJSONError(c, http.StatusBadRequest, fmt.Errorf("minimum one source snapshot is required"))
return
}
@@ -765,7 +765,7 @@ func apiSnapshotsPull(c *gin.Context) {
addedPackages := []string{}
alreadySeen := map[string]bool{}
- destinationPackageList.ForEachIndexed(func(pkg *deb.Package) error {
+ _ = destinationPackageList.ForEachIndexed(func(pkg *deb.Package) error {
key := pkg.Architecture + "_" + pkg.Name
_, seen := alreadySeen[key]
@@ -781,7 +781,7 @@ func apiSnapshotsPull(c *gin.Context) {
// If !allMatches, add only first matching name-arch package
if !seen || allMatches {
- toPackageList.Add(pkg)
+ _ = toPackageList.Add(pkg)
addedPackages = append(addedPackages, pkg.String())
}
diff --git a/aptly/conf.go b/aptly/conf.go
index b39c2b8b..50e7eab1 100644
--- a/aptly/conf.go
+++ b/aptly/conf.go
@@ -1,4 +1,4 @@
package aptly
-// Default aptly.conf (filled in at link time)
+// AptlyConf holds the default aptly.conf (filled in at link time)
var AptlyConf []byte
diff --git a/azure/package_pool.go b/azure/package_pool.go
index ad32a11f..97be8e63 100644
--- a/azure/package_pool.go
+++ b/azure/package_pool.go
@@ -29,7 +29,7 @@ func NewPackagePool(accountName, accountKey, container, prefix, endpoint string)
return &PackagePool{az: azctx}, nil
}
-// String
+// String returns the storage as string
func (pool *PackagePool) String() string {
return pool.az.String()
}
@@ -104,7 +104,7 @@ func (pool *PackagePool) Open(path string) (aptly.ReadSeekerCloser, error) {
if err != nil {
return nil, errors.Wrapf(err, "error creating tempfile for %s", path)
}
- defer os.Remove(temp.Name())
+ defer func () { _ = os.Remove(temp.Name()) }()
_, err = pool.az.client.DownloadFile(context.TODO(), pool.az.container, path, temp, nil)
if err != nil {
@@ -156,7 +156,7 @@ func (pool *PackagePool) Import(srcPath, basename string, checksums *utils.Check
if err != nil {
return "", err
}
- defer source.Close()
+ defer func() { _ = source.Close() }()
err = pool.az.putFile(path, source, checksums.MD5)
if err != nil {
diff --git a/azure/package_pool_test.go b/azure/package_pool_test.go
index a32bbff7..ef562cb3 100644
--- a/azure/package_pool_test.go
+++ b/azure/package_pool_test.go
@@ -2,7 +2,7 @@ package azure
import (
"context"
- "io/ioutil"
+ "io"
"os"
"path/filepath"
"runtime"
@@ -69,8 +69,8 @@ func (s *PackagePoolSuite) TestFilepathList(c *C) {
c.Check(err, IsNil)
c.Check(list, DeepEquals, []string{})
- s.pool.Import(s.debFile, "a.deb", &utils.ChecksumInfo{}, false, s.cs)
- s.pool.Import(s.debFile, "b.deb", &utils.ChecksumInfo{}, false, s.cs)
+ _, _ = s.pool.Import(s.debFile, "a.deb", &utils.ChecksumInfo{}, false, s.cs)
+ _, _ = s.pool.Import(s.debFile, "b.deb", &utils.ChecksumInfo{}, false, s.cs)
list, err = s.pool.FilepathList(nil)
c.Check(err, IsNil)
@@ -81,8 +81,8 @@ func (s *PackagePoolSuite) TestFilepathList(c *C) {
}
func (s *PackagePoolSuite) TestRemove(c *C) {
- s.pool.Import(s.debFile, "a.deb", &utils.ChecksumInfo{}, false, s.cs)
- s.pool.Import(s.debFile, "b.deb", &utils.ChecksumInfo{}, false, s.cs)
+ _, _ = s.pool.Import(s.debFile, "a.deb", &utils.ChecksumInfo{}, false, s.cs)
+ _, _ = s.pool.Import(s.debFile, "b.deb", &utils.ChecksumInfo{}, false, s.cs)
size, err := s.pool.Remove("c7/6b/4bd12fd92e4dfe1b55b18a67a669_a.deb")
c.Check(err, IsNil)
@@ -247,7 +247,7 @@ func (s *PackagePoolSuite) TestOpen(c *C) {
f, err := s.pool.Open(path)
c.Assert(err, IsNil)
- contents, err := ioutil.ReadAll(f)
+ contents, err := io.ReadAll(f)
c.Assert(err, IsNil)
c.Check(len(contents), Equals, 2738)
c.Check(f.Close(), IsNil)
diff --git a/azure/public.go b/azure/public.go
index 8792ee24..6775e14c 100644
--- a/azure/public.go
+++ b/azure/public.go
@@ -18,7 +18,7 @@ import (
// PublishedStorage abstract file system with published files (actually hosted on Azure)
type PublishedStorage struct {
- prefix string
+ // FIXME: unused ???? prefix string
az *azContext
pathCache map[string]map[string]string
}
@@ -38,7 +38,7 @@ func NewPublishedStorage(accountName, accountKey, container, prefix, endpoint st
return &PublishedStorage{az: azctx}, nil
}
-// String
+// String returns the storage as string
func (storage *PublishedStorage) String() string {
return storage.az.String()
}
@@ -65,7 +65,7 @@ func (storage *PublishedStorage) PutFile(path string, sourceFilename string) err
if err != nil {
return err
}
- defer source.Close()
+ defer func() { _ = source.Close() }()
err = storage.az.putFile(path, source, sourceMD5)
if err != nil {
@@ -158,7 +158,7 @@ func (storage *PublishedStorage) LinkFromPool(publishedPrefix, publishedRelPath,
if err != nil {
return err
}
- defer source.Close()
+ defer func() { _ = source.Close() }()
err = storage.az.putFile(relFilePath, source, sourceMD5)
if err == nil {
@@ -193,7 +193,9 @@ func (storage *PublishedStorage) internalCopyOrMoveBlob(src, dst string, metadat
if err != nil {
return fmt.Errorf("error acquiring lease on source blob %s", src)
}
- defer blobLeaseClient.BreakLease(context.Background(), &lease.BlobBreakOptions{BreakPeriod: to.Ptr(int32(60))})
+ defer func() {
+ _, _ = blobLeaseClient.BreakLease(context.Background(), &lease.BlobBreakOptions{BreakPeriod: to.Ptr(int32(60))})
+ }()
dstBlobClient := containerClient.NewBlobClient(dst)
copyResp, err := dstBlobClient.StartCopyFromURL(context.Background(), srcBlobClient.URL(), &blob.StartCopyFromURLOptions{
diff --git a/azure/public_test.go b/azure/public_test.go
index 3acd767f..5c912c51 100644
--- a/azure/public_test.go
+++ b/azure/public_test.go
@@ -4,7 +4,7 @@ import (
"context"
"crypto/md5"
"crypto/rand"
- "io/ioutil"
+ "io"
"os"
"path/filepath"
"bytes"
@@ -36,7 +36,7 @@ func randString(n int) string {
}
const alphanum = "0123456789abcdefghijklmnopqrstuvwxyz"
var bytes = make([]byte, n)
- rand.Read(bytes)
+ _, _ = rand.Read(bytes)
for i, b := range bytes {
bytes[i] = alphanum[b%byte(len(alphanum))]
}
@@ -87,7 +87,7 @@ func (s *PublishedStorageSuite) TearDownTest(c *C) {
func (s *PublishedStorageSuite) GetFile(c *C, path string) []byte {
resp, err := s.storage.az.client.DownloadStream(context.Background(), s.storage.az.container, path, nil)
c.Assert(err, IsNil)
- data, err := ioutil.ReadAll(resp.Body)
+ data, err := io.ReadAll(resp.Body)
c.Assert(err, IsNil)
return data
}
@@ -121,7 +121,7 @@ func (s *PublishedStorageSuite) TestPutFile(c *C) {
filename := "a/b.txt"
dir := c.MkDir()
- err := ioutil.WriteFile(filepath.Join(dir, "a"), content, 0644)
+ err := os.WriteFile(filepath.Join(dir, "a"), content, 0644)
c.Assert(err, IsNil)
err = s.storage.PutFile(filename, filepath.Join(dir, "a"))
@@ -140,7 +140,7 @@ func (s *PublishedStorageSuite) TestPutFilePlus(c *C) {
filename := "a/b+c.txt"
dir := c.MkDir()
- err := ioutil.WriteFile(filepath.Join(dir, "a"), content, 0644)
+ err := os.WriteFile(filepath.Join(dir, "a"), content, 0644)
c.Assert(err, IsNil)
err = s.storage.PutFile(filename, filepath.Join(dir, "a"))
@@ -258,7 +258,7 @@ func (s *PublishedStorageSuite) TestRemoveDirsPlus(c *C) {
func (s *PublishedStorageSuite) TestRenameFile(c *C) {
dir := c.MkDir()
- err := ioutil.WriteFile(filepath.Join(dir, "a"), []byte("Welcome to Azure!"), 0644)
+ err := os.WriteFile(filepath.Join(dir, "a"), []byte("Welcome to Azure!"), 0644)
c.Assert(err, IsNil)
err = s.storage.PutFile("source.txt", filepath.Join(dir, "a"))
@@ -280,18 +280,18 @@ func (s *PublishedStorageSuite) TestLinkFromPool(c *C) {
cs := files.NewMockChecksumStorage()
tmpFile1 := filepath.Join(c.MkDir(), "mars-invaders_1.03.deb")
- err := ioutil.WriteFile(tmpFile1, []byte("Contents"), 0644)
+ err := os.WriteFile(tmpFile1, []byte("Contents"), 0644)
c.Assert(err, IsNil)
cksum1 := utils.ChecksumInfo{MD5: "c1df1da7a1ce305a3b60af9d5733ac1d"}
tmpFile2 := filepath.Join(c.MkDir(), "mars-invaders_1.03.deb")
- err = ioutil.WriteFile(tmpFile2, []byte("Spam"), 0644)
+ err = os.WriteFile(tmpFile2, []byte("Spam"), 0644)
c.Assert(err, IsNil)
cksum2 := utils.ChecksumInfo{MD5: "e9dfd31cc505d51fc26975250750deab"}
tmpFile3 := filepath.Join(c.MkDir(), "netboot/boot.img.gz")
- os.MkdirAll(filepath.Dir(tmpFile3), 0777)
- err = ioutil.WriteFile(tmpFile3, []byte("Contents"), 0644)
+ _ = os.MkdirAll(filepath.Dir(tmpFile3), 0777)
+ err = os.WriteFile(tmpFile3, []byte("Contents"), 0644)
c.Assert(err, IsNil)
cksum3 := utils.ChecksumInfo{MD5: "c1df1da7a1ce305a3b60af9d5733ac1d"}
diff --git a/cmd/api_serve.go b/cmd/api_serve.go
index d3ccdf77..17a061b3 100644
--- a/cmd/api_serve.go
+++ b/cmd/api_serve.go
@@ -46,7 +46,7 @@ func aptlyAPIServe(cmd *commander.Command, args []string) error {
}
if err == nil && len(listeners) == 1 {
listener := listeners[0]
- defer listener.Close()
+ defer func() { _ = listener.Close() }()
fmt.Printf("\nTaking over web server at: %s (press Ctrl+C to quit)...\n", listener.Addr().String())
err = http.Serve(listener, api.Router(context))
if err != nil {
@@ -67,7 +67,7 @@ func aptlyAPIServe(cmd *commander.Command, args []string) error {
if _, ok := <-sigchan; ok {
fmt.Printf("\nShutdown signal received, waiting for background tasks...\n")
context.TaskList().Wait()
- server.Shutdown(stdcontext.Background())
+ _ = server.Shutdown(stdcontext.Background())
}
})()
defer close(sigchan)
@@ -75,14 +75,14 @@ func aptlyAPIServe(cmd *commander.Command, args []string) error {
listenURL, err := url.Parse(listen)
if err == nil && listenURL.Scheme == "unix" {
file := listenURL.Path
- os.Remove(file)
+ _ = os.Remove(file)
var listener net.Listener
listener, err = net.Listen("unix", file)
if err != nil {
return fmt.Errorf("failed to listen on: %s\n%s", file, err)
}
- defer listener.Close()
+ defer func() { _ = listener.Close() }()
err = server.Serve(listener)
} else {
diff --git a/cmd/cmd.go b/cmd/cmd.go
index d5bdff25..7b2446cf 100644
--- a/cmd/cmd.go
+++ b/cmd/cmd.go
@@ -97,7 +97,7 @@ package environment to new version.`,
Flag: *flag.NewFlagSet("aptly", flag.ExitOnError),
Subcommands: []*commander.Command{
makeCmdConfig(),
- makeCmdDb(),
+ makeCmdDB(),
makeCmdGraph(),
makeCmdMirror(),
makeCmdRepo(),
diff --git a/cmd/config_show.go b/cmd/config_show.go
index 6568604f..60049c3b 100644
--- a/cmd/config_show.go
+++ b/cmd/config_show.go
@@ -5,7 +5,7 @@ import (
"fmt"
"github.com/smira/commander"
- "gopkg.in/yaml.v3"
+ yaml "gopkg.in/yaml.v3"
)
func aptlyConfigShow(_ *commander.Command, _ []string) error {
diff --git a/cmd/db.go b/cmd/db.go
index ed85d03d..855eb44e 100644
--- a/cmd/db.go
+++ b/cmd/db.go
@@ -4,13 +4,13 @@ import (
"github.com/smira/commander"
)
-func makeCmdDb() *commander.Command {
+func makeCmdDB() *commander.Command {
return &commander.Command{
UsageLine: "db",
Short: "manage aptly's internal database and package pool",
Subcommands: []*commander.Command{
- makeCmdDbCleanup(),
- makeCmdDbRecover(),
+ makeCmdDBCleanup(),
+ makeCmdDBRecover(),
},
}
}
diff --git a/cmd/db_cleanup.go b/cmd/db_cleanup.go
index 66fece67..c079955e 100644
--- a/cmd/db_cleanup.go
+++ b/cmd/db_cleanup.go
@@ -12,7 +12,7 @@ import (
)
// aptly db cleanup
-func aptlyDbCleanup(cmd *commander.Command, args []string) error {
+func aptlyDBCleanup(cmd *commander.Command, args []string) error {
var err error
if len(args) != 0 {
@@ -48,7 +48,7 @@ func aptlyDbCleanup(cmd *commander.Command, args []string) error {
if verbose {
description := fmt.Sprintf("mirror %s", repo.Name)
- repo.RefList().ForEach(func(key []byte) error {
+ _ = repo.RefList().ForEach(func(key []byte) error {
packageRefSources[string(key)] = append(packageRefSources[string(key)], description)
return nil
})
@@ -81,7 +81,7 @@ func aptlyDbCleanup(cmd *commander.Command, args []string) error {
if verbose {
description := fmt.Sprintf("local repo %s", repo.Name)
- repo.RefList().ForEach(func(key []byte) error {
+ _ = repo.RefList().ForEach(func(key []byte) error {
packageRefSources[string(key)] = append(packageRefSources[string(key)], description)
return nil
})
@@ -113,7 +113,7 @@ func aptlyDbCleanup(cmd *commander.Command, args []string) error {
if verbose {
description := fmt.Sprintf("snapshot %s", snapshot.Name)
- snapshot.RefList().ForEach(func(key []byte) error {
+ _ = snapshot.RefList().ForEach(func(key []byte) error {
packageRefSources[string(key)] = append(packageRefSources[string(key)], description)
return nil
})
@@ -146,7 +146,7 @@ func aptlyDbCleanup(cmd *commander.Command, args []string) error {
if verbose {
description := fmt.Sprintf("published repository %s:%s/%s component %s",
published.Storage, published.Prefix, published.Distribution, component)
- published.RefList(component).ForEach(func(key []byte) error {
+ _ = published.RefList(component).ForEach(func(key []byte) error {
packageRefSources[string(key)] = append(packageRefSources[string(key)], description)
return nil
})
@@ -291,9 +291,9 @@ func aptlyDbCleanup(cmd *commander.Command, args []string) error {
return err
}
-func makeCmdDbCleanup() *commander.Command {
+func makeCmdDBCleanup() *commander.Command {
cmd := &commander.Command{
- Run: aptlyDbCleanup,
+ Run: aptlyDBCleanup,
UsageLine: "cleanup",
Short: "cleanup DB and package pool",
Long: `
diff --git a/cmd/db_recover.go b/cmd/db_recover.go
index 71cab0e0..baf599c5 100644
--- a/cmd/db_recover.go
+++ b/cmd/db_recover.go
@@ -1,13 +1,16 @@
package cmd
import (
+ "fmt"
+
+ "github.com/aptly-dev/aptly/deb"
"github.com/smira/commander"
"github.com/aptly-dev/aptly/database/goleveldb"
)
// aptly db recover
-func aptlyDbRecover(cmd *commander.Command, args []string) error {
+func aptlyDBRecover(cmd *commander.Command, args []string) error {
var err error
if len(args) != 0 {
@@ -16,14 +19,19 @@ func aptlyDbRecover(cmd *commander.Command, args []string) error {
}
context.Progress().Printf("Recovering database...\n")
- err = goleveldb.RecoverDB(context.DBPath())
+ if err = goleveldb.RecoverDB(context.DBPath()); err != nil {
+ return err
+ }
+
+ context.Progress().Printf("Checking database integrity...\n")
+ err = checkIntegrity()
return err
}
-func makeCmdDbRecover() *commander.Command {
+func makeCmdDBRecover() *commander.Command {
cmd := &commander.Command{
- Run: aptlyDbRecover,
+ Run: aptlyDBRecover,
UsageLine: "recover",
Short: "recover DB after crash",
Long: `
@@ -38,3 +46,36 @@ Example:
return cmd
}
+
+func checkIntegrity() error {
+ return context.NewCollectionFactory().LocalRepoCollection().ForEach(checkRepo)
+}
+
+func checkRepo(repo *deb.LocalRepo) error {
+ collectionFactory := context.NewCollectionFactory()
+ repos := collectionFactory.LocalRepoCollection()
+
+ err := repos.LoadComplete(repo)
+ if err != nil {
+ return fmt.Errorf("load complete repo %q: %s", repo.Name, err)
+ }
+
+ dangling, err := deb.FindDanglingReferences(repo.RefList(), collectionFactory.PackageCollection())
+ if err != nil {
+ return fmt.Errorf("find dangling references: %w", err)
+ }
+
+ if len(dangling.Refs) > 0 {
+ for _, ref := range dangling.Refs {
+ context.Progress().Printf("Removing dangling database reference %q\n", ref)
+ }
+
+ repo.UpdateRefList(repo.RefList().Subtract(dangling))
+
+ if err = repos.Update(repo); err != nil {
+ return fmt.Errorf("update repo: %w", err)
+ }
+ }
+
+ return nil
+}
diff --git a/cmd/graph.go b/cmd/graph.go
index 64b12d9e..c558f513 100644
--- a/cmd/graph.go
+++ b/cmd/graph.go
@@ -38,8 +38,8 @@ func aptlyGraph(cmd *commander.Command, args []string) error {
if err != nil {
return err
}
- tempfile.Close()
- os.Remove(tempfile.Name())
+ _ = tempfile.Close()
+ _ = os.Remove(tempfile.Name())
format := context.Flags().Lookup("format").Value.String()
output := context.Flags().Lookup("output").Value.String()
diff --git a/cmd/mirror.go b/cmd/mirror.go
index 89b19a6c..c8f87c48 100644
--- a/cmd/mirror.go
+++ b/cmd/mirror.go
@@ -20,7 +20,7 @@ func getVerifier(flags *flag.FlagSet) (pgp.Verifier, error) {
verifier.AddKeyring(keyRing)
}
- err := verifier.InitKeyring(ignoreSignatures == false) // be verbose only if verifying signatures is requested
+ err := verifier.InitKeyring(!ignoreSignatures) // be verbose only if verifying signatures is requested
if err != nil {
return nil, err
}
diff --git a/cmd/mirror_list.go b/cmd/mirror_list.go
index 42b802cf..bc4bef3d 100644
--- a/cmd/mirror_list.go
+++ b/cmd/mirror_list.go
@@ -32,7 +32,7 @@ func aptlyMirrorListTxt(cmd *commander.Command, _ []string) error {
repos := make([]string, collectionFactory.RemoteRepoCollection().Len())
i := 0
- collectionFactory.RemoteRepoCollection().ForEach(func(repo *deb.RemoteRepo) error {
+ _ = collectionFactory.RemoteRepoCollection().ForEach(func(repo *deb.RemoteRepo) error {
if raw {
repos[i] = repo.Name
} else {
@@ -42,7 +42,7 @@ func aptlyMirrorListTxt(cmd *commander.Command, _ []string) error {
return nil
})
- context.CloseDatabase()
+ _ = context.CloseDatabase()
sort.Strings(repos)
@@ -70,13 +70,13 @@ func aptlyMirrorListJSON(_ *commander.Command, _ []string) error {
repos := make([]*deb.RemoteRepo, context.NewCollectionFactory().RemoteRepoCollection().Len())
i := 0
- context.NewCollectionFactory().RemoteRepoCollection().ForEach(func(repo *deb.RemoteRepo) error {
+ _ = context.NewCollectionFactory().RemoteRepoCollection().ForEach(func(repo *deb.RemoteRepo) error {
repos[i] = repo
i++
return nil
})
- context.CloseDatabase()
+ _ = context.CloseDatabase()
sort.Slice(repos, func(i, j int) bool {
return repos[i].Name < repos[j].Name
diff --git a/cmd/mirror_show.go b/cmd/mirror_show.go
index 03179161..00018fb8 100644
--- a/cmd/mirror_show.go
+++ b/cmd/mirror_show.go
@@ -86,7 +86,7 @@ func aptlyMirrorShowTxt(_ *commander.Command, args []string) error {
if repo.LastDownloadDate.IsZero() {
fmt.Printf("Unable to show package list, mirror hasn't been downloaded yet.\n")
} else {
- ListPackagesRefList(repo.RefList(), collectionFactory)
+ _ = ListPackagesRefList(repo.RefList(), collectionFactory)
}
}
@@ -119,7 +119,7 @@ func aptlyMirrorShowJSON(_ *commander.Command, args []string) error {
}
list.PrepareIndex()
- list.ForEachIndexed(func(p *deb.Package) error {
+ _ = list.ForEachIndexed(func(p *deb.Package) error {
repo.Packages = append(repo.Packages, p.GetFullName())
return nil
})
diff --git a/cmd/mirror_update.go b/cmd/mirror_update.go
index 2aad8c53..2f0fb524 100644
--- a/cmd/mirror_update.go
+++ b/cmd/mirror_update.go
@@ -101,7 +101,7 @@ func aptlyMirrorUpdate(cmd *commander.Command, args []string) error {
err = context.ReOpenDatabase()
if err == nil {
repo.MarkAsIdle()
- collectionFactory.RemoteRepoCollection().Update(repo)
+ _ = collectionFactory.RemoteRepoCollection().Update(repo)
}
}()
@@ -173,7 +173,7 @@ func aptlyMirrorUpdate(cmd *commander.Command, args []string) error {
file, e = os.CreateTemp("", task.File.Filename)
if e == nil {
task.TempDownPath = file.Name()
- file.Close()
+ _ = file.Close()
}
}
if e != nil {
@@ -261,7 +261,7 @@ func aptlyMirrorUpdate(cmd *commander.Command, args []string) error {
return fmt.Errorf("unable to update: download errors:\n %s", strings.Join(errors, "\n "))
}
- repo.FinalizeDownload(collectionFactory, context.Progress())
+ _ = repo.FinalizeDownload(collectionFactory, context.Progress())
err = collectionFactory.RemoteRepoCollection().Update(repo)
if err != nil {
return fmt.Errorf("unable to update: %s", err)
diff --git a/cmd/package_search.go b/cmd/package_search.go
index 54290c21..e854362b 100644
--- a/cmd/package_search.go
+++ b/cmd/package_search.go
@@ -40,7 +40,7 @@ func aptlyPackageSearch(cmd *commander.Command, args []string) error {
}
format := context.Flags().Lookup("format").Value.String()
- PrintPackageList(result, format, "")
+ _ = PrintPackageList(result, format, "")
return err
}
diff --git a/cmd/package_show.go b/cmd/package_show.go
index 1715b52a..ef7bbc2e 100644
--- a/cmd/package_show.go
+++ b/cmd/package_show.go
@@ -84,8 +84,8 @@ func aptlyPackageShow(cmd *commander.Command, args []string) error {
result := q.Query(collectionFactory.PackageCollection())
err = result.ForEach(func(p *deb.Package) error {
- p.Stanza().WriteTo(w, p.IsSource, false, false)
- w.Flush()
+ _ = p.Stanza().WriteTo(w, p.IsSource, false, false)
+ _ = w.Flush()
fmt.Printf("\n")
if withFiles {
@@ -109,7 +109,7 @@ func aptlyPackageShow(cmd *commander.Command, args []string) error {
if withReferences {
fmt.Printf("References to package:\n")
- printReferencesTo(p, collectionFactory)
+ _ = printReferencesTo(p, collectionFactory)
fmt.Printf("\n")
}
diff --git a/cmd/publish_list.go b/cmd/publish_list.go
index e3a1d1a8..f7d7bf6c 100644
--- a/cmd/publish_list.go
+++ b/cmd/publish_list.go
@@ -53,7 +53,7 @@ func aptlyPublishListTxt(cmd *commander.Command, _ []string) error {
return fmt.Errorf("unable to load list of repos: %s", err)
}
- context.CloseDatabase()
+ _ = context.CloseDatabase()
sort.Strings(published)
@@ -99,7 +99,7 @@ func aptlyPublishListJSON(_ *commander.Command, _ []string) error {
return fmt.Errorf("unable to load list of repos: %s", err)
}
- context.CloseDatabase()
+ _ = context.CloseDatabase()
sort.Slice(repos, func(i, j int) bool {
return repos[i].GetPath() < repos[j].GetPath()
diff --git a/cmd/publish_snapshot.go b/cmd/publish_snapshot.go
index eac4c3b3..7e0d8452 100644
--- a/cmd/publish_snapshot.go
+++ b/cmd/publish_snapshot.go
@@ -156,7 +156,7 @@ func aptlyPublishSnapshotOrRepo(cmd *commander.Command, args []string) error {
duplicate := collectionFactory.PublishedRepoCollection().CheckDuplicate(published)
if duplicate != nil {
- collectionFactory.PublishedRepoCollection().LoadComplete(duplicate, collectionFactory)
+ _ = collectionFactory.PublishedRepoCollection().LoadComplete(duplicate, collectionFactory)
return fmt.Errorf("prefix/distribution already used by another published repo: %s", duplicate)
}
diff --git a/cmd/repo_list.go b/cmd/repo_list.go
index 9c4b0d47..1a23c3f1 100644
--- a/cmd/repo_list.go
+++ b/cmd/repo_list.go
@@ -32,7 +32,7 @@ func aptlyRepoListTxt(cmd *commander.Command, _ []string) error {
collectionFactory := context.NewCollectionFactory()
repos := make([]string, collectionFactory.LocalRepoCollection().Len())
i := 0
- collectionFactory.LocalRepoCollection().ForEach(func(repo *deb.LocalRepo) error {
+ _ = collectionFactory.LocalRepoCollection().ForEach(func(repo *deb.LocalRepo) error {
if raw {
repos[i] = repo.Name
} else {
@@ -47,7 +47,7 @@ func aptlyRepoListTxt(cmd *commander.Command, _ []string) error {
return nil
})
- context.CloseDatabase()
+ _ = context.CloseDatabase()
sort.Strings(repos)
@@ -76,7 +76,7 @@ func aptlyRepoListJSON(_ *commander.Command, _ []string) error {
repos := make([]*deb.LocalRepo, context.NewCollectionFactory().LocalRepoCollection().Len())
i := 0
- context.NewCollectionFactory().LocalRepoCollection().ForEach(func(repo *deb.LocalRepo) error {
+ _ = context.NewCollectionFactory().LocalRepoCollection().ForEach(func(repo *deb.LocalRepo) error {
e := context.NewCollectionFactory().LocalRepoCollection().LoadComplete(repo)
if e != nil {
return e
@@ -87,7 +87,7 @@ func aptlyRepoListJSON(_ *commander.Command, _ []string) error {
return nil
})
- context.CloseDatabase()
+ _ = context.CloseDatabase()
sort.Slice(repos, func(i, j int) bool {
return repos[i].Name < repos[j].Name
diff --git a/cmd/repo_remove.go b/cmd/repo_remove.go
index 5341a4c3..5667a493 100644
--- a/cmd/repo_remove.go
+++ b/cmd/repo_remove.go
@@ -54,7 +54,7 @@ func aptlyRepoRemove(cmd *commander.Command, args []string) error {
return fmt.Errorf("unable to remove: %s", err)
}
- toRemove.ForEach(func(p *deb.Package) error {
+ _ = toRemove.ForEach(func(p *deb.Package) error {
list.Remove(p)
context.Progress().ColoredPrintf("@r[-]@| %s removed", p)
return nil
diff --git a/cmd/repo_show.go b/cmd/repo_show.go
index a61a5f1f..a598b2bc 100644
--- a/cmd/repo_show.go
+++ b/cmd/repo_show.go
@@ -52,7 +52,7 @@ func aptlyRepoShowTxt(_ *commander.Command, args []string) error {
withPackages := context.Flags().Lookup("with-packages").Value.Get().(bool)
if withPackages {
- ListPackagesRefList(repo.RefList(), collectionFactory)
+ _ = ListPackagesRefList(repo.RefList(), collectionFactory)
}
return err
diff --git a/cmd/snapshot_list.go b/cmd/snapshot_list.go
index 7435b187..740aab66 100644
--- a/cmd/snapshot_list.go
+++ b/cmd/snapshot_list.go
@@ -33,7 +33,7 @@ func aptlySnapshotListTxt(cmd *commander.Command, _ []string) error {
collection := collectionFactory.SnapshotCollection()
if raw {
- collection.ForEachSorted(sortMethodString, func(snapshot *deb.Snapshot) error {
+ _ = collection.ForEachSorted(sortMethodString, func(snapshot *deb.Snapshot) error {
fmt.Printf("%s\n", snapshot.Name)
return nil
})
@@ -68,7 +68,7 @@ func aptlySnapshotListJSON(cmd *commander.Command, _ []string) error {
jsonSnapshots := make([]*deb.Snapshot, collection.Len())
i := 0
- collection.ForEachSorted(sortMethodString, func(snapshot *deb.Snapshot) error {
+ _ = collection.ForEachSorted(sortMethodString, func(snapshot *deb.Snapshot) error {
jsonSnapshots[i] = snapshot
i++
return nil
diff --git a/cmd/snapshot_pull.go b/cmd/snapshot_pull.go
index f73afab7..df0c9331 100644
--- a/cmd/snapshot_pull.go
+++ b/cmd/snapshot_pull.go
@@ -116,7 +116,7 @@ func aptlySnapshotPull(cmd *commander.Command, args []string) error {
alreadySeen := map[string]bool{}
- result.ForEachIndexed(func(pkg *deb.Package) error {
+ _ = result.ForEachIndexed(func(pkg *deb.Package) error {
key := pkg.Architecture + "_" + pkg.Name
_, seen := alreadySeen[key]
@@ -132,7 +132,7 @@ func aptlySnapshotPull(cmd *commander.Command, args []string) error {
// If !allMatches, add only first matching name-arch package
if !seen || allMatches {
- packageList.Add(pkg)
+ _ = packageList.Add(pkg)
context.Progress().ColoredPrintf("@g[+]@| %s added", pkg)
}
diff --git a/cmd/snapshot_search.go b/cmd/snapshot_search.go
index 24da005d..761bd5b5 100644
--- a/cmd/snapshot_search.go
+++ b/cmd/snapshot_search.go
@@ -123,7 +123,7 @@ func aptlySnapshotMirrorRepoSearch(cmd *commander.Command, args []string) error
}
format := context.Flags().Lookup("format").Value.String()
- PrintPackageList(result, format, "")
+ _ = PrintPackageList(result, format, "")
return err
}
diff --git a/cmd/snapshot_show.go b/cmd/snapshot_show.go
index e03a49e5..5d2545bd 100644
--- a/cmd/snapshot_show.go
+++ b/cmd/snapshot_show.go
@@ -79,7 +79,7 @@ func aptlySnapshotShowTxt(_ *commander.Command, args []string) error {
withPackages := context.Flags().Lookup("with-packages").Value.Get().(bool)
if withPackages {
- ListPackagesRefList(snapshot.RefList(), collectionFactory)
+ _ = ListPackagesRefList(snapshot.RefList(), collectionFactory)
}
return err
@@ -139,7 +139,7 @@ func aptlySnapshotShowJSON(_ *commander.Command, args []string) error {
}
list.PrepareIndex()
- list.ForEachIndexed(func(p *deb.Package) error {
+ _ = list.ForEachIndexed(func(p *deb.Package) error {
snapshot.Packages = append(snapshot.Packages, p.GetFullName())
return nil
})
diff --git a/cmd/task_run.go b/cmd/task_run.go
index 50519fe8..c127b255 100644
--- a/cmd/task_run.go
+++ b/cmd/task_run.go
@@ -6,7 +6,7 @@ import (
"os"
"strings"
- "github.com/mattn/go-shellwords"
+ shellwords "github.com/mattn/go-shellwords"
"github.com/smira/commander"
)
@@ -31,7 +31,7 @@ func aptlyTaskRun(cmd *commander.Command, args []string) error {
if err != nil {
return err
}
- defer file.Close()
+ defer func() { _ = file.Close() }()
scanner := bufio.NewScanner(file)
diff --git a/completion.d/aptly b/completion.d/aptly
index 3cb54ac5..ab8c4c15 100644
--- a/completion.d/aptly
+++ b/completion.d/aptly
@@ -22,34 +22,36 @@
__aptly_mirror_list()
{
- aptly mirror list -raw
+ aptly ${aptly_global_opts[@]} mirror list -raw
}
__aptly_repo_list()
{
- aptly repo list -raw
+ aptly ${aptly_global_opts[@]} repo list -raw
}
__aptly_snapshot_list()
{
- aptly snapshot list -raw
+ aptly ${aptly_global_opts[@]} snapshot list -raw
}
__aptly_published_distributions()
{
- aptly publish list -raw | cut -d ' ' -f 2 | sort | uniq
+ aptly ${aptly_global_opts[@]} publish list -raw | cut -d ' ' -f 2 | sort | uniq
}
__aptly_published_prefixes()
{
- aptly publish list -raw | cut -d ' ' -f 1 | sort | uniq
+ aptly ${aptly_global_opts[@]} publish list -raw | cut -d ' ' -f 1 | sort | uniq
}
__aptly_prefixes_for_distribution()
{
- aptly publish list -raw | awk -v dist="$1" '{ if (dist == $2) print $1 }' | sort | uniq
+ aptly ${aptly_global_opts[@]} publish list -raw | awk -v dist="$1" '{ if (dist == $2) print $1 }' | sort | uniq
}
+
+
_aptly()
{
cur="${COMP_WORDS[COMP_CWORD]}"
@@ -57,7 +59,12 @@ _aptly()
prevprev="${COMP_WORDS[COMP_CWORD-2]}"
commands="api config db graph mirror package publish repo serve snapshot task version"
- options="-architectures= -config= -db-open-attempts= -dep-follow-all-variants -dep-follow-recommends -dep-follow-source -dep-follow-suggests -dep-verbose-resolve -gpg-provider="
+
+ options="-architectures -config -db-open-attempts -dep-follow-all-variants -dep-follow-recommends -dep-follow-source -dep-follow-suggests -dep-verbose-resolve -gpg-provider"
+ options_without_arg="-dep-follow-all-variants -dep-follow-recommends -dep-follow-source -dep-follow-suggests -dep-verbose-resolve"
+ options_with_arg="-architectures -db-open-attempts -gpg-provider"
+ options_with_path_arg="-config"
+
db_subcommands="cleanup recover"
mirror_subcommands="create drop edit show list rename search update"
publish_subcommands="drop list repo snapshot switch update source"
@@ -69,12 +76,41 @@ _aptly()
config_subcommands="show"
api_subcommands="serve"
- local cmd subcmd numargs numoptions i
+ local cmd subcmd numargs numoptions i aptly_global_opts
numargs=0
numoptions=0
+ for opt in "${options_with_path_arg[@]}"; do
+ [[ "$prev" == "$opt" ]] || continue
+ compopt -o filenames 2>/dev/null
+ _filedir
+ return 0
+ done
+
for (( i=1; i < $COMP_CWORD; i++ )); do
+ word=${COMP_WORDS[i]}
+ if [[ "$word" == -*=* ]]; then
+ for o in "${options[@]}"; do
+ [[ ${word%%=*} == "$o" ]] && aptly_global_opts+=("$word")
+ done
+ else
+ for o in "${options_with_arg[@]}" ""${options_with_path_arg[@]}"" ; do
+ if [[ "$word" == "$o" ]]; then
+ if (( i + 1 < COMP_CWORD )); then
+ aptly_global_opts+=("$word" "${COMP_WORDS[i+1]}")
+ else
+ aptly_global_opts+=("$word")
+ fi
+ (( i++ ))
+ continue 2
+ fi
+ done
+ fi
+ for o in ${options_without_arg[@]}; do
+ [[ "$word" == "$o" ]] && aptly_global_opts+=("$word")
+ done
+
if [[ -n "$cmd" ]]; then
if [[ ! -n "$subcmd" ]]; then
subcmd=${COMP_WORDS[i]}
@@ -339,7 +375,7 @@ _aptly()
if [[ "$cur" == -* ]]; then
COMPREPLY=($(compgen -W "-accept-unsigned -force-replace -ignore-signatures -keyring= -no-remove-files -repo= -uploaders-file=" -- ${cur}))
else
- comptopt -o filenames 2>/dev/null
+ compopt -o filenames 2>/dev/null
COMPREPLY=($(compgen -f -- ${cur}))
return 0
fi
diff --git a/console/progress.go b/console/progress.go
index 16191857..d86434cc 100644
--- a/console/progress.go
+++ b/console/progress.go
@@ -6,6 +6,7 @@ import (
"strings"
"github.com/aptly-dev/aptly/aptly"
+ "github.com/aptly-dev/aptly/utils"
"github.com/cheggaaa/pb"
"github.com/rs/zerolog/log"
"github.com/wsxiaoys/terminal/color"
@@ -78,7 +79,7 @@ func (p *Progress) InitBar(count int64, isBytes bool, _ aptly.BarType) {
if p.bar != nil {
panic("bar already initialized")
}
- if RunningOnTerminal() {
+ if utils.RunningOnTerminal() {
p.bar = pb.New(0)
p.bar.Total = count
p.bar.NotPrint = true
@@ -141,7 +142,7 @@ func (p *Progress) PrintfStdErr(msg string, a ...interface{}) {
// ColoredPrintf does printf in colored way + newline
func (p *Progress) ColoredPrintf(msg string, a ...interface{}) {
- if RunningOnTerminal() {
+ if utils.RunningOnTerminal() {
p.queue <- printTask{code: codePrint, message: color.Sprintf(msg, a...) + "\n"}
} else {
// stip color marks
diff --git a/console/terminal.go b/console/terminal.go
deleted file mode 100644
index ba88af70..00000000
--- a/console/terminal.go
+++ /dev/null
@@ -1,12 +0,0 @@
-package console
-
-import (
- "syscall"
-
- "golang.org/x/term"
-)
-
-// RunningOnTerminal checks whether stdout is terminal
-func RunningOnTerminal() bool {
- return term.IsTerminal(syscall.Stdout)
-}
diff --git a/context/context.go b/context/context.go
index 5df5bbfd..0ffc3f72 100644
--- a/context/context.go
+++ b/context/context.go
@@ -115,7 +115,7 @@ func (context *AptlyContext) config() *utils.ConfigStructure {
if err != nil {
fmt.Fprintf(os.Stderr, "Config file not found, creating default config at %s\n\n", homeLocation)
- utils.SaveConfigRaw(homeLocation, aptly.AptlyConf)
+ _ = utils.SaveConfigRaw(homeLocation, aptly.AptlyConf)
err = utils.LoadConfig(homeLocation, &utils.Config)
if err != nil {
Fatal(fmt.Errorf("error loading config file %s: %s", homeLocation, err))
@@ -123,6 +123,14 @@ func (context *AptlyContext) config() *utils.ConfigStructure {
}
}
+ if utils.Config.LogFormat == "json" {
+ context.StructuredLogging(true)
+ utils.SetupJSONLogger(utils.Config.LogLevel, os.Stdout)
+ } else {
+ context.StructuredLogging(false)
+ utils.SetupDefaultLogger(utils.Config.LogLevel)
+ }
+
context.configLoaded = true
}
@@ -233,7 +241,7 @@ func (context *AptlyContext) newDownloader(progress aptly.Progress) aptly.Downlo
// If flag is defined prefer it to global setting
maxTries = maxTriesFlag.Value.Get().(int)
}
- var downloader string = context.config().Downloader
+ var downloader = context.config().Downloader
downloaderFlag := context.flags.Lookup("downloader")
if downloaderFlag != nil {
downloader = downloaderFlag.Value.String()
@@ -295,8 +303,8 @@ func (context *AptlyContext) _database() (database.Storage, error) {
switch context.config().DatabaseBackend.Type {
case "leveldb":
dbPath := filepath.Join(context.config().GetRootDir(), "db")
- if len(context.config().DatabaseBackend.DbPath) != 0 {
- dbPath = context.config().DatabaseBackend.DbPath
+ if len(context.config().DatabaseBackend.DBPath) != 0 {
+ dbPath = context.config().DatabaseBackend.DBPath
}
context.database, err = goleveldb.NewDB(dbPath)
case "etcd":
@@ -444,7 +452,7 @@ func (context *AptlyContext) GetPublishedStorage(name string) aptly.PublishedSto
} else if strings.HasPrefix(name, "azure:") {
params, ok := context.config().AzurePublishRoots[name[6:]]
if !ok {
- Fatal(fmt.Errorf("Published Azure storage %v not configured", name[6:]))
+ Fatal(fmt.Errorf("published Azure storage %v not configured", name[6:]))
}
var err error
@@ -589,17 +597,17 @@ func (context *AptlyContext) Shutdown() {
if aptly.EnableDebug {
if context.fileMemProfile != nil {
- pprof.WriteHeapProfile(context.fileMemProfile)
- context.fileMemProfile.Close()
+ _ = pprof.WriteHeapProfile(context.fileMemProfile)
+ _ = context.fileMemProfile.Close()
context.fileMemProfile = nil
}
if context.fileCPUProfile != nil {
pprof.StopCPUProfile()
- context.fileCPUProfile.Close()
+ _ = context.fileCPUProfile.Close()
context.fileCPUProfile = nil
}
if context.fileMemProfile != nil {
- context.fileMemProfile.Close()
+ _ = context.fileMemProfile.Close()
context.fileMemProfile = nil
}
}
@@ -607,7 +615,7 @@ func (context *AptlyContext) Shutdown() {
context.taskList.Stop()
}
if context.database != nil {
- context.database.Close()
+ _ = context.database.Close()
context.database = nil
}
if context.downloader != nil {
@@ -652,7 +660,7 @@ func NewContext(flags *flag.FlagSet) (*AptlyContext, error) {
if err != nil {
return nil, err
}
- pprof.StartCPUProfile(context.fileCPUProfile)
+ _ = pprof.StartCPUProfile(context.fileCPUProfile)
}
memprofile := flags.Lookup("memprofile").Value.String()
@@ -672,7 +680,7 @@ func NewContext(flags *flag.FlagSet) (*AptlyContext, error) {
return nil, err
}
- context.fileMemStats.WriteString("# Time\tHeapSys\tHeapAlloc\tHeapIdle\tHeapReleased\n")
+ _, _ = context.fileMemStats.WriteString("# Time\tHeapSys\tHeapAlloc\tHeapIdle\tHeapReleased\n")
go func() {
var stats runtime.MemStats
@@ -682,7 +690,7 @@ func NewContext(flags *flag.FlagSet) (*AptlyContext, error) {
for {
runtime.ReadMemStats(&stats)
if context.fileMemStats != nil {
- context.fileMemStats.WriteString(fmt.Sprintf("%d\t%d\t%d\t%d\t%d\n",
+ _, _ = context.fileMemStats.WriteString(fmt.Sprintf("%d\t%d\t%d\t%d\t%d\n",
(time.Now().UnixNano()-start)/1000000, stats.HeapSys, stats.HeapAlloc, stats.HeapIdle, stats.HeapReleased))
time.Sleep(interval)
} else {
diff --git a/database/etcddb/database_test.go b/database/etcddb/database_test.go
index b31e5599..ce88209c 100644
--- a/database/etcddb/database_test.go
+++ b/database/etcddb/database_test.go
@@ -14,7 +14,6 @@ func Test(t *testing.T) {
}
type EtcDDBSuite struct {
- url string
db database.Storage
}
@@ -67,17 +66,17 @@ func (s *EtcDDBSuite) TestDelete(c *C) {
func (s *EtcDDBSuite) TestByPrefix(c *C) {
//c.Check(s.db.FetchByPrefix([]byte{0x80}), DeepEquals, [][]byte{})
- s.db.Put([]byte{0x80, 0x01}, []byte{0x01})
- s.db.Put([]byte{0x80, 0x03}, []byte{0x03})
- s.db.Put([]byte{0x80, 0x02}, []byte{0x02})
+ _ = s.db.Put([]byte{0x80, 0x01}, []byte{0x01})
+ _ = s.db.Put([]byte{0x80, 0x03}, []byte{0x03})
+ _ = s.db.Put([]byte{0x80, 0x02}, []byte{0x02})
c.Check(s.db.FetchByPrefix([]byte{0x80}), DeepEquals, [][]byte{{0x01}, {0x02}, {0x03}})
c.Check(s.db.KeysByPrefix([]byte{0x80}), DeepEquals, [][]byte{{0x80, 0x01}, {0x80, 0x02}, {0x80, 0x03}})
- s.db.Put([]byte{0x90, 0x01}, []byte{0x04})
+ _ = s.db.Put([]byte{0x90, 0x01}, []byte{0x04})
c.Check(s.db.FetchByPrefix([]byte{0x80}), DeepEquals, [][]byte{{0x01}, {0x02}, {0x03}})
c.Check(s.db.KeysByPrefix([]byte{0x80}), DeepEquals, [][]byte{{0x80, 0x01}, {0x80, 0x02}, {0x80, 0x03}})
- s.db.Put([]byte{0x00, 0x01}, []byte{0x05})
+ _ = s.db.Put([]byte{0x00, 0x01}, []byte{0x05})
c.Check(s.db.FetchByPrefix([]byte{0x80}), DeepEquals, [][]byte{{0x01}, {0x02}, {0x03}})
c.Check(s.db.KeysByPrefix([]byte{0x80}), DeepEquals, [][]byte{{0x80, 0x01}, {0x80, 0x02}, {0x80, 0x03}})
@@ -109,7 +108,7 @@ func (s *EtcDDBSuite) TestHasPrefix(c *C) {
//c.Check(s.db.HasPrefix([]byte(nil)), Equals, false)
//c.Check(s.db.HasPrefix([]byte{0x80}), Equals, false)
- s.db.Put([]byte{0x80, 0x01}, []byte{0x01})
+ _ = s.db.Put([]byte{0x80, 0x01}, []byte{0x01})
c.Check(s.db.HasPrefix([]byte(nil)), Equals, true)
c.Check(s.db.HasPrefix([]byte{0x80}), Equals, true)
@@ -124,13 +123,15 @@ func (s *EtcDDBSuite) TestTransactionCommit(c *C) {
value2 = []byte("value2")
)
transaction, err := s.db.OpenTransaction()
+ c.Assert(err, IsNil)
err = s.db.Put(key, value)
c.Assert(err, IsNil)
c.Assert(err, IsNil)
- transaction.Put(key2, value2)
+ _ = transaction.Put(key2, value2)
v, err := s.db.Get(key)
+ c.Assert(err, IsNil)
c.Check(v, DeepEquals, value)
err = transaction.Delete(key)
c.Assert(err, IsNil)
diff --git a/database/etcddb/storage.go b/database/etcddb/storage.go
index 65e3913b..1937dcac 100644
--- a/database/etcddb/storage.go
+++ b/database/etcddb/storage.go
@@ -145,7 +145,7 @@ func (s *EtcDStorage) Close() error {
return err
}
-// Reopen tries to open (re-open) the database
+// Open returns the database
func (s *EtcDStorage) Open() error {
if s.db != nil {
return nil
diff --git a/database/etcddb/transaction.go b/database/etcddb/transaction.go
index 01f54dad..45c2c5f9 100644
--- a/database/etcddb/transaction.go
+++ b/database/etcddb/transaction.go
@@ -67,8 +67,7 @@ func (t *transaction) Commit() (err error) {
// Discard is safe to call after Commit(), it would be no-op
func (t *transaction) Discard() {
t.ops = []clientv3.Op{}
- t.tmpdb.Drop()
- return
+ _ = t.tmpdb.Drop()
}
// transaction should implement database.Transaction
diff --git a/database/goleveldb/database.go b/database/goleveldb/database.go
index a2874a6e..98960a2c 100644
--- a/database/goleveldb/database.go
+++ b/database/goleveldb/database.go
@@ -51,8 +51,8 @@ func RecoverDB(path string) error {
return err
}
- db.Close()
- stor.Close()
+ _ = db.Close()
+ _ = stor.Close()
return nil
}
diff --git a/database/goleveldb/database_test.go b/database/goleveldb/database_test.go
index e192df6b..ee9840e9 100644
--- a/database/goleveldb/database_test.go
+++ b/database/goleveldb/database_test.go
@@ -119,17 +119,17 @@ func (s *LevelDBSuite) TestDelete(c *C) {
func (s *LevelDBSuite) TestByPrefix(c *C) {
c.Check(s.db.FetchByPrefix([]byte{0x80}), DeepEquals, [][]byte{})
- s.db.Put([]byte{0x80, 0x01}, []byte{0x01})
- s.db.Put([]byte{0x80, 0x03}, []byte{0x03})
- s.db.Put([]byte{0x80, 0x02}, []byte{0x02})
+ _ = s.db.Put([]byte{0x80, 0x01}, []byte{0x01})
+ _ = s.db.Put([]byte{0x80, 0x03}, []byte{0x03})
+ _ = s.db.Put([]byte{0x80, 0x02}, []byte{0x02})
c.Check(s.db.FetchByPrefix([]byte{0x80}), DeepEquals, [][]byte{{0x01}, {0x02}, {0x03}})
c.Check(s.db.KeysByPrefix([]byte{0x80}), DeepEquals, [][]byte{{0x80, 0x01}, {0x80, 0x02}, {0x80, 0x03}})
- s.db.Put([]byte{0x90, 0x01}, []byte{0x04})
+ _ = s.db.Put([]byte{0x90, 0x01}, []byte{0x04})
c.Check(s.db.FetchByPrefix([]byte{0x80}), DeepEquals, [][]byte{{0x01}, {0x02}, {0x03}})
c.Check(s.db.KeysByPrefix([]byte{0x80}), DeepEquals, [][]byte{{0x80, 0x01}, {0x80, 0x02}, {0x80, 0x03}})
- s.db.Put([]byte{0x00, 0x01}, []byte{0x05})
+ _ = s.db.Put([]byte{0x00, 0x01}, []byte{0x05})
c.Check(s.db.FetchByPrefix([]byte{0x80}), DeepEquals, [][]byte{{0x01}, {0x02}, {0x03}})
c.Check(s.db.KeysByPrefix([]byte{0x80}), DeepEquals, [][]byte{{0x80, 0x01}, {0x80, 0x02}, {0x80, 0x03}})
@@ -161,7 +161,7 @@ func (s *LevelDBSuite) TestHasPrefix(c *C) {
c.Check(s.db.HasPrefix([]byte(nil)), Equals, false)
c.Check(s.db.HasPrefix([]byte{0x80}), Equals, false)
- s.db.Put([]byte{0x80, 0x01}, []byte{0x01})
+ _ = s.db.Put([]byte{0x80, 0x01}, []byte{0x01})
c.Check(s.db.HasPrefix([]byte(nil)), Equals, true)
c.Check(s.db.HasPrefix([]byte{0x80}), Equals, true)
@@ -180,8 +180,8 @@ func (s *LevelDBSuite) TestBatch(c *C) {
c.Assert(err, IsNil)
batch := s.db.CreateBatch()
- batch.Put(key2, value2)
- batch.Delete(key)
+ _ = batch.Put(key2, value2)
+ _ = batch.Delete(key)
v, err := s.db.Get(key)
c.Check(err, IsNil)
@@ -202,9 +202,9 @@ func (s *LevelDBSuite) TestBatch(c *C) {
}
func (s *LevelDBSuite) TestCompactDB(c *C) {
- s.db.Put([]byte{0x80, 0x01}, []byte{0x01})
- s.db.Put([]byte{0x80, 0x03}, []byte{0x03})
- s.db.Put([]byte{0x80, 0x02}, []byte{0x02})
+ _ = s.db.Put([]byte{0x80, 0x01}, []byte{0x01})
+ _ = s.db.Put([]byte{0x80, 0x03}, []byte{0x03})
+ _ = s.db.Put([]byte{0x80, 0x02}, []byte{0x02})
c.Check(s.db.CompactDB(), IsNil)
}
diff --git a/deb/changes.go b/deb/changes.go
index c264986a..d0c80c74 100644
--- a/deb/changes.go
+++ b/deb/changes.go
@@ -60,14 +60,14 @@ func (c *Changes) VerifyAndParse(acceptUnsigned, ignoreSignature bool, verifier
if err != nil {
return err
}
- defer input.Close()
+ defer func() { _ = input.Close() }()
isClearSigned, err := verifier.IsClearSigned(input)
if err != nil {
return err
}
- input.Seek(0, 0)
+ _, _ = input.Seek(0, 0)
if !isClearSigned && !acceptUnsigned {
return fmt.Errorf(".changes file is not signed and unsigned processing hasn't been enabled")
@@ -79,7 +79,7 @@ func (c *Changes) VerifyAndParse(acceptUnsigned, ignoreSignature bool, verifier
if err != nil {
return err
}
- input.Seek(0, 0)
+ _, _ = input.Seek(0, 0)
c.SignatureKeys = keyInfo.GoodKeys
}
@@ -91,7 +91,7 @@ func (c *Changes) VerifyAndParse(acceptUnsigned, ignoreSignature bool, verifier
if err != nil {
return err
}
- defer text.Close()
+ defer func() { _ = text.Close() }()
} else {
text = input
}
@@ -307,7 +307,7 @@ func ImportChangesFiles(changesFiles []string, reporter aptly.ResultReporter, ac
if err != nil {
failedFiles = append(failedFiles, path)
reporter.Warning("unable to process file %s: %s", changes.ChangesName, err)
- changes.Cleanup()
+ _ = changes.Cleanup()
continue
}
@@ -315,7 +315,7 @@ func ImportChangesFiles(changesFiles []string, reporter aptly.ResultReporter, ac
if err != nil {
failedFiles = append(failedFiles, path)
reporter.Warning("unable to process file %s: %s", changes.ChangesName, err)
- changes.Cleanup()
+ _ = changes.Cleanup()
continue
}
@@ -334,7 +334,7 @@ func ImportChangesFiles(changesFiles []string, reporter aptly.ResultReporter, ac
if err != nil {
failedFiles = append(failedFiles, path)
reporter.Warning("unable to process file %s: %s", changes.ChangesName, err)
- changes.Cleanup()
+ _ = changes.Cleanup()
continue
}
@@ -354,7 +354,7 @@ func ImportChangesFiles(changesFiles []string, reporter aptly.ResultReporter, ac
failedFiles = append(failedFiles, path)
reporter.Warning("changes file skipped due to uploaders config: %s, keys %#v: %s",
changes.ChangesName, changes.SignatureKeys, err)
- changes.Cleanup()
+ _ = changes.Cleanup()
continue
}
}
diff --git a/deb/changes_test.go b/deb/changes_test.go
index b7dc4d95..6b7996c6 100644
--- a/deb/changes_test.go
+++ b/deb/changes_test.go
@@ -51,7 +51,7 @@ func (s *ChangesSuite) SetUpTest(c *C) {
func (s *ChangesSuite) TearDownTest(c *C) {
s.progress.Shutdown()
- s.db.Close()
+ _ = s.db.Close()
}
func (s *ChangesSuite) TestParseAndVerify(c *C) {
@@ -108,13 +108,13 @@ func (s *ChangesSuite) TestImportChangesFiles(c *C) {
for _, path := range origFailedFiles {
filename := filepath.Join(s.Dir, filepath.Base(path))
- utils.CopyFile(path, filename)
+ _ = utils.CopyFile(path, filename)
expectedFailedFiles = append(expectedFailedFiles, filename)
}
for _, path := range origProcessedFiles {
filename := filepath.Join(s.Dir, filepath.Base(path))
- utils.CopyFile(path, filename)
+ _ = utils.CopyFile(path, filename)
expectedProcessedFiles = append(expectedProcessedFiles, filename)
}
diff --git a/deb/checksum_collection_test.go b/deb/checksum_collection_test.go
index 0a60949e..4c861250 100644
--- a/deb/checksum_collection_test.go
+++ b/deb/checksum_collection_test.go
@@ -28,7 +28,7 @@ func (s *ChecksumCollectionSuite) SetUpTest(c *C) {
}
func (s *ChecksumCollectionSuite) TearDownTest(c *C) {
- s.db.Close()
+ _ = s.db.Close()
}
func (s *ChecksumCollectionSuite) TestFlow(c *C) {
diff --git a/deb/deb.go b/deb/deb.go
index 8ce1371f..56469b0d 100644
--- a/deb/deb.go
+++ b/deb/deb.go
@@ -17,7 +17,7 @@ import (
"github.com/aptly-dev/aptly/pgp"
"github.com/kjk/lzma"
"github.com/klauspost/compress/zstd"
- "github.com/smira/go-xz"
+ xz "github.com/smira/go-xz"
)
// Source kinds
@@ -35,7 +35,7 @@ func GetControlFileFromDeb(packageFile string) (Stanza, error) {
if err != nil {
return nil, err
}
- defer file.Close()
+ defer func() { _ = file.Close() }()
library := ar.NewReader(file)
for {
@@ -66,14 +66,14 @@ func GetControlFileFromDeb(packageFile string) (Stanza, error) {
if err != nil {
return nil, errors.Wrapf(err, "unable to ungzip %s from %s", header.Name, packageFile)
}
- defer ungzip.Close()
+ defer func() { _ = ungzip.Close() }()
tarInput = ungzip
case "control.tar.xz":
unxz, err := xz.NewReader(bufReader)
if err != nil {
return nil, errors.Wrapf(err, "unable to unxz %s from %s", header.Name, packageFile)
}
- defer unxz.Close()
+ defer func() { _ = unxz.Close() }()
tarInput = unxz
case "control.tar.zst":
unzstd, err := zstd.NewReader(bufReader)
@@ -116,10 +116,10 @@ func GetControlFileFromDsc(dscFile string, verifier pgp.Verifier) (Stanza, error
if err != nil {
return nil, err
}
- defer file.Close()
+ defer func() { _ = file.Close() }()
isClearSigned, err := verifier.IsClearSigned(file)
- file.Seek(0, 0)
+ _, _ = file.Seek(0, 0)
if err != nil {
return nil, err
@@ -132,7 +132,7 @@ func GetControlFileFromDsc(dscFile string, verifier pgp.Verifier) (Stanza, error
if err != nil {
return nil, err
}
- defer text.Close()
+ defer func() { _ = text.Close() }()
} else {
text = file
}
@@ -181,7 +181,7 @@ func GetContentsFromDeb(file io.Reader, packageFile string) ([]string, error) {
if err != nil {
return nil, errors.Wrapf(err, "unable to ungzip data.tar.gz from %s", packageFile)
}
- defer ungzip.Close()
+ defer func() { _ = ungzip.Close() }()
tarInput = ungzip
}
case "data.tar.bz2":
@@ -191,11 +191,11 @@ func GetContentsFromDeb(file io.Reader, packageFile string) ([]string, error) {
if err != nil {
return nil, errors.Wrapf(err, "unable to unxz data.tar.xz from %s", packageFile)
}
- defer unxz.Close()
+ defer func() { _ = unxz.Close() }()
tarInput = unxz
case "data.tar.lzma":
unlzma := lzma.NewReader(bufReader)
- defer unlzma.Close()
+ defer func() { _ = unlzma.Close() }()
tarInput = unlzma
case "data.tar.zst":
unzstd, err := zstd.NewReader(bufReader)
diff --git a/deb/find_dangling.go b/deb/find_dangling.go
new file mode 100644
index 00000000..1951e97f
--- /dev/null
+++ b/deb/find_dangling.go
@@ -0,0 +1,45 @@
+package deb
+
+import (
+ "errors"
+ "fmt"
+
+ "github.com/aptly-dev/aptly/database"
+)
+
+// FindDanglingReferences finds references that exist in the given PackageRefList, but not in the given PackageCollection.
+// It returns all such references, so they can be removed from the database.
+func FindDanglingReferences(reflist *PackageRefList, packages *PackageCollection) (dangling *PackageRefList, err error) {
+ dangling = &PackageRefList{}
+
+ err = reflist.ForEach(func(key []byte) error {
+ ok, err := isDangling(packages, key)
+ if err != nil {
+ return err
+ }
+
+ if ok {
+ dangling.Refs = append(dangling.Refs, key)
+ }
+
+ return nil
+ })
+ if err != nil {
+ return nil, err
+ }
+
+ return dangling, nil
+}
+
+func isDangling(packages *PackageCollection, key []byte) (bool, error) {
+ _, err := packages.ByKey(key)
+ if errors.Is(err, database.ErrNotFound) {
+ return true, nil
+ }
+
+ if err != nil {
+ return false, fmt.Errorf("get reference %q: %w", key, err)
+ }
+
+ return false, nil
+}
diff --git a/deb/find_dangling_test.go b/deb/find_dangling_test.go
new file mode 100644
index 00000000..326b9041
--- /dev/null
+++ b/deb/find_dangling_test.go
@@ -0,0 +1,46 @@
+package deb_test
+
+import (
+ "bytes"
+ "testing"
+
+ "github.com/aptly-dev/aptly/database/goleveldb"
+ "github.com/aptly-dev/aptly/deb"
+)
+
+func TestFindDanglingReferences(t *testing.T) {
+ reflist := deb.NewPackageRefList()
+ reflist.Refs = [][]byte{[]byte("P existing 1.2.3"), []byte("P dangling 1.2.3")}
+
+ db, _ := goleveldb.NewOpenDB(t.TempDir())
+ packages := deb.NewPackageCollection(db)
+
+ if err := packages.Update(&deb.Package{Name: "existing", Version: "1.2.3"}); err != nil {
+ t.Fatal(err)
+ }
+
+ dangling, err := deb.FindDanglingReferences(reflist, packages)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ exp := &deb.PackageRefList{
+ Refs: [][]byte{[]byte("P dangling 1.2.3")},
+ }
+
+ compareRefs(t, exp, dangling)
+}
+
+func compareRefs(t *testing.T, exp, got *deb.PackageRefList) {
+ t.Helper()
+
+ if len(exp.Refs) != len(got.Refs) {
+ t.Fatalf("refs length mismatch: exp %d, got %d", len(exp.Refs), len(got.Refs))
+ }
+
+ for i := range exp.Refs {
+ if !bytes.Equal(exp.Refs[i], got.Refs[i]) {
+ t.Fatalf("refs do not match: exp %q, got %q", exp.Refs[i], got.Refs[i])
+ }
+ }
+}
diff --git a/deb/format_test.go b/deb/format_test.go
index 2c32b033..7228566b 100644
--- a/deb/format_test.go
+++ b/deb/format_test.go
@@ -163,7 +163,7 @@ func (s *ControlFileSuite) TestCanonicalCase(c *C) {
func (s *ControlFileSuite) TestLongFields(c *C) {
f, err := os.Open("long.stanza")
c.Assert(err, IsNil)
- defer f.Close()
+ defer func() { _ = f.Close() }()
r := NewControlFileReader(f, false, false)
stanza, e := r.ReadStanza()
diff --git a/deb/graph.go b/deb/graph.go
index 16a7ce85..1d361685 100644
--- a/deb/graph.go
+++ b/deb/graph.go
@@ -12,15 +12,15 @@ func BuildGraph(collectionFactory *CollectionFactory, layout string) (gographviz
var err error
graph := gographviz.NewEscape()
- graph.SetDir(true)
- graph.SetName("aptly")
+ _ = graph.SetDir(true)
+ _ = graph.SetName("aptly")
var labelStart string
var labelEnd string
switch layout {
case "vertical":
- graph.AddAttr("aptly", "rankdir", "LR")
+ _ = graph.AddAttr("aptly", "rankdir", "LR")
labelStart = ""
labelEnd = ""
case "horizontal":
@@ -38,7 +38,7 @@ func BuildGraph(collectionFactory *CollectionFactory, layout string) (gographviz
return e
}
- graph.AddNode("aptly", repo.UUID, map[string]string{
+ _ = graph.AddNode("aptly", repo.UUID, map[string]string{
"shape": "Mrecord",
"style": "filled",
"fillcolor": "darkgoldenrod1",
@@ -60,7 +60,7 @@ func BuildGraph(collectionFactory *CollectionFactory, layout string) (gographviz
return e
}
- graph.AddNode("aptly", repo.UUID, map[string]string{
+ _ = graph.AddNode("aptly", repo.UUID, map[string]string{
"shape": "Mrecord",
"style": "filled",
"fillcolor": "mediumseagreen",
@@ -75,7 +75,7 @@ func BuildGraph(collectionFactory *CollectionFactory, layout string) (gographviz
return nil, err
}
- collectionFactory.SnapshotCollection().ForEach(func(snapshot *Snapshot) error {
+ _ = collectionFactory.SnapshotCollection().ForEach(func(snapshot *Snapshot) error {
existingNodes[snapshot.UUID] = true
return nil
})
@@ -91,7 +91,7 @@ func BuildGraph(collectionFactory *CollectionFactory, layout string) (gographviz
description = "Snapshot from repo"
}
- graph.AddNode("aptly", snapshot.UUID, map[string]string{
+ _ = graph.AddNode("aptly", snapshot.UUID, map[string]string{
"shape": "Mrecord",
"style": "filled",
"fillcolor": "cadetblue1",
@@ -103,7 +103,7 @@ func BuildGraph(collectionFactory *CollectionFactory, layout string) (gographviz
for _, uuid := range snapshot.SourceIDs {
_, exists := existingNodes[uuid]
if exists {
- graph.AddEdge(uuid, snapshot.UUID, true, nil)
+ _ = graph.AddEdge(uuid, snapshot.UUID, true, nil)
}
}
}
@@ -114,8 +114,8 @@ func BuildGraph(collectionFactory *CollectionFactory, layout string) (gographviz
return nil, err
}
- collectionFactory.PublishedRepoCollection().ForEach(func(repo *PublishedRepo) error {
- graph.AddNode("aptly", repo.UUID, map[string]string{
+ _ = collectionFactory.PublishedRepoCollection().ForEach(func(repo *PublishedRepo) error {
+ _ = graph.AddNode("aptly", repo.UUID, map[string]string{
"shape": "Mrecord",
"style": "filled",
"fillcolor": "darkolivegreen1",
@@ -127,7 +127,7 @@ func BuildGraph(collectionFactory *CollectionFactory, layout string) (gographviz
for _, uuid := range repo.Sources {
_, exists := existingNodes[uuid]
if exists {
- graph.AddEdge(uuid, repo.UUID, true, nil)
+ _ = graph.AddEdge(uuid, repo.UUID, true, nil)
}
}
diff --git a/deb/index_files.go b/deb/index_files.go
index 27a19470..88c3c709 100644
--- a/deb/index_files.go
+++ b/deb/index_files.go
@@ -59,24 +59,24 @@ func (file *indexFile) Finalize(signer pgp.Signer) error {
if file.discardable {
return nil
}
- file.BufWriter()
+ _, _ = file.BufWriter()
}
err := file.w.Flush()
if err != nil {
- file.tempFile.Close()
+ _ = file.tempFile.Close()
return fmt.Errorf("unable to write to index file: %s", err)
}
if file.compressable {
err = utils.CompressFile(file.tempFile, file.onlyGzip || file.parent.skipBz2)
if err != nil {
- file.tempFile.Close()
+ _ = file.tempFile.Close()
return fmt.Errorf("unable to compress index file: %s", err)
}
}
- file.tempFile.Close()
+ _ = file.tempFile.Close()
exts := []string{""}
cksumExts := exts
@@ -220,11 +220,11 @@ func packageIndexByHash(file *indexFile, ext string, hash string, sum string) er
// If we managed to resolve the link target: delete it. This is the
// oldest physical index file we no longer need. Once we drop our
// old symlink we'll essentially forget about it existing at all.
- file.parent.publishedStorage.Remove(linkTarget)
+ _ = file.parent.publishedStorage.Remove(linkTarget)
}
- file.parent.publishedStorage.Remove(oldIndexPath)
+ _ = file.parent.publishedStorage.Remove(oldIndexPath)
}
- file.parent.publishedStorage.RenameFile(indexPath, oldIndexPath)
+ _ = file.parent.publishedStorage.RenameFile(indexPath, oldIndexPath)
}
// create symlink
diff --git a/deb/list.go b/deb/list.go
index 28644e40..25a2d283 100644
--- a/deb/list.go
+++ b/deb/list.go
@@ -438,7 +438,7 @@ func (l *PackageList) Scan(q PackageQuery) (result *PackageList) {
result = NewPackageListWithDuplicates(l.duplicatesAllowed, 0)
for _, pkg := range l.packages {
if q.Matches(pkg) {
- result.Add(pkg)
+ _ = result.Add(pkg)
}
}
@@ -456,7 +456,7 @@ func (l *PackageList) SearchByKey(arch, name, version string) (result *PackageLi
pkg := l.packages["P"+arch+" "+name+" "+version]
if pkg != nil {
- result.Add(pkg)
+ _ = result.Add(pkg)
}
return
diff --git a/deb/list_test.go b/deb/list_test.go
index efff77a3..464dd09e 100644
--- a/deb/list_test.go
+++ b/deb/list_test.go
@@ -96,7 +96,7 @@ func (s *PackageListSuite) SetUpTest(c *C) {
{Name: "dpkg", Version: "1.7", Architecture: "source", SourceArchitecture: "any", IsSource: true, deps: &PackageDependencies{}},
}
for _, p := range s.packages {
- s.il.Add(p)
+ _ = s.il.Add(p)
}
s.il.PrepareIndex()
@@ -110,7 +110,7 @@ func (s *PackageListSuite) SetUpTest(c *C) {
{Name: "app", Version: "3.0", Architecture: "amd64", deps: &PackageDependencies{PreDepends: []string{"dpkg >= 1.6)"}, Depends: []string{"lib (>> 0.9)", "data (>= 1.0)"}}},
}
for _, p := range s.packages2 {
- s.il2.Add(p)
+ _ = s.il2.Add(p)
}
s.il2.PrepareIndex()
@@ -202,8 +202,8 @@ func (s *PackageListSuite) TestRemoveWhenIndexed(c *C) {
}
func (s *PackageListSuite) TestForeach(c *C) {
- s.list.Add(s.p1)
- s.list.Add(s.p3)
+ _ = s.list.Add(s.p1)
+ _ = s.list.Add(s.p3)
Len := 0
err := s.list.ForEach(func(*Package) error {
@@ -232,21 +232,21 @@ func (s *PackageListSuite) TestIndex(c *C) {
}
func (s *PackageListSuite) TestAppend(c *C) {
- s.list.Add(s.p1)
- s.list.Add(s.p3)
+ _ = s.list.Add(s.p1)
+ _ = s.list.Add(s.p3)
err := s.list.Append(s.il)
c.Check(err, IsNil)
c.Check(s.list.Len(), Equals, 16)
list := NewPackageList()
- list.Add(s.p4)
+ _ = list.Add(s.p4)
err = s.list.Append(list)
c.Check(err, ErrorMatches, "package already exists and is different: .*")
s.list.PrepareIndex()
- c.Check(func() { s.list.Append(s.il) }, Panics, "Append not supported when indexed")
+ c.Check(func() { _ = s.list.Append(s.il) }, Panics, "Append not supported when indexed")
}
func (s *PackageListSuite) TestSearch(c *C) {
@@ -312,7 +312,7 @@ func (s *PackageListSuite) TestSearch(c *C) {
func (s *PackageListSuite) TestFilter(c *C) {
c.Check(func() {
- s.list.Filter(FilterOptions{
+ _, _ = s.list.Filter(FilterOptions{
Queries: []PackageQuery{&PkgQuery{"abcd", "0.3", "i386"}},
})
}, Panics, "list not indexed, can't filter")
@@ -479,7 +479,7 @@ func (s *PackageListSuite) TestVerifyDependencies(c *C) {
{Pkg: "mail-agent", Relation: VersionDontCare, Version: "", Architecture: "arm"}})
for _, p := range s.sourcePackages {
- s.il.Add(p)
+ _ = s.il.Add(p)
}
missing, err = s.il.VerifyDependencies(DepFollowSource, []string{"i386", "amd64"}, s.il, nil)
diff --git a/deb/local.go b/deb/local.go
index 42d5d3f2..4be46076 100644
--- a/deb/local.go
+++ b/deb/local.go
@@ -69,7 +69,7 @@ func (repo *LocalRepo) Encode() []byte {
var buf bytes.Buffer
encoder := codec.NewEncoder(&buf, &codec.MsgpackHandle{})
- encoder.Encode(repo)
+ _ = encoder.Encode(repo)
return buf.Bytes()
}
@@ -116,7 +116,7 @@ func (collection *LocalRepoCollection) search(filter func(*LocalRepo) bool, uniq
return result
}
- collection.db.ProcessByPrefix([]byte("L"), func(_, blob []byte) error {
+ _ = collection.db.ProcessByPrefix([]byte("L"), func(_, blob []byte) error {
r := &LocalRepo{}
if err := r.Decode(blob); err != nil {
log.Printf("Error decoding local repo: %s\n", err)
@@ -159,9 +159,9 @@ func (collection *LocalRepoCollection) Add(repo *LocalRepo) error {
// Update stores updated information about repo in DB
func (collection *LocalRepoCollection) Update(repo *LocalRepo) error {
batch := collection.db.CreateBatch()
- batch.Put(repo.Key(), repo.Encode())
+ _ = batch.Put(repo.Key(), repo.Encode())
if repo.packageRefs != nil {
- batch.Put(repo.RefKey(), repo.packageRefs.Encode())
+ _ = batch.Put(repo.RefKey(), repo.packageRefs.Encode())
}
return batch.Write()
}
@@ -247,7 +247,7 @@ func (collection *LocalRepoCollection) Drop(repo *LocalRepo) error {
delete(collection.cache, repo.UUID)
batch := collection.db.CreateBatch()
- batch.Delete(repo.Key())
- batch.Delete(repo.RefKey())
+ _ = batch.Delete(repo.Key())
+ _ = batch.Delete(repo.RefKey())
return batch.Write()
}
diff --git a/deb/local_test.go b/deb/local_test.go
index c9072b7d..07f818c3 100644
--- a/deb/local_test.go
+++ b/deb/local_test.go
@@ -21,8 +21,8 @@ var _ = Suite(&LocalRepoSuite{})
func (s *LocalRepoSuite) SetUpTest(c *C) {
s.db, _ = goleveldb.NewOpenDB(c.MkDir())
s.list = NewPackageList()
- s.list.Add(&Package{Name: "lib", Version: "1.7", Architecture: "i386"})
- s.list.Add(&Package{Name: "app", Version: "1.9", Architecture: "amd64"})
+ _ = s.list.Add(&Package{Name: "lib", Version: "1.7", Architecture: "i386"})
+ _ = s.list.Add(&Package{Name: "app", Version: "1.9", Architecture: "amd64"})
s.reflist = NewPackageRefListFromPackageList(s.list)
@@ -31,7 +31,7 @@ func (s *LocalRepoSuite) SetUpTest(c *C) {
}
func (s *LocalRepoSuite) TearDownTest(c *C) {
- s.db.Close()
+ _ = s.db.Close()
}
func (s *LocalRepoSuite) TestString(c *C) {
@@ -88,14 +88,14 @@ func (s *LocalRepoCollectionSuite) SetUpTest(c *C) {
s.collection = NewLocalRepoCollection(s.db)
s.list = NewPackageList()
- s.list.Add(&Package{Name: "lib", Version: "1.7", Architecture: "i386"})
- s.list.Add(&Package{Name: "app", Version: "1.9", Architecture: "amd64"})
+ _ = s.list.Add(&Package{Name: "lib", Version: "1.7", Architecture: "i386"})
+ _ = s.list.Add(&Package{Name: "app", Version: "1.9", Architecture: "amd64"})
s.reflist = NewPackageRefListFromPackageList(s.list)
}
func (s *LocalRepoCollectionSuite) TearDownTest(c *C) {
- s.db.Close()
+ _ = s.db.Close()
}
func (s *LocalRepoCollectionSuite) TestAddByName(c *C) {
@@ -156,7 +156,7 @@ func (s *LocalRepoCollectionSuite) TestUpdateLoadComplete(c *C) {
func (s *LocalRepoCollectionSuite) TestForEachAndLen(c *C) {
repo := NewLocalRepo("local1", "Comment 1")
- s.collection.Add(repo)
+ _ = s.collection.Add(repo)
count := 0
err := s.collection.ForEach(func(*LocalRepo) error {
@@ -178,10 +178,10 @@ func (s *LocalRepoCollectionSuite) TestForEachAndLen(c *C) {
func (s *LocalRepoCollectionSuite) TestDrop(c *C) {
repo1 := NewLocalRepo("local1", "Comment 1")
- s.collection.Add(repo1)
+ _ = s.collection.Add(repo1)
repo2 := NewLocalRepo("local2", "Comment 2")
- s.collection.Add(repo2)
+ _ = s.collection.Add(repo2)
r1, _ := s.collection.ByUUID(repo1.UUID)
c.Check(r1, Equals, repo1)
@@ -208,6 +208,6 @@ func (s *LocalRepoCollectionSuite) TestDropNonExisting(c *C) {
_, err := s.collection.ByUUID(repo.UUID)
c.Check(err, ErrorMatches, "local repo .* not found")
- err = s.collection.Drop(repo)
+ _ = s.collection.Drop(repo)
c.Check(s.collection.Drop(repo), ErrorMatches, "local repo not found")
}
diff --git a/deb/package.go b/deb/package.go
index fc4c9b68..0af2a4b4 100644
--- a/deb/package.go
+++ b/deb/package.go
@@ -565,7 +565,7 @@ func (p *Package) CalculateContents(packagePool aptly.PackagePool, progress aptl
}
return nil, err
}
- defer reader.Close()
+ defer func() { _ = reader.Close() }()
contents, err := GetContentsFromDeb(reader, file.Filename)
if err != nil {
diff --git a/deb/package_collection.go b/deb/package_collection.go
index 0027f1de..0f2e7b8f 100644
--- a/deb/package_collection.go
+++ b/deb/package_collection.go
@@ -309,7 +309,7 @@ func (collection *PackageCollection) Scan(q PackageQuery) (result *PackageList)
}
if q.Matches(pkg) {
- result.Add(pkg)
+ _ = result.Add(pkg)
}
}
@@ -337,7 +337,7 @@ func (collection *PackageCollection) SearchByKey(arch, name, version string) (re
}
if pkg.Architecture == arch && pkg.Name == name && pkg.Version == version {
- result.Add(pkg)
+ _ = result.Add(pkg)
}
}
diff --git a/deb/package_collection_test.go b/deb/package_collection_test.go
index eb726e31..691a48c3 100644
--- a/deb/package_collection_test.go
+++ b/deb/package_collection_test.go
@@ -23,7 +23,7 @@ func (s *PackageCollectionSuite) SetUpTest(c *C) {
}
func (s *PackageCollectionSuite) TearDownTest(c *C) {
- s.db.Close()
+ _ = s.db.Close()
}
func (s *PackageCollectionSuite) TestUpdate(c *C) {
@@ -67,7 +67,7 @@ func (s *PackageCollectionSuite) TestByKey(c *C) {
func (s *PackageCollectionSuite) TestByKeyOld0_3(c *C) {
key := []byte("Pi386 vmware-view-open-client 4.5.0-297975+dfsg-4+b1")
- s.db.Put(key, old0_3Package)
+ _ = s.db.Put(key, old0_3Package)
p, err := s.collection.ByKey(key)
c.Check(err, IsNil)
diff --git a/deb/package_files.go b/deb/package_files.go
index ae208b69..2a805d83 100644
--- a/deb/package_files.go
+++ b/deb/package_files.go
@@ -64,7 +64,7 @@ func (files PackageFiles) Hash() uint64 {
for _, f := range files {
h.Write([]byte(f.Filename))
- binary.Write(h, binary.BigEndian, f.Checksums.Size)
+ _ = binary.Write(h, binary.BigEndian, f.Checksums.Size)
h.Write([]byte(f.Checksums.MD5))
h.Write([]byte(f.Checksums.SHA1))
h.Write([]byte(f.Checksums.SHA256))
diff --git a/deb/package_files_test.go b/deb/package_files_test.go
index 89c1abc8..0feaa13c 100644
--- a/deb/package_files_test.go
+++ b/deb/package_files_test.go
@@ -1,7 +1,7 @@
package deb
import (
- "io/ioutil"
+ "os"
"path/filepath"
"github.com/aptly-dev/aptly/aptly"
@@ -39,7 +39,7 @@ func (s *PackageFilesSuite) TestVerify(c *C) {
c.Check(result, Equals, false)
tmpFilepath := filepath.Join(c.MkDir(), "file")
- c.Assert(ioutil.WriteFile(tmpFilepath, []byte("abcde"), 0777), IsNil)
+ c.Assert(os.WriteFile(tmpFilepath, []byte("abcde"), 0777), IsNil)
s.files[0].PoolPath, _ = packagePool.Import(tmpFilepath, s.files[0].Filename, &s.files[0].Checksums, false, s.cs)
diff --git a/deb/package_test.go b/deb/package_test.go
index 18f8040d..e2574fc8 100644
--- a/deb/package_test.go
+++ b/deb/package_test.go
@@ -2,7 +2,7 @@ package deb
import (
"bytes"
- "io/ioutil"
+ "os"
"path/filepath"
"regexp"
@@ -395,7 +395,7 @@ func (s *PackageSuite) TestLinkFromPool(c *C) {
p := NewPackageFromControlFile(s.stanza)
tmpFilepath := filepath.Join(c.MkDir(), "file")
- c.Assert(ioutil.WriteFile(tmpFilepath, nil, 0777), IsNil)
+ c.Assert(os.WriteFile(tmpFilepath, nil, 0777), IsNil)
p.Files()[0].PoolPath, _ = packagePool.Import(tmpFilepath, p.Files()[0].Filename, &p.Files()[0].Checksums, false, cs)
@@ -434,7 +434,7 @@ func (s *PackageSuite) TestDownloadList(c *C) {
})
tmpFilepath := filepath.Join(c.MkDir(), "file")
- c.Assert(ioutil.WriteFile(tmpFilepath, []byte("abcde"), 0777), IsNil)
+ c.Assert(os.WriteFile(tmpFilepath, []byte("abcde"), 0777), IsNil)
p.Files()[0].PoolPath, _ = packagePool.Import(tmpFilepath, p.Files()[0].Filename, &p.Files()[0].Checksums, false, cs)
list, err = p.DownloadList(packagePool, cs)
@@ -449,7 +449,7 @@ func (s *PackageSuite) TestVerifyFiles(c *C) {
cs := files.NewMockChecksumStorage()
tmpFilepath := filepath.Join(c.MkDir(), "file")
- c.Assert(ioutil.WriteFile(tmpFilepath, []byte("abcde"), 0777), IsNil)
+ c.Assert(os.WriteFile(tmpFilepath, []byte("abcde"), 0777), IsNil)
p.Files()[0].PoolPath, _ = packagePool.Import(tmpFilepath, p.Files()[0].Filename, &p.Files()[0].Checksums, false, cs)
diff --git a/deb/publish.go b/deb/publish.go
index 1ef23fb9..46c9557f 100644
--- a/deb/publish.go
+++ b/deb/publish.go
@@ -631,7 +631,7 @@ func (p *PublishedRepo) Components() []string {
return result
}
-// Components returns sorted list of published repo source names
+// SourceNames returns sorted list of published repo source names
func (p *PublishedRepo) SourceNames() []string {
var sources = []string{}
@@ -702,7 +702,7 @@ func (p *PublishedRepo) Encode() []byte {
var buf bytes.Buffer
encoder := codec.NewEncoder(&buf, &codec.MsgpackHandle{})
- encoder.Encode(p)
+ _ = encoder.Encode(p)
return buf.Bytes()
}
@@ -884,7 +884,7 @@ func (p *PublishedRepo) Publish(packagePool aptly.PackagePool, publishedStorageP
if err != nil {
return err
}
- defer os.RemoveAll(tempDir)
+ defer func() { _ = os.RemoveAll(tempDir) }()
indexes := newIndexFiles(publishedStorage, basePath, tempDir, suffix, p.AcquireByHash, p.SkipBz2)
@@ -970,7 +970,7 @@ func (p *PublishedRepo) Publish(packagePool aptly.PackagePool, publishedStorageP
contentIndexesMap[key] = contentIndex
}
- contentIndex.Push(qualifiedName, contents, batch)
+ _ = contentIndex.Push(qualifiedName, contents, batch)
}
}
@@ -1275,11 +1275,11 @@ func (collection *PublishedRepoCollection) CheckDuplicate(repo *PublishedRepo) *
// Update stores updated information about repo in DB
func (collection *PublishedRepoCollection) Update(repo *PublishedRepo) error {
batch := collection.db.CreateBatch()
- batch.Put(repo.Key(), repo.Encode())
+ _ = batch.Put(repo.Key(), repo.Encode())
if repo.SourceKind == SourceLocalRepo {
for component, item := range repo.sourceItems {
- batch.Put(repo.RefKey(component), item.packageRefs.Encode())
+ _ = batch.Put(repo.RefKey(component), item.packageRefs.Encode())
}
}
return batch.Write()
@@ -1324,7 +1324,7 @@ func (collection *PublishedRepoCollection) LoadShallow(repo *PublishedRepo, coll
// LoadComplete loads complete information on the sources of the repo *and* their packages
func (collection *PublishedRepoCollection) LoadComplete(repo *PublishedRepo, collectionFactory *CollectionFactory) (err error) {
- collection.LoadShallow(repo, collectionFactory)
+ _ = collection.LoadShallow(repo, collectionFactory)
if repo.SourceKind == SourceSnapshot {
for _, item := range repo.sourceItems {
@@ -1502,7 +1502,7 @@ func (collection *PublishedRepoCollection) listReferencedFilesByComponent(prefix
return nil, err
}
- packageList.ForEach(func(p *Package) error {
+ _ = packageList.ForEach(func(p *Package) error {
poolDir, err := p.PoolDirectory()
if err != nil {
return err
@@ -1575,7 +1575,7 @@ func (collection *PublishedRepoCollection) CleanupPrefixComponentFiles(published
return err
}
- packageList.ForEach(func(p *Package) error {
+ _ = packageList.ForEach(func(p *Package) error {
poolDir, err := p.PoolDirectory()
if err != nil {
return err
@@ -1709,10 +1709,10 @@ func (collection *PublishedRepoCollection) Remove(publishedStorageProvider aptly
}
batch := collection.db.CreateBatch()
- batch.Delete(repo.Key())
+ _ = batch.Delete(repo.Key())
for _, component := range repo.Components() {
- batch.Delete(repo.RefKey(component))
+ _ = batch.Delete(repo.RefKey(component))
}
return batch.Write()
diff --git a/deb/publish_bench_test.go b/deb/publish_bench_test.go
index 86f18c30..608a0e40 100644
--- a/deb/publish_bench_test.go
+++ b/deb/publish_bench_test.go
@@ -19,13 +19,13 @@ func BenchmarkListReferencedFiles(b *testing.B) {
if err != nil {
b.Fatal(err)
}
- defer os.RemoveAll(tmpDir)
+ defer func() { _ = os.RemoveAll(tmpDir) }()
db, err := goleveldb.NewOpenDB(tmpDir)
if err != nil {
b.Fatal(err)
}
- defer db.Close()
+ defer func() { _ = db.Close() }()
factory := NewCollectionFactory(db)
packageCollection := factory.PackageCollection()
@@ -49,7 +49,7 @@ func BenchmarkListReferencedFiles(b *testing.B) {
Filename: fmt.Sprintf("pkg-shared_%d.deb", pkgIndex),
}})
- packageCollection.UpdateInTransaction(p, transaction)
+ _ = packageCollection.UpdateInTransaction(p, transaction)
sharedRefs.Refs = append(sharedRefs.Refs, p.Key(""))
}
@@ -78,7 +78,7 @@ func BenchmarkListReferencedFiles(b *testing.B) {
Filename: fmt.Sprintf("pkg%d_%d.deb", repoIndex, pkgIndex),
}})
- packageCollection.UpdateInTransaction(p, transaction)
+ _ = packageCollection.UpdateInTransaction(p, transaction)
refs.Refs = append(refs.Refs, p.Key(""))
}
@@ -92,16 +92,16 @@ func BenchmarkListReferencedFiles(b *testing.B) {
repo.DefaultDistribution = fmt.Sprintf("dist%d", repoIndex)
repo.DefaultComponent = defaultComponent
repo.UpdateRefList(refs.Merge(sharedRefs, false, true))
- repoCollection.Add(repo)
+ _ = repoCollection.Add(repo)
publish, err := NewPublishedRepo("", "test", "", nil, []string{defaultComponent}, []interface{}{repo}, factory, false)
if err != nil {
b.Fatal(err)
}
- publishCollection.Add(publish)
+ _ = publishCollection.Add(publish)
}
- db.CompactDB()
+ _ = db.CompactDB()
b.ResetTimer()
for i := 0; i < b.N; i++ {
diff --git a/deb/publish_test.go b/deb/publish_test.go
index c2d228ac..0bfa08d7 100644
--- a/deb/publish_test.go
+++ b/deb/publish_test.go
@@ -5,7 +5,6 @@ import (
"encoding/json"
"errors"
"fmt"
- "io/ioutil"
"os"
"path/filepath"
"sort"
@@ -51,11 +50,11 @@ func (n *NullSigner) SetPassphrase(passphrase, passphraseFile string) {
}
func (n *NullSigner) DetachedSign(source string, destination string) error {
- return ioutil.WriteFile(destination, []byte{}, 0644)
+ return os.WriteFile(destination, []byte{}, 0644)
}
func (n *NullSigner) ClearSign(source string, destination string) error {
- return ioutil.WriteFile(destination, []byte{}, 0644)
+ return os.WriteFile(destination, []byte{}, 0644)
}
type FakeStorageProvider struct {
@@ -104,7 +103,7 @@ func (s *PublishedRepoSuite) SetUpTest(c *C) {
s.cs = files.NewMockChecksumStorage()
tmpFilepath := filepath.Join(c.MkDir(), "file")
- c.Assert(ioutil.WriteFile(tmpFilepath, nil, 0777), IsNil)
+ c.Assert(os.WriteFile(tmpFilepath, nil, 0777), IsNil)
var err error
s.p1.Files()[0].PoolPath, err = s.packagePool.Import(tmpFilepath, s.p1.Files()[0].Filename, &s.p1.Files()[0].Checksums, false, s.cs)
@@ -118,22 +117,22 @@ func (s *PublishedRepoSuite) SetUpTest(c *C) {
repo, _ := NewRemoteRepo("yandex", "http://mirror.yandex.ru/debian/", "squeeze", []string{"main"}, []string{}, false, false, false)
repo.packageRefs = s.reflist
- s.factory.RemoteRepoCollection().Add(repo)
+ _ = s.factory.RemoteRepoCollection().Add(repo)
s.localRepo = NewLocalRepo("local1", "comment1")
s.localRepo.packageRefs = s.reflist
- s.factory.LocalRepoCollection().Add(s.localRepo)
+ _ = s.factory.LocalRepoCollection().Add(s.localRepo)
s.snapshot, _ = NewSnapshotFromRepository("snap", repo)
- s.factory.SnapshotCollection().Add(s.snapshot)
+ _ = s.factory.SnapshotCollection().Add(s.snapshot)
s.snapshot2, _ = NewSnapshotFromRepository("snap", repo)
- s.factory.SnapshotCollection().Add(s.snapshot2)
+ _ = s.factory.SnapshotCollection().Add(s.snapshot2)
s.packageCollection = s.factory.PackageCollection()
- s.packageCollection.Update(s.p1)
- s.packageCollection.Update(s.p2)
- s.packageCollection.Update(s.p3)
+ _ = s.packageCollection.Update(s.p1)
+ _ = s.packageCollection.Update(s.p2)
+ _ = s.packageCollection.Update(s.p3)
s.repo, _ = NewPublishedRepo("", "ppa", "squeeze", nil, []string{"main"}, []interface{}{s.snapshot}, s.factory, false)
s.repo.SkipContents = true
@@ -152,7 +151,7 @@ func (s *PublishedRepoSuite) SetUpTest(c *C) {
}
func (s *PublishedRepoSuite) TearDownTest(c *C) {
- s.db.Close()
+ _ = s.db.Close()
}
func (s *PublishedRepoSuite) TestNewPublishedRepo(c *C) {
@@ -179,12 +178,12 @@ func (s *PublishedRepoSuite) TestNewPublishedRepo(c *C) {
c.Check(s.repo3.RefList("main").Len(), Equals, 3)
c.Check(s.repo3.RefList("contrib").Len(), Equals, 3)
- c.Check(func() { NewPublishedRepo("", ".", "a", nil, nil, nil, s.factory, false) }, PanicMatches, "publish with empty sources")
+ c.Check(func() { _, _ = NewPublishedRepo("", ".", "a", nil, nil, nil, s.factory, false) }, PanicMatches, "publish with empty sources")
c.Check(func() {
- NewPublishedRepo("", ".", "a", nil, []string{"main"}, []interface{}{s.snapshot, s.snapshot2}, s.factory, false)
+ _, _ = NewPublishedRepo("", ".", "a", nil, []string{"main"}, []interface{}{s.snapshot, s.snapshot2}, s.factory, false)
}, PanicMatches, "sources and components should be equal in size")
c.Check(func() {
- NewPublishedRepo("", ".", "a", nil, []string{"main", "contrib"}, []interface{}{s.localRepo, s.snapshot2}, s.factory, false)
+ _, _ = NewPublishedRepo("", ".", "a", nil, []string{"main", "contrib"}, []interface{}{s.localRepo, s.snapshot2}, s.factory, false)
}, PanicMatches, "interface conversion:.*")
_, err := NewPublishedRepo("", ".", "a", nil, []string{"main", "main"}, []interface{}{s.snapshot, s.snapshot2}, s.factory, false)
@@ -337,7 +336,7 @@ func (s *PublishedRepoSuite) TestDistributionComponentGuessing(c *C) {
s.localRepo.DefaultDistribution = "precise"
s.localRepo.DefaultComponent = "contrib"
- s.factory.LocalRepoCollection().Update(s.localRepo)
+ _ = s.factory.LocalRepoCollection().Update(s.localRepo)
repo, err = NewPublishedRepo("", "ppa", "", nil, []string{""}, []interface{}{s.localRepo}, s.factory, false)
c.Check(err, IsNil)
@@ -526,8 +525,8 @@ func (s *PublishedRepoSuite) TestPublishedRepoRevision(c *C) {
bytes, err := json.Marshal(revision)
c.Assert(err, IsNil)
- json_expected := `{"Sources":[{"Component":"main","Name":"local1"},{"Component":"test1","Name":"snap1"},{"Component":"test2","Name":"snap2"}]}`
- c.Assert(string(bytes), Equals, json_expected)
+ jsonExpected := `{"Sources":[{"Component":"main","Name":"local1"},{"Component":"test1","Name":"snap1"},{"Component":"test2","Name":"snap2"}]}`
+ c.Assert(string(bytes), Equals, jsonExpected)
c.Assert(s.repo2.DropRevision(), DeepEquals, revision)
c.Assert(s.repo2.Revision, IsNil)
@@ -564,11 +563,11 @@ func (s *PublishedRepoCollectionSuite) SetUpTest(c *C) {
sort.Sort(snap2Refs)
s.snap2 = NewSnapshotFromRefList("snap2", []*Snapshot{}, snap2Refs, "desc2")
- s.snapshotCollection.Add(s.snap1)
- s.snapshotCollection.Add(s.snap2)
+ _ = s.snapshotCollection.Add(s.snap1)
+ _ = s.snapshotCollection.Add(s.snap2)
s.localRepo = NewLocalRepo("local1", "comment1")
- s.factory.LocalRepoCollection().Add(s.localRepo)
+ _ = s.factory.LocalRepoCollection().Add(s.localRepo)
s.repo1, _ = NewPublishedRepo("", "ppa", "anaconda", []string{}, []string{"main"}, []interface{}{s.snap1}, s.factory, false)
s.repo2, _ = NewPublishedRepo("", "", "anaconda", []string{}, []string{"main", "contrib"}, []interface{}{s.snap2, s.snap1}, s.factory, false)
@@ -580,7 +579,7 @@ func (s *PublishedRepoCollectionSuite) SetUpTest(c *C) {
}
func (s *PublishedRepoCollectionSuite) TearDownTest(c *C) {
- s.db.Close()
+ _ = s.db.Close()
}
func (s *PublishedRepoCollectionSuite) TestAddByStoragePrefixDistribution(c *C) {
@@ -677,7 +676,7 @@ func (s *PublishedRepoCollectionSuite) TestLoadPre0_6(c *C) {
var buf bytes.Buffer
encoder := codec.NewEncoder(&buf, &codec.MsgpackHandle{})
- encoder.Encode(&old)
+ _ = encoder.Encode(&old)
c.Assert(s.db.Put(s.repo1.Key(), buf.Bytes()), IsNil)
c.Assert(s.db.Put(s.repo1.RefKey(""), s.localRepo.RefList().Encode()), IsNil)
@@ -695,7 +694,7 @@ func (s *PublishedRepoCollectionSuite) TestLoadPre0_6(c *C) {
}
func (s *PublishedRepoCollectionSuite) TestForEachAndLen(c *C) {
- s.collection.Add(s.repo1)
+ _ = s.collection.Add(s.repo1)
count := 0
err := s.collection.ForEach(func(*PublishedRepo) error {
@@ -755,7 +754,7 @@ func (s *PublishedRepoCollectionSuite) TestListReferencedFiles(c *C) {
})
snap3 := NewSnapshotFromRefList("snap3", []*Snapshot{}, s.snap2.RefList(), "desc3")
- s.snapshotCollection.Add(snap3)
+ _ = s.snapshotCollection.Add(snap3)
// Ensure that adding a second publish point with matching files doesn't give duplicate results.
repo3, err := NewPublishedRepo("", "", "anaconda-2", []string{}, []string{"main"}, []interface{}{snap3}, s.factory, false)
@@ -799,7 +798,7 @@ func (s *PublishedRepoRemoveSuite) SetUpTest(c *C) {
s.snap1 = NewSnapshotFromPackageList("snap1", []*Snapshot{}, NewPackageList(), "desc1")
- s.snapshotCollection.Add(s.snap1)
+ _ = s.snapshotCollection.Add(s.snap1)
s.repo1, _ = NewPublishedRepo("", "ppa", "anaconda", []string{}, []string{"main"}, []interface{}{s.snap1}, s.factory, false)
s.repo2, _ = NewPublishedRepo("", "", "anaconda", []string{}, []string{"main"}, []interface{}{s.snap1}, s.factory, false)
@@ -808,26 +807,26 @@ func (s *PublishedRepoRemoveSuite) SetUpTest(c *C) {
s.repo5, _ = NewPublishedRepo("files:other", "ppa", "osminog", []string{}, []string{"contrib"}, []interface{}{s.snap1}, s.factory, false)
s.collection = s.factory.PublishedRepoCollection()
- s.collection.Add(s.repo1)
- s.collection.Add(s.repo2)
- s.collection.Add(s.repo3)
- s.collection.Add(s.repo4)
- s.collection.Add(s.repo5)
+ _ = s.collection.Add(s.repo1)
+ _ = s.collection.Add(s.repo2)
+ _ = s.collection.Add(s.repo3)
+ _ = s.collection.Add(s.repo4)
+ _ = s.collection.Add(s.repo5)
s.root = c.MkDir()
s.publishedStorage = files.NewPublishedStorage(s.root, "", "")
- s.publishedStorage.MkDir("ppa/dists/anaconda")
- s.publishedStorage.MkDir("ppa/dists/meduza")
- s.publishedStorage.MkDir("ppa/dists/osminog")
- s.publishedStorage.MkDir("ppa/pool/main")
- s.publishedStorage.MkDir("ppa/pool/contrib")
- s.publishedStorage.MkDir("dists/anaconda")
- s.publishedStorage.MkDir("pool/main")
+ _ = s.publishedStorage.MkDir("ppa/dists/anaconda")
+ _ = s.publishedStorage.MkDir("ppa/dists/meduza")
+ _ = s.publishedStorage.MkDir("ppa/dists/osminog")
+ _ = s.publishedStorage.MkDir("ppa/pool/main")
+ _ = s.publishedStorage.MkDir("ppa/pool/contrib")
+ _ = s.publishedStorage.MkDir("dists/anaconda")
+ _ = s.publishedStorage.MkDir("pool/main")
s.root2 = c.MkDir()
s.publishedStorage2 = files.NewPublishedStorage(s.root2, "", "")
- s.publishedStorage2.MkDir("ppa/dists/osminog")
- s.publishedStorage2.MkDir("ppa/pool/contrib")
+ _ = s.publishedStorage2.MkDir("ppa/dists/osminog")
+ _ = s.publishedStorage2.MkDir("ppa/pool/contrib")
s.provider = &FakeStorageProvider{map[string]aptly.PublishedStorage{
"": s.publishedStorage,
@@ -835,11 +834,11 @@ func (s *PublishedRepoRemoveSuite) SetUpTest(c *C) {
}
func (s *PublishedRepoRemoveSuite) TearDownTest(c *C) {
- s.db.Close()
+ _ = s.db.Close()
}
func (s *PublishedRepoRemoveSuite) TestRemoveFilesOnlyDist(c *C) {
- s.repo1.RemoveFiles(s.provider, false, []string{}, nil)
+ _ = s.repo1.RemoveFiles(s.provider, false, []string{}, nil)
c.Check(filepath.Join(s.publishedStorage.PublicPath(), "ppa/dists/anaconda"), Not(PathExists))
c.Check(filepath.Join(s.publishedStorage.PublicPath(), "ppa/dists/meduza"), PathExists)
@@ -853,7 +852,7 @@ func (s *PublishedRepoRemoveSuite) TestRemoveFilesOnlyDist(c *C) {
}
func (s *PublishedRepoRemoveSuite) TestRemoveFilesWithPool(c *C) {
- s.repo1.RemoveFiles(s.provider, false, []string{"main"}, nil)
+ _ = s.repo1.RemoveFiles(s.provider, false, []string{"main"}, nil)
c.Check(filepath.Join(s.publishedStorage.PublicPath(), "ppa/dists/anaconda"), Not(PathExists))
c.Check(filepath.Join(s.publishedStorage.PublicPath(), "ppa/dists/meduza"), PathExists)
@@ -867,7 +866,7 @@ func (s *PublishedRepoRemoveSuite) TestRemoveFilesWithPool(c *C) {
}
func (s *PublishedRepoRemoveSuite) TestRemoveFilesWithTwoPools(c *C) {
- s.repo1.RemoveFiles(s.provider, false, []string{"main", "contrib"}, nil)
+ _ = s.repo1.RemoveFiles(s.provider, false, []string{"main", "contrib"}, nil)
c.Check(filepath.Join(s.publishedStorage.PublicPath(), "ppa/dists/anaconda"), Not(PathExists))
c.Check(filepath.Join(s.publishedStorage.PublicPath(), "ppa/dists/meduza"), PathExists)
@@ -881,7 +880,7 @@ func (s *PublishedRepoRemoveSuite) TestRemoveFilesWithTwoPools(c *C) {
}
func (s *PublishedRepoRemoveSuite) TestRemoveFilesWithPrefix(c *C) {
- s.repo1.RemoveFiles(s.provider, true, []string{"main"}, nil)
+ _ = s.repo1.RemoveFiles(s.provider, true, []string{"main"}, nil)
c.Check(filepath.Join(s.publishedStorage.PublicPath(), "ppa/dists/anaconda"), Not(PathExists))
c.Check(filepath.Join(s.publishedStorage.PublicPath(), "ppa/dists/meduza"), Not(PathExists))
@@ -895,7 +894,7 @@ func (s *PublishedRepoRemoveSuite) TestRemoveFilesWithPrefix(c *C) {
}
func (s *PublishedRepoRemoveSuite) TestRemoveFilesWithPrefixRoot(c *C) {
- s.repo2.RemoveFiles(s.provider, true, []string{"main"}, nil)
+ _ = s.repo2.RemoveFiles(s.provider, true, []string{"main"}, nil)
c.Check(filepath.Join(s.publishedStorage.PublicPath(), "ppa/dists/anaconda"), PathExists)
c.Check(filepath.Join(s.publishedStorage.PublicPath(), "ppa/dists/meduza"), PathExists)
diff --git a/deb/query.go b/deb/query.go
index ad0ad17a..ea5fd255 100644
--- a/deb/query.go
+++ b/deb/query.go
@@ -89,7 +89,7 @@ func (q *OrQuery) Fast(list PackageCatalog) bool {
func (q *OrQuery) Query(list PackageCatalog) (result *PackageList) {
if q.Fast(list) {
result = q.L.Query(list)
- result.Append(q.R.Query(list))
+ _ = result.Append(q.R.Query(list))
} else {
result = list.Scan(q)
}
@@ -245,7 +245,7 @@ func (q *DependencyQuery) Query(list PackageCatalog) (result *PackageList) {
if q.Fast(list) {
result = NewPackageList()
for _, pkg := range list.Search(q.Dep, true, true) {
- result.Add(pkg)
+ _ = result.Add(pkg)
}
} else {
result = list.Scan(q)
diff --git a/deb/reflist.go b/deb/reflist.go
index 30396548..e559cad4 100644
--- a/deb/reflist.go
+++ b/deb/reflist.go
@@ -54,7 +54,7 @@ func (l *PackageRefList) Swap(i, j int) {
l.Refs[i], l.Refs[j] = l.Refs[j], l.Refs[i]
}
-// Compare compares two refs in lexographical order
+// Less compares two refs in lexographical order
func (l *PackageRefList) Less(i, j int) bool {
return bytes.Compare(l.Refs[i], l.Refs[j]) < 0
}
@@ -64,7 +64,7 @@ func (l *PackageRefList) Encode() []byte {
var buf bytes.Buffer
encoder := codec.NewEncoder(&buf, &codec.MsgpackHandle{})
- encoder.Encode(l)
+ _ = encoder.Encode(l)
return buf.Bytes()
}
diff --git a/deb/reflist_bench_test.go b/deb/reflist_bench_test.go
index b377574c..1e5490c5 100644
--- a/deb/reflist_bench_test.go
+++ b/deb/reflist_bench_test.go
@@ -42,6 +42,6 @@ func BenchmarkReflistDecode(b *testing.B) {
b.ResetTimer()
for i := 0; i < b.N; i++ {
- (&PackageRefList{}).Decode(data)
+ _ = (&PackageRefList{}).Decode(data)
}
}
diff --git a/deb/reflist_test.go b/deb/reflist_test.go
index bcabec3c..a3f035db 100644
--- a/deb/reflist_test.go
+++ b/deb/reflist_test.go
@@ -46,21 +46,21 @@ func (s *PackageRefListSuite) SetUpTest(c *C) {
func (s *PackageRefListSuite) TestNewPackageListFromRefList(c *C) {
db, _ := goleveldb.NewOpenDB(c.MkDir())
coll := NewPackageCollection(db)
- coll.Update(s.p1)
- coll.Update(s.p3)
+ _ = coll.Update(s.p1)
+ _ = coll.Update(s.p3)
- s.list.Add(s.p1)
- s.list.Add(s.p3)
- s.list.Add(s.p5)
- s.list.Add(s.p6)
+ _ = s.list.Add(s.p1)
+ _ = s.list.Add(s.p3)
+ _ = s.list.Add(s.p5)
+ _ = s.list.Add(s.p6)
reflist := NewPackageRefListFromPackageList(s.list)
_, err := NewPackageListFromRefList(reflist, coll, nil)
c.Assert(err, ErrorMatches, "unable to load package with key.*")
- coll.Update(s.p5)
- coll.Update(s.p6)
+ _ = coll.Update(s.p5)
+ _ = coll.Update(s.p6)
list, err := NewPackageListFromRefList(reflist, coll, nil)
c.Assert(err, IsNil)
@@ -73,10 +73,10 @@ func (s *PackageRefListSuite) TestNewPackageListFromRefList(c *C) {
}
func (s *PackageRefListSuite) TestNewPackageRefList(c *C) {
- s.list.Add(s.p1)
- s.list.Add(s.p3)
- s.list.Add(s.p5)
- s.list.Add(s.p6)
+ _ = s.list.Add(s.p1)
+ _ = s.list.Add(s.p3)
+ _ = s.list.Add(s.p5)
+ _ = s.list.Add(s.p6)
reflist := NewPackageRefListFromPackageList(s.list)
c.Assert(reflist.Len(), Equals, 4)
@@ -90,10 +90,10 @@ func (s *PackageRefListSuite) TestNewPackageRefList(c *C) {
}
func (s *PackageRefListSuite) TestPackageRefListEncodeDecode(c *C) {
- s.list.Add(s.p1)
- s.list.Add(s.p3)
- s.list.Add(s.p5)
- s.list.Add(s.p6)
+ _ = s.list.Add(s.p1)
+ _ = s.list.Add(s.p3)
+ _ = s.list.Add(s.p5)
+ _ = s.list.Add(s.p6)
reflist := NewPackageRefListFromPackageList(s.list)
@@ -105,10 +105,10 @@ func (s *PackageRefListSuite) TestPackageRefListEncodeDecode(c *C) {
}
func (s *PackageRefListSuite) TestPackageRefListForeach(c *C) {
- s.list.Add(s.p1)
- s.list.Add(s.p3)
- s.list.Add(s.p5)
- s.list.Add(s.p6)
+ _ = s.list.Add(s.p1)
+ _ = s.list.Add(s.p3)
+ _ = s.list.Add(s.p5)
+ _ = s.list.Add(s.p6)
reflist := NewPackageRefListFromPackageList(s.list)
@@ -131,9 +131,9 @@ func (s *PackageRefListSuite) TestPackageRefListForeach(c *C) {
}
func (s *PackageRefListSuite) TestHas(c *C) {
- s.list.Add(s.p1)
- s.list.Add(s.p3)
- s.list.Add(s.p5)
+ _ = s.list.Add(s.p1)
+ _ = s.list.Add(s.p3)
+ _ = s.list.Add(s.p5)
reflist := NewPackageRefListFromPackageList(s.list)
c.Check(reflist.Has(s.p1), Equals, true)
@@ -180,21 +180,21 @@ func (s *PackageRefListSuite) TestDiff(c *C) {
}
for _, p := range packages {
- coll.Update(p)
+ _ = coll.Update(p)
}
listA := NewPackageList()
- listA.Add(packages[0])
- listA.Add(packages[1])
- listA.Add(packages[2])
- listA.Add(packages[3])
- listA.Add(packages[6])
+ _ = listA.Add(packages[0])
+ _ = listA.Add(packages[1])
+ _ = listA.Add(packages[2])
+ _ = listA.Add(packages[3])
+ _ = listA.Add(packages[6])
listB := NewPackageList()
- listB.Add(packages[0])
- listB.Add(packages[2])
- listB.Add(packages[4])
- listB.Add(packages[5])
+ _ = listB.Add(packages[0])
+ _ = listB.Add(packages[2])
+ _ = listB.Add(packages[4])
+ _ = listB.Add(packages[5])
reflistA := NewPackageRefListFromPackageList(listA)
reflistB := NewPackageRefListFromPackageList(listB)
@@ -248,15 +248,15 @@ func (s *PackageRefListSuite) TestDiffCompactsAtEnd(c *C) {
}
for _, p := range packages {
- coll.Update(p)
+ _ = coll.Update(p)
}
listA := NewPackageList()
- listA.Add(packages[0])
+ _ = listA.Add(packages[0])
listB := NewPackageList()
- listB.Add(packages[1])
- listB.Add(packages[2])
+ _ = listB.Add(packages[1])
+ _ = listB.Add(packages[2])
reflistA := NewPackageRefListFromPackageList(listA)
reflistB := NewPackageRefListFromPackageList(listB)
@@ -291,27 +291,27 @@ func (s *PackageRefListSuite) TestMerge(c *C) {
for _, p := range packages {
p.V06Plus = true
- coll.Update(p)
+ _ = coll.Update(p)
}
listA := NewPackageList()
- listA.Add(packages[0])
- listA.Add(packages[1])
- listA.Add(packages[2])
- listA.Add(packages[3])
- listA.Add(packages[7])
+ _ = listA.Add(packages[0])
+ _ = listA.Add(packages[1])
+ _ = listA.Add(packages[2])
+ _ = listA.Add(packages[3])
+ _ = listA.Add(packages[7])
listB := NewPackageList()
- listB.Add(packages[0])
- listB.Add(packages[2])
- listB.Add(packages[4])
- listB.Add(packages[5])
- listB.Add(packages[6])
+ _ = listB.Add(packages[0])
+ _ = listB.Add(packages[2])
+ _ = listB.Add(packages[4])
+ _ = listB.Add(packages[5])
+ _ = listB.Add(packages[6])
listC := NewPackageList()
- listC.Add(packages[0])
- listC.Add(packages[8])
- listC.Add(packages[9])
+ _ = listC.Add(packages[0])
+ _ = listC.Add(packages[8])
+ _ = listC.Add(packages[9])
reflistA := NewPackageRefListFromPackageList(listA)
reflistB := NewPackageRefListFromPackageList(listB)
@@ -372,14 +372,14 @@ func (s *PackageRefListSuite) TestFilterLatestRefs(c *C) {
}
rl := NewPackageList()
- rl.Add(packages[0])
- rl.Add(packages[1])
- rl.Add(packages[2])
- rl.Add(packages[3])
- rl.Add(packages[4])
- rl.Add(packages[5])
- rl.Add(packages[6])
- rl.Add(packages[7])
+ _ = rl.Add(packages[0])
+ _ = rl.Add(packages[1])
+ _ = rl.Add(packages[2])
+ _ = rl.Add(packages[3])
+ _ = rl.Add(packages[4])
+ _ = rl.Add(packages[5])
+ _ = rl.Add(packages[6])
+ _ = rl.Add(packages[7])
result := NewPackageRefListFromPackageList(rl)
result.FilterLatestRefs()
diff --git a/deb/remote.go b/deb/remote.go
index b10af865..efba2686 100644
--- a/deb/remote.go
+++ b/deb/remote.go
@@ -120,7 +120,7 @@ func NewRemoteRepo(name string, archiveRoot string, distribution string, compone
// SetArchiveRoot of remote repo
func (repo *RemoteRepo) SetArchiveRoot(archiveRoot string) {
repo.ArchiveRoot = archiveRoot
- repo.prepare()
+ _ = repo.prepare()
}
func (repo *RemoteRepo) prepare() error {
@@ -302,14 +302,14 @@ func (repo *RemoteRepo) Fetch(d aptly.Downloader, verifier pgp.Verifier, ignoreS
if err != nil {
goto splitsignature
}
- defer inrelease.Close()
+ defer func() { _ = inrelease.Close() }()
_, err = verifier.VerifyClearsigned(inrelease, true)
if err != nil {
goto splitsignature
}
- inrelease.Seek(0, 0)
+ _, _ = inrelease.Seek(0, 0)
release, err = verifier.ExtractClearsigned(inrelease)
if err != nil {
@@ -342,7 +342,7 @@ func (repo *RemoteRepo) Fetch(d aptly.Downloader, verifier pgp.Verifier, ignoreS
}
ok:
- defer release.Close()
+ defer func() { _ = release.Close() }()
sreader := NewControlFileReader(release, true, false)
stanza, err := sreader.ReadStanza()
@@ -528,7 +528,7 @@ func (repo *RemoteRepo) DownloadPackageIndexes(progress aptly.Progress, d aptly.
return err
}
}
- defer packagesFile.Close()
+ defer func() { _ = packagesFile.Close() }()
if progress != nil {
stat, _ := packagesFile.Stat()
@@ -705,7 +705,7 @@ func (repo *RemoteRepo) Encode() []byte {
var buf bytes.Buffer
encoder := codec.NewEncoder(&buf, &codec.MsgpackHandle{})
- encoder.Encode(repo)
+ _ = encoder.Encode(repo)
return buf.Bytes()
}
@@ -804,7 +804,7 @@ func (collection *RemoteRepoCollection) search(filter func(*RemoteRepo) bool, un
return result
}
- collection.db.ProcessByPrefix([]byte("R"), func(_, blob []byte) error {
+ _ = collection.db.ProcessByPrefix([]byte("R"), func(_, blob []byte) error {
r := &RemoteRepo{}
if err := r.Decode(blob); err != nil {
log.Printf("Error decoding remote repo: %s\n", err)
@@ -848,9 +848,9 @@ func (collection *RemoteRepoCollection) Add(repo *RemoteRepo) error {
func (collection *RemoteRepoCollection) Update(repo *RemoteRepo) error {
batch := collection.db.CreateBatch()
- batch.Put(repo.Key(), repo.Encode())
+ _ = batch.Put(repo.Key(), repo.Encode())
if repo.packageRefs != nil {
- batch.Put(repo.RefKey(), repo.packageRefs.Encode())
+ _ = batch.Put(repo.RefKey(), repo.packageRefs.Encode())
}
return batch.Write()
}
@@ -936,7 +936,7 @@ func (collection *RemoteRepoCollection) Drop(repo *RemoteRepo) error {
delete(collection.cache, repo.UUID)
batch := collection.db.CreateBatch()
- batch.Delete(repo.Key())
- batch.Delete(repo.RefKey())
+ _ = batch.Delete(repo.Key())
+ _ = batch.Delete(repo.RefKey())
return batch.Write()
}
diff --git a/deb/remote_test.go b/deb/remote_test.go
index 1998db7e..c0eae7f5 100644
--- a/deb/remote_test.go
+++ b/deb/remote_test.go
@@ -38,9 +38,9 @@ func (n *NullVerifier) VerifyClearsigned(clearsigned io.Reader, hint bool) (*pgp
func (n *NullVerifier) ExtractClearsigned(clearsigned io.Reader) (text *os.File, err error) {
text, _ = os.CreateTemp("", "aptly-test")
- io.Copy(text, clearsigned)
- text.Seek(0, 0)
- os.Remove(text.Name())
+ _, _ = io.Copy(text, clearsigned)
+ _, _ = text.Seek(0, 0)
+ _ = os.Remove(text.Name())
return
}
@@ -68,9 +68,9 @@ func (s *PackageListMixinSuite) SetUpPackages() {
stanza["Filename"] = "pool/contrib/l/lonely-strangers/lonely-strangers_7.40-2_i386.deb"
s.p3 = NewPackageFromControlFile(stanza)
- s.list.Add(s.p1)
- s.list.Add(s.p2)
- s.list.Add(s.p3)
+ _ = s.list.Add(s.p1)
+ _ = s.list.Add(s.p2)
+ _ = s.list.Add(s.p3)
s.reflist = NewPackageRefListFromPackageList(s.list)
}
@@ -104,7 +104,7 @@ func (s *RemoteRepoSuite) SetUpTest(c *C) {
func (s *RemoteRepoSuite) TearDownTest(c *C) {
s.progress.Shutdown()
- s.db.Close()
+ _ = s.db.Close()
}
func (s *RemoteRepoSuite) TestInvalidURL(c *C) {
@@ -287,7 +287,7 @@ func (s *RemoteRepoSuite) TestDownload(c *C) {
c.Check(queue, HasLen, 1)
c.Check(queue[0].File.DownloadURL(), Equals, "pool/main/a/amanda/amanda-client_3.3.1-3~bpo60+1_amd64.deb")
- s.repo.FinalizeDownload(s.collectionFactory, nil)
+ _ = s.repo.FinalizeDownload(s.collectionFactory, nil)
c.Assert(s.repo.packageRefs, NotNil)
pkg, err := s.collectionFactory.PackageCollection().ByKey(s.repo.packageRefs.Refs[0])
@@ -313,7 +313,7 @@ func (s *RemoteRepoSuite) TestDownload(c *C) {
c.Check(size, Equals, int64(0))
c.Check(queue, HasLen, 0)
- s.repo.FinalizeDownload(s.collectionFactory, nil)
+ _ = s.repo.FinalizeDownload(s.collectionFactory, nil)
c.Assert(s.repo.packageRefs, NotNil)
// Next call must return the download list without option "skip-existing-packages"
@@ -335,7 +335,7 @@ func (s *RemoteRepoSuite) TestDownload(c *C) {
c.Check(queue, HasLen, 1)
c.Check(queue[0].File.DownloadURL(), Equals, "pool/main/a/amanda/amanda-client_3.3.1-3~bpo60+1_amd64.deb")
- s.repo.FinalizeDownload(s.collectionFactory, nil)
+ _ = s.repo.FinalizeDownload(s.collectionFactory, nil)
c.Assert(s.repo.packageRefs, NotNil)
}
@@ -369,7 +369,7 @@ func (s *RemoteRepoSuite) TestDownloadWithInstaller(c *C) {
c.Check(q[0], Equals, "dists/squeeze/main/installer-i386/current/images/MANIFEST")
c.Check(q[1], Equals, "pool/main/a/amanda/amanda-client_3.3.1-3~bpo60+1_amd64.deb")
- s.repo.FinalizeDownload(s.collectionFactory, nil)
+ _ = s.repo.FinalizeDownload(s.collectionFactory, nil)
c.Assert(s.repo.packageRefs, NotNil)
pkg, err := s.collectionFactory.PackageCollection().ByKey(s.repo.packageRefs.Refs[0])
@@ -415,7 +415,7 @@ func (s *RemoteRepoSuite) TestDownloadWithSources(c *C) {
c.Check(q[2], Equals, "pool/main/a/access-modifier-checker/access-modifier-checker_1.0.orig.tar.gz")
c.Check(q[0], Equals, "pool/main/a/access-modifier-checker/access-modifier-checker_1.0-4.debian.tar.gz")
- s.repo.FinalizeDownload(s.collectionFactory, nil)
+ _ = s.repo.FinalizeDownload(s.collectionFactory, nil)
c.Assert(s.repo.packageRefs, NotNil)
pkg, err := s.collectionFactory.PackageCollection().ByKey(s.repo.packageRefs.Refs[0])
@@ -449,7 +449,7 @@ func (s *RemoteRepoSuite) TestDownloadWithSources(c *C) {
c.Check(size, Equals, int64(0))
c.Check(queue, HasLen, 0)
- s.repo.FinalizeDownload(s.collectionFactory, nil)
+ _ = s.repo.FinalizeDownload(s.collectionFactory, nil)
c.Assert(s.repo.packageRefs, NotNil)
// Next call must return the download list without option "skip-existing-packages"
@@ -474,7 +474,7 @@ func (s *RemoteRepoSuite) TestDownloadWithSources(c *C) {
c.Check(size, Equals, int64(15))
c.Check(queue, HasLen, 4)
- s.repo.FinalizeDownload(s.collectionFactory, nil)
+ _ = s.repo.FinalizeDownload(s.collectionFactory, nil)
c.Assert(s.repo.packageRefs, NotNil)
}
@@ -499,7 +499,7 @@ func (s *RemoteRepoSuite) TestDownloadFlat(c *C) {
c.Check(queue, HasLen, 1)
c.Check(queue[0].File.DownloadURL(), Equals, "pool/main/a/amanda/amanda-client_3.3.1-3~bpo60+1_amd64.deb")
- s.flat.FinalizeDownload(s.collectionFactory, nil)
+ _ = s.flat.FinalizeDownload(s.collectionFactory, nil)
c.Assert(s.flat.packageRefs, NotNil)
pkg, err := s.collectionFactory.PackageCollection().ByKey(s.flat.packageRefs.Refs[0])
@@ -526,7 +526,7 @@ func (s *RemoteRepoSuite) TestDownloadFlat(c *C) {
c.Check(size, Equals, int64(0))
c.Check(queue, HasLen, 0)
- s.flat.FinalizeDownload(s.collectionFactory, nil)
+ _ = s.flat.FinalizeDownload(s.collectionFactory, nil)
c.Assert(s.flat.packageRefs, NotNil)
// Next call must return the download list without option "skip-existing-packages"
@@ -549,7 +549,7 @@ func (s *RemoteRepoSuite) TestDownloadFlat(c *C) {
c.Check(queue, HasLen, 1)
c.Check(queue[0].File.DownloadURL(), Equals, "pool/main/a/amanda/amanda-client_3.3.1-3~bpo60+1_amd64.deb")
- s.flat.FinalizeDownload(s.collectionFactory, nil)
+ _ = s.flat.FinalizeDownload(s.collectionFactory, nil)
c.Assert(s.flat.packageRefs, NotNil)
}
@@ -589,7 +589,7 @@ func (s *RemoteRepoSuite) TestDownloadWithSourcesFlat(c *C) {
c.Check(q[2], Equals, "pool/main/a/access-modifier-checker/access-modifier-checker_1.0.orig.tar.gz")
c.Check(q[0], Equals, "pool/main/a/access-modifier-checker/access-modifier-checker_1.0-4.debian.tar.gz")
- s.flat.FinalizeDownload(s.collectionFactory, nil)
+ _ = s.flat.FinalizeDownload(s.collectionFactory, nil)
c.Assert(s.flat.packageRefs, NotNil)
pkg, err := s.collectionFactory.PackageCollection().ByKey(s.flat.packageRefs.Refs[0])
@@ -625,7 +625,7 @@ func (s *RemoteRepoSuite) TestDownloadWithSourcesFlat(c *C) {
c.Check(size, Equals, int64(0))
c.Check(queue, HasLen, 0)
- s.flat.FinalizeDownload(s.collectionFactory, nil)
+ _ = s.flat.FinalizeDownload(s.collectionFactory, nil)
c.Assert(s.flat.packageRefs, NotNil)
// Next call must return the download list without option "skip-existing-packages"
@@ -651,7 +651,7 @@ func (s *RemoteRepoSuite) TestDownloadWithSourcesFlat(c *C) {
c.Check(size, Equals, int64(15))
c.Check(queue, HasLen, 4)
- s.flat.FinalizeDownload(s.collectionFactory, nil)
+ _ = s.flat.FinalizeDownload(s.collectionFactory, nil)
c.Assert(s.flat.packageRefs, NotNil)
}
@@ -670,7 +670,7 @@ func (s *RemoteRepoCollectionSuite) SetUpTest(c *C) {
}
func (s *RemoteRepoCollectionSuite) TearDownTest(c *C) {
- s.db.Close()
+ _ = s.db.Close()
}
func (s *RemoteRepoCollectionSuite) TestAddByName(c *C) {
@@ -731,7 +731,7 @@ func (s *RemoteRepoCollectionSuite) TestUpdateLoadComplete(c *C) {
func (s *RemoteRepoCollectionSuite) TestForEachAndLen(c *C) {
repo, _ := NewRemoteRepo("yandex", "http://mirror.yandex.ru/debian/", "squeeze", []string{"main"}, []string{}, false, false, false)
- s.collection.Add(repo)
+ _ = s.collection.Add(repo)
count := 0
err := s.collection.ForEach(func(*RemoteRepo) error {
@@ -753,10 +753,10 @@ func (s *RemoteRepoCollectionSuite) TestForEachAndLen(c *C) {
func (s *RemoteRepoCollectionSuite) TestDrop(c *C) {
repo1, _ := NewRemoteRepo("yandex", "http://mirror.yandex.ru/debian/", "squeeze", []string{"main"}, []string{}, false, false, false)
- s.collection.Add(repo1)
+ _ = s.collection.Add(repo1)
repo2, _ := NewRemoteRepo("tyndex", "http://mirror.yandex.ru/debian/", "wheezy", []string{"main"}, []string{}, false, false, false)
- s.collection.Add(repo2)
+ _ = s.collection.Add(repo2)
r1, _ := s.collection.ByUUID(repo1.UUID)
c.Check(r1, Equals, repo1)
diff --git a/deb/snapshot.go b/deb/snapshot.go
index ed8572ad..74f8865d 100644
--- a/deb/snapshot.go
+++ b/deb/snapshot.go
@@ -142,7 +142,7 @@ func (s *Snapshot) Encode() []byte {
var buf bytes.Buffer
encoder := codec.NewEncoder(&buf, &codec.MsgpackHandle{})
- encoder.Encode(s)
+ _ = encoder.Encode(s)
return buf.Bytes()
}
@@ -228,9 +228,9 @@ func (collection *SnapshotCollection) Add(snapshot *Snapshot) error {
func (collection *SnapshotCollection) Update(snapshot *Snapshot) error {
batch := collection.db.CreateBatch()
- batch.Put(snapshot.Key(), snapshot.Encode())
+ _ = batch.Put(snapshot.Key(), snapshot.Encode())
if snapshot.packageRefs != nil {
- batch.Put(snapshot.RefKey(), snapshot.packageRefs.Encode())
+ _ = batch.Put(snapshot.RefKey(), snapshot.packageRefs.Encode())
}
return batch.Write()
@@ -259,7 +259,7 @@ func (collection *SnapshotCollection) search(filter func(*Snapshot) bool, unique
return result
}
- collection.db.ProcessByPrefix([]byte("S"), func(_, blob []byte) error {
+ _ = collection.db.ProcessByPrefix([]byte("S"), func(_, blob []byte) error {
s := &Snapshot{}
if err := s.Decode(blob); err != nil {
log.Printf("Error decoding snapshot: %s\n", err)
@@ -400,8 +400,8 @@ func (collection *SnapshotCollection) Drop(snapshot *Snapshot) error {
delete(collection.cache, snapshot.UUID)
batch := collection.db.CreateBatch()
- batch.Delete(snapshot.Key())
- batch.Delete(snapshot.RefKey())
+ _ = batch.Delete(snapshot.Key())
+ _ = batch.Delete(snapshot.RefKey())
return batch.Write()
}
diff --git a/deb/snapshot_bench_test.go b/deb/snapshot_bench_test.go
index c6bb94a2..c7137eb1 100644
--- a/deb/snapshot_bench_test.go
+++ b/deb/snapshot_bench_test.go
@@ -12,10 +12,10 @@ func BenchmarkSnapshotCollectionForEach(b *testing.B) {
const count = 1024
tmpDir := os.TempDir()
- defer os.RemoveAll(tmpDir)
+ defer func() { _ = os.RemoveAll(tmpDir) }()
db, _ := goleveldb.NewOpenDB(tmpDir)
- defer db.Close()
+ defer func() { _ = db.Close() }()
collection := NewSnapshotCollection(db)
@@ -31,7 +31,8 @@ func BenchmarkSnapshotCollectionForEach(b *testing.B) {
for i := 0; i < b.N; i++ {
collection = NewSnapshotCollection(db)
- collection.ForEach(func(s *Snapshot) error {
+
+ _ = collection.ForEach(func(s *Snapshot) error {
return nil
})
}
@@ -41,10 +42,10 @@ func BenchmarkSnapshotCollectionByUUID(b *testing.B) {
const count = 1024
tmpDir := os.TempDir()
- defer os.RemoveAll(tmpDir)
+ defer func() { _ = os.RemoveAll(tmpDir) }()
db, _ := goleveldb.NewOpenDB(tmpDir)
- defer db.Close()
+ defer func() { _ = db.Close() }()
collection := NewSnapshotCollection(db)
@@ -72,10 +73,10 @@ func BenchmarkSnapshotCollectionByName(b *testing.B) {
const count = 1024
tmpDir := os.TempDir()
- defer os.RemoveAll(tmpDir)
+ defer func() { _ = os.RemoveAll(tmpDir) }()
db, _ := goleveldb.NewOpenDB(tmpDir)
- defer db.Close()
+ defer func() { _ = db.Close() }()
collection := NewSnapshotCollection(db)
diff --git a/deb/snapshot_test.go b/deb/snapshot_test.go
index d27c4226..cbd5285c 100644
--- a/deb/snapshot_test.go
+++ b/deb/snapshot_test.go
@@ -136,7 +136,7 @@ func (s *SnapshotCollectionSuite) SetUpTest(c *C) {
}
func (s *SnapshotCollectionSuite) TearDownTest(c *C) {
- s.db.Close()
+ _ = s.db.Close()
}
func (s *SnapshotCollectionSuite) TestAddByNameByUUID(c *C) {
@@ -179,8 +179,8 @@ func (s *SnapshotCollectionSuite) TestUpdateLoadComplete(c *C) {
}
func (s *SnapshotCollectionSuite) TestForEachAndLen(c *C) {
- s.collection.Add(s.snapshot1)
- s.collection.Add(s.snapshot2)
+ _ = s.collection.Add(s.snapshot1)
+ _ = s.collection.Add(s.snapshot2)
count := 0
err := s.collection.ForEach(func(*Snapshot) error {
@@ -200,10 +200,10 @@ func (s *SnapshotCollectionSuite) TestForEachAndLen(c *C) {
}
func (s *SnapshotCollectionSuite) TestForEachSorted(c *C) {
- s.collection.Add(s.snapshot2)
- s.collection.Add(s.snapshot1)
- s.collection.Add(s.snapshot4)
- s.collection.Add(s.snapshot3)
+ _ = s.collection.Add(s.snapshot2)
+ _ = s.collection.Add(s.snapshot1)
+ _ = s.collection.Add(s.snapshot4)
+ _ = s.collection.Add(s.snapshot3)
names := []string{}
@@ -263,8 +263,8 @@ func (s *SnapshotCollectionSuite) TestFindSnapshotSource(c *C) {
}
func (s *SnapshotCollectionSuite) TestDrop(c *C) {
- s.collection.Add(s.snapshot1)
- s.collection.Add(s.snapshot2)
+ _ = s.collection.Add(s.snapshot1)
+ _ = s.collection.Add(s.snapshot2)
snap, _ := s.collection.ByUUID(s.snapshot1.UUID)
c.Check(snap, Equals, s.snapshot1)
diff --git a/deb/uploaders.go b/deb/uploaders.go
index 0ae3b966..6759bfc2 100644
--- a/deb/uploaders.go
+++ b/deb/uploaders.go
@@ -41,7 +41,7 @@ func NewUploadersFromFile(path string) (*Uploaders, error) {
if err != nil {
return nil, fmt.Errorf("error loading uploaders file: %s", err)
}
- defer f.Close()
+ defer func() { _ = f.Close() }()
err = json.NewDecoder(JsonConfigReader.New(f)).Decode(&uploaders)
if err != nil {
diff --git a/deb/version.go b/deb/version.go
index 8be9f131..a88ccd54 100644
--- a/deb/version.go
+++ b/deb/version.go
@@ -50,11 +50,7 @@ func compareLexicographic(s1, s2 string) int {
i := 0
l1, l2 := len(s1), len(s2)
- for {
- if i == l1 && i == l2 {
- // s1 equal to s2
- break
- }
+ for !(i == l1 && i == l2) { // break if s1 equal to s2
if i == l2 {
// s1 is longer than s2
diff --git a/files/package_pool.go b/files/package_pool.go
index 4c815e6e..b50811c2 100644
--- a/files/package_pool.go
+++ b/files/package_pool.go
@@ -240,7 +240,9 @@ func (pool *PackagePool) Import(srcPath, basename string, checksums *utils.Check
if err != nil {
return "", err
}
- defer source.Close()
+ defer func() {
+ _ = source.Close()
+ }()
sourceInfo, err := source.Stat()
if err != nil {
@@ -351,7 +353,9 @@ func (pool *PackagePool) Import(srcPath, basename string, checksums *utils.Check
if err != nil {
return "", err
}
- defer target.Close()
+ defer func() {
+ _ = target.Close()
+ }()
_, err = io.Copy(target, source)
diff --git a/files/package_pool_test.go b/files/package_pool_test.go
index 4cd9476b..127d7b7b 100644
--- a/files/package_pool_test.go
+++ b/files/package_pool_test.go
@@ -2,7 +2,6 @@ package files
import (
"io"
- "io/ioutil"
"os"
"path/filepath"
"runtime"
@@ -51,18 +50,18 @@ func (s *PackagePoolSuite) TestFilepathList(c *C) {
c.Check(err, IsNil)
c.Check(list, IsNil)
- os.MkdirAll(filepath.Join(s.pool.rootPath, "bd", "0b"), 0755)
- os.MkdirAll(filepath.Join(s.pool.rootPath, "bd", "0a"), 0755)
- os.MkdirAll(filepath.Join(s.pool.rootPath, "ae", "0c"), 0755)
+ _ = os.MkdirAll(filepath.Join(s.pool.rootPath, "bd", "0b"), 0755)
+ _ = os.MkdirAll(filepath.Join(s.pool.rootPath, "bd", "0a"), 0755)
+ _ = os.MkdirAll(filepath.Join(s.pool.rootPath, "ae", "0c"), 0755)
list, err = s.pool.FilepathList(nil)
c.Check(err, IsNil)
c.Check(list, DeepEquals, []string{})
- ioutil.WriteFile(filepath.Join(s.pool.rootPath, "ae", "0c", "1.deb"), nil, 0644)
- ioutil.WriteFile(filepath.Join(s.pool.rootPath, "ae", "0c", "2.deb"), nil, 0644)
- ioutil.WriteFile(filepath.Join(s.pool.rootPath, "bd", "0a", "3.deb"), nil, 0644)
- ioutil.WriteFile(filepath.Join(s.pool.rootPath, "bd", "0b", "4.deb"), nil, 0644)
+ _ = os.WriteFile(filepath.Join(s.pool.rootPath, "ae", "0c", "1.deb"), nil, 0644)
+ _ = os.WriteFile(filepath.Join(s.pool.rootPath, "ae", "0c", "2.deb"), nil, 0644)
+ _ = os.WriteFile(filepath.Join(s.pool.rootPath, "bd", "0a", "3.deb"), nil, 0644)
+ _ = os.WriteFile(filepath.Join(s.pool.rootPath, "bd", "0b", "4.deb"), nil, 0644)
list, err = s.pool.FilepathList(nil)
c.Check(err, IsNil)
@@ -70,14 +69,14 @@ func (s *PackagePoolSuite) TestFilepathList(c *C) {
}
func (s *PackagePoolSuite) TestRemove(c *C) {
- os.MkdirAll(filepath.Join(s.pool.rootPath, "bd", "0b"), 0755)
- os.MkdirAll(filepath.Join(s.pool.rootPath, "bd", "0a"), 0755)
- os.MkdirAll(filepath.Join(s.pool.rootPath, "ae", "0c"), 0755)
+ _ = os.MkdirAll(filepath.Join(s.pool.rootPath, "bd", "0b"), 0755)
+ _ = os.MkdirAll(filepath.Join(s.pool.rootPath, "bd", "0a"), 0755)
+ _ = os.MkdirAll(filepath.Join(s.pool.rootPath, "ae", "0c"), 0755)
- ioutil.WriteFile(filepath.Join(s.pool.rootPath, "ae", "0c", "1.deb"), []byte("1"), 0644)
- ioutil.WriteFile(filepath.Join(s.pool.rootPath, "ae", "0c", "2.deb"), []byte("22"), 0644)
- ioutil.WriteFile(filepath.Join(s.pool.rootPath, "bd", "0a", "3.deb"), []byte("333"), 0644)
- ioutil.WriteFile(filepath.Join(s.pool.rootPath, "bd", "0b", "4.deb"), []byte("4444"), 0644)
+ _ = os.WriteFile(filepath.Join(s.pool.rootPath, "ae", "0c", "1.deb"), []byte("1"), 0644)
+ _ = os.WriteFile(filepath.Join(s.pool.rootPath, "ae", "0c", "2.deb"), []byte("22"), 0644)
+ _ = os.WriteFile(filepath.Join(s.pool.rootPath, "bd", "0a", "3.deb"), []byte("333"), 0644)
+ _ = os.WriteFile(filepath.Join(s.pool.rootPath, "bd", "0b", "4.deb"), []byte("4444"), 0644)
size, err := s.pool.Remove("ae/0c/2.deb")
c.Check(err, IsNil)
@@ -99,7 +98,9 @@ func isSameDevice(s *PackagePoolSuite) bool {
source, _ := os.Open(s.debFile)
sourceInfo, _ := source.Stat()
- defer source.Close()
+ defer func() {
+ _ = source.Close()
+ }()
return poolDirInfo.Sys().(*syscall.Stat_t).Dev == sourceInfo.Sys().(*syscall.Stat_t).Dev
}
@@ -157,7 +158,7 @@ func (s *PackagePoolSuite) TestImportOk(c *C) {
}
func (s *PackagePoolSuite) TestImportLegacy(c *C) {
- os.MkdirAll(filepath.Join(s.pool.rootPath, "00", "35"), 0755)
+ _ = os.MkdirAll(filepath.Join(s.pool.rootPath, "00", "35"), 0755)
err := utils.CopyFile(s.debFile, filepath.Join(s.pool.rootPath, "00", "35", "libboost-program-options-dev_1.49.0.1_i386.deb"))
c.Assert(err, IsNil)
@@ -178,7 +179,7 @@ func (s *PackagePoolSuite) TestVerifyLegacy(c *C) {
c.Check(err, IsNil)
c.Check(exists, Equals, false)
- os.MkdirAll(filepath.Join(s.pool.rootPath, "00", "35"), 0755)
+ _ = os.MkdirAll(filepath.Join(s.pool.rootPath, "00", "35"), 0755)
err = utils.CopyFile(s.debFile, filepath.Join(s.pool.rootPath, "00", "35", "libboost-program-options-dev_1.49.0.1_i386.deb"))
c.Assert(err, IsNil)
@@ -299,8 +300,8 @@ func (s *PackagePoolSuite) TestImportNotExist(c *C) {
}
func (s *PackagePoolSuite) TestImportOverwrite(c *C) {
- os.MkdirAll(filepath.Join(s.pool.rootPath, "c7", "6b"), 0755)
- ioutil.WriteFile(filepath.Join(s.pool.rootPath, "c7", "6b", "4bd12fd92e4dfe1b55b18a67a669_libboost-program-options-dev_1.49.0.1_i386.deb"), []byte("1"), 0644)
+ _ = os.MkdirAll(filepath.Join(s.pool.rootPath, "c7", "6b"), 0755)
+ _ = os.WriteFile(filepath.Join(s.pool.rootPath, "c7", "6b", "4bd12fd92e4dfe1b55b18a67a669_libboost-program-options-dev_1.49.0.1_i386.deb"), []byte("1"), 0644)
_, err := s.pool.Import(s.debFile, filepath.Base(s.debFile), &s.checksum, false, s.cs)
c.Check(err, ErrorMatches, "unable to import into pool.*")
@@ -336,7 +337,7 @@ func (s *PackagePoolSuite) TestOpen(c *C) {
f, err := s.pool.Open(path)
c.Assert(err, IsNil)
- contents, err := ioutil.ReadAll(f)
+ contents, err := io.ReadAll(f)
c.Assert(err, IsNil)
c.Check(len(contents), Equals, 2738)
c.Check(f.Close(), IsNil)
diff --git a/files/public.go b/files/public.go
index 848f0c23..f3756aeb 100644
--- a/files/public.go
+++ b/files/public.go
@@ -86,13 +86,17 @@ func (storage *PublishedStorage) PutFile(path string, sourceFilename string) err
if err != nil {
return err
}
- defer source.Close()
+ defer func() {
+ _ = source.Close()
+ }()
f, err = os.Create(filepath.Join(storage.rootPath, path))
if err != nil {
return err
}
- defer f.Close()
+ defer func() {
+ _ = f.Close()
+ }()
_, err = io.Copy(f, source)
return err
@@ -221,20 +225,20 @@ func (storage *PublishedStorage) LinkFromPool(publishedPrefix, publishedRelPath,
var dst *os.File
dst, err = os.Create(filepath.Join(poolPath, baseName))
if err != nil {
- r.Close()
+ _ = r.Close()
return err
}
_, err = io.Copy(dst, r)
if err != nil {
- r.Close()
- dst.Close()
+ _ = r.Close()
+ _ = dst.Close()
return err
}
err = r.Close()
if err != nil {
- dst.Close()
+ _ = dst.Close()
return err
}
diff --git a/files/public_test.go b/files/public_test.go
index f135bd3e..14413167 100644
--- a/files/public_test.go
+++ b/files/public_test.go
@@ -1,7 +1,6 @@
package files
import (
- "io/ioutil"
"os"
"path/filepath"
"syscall"
@@ -222,8 +221,8 @@ func (s *PublishedStorageSuite) TestLinkFromPool(c *C) {
for _, t := range tests {
tmpPath := filepath.Join(c.MkDir(), t.sourcePath)
- os.MkdirAll(filepath.Dir(tmpPath), 0777)
- err := ioutil.WriteFile(tmpPath, []byte("Contents"), 0644)
+ _ = os.MkdirAll(filepath.Dir(tmpPath), 0777)
+ err := os.WriteFile(tmpPath, []byte("Contents"), 0644)
c.Assert(err, IsNil)
sourceChecksum, err := utils.ChecksumsForFile(tmpPath)
@@ -276,7 +275,7 @@ func (s *PublishedStorageSuite) TestLinkFromPool(c *C) {
// test linking files to duplicate final name
tmpPath := filepath.Join(c.MkDir(), "mars-invaders_1.03.deb")
- err := ioutil.WriteFile(tmpPath, []byte("cONTENTS"), 0644)
+ err := os.WriteFile(tmpPath, []byte("cONTENTS"), 0644)
c.Assert(err, IsNil)
sourceChecksum, err := utils.ChecksumsForFile(tmpPath)
@@ -330,11 +329,11 @@ func (s *PublishedStorageSuite) TestRootRemove(c *C) {
// Symlink
linkedDir := filepath.Join(pwd, "linkedDir")
- os.Symlink(s.root, linkedDir)
+ _ = os.Symlink(s.root, linkedDir)
linkStorage := NewPublishedStorage(linkedDir, "", "")
- c.Assert(func() { linkStorage.Remove("") }, PanicMatches, "trying to remove empty path")
+ c.Assert(func() { _ = linkStorage.Remove("") }, PanicMatches, "trying to remove empty path")
// Actual dir
dirStorage := NewPublishedStorage(pwd, "", "")
- c.Assert(func() { dirStorage.RemoveDirs("", nil) }, PanicMatches, "trying to remove the root directory")
+ c.Assert(func() { _ = dirStorage.RemoveDirs("", nil) }, PanicMatches, "trying to remove the root directory")
}
diff --git a/go.mod b/go.mod
index 2f1de401..53c5e78c 100644
--- a/go.mod
+++ b/go.mod
@@ -1,6 +1,6 @@
module github.com/aptly-dev/aptly
-go 1.22.7
+go 1.24
require (
github.com/AlekSi/pointer v1.1.0
@@ -32,9 +32,9 @@ require (
github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d
github.com/ugorji/go/codec v1.2.11
github.com/wsxiaoys/terminal v0.0.0-20160513160801-0940f3fc43a0
- golang.org/x/crypto v0.31.0 // indirect
- golang.org/x/sys v0.28.0
- golang.org/x/term v0.27.0
+ golang.org/x/crypto v0.36.0 // indirect
+ golang.org/x/sys v0.31.0
+ golang.org/x/term v0.30.0
golang.org/x/time v0.5.0
google.golang.org/protobuf v1.34.2 // indirect
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c
@@ -103,10 +103,10 @@ require (
go.uber.org/multierr v1.10.0 // indirect
go.uber.org/zap v1.26.0 // indirect
golang.org/x/arch v0.3.0 // indirect
- golang.org/x/net v0.33.0 // indirect
- golang.org/x/sync v0.10.0 // indirect
- golang.org/x/text v0.21.0 // indirect
- golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect
+ golang.org/x/net v0.38.0 // indirect
+ golang.org/x/sync v0.12.0 // indirect
+ golang.org/x/text v0.23.0 // indirect
+ golang.org/x/tools v0.30.0 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237 // indirect
google.golang.org/grpc v1.64.1 // indirect
diff --git a/go.sum b/go.sum
index 1e03143e..502f4b21 100644
--- a/go.sum
+++ b/go.sum
@@ -322,14 +322,14 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU=
-golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U=
-golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
+golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
+golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
-golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA=
-golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
+golang.org/x/mod v0.23.0 h1:Zb7khfcRGKk+kqfxFaP5tZqCnDZMjC5VtUBs87Hr6QM=
+golang.org/x/mod v0.23.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
@@ -346,8 +346,8 @@ golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
-golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
-golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
+golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8=
+golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -355,8 +355,8 @@ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
-golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw=
+golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -383,15 +383,15 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
-golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
+golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
-golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q=
-golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM=
+golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y=
+golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
@@ -399,8 +399,8 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
-golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
-golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
+golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
+golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -410,8 +410,8 @@ golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4f
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
-golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg=
-golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
+golang.org/x/tools v0.30.0 h1:BgcpHewrV5AUp2G9MebG4XPFI1E2W41zU1SaqVA9vJY=
+golang.org/x/tools v0.30.0/go.mod h1:c347cR/OJfw5TI+GfX7RUPNMdDRRbjvYTS0jPyvsVtY=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
diff --git a/http/compression_test.go b/http/compression_test.go
index 6d0dd86a..3c4871ae 100644
--- a/http/compression_test.go
+++ b/http/compression_test.go
@@ -46,8 +46,10 @@ func (s *CompressionSuite) TestDownloadTryCompression(c *C) {
d.ExpectResponse("http://example.com/file.bz2", bzipData)
r, file, err := DownloadTryCompression(s.ctx, d, s.baseURL, "file", expectedChecksums, false)
c.Assert(err, IsNil)
- defer file.Close()
- io.ReadFull(r, buf)
+ defer func() {
+ _ = file.Close()
+ }()
+ _, _ = io.ReadFull(r, buf)
c.Assert(string(buf), Equals, rawData)
c.Assert(d.Empty(), Equals, true)
@@ -58,8 +60,10 @@ func (s *CompressionSuite) TestDownloadTryCompression(c *C) {
d.ExpectResponse("http://example.com/file.gz", gzipData)
r, file, err = DownloadTryCompression(s.ctx, d, s.baseURL, "file", expectedChecksums, false)
c.Assert(err, IsNil)
- defer file.Close()
- io.ReadFull(r, buf)
+ defer func() {
+ _ = file.Close()
+ }()
+ _, _ = io.ReadFull(r, buf)
c.Assert(string(buf), Equals, rawData)
c.Assert(d.Empty(), Equals, true)
@@ -71,8 +75,10 @@ func (s *CompressionSuite) TestDownloadTryCompression(c *C) {
d.ExpectResponse("http://example.com/file.xz", xzData)
r, file, err = DownloadTryCompression(s.ctx, d, s.baseURL, "file", expectedChecksums, false)
c.Assert(err, IsNil)
- defer file.Close()
- io.ReadFull(r, buf)
+ defer func() {
+ _ = file.Close()
+ }()
+ _, _ = io.ReadFull(r, buf)
c.Assert(string(buf), Equals, rawData)
c.Assert(d.Empty(), Equals, true)
@@ -85,8 +91,10 @@ func (s *CompressionSuite) TestDownloadTryCompression(c *C) {
d.ExpectResponse("http://example.com/file", rawData)
r, file, err = DownloadTryCompression(s.ctx, d, s.baseURL, "file", expectedChecksums, false)
c.Assert(err, IsNil)
- defer file.Close()
- io.ReadFull(r, buf)
+ defer func() {
+ _ = file.Close()
+ }()
+ _, _ = io.ReadFull(r, buf)
c.Assert(string(buf), Equals, rawData)
c.Assert(d.Empty(), Equals, true)
@@ -114,8 +122,10 @@ func (s *CompressionSuite) TestDownloadTryCompressionLongestSuffix(c *C) {
d.ExpectResponse("http://example.com/subdir/file.bz2", bzipData)
r, file, err := DownloadTryCompression(s.ctx, d, s.baseURL, "subdir/file", expectedChecksums, false)
c.Assert(err, IsNil)
- defer file.Close()
- io.ReadFull(r, buf)
+ defer func() {
+ _ = file.Close()
+ }()
+ _, _ = io.ReadFull(r, buf)
c.Assert(string(buf), Equals, rawData)
c.Assert(d.Empty(), Equals, true)
}
diff --git a/http/download.go b/http/download.go
index be7b2c78..3dc9c378 100644
--- a/http/download.go
+++ b/http/download.go
@@ -226,7 +226,7 @@ func (downloader *downloaderImpl) DownloadWithChecksum(ctx context.Context, url
err = os.Rename(temppath, destination)
if err != nil {
- os.Remove(temppath)
+ _ = os.Remove(temppath)
return errors.Wrap(err, url)
}
@@ -239,7 +239,9 @@ func (downloader *downloaderImpl) download(req *http.Request, url, destination s
return "", errors.Wrap(err, url)
}
if resp.Body != nil {
- defer resp.Body.Close()
+ defer func() {
+ _ = resp.Body.Close()
+ }()
}
if resp.StatusCode < 200 || resp.StatusCode > 299 {
@@ -257,7 +259,9 @@ func (downloader *downloaderImpl) download(req *http.Request, url, destination s
if err != nil {
return "", errors.Wrap(err, url)
}
- defer outfile.Close()
+ defer func() {
+ _ = outfile.Close()
+ }()
checksummer := utils.NewChecksumWriter()
writers := []io.Writer{outfile, downloader.aggWriter}
@@ -270,7 +274,7 @@ func (downloader *downloaderImpl) download(req *http.Request, url, destination s
_, err = io.Copy(w, resp.Body)
if err != nil {
- os.Remove(temppath)
+ _ = os.Remove(temppath)
return "", errors.Wrap(err, url)
}
@@ -295,7 +299,7 @@ func (downloader *downloaderImpl) download(req *http.Request, url, destination s
downloader.progress.Printf("WARNING: %s\n", err.Error())
}
} else {
- os.Remove(temppath)
+ _ = os.Remove(temppath)
return "", err
}
} else {
diff --git a/http/download_test.go b/http/download_test.go
index d0feccf3..57ba7845 100644
--- a/http/download_test.go
+++ b/http/download_test.go
@@ -32,13 +32,13 @@ func (s *DownloaderSuiteBase) SetUpTest(c *C) {
mux := http.NewServeMux()
mux.HandleFunc("/test", func(w http.ResponseWriter, r *http.Request) {
- fmt.Fprintf(w, "Hello, %s", r.URL.Path)
+ _, _ = fmt.Fprintf(w, "Hello, %s", r.URL.Path)
})
s.ch = make(chan struct{})
go func() {
- http.Serve(s.l, mux)
+ _ = http.Serve(s.l, mux)
close(s.ch)
}()
@@ -52,11 +52,11 @@ func (s *DownloaderSuiteBase) SetUpTest(c *C) {
func (s *DownloaderSuiteBase) TearDownTest(c *C) {
s.progress.Shutdown()
- s.l.Close()
+ _ = s.l.Close()
<-s.ch
- os.Remove(s.tempfile.Name())
- s.tempfile.Close()
+ _ = os.Remove(s.tempfile.Name())
+ _ = s.tempfile.Close()
}
type DownloaderSuite struct {
diff --git a/http/fake.go b/http/fake.go
index 40a1093d..d1c1cad4 100644
--- a/http/fake.go
+++ b/http/fake.go
@@ -104,7 +104,9 @@ func (f *FakeDownloader) DownloadWithChecksum(_ context.Context, url string, fil
if err != nil {
return err
}
- defer outfile.Close()
+ defer func() {
+ _ = outfile.Close()
+ }()
cks := utils.NewChecksumWriter()
w := io.MultiWriter(outfile, cks)
diff --git a/http/grab.go b/http/grab.go
index 51fc672b..fd6420a1 100644
--- a/http/grab.go
+++ b/http/grab.go
@@ -14,7 +14,7 @@ import (
"golang.org/x/time/rate"
"github.com/aptly-dev/aptly/utils"
- "github.com/cavaliergopher/grab/v3"
+ grab "github.com/cavaliergopher/grab/v3"
"github.com/pkg/errors"
"github.com/aptly-dev/aptly/aptly"
@@ -49,10 +49,10 @@ func (d *GrabDownloader) Download(ctx context.Context, url string, destination s
func (d *GrabDownloader) DownloadWithChecksum(ctx context.Context, url string, destination string, expected *utils.ChecksumInfo, ignoreMismatch bool) error {
maxTries := d.maxTries
- const delayMax = time.Duration(5 * time.Minute)
+ // FIXME: const delayMax = time.Duration(5 * time.Minute)
delay := time.Duration(1 * time.Second)
- const delayMultiplier = 2
- err := fmt.Errorf("No tries available")
+ // FIXME: const delayMultiplier = 2
+ err := fmt.Errorf("no tries available")
for maxTries > 0 {
err = d.download(ctx, url, destination, expected, ignoreMismatch)
if err == nil {
@@ -125,7 +125,7 @@ func (d *GrabDownloader) download(_ context.Context, url string, destination str
req.RateLimiter = rate.NewLimiter(rate.Limit(d.downLimit), int(d.downLimit))
}
- d.maybeSetupChecksum(req, expected)
+ err = d.maybeSetupChecksum(req, expected)
if err != nil {
d.log("Error setting up checksum: %v\n", err)
return errors.Wrap(err, url)
@@ -133,14 +133,17 @@ func (d *GrabDownloader) download(_ context.Context, url string, destination str
resp := d.client.Do(req)
-Loop:
- for {
- select {
- case <-resp.Done:
- // download is complete
- break Loop
- }
- }
+ <-resp.Done
+ // download is complete
+
+// Loop:
+// for {
+// select {
+// case <-resp.Done:
+// // download is complete
+// break Loop
+// }
+// }
err = resp.Err()
if err != nil && err == grab.ErrBadChecksum && ignoreMismatch {
fmt.Printf("Ignoring checksum mismatch for %s\n", url)
diff --git a/http/grab_test.go b/http/grab_test.go
index dacdfa8f..74a58e80 100644
--- a/http/grab_test.go
+++ b/http/grab_test.go
@@ -31,13 +31,13 @@ func (s *GrabDownloaderSuiteBase) SetUpTest(c *C) {
mux := http.NewServeMux()
mux.HandleFunc("/test", func(w http.ResponseWriter, r *http.Request) {
- fmt.Fprintf(w, "Hello, %s", r.URL.Path)
+ _, _ = fmt.Fprintf(w, "Hello, %s", r.URL.Path)
})
s.ch = make(chan struct{})
go func() {
- http.Serve(s.l, mux)
+ _ = http.Serve(s.l, mux)
close(s.ch)
}()
@@ -51,11 +51,11 @@ func (s *GrabDownloaderSuiteBase) SetUpTest(c *C) {
func (s *GrabDownloaderSuiteBase) TearDownTest(c *C) {
s.progress.Shutdown()
- s.l.Close()
+ _ = s.l.Close()
<-s.ch
- os.Remove(s.tempfile.Name())
- s.tempfile.Close()
+ _ = os.Remove(s.tempfile.Name())
+ _ = s.tempfile.Close()
}
type GrabDownloaderSuite struct {
diff --git a/http/http.go b/http/http.go
index 480a7830..d0e48c33 100644
--- a/http/http.go
+++ b/http/http.go
@@ -12,7 +12,7 @@ type Error struct {
URL string
}
-// Error
+// Error returns HTTP error message
func (e *Error) Error() string {
return fmt.Sprintf("HTTP code %d while fetching %s", e.Code, e.URL)
}
diff --git a/http/temp.go b/http/temp.go
index ddc2d3af..2b150da6 100644
--- a/http/temp.go
+++ b/http/temp.go
@@ -24,7 +24,7 @@ func DownloadTempWithChecksum(ctx context.Context, downloader aptly.Downloader,
if err != nil {
return nil, err
}
- defer os.RemoveAll(tempdir)
+ defer func() { _ = os.RemoveAll(tempdir) }()
tempfile := filepath.Join(tempdir, "buffer")
diff --git a/http/temp_test.go b/http/temp_test.go
index 715ed9c7..3dc52597 100644
--- a/http/temp_test.go
+++ b/http/temp_test.go
@@ -25,11 +25,11 @@ func (s *TempSuite) TearDownTest(c *C) {
func (s *TempSuite) TestDownloadTemp(c *C) {
f, err := DownloadTemp(s.ctx, s.d, s.url+"/test")
c.Assert(err, IsNil)
- defer f.Close()
+ defer func() { _ = f.Close() }()
buf := make([]byte, 1)
- f.Read(buf)
+ _, _ = f.Read(buf)
c.Assert(buf, DeepEquals, []byte("H"))
_, err = os.Stat(f.Name())
diff --git a/pgp/gnupg.go b/pgp/gnupg.go
index 63076c3e..3edf1210 100644
--- a/pgp/gnupg.go
+++ b/pgp/gnupg.go
@@ -203,7 +203,9 @@ func (g *GpgVerifier) runGpgv(args []string, context string, showKeyTip bool) (*
if err != nil {
return nil, err
}
- defer tempf.Close()
+ defer func() {
+ _ = tempf.Close()
+ }()
err = os.Remove(tempf.Name())
if err != nil {
@@ -216,7 +218,9 @@ func (g *GpgVerifier) runGpgv(args []string, context string, showKeyTip bool) (*
if err != nil {
return nil, err
}
- defer stderr.Close()
+ defer func() {
+ _ = stderr.Close()
+ }()
err = cmd.Start()
if err != nil {
@@ -232,7 +236,7 @@ func (g *GpgVerifier) runGpgv(args []string, context string, showKeyTip bool) (*
cmderr := cmd.Wait()
- tempf.Seek(0, 0)
+ _, _ = tempf.Seek(0, 0)
statusr := bufio.NewScanner(tempf)
@@ -281,8 +285,10 @@ func (g *GpgVerifier) VerifyDetachedSignature(signature, cleartext io.Reader, sh
if err != nil {
return err
}
- defer os.Remove(sigf.Name())
- defer sigf.Close()
+ defer func() {
+ _ = os.Remove(sigf.Name())
+ _ = sigf.Close()
+ }()
_, err = io.Copy(sigf, signature)
if err != nil {
@@ -293,8 +299,10 @@ func (g *GpgVerifier) VerifyDetachedSignature(signature, cleartext io.Reader, sh
if err != nil {
return err
}
- defer os.Remove(clearf.Name())
- defer clearf.Close()
+ defer func() {
+ _ = os.Remove(clearf.Name())
+ _ = clearf.Close()
+ }()
_, err = io.Copy(clearf, cleartext)
if err != nil {
@@ -326,8 +334,10 @@ func (g *GpgVerifier) VerifyClearsigned(clearsigned io.Reader, showKeyTip bool)
if err != nil {
return nil, err
}
- defer os.Remove(clearf.Name())
- defer clearf.Close()
+ defer func() {
+ _ = os.Remove(clearf.Name())
+ _ = clearf.Close()
+ }()
_, err = io.Copy(clearf, clearsigned)
if err != nil {
@@ -344,8 +354,10 @@ func (g *GpgVerifier) ExtractClearsigned(clearsigned io.Reader) (text *os.File,
if err != nil {
return
}
- defer os.Remove(clearf.Name())
- defer clearf.Close()
+ defer func() {
+ _ = os.Remove(clearf.Name())
+ _ = clearf.Close()
+ }()
_, err = io.Copy(clearf, clearsigned)
if err != nil {
@@ -356,7 +368,9 @@ func (g *GpgVerifier) ExtractClearsigned(clearsigned io.Reader) (text *os.File,
if err != nil {
return
}
- defer os.Remove(text.Name())
+ defer func() {
+ _ = os.Remove(text.Name())
+ }()
args := []string{"--no-auto-check-trustdb", "--decrypt", "--batch", "--skip-verify", "--output", "-", clearf.Name()}
@@ -365,7 +379,9 @@ func (g *GpgVerifier) ExtractClearsigned(clearsigned io.Reader) (text *os.File,
if err != nil {
return nil, err
}
- defer stdout.Close()
+ defer func() {
+ _ = stdout.Close()
+ }()
err = cmd.Start()
if err != nil {
diff --git a/pgp/gnupg_test.go b/pgp/gnupg_test.go
index d17dbe20..086fc366 100644
--- a/pgp/gnupg_test.go
+++ b/pgp/gnupg_test.go
@@ -23,8 +23,8 @@ func (s *GnupgSuite) SetUpSuite(c *C) {
// If gpg == gpg1 = pick gpg
func (s *GnupgSuite) TestGPG1(c *C) {
origPath := os.Getenv("PATH")
- os.Setenv("PATH", filepath.Join(s.bins, "gpg1"))
- defer func() { os.Setenv("PATH", origPath) }()
+ _ = os.Setenv("PATH", filepath.Join(s.bins, "gpg1"))
+ defer func() { _ = os.Setenv("PATH", origPath) }()
signer := NewGpgSigner(GPG1Finder())
c.Assert(signer.gpg, Equals, "gpg")
@@ -33,8 +33,8 @@ func (s *GnupgSuite) TestGPG1(c *C) {
// gpg(2) + gpg1 installed = pick gpg1
func (s *GnupgSuite) TestGPG1Not2(c *C) {
origPath := os.Getenv("PATH")
- os.Setenv("PATH", filepath.Join(s.bins, "gpg2-and-1"))
- defer func() { os.Setenv("PATH", origPath) }()
+ _ = os.Setenv("PATH", filepath.Join(s.bins, "gpg2-and-1"))
+ defer func() { _ = os.Setenv("PATH", origPath) }()
signer := NewGpgSigner(GPG1Finder())
c.Assert(signer.gpg, Equals, "gpg1")
@@ -43,8 +43,8 @@ func (s *GnupgSuite) TestGPG1Not2(c *C) {
// If gpg == gpg2 and no gpg1 is available = error
func (s *GnupgSuite) TestGPGNothing(c *C) {
origPath := os.Getenv("PATH")
- os.Setenv("PATH", filepath.Join(s.bins, "gpg2-only"))
- defer func() { os.Setenv("PATH", origPath) }()
+ _ = os.Setenv("PATH", filepath.Join(s.bins, "gpg2-only"))
+ defer func() { _ = os.Setenv("PATH", origPath) }()
c.Assert(func() { NewGpgSigner(GPG1Finder()) }, PanicMatches, `Couldn't find a suitable gpg executable.+`)
}
@@ -52,8 +52,8 @@ func (s *GnupgSuite) TestGPGNothing(c *C) {
// If gpgv == gpgv1 = pick gpgv
func (s *GnupgSuite) TestGPGV1(c *C) {
origPath := os.Getenv("PATH")
- os.Setenv("PATH", filepath.Join(s.bins, "gpgv1")+":"+filepath.Join(s.bins, "gpg1"))
- defer func() { os.Setenv("PATH", origPath) }()
+ _ = os.Setenv("PATH", filepath.Join(s.bins, "gpgv1")+":"+filepath.Join(s.bins, "gpg1"))
+ defer func() { _ = os.Setenv("PATH", origPath) }()
verifier := NewGpgVerifier(GPG1Finder())
c.Assert(verifier.gpgv, Equals, "gpgv")
@@ -62,8 +62,8 @@ func (s *GnupgSuite) TestGPGV1(c *C) {
// gpgv(2) + gpgv1 installed = pick gpgv1
func (s *GnupgSuite) TestGPGV1Not2(c *C) {
origPath := os.Getenv("PATH")
- os.Setenv("PATH", filepath.Join(s.bins, "gpgv2-and-1")+":"+filepath.Join(s.bins, "gpg1"))
- defer func() { os.Setenv("PATH", origPath) }()
+ _ = os.Setenv("PATH", filepath.Join(s.bins, "gpgv2-and-1")+":"+filepath.Join(s.bins, "gpg1"))
+ defer func() { _ = os.Setenv("PATH", origPath) }()
verifier := NewGpgVerifier(GPG1Finder())
c.Assert(verifier.gpgv, Equals, "gpgv1")
@@ -72,8 +72,8 @@ func (s *GnupgSuite) TestGPGV1Not2(c *C) {
// If gpgv == gpgv2 and no gpgv1 is available = error
func (s *GnupgSuite) TestGPGVNothing(c *C) {
origPath := os.Getenv("PATH")
- os.Setenv("PATH", filepath.Join(s.bins, "gpgv2-only")+":"+filepath.Join(s.bins, "gpg1"))
- defer func() { os.Setenv("PATH", origPath) }()
+ _ = os.Setenv("PATH", filepath.Join(s.bins, "gpgv2-only")+":"+filepath.Join(s.bins, "gpg1"))
+ defer func() { _ = os.Setenv("PATH", origPath) }()
c.Assert(func() { NewGpgVerifier(GPG1Finder()) }, PanicMatches, `Couldn't find a suitable gpg executable.+`)
}
@@ -220,6 +220,6 @@ func (s *Gnupg2SignerSuite) SetUpTest(c *C) {
func (s *Gnupg2SignerSuite) TearDownTest(c *C) {
s.SignerSuite.TearDownTest(c)
- os.Remove("../system/files/aptly2.gpg")
- os.Remove("../system/files/aptly2_passphrase.gpg")
+ _ = os.Remove("../system/files/aptly2.gpg")
+ _ = os.Remove("../system/files/aptly2_passphrase.gpg")
}
diff --git a/pgp/internal.go b/pgp/internal.go
index 9796295c..4998697b 100644
--- a/pgp/internal.go
+++ b/pgp/internal.go
@@ -79,7 +79,9 @@ func (g *GoSigner) Init() error {
if err != nil {
return errors.Wrap(err, "error opening passphrase file")
}
- defer passF.Close()
+ defer func() {
+ _ = passF.Close()
+ }()
contents, err := io.ReadAll(passF)
if err != nil {
@@ -224,13 +226,17 @@ func (g *GoSigner) DetachedSign(source string, destination string) error {
if err != nil {
return errors.Wrap(err, "error opening source file")
}
- defer message.Close()
+ defer func() {
+ _ = message.Close()
+ }()
signature, err := os.Create(destination)
if err != nil {
return errors.Wrap(err, "error creating signature file")
}
- defer signature.Close()
+ defer func() {
+ _ = signature.Close()
+ }()
err = openpgp.ArmoredDetachSign(signature, g.signer, message, g.signerConfig)
if err != nil {
@@ -248,13 +254,17 @@ func (g *GoSigner) ClearSign(source string, destination string) error {
if err != nil {
return errors.Wrap(err, "error opening source file")
}
- defer message.Close()
+ defer func() {
+ _ = message.Close()
+ }()
clearsigned, err := os.Create(destination)
if err != nil {
return errors.Wrap(err, "error creating clearsigned file")
}
- defer clearsigned.Close()
+ defer func() {
+ _ = clearsigned.Close()
+ }()
stream, err := clearsign.Encode(clearsigned, g.signer.PrivateKey, g.signerConfig)
if err != nil {
@@ -263,7 +273,7 @@ func (g *GoSigner) ClearSign(source string, destination string) error {
_, err = io.Copy(stream, message)
if err != nil {
- stream.Close()
+ _ = stream.Close()
return errors.Wrap(err, "error generating clearsigned signature")
}
@@ -463,7 +473,9 @@ func (g *GoVerifier) ExtractClearsigned(clearsigned io.Reader) (text *os.File, e
if err != nil {
return
}
- defer os.Remove(text.Name())
+ defer func() {
+ _ = os.Remove(text.Name())
+ }()
_, err = text.Write(block.Bytes)
if err != nil {
@@ -494,7 +506,9 @@ func loadKeyRing(name string, ignoreMissing bool) (openpgp.EntityList, error) {
return nil, err
}
- defer f.Close()
+ defer func() {
+ _ = f.Close()
+ }()
return openpgp.ReadKeyRing(f)
}
diff --git a/pgp/sign_test.go b/pgp/sign_test.go
index 54e4fd12..e51893cc 100644
--- a/pgp/sign_test.go
+++ b/pgp/sign_test.go
@@ -3,7 +3,6 @@ package pgp
import (
"crypto/rand"
"io"
- "io/ioutil"
"os"
"path"
@@ -57,14 +56,14 @@ func (s *SignerSuite) SetUpTest(c *C) {
_, err = f.Write([]byte("verysecret"))
c.Assert(err, IsNil)
- f.Close()
+ _ = f.Close()
s.signer.SetBatch(true)
}
func (s *SignerSuite) TearDownTest(c *C) {
- s.clearF.Close()
- s.signedF.Close()
+ _ = s.clearF.Close()
+ _ = s.signedF.Close()
}
func (s *SignerSuite) testSignDetached(c *C) {
@@ -137,9 +136,11 @@ func (s *SignerSuite) testClearSign(c *C, expectedKey Key) {
c.Assert(err, IsNil)
extractedF, err := s.verifier.ExtractClearsigned(s.signedF)
c.Assert(err, IsNil)
- defer extractedF.Close()
+ defer func() {
+ _ = extractedF.Close()
+ }()
- extracted, err := ioutil.ReadAll(extractedF)
+ extracted, err := io.ReadAll(extractedF)
c.Assert(err, IsNil)
c.Assert(extracted, DeepEquals, s.cleartext)
diff --git a/pgp/verify_test.go b/pgp/verify_test.go
index 2da77252..89fdbc14 100644
--- a/pgp/verify_test.go
+++ b/pgp/verify_test.go
@@ -2,7 +2,7 @@ package pgp
import (
"bytes"
- "io/ioutil"
+ "io"
"os"
. "gopkg.in/check.v1"
@@ -31,8 +31,8 @@ func (s *VerifierSuite) TestVerifyDetached(c *C) {
err = s.verifier.VerifyDetachedSignature(signature, cleartext, false)
c.Assert(err, IsNil)
- signature.Close()
- cleartext.Close()
+ _ = signature.Close()
+ _ = cleartext.Close()
}
}
@@ -50,7 +50,7 @@ func (s *VerifierSuite) TestVerifyClearsigned(c *C) {
c.Check(keyInfo.GoodKeys, DeepEquals, []Key{"04EE7237B7D453EC", "648ACFD622F3D138", "DCC9EFBF77E11517"})
c.Check(keyInfo.MissingKeys, DeepEquals, []Key(nil))
- clearsigned.Close()
+ _ = clearsigned.Close()
}
}
@@ -70,15 +70,15 @@ func (s *VerifierSuite) TestExtractClearsigned(c *C) {
c.Assert(err, IsNil)
c.Check(is, Equals, true)
- clearsigned.Seek(0, 0)
+ _, _ = clearsigned.Seek(0, 0)
extractedF, err := s.verifier.ExtractClearsigned(clearsigned)
c.Assert(err, IsNil)
- expected, err := ioutil.ReadAll(cleartext)
+ expected, err := io.ReadAll(cleartext)
c.Assert(err, IsNil)
- extracted, err := ioutil.ReadAll(extractedF)
+ extracted, err := io.ReadAll(extractedF)
c.Assert(err, IsNil)
// normalize newlines
@@ -87,8 +87,8 @@ func (s *VerifierSuite) TestExtractClearsigned(c *C) {
c.Check(extracted, DeepEquals, expected)
- extractedF.Close()
- clearsigned.Close()
- cleartext.Close()
+ _ = extractedF.Close()
+ _ = clearsigned.Close()
+ _ = cleartext.Close()
}
}
diff --git a/s3/public.go b/s3/public.go
index 47623a00..09b1afdb 100644
--- a/s3/public.go
+++ b/s3/public.go
@@ -12,20 +12,18 @@ import (
"github.com/aptly-dev/aptly/utils"
"github.com/aws/aws-sdk-go-v2/aws"
- v4 "github.com/aws/aws-sdk-go-v2/aws/signer/v4"
+ signer "github.com/aws/aws-sdk-go-v2/aws/signer/v4"
"github.com/aws/aws-sdk-go-v2/config"
"github.com/aws/aws-sdk-go-v2/credentials"
"github.com/aws/aws-sdk-go-v2/service/s3"
"github.com/aws/aws-sdk-go-v2/service/s3/types"
- "github.com/aws/smithy-go"
+ smithy "github.com/aws/smithy-go"
"github.com/aws/smithy-go/logging"
"github.com/pkg/errors"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
)
-const errCodeNotFound = "NotFound"
-
type logger struct{}
func (l *logger) Logf(classification logging.Classification, format string, v ...interface{}) {
@@ -90,7 +88,7 @@ func NewPublishedStorageRaw(
result := &PublishedStorage{
s3: s3.NewFromConfig(*config, func(o *s3.Options) {
o.UsePathStyle = !forceVirtualHostedStyle
- o.HTTPSignerV4 = v4.NewSigner()
+ o.HTTPSignerV4 = signer.NewSigner()
o.BaseEndpoint = baseEndpoint
}),
bucket: bucket,
@@ -149,7 +147,7 @@ func NewPublishedStorage(
return result, err
}
-// String
+// String returns the storage as string
func (storage *PublishedStorage) String() string {
return fmt.Sprintf("S3: %s:%s/%s", storage.config.Region, storage.bucket, storage.prefix)
}
@@ -170,8 +168,9 @@ func (storage *PublishedStorage) PutFile(path string, sourceFilename string) err
if err != nil {
return err
}
- defer source.Close()
+ defer func() { _ = source.Close() }()
+ log.Debug().Msgf("S3: PutFile '%s'", path)
err = storage.putFile(path, source, "")
if err != nil {
err = errors.Wrap(err, fmt.Sprintf("error uploading %s to %s", sourceFilename, storage))
@@ -196,7 +195,6 @@ func (storage *PublishedStorage) getMD5(path string) (string, error) {
// putFile uploads file-like object to
func (storage *PublishedStorage) putFile(path string, source io.ReadSeeker, sourceMD5 string) error {
-
params := &s3.PutObjectInput{
Bucket: aws.String(storage.bucket),
Key: aws.String(filepath.Join(storage.prefix, path)),
@@ -238,6 +236,7 @@ func (storage *PublishedStorage) Remove(path string) error {
Key: aws.String(filepath.Join(storage.prefix, path)),
}
+ log.Debug().Msgf("S3: Remove '%s'", path)
if _, err := storage.s3.DeleteObject(context.TODO(), params); err != nil {
var notFoundErr *smithy.GenericAPIError
if errors.As(err, ¬FoundErr) && notFoundErr.Code == "NoSuchBucket" {
@@ -270,6 +269,7 @@ func (storage *PublishedStorage) RemoveDirs(path string, _ aptly.Progress) error
return err
}
+ log.Debug().Msgf("S3: RemoveDirs '%s'", path)
if storage.disableMultiDel {
for i := range filelist {
params := &s3.DeleteObjectInput{
@@ -338,7 +338,7 @@ func (storage *PublishedStorage) LinkFromPool(publishedPrefix, publishedRelPath,
poolPath := filepath.Join(storage.prefix, relPath)
if storage.pathCache == nil {
- paths, md5s, err := storage.internalFilelist(filepath.Join(storage.prefix, publishedPrefix, "pool"), true)
+ paths, md5s, err := storage.internalFilelist(filepath.Join(publishedPrefix, "pool"), true)
if err != nil {
return errors.Wrap(err, "error caching paths under prefix")
}
@@ -346,7 +346,7 @@ func (storage *PublishedStorage) LinkFromPool(publishedPrefix, publishedRelPath,
storage.pathCache = make(map[string]string, len(paths))
for i := range paths {
- storage.pathCache[paths[i]] = md5s[i]
+ storage.pathCache[filepath.Join("pool", paths[i])] = md5s[i]
}
}
@@ -383,8 +383,9 @@ func (storage *PublishedStorage) LinkFromPool(publishedPrefix, publishedRelPath,
if err != nil {
return err
}
- defer source.Close()
+ defer func() { _ = source.Close() }()
+ log.Debug().Msgf("S3: LinkFromPool '%s'", relPath)
err = storage.putFile(relPath, source, sourceMD5)
if err == nil {
storage.pathCache[relPath] = sourceMD5
@@ -465,6 +466,7 @@ func (storage *PublishedStorage) RenameFile(oldName, newName string) error {
params.ServerSideEncryption = storage.encryptionMethod
}
+ log.Debug().Msgf("S3: RenameFile %s -> %s", oldName, newName)
_, err := storage.s3.CopyObject(context.TODO(), params)
if err != nil {
return fmt.Errorf("error copying %s -> %s in %s: %s", oldName, newName, storage, err)
@@ -494,6 +496,7 @@ func (storage *PublishedStorage) SymLink(src string, dst string) error {
params.ServerSideEncryption = types.ServerSideEncryption(storage.encryptionMethod)
}
+ log.Debug().Msgf("S3: SymLink %s -> %s", src, dst)
_, err := storage.s3.CopyObject(context.TODO(), params)
if err != nil {
return fmt.Errorf("error symlinking %s -> %s in %s: %s", src, dst, storage, err)
@@ -504,6 +507,7 @@ func (storage *PublishedStorage) SymLink(src string, dst string) error {
// HardLink using symlink functionality as hard links do not exist
func (storage *PublishedStorage) HardLink(src string, dst string) error {
+ log.Debug().Msgf("S3: HardLink %s -> %s", src, dst)
return storage.SymLink(src, dst)
}
diff --git a/s3/public_test.go b/s3/public_test.go
index 83605e3e..d857e64d 100644
--- a/s3/public_test.go
+++ b/s3/public_test.go
@@ -3,7 +3,7 @@ package s3
import (
"bytes"
"context"
- "io/ioutil"
+ "io"
"os"
"path/filepath"
"sort"
@@ -70,8 +70,8 @@ func (s *PublishedStorageSuite) GetFile(c *C, path string) []byte {
})
c.Assert(err, IsNil)
- body, err := ioutil.ReadAll(resp.Body)
- resp.Body.Close()
+ body, err := io.ReadAll(resp.Body)
+ _ = resp.Body.Close()
c.Assert(err, IsNil)
return body
@@ -98,7 +98,7 @@ func (s *PublishedStorageSuite) PutFile(c *C, path string, data []byte) {
func (s *PublishedStorageSuite) TestPutFile(c *C) {
dir := c.MkDir()
- err := ioutil.WriteFile(filepath.Join(dir, "a"), []byte("welcome to s3!"), 0644)
+ err := os.WriteFile(filepath.Join(dir, "a"), []byte("welcome to s3!"), 0644)
c.Assert(err, IsNil)
err = s.storage.PutFile("a/b.txt", filepath.Join(dir, "a"))
@@ -116,7 +116,7 @@ func (s *PublishedStorageSuite) TestPutFilePlusWorkaround(c *C) {
s.storage.plusWorkaround = true
dir := c.MkDir()
- err := ioutil.WriteFile(filepath.Join(dir, "a"), []byte("welcome to s3!"), 0644)
+ err := os.WriteFile(filepath.Join(dir, "a"), []byte("welcome to s3!"), 0644)
c.Assert(err, IsNil)
err = s.storage.PutFile("a/b+c.txt", filepath.Join(dir, "a"))
@@ -260,18 +260,18 @@ func (s *PublishedStorageSuite) TestLinkFromPool(c *C) {
cs := files.NewMockChecksumStorage()
tmpFile1 := filepath.Join(c.MkDir(), "mars-invaders_1.03.deb")
- err := ioutil.WriteFile(tmpFile1, []byte("Contents"), 0644)
+ err := os.WriteFile(tmpFile1, []byte("Contents"), 0644)
c.Assert(err, IsNil)
cksum1 := utils.ChecksumInfo{MD5: "c1df1da7a1ce305a3b60af9d5733ac1d"}
tmpFile2 := filepath.Join(c.MkDir(), "mars-invaders_1.03.deb")
- err = ioutil.WriteFile(tmpFile2, []byte("Spam"), 0644)
+ err = os.WriteFile(tmpFile2, []byte("Spam"), 0644)
c.Assert(err, IsNil)
cksum2 := utils.ChecksumInfo{MD5: "e9dfd31cc505d51fc26975250750deab"}
tmpFile3 := filepath.Join(c.MkDir(), "netboot/boot.img.gz")
- os.MkdirAll(filepath.Dir(tmpFile3), 0777)
- err = ioutil.WriteFile(tmpFile3, []byte("Contents"), 0644)
+ _ = os.MkdirAll(filepath.Dir(tmpFile3), 0777)
+ err = os.WriteFile(tmpFile3, []byte("Contents"), 0644)
c.Assert(err, IsNil)
cksum3 := utils.ChecksumInfo{MD5: "c1df1da7a1ce305a3b60af9d5733ac1d"}
@@ -332,7 +332,7 @@ func (s *PublishedStorageSuite) TestLinkFromPoolCache(c *C) {
cs := files.NewMockChecksumStorage()
tmpFile1 := filepath.Join(c.MkDir(), "mars-invaders_1.03.deb")
- err := ioutil.WriteFile(tmpFile1, []byte("Contents"), 0644)
+ err := os.WriteFile(tmpFile1, []byte("Contents"), 0644)
c.Assert(err, IsNil)
cksum1 := utils.ChecksumInfo{MD5: "c1df1da7a1ce305a3b60af9d5733ac1d"}
@@ -370,7 +370,7 @@ func (s *PublishedStorageSuite) TestLinkFromPoolCache(c *C) {
// Check only one listing request was done to the server
s.checkGetRequestsEqual(c, "/test?", []string{
- "/test?list-type=2&max-keys=1000&prefix=lala%2Flala%2Fpool%2F",
+ "/test?list-type=2&max-keys=1000&prefix=lala%2Fpool%2F",
})
// Publish two packages at a prefixed storage plus a publish prefix.
diff --git a/s3/server_test.go b/s3/server_test.go
index 08c29040..a8a30475 100644
--- a/s3/server_test.go
+++ b/s3/server_test.go
@@ -8,7 +8,6 @@ import (
"encoding/xml"
"fmt"
"io"
- "io/ioutil"
"log"
"net"
"net/http"
@@ -113,15 +112,15 @@ func NewServer(config *Config) (*Server, error) {
buckets: make(map[string]*bucket),
config: config,
}
- go http.Serve(l, http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
+ go func() { _ = http.Serve(l, http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
srv.serveHTTP(w, req)
- }))
+ })) }()
return srv, nil
}
// Quit closes down the server.
func (srv *Server) Quit() {
- srv.listener.Close()
+ _ = srv.listener.Close()
}
// URL returns a URL for the server.
@@ -140,7 +139,7 @@ func fatalError(code int, codeStr string, errf string, a ...interface{}) {
// serveHTTP serves the S3 protocol.
func (srv *Server) serveHTTP(w http.ResponseWriter, req *http.Request) {
// ignore error from ParseForm as it's usually spurious.
- req.ParseForm()
+ _ = req.ParseForm()
srv.mu.Lock()
defer srv.mu.Unlock()
@@ -384,7 +383,7 @@ func (r bucketResource) get(a *action) interface{} {
if s := a.req.Form.Get("max-keys"); s != "" {
i, err := strconv.Atoi(s)
if err != nil || i < 0 {
- fatalError(400, "invalid value for max-keys: %q", s)
+ fatalError(400, "invalid value for max-keys", "%q", s)
}
maxKeys = i
}
@@ -541,7 +540,7 @@ func validBucketName(name string) bool {
return false
}
r := name[0]
- if !(r >= '0' && r <= '9' || r >= 'a' && r <= 'z') {
+ if r < '0' || (r > '9' && r < 'a') || r > 'z' {
return false
}
for _, r := range name {
@@ -654,7 +653,7 @@ func (objr objectResource) put(a *action) interface{} {
}
sum := md5.New()
// TODO avoid holding lock while reading data.
- data, err := ioutil.ReadAll(io.TeeReader(a.req.Body, sum))
+ data, err := io.ReadAll(io.TeeReader(a.req.Body, sum))
if err != nil {
fatalError(400, "TODO", "read error")
}
@@ -699,14 +698,14 @@ type CreateBucketConfiguration struct {
func locationConstraint(a *action) string {
var body bytes.Buffer
if _, err := io.Copy(&body, a.req.Body); err != nil {
- fatalError(400, "InvalidRequest", err.Error())
+ fatalError(400, "InvalidRequest", "%v", err.Error())
}
if body.Len() == 0 {
return ""
}
var loc CreateBucketConfiguration
if err := xml.NewDecoder(&body).Decode(&loc); err != nil {
- fatalError(400, "InvalidRequest", err.Error())
+ fatalError(400, "InvalidRequest", "%v", err.Error())
}
return loc.LocationConstraint
}
diff --git a/swift/public.go b/swift/public.go
index d1f01849..dd3c6d7b 100644
--- a/swift/public.go
+++ b/swift/public.go
@@ -89,7 +89,9 @@ func NewPublishedStorage(username string, password string, authURL string, tenan
var bulkDelete bool
resp, err := http.Get(filepath.Join(ct.StorageUrl, "..", "..") + "/info")
if err == nil {
- defer resp.Body.Close()
+ defer func() {
+ _ = resp.Body.Close()
+ }()
decoder := json.NewDecoder(resp.Body)
var infos swiftInfo
if decoder.Decode(&infos) == nil {
@@ -107,7 +109,7 @@ func NewPublishedStorage(username string, password string, authURL string, tenan
return result, nil
}
-// String
+// String represents the Storage as string
func (storage *PublishedStorage) String() string {
return fmt.Sprintf("Swift: %s/%s/%s", storage.conn.StorageUrl, storage.container, storage.prefix)
}
@@ -128,7 +130,9 @@ func (storage *PublishedStorage) PutFile(path string, sourceFilename string) err
if err != nil {
return err
}
- defer source.Close()
+ defer func() {
+ _ = source.Close()
+ }()
err = storage.putFile(path, source)
if err != nil {
@@ -225,7 +229,9 @@ func (storage *PublishedStorage) LinkFromPool(publishedPrefix, publishedRelPath,
if err != nil {
return err
}
- defer source.Close()
+ defer func() {
+ _ = source.Close()
+ }()
err = storage.putFile(relPath, source)
if err != nil {
diff --git a/swift/public_test.go b/swift/public_test.go
index 620b94a2..e8562e4a 100644
--- a/swift/public_test.go
+++ b/swift/public_test.go
@@ -2,7 +2,6 @@ package swift
import (
"fmt"
- "io/ioutil"
"math/rand"
"os"
"path/filepath"
@@ -39,7 +38,7 @@ func (s *PublishedStorageSuite) SetUpTest(c *C) {
s.prefixedStorage, err = NewPublishedStorage("swifttest", "swifttest", s.AuthURL, "", "", "", "", "", "", "test", "lala")
c.Assert(err, IsNil)
- s.storage.conn.ContainerCreate("test", nil)
+ _ = s.storage.conn.ContainerCreate("test", nil)
}
func (s *PublishedStorageSuite) TearDownTest(c *C) {
@@ -54,7 +53,7 @@ func (s *PublishedStorageSuite) TestNewPublishedStorage(c *C) {
func (s *PublishedStorageSuite) TestPutFile(c *C) {
dir := c.MkDir()
- err := ioutil.WriteFile(filepath.Join(dir, "a"), []byte("welcome to swift!"), 0644)
+ err := os.WriteFile(filepath.Join(dir, "a"), []byte("welcome to swift!"), 0644)
c.Assert(err, IsNil)
err = s.storage.PutFile("a/b.txt", filepath.Join(dir, "a"))
@@ -74,7 +73,7 @@ func (s *PublishedStorageSuite) TestPutFile(c *C) {
func (s *PublishedStorageSuite) TestFilelist(c *C) {
dir := c.MkDir()
- err := ioutil.WriteFile(filepath.Join(dir, "a"), []byte("welcome to swift!"), 0644)
+ err := os.WriteFile(filepath.Join(dir, "a"), []byte("welcome to swift!"), 0644)
c.Assert(err, IsNil)
paths := []string{"a", "b", "c", "testa", "test/a", "test/b", "lala/a", "lala/b", "lala/c"}
@@ -102,7 +101,7 @@ func (s *PublishedStorageSuite) TestFilelist(c *C) {
func (s *PublishedStorageSuite) TestRemove(c *C) {
dir := c.MkDir()
- err := ioutil.WriteFile(filepath.Join(dir, "a"), []byte("welcome to swift!"), 0644)
+ err := os.WriteFile(filepath.Join(dir, "a"), []byte("welcome to swift!"), 0644)
c.Assert(err, IsNil)
err = s.storage.PutFile("a/b.txt", filepath.Join(dir, "a"))
@@ -119,7 +118,7 @@ func (s *PublishedStorageSuite) TestRemoveDirs(c *C) {
c.Skip("bulk-delete not available in s3test")
dir := c.MkDir()
- err := ioutil.WriteFile(filepath.Join(dir, "a"), []byte("welcome to swift!"), 0644)
+ err := os.WriteFile(filepath.Join(dir, "a"), []byte("welcome to swift!"), 0644)
c.Assert(err, IsNil)
paths := []string{"a", "b", "c", "testa", "test/a", "test/b", "lala/a", "lala/b", "lala/c"}
@@ -146,18 +145,18 @@ func (s *PublishedStorageSuite) TestLinkFromPool(c *C) {
cs := files.NewMockChecksumStorage()
tmpFile1 := filepath.Join(c.MkDir(), "mars-invaders_1.03.deb")
- err := ioutil.WriteFile(tmpFile1, []byte("Contents"), 0644)
+ err := os.WriteFile(tmpFile1, []byte("Contents"), 0644)
c.Assert(err, IsNil)
cksum1 := utils.ChecksumInfo{MD5: "c1df1da7a1ce305a3b60af9d5733ac1d"}
tmpFile2 := filepath.Join(c.MkDir(), "mars-invaders_1.03.deb")
- err = ioutil.WriteFile(tmpFile2, []byte("Spam"), 0644)
+ err = os.WriteFile(tmpFile2, []byte("Spam"), 0644)
c.Assert(err, IsNil)
cksum2 := utils.ChecksumInfo{MD5: "e9dfd31cc505d51fc26975250750deab"}
tmpFile3 := filepath.Join(c.MkDir(), "netboot/boot.img.gz")
- os.MkdirAll(filepath.Dir(tmpFile3), 0777)
- err = ioutil.WriteFile(tmpFile3, []byte("Contents"), 0644)
+ _ = os.MkdirAll(filepath.Dir(tmpFile3), 0777)
+ err = os.WriteFile(tmpFile3, []byte("Contents"), 0644)
c.Assert(err, IsNil)
cksum3 := utils.ChecksumInfo{MD5: "c1df1da7a1ce305a3b60af9d5733ac1d"}
@@ -211,7 +210,7 @@ func (s *PublishedStorageSuite) TestLinkFromPool(c *C) {
func (s *PublishedStorageSuite) TestSymLink(c *C) {
dir := c.MkDir()
- err := ioutil.WriteFile(filepath.Join(dir, "a"), []byte("welcome to swift!"), 0644)
+ err := os.WriteFile(filepath.Join(dir, "a"), []byte("welcome to swift!"), 0644)
c.Assert(err, IsNil)
err = s.storage.PutFile("a/b.txt", filepath.Join(dir, "a"))
@@ -230,7 +229,7 @@ func (s *PublishedStorageSuite) TestSymLink(c *C) {
func (s *PublishedStorageSuite) TestFileExists(c *C) {
dir := c.MkDir()
- err := ioutil.WriteFile(filepath.Join(dir, "a"), []byte("welcome to swift!"), 0644)
+ err := os.WriteFile(filepath.Join(dir, "a"), []byte("welcome to swift!"), 0644)
c.Assert(err, IsNil)
err = s.storage.PutFile("a/b.txt", filepath.Join(dir, "a"))
diff --git a/system/Dockerfile b/system/Dockerfile
index f2435244..143569c0 100644
--- a/system/Dockerfile
+++ b/system/Dockerfile
@@ -1,14 +1,13 @@
-FROM debian:bookworm-slim
-
-RUN echo deb http://deb.debian.org/debian bookworm-backports main > /etc/apt/sources.list.d/backports.list
+FROM debian:trixie-slim
RUN apt-get update -y && apt-get install -y --no-install-recommends curl gnupg bzip2 xz-utils ca-certificates vim procps \
- golang/bookworm-backports golang-go/bookworm-backports golang-doc/bookworm-backports golang-src/bookworm-backports \
- make git python3 python3-requests-unixsocket python3-termcolor python3-swiftclient python3-boto python3-azure-storage \
+ golang golang-go golang-doc golang-src \
+ make git python3 python3-requests-unixsocket python3-termcolor python3-swiftclient python3-boto3 python3-azure-storage \
g++ python3-etcd3 python3-plyvel graphviz devscripts sudo dh-golang binutils-i686-linux-gnu binutils-aarch64-linux-gnu \
- binutils-arm-linux-gnueabihf bash-completion zip ruby3.1-dev lintian npm \
+ binutils-arm-linux-gnueabihf bash-completion zip ruby-dev lintian npm \
libc6-dev-i386-cross libc6-dev-armhf-cross libc6-dev-arm64-cross \
- gcc-i686-linux-gnu gcc-arm-linux-gnueabihf gcc-aarch64-linux-gnu && \
+ gcc-i686-linux-gnu gcc-arm-linux-gnueabihf gcc-aarch64-linux-gnu \
+ faketime && \
apt-get clean && rm -rf /var/lib/apt/lists/*
RUN useradd -m --shell /bin/bash --home-dir /var/lib/aptly aptly
diff --git a/system/files/corruptdb.go b/system/files/corruptdb.go
new file mode 100644
index 00000000..4febcbc9
--- /dev/null
+++ b/system/files/corruptdb.go
@@ -0,0 +1,42 @@
+// This utility corrupts a database by deleting matching package entries.
+// Do not use it outside system tests.
+package main
+
+import (
+ "flag"
+ "log"
+
+ "github.com/aptly-dev/aptly/database/goleveldb"
+)
+
+func main() {
+ var dbPath, prefix string
+
+ flag.StringVar(&dbPath, "db", "", "Path to DB to corrupt")
+ flag.StringVar(&prefix, "prefix", "P", "Path to DB to corrupt")
+ flag.Parse()
+
+ db, err := goleveldb.NewOpenDB(dbPath)
+ if err != nil {
+ log.Fatalf("Error opening DB %q: %s", dbPath, err)
+ }
+ defer db.Close()
+
+ keys := db.KeysByPrefix([]byte(prefix))
+ if len(keys) == 0 {
+ keys2 := db.KeysByPrefix([]byte{})
+ for _, key := range keys2 {
+ log.Printf("Have: %q", key)
+ }
+
+ log.Fatal("No keys to delete")
+ }
+
+ for _, key := range keys {
+ log.Printf("Deleting %q", key)
+
+ if err = db.Delete(key); err != nil {
+ log.Fatalf("Error deleting key: %s", err)
+ }
+ }
+}
diff --git a/system/lib.py b/system/lib.py
index 1287f81d..f7761997 100644
--- a/system/lib.py
+++ b/system/lib.py
@@ -130,6 +130,7 @@ class BaseTest(object):
sortOutput = False
debugOutput = False
EtcdServer = None
+ faketime = False
aptlyDir = ".aptly"
aptlyConfigFile = ".aptly.conf"
@@ -289,8 +290,6 @@ class BaseTest(object):
def run(self):
output = self.run_cmd(self.runCmd, self.expectedCode)
- if self.sortOutput:
- output = self.sort_lines(output)
self.output = self.output_processor(output)
def _start_process(self, command, stderr=subprocess.STDOUT, stdout=None):
@@ -313,6 +312,9 @@ class BaseTest(object):
aptly_testing_bin = Path(__file__).parent / ".." / "aptly.test"
command = [str(aptly_testing_bin), f"-test.coverprofile={Path(self.coverage_dir) / self.__class__.__name__}-{uuid4()}.out", *command[1:]]
+ if self.faketime:
+ command = ["faketime", os.environ.get("TEST_FAKETIME", "2025-01-02 03:04:05")] + command
+
environ = os.environ.copy()
environ["LC_ALL"] = "C"
environ.update(self.environmentOverride)
@@ -493,24 +495,29 @@ class BaseTest(object):
return a.decode('utf-8')
return a
- def verify_match(self, a, b, match_prepare=None, ensure_utf8=True):
+ def verify_match(self, gold, orig, match_prepare=None, ensure_utf8=True):
+ output = orig
if ensure_utf8:
- a = self.ensure_utf8(a)
- b = self.ensure_utf8(b)
+ gold = self.ensure_utf8(gold)
+ output = self.ensure_utf8(output)
if match_prepare is not None:
- a = match_prepare(a)
- b = match_prepare(b)
+ gold = match_prepare(gold)
+ output = match_prepare(output)
+
+ # sort if requested
+ if self.sortOutput:
+ gold = self.sort_lines(gold)
+ output = self.sort_lines(output)
# strip trailing whitespace and newlines
- a = a.strip()
- b = b.strip()
+ gold = gold.strip()
+ output = output.strip()
- if a != b:
+ if gold != output:
diff = "".join(difflib.unified_diff(
- [l + "\n" for l in a.split("\n")], [l + "\n" for l in b.split("\n")]))
-
- raise Exception("content doesn't match:\n" + diff + "\n")
+ [l + "\n" for l in gold.split("\n")], [l + "\n" for l in output.split("\n")]))
+ raise Exception("content doesn't match:\n" + diff + "\n\nOutput:\n" + orig + "\n")
check = check_output
diff --git a/system/run.py b/system/run.py
index 599afe5f..4e73fb2d 100755
--- a/system/run.py
+++ b/system/run.py
@@ -50,6 +50,7 @@ def run(include_long_tests=False, capture_results=False, tests=None, filters=Non
if not coverage_dir:
coverage_dir = mkdtemp(suffix="aptly-coverage")
+ failed = False
for test in tests:
orig_stdout = sys.stdout
orig_stderr = sys.stderr
@@ -157,8 +158,15 @@ def run(include_long_tests=False, capture_results=False, tests=None, filters=Non
t.shutdown()
+ if failed:
+ break
+ if failed:
+ break
+
sys.stdout = orig_stdout
sys.stderr = orig_stderr
+ if failed:
+ break
if lastBase is not None:
lastBase.shutdown_class()
diff --git a/system/s3_lib.py b/system/s3_lib.py
index 4a52b9ad..6e622b2d 100644
--- a/system/s3_lib.py
+++ b/system/s3_lib.py
@@ -24,7 +24,9 @@ class S3Test(BaseTest):
s3Overrides = {}
def fixture_available(self):
- return super(S3Test, self).fixture_available() and s3_conn is not None
+ return super(S3Test, self).fixture_available() and \
+ 'AWS_SECRET_ACCESS_KEY' in os.environ and 'AWS_ACCESS_KEY_ID' in os.environ and \
+ os.environ['AWS_SECRET_ACCESS_KEY'] != "" and os.environ['AWS_ACCESS_KEY_ID'] != ""
def prepare(self):
self.bucket_name = "aptly-sys-test-" + str(uuid.uuid1())
diff --git a/system/t04_mirror/create.py b/system/t04_mirror/create.py
index a2cdbf74..351bb20e 100644
--- a/system/t04_mirror/create.py
+++ b/system/t04_mirror/create.py
@@ -416,6 +416,7 @@ class CreateMirror31Test(BaseTest):
runCmd = "aptly mirror create --keyring=aptlytest-gpg1.gpg mirror11 http://repo.aptly.info/system-tests/archive.debian.org/debian-archive/debian/ stretch"
configOverride = {"gpgProvider": "internal", "max-tries": 1}
fixtureGpg = True
+ faketime = True
def outputMatchPrepare(self, s):
return re.sub(r'Signature made .* using', '', s)
diff --git a/system/t06_publish/PublishSnapshot38Test_gold b/system/t06_publish/PublishSnapshot38Test_gold
index 8b9bb3cb..64d9fe57 100644
--- a/system/t06_publish/PublishSnapshot38Test_gold
+++ b/system/t06_publish/PublishSnapshot38Test_gold
@@ -12,3 +12,4 @@ Now you can add following line to apt sources:
Don't forget to add your GPG key to apt with apt-key.
You can also use `aptly serve` to publish your repositories over HTTP quickly.
+
diff --git a/system/t06_publish/S3Publish1Test_gold b/system/t06_publish/S3Publish1Test_gold
index b65701eb..33690b03 100644
--- a/system/t06_publish/S3Publish1Test_gold
+++ b/system/t06_publish/S3Publish1Test_gold
@@ -1,8 +1,26 @@
Loading packages...
Generating metadata files and linking package files...
+DBG S3: LinkFromPool 'pool/main/b/boost-defaults/libboost-program-options-dev_1.49.0.1_i386.deb'
+DBG S3: LinkFromPool 'pool/main/p/pyspi/pyspi-0.6.1-1.3.stripped.dsc'
+DBG S3: LinkFromPool 'pool/main/p/pyspi/pyspi_0.6.1-1.3.diff.gz'
+DBG S3: LinkFromPool 'pool/main/p/pyspi/pyspi_0.6.1.orig.tar.gz'
+DBG S3: LinkFromPool 'pool/main/p/pyspi/pyspi_0.6.1-1.3.dsc'
Finalizing metadata files...
+DBG S3: PutFile 'dists/maverick/main/binary-i386/Packages'
+DBG S3: PutFile 'dists/maverick/main/binary-i386/Packages.gz'
+DBG S3: PutFile 'dists/maverick/main/binary-i386/Packages.bz2'
+DBG S3: PutFile 'dists/maverick/main/source/Sources'
+DBG S3: PutFile 'dists/maverick/main/source/Sources.gz'
+DBG S3: PutFile 'dists/maverick/main/source/Sources.bz2'
+DBG S3: PutFile 'dists/maverick/main/Contents-i386.gz'
+DBG S3: PutFile 'dists/maverick/main/binary-i386/Release'
+DBG S3: PutFile 'dists/maverick/main/source/Release'
+DBG S3: PutFile 'dists/maverick/Contents-i386.gz'
+DBG S3: PutFile 'dists/maverick/Release'
Signing file 'Release' with gpg, please enter your passphrase when prompted:
+DBG S3: PutFile 'dists/maverick/Release.gpg'
Clearsigning file 'Release' with gpg, please enter your passphrase when prompted:
+DBG S3: PutFile 'dists/maverick/InRelease'
Local repo local-repo has been successfully published.
Now you can add following line to apt sources:
diff --git a/system/t06_publish/S3Publish2Test_gold b/system/t06_publish/S3Publish2Test_gold
index cd68115c..e4fcd5cc 100644
--- a/system/t06_publish/S3Publish2Test_gold
+++ b/system/t06_publish/S3Publish2Test_gold
@@ -1,9 +1,52 @@
Loading packages...
Generating metadata files and linking package files...
Finalizing metadata files...
+DBG S3: PutFile 'dists/maverick/main/binary-i386/Packages.tmp'
+DBG S3: PutFile 'dists/maverick/main/binary-i386/Packages.tmp.gz'
+DBG S3: PutFile 'dists/maverick/main/binary-i386/Packages.tmp.bz2'
+DBG S3: PutFile 'dists/maverick/main/source/Sources.tmp'
+DBG S3: PutFile 'dists/maverick/main/source/Sources.tmp.gz'
+DBG S3: PutFile 'dists/maverick/main/source/Sources.tmp.bz2'
+DBG S3: PutFile 'dists/maverick/main/Contents-i386.tmp.gz'
+DBG S3: PutFile 'dists/maverick/main/binary-i386/Release.tmp'
+DBG S3: PutFile 'dists/maverick/main/source/Release.tmp'
+DBG S3: PutFile 'dists/maverick/Contents-i386.tmp.gz'
+DBG S3: PutFile 'dists/maverick/Release.tmp'
Signing file 'Release' with gpg, please enter your passphrase when prompted:
+DBG S3: PutFile 'dists/maverick/Release.tmp.gpg'
Clearsigning file 'Release' with gpg, please enter your passphrase when prompted:
+DBG S3: PutFile 'dists/maverick/InRelease.tmp'
+DBG S3: RenameFile dists/maverick/main/binary-i386/Packages.tmp -> dists/maverick/main/binary-i386/Packages
+DBG S3: Remove 'dists/maverick/main/binary-i386/Packages.tmp'
+DBG S3: RenameFile dists/maverick/main/binary-i386/Packages.tmp.gz -> dists/maverick/main/binary-i386/Packages.gz
+DBG S3: Remove 'dists/maverick/main/binary-i386/Packages.tmp.gz'
+DBG S3: RenameFile dists/maverick/main/binary-i386/Packages.tmp.bz2 -> dists/maverick/main/binary-i386/Packages.bz2
+DBG S3: Remove 'dists/maverick/main/binary-i386/Packages.tmp.bz2'
+DBG S3: RenameFile dists/maverick/main/Contents-i386.tmp.gz -> dists/maverick/main/Contents-i386.gz
+DBG S3: Remove 'dists/maverick/main/Contents-i386.tmp.gz'
+DBG S3: RenameFile dists/maverick/main/binary-i386/Release.tmp -> dists/maverick/main/binary-i386/Release
+DBG S3: Remove 'dists/maverick/main/binary-i386/Release.tmp'
+DBG S3: RenameFile dists/maverick/InRelease.tmp -> dists/maverick/InRelease
+DBG S3: Remove 'dists/maverick/InRelease.tmp'
+DBG S3: RenameFile dists/maverick/main/source/Sources.tmp -> dists/maverick/main/source/Sources
+DBG S3: Remove 'dists/maverick/main/source/Sources.tmp'
+DBG S3: RenameFile dists/maverick/main/source/Sources.tmp.gz -> dists/maverick/main/source/Sources.gz
+DBG S3: Remove 'dists/maverick/main/source/Sources.tmp.gz'
+DBG S3: RenameFile dists/maverick/main/source/Sources.tmp.bz2 -> dists/maverick/main/source/Sources.bz2
+DBG S3: Remove 'dists/maverick/main/source/Sources.tmp.bz2'
+DBG S3: RenameFile dists/maverick/main/source/Release.tmp -> dists/maverick/main/source/Release
+DBG S3: Remove 'dists/maverick/main/source/Release.tmp'
+DBG S3: RenameFile dists/maverick/Contents-i386.tmp.gz -> dists/maverick/Contents-i386.gz
+DBG S3: Remove 'dists/maverick/Contents-i386.tmp.gz'
+DBG S3: RenameFile dists/maverick/Release.tmp -> dists/maverick/Release
+DBG S3: Remove 'dists/maverick/Release.tmp'
+DBG S3: RenameFile dists/maverick/Release.tmp.gpg -> dists/maverick/Release.gpg
+DBG S3: Remove 'dists/maverick/Release.tmp.gpg'
Cleaning up published repository s3:test1:./maverick...
Cleaning up component 'main'...
+DBG S3: Remove 'pool/main/p/pyspi/pyspi-0.6.1-1.3.stripped.dsc'
+DBG S3: Remove 'pool/main/p/pyspi/pyspi_0.6.1-1.3.diff.gz'
+DBG S3: Remove 'pool/main/p/pyspi/pyspi_0.6.1-1.3.dsc'
+DBG S3: Remove 'pool/main/p/pyspi/pyspi_0.6.1.orig.tar.gz'
Published local repository s3:test1:./maverick [i386, source] publishes {main: [local-repo]} has been updated successfully.
diff --git a/system/t06_publish/S3Publish3Test_gold b/system/t06_publish/S3Publish3Test_gold
index 348fbe81..b8e67b68 100644
--- a/system/t06_publish/S3Publish3Test_gold
+++ b/system/t06_publish/S3Publish3Test_gold
@@ -1,9 +1,58 @@
Loading packages...
Generating metadata files and linking package files...
Finalizing metadata files...
+DBG S3: PutFile 'dists/maverick/main/binary-i386/Release.tmp'
+DBG S3: PutFile 'dists/maverick/Contents-amd64.tmp.gz'
+DBG S3: PutFile 'dists/maverick/Contents-i386.tmp.gz'
+DBG S3: PutFile 'dists/maverick/main/binary-amd64/Packages.tmp'
+DBG S3: PutFile 'dists/maverick/main/binary-amd64/Packages.tmp.gz'
+DBG S3: PutFile 'dists/maverick/main/binary-amd64/Packages.tmp.bz2'
+DBG S3: PutFile 'dists/maverick/main/binary-i386/Packages.tmp'
+DBG S3: PutFile 'dists/maverick/main/binary-i386/Packages.tmp.gz'
+DBG S3: PutFile 'dists/maverick/main/binary-i386/Packages.tmp.bz2'
+DBG S3: PutFile 'dists/maverick/main/Contents-amd64.tmp.gz'
+DBG S3: PutFile 'dists/maverick/main/Contents-i386.tmp.gz'
+DBG S3: PutFile 'dists/maverick/main/binary-amd64/Release.tmp'
+DBG S3: PutFile 'dists/maverick/Release.tmp'
Signing file 'Release' with gpg, please enter your passphrase when prompted:
+DBG S3: PutFile 'dists/maverick/Release.tmp.gpg'
Clearsigning file 'Release' with gpg, please enter your passphrase when prompted:
+DBG S3: PutFile 'dists/maverick/InRelease.tmp'
+DBG S3: RenameFile dists/maverick/main/Contents-amd64.tmp.gz -> dists/maverick/main/Contents-amd64.gz
+DBG S3: Remove 'dists/maverick/main/Contents-amd64.tmp.gz'
+DBG S3: RenameFile dists/maverick/main/binary-i386/Release.tmp -> dists/maverick/main/binary-i386/Release
+DBG S3: Remove 'dists/maverick/main/binary-i386/Release.tmp'
+DBG S3: RenameFile dists/maverick/main/Contents-i386.tmp.gz -> dists/maverick/main/Contents-i386.gz
+DBG S3: Remove 'dists/maverick/main/Contents-i386.tmp.gz'
+DBG S3: RenameFile dists/maverick/main/binary-amd64/Release.tmp -> dists/maverick/main/binary-amd64/Release
+DBG S3: Remove 'dists/maverick/main/binary-amd64/Release.tmp'
+DBG S3: RenameFile dists/maverick/Release.tmp -> dists/maverick/Release
+DBG S3: Remove 'dists/maverick/Release.tmp'
+DBG S3: RenameFile dists/maverick/InRelease.tmp -> dists/maverick/InRelease
+DBG S3: Remove 'dists/maverick/InRelease.tmp'
+DBG S3: RenameFile dists/maverick/main/binary-amd64/Packages.tmp -> dists/maverick/main/binary-amd64/Packages
+DBG S3: Remove 'dists/maverick/main/binary-amd64/Packages.tmp'
+DBG S3: RenameFile dists/maverick/main/binary-amd64/Packages.tmp.bz2 -> dists/maverick/main/binary-amd64/Packages.bz2
+DBG S3: Remove 'dists/maverick/main/binary-amd64/Packages.tmp.bz2'
+DBG S3: RenameFile dists/maverick/main/binary-i386/Packages.tmp.bz2 -> dists/maverick/main/binary-i386/Packages.bz2
+DBG S3: Remove 'dists/maverick/main/binary-i386/Packages.tmp.bz2'
+DBG S3: RenameFile dists/maverick/main/binary-i386/Packages.tmp -> dists/maverick/main/binary-i386/Packages
+DBG S3: Remove 'dists/maverick/main/binary-i386/Packages.tmp'
+DBG S3: RenameFile dists/maverick/main/binary-i386/Packages.tmp.gz -> dists/maverick/main/binary-i386/Packages.gz
+DBG S3: Remove 'dists/maverick/main/binary-i386/Packages.tmp.gz'
+DBG S3: RenameFile dists/maverick/Release.tmp.gpg -> dists/maverick/Release.gpg
+DBG S3: Remove 'dists/maverick/Release.tmp.gpg'
+DBG S3: RenameFile dists/maverick/Contents-amd64.tmp.gz -> dists/maverick/Contents-amd64.gz
+DBG S3: Remove 'dists/maverick/Contents-amd64.tmp.gz'
+DBG S3: RenameFile dists/maverick/Contents-i386.tmp.gz -> dists/maverick/Contents-i386.gz
+DBG S3: Remove 'dists/maverick/Contents-i386.tmp.gz'
+DBG S3: RenameFile dists/maverick/main/binary-amd64/Packages.tmp.gz -> dists/maverick/main/binary-amd64/Packages.gz
+DBG S3: Remove 'dists/maverick/main/binary-amd64/Packages.tmp.gz'
Cleaning up published repository s3:test1:./maverick...
Cleaning up component 'main'...
+DBG S3: Remove 'pool/main/g/gnuplot/gnuplot-doc_4.6.1-1~maverick2_all.deb'
+DBG S3: Remove 'pool/main/g/gnuplot/gnuplot-nox_4.6.1-1~maverick2_amd64.deb'
+DBG S3: Remove 'pool/main/g/gnuplot/gnuplot-nox_4.6.1-1~maverick2_i386.deb'
+DBG S3: Remove 'pool/main/g/gnuplot/gnuplot_4.6.1-1~maverick2_all.deb'
Published snapshot repository s3:test1:./maverick (origin: LP-PPA-gladky-anton-gnuplot) [amd64, i386] publishes {main: [snap3]: Pulled into 'snap2' with 'snap1' as source, pull request was: 'gnuplot-x11'} has been successfully switched to new source.
diff --git a/system/t06_publish/S3Publish5Test_gold b/system/t06_publish/S3Publish5Test_gold
index 0b8f635f..a1b531e5 100644
--- a/system/t06_publish/S3Publish5Test_gold
+++ b/system/t06_publish/S3Publish5Test_gold
@@ -1,4 +1,10 @@
+DBG S3: RemoveDirs 'dists/sq2'
Cleaning up published repository s3:test1:./sq2...
Cleaning up component 'main'...
+DBG S3: Remove 'pool/main/b/boost-defaults/libboost-program-options-dev_1.62.0.1_i386.deb'
+DBG S3: Remove 'pool/main/p/pyspi/pyspi-0.6.1-1.3.stripped.dsc'
+DBG S3: Remove 'pool/main/p/pyspi/pyspi_0.6.1-1.3.diff.gz'
+DBG S3: Remove 'pool/main/p/pyspi/pyspi_0.6.1-1.3.dsc'
+DBG S3: Remove 'pool/main/p/pyspi/pyspi_0.6.1.orig.tar.gz'
Published repository has been removed successfully.
diff --git a/system/t06_publish/S3Publish6Test_gold b/system/t06_publish/S3Publish6Test_gold
index cd68115c..cfa321d4 100644
--- a/system/t06_publish/S3Publish6Test_gold
+++ b/system/t06_publish/S3Publish6Test_gold
@@ -1,9 +1,52 @@
Loading packages...
Generating metadata files and linking package files...
Finalizing metadata files...
+DBG S3: PutFile 'dists/maverick/main/Contents-i386.tmp.gz'
+DBG S3: PutFile 'dists/maverick/main/binary-i386/Release.tmp'
+DBG S3: PutFile 'dists/maverick/main/source/Release.tmp'
+DBG S3: PutFile 'dists/maverick/Contents-i386.tmp.gz'
+DBG S3: PutFile 'dists/maverick/main/binary-i386/Packages.tmp'
+DBG S3: PutFile 'dists/maverick/main/binary-i386/Packages.tmp.gz'
+DBG S3: PutFile 'dists/maverick/main/binary-i386/Packages.tmp.bz2'
+DBG S3: PutFile 'dists/maverick/main/source/Sources.tmp'
+DBG S3: PutFile 'dists/maverick/main/source/Sources.tmp.gz'
+DBG S3: PutFile 'dists/maverick/main/source/Sources.tmp.bz2'
+DBG S3: PutFile 'dists/maverick/Release.tmp'
Signing file 'Release' with gpg, please enter your passphrase when prompted:
+DBG S3: PutFile 'dists/maverick/Release.tmp.gpg'
Clearsigning file 'Release' with gpg, please enter your passphrase when prompted:
+DBG S3: PutFile 'dists/maverick/InRelease.tmp'
+DBG S3: RenameFile dists/maverick/InRelease.tmp -> dists/maverick/InRelease
+DBG S3: Remove 'dists/maverick/InRelease.tmp'
+DBG S3: RenameFile dists/maverick/main/source/Release.tmp -> dists/maverick/main/source/Release
+DBG S3: Remove 'dists/maverick/main/source/Release.tmp'
+DBG S3: RenameFile dists/maverick/Contents-i386.tmp.gz -> dists/maverick/Contents-i386.gz
+DBG S3: Remove 'dists/maverick/Contents-i386.tmp.gz'
+DBG S3: RenameFile dists/maverick/main/binary-i386/Packages.tmp -> dists/maverick/main/binary-i386/Packages
+DBG S3: Remove 'dists/maverick/main/binary-i386/Packages.tmp'
+DBG S3: RenameFile dists/maverick/main/binary-i386/Packages.tmp.bz2 -> dists/maverick/main/binary-i386/Packages.bz2
+DBG S3: Remove 'dists/maverick/main/binary-i386/Packages.tmp.bz2'
+DBG S3: RenameFile dists/maverick/Release.tmp -> dists/maverick/Release
+DBG S3: Remove 'dists/maverick/Release.tmp'
+DBG S3: RenameFile dists/maverick/main/source/Sources.tmp.bz2 -> dists/maverick/main/source/Sources.bz2
+DBG S3: Remove 'dists/maverick/main/source/Sources.tmp.bz2'
+DBG S3: RenameFile dists/maverick/Release.tmp.gpg -> dists/maverick/Release.gpg
+DBG S3: Remove 'dists/maverick/Release.tmp.gpg'
+DBG S3: RenameFile dists/maverick/main/Contents-i386.tmp.gz -> dists/maverick/main/Contents-i386.gz
+DBG S3: Remove 'dists/maverick/main/Contents-i386.tmp.gz'
+DBG S3: RenameFile dists/maverick/main/binary-i386/Release.tmp -> dists/maverick/main/binary-i386/Release
+DBG S3: Remove 'dists/maverick/main/binary-i386/Release.tmp'
+DBG S3: RenameFile dists/maverick/main/binary-i386/Packages.tmp.gz -> dists/maverick/main/binary-i386/Packages.gz
+DBG S3: Remove 'dists/maverick/main/binary-i386/Packages.tmp.gz'
+DBG S3: RenameFile dists/maverick/main/source/Sources.tmp -> dists/maverick/main/source/Sources
+DBG S3: Remove 'dists/maverick/main/source/Sources.tmp'
+DBG S3: RenameFile dists/maverick/main/source/Sources.tmp.gz -> dists/maverick/main/source/Sources.gz
+DBG S3: Remove 'dists/maverick/main/source/Sources.tmp.gz'
Cleaning up published repository s3:test1:./maverick...
Cleaning up component 'main'...
+DBG S3: Remove 'pool/main/p/pyspi/pyspi-0.6.1-1.3.stripped.dsc'
+DBG S3: Remove 'pool/main/p/pyspi/pyspi_0.6.1-1.3.diff.gz'
+DBG S3: Remove 'pool/main/p/pyspi/pyspi_0.6.1-1.3.dsc'
+DBG S3: Remove 'pool/main/p/pyspi/pyspi_0.6.1.orig.tar.gz'
Published local repository s3:test1:./maverick [i386, source] publishes {main: [local-repo]} has been updated successfully.
diff --git a/system/t06_publish/s3.py b/system/t06_publish/s3.py
index c818023a..f57adb06 100644
--- a/system/t06_publish/s3.py
+++ b/system/t06_publish/s3.py
@@ -14,6 +14,7 @@ class S3Publish1Test(S3Test):
"aptly repo add local-repo ${files}",
"aptly repo remove local-repo libboost-program-options-dev_1.62.0.1_i386",
]
+ sortOutput = True
runCmd = "aptly publish repo -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec local-repo s3:test1:"
def check(self):
@@ -53,6 +54,7 @@ class S3Publish2Test(S3Test):
"aptly publish repo -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec local-repo s3:test1:",
"aptly repo remove local-repo pyspi"
]
+ sortOutput = True
runCmd = "aptly publish update -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec maverick s3:test1:"
def check(self):
@@ -93,6 +95,7 @@ class S3Publish3Test(S3Test):
"aptly snapshot pull -no-deps -architectures=i386,amd64 snap2 snap1 snap3 gnuplot-x11",
"aptly publish snapshot -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=maverick snap1 s3:test1:",
]
+ sortOutput = True
runCmd = "aptly publish switch -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec maverick s3:test1: snap3"
def check(self):
@@ -129,6 +132,7 @@ class S3Publish4Test(S3Test):
"aptly publish repo -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=xyz local-repo s3:test1:",
"aptly publish repo -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec local-repo s3:test1:prefix",
]
+ sortOutput = True
runCmd = "aptly publish list"
@@ -144,6 +148,7 @@ class S3Publish5Test(S3Test):
"aptly publish repo -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=sq1 local1 s3:test1:",
"aptly publish repo -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=sq2 local2 s3:test1:",
]
+ sortOutput = True
runCmd = "aptly publish drop sq2 s3:test1:"
def check(self):
@@ -172,6 +177,7 @@ class S3Publish6Test(S3Test):
"aptly publish repo -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec local-repo s3:test1:",
"aptly repo remove local-repo pyspi"
]
+ sortOutput = True
runCmd = "aptly publish update -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec maverick s3:test1:"
def check(self):
diff --git a/system/t06_publish/snapshot.py b/system/t06_publish/snapshot.py
index 2ba245b4..fb877bb7 100644
--- a/system/t06_publish/snapshot.py
+++ b/system/t06_publish/snapshot.py
@@ -22,6 +22,7 @@ class PublishSnapshot1Test(BaseTest):
fixtureCmds = [
"aptly snapshot create snap1 from mirror gnuplot-maverick",
]
+ sortOutput = True
runCmd = "aptly publish snapshot -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec snap1"
gold_processor = BaseTest.expand_environ
@@ -131,6 +132,7 @@ class PublishSnapshot2Test(BaseTest):
fixtureCmds = [
"aptly snapshot create snap2 from mirror gnuplot-maverick",
]
+ sortOutput = True
runCmd = "aptly publish snapshot -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=squeeze snap2"
gold_processor = BaseTest.expand_environ
@@ -168,6 +170,7 @@ class PublishSnapshot3Test(BaseTest):
fixtureCmds = [
"aptly snapshot create snap3 from mirror gnuplot-maverick",
]
+ sortOutput = True
runCmd = "aptly publish snapshot -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=squeeze -component=contrib snap3"
gold_processor = BaseTest.expand_environ
@@ -208,6 +211,7 @@ class PublishSnapshot4Test(BaseTest):
fixtureCmds = [
"aptly snapshot create snap4 from mirror gnuplot-maverick",
]
+ sortOutput = True
runCmd = "aptly -architectures=i386 publish snapshot -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=squeeze snap4"
gold_processor = BaseTest.expand_environ
@@ -247,6 +251,7 @@ class PublishSnapshot5Test(BaseTest):
fixtureCmds = [
"aptly snapshot create snap5 from mirror gnuplot-maverick",
]
+ sortOutput = True
runCmd = "aptly publish snapshot -acquire-by-hash -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=squeeze snap5 ppa/smira"
gold_processor = BaseTest.expand_environ
@@ -294,6 +299,7 @@ class PublishSnapshot6Test(BaseTest):
"aptly snapshot create snap2 from mirror wheezy-main",
"aptly snapshot merge snap6 snap2 snap"
]
+ sortOutput = True
runCmd = "aptly publish snapshot snap6"
expectedCode = 1
@@ -308,6 +314,7 @@ class PublishSnapshot7Test(BaseTest):
"aptly snapshot create snap7 from mirror gnuplot-maverick",
"aptly publish snapshot -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec snap7",
]
+ sortOutput = True
runCmd = "aptly publish snapshot snap7"
expectedCode = 1
@@ -322,6 +329,7 @@ class PublishSnapshot8Test(BaseTest):
"aptly snapshot create snap8 from mirror gnuplot-maverick",
"aptly publish snapshot -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec snap8 ./ppa",
]
+ sortOutput = True
runCmd = "aptly publish snapshot snap8 ppa"
expectedCode = 1
@@ -334,6 +342,7 @@ class PublishSnapshot9Test(BaseTest):
fixtureCmds = [
"aptly snapshot create snap9 from mirror gnuplot-maverick",
]
+ sortOutput = True
runCmd = "aptly publish snapshot snap9 ppa/dists/la"
expectedCode = 1
@@ -346,6 +355,7 @@ class PublishSnapshot10Test(BaseTest):
fixtureCmds = [
"aptly snapshot create snap10 from mirror gnuplot-maverick",
]
+ sortOutput = True
runCmd = "aptly publish snapshot snap10 ppa/pool/la"
expectedCode = 1
@@ -358,6 +368,7 @@ class PublishSnapshot11Test(BaseTest):
fixtureCmds = [
"aptly snapshot create snap11 from mirror gnuplot-maverick",
]
+ sortOutput = True
runCmd = "aptly publish snapshot snap11 ../la"
expectedCode = 1
@@ -367,6 +378,7 @@ class PublishSnapshot12Test(BaseTest):
publish snapshot: no snapshot
"""
fixtureDB = True
+ sortOutput = True
runCmd = "aptly publish snapshot snap12"
expectedCode = 1
@@ -465,6 +477,7 @@ class PublishSnapshot16Test(BaseTest):
fixtureCmds = [
"aptly snapshot create snap16 from mirror gnuplot-maverick-src",
]
+ sortOutput = True
runCmd = "aptly publish snapshot -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec snap16"
gold_processor = BaseTest.expand_environ
@@ -524,6 +537,7 @@ class PublishSnapshot17Test(BaseTest):
"aptly repo add local-repo ${files}",
"aptly snapshot create snap17 from repo local-repo",
]
+ sortOutput = True
runCmd = "aptly publish snapshot -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=maverick snap17"
gold_processor = BaseTest.expand_environ
@@ -578,6 +592,7 @@ class PublishSnapshot18Test(BaseTest):
"aptly repo add repo1 ${files}",
"aptly snapshot create snap1 from repo repo1",
]
+ sortOutput = True
runCmd = "aptly publish snapshot snap1"
expectedCode = 1
@@ -682,6 +697,7 @@ class PublishSnapshot24Test(BaseTest):
fixtureCmds = [
"aptly snapshot create snap24 from mirror gnuplot-maverick",
]
+ sortOutput = True
runCmd = "aptly publish snapshot -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=squeeze -origin=aptly24 -notautomatic=yes -butautomaticupgrades=yes snap24"
gold_processor = BaseTest.expand_environ
@@ -701,6 +717,7 @@ class PublishSnapshot25Test(BaseTest):
fixtureCmds = [
"aptly snapshot create snap25 empty",
]
+ sortOutput = True
runCmd = "aptly publish snapshot -architectures=amd64 --distribution=maverick -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec snap25"
gold_processor = BaseTest.expand_environ
@@ -736,6 +753,7 @@ class PublishSnapshot26Test(BaseTest):
"aptly repo add local-repo ${files}",
"aptly snapshot create snap26.2 from repo local-repo",
]
+ sortOutput = True
runCmd = "aptly publish snapshot -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -component=main,contrib snap26.1 snap26.2"
gold_processor = BaseTest.expand_environ
@@ -864,6 +882,7 @@ class PublishSnapshot27Test(BaseTest):
"aptly repo add local-repo ${files}",
"aptly snapshot create snap27.2 from repo local-repo",
]
+ sortOutput = True
runCmd = "aptly publish snapshot -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -component=, snap27.1 snap27.2"
gold_processor = BaseTest.expand_environ
@@ -879,6 +898,7 @@ class PublishSnapshot28Test(BaseTest):
"aptly repo add local-repo ${files}",
"aptly snapshot create snap28.2 from repo local-repo",
]
+ sortOutput = True
runCmd = "aptly publish snapshot -component=, snap28.1 snap28.2"
expectedCode = 1
@@ -891,6 +911,7 @@ class PublishSnapshot29Test(BaseTest):
"aptly snapshot create snap29.1 empty",
"aptly snapshot create snap29.2 empty",
]
+ sortOutput = True
runCmd = "aptly publish snapshot -component=b,b snap29.1 snap29.2"
expectedCode = 1
@@ -906,6 +927,7 @@ class PublishSnapshot30Test(BaseTest):
"aptly repo add local-repo ${files}",
"aptly snapshot create snap30.2 from repo local-repo",
]
+ sortOutput = True
runCmd = "aptly publish snapshot -component=main,contrib snap30.1 snap30.2"
expectedCode = 1
@@ -917,6 +939,7 @@ class PublishSnapshot31Test(BaseTest):
fixtureCmds = [
"aptly snapshot create snap31.1 empty",
]
+ sortOutput = True
runCmd = "aptly publish snapshot -component=main,contrib snap31.1 snap31.2"
expectedCode = 1
@@ -928,6 +951,7 @@ class PublishSnapshot32Test(BaseTest):
fixtureCmds = [
"aptly snapshot create snap32.1 empty",
]
+ sortOutput = True
runCmd = "aptly publish snapshot -component=main,contrib snap32.1"
expectedCode = 2
@@ -948,6 +972,7 @@ class PublishSnapshot33Test(BaseTest):
"aptly snapshot create snap2 from repo local-repo2",
"aptly publish snapshot -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=maverick snap1",
]
+ sortOutput = True
runCmd = "aptly publish snapshot -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=squeeze snap2"
expectedCode = 1
gold_processor = BaseTest.expand_environ
@@ -966,6 +991,7 @@ class PublishSnapshot34Test(BaseTest):
"aptly snapshot create snap2 from repo local-repo2",
"aptly publish snapshot -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=maverick snap1",
]
+ sortOutput = True
runCmd = "aptly publish snapshot -force-overwrite -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=squeeze snap2"
gold_processor = BaseTest.expand_environ
@@ -987,6 +1013,7 @@ class PublishSnapshot35Test(BaseTest):
"aptly mirror update -keyring=aptlytest.gpg stretch",
"aptly snapshot create stretch from mirror stretch",
]
+ sortOutput = True
runCmd = "aptly publish snapshot -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec stretch"
gold_processor = BaseTest.expand_environ
@@ -1118,6 +1145,7 @@ class PublishSnapshot36Test(BaseTest):
fixtureCmds = [
"aptly snapshot create snap36 from mirror gnuplot-maverick",
]
+ sortOutput = True
runCmd = "aptly publish snapshot -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -skip-contents snap36"
gold_processor = BaseTest.expand_environ
@@ -1145,6 +1173,7 @@ class PublishSnapshot37Test(BaseTest):
"aptly mirror update -keyring=aptlytest.gpg stretch",
"aptly snapshot create stretch from mirror stretch",
]
+ sortOutput = True
runCmd = "aptly publish snapshot -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec stretch"
gold_processor = BaseTest.expand_environ
@@ -1160,8 +1189,10 @@ class PublishSnapshot38Test(BaseTest):
"aptly mirror update -keyring=aptlytest.gpg stretch",
"aptly snapshot create stretch from mirror stretch",
]
+ sortOutput = True
runCmd = "aptly publish snapshot -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec stretch"
gold_processor = BaseTest.expand_environ
+ sortOutput = True
def check(self):
super(PublishSnapshot38Test, self).check()
@@ -1187,6 +1218,7 @@ class PublishSnapshot39Test(BaseTest):
fixtureCmds = [
"aptly snapshot create snap1 from mirror gnuplot-maverick",
]
+ sortOutput = True
runCmd = "aptly publish snapshot -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -suite=stable snap1"
gold_processor = BaseTest.expand_environ
@@ -1222,6 +1254,7 @@ class PublishSnapshot40Test(BaseTest):
fixtureCmds = [
"aptly snapshot create snap40 from mirror gnuplot-maverick",
]
+ sortOutput = True
runCmd = "aptly publish snapshot -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -skip-bz2 snap40"
gold_processor = BaseTest.expand_environ
@@ -1254,6 +1287,7 @@ class PublishSnapshot41Test(BaseTest):
"aptly mirror update -keyring=aptlytest.gpg ps41",
"aptly snapshot create snap41 from mirror ps41",
]
+ sortOutput = True
runCmd = "aptly publish snapshot -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec snap41"
gold_processor = BaseTest.expand_environ
@@ -1375,6 +1409,7 @@ class PublishSnapshot42Test(BaseTest):
fixtureCmds = [
"aptly snapshot create snap1 from mirror gnuplot-maverick",
]
+ sortOutput = True
runCmd = "aptly publish snapshot -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -multi-dist snap1"
gold_processor = BaseTest.expand_environ
diff --git a/system/t07_serve/Serve1Test_http b/system/t07_serve/Serve1Test_http
index 0b6d4468..3d380ca5 100644
--- a/system/t07_serve/Serve1Test_http
+++ b/system/t07_serve/Serve1Test_http
@@ -1,6 +1,8 @@
+
debian/ dists/ multi/ pool/ +diff --git a/system/t08_db/RecoverDB1Test_gold b/system/t08_db/RecoverDB1Test_gold index f5e3851c..e7bd1d46 100644 --- a/system/t08_db/RecoverDB1Test_gold +++ b/system/t08_db/RecoverDB1Test_gold @@ -1 +1,2 @@ Recovering database... +Checking database integrity... diff --git a/system/t08_db/RecoverDB2Test_gold b/system/t08_db/RecoverDB2Test_gold index f5e3851c..e7bd1d46 100644 --- a/system/t08_db/RecoverDB2Test_gold +++ b/system/t08_db/RecoverDB2Test_gold @@ -1 +1,2 @@ Recovering database... +Checking database integrity... diff --git a/system/t08_db/RecoverDB3Test_cleanup b/system/t08_db/RecoverDB3Test_cleanup new file mode 100644 index 00000000..35f41ed4 --- /dev/null +++ b/system/t08_db/RecoverDB3Test_cleanup @@ -0,0 +1,8 @@ +Loading mirrors, local repos, snapshots and published repos... +Loading list of all packages... +Deleting unreferenced packages (0)... +Building list of files referenced by packages... +Building list of files in package pool... +Deleting unreferenced files (1)... +Disk space freed: 12.18 KiB... +Compacting database... diff --git a/system/t08_db/RecoverDB3Test_gold b/system/t08_db/RecoverDB3Test_gold new file mode 100644 index 00000000..11c39fb7 --- /dev/null +++ b/system/t08_db/RecoverDB3Test_gold @@ -0,0 +1,3 @@ +Recovering database... +Checking database integrity... +Removing dangling database reference "Pamd64 hardlink 0.2.1 daf8fcecbf8210ad" diff --git a/system/t08_db/recover.py b/system/t08_db/recover.py index c78c7798..2efb2b88 100644 --- a/system/t08_db/recover.py +++ b/system/t08_db/recover.py @@ -1,3 +1,5 @@ +import os + from lib import BaseTest @@ -23,3 +25,27 @@ class RecoverDB2Test(BaseTest): def check(self): self.check_output() self.check_cmd_output("aptly mirror list", "mirror_list") + + +class RecoverDB3Test(BaseTest): + """ + recover db: dangling reference + """ + fixtureDB = True + fixtureCmds = [ + "aptly repo create db3test", + "aptly repo add db3test changes/hardlink_0.2.1_amd64.deb", + ] + + runCmd = "aptly db recover" + + def prepare(self): + super(RecoverDB3Test, self).prepare() + + self.run_cmd(["go", "run", "files/corruptdb.go", + "-db", os.path.join(os.environ["HOME"], self.aptlyDir, "db"), + "-prefix", "Pamd64 hardlink 0.2.1"]) + + def check(self): + self.check_output() + self.check_cmd_output("aptly db cleanup", "cleanup") diff --git a/system/t12_api/snapshots.py b/system/t12_api/snapshots.py index fb6ba66f..c4e2f1d6 100644 --- a/system/t12_api/snapshots.py +++ b/system/t12_api/snapshots.py @@ -355,7 +355,7 @@ class SnapshotsAPITestMerge(APITest): ) self.check_equal(resp.status_code, 400) self.check_equal( - resp.json()["error"], "At least one source snapshot is required" + resp.json()["error"], "minimum one source snapshot is required" ) self.check_equal(self.get(f"/api/snapshots/{merged_name}").status_code, 404) diff --git a/systemd/activation/files.go b/systemd/activation/files.go index 2caa0ecc..d6bd7253 100644 --- a/systemd/activation/files.go +++ b/systemd/activation/files.go @@ -29,8 +29,10 @@ const ( // Files returns all the fds passed from systemd func Files(unsetEnv bool) []*os.File { if unsetEnv { - defer os.Unsetenv("LISTEN_PID") - defer os.Unsetenv("LISTEN_FDS") + defer func() { + _ = os.Unsetenv("LISTEN_PID") + _ = os.Unsetenv("LISTEN_FDS") + }() } pid, err := strconv.Atoi(os.Getenv("LISTEN_PID")) diff --git a/task/list.go b/task/list.go index 3636850c..5b09d34c 100644 --- a/task/list.go +++ b/task/list.go @@ -31,7 +31,7 @@ func NewList() *List { wgTasks: make(map[int]*sync.WaitGroup), wg: &sync.WaitGroup{}, usedResources: NewResourcesSet(), - queue: make(chan *Task, 0), + queue: make(chan *Task), queueWg: &sync.WaitGroup{}, queueDone: make(chan bool), } @@ -123,11 +123,11 @@ func (list *List) DeleteTaskByID(ID int) (Task, error) { return *task, nil } - return *task, fmt.Errorf("Task with id %v is still in state=%d", ID, task.State) + return *task, fmt.Errorf("task with id %v is still in state=%d", ID, task.State) } } - return Task{}, fmt.Errorf("Could not find task with id %v", ID) + return Task{}, fmt.Errorf("could not find task with id %v", ID) } // GetTaskByID returns task with given id @@ -142,7 +142,7 @@ func (list *List) GetTaskByID(ID int) (Task, error) { } } - return Task{}, fmt.Errorf("Could not find task with id %v", ID) + return Task{}, fmt.Errorf("could not find task with id %v", ID) } // GetTaskOutputByID returns standard output of task with given id @@ -236,14 +236,14 @@ func (list *List) WaitForTaskByID(ID int) (Task, error) { wgTask, ok := list.wgTasks[ID] list.Unlock() if !ok { - return Task{}, fmt.Errorf("Could not find task with id %v", ID) + return Task{}, fmt.Errorf("could not find task with id %v", ID) } wgTask.Wait() return list.GetTaskByID(ID) } -// GetTaskError returns the Task error for a given id +// GetTaskErrorByID returns the Task error for a given id func (list *List) GetTaskErrorByID(ID int) (error, error) { task, err := list.GetTaskByID(ID) diff --git a/task/list_test.go b/task/list_test.go index bf5d3efc..8bce5377 100644 --- a/task/list_test.go +++ b/task/list_test.go @@ -21,7 +21,7 @@ func (s *ListSuite) TestList(c *check.C) { return nil, nil }) c.Assert(err, check.IsNil) - list.WaitForTaskByID(task.ID) + _, _ = list.WaitForTaskByID(task.ID) tasks := list.GetTasks() c.Assert(len(tasks), check.Equals, 1) @@ -38,7 +38,7 @@ func (s *ListSuite) TestList(c *check.C) { return nil, errors.New("Task failed") }) c.Assert(err, check.IsNil) - list.WaitForTaskByID(task.ID) + _, _ = list.WaitForTaskByID(task.ID) tasks = list.GetTasks() c.Assert(len(tasks), check.Equals, 2) diff --git a/task/output.go b/task/output.go index f4c5e8f7..d10da8c6 100644 --- a/task/output.go +++ b/task/output.go @@ -107,21 +107,21 @@ func (t *Output) SetBar(_ int) { // Printf does printf in a safe manner func (t *Output) Printf(msg string, a ...interface{}) { - t.WriteString(fmt.Sprintf(msg, a...)) + _, _ = t.WriteString(fmt.Sprintf(msg, a...)) } // Print does printf in a safe manner func (t *Output) Print(msg string) { - t.WriteString(msg) + _, _ = t.WriteString(msg) } // ColoredPrintf does printf in a safe manner + newline // currently are no colors supported. func (t *Output) ColoredPrintf(msg string, a ...interface{}) { - t.WriteString(fmt.Sprintf(msg+"\n", a...)) + _, _ = t.WriteString(fmt.Sprintf(msg+"\n", a...)) } // PrintfStdErr does printf but in safe manner to output func (t *Output) PrintfStdErr(msg string, a ...interface{}) { - t.WriteString(fmt.Sprintf(msg, a...)) + _, _ = t.WriteString(fmt.Sprintf(msg, a...)) } diff --git a/utils/checksum.go b/utils/checksum.go index 6e1a9515..79758ea1 100644 --- a/utils/checksum.go +++ b/utils/checksum.go @@ -17,7 +17,9 @@ func MD5ChecksumForFile(path string) (string, error) { if err != nil { return "", err } - defer file.Close() + defer func() { + _ = file.Close() + }() hash := md5.New() _, err = io.Copy(hash, file) @@ -62,7 +64,9 @@ func ChecksumsForFile(path string) (ChecksumInfo, error) { if err != nil { return ChecksumInfo{}, err } - defer file.Close() + defer func() { + _ = file.Close() + }() return ChecksumsForReader(file) } diff --git a/utils/checksum_test.go b/utils/checksum_test.go index 9e41e487..ecf5665d 100644 --- a/utils/checksum_test.go +++ b/utils/checksum_test.go @@ -14,11 +14,11 @@ var _ = Suite(&ChecksumSuite{}) func (s *ChecksumSuite) SetUpTest(c *C) { s.tempfile, _ = os.CreateTemp(c.MkDir(), "aptly-test") - s.tempfile.WriteString(testString) + _, _ = s.tempfile.WriteString(testString) } func (s *ChecksumSuite) TearDownTest(c *C) { - s.tempfile.Close() + _ = s.tempfile.Close() } func (s *ChecksumSuite) TestChecksumsForFile(c *C) { diff --git a/utils/compress.go b/utils/compress.go index a4521b7e..e194c3e1 100644 --- a/utils/compress.go +++ b/utils/compress.go @@ -18,12 +18,16 @@ func CompressFile(source *os.File, onlyGzip bool) error { if err != nil { return err } - defer gzFile.Close() + defer func() { + _ = gzFile.Close() + }() gzWriter := pgzip.NewWriter(gzFile) - defer gzWriter.Close() + defer func() { + _ = gzWriter.Close() + }() - source.Seek(0, 0) + _, _ = source.Seek(0, 0) _, err = io.Copy(gzWriter, source) if err != nil || onlyGzip { return err diff --git a/utils/compress_test.go b/utils/compress_test.go index e5b42274..f085959e 100644 --- a/utils/compress_test.go +++ b/utils/compress_test.go @@ -3,7 +3,7 @@ package utils import ( "compress/bzip2" "compress/gzip" - "io/ioutil" + "io" "os" . "gopkg.in/check.v1" @@ -19,11 +19,11 @@ const testString = "Quick brown fox jumps over black dog and runs away... Really func (s *CompressSuite) SetUpTest(c *C) { s.tempfile, _ = os.CreateTemp(c.MkDir(), "aptly-test") - s.tempfile.WriteString(testString) + _, _ = s.tempfile.WriteString(testString) } func (s *CompressSuite) TearDownTest(c *C) { - s.tempfile.Close() + _ = s.tempfile.Close() } func (s *CompressSuite) TestCompress(c *C) { @@ -36,11 +36,11 @@ func (s *CompressSuite) TestCompress(c *C) { gzReader, err := gzip.NewReader(file) c.Assert(err, IsNil) - buf, err := ioutil.ReadAll(gzReader) + buf, err := io.ReadAll(gzReader) c.Assert(err, IsNil) - gzReader.Close() - file.Close() + _ = gzReader.Close() + _ = file.Close() c.Check(string(buf), Equals, testString) @@ -52,7 +52,7 @@ func (s *CompressSuite) TestCompress(c *C) { _, err = bzReader.Read(buf) c.Assert(err, IsNil) - file.Close() + _ = file.Close() c.Check(string(buf), Equals, testString) } diff --git a/utils/config.go b/utils/config.go index da7dfcd6..4cfac039 100644 --- a/utils/config.go +++ b/utils/config.go @@ -8,7 +8,7 @@ import ( "strings" "github.com/DisposaBoy/JsonConfigReader" - "gopkg.in/yaml.v3" + yaml "gopkg.in/yaml.v3" ) // ConfigStructure is structure of main configuration @@ -65,10 +65,10 @@ type ConfigStructure struct { // nolint: maligned PackagePoolStorage PackagePoolStorage `json:"packagePoolStorage" yaml:"packagepool_storage"` } -// DBConfig +// DBConfig structure type DBConfig struct { Type string `json:"type" yaml:"type"` - DbPath string `json:"dbPath" yaml:"db_path"` + DBPath string `json:"dbPath" yaml:"db_path"` URL string `json:"url" yaml:"url"` } @@ -251,11 +251,13 @@ func LoadConfig(filename string, config *ConfigStructure) error { if err != nil { return err } - defer f.Close() + defer func() { + _ = f.Close() + }() decJSON := json.NewDecoder(JsonConfigReader.New(f)) if err = decJSON.Decode(&config); err != nil { - f.Seek(0, 0) + _, _ = f.Seek(0, 0) decYAML := yaml.NewDecoder(f) if err2 := decYAML.Decode(&config); err2 != nil { err = fmt.Errorf("invalid yaml (%s) or json (%s)", err2, err) @@ -272,7 +274,9 @@ func SaveConfig(filename string, config *ConfigStructure) error { if err != nil { return err } - defer f.Close() + defer func() { + _ = f.Close() + }() encoded, err := json.MarshalIndent(&config, "", " ") if err != nil { @@ -289,7 +293,9 @@ func SaveConfigRaw(filename string, conf []byte) error { if err != nil { return err } - defer f.Close() + defer func() { + _ = f.Close() + }() _, err = f.Write(conf) return err @@ -301,7 +307,9 @@ func SaveConfigYAML(filename string, config *ConfigStructure) error { if err != nil { return err } - defer f.Close() + defer func() { + _ = f.Close() + }() yamlData, err := yaml.Marshal(&config) if err != nil { diff --git a/utils/config_test.go b/utils/config_test.go index 66f1ad03..da6f927e 100644 --- a/utils/config_test.go +++ b/utils/config_test.go @@ -16,8 +16,8 @@ var _ = Suite(&ConfigSuite{}) func (s *ConfigSuite) TestLoadConfig(c *C) { configname := filepath.Join(c.MkDir(), "aptly.json1") f, _ := os.Create(configname) - f.WriteString(configFile) - f.Close() + _, _ = f.WriteString(configFile) + _ = f.Close() // start with empty config s.config = ConfigStructure{} @@ -62,11 +62,13 @@ func (s *ConfigSuite) TestSaveConfig(c *C) { c.Assert(err, IsNil) f, _ := os.Open(configname) - defer f.Close() + defer func() { + _ = f.Close() + }() st, _ := f.Stat() buf := make([]byte, st.Size()) - f.Read(buf) + _, _ = f.Read(buf) c.Check(string(buf), Equals, ""+ "{\n" + @@ -162,8 +164,8 @@ func (s *ConfigSuite) TestSaveConfig(c *C) { func (s *ConfigSuite) TestLoadYAMLConfig(c *C) { configname := filepath.Join(c.MkDir(), "aptly.yaml1") f, _ := os.Create(configname) - f.WriteString(configFileYAML) - f.Close() + _, _ = f.WriteString(configFileYAML) + _ = f.Close() // start with empty config s.config = ConfigStructure{} @@ -178,8 +180,8 @@ func (s *ConfigSuite) TestLoadYAMLConfig(c *C) { func (s *ConfigSuite) TestLoadYAMLErrorConfig(c *C) { configname := filepath.Join(c.MkDir(), "aptly.yaml2") f, _ := os.Create(configname) - f.WriteString(configFileYAMLError) - f.Close() + _, _ = f.WriteString(configFileYAMLError) + _ = f.Close() // start with empty config s.config = ConfigStructure{} @@ -191,8 +193,8 @@ func (s *ConfigSuite) TestLoadYAMLErrorConfig(c *C) { func (s *ConfigSuite) TestSaveYAMLConfig(c *C) { configname := filepath.Join(c.MkDir(), "aptly.yaml3") f, _ := os.Create(configname) - f.WriteString(configFileYAML) - f.Close() + _, _ = f.WriteString(configFileYAML) + _ = f.Close() // start with empty config s.config = ConfigStructure{} @@ -204,11 +206,13 @@ func (s *ConfigSuite) TestSaveYAMLConfig(c *C) { c.Assert(err, IsNil) f, _ = os.Open(configname) - defer f.Close() + defer func() { + _ = f.Close() + }() st, _ := f.Stat() buf := make([]byte, st.Size()) - f.Read(buf) + _, _ = f.Read(buf) c.Check(string(buf), Equals, configFileYAML) } @@ -225,11 +229,13 @@ func (s *ConfigSuite) TestSaveYAML2Config(c *C) { c.Assert(err, IsNil) f, _ := os.Open(configname) - defer f.Close() + defer func() { + _ = f.Close() + }() st, _ := f.Stat() buf := make([]byte, st.Size()) - f.Read(buf) + _, _ = f.Read(buf) c.Check(string(buf), Equals, "" + "root_dir: \"\"\n" + @@ -275,7 +281,7 @@ func (s *ConfigSuite) TestSaveYAML2Config(c *C) { func (s *ConfigSuite) TestLoadEmptyConfig(c *C) { configname := filepath.Join(c.MkDir(), "aptly.yaml5") f, _ := os.Create(configname) - f.Close() + _ = f.Close() // start with empty config s.config = ConfigStructure{} diff --git a/utils/copyfile.go b/utils/copyfile.go index c9689a58..c7793ad7 100644 --- a/utils/copyfile.go +++ b/utils/copyfile.go @@ -11,7 +11,9 @@ func CopyFile(src, dst string) error { if err != nil { return err } - defer sf.Close() + defer func() { + _ = sf.Close() + }() df, err := os.Create(dst) if err != nil { @@ -20,7 +22,7 @@ func CopyFile(src, dst string) error { _, err = io.Copy(df, sf) if err != nil { - df.Close() + _ = df.Close() return err } diff --git a/utils/logging.go b/utils/logging.go index 592e8f30..6eceae14 100644 --- a/utils/logging.go +++ b/utils/logging.go @@ -4,12 +4,19 @@ import ( "io" "os" "strings" + "syscall" "time" "github.com/rs/zerolog" "github.com/rs/zerolog/log" + "golang.org/x/term" ) +// RunningOnTerminal checks whether stdout is terminal +func RunningOnTerminal() bool { + return term.IsTerminal(syscall.Stdout) +} + type LogWriter struct { Logger zerolog.Logger } @@ -32,11 +39,10 @@ func SetupDefaultLogger(levelStr string) { zerolog.MessageFieldName = "message" zerolog.LevelFieldName = "level" - log.Logger = zerolog.New(zerolog.ConsoleWriter{Out: os.Stderr, TimeFormat: time.RFC3339}). - Level(GetLogLevelOrDebug(levelStr)). - With(). - Timestamp(). - Logger() + log.Logger = zerolog.New(zerolog.ConsoleWriter{Out: os.Stderr, + FormatTimestamp: func(_ interface{}) string { return "" }, + NoColor: !RunningOnTerminal(), + }).Level(GetLogLevelOrDebug(levelStr)) } func GetLogLevelOrDebug(levelStr string) zerolog.Level { diff --git a/utils/utils.go b/utils/utils.go index eb9677d3..0d2daaa7 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -24,7 +24,7 @@ func DirIsAccessible(filename string) error { return nil } -// Remove leading '/', remove '..', '$' and '`' +// SanitizePath removes leading '/', remove '..', '$' and '`' func SanitizePath(path string) (result string) { result = strings.Replace(path, "..", "", -1) result = strings.Replace(result, "$", "", -1)