mirror of
https://github.com/aptly-dev/aptly.git
synced 2026-06-04 05:10:40 +00:00
Merge pull request #1440 from aptly-dev/bugfix/issue-1435-fix-s3-upload-unchanged-package
Fix upload of unchanged packages in S3 on source update of published repository
This commit is contained in:
@@ -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"
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -2,13 +2,15 @@ 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=v1.64.5 # version supporting go 1.23
|
||||
COVERAGE_DIR?=$(shell mktemp -d)
|
||||
GOOS=$(shell go env GOHOSTOS)
|
||||
GOARCH=$(shell go env GOHOSTARCH)
|
||||
|
||||
# Uncomment to update system test gold files
|
||||
# CAPTURE := "--capture"
|
||||
# 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 +52,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:
|
||||
@@ -71,7 +73,7 @@ lint: prepare
|
||||
# Install golangci-lint
|
||||
@test -f $(BINPATH)/golangci-lint || go install github.com/golangci/golangci-lint/cmd/golangci-lint@$(GOLANGCI_LINT_VERSION)
|
||||
# Running lint
|
||||
@PATH=$(BINPATH)/:$(PATH) golangci-lint run
|
||||
@PATH=$(BINPATH)/:$(PATH) golangci-lint run --max-issues-per-linter 0 --max-same-issues 0
|
||||
|
||||
|
||||
build: prepare swagger ## Build aptly
|
||||
@@ -102,7 +104,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"
|
||||
@@ -186,6 +188,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
|
||||
|
||||
|
||||
+5
-5
@@ -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)
|
||||
|
||||
@@ -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())
|
||||
}
|
||||
|
||||
|
||||
+3
-2
@@ -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
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
@@ -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
|
||||
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
module github.com/aptly-dev/aptly
|
||||
|
||||
go 1.22.7
|
||||
go 1.23
|
||||
|
||||
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.33.0 // indirect
|
||||
golang.org/x/sys v0.30.0
|
||||
golang.org/x/term v0.29.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.35.0 // indirect
|
||||
golang.org/x/sync v0.11.0 // indirect
|
||||
golang.org/x/text v0.22.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
|
||||
|
||||
@@ -324,12 +324,15 @@ golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2Uz
|
||||
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.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus=
|
||||
golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M=
|
||||
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/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=
|
||||
@@ -348,6 +351,8 @@ 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.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8=
|
||||
golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk=
|
||||
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=
|
||||
@@ -357,6 +362,8 @@ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJ
|
||||
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.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w=
|
||||
golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||
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=
|
||||
@@ -385,6 +392,8 @@ 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.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
|
||||
golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
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=
|
||||
@@ -392,6 +401,8 @@ 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.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU=
|
||||
golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s=
|
||||
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=
|
||||
@@ -401,6 +412,8 @@ 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.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
|
||||
golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
|
||||
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=
|
||||
@@ -412,6 +425,8 @@ 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=
|
||||
|
||||
+9
-3
@@ -172,6 +172,7 @@ func (storage *PublishedStorage) PutFile(path string, sourceFilename string) err
|
||||
}
|
||||
defer 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 +197,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 +238,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 +271,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 +340,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 +348,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]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -385,6 +387,7 @@ func (storage *PublishedStorage) LinkFromPool(publishedPrefix, publishedRelPath,
|
||||
}
|
||||
defer source.Close()
|
||||
|
||||
log.Debug().Msgf("S3: LinkFromPool '%s'", relPath)
|
||||
err = storage.putFile(relPath, source, sourceMD5)
|
||||
if err == nil {
|
||||
storage.pathCache[relPath] = sourceMD5
|
||||
@@ -465,6 +468,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 +498,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 +509,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)
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -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.
|
||||
|
||||
+16
-13
@@ -289,8 +289,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):
|
||||
@@ -493,24 +491,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
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
<!doctype html>
|
||||
<pre>
|
||||
<a href="debian/">debian/</a>
|
||||
<a href="dists/">dists/</a>
|
||||
<a href="multi/">multi/</a>
|
||||
<a href="pool/">pool/</a>
|
||||
<meta name="viewport" content="width=device-width">
|
||||
</pre>
|
||||
|
||||
+11
-5
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user