diff --git a/.flake8 b/.flake8
new file mode 100644
index 00000000..607808a1
--- /dev/null
+++ b/.flake8
@@ -0,0 +1,7 @@
+[flake8]
+max-line-length = 200
+ignore = E126,E241,E741,W504
+include =
+ system
+exclude =
+ system/env
\ No newline at end of file
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 00000000..8a58ddb7
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,147 @@
+# Based on https://github.com/aptly-dev/aptly/blob/master/.travis.yml
+
+name: CI
+
+on:
+ pull_request:
+ push:
+ tags:
+ - 'v*'
+ branches:
+ - 'master'
+
+defaults:
+ run:
+ # see: https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#using-a-specific-shell
+ shell: bash --noprofile --norc -eo pipefail -x {0}
+
+env:
+ DEBIAN_FRONTEND: noninteractive
+
+jobs:
+ build:
+ name: test
+ runs-on: ubuntu-20.04
+ continue-on-error: ${{ matrix.allow_failure }}
+ timeout-minutes: 30
+ strategy:
+ fail-fast: true
+ matrix:
+ go: [1.16, 1.17, 1.18]
+ run_long_tests: [no]
+ allow_failure: [false]
+ include:
+ # Disable this for now as it's not clear how to select the latest master branch
+ # version of go using actions/setup-go@v2.
+ # - go: master
+ # run_long_tests: no
+ # allow_failure: true
+ - go: 1.17
+ run_long_tests: yes
+ allow_failure: false
+
+ env:
+ NO_FTP_ACCESS: yes
+ BOTO_CONFIG: /dev/null
+ GO111MODULE: "on"
+ GOPROXY: "https://proxy.golang.org"
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v2
+
+ - name: Setup Go
+ uses: actions/setup-go@v2
+ with:
+ go-version: ${{ matrix.go }}
+
+ - name: golangci-lint
+ uses: golangci/golangci-lint-action@v2
+ with:
+ version: v1.45.0
+
+ - name: Setup Python
+ uses: actions/setup-python@v2
+ with:
+ python-version: 3.9
+
+ - name: Install O/S packages
+ run: |
+ sudo apt-get update
+ sudo apt-get install -y graphviz gnupg1 gnupg2 gpgv1 gpgv2 git gcc make
+
+ - name: Install Python packages
+ run: |
+ pip install six packaging appdirs virtualenv
+ pip install -U pip setuptools
+ pip install -r system/requirements.txt
+
+ - name: Install Azurite
+ id: azuright
+ uses: potatoqualitee/azuright@v1.1
+ with:
+ directory: ${{ runner.temp }}
+
+ - name: Get aptly version
+ run: |
+ make version
+
+ - name: Make
+ env:
+ RUN_LONG_TESTS: ${{ matrix.run_long_tests }}
+ AZURE_STORAGE_ENDPOINT: "127.0.0.1:10000"
+ AZURE_STORAGE_ACCOUNT: "devstoreaccount1"
+ AZURE_STORAGE_ACCESS_KEY: "Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw=="
+ run: |
+ make
+
+ - name: Upload code coverage
+ if: matrix.run_long_tests
+ uses: codecov/codecov-action@v2
+ with:
+ token: ${{ secrets.CODECOV_TOKEN }}
+ files: coverage.txt
+
+ release:
+ name: release
+ needs: build
+ runs-on: ubuntu-20.04
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v3
+ with:
+ # fetch the whole repot for `git describe` to
+ # work and get the nightly verion
+ fetch-depth: 0
+
+ - name: Setup Go
+ uses: actions/setup-go@v2
+
+ - name: Make Release
+ env:
+ GOBIN: /usr/local/bin
+ run: |
+ make release
+
+ - name: Publish nightly release to aptly
+ if: github.ref == 'refs/heads/master'
+ env:
+ APTLY_USER: ${{ secrets.APTLY_USER }}
+ APTLY_PASSWORD: ${{ secrets.APTLY_PASSWORD }}
+ run: |
+ ./upload-artifacts.sh nightly
+
+ - name: Publish release to aptly
+ if: startsWith(github.event.ref, 'refs/tags')
+ env:
+ APTLY_USER: ${{ secrets.APTLY_USER }}
+ APTLY_PASSWORD: ${{ secrets.APTLY_PASSWORD }}
+ run: |
+ ./upload-artifacts.sh release
+
+ - name: Upload artifacts to GitHub Release
+ if: startsWith(github.event.ref, 'refs/tags')
+ uses: softprops/action-gh-release@v1
+ with:
+ body: Release ${{ github.ref }} generated by the CI.
+ files: build/*
diff --git a/.gitignore b/.gitignore
index a4dedf90..347cbc1d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -41,3 +41,4 @@ build/
pgp/keyrings/aptly2*.gpg
pgp/keyrings/aptly2*.gpg~
+pgp/keyrings/.#*
diff --git a/.golangci.yml b/.golangci.yml
index eea44730..60d5a032 100644
--- a/.golangci.yml
+++ b/.golangci.yml
@@ -3,20 +3,17 @@ run:
linters:
- enable-all: false
disable-all: true
enable:
- - govet
- - golint
- - gofmt
- deadcode
- - goimports
- - misspell
- - ineffassign
- - staticcheck
- - varcheck
- - structcheck
- - maligned
- - vetshadow
- goconst
- - interfacer
+ - gofmt
+ - goimports
+ - govet
+ - ineffassign
+ - misspell
+ - revive
+ - staticcheck
+ - structcheck
+ - varcheck
+ - vetshadow
diff --git a/.goxc.json b/.goxc.json
index 561961aa..60f1940c 100644
--- a/.goxc.json
+++ b/.goxc.json
@@ -34,8 +34,7 @@
}
},
"ResourcesInclude": "README.rst,LICENSE,AUTHORS,man/aptly.1",
- "Arch": "386 amd64",
- "Os": "linux darwin freebsd",
+ "BuildConstraints": "linux,386 linux,amd64 darwin,amd64 freebsd,386 freebsd,amd64",
"MainDirsExclude": "_man,vendor",
"BuildSettings": {
"LdFlagsXVars": {
diff --git a/.travis.yml b/.travis.yml
index 2207f20a..574a8f4e 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,4 +1,4 @@
-dist: trusty
+dist: xenial
sudo: required
language: go
@@ -19,6 +19,8 @@ env:
- secure: "OxiVNmre2JzUszwPNNilKDgIqtfX2gnRSsVz6nuySB1uO2yQsOQmKWJ9cVYgH2IB5H8eWXKOhexcSE28kz6TPLRuEcU9fnqKY3uEkdwm7rJfz9lf+7C4bJEUdA1OIzJppjnWUiXxD7CEPL1DlnMZM24eDQYqa/4WKACAgkK53gE="
- NO_FTP_ACCESS: "yes"
- BOTO_CONFIG: /dev/null
+ - GO111MODULE: "on"
+ - GOPROXY: https://proxy.golang.org
matrix:
allow_failures:
@@ -26,11 +28,15 @@ matrix:
env: RUN_LONG_TESTS=no
fast_finish: true
include:
- - go: 1.10.x
- env: RUN_LONG_TESTS=no
- go: 1.11.x
- env: RUN_LONG_TESTS=yes
+ env: RUN_LONG_TESTS=no
- go: 1.12.x
+ env: RUN_LONG_TESTS=no
+ - go: 1.13.x
+ env: RUN_LONG_TESTS=no
+ - go: 1.14.x
+ env: RUN_LONG_TESTS=yes
+ - go: 1.15.x
env:
- RUN_LONG_TESTS=yes
- DEPLOY_BINARIES=yes
diff --git a/AUTHORS b/AUTHORS
index f376e783..00bc4557 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -35,3 +35,17 @@ List of contributors, in chronological order:
* Strajan Sebastian (https://github.com/strajansebastian)
* Artem Smirnov (https://github.com/urpylka)
* William Manley (https://github.com/wmanley)
+* Shengjing Zhu (https://github.com/zhsj)
+* Nabil Bendafi (https://github.com/nabilbendafi)
+* Raphael Medaer (https://github.com/rmedaer)
+* Raul Benencia (https://github.com/rul)
+* Don Kuntz (https://github.com/dkuntz2)
+* Joshua Colson (https://github.com/freakinhippie)
+* Andre Roth (https://github.com/neolynx)
+* Lorenzo Bolla (https://github.com/lbolla)
+* Benj Fassbind (https://github.com/randombenj)
+* Markus Muellner (https://github.com/mmianl)
+* Chuan Liu (https://github.com/chuan)
+* Samuel Mutel (https://github.com/smutel)
+* Russell Greene (https://github.com/russelltg)
+* Wade Simmons (https://github.com/wadey)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 6a52e9f6..3a54863d 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -40,7 +40,7 @@ Please report unacceptable behavior to [team@aptly.info](mailto:team@aptly.info)
There are two kinds of documentation:
-* [aptly website](https://www.aptly/info)
+* [aptly website](https://www.aptly.info)
* aptly `man` page
Core content is mostly the same, but website contains more information, tutorials, examples.
@@ -84,10 +84,8 @@ to prepend it or to skip this test if you're security conscious.
### Forking and Cloning
-As Go is using repository path in import paths, it's better to clone aptly repo (not your fork) at default location:
+As aptly is using Go modules, aptly repository could be cloned to any location on the file system:
- mkdir -p ~/go/src/github.com/aptly-dev
- cd ~/go/src/github.com/aptly-dev
git clone git@github.com:aptly-dev/aptly.git
cd aptly
@@ -108,6 +106,10 @@ You would need some additional tools and Python virtual environment to run tests
This is usually one-time action.
+Aptly is using Go modules to manage dependencies, download modules using:
+
+ make modules
+
### Building
If you want to build aptly binary from your current source tree, run:
diff --git a/Gopkg.lock b/Gopkg.lock
deleted file mode 100644
index 1f94d3ef..00000000
--- a/Gopkg.lock
+++ /dev/null
@@ -1,404 +0,0 @@
-# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'.
-
-
-[[projects]]
- digest = "1:e8777c437e157121465a08c05304d5847ae70b5683ef4afeb723b3c9e5e3bc67"
- name = "github.com/AlekSi/pointer"
- packages = ["."]
- pruneopts = ""
- revision = "08a25bac605b3fcb6cc27f3917b2c2c87451963d"
- version = "v1.0.0"
-
-[[projects]]
- branch = "master"
- digest = "1:218a66570875d243938fff08f17ec03e79b18c138d0845b2428bcb4929ffa4fe"
- name = "github.com/DisposaBoy/JsonConfigReader"
- packages = ["."]
- pruneopts = ""
- revision = "33a99fdf1d5ee1f79b5077e9c06f955ad356d5f4"
-
-[[projects]]
- digest = "1:658ab137074ef3d1216e01cbe166eb171a1bd77daeae0b686ab1ae184a9a5ec9"
- name = "github.com/awalterschulze/gographviz"
- packages = [
- ".",
- "ast",
- "parser",
- "scanner",
- "token"
- ]
- pruneopts = ""
- revision = "761fd5fbb34e4c2c138c280395b65b48e4ff5a53"
- version = "v1.0"
-
-[[projects]]
- digest = "1:a72e35a51b628d148241720897de644fd6d3cea45d8489dae9d373ced5dfc302"
- name = "github.com/aws/aws-sdk-go"
- packages = [
- "aws",
- "aws/awserr",
- "aws/awsutil",
- "aws/client",
- "aws/client/metadata",
- "aws/corehandlers",
- "aws/credentials",
- "aws/credentials/ec2rolecreds",
- "aws/credentials/endpointcreds",
- "aws/credentials/stscreds",
- "aws/defaults",
- "aws/ec2metadata",
- "aws/endpoints",
- "aws/request",
- "aws/session",
- "aws/signer/v4",
- "internal/sdkio",
- "internal/sdkrand",
- "internal/shareddefaults",
- "private/protocol",
- "private/protocol/query",
- "private/protocol/query/queryutil",
- "private/protocol/rest",
- "private/protocol/restxml",
- "private/protocol/xml/xmlutil",
- "service/s3",
- "service/sts"
- ]
- pruneopts = ""
- revision = "a72204b9bf8d48230ee0fe8995613b394c66f2da"
- version = "v1.13.31"
-
-[[projects]]
- digest = "1:b9922c7da8a89c973758c03bde497017567f785b49bd253402a3587abec1e53d"
- name = "github.com/cheggaaa/pb"
- packages = ["."]
- pruneopts = ""
- revision = "cdf719fac0dd208251aa828e687c2d5802053b51"
- version = "v1.0.10"
-
-[[projects]]
- branch = "master"
- digest = "1:1120f960f5c334f0f94bad29eefaf73d52d226893369693686148f66c1993f15"
- name = "github.com/gin-contrib/sse"
- packages = ["."]
- pruneopts = ""
- revision = "22d885f9ecc78bf4ee5d72b937e4bbcdc58e8cae"
-
-[[projects]]
- digest = "1:348ceb76f2ac958e541e4ba3190484b68df28c38ac9720ed4ef8d36af69ce52e"
- name = "github.com/gin-gonic/gin"
- packages = [
- ".",
- "binding",
- "render"
- ]
- pruneopts = ""
- revision = "d459835d2b077e44f7c9b453505ee29881d5d12d"
- version = "v1.2"
-
-[[projects]]
- digest = "1:fbed9ba4076145ae05ef7deeb14d49565e112d6c283a8c4304fa3b7be785fa5e"
- name = "github.com/go-ini/ini"
- packages = ["."]
- pruneopts = ""
- revision = "1730955e3146956d6a087861380f9b4667ed5071"
- version = "v1.26.0"
-
-[[projects]]
- branch = "master"
- digest = "1:27854310d59099f8dcc61dd8af4a69f0a3597f001154b2fb4d1c41baf2e31ec1"
- name = "github.com/golang/protobuf"
- packages = ["proto"]
- pruneopts = ""
- revision = "130e6b02ab059e7b717a096f397c5b60111cae74"
-
-[[projects]]
- branch = "master"
- digest = "1:09307dfb1aa3f49a2bf869dcfa4c6c06ecd3c207221bd1c1a1141f0e51f209eb"
- name = "github.com/golang/snappy"
- packages = ["."]
- pruneopts = ""
- revision = "553a641470496b2327abcac10b36396bd98e45c9"
-
-[[projects]]
- digest = "1:6ee50e0ace655f26787c120dbce51b3185c470f475c9e57d0dcada8ebb115004"
- name = "github.com/h2non/filetype"
- packages = ["matchers"]
- pruneopts = ""
- revision = "cc14fdc9ca0e4c2bafad7458f6ff79fd3947cfbb"
- version = "v1.0.5"
-
-[[projects]]
- branch = "master"
- digest = "1:64b78d98b8956492576911baf6a1e3499816d4575e485d12792e4abe7d8b6c46"
- name = "github.com/jlaffaye/ftp"
- packages = ["."]
- pruneopts = ""
- revision = "2403248fa8cc9f7909862627aa7337f13f8e0bf1"
-
-[[projects]]
- digest = "1:6f49eae0c1e5dab1dafafee34b207aeb7a42303105960944828c2079b92fc88e"
- name = "github.com/jmespath/go-jmespath"
- packages = ["."]
- pruneopts = ""
- revision = "0b12d6b5"
-
-[[projects]]
- branch = "master"
- digest = "1:c728183dd470c8bb2d1775edc641a81ec25f5e3804b8b0536e99f71df17a13a6"
- name = "github.com/kjk/lzma"
- packages = ["."]
- pruneopts = ""
- revision = "3fd93898850d5252457e48c1b3d5e1510597280b"
-
-[[projects]]
- digest = "1:78229b46ddb7434f881390029bd1af7661294af31f6802e0e1bedaad4ab0af3c"
- name = "github.com/mattn/go-isatty"
- packages = ["."]
- pruneopts = ""
- revision = "0360b2af4f38e8d38c7fce2a9f4e702702d73a39"
- version = "v0.0.3"
-
-[[projects]]
- digest = "1:81e673df85e765593a863f67cba4544cf40e8919590f04d67664940786c2b61a"
- name = "github.com/mattn/go-runewidth"
- packages = ["."]
- pruneopts = ""
- revision = "9e777a8366cce605130a531d2cd6363d07ad7317"
- version = "v0.0.2"
-
-[[projects]]
- digest = "1:fb8502ed69803c4cd97b1def119db73869ec2f7e2b408eb9c1b8276df6f05b3e"
- name = "github.com/mattn/go-shellwords"
- packages = ["."]
- pruneopts = ""
- revision = "005a0944d84452842197c2108bd9168ced206f78"
- version = "v1.0.2"
-
-[[projects]]
- branch = "master"
- digest = "1:3ba28ef4fbbf8d099c6227b698a6ceae28f8a071e12f06839c12c4c0003b7554"
- name = "github.com/mkrautz/goar"
- packages = ["."]
- pruneopts = ""
- revision = "282caa8bd9daba480b51f1d5a988714913b97aad"
-
-[[projects]]
- branch = "master"
- digest = "1:d33ce379780d7c43405b9251289493cabada82f6bf9ab35eea6915d04f6ac8e0"
- name = "github.com/mxk/go-flowrate"
- packages = ["flowrate"]
- pruneopts = ""
- revision = "cca7078d478f8520f85629ad7c68962d31ed7682"
-
-[[projects]]
- branch = "master"
- digest = "1:428d8af27f534ed06d783b03d477124796de06aa86402777cd2b494c64278da5"
- name = "github.com/ncw/swift"
- packages = [
- ".",
- "swifttest"
- ]
- pruneopts = ""
- revision = "8e9b10220613abdbc2896808ee6b43e411a4fa6c"
-
-[[projects]]
- branch = "master"
- digest = "1:beeb9206cc21cfeb113066c3dcf4bbb0ba304d73dd441f3244721566f51f44e6"
- name = "github.com/pborman/uuid"
- packages = ["."]
- pruneopts = ""
- revision = "c65b2f87fee37d1c7854c9164a450713c28d50cd"
-
-[[projects]]
- digest = "1:1d7e1867c49a6dd9856598ef7c3123604ea3daabf5b83f303ff457bcbc410b1d"
- name = "github.com/pkg/errors"
- packages = ["."]
- pruneopts = ""
- revision = "ba968bfe8b2f7e042a574c888954fccecfa385b4"
- version = "v0.8.1"
-
-[[projects]]
- branch = "master"
- digest = "1:c6e71685a14409c3a1fdbecef044ee6447c3887de7c2bb025ee12f9a8a368960"
- name = "github.com/smira/commander"
- packages = ["."]
- pruneopts = ""
- revision = "f408b00e68d5d6e21b9f18bd310978dafc604e47"
-
-[[projects]]
- branch = "master"
- digest = "1:a75eb2e6e718988505f704d651eeb4734f0f0b580f761aa58b4a5b0afe585091"
- name = "github.com/smira/flag"
- packages = ["."]
- pruneopts = ""
- revision = "695ea5e84e76dea7c8656e43c384e54b32aa1b2a"
-
-[[projects]]
- branch = "master"
- digest = "1:cd3b8057abbb453404cbef569951a7359986eedfc0a887f9bc5efff8d02e1760"
- name = "github.com/smira/go-aws-auth"
- packages = ["."]
- pruneopts = ""
- revision = "8b73995fd8d1d82519c7037ee243a497552cd54d"
-
-[[projects]]
- branch = "master"
- digest = "1:7dd59b3536a07651baf394466da3b8a20bd3ed9ce1984c7583fdf2412fdcfea9"
- name = "github.com/smira/go-ftp-protocol"
- packages = ["protocol"]
- pruneopts = ""
- revision = "066b75c2b70dca7ae10b1b88b47534a3c31ccfaa"
-
-[[projects]]
- branch = "master"
- digest = "1:55fe1086100b305a5562e9f1e6825ef97c49e82331cb0f055b2069f7c7ebd469"
- name = "github.com/smira/go-xz"
- packages = ["."]
- pruneopts = ""
- revision = "0c531f070014e218b21f3cfca801cc992d52726d"
-
-[[projects]]
- branch = "master"
- digest = "1:175bc8d87d54849b9b9fc6cd473c5830e090fbf3c2f0ca71c7642a697e5d9237"
- name = "github.com/syndtr/goleveldb"
- packages = [
- "leveldb",
- "leveldb/cache",
- "leveldb/comparer",
- "leveldb/errors",
- "leveldb/filter",
- "leveldb/iterator",
- "leveldb/journal",
- "leveldb/memdb",
- "leveldb/opt",
- "leveldb/storage",
- "leveldb/table",
- "leveldb/util"
- ]
- pruneopts = ""
- revision = "714f901b98fdb3aa954b4193d8cbd64a28d80cad"
-
-[[projects]]
- digest = "1:b9bca27d5fbe4ad1a1802706629580ce923bb14255c51375480dff1bebcbb8b2"
- name = "github.com/ugorji/go"
- packages = ["codec"]
- pruneopts = ""
- revision = "71c2886f5a673a35f909803f38ece5810165097b"
-
-[[projects]]
- branch = "master"
- digest = "1:2d8078b329a80bf4b71537dcd30853ff89fcafb611c94b2dfdb3d43ef1f23a1a"
- name = "github.com/wsxiaoys/terminal"
- packages = ["color"]
- pruneopts = ""
- revision = "0940f3fc43a0ed42d04916b1c04578462c650b09"
-
-[[projects]]
- branch = "master"
- digest = "1:51aff2b69272cb95713b74675c0817e0a0caadc20337a8d9115bc68bf1105280"
- name = "golang.org/x/crypto"
- packages = [
- "cast5",
- "openpgp",
- "openpgp/armor",
- "openpgp/clearsign",
- "openpgp/elgamal",
- "openpgp/errors",
- "openpgp/packet",
- "openpgp/s2k",
- "ssh/terminal"
- ]
- pruneopts = ""
- revision = "b2aa35443fbc700ab74c586ae79b81c171851023"
-
-[[projects]]
- branch = "master"
- digest = "1:267aa6124260d0e48d1ebf8bb84dce97caa133406b3caabc076cfc7a9e85ffe4"
- name = "golang.org/x/sys"
- packages = [
- "unix",
- "windows"
- ]
- pruneopts = ""
- revision = "1d206c9fa8975fb4cf00df1dc8bf3283dc24ba0e"
-
-[[projects]]
- branch = "v1"
- digest = "1:e75566abfb876e81f00290ec153ff994c33bf8886134c1a38a9a9df5c15a2045"
- name = "gopkg.in/check.v1"
- packages = ["."]
- pruneopts = ""
- revision = "20d25e2804050c1cd24a7eea1e7a6447dd0e74ec"
-
-[[projects]]
- digest = "1:dd549e360e5a8f982a28c2bcbe667307ceffe538ed9afc7c965524f1ac285b3f"
- name = "gopkg.in/go-playground/validator.v8"
- packages = ["."]
- pruneopts = ""
- revision = "5f1438d3fca68893a817e4a66806cea46a9e4ebf"
- version = "v8.18.2"
-
-[[projects]]
- digest = "1:0e886d5a5845f58255fb57bcb4a6aae7e1f9dd7c53defe7b87d57dd4cd127545"
- name = "gopkg.in/h2non/filetype.v1"
- packages = ["types"]
- pruneopts = ""
- revision = "3093b8ebec6efb56ac813238b8beab4ed4eaac6a"
- version = "v1.0.1"
-
-[[projects]]
- branch = "v2"
- digest = "1:81314a486195626940617e43740b4fa073f265b0715c9f54ce2027fee1cb5f61"
- name = "gopkg.in/yaml.v2"
- packages = ["."]
- pruneopts = ""
- revision = "eb3733d160e74a9c7e442f435eb3bea458e1d19f"
-
-[solve-meta]
- analyzer-name = "dep"
- analyzer-version = 1
- input-imports = [
- "github.com/AlekSi/pointer",
- "github.com/DisposaBoy/JsonConfigReader",
- "github.com/awalterschulze/gographviz",
- "github.com/aws/aws-sdk-go/aws",
- "github.com/aws/aws-sdk-go/aws/awserr",
- "github.com/aws/aws-sdk-go/aws/corehandlers",
- "github.com/aws/aws-sdk-go/aws/credentials",
- "github.com/aws/aws-sdk-go/aws/request",
- "github.com/aws/aws-sdk-go/aws/session",
- "github.com/aws/aws-sdk-go/service/s3",
- "github.com/cheggaaa/pb",
- "github.com/gin-gonic/gin",
- "github.com/h2non/filetype/matchers",
- "github.com/kjk/lzma",
- "github.com/mattn/go-shellwords",
- "github.com/mkrautz/goar",
- "github.com/mxk/go-flowrate/flowrate",
- "github.com/ncw/swift",
- "github.com/ncw/swift/swifttest",
- "github.com/pborman/uuid",
- "github.com/pkg/errors",
- "github.com/smira/commander",
- "github.com/smira/flag",
- "github.com/smira/go-aws-auth",
- "github.com/smira/go-ftp-protocol/protocol",
- "github.com/smira/go-xz",
- "github.com/syndtr/goleveldb/leveldb",
- "github.com/syndtr/goleveldb/leveldb/filter",
- "github.com/syndtr/goleveldb/leveldb/opt",
- "github.com/syndtr/goleveldb/leveldb/storage",
- "github.com/syndtr/goleveldb/leveldb/util",
- "github.com/ugorji/go/codec",
- "github.com/wsxiaoys/terminal/color",
- "golang.org/x/crypto/openpgp",
- "golang.org/x/crypto/openpgp/armor",
- "golang.org/x/crypto/openpgp/clearsign",
- "golang.org/x/crypto/openpgp/errors",
- "golang.org/x/crypto/openpgp/packet",
- "golang.org/x/crypto/ssh/terminal",
- "golang.org/x/sys/unix",
- "gopkg.in/check.v1"
- ]
- solver-name = "gps-cdcl"
- solver-version = 1
diff --git a/Gopkg.toml b/Gopkg.toml
deleted file mode 100644
index 75993f0b..00000000
--- a/Gopkg.toml
+++ /dev/null
@@ -1,28 +0,0 @@
-
-[[override]]
- branch = "master"
- name = "github.com/mkrautz/goar"
-
-[[override]]
- branch = "master"
- name = "github.com/smira/go-uuid"
-
-[[override]]
- branch = "master"
- name = "github.com/smira/go-xz"
-
-[[override]]
- name = "github.com/ugorji/go"
- revision = "71c2886f5a673a35f909803f38ece5810165097b"
-
-[[override]]
- branch = "master"
- name = "golang.org/x/crypto"
-
-[[override]]
- branch = "master"
- name = "golang.org/x/sys"
-
-[[override]]
- branch = "v1"
- name = "gopkg.in/check.v1"
diff --git a/Makefile b/Makefile
index 632a3782..1acb5035 100644
--- a/Makefile
+++ b/Makefile
@@ -2,28 +2,32 @@ GOVERSION=$(shell go version | awk '{print $$3;}')
ifdef TRAVIS_TAG
TAG=$(TRAVIS_TAG)
else
- TAG="$(shell git describe --tags)"
+ TAG="$(shell git describe --tags --always)"
endif
VERSION=$(shell echo $(TAG) | sed 's@^v@@' | sed 's@-@+@g')
PACKAGES=context database deb files gpg http query swift s3 utils
-PYTHON?=python
+PYTHON?=python3
TESTS?=
BINPATH?=$(GOPATH)/bin
RUN_LONG_TESTS?=yes
-all: test bench check system-test
+all: modules test bench check system-test
prepare:
- curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b $(shell go env GOPATH)/bin v1.17.1
+ curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(shell go env GOPATH)/bin v1.43.0
+
+modules:
+ go mod download
+ go mod verify
+ go mod tidy -v
dev:
- go get -u github.com/golang/dep/...
go get -u github.com/laher/goxc
check: system/env
ifeq ($(RUN_LONG_TESTS), yes)
golangci-lint run
- . system/env/bin/activate && flake8 --max-line-length=200 --exclude=system/env/ system/
+ system/env/bin/flake8
endif
install:
@@ -32,7 +36,7 @@ install:
system/env: system/requirements.txt
ifeq ($(RUN_LONG_TESTS), yes)
rm -rf system/env
- virtualenv system/env
+ $(PYTHON) -m venv system/env
system/env/bin/pip install -r system/requirements.txt
endif
@@ -74,4 +78,4 @@ man:
version:
@echo $(VERSION)
-.PHONY: man version release goxc
+.PHONY: man modules version release goxc
diff --git a/README.rst b/README.rst
index e575cbca..13e5b3f1 100644
--- a/README.rst
+++ b/README.rst
@@ -2,17 +2,17 @@
aptly
=====
-.. image:: https://api.travis-ci.org/aptly-dev/aptly.svg?branch=master
- :target: https://travis-ci.org/aptly-dev/aptly
+.. image:: https://github.com/aptly-dev/aptly/actions/workflows/ci.yml/badge.svg
+ :target: https://github.com/aptly-dev/aptly/actions
.. image:: https://codecov.io/gh/aptly-dev/aptly/branch/master/graph/badge.svg
- :target: https://codecov.io/gh/aptly-dev/aptly
+ :target: https://codecov.io/gh/aptly-dev/aptly
.. image:: https://badges.gitter.im/Join Chat.svg
:target: https://gitter.im/aptly-dev/aptly?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
-.. image:: http://goreportcard.com/badge/aptly-dev/aptly
- :target: http://goreportcard.com/report/aptly-dev/aptly
+.. image:: https://goreportcard.com/badge/github.com/aptly-dev/aptly
+ :target: https://goreportcard.com/report/aptly-dev/aptly
Aptly is a swiss army knife for Debian repository management.
@@ -48,7 +48,7 @@ To install aptly on Debian/Ubuntu, add new repository to ``/etc/apt/sources.list
And import key that is used to sign the release::
- $ apt-key adv --keyserver pool.sks-keyservers.net --recv-keys ED75B5A4483DA07C
+ $ apt-key adv --keyserver keyserver.ubuntu.com --recv-keys EE727D4449467F0E
After that you can install aptly as any other software package::
@@ -62,14 +62,13 @@ If you would like to use nightly builds (unstable), please use following reposit
deb http://repo.aptly.info/ nightly main
-Binary executables (depends almost only on libc) are available for download from `Bintray `_.
+Binary executables (depends almost only on libc) are available for download from `GitHub Releases `_.
-If you have Go environment set up, you can build aptly from source by running (go 1.10+ required)::
+If you have Go environment set up, you can build aptly from source by running (go 1.14+ required)::
- mkdir -p $GOPATH/src/github.com/aptly-dev/aptly
- git clone https://github.com/aptly-dev/aptly $GOPATH/src/github.com/aptly-dev/aptly
- cd $GOPATH/src/github.com/aptly-dev/aptly
- make install
+ git clone https://github.com/aptly-dev/aptly
+ cd aptly
+ make modules install
Binary would be installed to ``$GOPATH/bin/aptly``.
diff --git a/api/api.go b/api/api.go
index e7e3fd67..b8656178 100644
--- a/api/api.go
+++ b/api/api.go
@@ -3,12 +3,16 @@ package api
import (
"fmt"
+ "log"
+ "net/http"
"sort"
- "time"
+ "strconv"
+ "strings"
"github.com/aptly-dev/aptly/aptly"
"github.com/aptly-dev/aptly/deb"
"github.com/aptly-dev/aptly/query"
+ "github.com/aptly-dev/aptly/task"
"github.com/gin-gonic/gin"
)
@@ -35,49 +39,14 @@ type dbRequest struct {
err chan<- error
}
-// Flushes all collections which cache in-memory objects
-func flushColections() {
- // lock everything to eliminate in-progress calls
- r := context.CollectionFactory().RemoteRepoCollection()
- r.Lock()
- defer r.Unlock()
-
- l := context.CollectionFactory().LocalRepoCollection()
- l.Lock()
- defer l.Unlock()
-
- s := context.CollectionFactory().SnapshotCollection()
- s.Lock()
- defer s.Unlock()
-
- p := context.CollectionFactory().PublishedRepoCollection()
- p.Lock()
- defer p.Unlock()
-
- // all collections locked, flush them
- context.CollectionFactory().Flush()
-}
-
-// Periodically flushes CollectionFactory to free up memory used by
-// collections, flushing caches.
-//
-// Should be run in goroutine!
-func cacheFlusher() {
- ticker := time.Tick(15 * time.Minute)
-
- for {
- <-ticker
-
- flushColections()
- }
-}
+var dbRequests chan dbRequest
// Acquire database lock and release it when not needed anymore.
//
// Should be run in a goroutine!
-func acquireDatabase(requests <-chan dbRequest) {
+func acquireDatabase() {
clients := 0
- for request := range requests {
+ for request := range dbRequests {
var err error
switch request.kind {
@@ -94,7 +63,6 @@ func acquireDatabase(requests <-chan dbRequest) {
case releasedb:
clients--
if clients == 0 {
- flushColections()
err = context.CloseDatabase()
} else {
err = nil
@@ -105,12 +73,100 @@ func acquireDatabase(requests <-chan dbRequest) {
}
}
+// Should be called before database access is needed in any api call.
+// Happens per default for each api call. It is important that you run
+// runTaskInBackground to run a task which accquire database.
+// Important do not forget to defer to releaseDatabaseConnection
+func acquireDatabaseConnection() error {
+ if dbRequests == nil {
+ return nil
+ }
+
+ errCh := make(chan error)
+ dbRequests <- dbRequest{acquiredb, errCh}
+
+ return <-errCh
+}
+
+// Release database connection when not needed anymore
+func releaseDatabaseConnection() error {
+ if dbRequests == nil {
+ return nil
+ }
+
+ errCh := make(chan error)
+ dbRequests <- dbRequest{releasedb, errCh}
+ return <-errCh
+}
+
+// runs tasks in background. Acquires database connection first.
+func runTaskInBackground(name string, resources []string, proc task.Process) (task.Task, *task.ResourceConflictError) {
+ return context.TaskList().RunTaskInBackground(name, resources, func(out aptly.Progress, detail *task.Detail) (*task.ProcessReturnValue, error) {
+ err := acquireDatabaseConnection()
+
+ if err != nil {
+ return nil, err
+ }
+
+ defer releaseDatabaseConnection()
+ return proc(out, detail)
+ })
+}
+
+func truthy(value interface{}) bool {
+ if value == nil {
+ return false
+ }
+ switch value.(type) {
+ case string:
+ switch strings.ToLower(value.(string)) {
+ case "n", "no", "f", "false", "0", "off":
+ return false
+ default:
+ return true
+ }
+ case int:
+ return !(value.(int) == 0)
+ case bool:
+ return value.(bool)
+ }
+ return true
+}
+
+func maybeRunTaskInBackground(c *gin.Context, name string, resources []string, proc task.Process) {
+ // Run this task in background if configured globally or per-request
+ background := truthy(c.DefaultQuery("_async", strconv.FormatBool(context.Config().AsyncAPI)))
+ if background {
+ log.Println("Executing task asynchronously")
+ task, conflictErr := runTaskInBackground(name, resources, proc)
+ if conflictErr != nil {
+ c.AbortWithError(409, conflictErr)
+ return
+ }
+ c.JSON(202, task)
+ } else {
+ log.Println("Executing task synchronously")
+ out := context.Progress()
+ detail := task.Detail{}
+ retValue, err := proc(out, &detail)
+ if err != nil {
+ c.AbortWithError(retValue.Code, err)
+ return
+ }
+ if retValue != nil {
+ c.JSON(retValue.Code, retValue.Value)
+ } else {
+ c.JSON(http.StatusOK, nil)
+ }
+ }
+}
+
// Common piece of code to show list of packages,
// with searching & details if requested
-func showPackages(c *gin.Context, reflist *deb.PackageRefList) {
+func showPackages(c *gin.Context, reflist *deb.PackageRefList, collectionFactory *deb.CollectionFactory) {
result := []*deb.Package{}
- list, err := deb.NewPackageListFromRefList(reflist, context.CollectionFactory().PackageCollection(), nil)
+ list, err := deb.NewPackageListFromRefList(reflist, collectionFactory.PackageCollection(), nil)
if err != nil {
c.AbortWithError(404, err)
return
diff --git a/api/api_test.go b/api/api_test.go
new file mode 100644
index 00000000..2e55638e
--- /dev/null
+++ b/api/api_test.go
@@ -0,0 +1,117 @@
+package api
+
+import (
+ "encoding/json"
+ ctx "github.com/aptly-dev/aptly/context"
+ "github.com/gin-gonic/gin"
+ "io"
+ "io/ioutil"
+ "net/http"
+ "net/http/httptest"
+ "os"
+ "testing"
+
+ "github.com/smira/flag"
+
+ . "gopkg.in/check.v1"
+)
+
+func Test(t *testing.T) {
+ TestingT(t)
+}
+
+type ApiSuite struct {
+ context *ctx.AptlyContext
+ flags *flag.FlagSet
+ configFile *os.File
+ router http.Handler
+}
+
+var _ = Suite(&ApiSuite{})
+
+func createTestConfig() *os.File {
+ file, err := ioutil.TempFile("", "aptly")
+ if err != nil {
+ return nil
+ }
+ jsonString, err := json.Marshal(gin.H{
+ "architectures": []string{},
+ })
+ if err != nil {
+ return nil
+ }
+ file.Write(jsonString)
+ return file
+}
+
+func (s *ApiSuite) SetUpSuite(c *C) {
+ file := createTestConfig()
+ c.Assert(file, NotNil)
+ s.configFile = file
+
+ flags := flag.NewFlagSet("fakeFlags", flag.ContinueOnError)
+ flags.Bool("no-lock", false, "dummy")
+ flags.Int("db-open-attempts", 3, "dummy")
+ flags.String("config", s.configFile.Name(), "dummy")
+ flags.String("architectures", "", "dummy")
+ s.flags = flags
+
+ context, err := ctx.NewContext(s.flags)
+ c.Assert(err, IsNil)
+
+ s.context = context
+ s.router = Router(context)
+}
+
+func (s *ApiSuite) TearDownSuite(c *C) {
+ os.Remove(s.configFile.Name())
+ s.context.Shutdown()
+}
+
+func (s *ApiSuite) SetUpTest(c *C) {
+}
+
+func (s *ApiSuite) TearDownTest(c *C) {
+}
+
+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 {
+ return nil, err
+ }
+ req.Header.Add("Content-Type", "application/json")
+ s.router.ServeHTTP(w, req)
+ return w, nil
+}
+
+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.*")
+}
+
+func (s *ApiSuite) TestTruthy(c *C) {
+ c.Check(truthy("no"), Equals, false)
+ c.Check(truthy("n"), Equals, false)
+ c.Check(truthy("off"), Equals, false)
+ c.Check(truthy("false"), Equals, false)
+ c.Check(truthy("0"), Equals, false)
+ c.Check(truthy(false), Equals, false)
+ c.Check(truthy(0), Equals, false)
+
+ c.Check(truthy("y"), Equals, true)
+ c.Check(truthy("yes"), Equals, true)
+ c.Check(truthy("t"), Equals, true)
+ c.Check(truthy("true"), Equals, true)
+ c.Check(truthy("1"), Equals, true)
+ c.Check(truthy(true), Equals, true)
+ c.Check(truthy(1), Equals, true)
+
+ c.Check(truthy(nil), Equals, false)
+
+ c.Check(truthy("foobar"), Equals, true)
+ c.Check(truthy(-1), Equals, true)
+ c.Check(truthy(gin.H{}), Equals, true)
+}
diff --git a/api/db.go b/api/db.go
new file mode 100644
index 00000000..3f8b826d
--- /dev/null
+++ b/api/db.go
@@ -0,0 +1,180 @@
+package api
+
+import (
+ "fmt"
+ "sort"
+
+ "github.com/aptly-dev/aptly/aptly"
+ "github.com/aptly-dev/aptly/deb"
+ "github.com/aptly-dev/aptly/task"
+ "github.com/aptly-dev/aptly/utils"
+ "github.com/gin-gonic/gin"
+)
+
+// POST /api/db/cleanup
+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
+
+ collectionFactory := context.NewCollectionFactory()
+
+ // collect information about referenced packages...
+ existingPackageRefs := deb.NewPackageRefList()
+
+ out.Printf("Loading mirrors, local repos, snapshots and published repos...")
+ err = collectionFactory.RemoteRepoCollection().ForEach(func(repo *deb.RemoteRepo) error {
+ e := collectionFactory.RemoteRepoCollection().LoadComplete(repo)
+ if e != nil {
+ return e
+ }
+ if repo.RefList() != nil {
+ existingPackageRefs = existingPackageRefs.Merge(repo.RefList(), false, true)
+ }
+
+ return nil
+ })
+ if err != nil {
+ return nil, err
+ }
+
+ err = collectionFactory.LocalRepoCollection().ForEach(func(repo *deb.LocalRepo) error {
+ e := collectionFactory.LocalRepoCollection().LoadComplete(repo)
+ if e != nil {
+ return e
+ }
+
+ if repo.RefList() != nil {
+ existingPackageRefs = existingPackageRefs.Merge(repo.RefList(), false, true)
+ }
+
+ return nil
+ })
+ if err != nil {
+ return nil, err
+ }
+
+ err = collectionFactory.SnapshotCollection().ForEach(func(snapshot *deb.Snapshot) error {
+ e := collectionFactory.SnapshotCollection().LoadComplete(snapshot)
+ if e != nil {
+ return e
+ }
+
+ existingPackageRefs = existingPackageRefs.Merge(snapshot.RefList(), false, true)
+
+ return nil
+ })
+ if err != nil {
+ return nil, err
+ }
+
+ err = collectionFactory.PublishedRepoCollection().ForEach(func(published *deb.PublishedRepo) error {
+ if published.SourceKind != deb.SourceLocalRepo {
+ return nil
+ }
+ e := collectionFactory.PublishedRepoCollection().LoadComplete(published, collectionFactory)
+ if e != nil {
+ return e
+ }
+
+ for _, component := range published.Components() {
+ existingPackageRefs = existingPackageRefs.Merge(published.RefList(component), false, true)
+ }
+ return nil
+ })
+ if err != nil {
+ return nil, err
+ }
+
+ // ... and compare it to the list of all packages
+ out.Printf("Loading list of all packages...")
+ allPackageRefs := collectionFactory.PackageCollection().AllPackageRefs()
+
+ toDelete := allPackageRefs.Subtract(existingPackageRefs)
+
+ // delete packages that are no longer referenced
+ out.Printf("Deleting unreferenced packages (%d)...", toDelete.Len())
+
+ // database can't err as collection factory already constructed
+ db, _ := context.Database()
+
+ if toDelete.Len() > 0 {
+ batch := db.CreateBatch()
+ toDelete.ForEach(func(ref []byte) error {
+ collectionFactory.PackageCollection().DeleteByKey(ref, batch)
+ return nil
+ })
+
+ err = batch.Write()
+ if err != nil {
+ return nil, fmt.Errorf("unable to write to DB: %s", err)
+ }
+ }
+
+ // now, build a list of files that should be present in Repository (package pool)
+ out.Printf("Building list of files referenced by packages...")
+ referencedFiles := make([]string, 0, existingPackageRefs.Len())
+
+ err = existingPackageRefs.ForEach(func(key []byte) error {
+ pkg, err2 := collectionFactory.PackageCollection().ByKey(key)
+ if err2 != nil {
+ tail := ""
+ return fmt.Errorf("unable to load package %s: %s%s", string(key), err2, tail)
+ }
+ paths, err2 := pkg.FilepathList(context.PackagePool())
+ if err2 != nil {
+ return err2
+ }
+ referencedFiles = append(referencedFiles, paths...)
+
+ return nil
+ })
+ if err != nil {
+ return nil, err
+ }
+
+ sort.Strings(referencedFiles)
+
+ // build a list of files in the package pool
+ out.Printf("Building list of files in package pool...")
+ existingFiles, err := context.PackagePool().FilepathList(out)
+ if err != nil {
+ return nil, fmt.Errorf("unable to collect file paths: %s", err)
+ }
+
+ // find files which are in the pool but not referenced by packages
+ filesToDelete := utils.StrSlicesSubstract(existingFiles, referencedFiles)
+
+ // delete files that are no longer referenced
+ out.Printf("Deleting unreferenced files (%d)...", len(filesToDelete))
+
+ countFilesToDelete := len(filesToDelete)
+ taskDetail := struct {
+ TotalNumberOfPackagesToDelete int
+ RemainingNumberOfPackagesToDelete int
+ }{
+ countFilesToDelete, countFilesToDelete,
+ }
+ detail.Store(taskDetail)
+
+ if countFilesToDelete > 0 {
+ var size, totalSize int64
+ for _, file := range filesToDelete {
+ size, err = context.PackagePool().Remove(file)
+ if err != nil {
+ return nil, err
+ }
+
+ taskDetail.RemainingNumberOfPackagesToDelete--
+ detail.Store(taskDetail)
+ totalSize += size
+ }
+
+ out.Printf("Disk space freed: %s...", utils.HumanBytes(totalSize))
+ }
+
+ out.Printf("Compacting database...")
+ return nil, db.CompactDB()
+ })
+}
diff --git a/api/gpg.go b/api/gpg.go
new file mode 100644
index 00000000..640e45c7
--- /dev/null
+++ b/api/gpg.go
@@ -0,0 +1,84 @@
+package api
+
+import (
+ "fmt"
+ "io/ioutil"
+ "os"
+ "os/exec"
+ "path/filepath"
+ "strings"
+
+ "github.com/aptly-dev/aptly/pgp"
+ "github.com/gin-gonic/gin"
+)
+
+// POST /api/gpg
+func apiGPGAddKey(c *gin.Context) {
+ var b struct {
+ Keyserver string
+ GpgKeyID string
+ GpgKeyArmor string
+ Keyring string
+ }
+
+ if c.Bind(&b) != nil {
+ return
+ }
+
+ var err error
+ args := []string{"--no-default-keyring"}
+ keyring := "trustedkeys.gpg"
+ if len(b.Keyring) > 0 {
+ keyring = b.Keyring
+ }
+ args = append(args, "--keyring", keyring)
+ if len(b.Keyserver) > 0 {
+ args = append(args, "--keyserver", b.Keyserver)
+ }
+ if len(b.GpgKeyArmor) > 0 {
+ var tempdir string
+ tempdir, err = ioutil.TempDir(os.TempDir(), "aptly")
+ if err != nil {
+ c.AbortWithError(400, err)
+ return
+ }
+ defer os.RemoveAll(tempdir)
+
+ keypath := filepath.Join(tempdir, "key")
+ keyfile, e := os.Create(keypath)
+ if e != nil {
+ c.AbortWithError(400, e)
+ return
+ }
+ if _, e = keyfile.WriteString(b.GpgKeyArmor); e != nil {
+ c.AbortWithError(400, e)
+ }
+ args = append(args, "--import", keypath)
+
+ }
+ if len(b.GpgKeyID) > 0 {
+ keys := strings.Fields(b.GpgKeyID)
+ args = append(args, "--recv-keys")
+ args = append(args, keys...)
+ }
+
+ finder := pgp.GPG1Finder()
+ gpg, _, err := finder.FindGPG()
+ if err != nil {
+ c.AbortWithError(400, err)
+ return
+ }
+
+ // it might happened that we have a situation with an erroneous
+ // gpg command (e.g. when GpgKeyID and GpgKeyArmor is set).
+ // there is no error handling for such as gpg will do this for us
+ cmd := exec.Command(gpg, args...)
+ fmt.Printf("running %s %s\n", gpg, strings.Join(args, " "))
+ cmd.Stdout = os.Stdout
+ if err = cmd.Run(); err != nil {
+ c.AbortWithError(400, err)
+ return
+ }
+
+ c.JSON(200, gin.H{})
+}
diff --git a/api/graph.go b/api/graph.go
index 93d69086..c79b861e 100644
--- a/api/graph.go
+++ b/api/graph.go
@@ -21,17 +21,7 @@ func apiGraph(c *gin.Context) {
ext := c.Params.ByName("ext")
layout := c.Request.URL.Query().Get("layout")
-
- factory := context.CollectionFactory()
-
- factory.RemoteRepoCollection().Lock()
- defer factory.RemoteRepoCollection().Unlock()
- factory.LocalRepoCollection().Lock()
- defer factory.LocalRepoCollection().Unlock()
- factory.SnapshotCollection().Lock()
- defer factory.SnapshotCollection().Unlock()
- factory.PublishedRepoCollection().Lock()
- defer factory.PublishedRepoCollection().Unlock()
+ factory := context.NewCollectionFactory()
graph, err := deb.BuildGraph(factory, layout)
if err != nil {
diff --git a/api/middleware.go b/api/middleware.go
new file mode 100644
index 00000000..10294251
--- /dev/null
+++ b/api/middleware.go
@@ -0,0 +1,103 @@
+package api
+
+import (
+ "fmt"
+ "math"
+ "strconv"
+ "strings"
+ "time"
+
+ "github.com/gin-gonic/gin"
+ "github.com/prometheus/client_golang/prometheus"
+ "github.com/prometheus/client_golang/prometheus/promauto"
+)
+
+var (
+ apiRequestsInFlightGauge = promauto.NewGaugeVec(
+ prometheus.GaugeOpts{
+ Name: "aptly_api_http_requests_in_flight",
+ Help: "Number of concurrent HTTP api requests currently handled.",
+ },
+ []string{"method", "path"},
+ )
+ apiRequestsTotalCounter = promauto.NewCounterVec(
+ prometheus.CounterOpts{
+ Name: "aptly_api_http_requests_total",
+ Help: "Total number of api requests.",
+ },
+ []string{"code", "method", "path"},
+ )
+ apiRequestSizeSummary = promauto.NewSummaryVec(
+ prometheus.SummaryOpts{
+ Name: "aptly_api_http_request_size_bytes",
+ Help: "Api HTTP request size in bytes.",
+ },
+ []string{"code", "method", "path"},
+ )
+ apiResponseSizeSummary = promauto.NewSummaryVec(
+ prometheus.SummaryOpts{
+ Name: "aptly_api_http_response_size_bytes",
+ Help: "Api HTTP response size in bytes.",
+ },
+ []string{"code", "method", "path"},
+ )
+ apiRequestsDurationSummary = promauto.NewSummaryVec(
+ prometheus.SummaryOpts{
+ Name: "aptly_api_http_request_duration_seconds",
+ Help: "Duration of api requests in seconds.",
+ },
+ []string{"code", "method", "path"},
+ )
+)
+
+// Only use base path as label value (e.g.: /api/repos) because of time series cardinality
+// See https://prometheus.io/docs/practices/naming/#labels
+func getBasePath(c *gin.Context) string {
+ return fmt.Sprintf("%s%s", getURLSegment(c.Request.URL.Path, 0), getURLSegment(c.Request.URL.Path, 1))
+}
+
+func getURLSegment(url string, idx int) string {
+ var urlSegments = strings.Split(url, "/")
+
+ // Remove segment at index 0 because it's an empty string
+ var segmentAtIndex = urlSegments[1:cap(urlSegments)][idx]
+ return fmt.Sprintf("/%s", segmentAtIndex)
+}
+
+func instrumentHandlerInFlight(g *prometheus.GaugeVec, pathFunc func(*gin.Context) string) func(*gin.Context) {
+ return func(c *gin.Context) {
+ g.WithLabelValues(c.Request.Method, pathFunc(c)).Inc()
+ defer g.WithLabelValues(c.Request.Method, pathFunc(c)).Dec()
+ c.Next()
+ }
+}
+
+func instrumentHandlerCounter(counter *prometheus.CounterVec, pathFunc func(*gin.Context) string) func(*gin.Context) {
+ return func(c *gin.Context) {
+ c.Next()
+ counter.WithLabelValues(strconv.Itoa(c.Writer.Status()), c.Request.Method, pathFunc(c)).Inc()
+ }
+}
+
+func instrumentHandlerRequestSize(obs prometheus.ObserverVec, pathFunc func(*gin.Context) string) func(*gin.Context) {
+ return func(c *gin.Context) {
+ c.Next()
+ obs.WithLabelValues(strconv.Itoa(c.Writer.Status()), c.Request.Method, pathFunc(c)).Observe(float64(c.Request.ContentLength))
+ }
+}
+
+func instrumentHandlerResponseSize(obs prometheus.ObserverVec, pathFunc func(*gin.Context) string) func(*gin.Context) {
+ return func(c *gin.Context) {
+ c.Next()
+ var responseSize = math.Max(float64(c.Writer.Size()), 0)
+ obs.WithLabelValues(strconv.Itoa(c.Writer.Status()), c.Request.Method, pathFunc(c)).Observe(responseSize)
+ }
+}
+
+func instrumentHandlerDuration(obs prometheus.ObserverVec, pathFunc func(*gin.Context) string) func(*gin.Context) {
+ return func(c *gin.Context) {
+ now := time.Now()
+ c.Next()
+ obs.WithLabelValues(strconv.Itoa(c.Writer.Status()), c.Request.Method, pathFunc(c)).Observe(time.Since(now).Seconds())
+ }
+}
diff --git a/api/mirror.go b/api/mirror.go
new file mode 100644
index 00000000..7775f871
--- /dev/null
+++ b/api/mirror.go
@@ -0,0 +1,556 @@
+package api
+
+import (
+ "fmt"
+ "log"
+ "net/http"
+ "sort"
+ "strings"
+ "sync"
+
+ "github.com/aptly-dev/aptly/aptly"
+ "github.com/aptly-dev/aptly/deb"
+ "github.com/aptly-dev/aptly/pgp"
+ "github.com/aptly-dev/aptly/query"
+ "github.com/aptly-dev/aptly/task"
+ "github.com/gin-gonic/gin"
+)
+
+func getVerifier(ignoreSignatures bool, keyRings []string) (pgp.Verifier, error) {
+ if ignoreSignatures {
+ return nil, nil
+ }
+
+ verifier := context.GetVerifier()
+ for _, keyRing := range keyRings {
+ verifier.AddKeyring(keyRing)
+ }
+
+ err := verifier.InitKeyring()
+ if err != nil {
+ return nil, err
+ }
+
+ return verifier, nil
+}
+
+// GET /api/mirrors
+func apiMirrorsList(c *gin.Context) {
+ collectionFactory := context.NewCollectionFactory()
+ collection := collectionFactory.RemoteRepoCollection()
+
+ result := []*deb.RemoteRepo{}
+ collection.ForEach(func(repo *deb.RemoteRepo) error {
+ result = append(result, repo)
+ return nil
+ })
+
+ c.JSON(200, result)
+}
+
+// POST /api/mirrors
+func apiMirrorsCreate(c *gin.Context) {
+ var err error
+ var b struct {
+ Name string `binding:"required"`
+ ArchiveURL string `binding:"required"`
+ Distribution string
+ Filter string
+ Components []string
+ Architectures []string
+ Keyrings []string
+ DownloadSources bool
+ DownloadUdebs bool
+ DownloadInstaller bool
+ FilterWithDeps bool
+ SkipComponentCheck bool
+ IgnoreSignatures bool
+ }
+
+ b.DownloadSources = context.Config().DownloadSourcePackages
+ b.IgnoreSignatures = context.Config().GpgDisableVerify
+ b.Architectures = context.ArchitecturesList()
+
+ if c.Bind(&b) != nil {
+ return
+ }
+
+ collectionFactory := context.NewCollectionFactory()
+ collection := collectionFactory.RemoteRepoCollection()
+
+ if strings.HasPrefix(b.ArchiveURL, "ppa:") {
+ b.ArchiveURL, b.Distribution, b.Components, err = deb.ParsePPA(b.ArchiveURL, context.Config())
+ if err != nil {
+ c.AbortWithError(400, err)
+ return
+ }
+ }
+
+ if b.Filter != "" {
+ _, err = query.Parse(b.Filter)
+ if err != nil {
+ c.AbortWithError(400, fmt.Errorf("unable to create mirror: %s", err))
+ return
+ }
+ }
+
+ repo, err := deb.NewRemoteRepo(b.Name, b.ArchiveURL, b.Distribution, b.Components, b.Architectures,
+ b.DownloadSources, b.DownloadUdebs, b.DownloadInstaller)
+
+ if err != nil {
+ c.AbortWithError(400, fmt.Errorf("unable to create mirror: %s", err))
+ return
+ }
+
+ repo.Filter = b.Filter
+ repo.FilterWithDeps = b.FilterWithDeps
+ repo.SkipComponentCheck = b.SkipComponentCheck
+ repo.DownloadSources = b.DownloadSources
+ repo.DownloadUdebs = b.DownloadUdebs
+
+ verifier, err := getVerifier(b.IgnoreSignatures, b.Keyrings)
+ if err != nil {
+ c.AbortWithError(400, fmt.Errorf("unable to initialize GPG verifier: %s", err))
+ return
+ }
+
+ downloader := context.NewDownloader(nil)
+ err = repo.Fetch(downloader, verifier)
+ if err != nil {
+ c.AbortWithError(400, fmt.Errorf("unable to fetch mirror: %s", err))
+ return
+ }
+
+ err = collection.Add(repo)
+ if err != nil {
+ c.AbortWithError(500, fmt.Errorf("unable to add mirror: %s", err))
+ return
+ }
+
+ c.JSON(201, repo)
+}
+
+// DELETE /api/mirrors/:name
+func apiMirrorsDrop(c *gin.Context) {
+ name := c.Params.ByName("name")
+ force := c.Request.URL.Query().Get("force") == "1"
+
+ collectionFactory := context.NewCollectionFactory()
+ mirrorCollection := collectionFactory.RemoteRepoCollection()
+ snapshotCollection := collectionFactory.SnapshotCollection()
+
+ repo, err := mirrorCollection.ByName(name)
+ if err != nil {
+ c.AbortWithError(404, fmt.Errorf("unable to drop: %s", err))
+ return
+ }
+
+ resources := []string{string(repo.Key())}
+ taskName := fmt.Sprintf("Delete mirror %s", name)
+ maybeRunTaskInBackground(c, taskName, resources, func(out aptly.Progress, detail *task.Detail) (*task.ProcessReturnValue, error) {
+ err := repo.CheckLock()
+ if err != nil {
+ return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, fmt.Errorf("unable to drop: %v", err)
+ }
+
+ if !force {
+ snapshots := snapshotCollection.ByRemoteRepoSource(repo)
+
+ if len(snapshots) > 0 {
+ return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, fmt.Errorf("won't delete mirror with snapshots, use 'force=1' to override")
+ }
+ }
+
+ err = mirrorCollection.Drop(repo)
+ if err != nil {
+ return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, fmt.Errorf("unable to drop: %v", err)
+ }
+ return &task.ProcessReturnValue{Code: http.StatusNoContent, Value: nil}, nil
+ })
+}
+
+// GET /api/mirrors/:name
+func apiMirrorsShow(c *gin.Context) {
+ collectionFactory := context.NewCollectionFactory()
+ collection := collectionFactory.RemoteRepoCollection()
+
+ name := c.Params.ByName("name")
+ repo, err := collection.ByName(name)
+ if err != nil {
+ c.AbortWithError(404, fmt.Errorf("unable to show: %s", err))
+ return
+ }
+
+ err = collection.LoadComplete(repo)
+ if err != nil {
+ c.AbortWithError(500, fmt.Errorf("unable to show: %s", err))
+ }
+
+ c.JSON(200, repo)
+}
+
+// GET /api/mirrors/:name/packages
+func apiMirrorsPackages(c *gin.Context) {
+ collectionFactory := context.NewCollectionFactory()
+ collection := collectionFactory.RemoteRepoCollection()
+
+ name := c.Params.ByName("name")
+ repo, err := collection.ByName(name)
+ if err != nil {
+ c.AbortWithError(404, fmt.Errorf("unable to show: %s", err))
+ return
+ }
+
+ err = collection.LoadComplete(repo)
+ if err != nil {
+ c.AbortWithError(500, fmt.Errorf("unable to show: %s", err))
+ }
+
+ if repo.LastDownloadDate.IsZero() {
+ c.AbortWithError(404, fmt.Errorf("unable to show package list, mirror hasn't been downloaded yet"))
+ return
+ }
+
+ reflist := repo.RefList()
+ result := []*deb.Package{}
+
+ list, err := deb.NewPackageListFromRefList(reflist, collectionFactory.PackageCollection(), nil)
+ if err != nil {
+ c.AbortWithError(404, err)
+ return
+ }
+
+ queryS := c.Request.URL.Query().Get("q")
+ if queryS != "" {
+ q, err := query.Parse(c.Request.URL.Query().Get("q"))
+ if err != nil {
+ c.AbortWithError(400, err)
+ return
+ }
+
+ withDeps := c.Request.URL.Query().Get("withDeps") == "1"
+ architecturesList := []string{}
+
+ if withDeps {
+ if len(context.ArchitecturesList()) > 0 {
+ architecturesList = context.ArchitecturesList()
+ } else {
+ architecturesList = list.Architectures(false)
+ }
+
+ sort.Strings(architecturesList)
+
+ if len(architecturesList) == 0 {
+ c.AbortWithError(400, fmt.Errorf("unable to determine list of architectures, please specify explicitly"))
+ return
+ }
+ }
+
+ list.PrepareIndex()
+
+ list, err = list.Filter([]deb.PackageQuery{q}, withDeps,
+ nil, context.DependencyOptions(), architecturesList)
+ if err != nil {
+ c.AbortWithError(500, fmt.Errorf("unable to search: %s", err))
+ }
+ }
+
+ if c.Request.URL.Query().Get("format") == "details" {
+ list.ForEach(func(p *deb.Package) error {
+ result = append(result, p)
+ return nil
+ })
+
+ c.JSON(200, result)
+ } else {
+ c.JSON(200, list.Strings())
+ }
+}
+
+// PUT /api/mirrors/:name
+func apiMirrorsUpdate(c *gin.Context) {
+ var (
+ err error
+ remote *deb.RemoteRepo
+ )
+
+ var b struct {
+ Name string
+ ArchiveURL string
+ Filter string
+ Architectures []string
+ Components []string
+ Keyrings []string
+ FilterWithDeps bool
+ DownloadSources bool
+ DownloadUdebs bool
+ SkipComponentCheck bool
+ IgnoreChecksums bool
+ IgnoreSignatures bool
+ ForceUpdate bool
+ SkipExistingPackages bool
+ }
+
+ collectionFactory := context.NewCollectionFactory()
+ collection := collectionFactory.RemoteRepoCollection()
+
+ remote, err = collection.ByName(c.Params.ByName("name"))
+ if err != nil {
+ c.AbortWithError(404, err)
+ return
+ }
+
+ b.Name = remote.Name
+ b.DownloadUdebs = remote.DownloadUdebs
+ b.DownloadSources = remote.DownloadSources
+ b.SkipComponentCheck = remote.SkipComponentCheck
+ b.FilterWithDeps = remote.FilterWithDeps
+ b.Filter = remote.Filter
+ b.Architectures = remote.Architectures
+ b.Components = remote.Components
+
+ log.Printf("%s: Starting mirror update\n", b.Name)
+
+ if c.Bind(&b) != nil {
+ return
+ }
+
+ if b.Name != remote.Name {
+ _, err = collection.ByName(b.Name)
+ if err == nil {
+ c.AbortWithError(409, fmt.Errorf("unable to rename: mirror %s already exists", b.Name))
+ return
+ }
+ }
+
+ if b.DownloadUdebs != remote.DownloadUdebs {
+ if remote.IsFlat() && b.DownloadUdebs {
+ c.AbortWithError(400, fmt.Errorf("unable to update: flat mirrors don't support udebs"))
+ return
+ }
+ }
+
+ if b.ArchiveURL != "" {
+ remote.SetArchiveRoot(b.ArchiveURL)
+ }
+
+ remote.Name = b.Name
+ remote.DownloadUdebs = b.DownloadUdebs
+ remote.DownloadSources = b.DownloadSources
+ remote.SkipComponentCheck = b.SkipComponentCheck
+ remote.FilterWithDeps = b.FilterWithDeps
+ remote.Filter = b.Filter
+ remote.Architectures = b.Architectures
+ remote.Components = b.Components
+
+ verifier, err := getVerifier(b.IgnoreSignatures, b.Keyrings)
+ if err != nil {
+ c.AbortWithError(400, fmt.Errorf("unable to initialize GPG verifier: %s", err))
+ return
+ }
+
+ resources := []string{string(remote.Key())}
+ maybeRunTaskInBackground(c, "Update mirror "+b.Name, resources, func(out aptly.Progress, detail *task.Detail) (*task.ProcessReturnValue, error) {
+
+ downloader := context.NewDownloader(out)
+ err := remote.Fetch(downloader, verifier)
+ if err != nil {
+ return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, fmt.Errorf("unable to update: %s", err)
+ }
+
+ if !b.ForceUpdate {
+ err = remote.CheckLock()
+ if err != nil {
+ return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, fmt.Errorf("unable to update: %s", err)
+ }
+ }
+
+ err = remote.DownloadPackageIndexes(out, downloader, verifier, collectionFactory, b.SkipComponentCheck)
+ if err != nil {
+ return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, fmt.Errorf("unable to update: %s", err)
+ }
+
+ if remote.Filter != "" {
+ var filterQuery deb.PackageQuery
+
+ filterQuery, err = query.Parse(remote.Filter)
+ if err != nil {
+ return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, fmt.Errorf("unable to update: %s", err)
+ }
+
+ _, _, err = remote.ApplyFilter(context.DependencyOptions(), filterQuery, out)
+ if err != nil {
+ return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, fmt.Errorf("unable to update: %s", err)
+ }
+ }
+
+ queue, downloadSize, err := remote.BuildDownloadQueue(context.PackagePool(), collectionFactory.PackageCollection(),
+ collectionFactory.ChecksumCollection(nil), b.SkipExistingPackages)
+ if err != nil {
+ return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, fmt.Errorf("unable to update: %s", err)
+ }
+
+ defer func() {
+ // on any interruption, unlock the mirror
+ e := context.ReOpenDatabase()
+ if e == nil {
+ remote.MarkAsIdle()
+ collection.Update(remote)
+ }
+ }()
+
+ remote.MarkAsUpdating()
+ err = collection.Update(remote)
+ if err != nil {
+ return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, fmt.Errorf("unable to update: %s", err)
+ }
+
+ context.GoContextHandleSignals()
+
+ count := len(queue)
+ taskDetail := struct {
+ TotalDownloadSize int64
+ RemainingDownloadSize int64
+ TotalNumberOfPackages int
+ RemainingNumberOfPackages int
+ }{
+ downloadSize, downloadSize, count, count,
+ }
+ detail.Store(taskDetail)
+
+ downloadQueue := make(chan int)
+ taskFinished := make(chan *deb.PackageDownloadTask)
+
+ var (
+ errors []string
+ errLock sync.Mutex
+ )
+
+ pushError := func(err error) {
+ errLock.Lock()
+ errors = append(errors, err.Error())
+ errLock.Unlock()
+ }
+
+ go func() {
+ for idx := range queue {
+ select {
+ case downloadQueue <- idx:
+ case <-context.Done():
+ return
+ }
+ }
+
+ close(downloadQueue)
+ }()
+
+ // update of task details need to be done in order
+ go func() {
+ for {
+ task, ok := <-taskFinished
+ if !ok {
+ return
+ }
+
+ taskDetail.RemainingDownloadSize -= task.File.Checksums.Size
+ taskDetail.RemainingNumberOfPackages--
+ detail.Store(taskDetail)
+ }
+ }()
+
+ log.Printf("%s: Spawning background processes...\n", b.Name)
+ var wg sync.WaitGroup
+ for i := 0; i < context.Config().DownloadConcurrency; i++ {
+ wg.Add(1)
+ go func() {
+ defer wg.Done()
+ for {
+ select {
+ case idx, ok := <-downloadQueue:
+ if !ok {
+ return
+ }
+
+ task := &queue[idx]
+
+ var e error
+
+ // provision download location
+ task.TempDownPath, e = context.PackagePool().(aptly.LocalPackagePool).GenerateTempPath(task.File.Filename)
+ if e != nil {
+ pushError(e)
+ continue
+ }
+
+ // download file...
+ e = context.Downloader().DownloadWithChecksum(
+ context,
+ remote.PackageURL(task.File.DownloadURL()).String(),
+ task.TempDownPath,
+ &task.File.Checksums,
+ b.IgnoreChecksums)
+ if e != nil {
+ pushError(e)
+ continue
+ }
+
+ task.Done = true
+ taskFinished <- task
+ case <-context.Done():
+ return
+ }
+
+ }
+ }()
+ }
+
+ // Wait for all download goroutines to finish
+ log.Printf("%s: Waiting for background processes to finish...\n", b.Name)
+ wg.Wait()
+ log.Printf("%s: Background processes finished\n", b.Name)
+ close(taskFinished)
+
+ for idx := range queue {
+
+ atask := &queue[idx]
+
+ if !atask.Done {
+ // download not finished yet
+ continue
+ }
+
+ // and import it back to the pool
+ atask.File.PoolPath, err = context.PackagePool().Import(atask.TempDownPath, atask.File.Filename, &atask.File.Checksums, true, collectionFactory.ChecksumCollection(nil))
+ if err != nil {
+ return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, fmt.Errorf("unable to import file: %s", err)
+ }
+
+ // update "attached" files if any
+ for _, additionalAtask := range atask.Additional {
+ additionalAtask.File.PoolPath = atask.File.PoolPath
+ additionalAtask.File.Checksums = atask.File.Checksums
+ }
+ }
+
+ select {
+ case <-context.Done():
+ return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, fmt.Errorf("unable to update: interrupted")
+ default:
+ }
+
+ if len(errors) > 0 {
+ log.Printf("%s: Unable to update because of previous errors\n", b.Name)
+ return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, fmt.Errorf("unable to update: download errors:\n %s", strings.Join(errors, "\n "))
+ }
+
+ log.Printf("%s: Finalizing download\n", b.Name)
+ 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)
+ }
+
+ log.Printf("%s: Mirror updated successfully!\n", b.Name)
+ return &task.ProcessReturnValue{Code: http.StatusNoContent, Value: nil}, nil
+ })
+}
diff --git a/api/mirror_test.go b/api/mirror_test.go
new file mode 100644
index 00000000..645e9fe0
--- /dev/null
+++ b/api/mirror_test.go
@@ -0,0 +1,40 @@
+package api
+
+import (
+ "bytes"
+ "encoding/json"
+
+ "github.com/gin-gonic/gin"
+ . "gopkg.in/check.v1"
+)
+
+type MirrorSuite struct {
+ ApiSuite
+}
+
+var _ = Suite(&MirrorSuite{})
+
+func (s *MirrorSuite) TestGetMirrors(c *C) {
+ response, _ := s.HTTPRequest("GET", "/api/mirrors", nil)
+ c.Check(response.Code, Equals, 200)
+ c.Check(response.Body.String(), Equals, "[]")
+}
+
+func (s *MirrorSuite) TestDeleteMirrorNonExisting(c *C) {
+ response, _ := s.HTTPRequest("DELETE", "/api/mirrors/does-not-exist", nil)
+ c.Check(response.Code, Equals, 404)
+ c.Check(response.Body.String(), Equals, "{\"error\":\"unable to drop: mirror with name does-not-exist not found\"}")
+}
+
+func (s *MirrorSuite) TestCreateMirror(c *C) {
+ c.ExpectFailure("Need to mock downloads")
+ body, err := json.Marshal(gin.H{
+ "Name": "dummy",
+ "ArchiveURL": "foobar",
+ })
+ c.Assert(err, IsNil)
+ response, err := s.HTTPRequest("POST", "/api/mirrors", bytes.NewReader(body))
+ c.Assert(err, IsNil)
+ c.Check(response.Code, Equals, 400)
+ c.Check(response.Body.String(), Equals, "")
+}
diff --git a/api/packages.go b/api/packages.go
index 156cf95a..e560076a 100644
--- a/api/packages.go
+++ b/api/packages.go
@@ -6,7 +6,8 @@ import (
// GET /api/packages/:key
func apiPackagesShow(c *gin.Context) {
- p, err := context.CollectionFactory().PackageCollection().ByKey([]byte(c.Params.ByName("key")))
+ collectionFactory := context.NewCollectionFactory()
+ p, err := collectionFactory.PackageCollection().ByKey([]byte(c.Params.ByName("key")))
if err != nil {
c.AbortWithError(404, err)
return
diff --git a/api/publish.go b/api/publish.go
index 2d3e3918..d2287dbd 100644
--- a/api/publish.go
+++ b/api/publish.go
@@ -2,10 +2,13 @@ package api
import (
"fmt"
+ "net/http"
"strings"
+ "github.com/aptly-dev/aptly/aptly"
"github.com/aptly-dev/aptly/deb"
"github.com/aptly-dev/aptly/pgp"
+ "github.com/aptly-dev/aptly/task"
"github.com/aptly-dev/aptly/utils"
"github.com/gin-gonic/gin"
)
@@ -51,22 +54,13 @@ func parseEscapedPath(path string) string {
// GET /publish
func apiPublishList(c *gin.Context) {
- localCollection := context.CollectionFactory().LocalRepoCollection()
- localCollection.RLock()
- defer localCollection.RUnlock()
-
- snapshotCollection := context.CollectionFactory().SnapshotCollection()
- snapshotCollection.RLock()
- defer snapshotCollection.RUnlock()
-
- collection := context.CollectionFactory().PublishedRepoCollection()
- collection.Lock()
- defer collection.Unlock()
+ collectionFactory := context.NewCollectionFactory()
+ collection := collectionFactory.PublishedRepoCollection()
result := make([]*deb.PublishedRepo, 0, collection.Len())
err := collection.ForEach(func(repo *deb.PublishedRepo) error {
- err := collection.LoadComplete(repo, context.CollectionFactory())
+ err := collection.LoadComplete(repo, collectionFactory)
if err != nil {
return err
}
@@ -102,6 +96,7 @@ func apiPublishRepoOrSnapshot(c *gin.Context) {
ButAutomaticUpgrades string
ForceOverwrite bool
SkipContents *bool
+ SkipBz2 *bool
Architectures []string
Signing SigningOptions
AcquireByHash *bool
@@ -123,17 +118,19 @@ func apiPublishRepoOrSnapshot(c *gin.Context) {
}
var components []string
+ var names []string
var sources []interface{}
+ var resources []string
+ collectionFactory := context.NewCollectionFactory()
if b.SourceKind == "snapshot" {
var snapshot *deb.Snapshot
- snapshotCollection := context.CollectionFactory().SnapshotCollection()
- snapshotCollection.Lock()
- defer snapshotCollection.Unlock()
+ snapshotCollection := collectionFactory.SnapshotCollection()
for _, source := range b.Sources {
components = append(components, source.Component)
+ names = append(names, source.Name)
snapshot, err = snapshotCollection.ByName(source.Name)
if err != nil {
@@ -141,6 +138,7 @@ func apiPublishRepoOrSnapshot(c *gin.Context) {
return
}
+ resources = append(resources, string(snapshot.ResourceKey()))
err = snapshotCollection.LoadComplete(snapshot)
if err != nil {
c.AbortWithError(500, fmt.Errorf("unable to publish: %s", err))
@@ -152,12 +150,11 @@ func apiPublishRepoOrSnapshot(c *gin.Context) {
} else if b.SourceKind == deb.SourceLocalRepo {
var localRepo *deb.LocalRepo
- localCollection := context.CollectionFactory().LocalRepoCollection()
- localCollection.Lock()
- defer localCollection.Unlock()
+ localCollection := collectionFactory.LocalRepoCollection()
for _, source := range b.Sources {
components = append(components, source.Component)
+ names = append(names, source.Name)
localRepo, err = localCollection.ByName(source.Name)
if err != nil {
@@ -165,6 +162,7 @@ func apiPublishRepoOrSnapshot(c *gin.Context) {
return
}
+ resources = append(resources, string(localRepo.Key()))
err = localCollection.LoadComplete(localRepo)
if err != nil {
c.AbortWithError(500, fmt.Errorf("unable to publish: %s", err))
@@ -177,55 +175,68 @@ func apiPublishRepoOrSnapshot(c *gin.Context) {
return
}
- collection := context.CollectionFactory().PublishedRepoCollection()
- collection.Lock()
- defer collection.Unlock()
-
- published, err := deb.NewPublishedRepo(storage, prefix, b.Distribution, b.Architectures, components, sources, context.CollectionFactory())
- if err != nil {
- c.AbortWithError(500, fmt.Errorf("unable to publish: %s", err))
- return
- }
- if b.Origin != "" {
- published.Origin = b.Origin
- }
- if b.NotAutomatic != "" {
- published.NotAutomatic = b.NotAutomatic
- }
- if b.ButAutomaticUpgrades != "" {
- published.ButAutomaticUpgrades = b.ButAutomaticUpgrades
- }
- published.Label = b.Label
-
- published.SkipContents = context.Config().SkipContentsPublishing
- if b.SkipContents != nil {
- published.SkipContents = *b.SkipContents
- }
-
- if b.AcquireByHash != nil {
- published.AcquireByHash = *b.AcquireByHash
- }
-
- duplicate := collection.CheckDuplicate(published)
- if duplicate != nil {
- context.CollectionFactory().PublishedRepoCollection().LoadComplete(duplicate, context.CollectionFactory())
- c.AbortWithError(400, fmt.Errorf("prefix/distribution already used by another published repo: %s", duplicate))
- return
- }
-
- err = published.Publish(context.PackagePool(), context, context.CollectionFactory(), signer, nil, b.ForceOverwrite)
+ published, err := deb.NewPublishedRepo(storage, prefix, b.Distribution, b.Architectures, components, sources, collectionFactory)
if err != nil {
c.AbortWithError(500, fmt.Errorf("unable to publish: %s", err))
return
}
- err = collection.Add(published)
- if err != nil {
- c.AbortWithError(500, fmt.Errorf("unable to save to DB: %s", err))
- return
- }
+ resources = append(resources, string(published.Key()))
+ collection := collectionFactory.PublishedRepoCollection()
- c.JSON(201, published)
+ taskName := fmt.Sprintf("Publish %s: %s", b.SourceKind, strings.Join(names, ", "))
+ maybeRunTaskInBackground(c, taskName, resources, func(out aptly.Progress, detail *task.Detail) (*task.ProcessReturnValue, error) {
+ taskDetail := task.PublishDetail{
+ Detail: detail,
+ }
+ publishOutput := &task.PublishOutput{
+ Progress: out,
+ PublishDetail: taskDetail,
+ }
+
+ if b.Origin != "" {
+ published.Origin = b.Origin
+ }
+ if b.NotAutomatic != "" {
+ published.NotAutomatic = b.NotAutomatic
+ }
+ if b.ButAutomaticUpgrades != "" {
+ published.ButAutomaticUpgrades = b.ButAutomaticUpgrades
+ }
+ published.Label = b.Label
+
+ published.SkipContents = context.Config().SkipContentsPublishing
+ if b.SkipContents != nil {
+ published.SkipContents = *b.SkipContents
+ }
+
+ published.SkipBz2 = context.Config().SkipBz2Publishing
+ if b.SkipContents != nil {
+ published.SkipBz2 = *b.SkipBz2
+ }
+
+ if b.AcquireByHash != nil {
+ published.AcquireByHash = *b.AcquireByHash
+ }
+
+ duplicate := collection.CheckDuplicate(published)
+ if duplicate != nil {
+ 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)
+ }
+
+ err := published.Publish(context.PackagePool(), context, collectionFactory, signer, publishOutput, b.ForceOverwrite)
+ if err != nil {
+ return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, fmt.Errorf("unable to publish: %s", err)
+ }
+
+ err = collection.Add(published)
+ if err != nil {
+ return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, fmt.Errorf("unable to save to DB: %s", err)
+ }
+
+ return &task.ProcessReturnValue{Code: http.StatusCreated, Value: published}, nil
+ })
}
// PUT /publish/:prefix/:distribution
@@ -238,6 +249,7 @@ func apiPublishUpdateSwitch(c *gin.Context) {
ForceOverwrite bool
Signing SigningOptions
SkipContents *bool
+ SkipBz2 *bool
SkipCleanup *bool
Snapshots []struct {
Component string `binding:"required"`
@@ -256,31 +268,23 @@ func apiPublishUpdateSwitch(c *gin.Context) {
return
}
- // published.LoadComplete would touch local repo collection
- localRepoCollection := context.CollectionFactory().LocalRepoCollection()
- localRepoCollection.Lock()
- defer localRepoCollection.Unlock()
-
- snapshotCollection := context.CollectionFactory().SnapshotCollection()
- snapshotCollection.Lock()
- defer snapshotCollection.Unlock()
-
- collection := context.CollectionFactory().PublishedRepoCollection()
- collection.Lock()
- defer collection.Unlock()
+ collectionFactory := context.NewCollectionFactory()
+ collection := collectionFactory.PublishedRepoCollection()
published, err := collection.ByStoragePrefixDistribution(storage, prefix, distribution)
if err != nil {
c.AbortWithError(404, fmt.Errorf("unable to update: %s", err))
return
}
- err = collection.LoadComplete(published, context.CollectionFactory())
+ err = collection.LoadComplete(published, collectionFactory)
if err != nil {
c.AbortWithError(500, fmt.Errorf("unable to update: %s", err))
return
}
var updatedComponents []string
+ var updatedSnapshots []string
+ var resources []string
if published.SourceKind == deb.SourceLocalRepo {
if len(b.Snapshots) > 0 {
@@ -299,6 +303,7 @@ func apiPublishUpdateSwitch(c *gin.Context) {
return
}
+ snapshotCollection := collectionFactory.SnapshotCollection()
snapshot, err2 := snapshotCollection.ByName(snapshotInfo.Name)
if err2 != nil {
c.AbortWithError(404, err2)
@@ -313,6 +318,7 @@ func apiPublishUpdateSwitch(c *gin.Context) {
published.UpdateSnapshot(snapshotInfo.Component, snapshot)
updatedComponents = append(updatedComponents, snapshotInfo.Component)
+ updatedSnapshots = append(updatedSnapshots, snapshot.Name)
}
} else {
c.AbortWithError(500, fmt.Errorf("unknown published repository type"))
@@ -323,32 +329,37 @@ func apiPublishUpdateSwitch(c *gin.Context) {
published.SkipContents = *b.SkipContents
}
+ if b.SkipBz2 != nil {
+ published.SkipBz2 = *b.SkipBz2
+ }
+
if b.AcquireByHash != nil {
published.AcquireByHash = *b.AcquireByHash
}
- err = published.Publish(context.PackagePool(), context, context.CollectionFactory(), signer, nil, b.ForceOverwrite)
- if err != nil {
- c.AbortWithError(500, fmt.Errorf("unable to update: %s", err))
- return
- }
-
- err = collection.Update(published)
- if err != nil {
- c.AbortWithError(500, fmt.Errorf("unable to save to DB: %s", err))
- return
- }
-
- if b.SkipCleanup == nil || !*b.SkipCleanup {
- err = collection.CleanupPrefixComponentFiles(published.Prefix, updatedComponents,
- context.GetPublishedStorage(storage), context.CollectionFactory(), nil)
+ resources = append(resources, string(published.Key()))
+ taskName := fmt.Sprintf("Update published %s (%s): %s", published.SourceKind, strings.Join(updatedComponents, " "), strings.Join(updatedSnapshots, ", "))
+ maybeRunTaskInBackground(c, taskName, resources, func(out aptly.Progress, detail *task.Detail) (*task.ProcessReturnValue, error) {
+ err := published.Publish(context.PackagePool(), context, collectionFactory, signer, out, b.ForceOverwrite)
if err != nil {
- c.AbortWithError(500, fmt.Errorf("unable to update: %s", err))
- return
+ return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, fmt.Errorf("unable to update: %s", err)
}
- }
- c.JSON(200, published)
+ err = collection.Update(published)
+ if err != nil {
+ return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, fmt.Errorf("unable to save to DB: %s", err)
+ }
+
+ if b.SkipCleanup == nil || !*b.SkipCleanup {
+ err = collection.CleanupPrefixComponentFiles(published.Prefix, updatedComponents,
+ context.GetPublishedStorage(storage), 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.StatusOK, Value: published}, nil
+ })
}
// DELETE /publish/:prefix/:distribution
@@ -360,21 +371,25 @@ func apiPublishDrop(c *gin.Context) {
storage, prefix := deb.ParsePrefix(param)
distribution := c.Params.ByName("distribution")
- // published.LoadComplete would touch local repo collection
- localRepoCollection := context.CollectionFactory().LocalRepoCollection()
- localRepoCollection.Lock()
- defer localRepoCollection.Unlock()
+ collectionFactory := context.NewCollectionFactory()
+ collection := collectionFactory.PublishedRepoCollection()
- collection := context.CollectionFactory().PublishedRepoCollection()
- collection.Lock()
- defer collection.Unlock()
-
- err := collection.Remove(context, storage, prefix, distribution,
- context.CollectionFactory(), context.Progress(), force, skipCleanup)
+ published, err := collection.ByStoragePrefixDistribution(storage, prefix, distribution)
if err != nil {
- c.AbortWithError(500, fmt.Errorf("unable to drop: %s", err))
+ c.AbortWithError(http.StatusInternalServerError, fmt.Errorf("unable to drop: %s", err))
return
}
- c.JSON(200, gin.H{})
+ resources := []string{string(published.Key())}
+
+ taskName := fmt.Sprintf("Delete published %s (%s)", prefix, distribution)
+ maybeRunTaskInBackground(c, taskName, resources, func(out aptly.Progress, detail *task.Detail) (*task.ProcessReturnValue, error) {
+ err := collection.Remove(context, storage, prefix, distribution,
+ collectionFactory, out, force, skipCleanup)
+ if err != nil {
+ return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, fmt.Errorf("unable to drop: %s", err)
+ }
+
+ return &task.ProcessReturnValue{Code: http.StatusOK, Value: gin.H{}}, nil
+ })
}
diff --git a/api/repos.go b/api/repos.go
index a5dd39d4..24b2530d 100644
--- a/api/repos.go
+++ b/api/repos.go
@@ -2,13 +2,17 @@ package api
import (
"fmt"
+ "net/http"
"os"
"path/filepath"
+ "strings"
+ "text/template"
"github.com/aptly-dev/aptly/aptly"
"github.com/aptly-dev/aptly/database"
"github.com/aptly-dev/aptly/deb"
"github.com/aptly-dev/aptly/query"
+ "github.com/aptly-dev/aptly/task"
"github.com/aptly-dev/aptly/utils"
"github.com/gin-gonic/gin"
)
@@ -17,11 +21,9 @@ import (
func apiReposList(c *gin.Context) {
result := []*deb.LocalRepo{}
- collection := context.CollectionFactory().LocalRepoCollection()
- collection.RLock()
- defer collection.RUnlock()
-
- context.CollectionFactory().LocalRepoCollection().ForEach(func(r *deb.LocalRepo) error {
+ collectionFactory := context.NewCollectionFactory()
+ collection := collectionFactory.LocalRepoCollection()
+ collection.ForEach(func(r *deb.LocalRepo) error {
result = append(result, r)
return nil
})
@@ -46,11 +48,9 @@ func apiReposCreate(c *gin.Context) {
repo.DefaultComponent = b.DefaultComponent
repo.DefaultDistribution = b.DefaultDistribution
- collection := context.CollectionFactory().LocalRepoCollection()
- collection.Lock()
- defer collection.Unlock()
-
- err := context.CollectionFactory().LocalRepoCollection().Add(repo)
+ collectionFactory := context.NewCollectionFactory()
+ collection := collectionFactory.LocalRepoCollection()
+ err := collection.Add(repo)
if err != nil {
c.AbortWithError(400, err)
return
@@ -62,6 +62,7 @@ func apiReposCreate(c *gin.Context) {
// PUT /api/repos/:name
func apiReposEdit(c *gin.Context) {
var b struct {
+ Name *string
Comment *string
DefaultDistribution *string
DefaultComponent *string
@@ -71,9 +72,8 @@ func apiReposEdit(c *gin.Context) {
return
}
- collection := context.CollectionFactory().LocalRepoCollection()
- collection.Lock()
- defer collection.Unlock()
+ collectionFactory := context.NewCollectionFactory()
+ collection := collectionFactory.LocalRepoCollection()
repo, err := collection.ByName(c.Params.ByName("name"))
if err != nil {
@@ -81,6 +81,15 @@ func apiReposEdit(c *gin.Context) {
return
}
+ if b.Name != nil {
+ _, err := collection.ByName(*b.Name)
+ if err == nil {
+ // already exists
+ c.AbortWithError(404, err)
+ return
+ }
+ repo.Name = *b.Name
+ }
if b.Comment != nil {
repo.Comment = *b.Comment
}
@@ -102,9 +111,8 @@ func apiReposEdit(c *gin.Context) {
// GET /api/repos/:name
func apiReposShow(c *gin.Context) {
- collection := context.CollectionFactory().LocalRepoCollection()
- collection.RLock()
- defer collection.RUnlock()
+ collectionFactory := context.NewCollectionFactory()
+ collection := collectionFactory.LocalRepoCollection()
repo, err := collection.ByName(c.Params.ByName("name"))
if err != nil {
@@ -118,53 +126,42 @@ func apiReposShow(c *gin.Context) {
// DELETE /api/repos/:name
func apiReposDrop(c *gin.Context) {
force := c.Request.URL.Query().Get("force") == "1"
+ name := c.Params.ByName("name")
- collection := context.CollectionFactory().LocalRepoCollection()
- collection.Lock()
- defer collection.Unlock()
+ collectionFactory := context.NewCollectionFactory()
+ collection := collectionFactory.LocalRepoCollection()
+ snapshotCollection := collectionFactory.SnapshotCollection()
+ publishedCollection := collectionFactory.PublishedRepoCollection()
- snapshotCollection := context.CollectionFactory().SnapshotCollection()
- snapshotCollection.RLock()
- defer snapshotCollection.RUnlock()
-
- publishedCollection := context.CollectionFactory().PublishedRepoCollection()
- publishedCollection.RLock()
- defer publishedCollection.RUnlock()
-
- repo, err := collection.ByName(c.Params.ByName("name"))
+ repo, err := collection.ByName(name)
if err != nil {
c.AbortWithError(404, err)
return
}
- published := publishedCollection.ByLocalRepo(repo)
- if len(published) > 0 {
- c.AbortWithError(409, fmt.Errorf("unable to drop, local repo is published"))
- return
- }
-
- if !force {
- snapshots := snapshotCollection.ByLocalRepoSource(repo)
- if len(snapshots) > 0 {
- c.AbortWithError(409, fmt.Errorf("unable to drop, local repo has snapshots, use ?force=1 to override"))
- return
+ resources := []string{string(repo.Key())}
+ taskName := fmt.Sprintf("Delete repo %s", name)
+ maybeRunTaskInBackground(c, taskName, resources, func(out aptly.Progress, detail *task.Detail) (*task.ProcessReturnValue, error) {
+ published := publishedCollection.ByLocalRepo(repo)
+ if len(published) > 0 {
+ return &task.ProcessReturnValue{Code: http.StatusConflict, Value: nil}, fmt.Errorf("unable to drop, local repo is published")
}
- }
- err = collection.Drop(repo)
- if err != nil {
- c.AbortWithError(500, err)
- return
- }
+ if !force {
+ snapshots := snapshotCollection.ByLocalRepoSource(repo)
+ if len(snapshots) > 0 {
+ return &task.ProcessReturnValue{Code: http.StatusConflict, Value: nil}, fmt.Errorf("unable to drop, local repo has snapshots, use ?force=1 to override")
+ }
+ }
- c.JSON(200, gin.H{})
+ return &task.ProcessReturnValue{Code: http.StatusOK, Value: gin.H{}}, collection.Drop(repo)
+ })
}
// GET /api/repos/:name/packages
func apiReposPackagesShow(c *gin.Context) {
- collection := context.CollectionFactory().LocalRepoCollection()
- collection.Lock()
- defer collection.Unlock()
+ collectionFactory := context.NewCollectionFactory()
+ collection := collectionFactory.LocalRepoCollection()
repo, err := collection.ByName(c.Params.ByName("name"))
if err != nil {
@@ -178,11 +175,11 @@ func apiReposPackagesShow(c *gin.Context) {
return
}
- showPackages(c, repo.RefList())
+ showPackages(c, repo.RefList(), collectionFactory)
}
// Handler for both add and delete
-func apiReposPackagesAddDelete(c *gin.Context, cb func(list *deb.PackageList, p *deb.Package) error) {
+func apiReposPackagesAddDelete(c *gin.Context, taskNamePrefix string, cb func(list *deb.PackageList, p *deb.Package, out aptly.Progress) error) {
var b struct {
PackageRefs []string
}
@@ -191,9 +188,8 @@ func apiReposPackagesAddDelete(c *gin.Context, cb func(list *deb.PackageList, p
return
}
- collection := context.CollectionFactory().LocalRepoCollection()
- collection.Lock()
- defer collection.Unlock()
+ collectionFactory := context.NewCollectionFactory()
+ collection := collectionFactory.LocalRepoCollection()
repo, err := collection.ByName(c.Params.ByName("name"))
if err != nil {
@@ -207,54 +203,54 @@ func apiReposPackagesAddDelete(c *gin.Context, cb func(list *deb.PackageList, p
return
}
- list, err := deb.NewPackageListFromRefList(repo.RefList(), context.CollectionFactory().PackageCollection(), nil)
- if err != nil {
- c.AbortWithError(500, err)
- return
- }
-
- // verify package refs and build package list
- for _, ref := range b.PackageRefs {
- var p *deb.Package
-
- p, err = context.CollectionFactory().PackageCollection().ByKey([]byte(ref))
+ resources := []string{string(repo.Key())}
+ maybeRunTaskInBackground(c, taskNamePrefix+repo.Name, resources, func(out aptly.Progress, detail *task.Detail) (*task.ProcessReturnValue, error) {
+ out.Printf("Loading packages...\n")
+ list, err := deb.NewPackageListFromRefList(repo.RefList(), collectionFactory.PackageCollection(), nil)
if err != nil {
- if err == database.ErrNotFound {
- c.AbortWithError(404, fmt.Errorf("package %s: %s", ref, err))
- } else {
- c.AbortWithError(500, err)
+ return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, err
+ }
+
+ // verify package refs and build package list
+ for _, ref := range b.PackageRefs {
+ var p *deb.Package
+
+ p, err = collectionFactory.PackageCollection().ByKey([]byte(ref))
+ if err != nil {
+ if err == database.ErrNotFound {
+ return &task.ProcessReturnValue{Code: http.StatusNotFound, Value: nil}, fmt.Errorf("packages %s: %s", ref, err)
+ }
+
+ return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, err
+ }
+ err = cb(list, p, out)
+ if err != nil {
+ return &task.ProcessReturnValue{Code: http.StatusBadRequest, Value: nil}, err
}
- return
}
- err = cb(list, p)
+
+ repo.UpdateRefList(deb.NewPackageRefListFromPackageList(list))
+
+ err = collectionFactory.LocalRepoCollection().Update(repo)
if err != nil {
- c.AbortWithError(400, err)
- return
+ return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, fmt.Errorf("unable to save: %s", err)
}
- }
-
- repo.UpdateRefList(deb.NewPackageRefListFromPackageList(list))
-
- err = context.CollectionFactory().LocalRepoCollection().Update(repo)
- if err != nil {
- c.AbortWithError(500, fmt.Errorf("unable to save: %s", err))
- return
- }
-
- c.JSON(200, repo)
-
+ return &task.ProcessReturnValue{Code: http.StatusOK, Value: repo}, nil
+ })
}
// POST /repos/:name/packages
func apiReposPackagesAdd(c *gin.Context) {
- apiReposPackagesAddDelete(c, func(list *deb.PackageList, p *deb.Package) error {
+ apiReposPackagesAddDelete(c, "Add packages to repo ", func(list *deb.PackageList, p *deb.Package, out aptly.Progress) error {
+ out.Printf("Adding package %s\n", p.Name)
return list.Add(p)
})
}
// DELETE /repos/:name/packages
func apiReposPackagesDelete(c *gin.Context) {
- apiReposPackagesAddDelete(c, func(list *deb.PackageList, p *deb.Package) error {
+ apiReposPackagesAddDelete(c, "Delete packages from repo ", func(list *deb.PackageList, p *deb.Package, out aptly.Progress) error {
+ out.Printf("Removing package %s\n", p.Name)
list.Remove(p)
return nil
})
@@ -275,17 +271,18 @@ func apiReposPackageFromDir(c *gin.Context) {
return
}
+ dirParam := c.Params.ByName("dir")
fileParam := c.Params.ByName("file")
if fileParam != "" && !verifyPath(fileParam) {
c.AbortWithError(400, fmt.Errorf("wrong file"))
return
}
- collection := context.CollectionFactory().LocalRepoCollection()
- collection.Lock()
- defer collection.Unlock()
+ collectionFactory := context.NewCollectionFactory()
+ collection := collectionFactory.LocalRepoCollection()
- repo, err := collection.ByName(c.Params.ByName("name"))
+ name := c.Params.ByName("name")
+ repo, err := collection.ByName(name)
if err != nil {
c.AbortWithError(404, err)
return
@@ -297,75 +294,91 @@ func apiReposPackageFromDir(c *gin.Context) {
return
}
- verifier := context.GetVerifier()
-
- var (
- sources []string
- packageFiles, failedFiles []string
- otherFiles []string
- processedFiles, failedFiles2 []string
- reporter = &aptly.RecordingResultReporter{
- Warnings: []string{},
- AddedLines: []string{},
- RemovedLines: []string{},
- }
- list *deb.PackageList
- )
-
+ var taskName string
+ var sources []string
if fileParam == "" {
- sources = []string{filepath.Join(context.UploadPath(), c.Params.ByName("dir"))}
+ taskName = fmt.Sprintf("Add packages from dir %s to repo %s", dirParam, name)
+ sources = []string{filepath.Join(context.UploadPath(), dirParam)}
} else {
- sources = []string{filepath.Join(context.UploadPath(), c.Params.ByName("dir"), c.Params.ByName("file"))}
+ sources = []string{filepath.Join(context.UploadPath(), dirParam, fileParam)}
+ taskName = fmt.Sprintf("Add package %s from dir %s to repo %s", fileParam, dirParam, name)
}
- packageFiles, otherFiles, failedFiles = deb.CollectPackageFiles(sources, reporter)
+ resources := []string{string(repo.Key())}
+ resources = append(resources, sources...)
+ maybeRunTaskInBackground(c, taskName, resources, func(out aptly.Progress, detail *task.Detail) (*task.ProcessReturnValue, error) {
+ verifier := context.GetVerifier()
- list, err = deb.NewPackageListFromRefList(repo.RefList(), context.CollectionFactory().PackageCollection(), nil)
- if err != nil {
- c.AbortWithError(500, fmt.Errorf("unable to load packages: %s", err))
- return
- }
-
- processedFiles, failedFiles2, err = deb.ImportPackageFiles(list, packageFiles, forceReplace, verifier, context.PackagePool(),
- context.CollectionFactory().PackageCollection(), reporter, nil, context.CollectionFactory().ChecksumCollection())
- failedFiles = append(failedFiles, failedFiles2...)
-
- processedFiles = append(processedFiles, otherFiles...)
-
- if err != nil {
- c.AbortWithError(500, fmt.Errorf("unable to import package files: %s", err))
- return
- }
-
- repo.UpdateRefList(deb.NewPackageRefListFromPackageList(list))
-
- err = context.CollectionFactory().LocalRepoCollection().Update(repo)
- if err != nil {
- c.AbortWithError(500, fmt.Errorf("unable to save: %s", err))
- return
- }
-
- if !noRemove {
- processedFiles = utils.StrSliceDeduplicate(processedFiles)
-
- for _, file := range processedFiles {
- err := os.Remove(file)
- if err != nil {
- reporter.Warning("unable to remove file %s: %s", file, err)
+ var (
+ packageFiles, failedFiles []string
+ otherFiles []string
+ processedFiles, failedFiles2 []string
+ reporter = &aptly.RecordingResultReporter{
+ Warnings: []string{},
+ AddedLines: []string{},
+ RemovedLines: []string{},
}
+ list *deb.PackageList
+ )
+
+ packageFiles, otherFiles, failedFiles = deb.CollectPackageFiles(sources, reporter)
+
+ list, err := deb.NewPackageListFromRefList(repo.RefList(), collectionFactory.PackageCollection(), nil)
+ if err != nil {
+ return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, fmt.Errorf("unable to load packages: %s", err)
}
- // atempt to remove dir, if it fails, that's fine: probably it's not empty
- os.Remove(filepath.Join(context.UploadPath(), c.Params.ByName("dir")))
- }
+ processedFiles, failedFiles2, err = deb.ImportPackageFiles(list, packageFiles, forceReplace, verifier, context.PackagePool(),
+ collectionFactory.PackageCollection(), reporter, nil, collectionFactory.ChecksumCollection)
+ failedFiles = append(failedFiles, failedFiles2...)
+ processedFiles = append(processedFiles, otherFiles...)
- if failedFiles == nil {
- failedFiles = []string{}
- }
+ if err != nil {
+ return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, fmt.Errorf("unable to import package files: %s", err)
+ }
- c.JSON(200, gin.H{
- "Report": reporter,
- "FailedFiles": failedFiles,
+ repo.UpdateRefList(deb.NewPackageRefListFromPackageList(list))
+
+ err = collectionFactory.LocalRepoCollection().Update(repo)
+ if err != nil {
+ return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, fmt.Errorf("unable to save: %s", err)
+ }
+
+ if !noRemove {
+ processedFiles = utils.StrSliceDeduplicate(processedFiles)
+
+ for _, file := range processedFiles {
+ err := os.Remove(file)
+ if err != nil {
+ reporter.Warning("unable to remove file %s: %s", file, err)
+ }
+ }
+
+ // atempt to remove dir, if it fails, that's fine: probably it's not empty
+ os.Remove(filepath.Join(context.UploadPath(), dirParam))
+ }
+
+ if failedFiles == nil {
+ failedFiles = []string{}
+ }
+
+ if len(reporter.AddedLines) > 0 {
+ out.Printf("Added: %s\n", strings.Join(reporter.AddedLines, ", "))
+ }
+ if len(reporter.RemovedLines) > 0 {
+ out.Printf("Removed: %s\n", strings.Join(reporter.RemovedLines, ", "))
+ }
+ if len(reporter.Warnings) > 0 {
+ out.Printf("Warnings: %s\n", strings.Join(reporter.Warnings, ", "))
+ }
+ if len(failedFiles) > 0 {
+ out.Printf("Failed files: %s\n", strings.Join(failedFiles, ", "))
+ }
+
+ return &task.ProcessReturnValue{Code: http.StatusOK, Value: gin.H{
+ "Report": reporter,
+ "FailedFiles": failedFiles,
+ }}, nil
})
}
@@ -383,62 +396,100 @@ func apiReposIncludePackageFromDir(c *gin.Context) {
ignoreSignature := c.Request.URL.Query().Get("ignoreSignature") == "1"
repoTemplateString := c.Params.ByName("name")
+ collectionFactory := context.NewCollectionFactory()
if !verifyDir(c) {
return
}
+ var sources []string
+ var taskName string
+ dirParam := c.Params.ByName("dir")
fileParam := c.Params.ByName("file")
if fileParam != "" && !verifyPath(fileParam) {
c.AbortWithError(400, fmt.Errorf("wrong file"))
return
}
- var (
- err error
- verifier = context.GetVerifier()
- sources, changesFiles []string
- failedFiles, failedFiles2 []string
- reporter = &aptly.RecordingResultReporter{
- Warnings: []string{},
- AddedLines: []string{},
- RemovedLines: []string{},
- }
- )
-
if fileParam == "" {
- sources = []string{filepath.Join(context.UploadPath(), c.Params.ByName("dir"))}
+ taskName = fmt.Sprintf("Include packages from changes files in dir %s to repo matching template %s", dirParam, repoTemplateString)
+ sources = []string{filepath.Join(context.UploadPath(), dirParam)}
} else {
- sources = []string{filepath.Join(context.UploadPath(), c.Params.ByName("dir"), c.Params.ByName("file"))}
+ taskName = fmt.Sprintf("Include packages from changes file %s from dir %s to repo matching template %s", fileParam, dirParam, repoTemplateString)
+ sources = []string{filepath.Join(context.UploadPath(), dirParam, fileParam)}
}
- localRepoCollection := context.CollectionFactory().LocalRepoCollection()
- localRepoCollection.Lock()
- defer localRepoCollection.Unlock()
-
- changesFiles, failedFiles = deb.CollectChangesFiles(sources, reporter)
- _, failedFiles2, err = deb.ImportChangesFiles(
- changesFiles, reporter, acceptUnsigned, ignoreSignature, forceReplace, noRemoveFiles, verifier,
- repoTemplateString, context.Progress(), localRepoCollection, context.CollectionFactory().PackageCollection(),
- context.PackagePool(), context.CollectionFactory().ChecksumCollection(), nil, query.Parse)
- failedFiles = append(failedFiles, failedFiles2...)
-
+ repoTemplate, err := template.New("repo").Parse(repoTemplateString)
if err != nil {
- c.AbortWithError(500, fmt.Errorf("unable to import changes files: %s", err))
+ c.AbortWithError(400, fmt.Errorf("error parsing repo template: %s", err))
return
}
- if !noRemoveFiles {
- // atempt to remove dir, if it fails, that's fine: probably it's not empty
- os.Remove(filepath.Join(context.UploadPath(), c.Params.ByName("dir")))
- }
+ var resources []string
+ if len(repoTemplate.Tree.Root.Nodes) > 1 {
+ resources = append(resources, task.AllLocalReposResourcesKey)
+ } else {
+ // repo template string is simple text so only use resource key of specific repository
+ repo, err := collectionFactory.LocalRepoCollection().ByName(repoTemplateString)
+ if err != nil {
+ c.AbortWithError(404, err)
+ return
+ }
- if failedFiles == nil {
- failedFiles = []string{}
+ resources = append(resources, string(repo.Key()))
}
+ resources = append(resources, sources...)
+
+ maybeRunTaskInBackground(c, taskName, resources, func(out aptly.Progress, detail *task.Detail) (*task.ProcessReturnValue, error) {
+ var (
+ err error
+ verifier = context.GetVerifier()
+ changesFiles []string
+ failedFiles, failedFiles2 []string
+ reporter = &aptly.RecordingResultReporter{
+ Warnings: []string{},
+ AddedLines: []string{},
+ RemovedLines: []string{},
+ }
+ )
+
+ changesFiles, failedFiles = deb.CollectChangesFiles(sources, reporter)
+ _, failedFiles2, err = deb.ImportChangesFiles(
+ changesFiles, reporter, acceptUnsigned, ignoreSignature, forceReplace, noRemoveFiles, verifier,
+ repoTemplate, context.Progress(), collectionFactory.LocalRepoCollection(), collectionFactory.PackageCollection(),
+ context.PackagePool(), collectionFactory.ChecksumCollection, nil, query.Parse)
+ failedFiles = append(failedFiles, failedFiles2...)
+
+ if err != nil {
+ return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, fmt.Errorf("unable to import changes files: %s", err)
+ }
+
+ if !noRemoveFiles {
+ // atempt to remove dir, if it fails, that's fine: probably it's not empty
+ os.Remove(filepath.Join(context.UploadPath(), dirParam))
+ }
+
+ if failedFiles == nil {
+ failedFiles = []string{}
+ }
+
+ if len(reporter.AddedLines) > 0 {
+ out.Printf("Added: %s\n", strings.Join(reporter.AddedLines, ", "))
+ }
+ if len(reporter.RemovedLines) > 0 {
+ out.Printf("Removed: %s\n", strings.Join(reporter.RemovedLines, ", "))
+ }
+ if len(reporter.Warnings) > 0 {
+ out.Printf("Warnings: %s\n", strings.Join(reporter.Warnings, ", "))
+ }
+ if len(failedFiles) > 0 {
+ out.Printf("Failed files: %s\n", strings.Join(failedFiles, ", "))
+ }
+
+ return &task.ProcessReturnValue{Code: http.StatusOK, Value: gin.H{
+ "Report": reporter,
+ "FailedFiles": failedFiles,
+ }}, nil
- c.JSON(200, gin.H{
- "Report": reporter,
- "FailedFiles": failedFiles,
})
}
diff --git a/api/router.go b/api/router.go
index 0e1aa3bd..d3b4e98f 100644
--- a/api/router.go
+++ b/api/router.go
@@ -5,30 +5,46 @@ import (
ctx "github.com/aptly-dev/aptly/context"
"github.com/gin-gonic/gin"
+ "github.com/prometheus/client_golang/prometheus/promhttp"
)
var context *ctx.AptlyContext
+func apiMetricsGet() gin.HandlerFunc {
+ return func(c *gin.Context) {
+ promhttp.Handler().ServeHTTP(c.Writer, c.Request)
+ }
+}
+
// Router returns prebuilt with routes http.Handler
func Router(c *ctx.AptlyContext) http.Handler {
context = c
router := gin.Default()
+ router.UseRawPath = true
router.Use(gin.ErrorLogger())
+ if c.Config().EnableMetricsEndpoint {
+ router.Use(instrumentHandlerInFlight(apiRequestsInFlightGauge, getBasePath))
+ router.Use(instrumentHandlerCounter(apiRequestsTotalCounter, getBasePath))
+ router.Use(instrumentHandlerRequestSize(apiRequestSizeSummary, getBasePath))
+ router.Use(instrumentHandlerResponseSize(apiResponseSizeSummary, getBasePath))
+ router.Use(instrumentHandlerDuration(apiRequestsDurationSummary, getBasePath))
+ }
+
if context.Flags().Lookup("no-lock").Value.Get().(bool) {
// We use a goroutine to count the number of
// concurrent requests. When no more requests are
// running, we close the database to free the lock.
- requests := make(chan dbRequest)
+ dbRequests = make(chan dbRequest)
- go acquireDatabase(requests)
+ go acquireDatabase()
router.Use(func(c *gin.Context) {
var err error
errCh := make(chan error)
- requests <- dbRequest{acquiredb, errCh}
+ dbRequests <- dbRequest{acquiredb, errCh}
err = <-errCh
if err != nil {
@@ -37,7 +53,7 @@ func Router(c *ctx.AptlyContext) http.Handler {
}
defer func() {
- requests <- dbRequest{releasedb, errCh}
+ dbRequests <- dbRequest{releasedb, errCh}
err = <-errCh
if err != nil {
c.AbortWithError(500, err)
@@ -46,14 +62,14 @@ func Router(c *ctx.AptlyContext) http.Handler {
c.Next()
})
-
- } else {
- go cacheFlusher()
}
root := router.Group("/api")
{
+ if c.Config().EnableMetricsEndpoint {
+ root.GET("/metrics", apiMetricsGet())
+ }
root.GET("/version", apiVersion)
}
@@ -81,6 +97,19 @@ func Router(c *ctx.AptlyContext) http.Handler {
root.POST("/mirrors/:name/snapshots", apiSnapshotsCreateFromMirror)
}
+ {
+ root.GET("/mirrors", apiMirrorsList)
+ root.GET("/mirrors/:name", apiMirrorsShow)
+ root.GET("/mirrors/:name/packages", apiMirrorsPackages)
+ root.POST("/mirrors", apiMirrorsCreate)
+ root.PUT("/mirrors/:name", apiMirrorsUpdate)
+ root.DELETE("/mirrors/:name", apiMirrorsDrop)
+ }
+
+ {
+ root.POST("/gpg/key", apiGPGAddKey)
+ }
+
{
root.GET("/files", apiFilesListDirs)
root.POST("/files/:dir", apiFilesUpload)
@@ -114,6 +143,21 @@ func Router(c *ctx.AptlyContext) http.Handler {
{
root.GET("/graph.:ext", apiGraph)
}
+ {
+ root.POST("/db/cleanup", apiDbCleanup)
+ }
+ {
+ root.GET("/tasks", apiTasksList)
+ root.POST("/tasks-clear", apiTasksClear)
+ root.GET("/tasks-wait", apiTasksWait)
+ root.GET("/tasks/:id/wait", apiTasksWaitForTaskByID)
+ root.GET("/tasks/:id/output", apiTasksOutputShow)
+ root.GET("/tasks/:id/detail", apiTasksDetailShow)
+ root.GET("/tasks/:id/return_value", apiTasksReturnValueShow)
+ root.GET("/tasks/:id", apiTasksShow)
+ root.DELETE("/tasks/:id", apiTasksDelete)
+ root.POST("/tasks-dummy", apiTasksDummy)
+ }
return router
}
diff --git a/api/snapshot.go b/api/snapshot.go
index f510f385..e4334e6c 100644
--- a/api/snapshot.go
+++ b/api/snapshot.go
@@ -2,9 +2,12 @@ package api
import (
"fmt"
+ "net/http"
+ "github.com/aptly-dev/aptly/aptly"
"github.com/aptly-dev/aptly/database"
"github.com/aptly-dev/aptly/deb"
+ "github.com/aptly-dev/aptly/task"
"github.com/gin-gonic/gin"
)
@@ -12,9 +15,8 @@ import (
func apiSnapshotsList(c *gin.Context) {
SortMethodString := c.Request.URL.Query().Get("sort")
- collection := context.CollectionFactory().SnapshotCollection()
- collection.RLock()
- defer collection.RUnlock()
+ collectionFactory := context.NewCollectionFactory()
+ collection := collectionFactory.SnapshotCollection()
if SortMethodString == "" {
SortMethodString = "name"
@@ -46,49 +48,46 @@ func apiSnapshotsCreateFromMirror(c *gin.Context) {
return
}
- collection := context.CollectionFactory().RemoteRepoCollection()
- collection.Lock()
- defer collection.Unlock()
+ collectionFactory := context.NewCollectionFactory()
+ collection := collectionFactory.RemoteRepoCollection()
+ snapshotCollection := collectionFactory.SnapshotCollection()
+ name := c.Params.ByName("name")
- snapshotCollection := context.CollectionFactory().SnapshotCollection()
- snapshotCollection.Lock()
- defer snapshotCollection.Unlock()
-
- repo, err = collection.ByName(c.Params.ByName("name"))
+ repo, err = collection.ByName(name)
if err != nil {
c.AbortWithError(404, err)
return
}
- err = repo.CheckLock()
- if err != nil {
- c.AbortWithError(409, err)
- return
- }
+ // including snapshot resource key
+ resources := []string{string(repo.Key()), "S" + b.Name}
+ taskName := fmt.Sprintf("Create snapshot of mirror %s", name)
+ maybeRunTaskInBackground(c, taskName, resources, func(out aptly.Progress, detail *task.Detail) (*task.ProcessReturnValue, error) {
+ err := repo.CheckLock()
+ if err != nil {
+ return &task.ProcessReturnValue{Code: http.StatusConflict, Value: nil}, err
+ }
- err = collection.LoadComplete(repo)
- if err != nil {
- c.AbortWithError(500, err)
- return
- }
+ err = collection.LoadComplete(repo)
+ if err != nil {
+ return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, err
+ }
- snapshot, err = deb.NewSnapshotFromRepository(b.Name, repo)
- if err != nil {
- c.AbortWithError(400, err)
- return
- }
+ snapshot, err = deb.NewSnapshotFromRepository(b.Name, repo)
+ if err != nil {
+ return &task.ProcessReturnValue{Code: http.StatusBadRequest, Value: nil}, err
+ }
- if b.Description != "" {
- snapshot.Description = b.Description
- }
+ if b.Description != "" {
+ snapshot.Description = b.Description
+ }
- err = snapshotCollection.Add(snapshot)
- if err != nil {
- c.AbortWithError(400, err)
- return
- }
-
- c.JSON(201, snapshot)
+ err = snapshotCollection.Add(snapshot)
+ if err != nil {
+ return &task.ProcessReturnValue{Code: http.StatusBadRequest, Value: nil}, err
+ }
+ return &task.ProcessReturnValue{Code: http.StatusCreated, Value: snapshot}, nil
+ })
}
// POST /api/snapshots
@@ -115,9 +114,9 @@ func apiSnapshotsCreate(c *gin.Context) {
}
}
- snapshotCollection := context.CollectionFactory().SnapshotCollection()
- snapshotCollection.Lock()
- defer snapshotCollection.Unlock()
+ collectionFactory := context.NewCollectionFactory()
+ snapshotCollection := collectionFactory.SnapshotCollection()
+ var resources []string
sources := make([]*deb.Snapshot, len(b.SourceSnapshots))
@@ -133,39 +132,36 @@ func apiSnapshotsCreate(c *gin.Context) {
c.AbortWithError(500, err)
return
}
+
+ resources = append(resources, string(sources[i].ResourceKey()))
}
- list := deb.NewPackageList()
+ maybeRunTaskInBackground(c, "Create snapshot "+b.Name, resources, func(out aptly.Progress, detail *task.Detail) (*task.ProcessReturnValue, error) {
+ list := deb.NewPackageList()
- // verify package refs and build package list
- for _, ref := range b.PackageRefs {
- var p *deb.Package
-
- p, err = context.CollectionFactory().PackageCollection().ByKey([]byte(ref))
- if err != nil {
- if err == database.ErrNotFound {
- c.AbortWithError(404, fmt.Errorf("package %s: %s", ref, err))
- } else {
- c.AbortWithError(500, err)
+ // verify package refs and build package list
+ for _, ref := range b.PackageRefs {
+ p, err := collectionFactory.PackageCollection().ByKey([]byte(ref))
+ if err != nil {
+ if err == database.ErrNotFound {
+ return &task.ProcessReturnValue{Code: http.StatusNotFound, Value: nil}, fmt.Errorf("package %s: %s", ref, err)
+ }
+ return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, err
+ }
+ err = list.Add(p)
+ if err != nil {
+ return &task.ProcessReturnValue{Code: http.StatusBadRequest, Value: nil}, err
}
- return
}
- err = list.Add(p)
+
+ snapshot = deb.NewSnapshotFromRefList(b.Name, sources, deb.NewPackageRefListFromPackageList(list), b.Description)
+
+ err = snapshotCollection.Add(snapshot)
if err != nil {
- c.AbortWithError(400, err)
- return
+ return &task.ProcessReturnValue{Code: http.StatusBadRequest, Value: nil}, err
}
- }
-
- snapshot = deb.NewSnapshotFromRefList(b.Name, sources, deb.NewPackageRefListFromPackageList(list), b.Description)
-
- err = snapshotCollection.Add(snapshot)
- if err != nil {
- c.AbortWithError(400, err)
- return
- }
-
- c.JSON(201, snapshot)
+ return &task.ProcessReturnValue{Code: http.StatusCreated, Value: nil}, nil
+ })
}
// POST /api/repos/:name/snapshots
@@ -185,43 +181,41 @@ func apiSnapshotsCreateFromRepository(c *gin.Context) {
return
}
- collection := context.CollectionFactory().LocalRepoCollection()
- collection.Lock()
- defer collection.Unlock()
+ collectionFactory := context.NewCollectionFactory()
+ collection := collectionFactory.LocalRepoCollection()
+ snapshotCollection := collectionFactory.SnapshotCollection()
+ name := c.Params.ByName("name")
- snapshotCollection := context.CollectionFactory().SnapshotCollection()
- snapshotCollection.Lock()
- defer snapshotCollection.Unlock()
-
- repo, err = collection.ByName(c.Params.ByName("name"))
+ repo, err = collection.ByName(name)
if err != nil {
c.AbortWithError(404, err)
return
}
- err = collection.LoadComplete(repo)
- if err != nil {
- c.AbortWithError(500, err)
- return
- }
+ // including snapshot resource key
+ resources := []string{string(repo.Key()), "S" + b.Name}
+ taskName := fmt.Sprintf("Create snapshot of repo %s", name)
+ maybeRunTaskInBackground(c, taskName, resources, func(out aptly.Progress, detail *task.Detail) (*task.ProcessReturnValue, error) {
+ err := collection.LoadComplete(repo)
+ if err != nil {
+ return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, err
+ }
- snapshot, err = deb.NewSnapshotFromLocalRepo(b.Name, repo)
- if err != nil {
- c.AbortWithError(400, err)
- return
- }
+ snapshot, err = deb.NewSnapshotFromLocalRepo(b.Name, repo)
+ if err != nil {
+ return &task.ProcessReturnValue{Code: http.StatusNotFound, Value: nil}, err
+ }
- if b.Description != "" {
- snapshot.Description = b.Description
- }
+ if b.Description != "" {
+ snapshot.Description = b.Description
+ }
- err = snapshotCollection.Add(snapshot)
- if err != nil {
- c.AbortWithError(400, err)
- return
- }
-
- c.JSON(201, snapshot)
+ err = snapshotCollection.Add(snapshot)
+ if err != nil {
+ return &task.ProcessReturnValue{Code: http.StatusBadRequest, Value: nil}, err
+ }
+ return &task.ProcessReturnValue{Code: http.StatusCreated, Value: snapshot}, nil
+ })
}
// PUT /api/snapshots/:name
@@ -240,44 +234,44 @@ func apiSnapshotsUpdate(c *gin.Context) {
return
}
- collection := context.CollectionFactory().SnapshotCollection()
- collection.Lock()
- defer collection.Unlock()
+ collectionFactory := context.NewCollectionFactory()
+ collection := collectionFactory.SnapshotCollection()
+ name := c.Params.ByName("name")
- snapshot, err = collection.ByName(c.Params.ByName("name"))
+ snapshot, err = collection.ByName(name)
if err != nil {
c.AbortWithError(404, err)
return
}
- _, err = collection.ByName(b.Name)
- if err == nil {
- c.AbortWithError(409, fmt.Errorf("unable to rename: snapshot %s already exists", b.Name))
- return
- }
+ resources := []string{string(snapshot.ResourceKey()), "S" + b.Name}
+ taskName := fmt.Sprintf("Update snapshot %s", name)
+ maybeRunTaskInBackground(c, taskName, resources, func(out aptly.Progress, detail *task.Detail) (*task.ProcessReturnValue, error) {
+ _, err := collection.ByName(b.Name)
+ if err == nil {
+ return &task.ProcessReturnValue{Code: http.StatusConflict, Value: nil}, fmt.Errorf("unable to rename: snapshot %s already exists", b.Name)
+ }
- if b.Name != "" {
- snapshot.Name = b.Name
- }
+ if b.Name != "" {
+ snapshot.Name = b.Name
+ }
- if b.Description != "" {
- snapshot.Description = b.Description
- }
+ if b.Description != "" {
+ snapshot.Description = b.Description
+ }
- err = context.CollectionFactory().SnapshotCollection().Update(snapshot)
- if err != nil {
- c.AbortWithError(500, err)
- return
- }
-
- c.JSON(200, snapshot)
+ err = collectionFactory.SnapshotCollection().Update(snapshot)
+ if err != nil {
+ return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, err
+ }
+ return &task.ProcessReturnValue{Code: http.StatusOK, Value: snapshot}, nil
+ })
}
// GET /api/snapshots/:name
func apiSnapshotsShow(c *gin.Context) {
- collection := context.CollectionFactory().SnapshotCollection()
- collection.Lock()
- defer collection.Unlock()
+ collectionFactory := context.NewCollectionFactory()
+ collection := collectionFactory.SnapshotCollection()
snapshot, err := collection.ByName(c.Params.ByName("name"))
if err != nil {
@@ -299,13 +293,9 @@ func apiSnapshotsDrop(c *gin.Context) {
name := c.Params.ByName("name")
force := c.Request.URL.Query().Get("force") == "1"
- snapshotCollection := context.CollectionFactory().SnapshotCollection()
- snapshotCollection.Lock()
- defer snapshotCollection.Unlock()
-
- publishedCollection := context.CollectionFactory().PublishedRepoCollection()
- publishedCollection.RLock()
- defer publishedCollection.RUnlock()
+ collectionFactory := context.NewCollectionFactory()
+ snapshotCollection := collectionFactory.SnapshotCollection()
+ publishedCollection := collectionFactory.PublishedRepoCollection()
snapshot, err := snapshotCollection.ByName(name)
if err != nil {
@@ -313,37 +303,36 @@ func apiSnapshotsDrop(c *gin.Context) {
return
}
- published := publishedCollection.BySnapshot(snapshot)
+ resources := []string{string(snapshot.ResourceKey())}
+ taskName := fmt.Sprintf("Delete snapshot %s", name)
+ maybeRunTaskInBackground(c, taskName, resources, func(out aptly.Progress, detail *task.Detail) (*task.ProcessReturnValue, error) {
+ published := publishedCollection.BySnapshot(snapshot)
- if len(published) > 0 {
- c.AbortWithError(409, fmt.Errorf("unable to drop: snapshot is published"))
- return
- }
-
- if !force {
- snapshots := snapshotCollection.BySnapshotSource(snapshot)
- if len(snapshots) > 0 {
- c.AbortWithError(409, fmt.Errorf("won't delete snapshot that was used as source for other snapshots, use ?force=1 to override"))
- return
+ if len(published) > 0 {
+ return &task.ProcessReturnValue{Code: http.StatusConflict, Value: nil}, fmt.Errorf("unable to drop: snapshot is published")
}
- }
- err = snapshotCollection.Drop(snapshot)
- if err != nil {
- c.AbortWithError(500, err)
- return
- }
+ if !force {
+ snapshots := snapshotCollection.BySnapshotSource(snapshot)
+ if len(snapshots) > 0 {
+ return &task.ProcessReturnValue{Code: http.StatusConflict, Value: nil}, fmt.Errorf("won't delete snapshot that was used as source for other snapshots, use ?force=1 to override")
+ }
+ }
- c.JSON(200, gin.H{})
+ err = snapshotCollection.Drop(snapshot)
+ if err != nil {
+ return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, err
+ }
+ return &task.ProcessReturnValue{Code: http.StatusOK, Value: gin.H{}}, nil
+ })
}
// GET /api/snapshots/:name/diff/:withSnapshot
func apiSnapshotsDiff(c *gin.Context) {
onlyMatching := c.Request.URL.Query().Get("onlyMatching") == "1"
- collection := context.CollectionFactory().SnapshotCollection()
- collection.Lock()
- defer collection.Unlock()
+ collectionFactory := context.NewCollectionFactory()
+ collection := collectionFactory.SnapshotCollection()
snapshotA, err := collection.ByName(c.Params.ByName("name"))
if err != nil {
@@ -370,7 +359,7 @@ func apiSnapshotsDiff(c *gin.Context) {
}
// Calculate diff
- diff, err := snapshotA.RefList().Diff(snapshotB.RefList(), context.CollectionFactory().PackageCollection())
+ diff, err := snapshotA.RefList().Diff(snapshotB.RefList(), collectionFactory.PackageCollection())
if err != nil {
c.AbortWithError(500, err)
return
@@ -391,9 +380,8 @@ func apiSnapshotsDiff(c *gin.Context) {
// GET /api/snapshots/:name/packages
func apiSnapshotsSearchPackages(c *gin.Context) {
- collection := context.CollectionFactory().SnapshotCollection()
- collection.Lock()
- defer collection.Unlock()
+ collectionFactory := context.NewCollectionFactory()
+ collection := collectionFactory.SnapshotCollection()
snapshot, err := collection.ByName(c.Params.ByName("name"))
if err != nil {
@@ -407,5 +395,5 @@ func apiSnapshotsSearchPackages(c *gin.Context) {
return
}
- showPackages(c, snapshot.RefList())
+ showPackages(c, snapshot.RefList(), collectionFactory)
}
diff --git a/api/task.go b/api/task.go
new file mode 100644
index 00000000..19cb0614
--- /dev/null
+++ b/api/task.go
@@ -0,0 +1,155 @@
+package api
+
+import (
+ "fmt"
+ "net/http"
+ "strconv"
+
+ "github.com/aptly-dev/aptly/aptly"
+ "github.com/aptly-dev/aptly/task"
+ "github.com/gin-gonic/gin"
+)
+
+// GET /tasks
+func apiTasksList(c *gin.Context) {
+ list := context.TaskList()
+ c.JSON(200, list.GetTasks())
+}
+
+// POST /tasks-clear
+func apiTasksClear(c *gin.Context) {
+ list := context.TaskList()
+ list.Clear()
+ c.JSON(200, gin.H{})
+}
+
+// GET /tasks-wait
+func apiTasksWait(c *gin.Context) {
+ list := context.TaskList()
+ list.Wait()
+ c.JSON(200, gin.H{})
+}
+
+// GET /tasks/:id/wait
+func apiTasksWaitForTaskByID(c *gin.Context) {
+ list := context.TaskList()
+ id, err := strconv.ParseInt(c.Params.ByName("id"), 10, 0)
+ if err != nil {
+ c.AbortWithError(500, err)
+ return
+ }
+
+ task, err := list.WaitForTaskByID(int(id))
+ if err != nil {
+ c.AbortWithError(400, err)
+ return
+ }
+
+ c.JSON(200, task)
+}
+
+// GET /tasks/:id
+func apiTasksShow(c *gin.Context) {
+ list := context.TaskList()
+ id, err := strconv.ParseInt(c.Params.ByName("id"), 10, 0)
+ if err != nil {
+ c.AbortWithError(500, err)
+ return
+ }
+
+ var task task.Task
+ task, err = list.GetTaskByID(int(id))
+ if err != nil {
+ c.AbortWithError(404, err)
+ return
+ }
+
+ c.JSON(200, task)
+}
+
+// GET /tasks/:id/output
+func apiTasksOutputShow(c *gin.Context) {
+ list := context.TaskList()
+ id, err := strconv.ParseInt(c.Params.ByName("id"), 10, 0)
+ if err != nil {
+ c.AbortWithError(500, err)
+ return
+ }
+
+ var output string
+ output, err = list.GetTaskOutputByID(int(id))
+ if err != nil {
+ c.AbortWithError(404, err)
+ return
+ }
+
+ c.JSON(200, output)
+}
+
+// GET /tasks/:id/detail
+func apiTasksDetailShow(c *gin.Context) {
+ list := context.TaskList()
+ id, err := strconv.ParseInt(c.Params.ByName("id"), 10, 0)
+ if err != nil {
+ c.AbortWithError(500, err)
+ return
+ }
+
+ var detail interface{}
+ detail, err = list.GetTaskDetailByID(int(id))
+ if err != nil {
+ c.AbortWithError(404, err)
+ return
+ }
+
+ c.JSON(200, detail)
+}
+
+// GET /tasks/:id/return_value
+func apiTasksReturnValueShow(c *gin.Context) {
+ list := context.TaskList()
+ id, err := strconv.ParseInt(c.Params.ByName("id"), 10, 0)
+ if err != nil {
+ c.AbortWithError(500, err)
+ return
+ }
+
+ output, err := list.GetTaskReturnValueByID(int(id))
+ if err != nil {
+ c.AbortWithError(404, err)
+ return
+ }
+
+ c.JSON(200, output)
+}
+
+// DELETE /tasks/:id
+func apiTasksDelete(c *gin.Context) {
+ list := context.TaskList()
+ id, err := strconv.ParseInt(c.Params.ByName("id"), 10, 0)
+ if err != nil {
+ c.AbortWithError(500, err)
+ return
+ }
+
+ var delTask task.Task
+ delTask, err = list.DeleteTaskByID(int(id))
+ if err != nil {
+ c.AbortWithError(400, err)
+ return
+ }
+
+ c.JSON(200, delTask)
+}
+
+// POST /tasks-dummy
+func apiTasksDummy(c *gin.Context) {
+ resources := []string{"dummy"}
+ taskName := fmt.Sprintf("Dummy task")
+ maybeRunTaskInBackground(c, taskName, resources, func(out aptly.Progress, detail *task.Detail) (*task.ProcessReturnValue, error) {
+ out.Printf("Dummy task started\n")
+ detail.Store([]int{1, 2, 3})
+ out.Printf("Dummy task finished\n")
+ return &task.ProcessReturnValue{Code: http.StatusTeapot, Value: []int{1, 2, 3}}, nil
+ })
+}
diff --git a/api/task_test.go b/api/task_test.go
new file mode 100644
index 00000000..8cf05c34
--- /dev/null
+++ b/api/task_test.go
@@ -0,0 +1,75 @@
+package api
+
+import (
+ "encoding/json"
+ "fmt"
+ "time"
+
+ "github.com/aptly-dev/aptly/task"
+
+ . "gopkg.in/check.v1"
+)
+
+type TaskSuite struct {
+ ApiSuite
+}
+
+var _ = Suite(&TaskSuite{})
+
+func (s *TaskSuite) TestTasksDummy(c *C) {
+ response, _ := s.HTTPRequest("POST", "/api/tasks-dummy", nil)
+ c.Check(response.Code, Equals, 418)
+ c.Check(response.Body.String(), Equals, "[1,2,3]")
+}
+
+func (s *TaskSuite) TestTasksDummyAsync(c *C) {
+ response, _ := s.HTTPRequest("POST", "/api/tasks-dummy?_async=true", nil)
+ c.Check(response.Code, Equals, 202)
+ var t task.Task
+ err := json.Unmarshal(response.Body.Bytes(), &t)
+ c.Assert(err, IsNil)
+ c.Check(t.Name, Equals, "Dummy task")
+ response, _ = s.HTTPRequest("GET", fmt.Sprintf("/api/tasks/%d/wait", t.ID), nil)
+ err = json.Unmarshal(response.Body.Bytes(), &t)
+ c.Assert(err, IsNil)
+ c.Check(t.State, Equals, task.SUCCEEDED)
+ response, _ = s.HTTPRequest("GET", fmt.Sprintf("/api/tasks/%d/detail", t.ID), nil)
+ c.Check(response.Code, Equals, 200)
+ c.Check(response.Body.String(), Equals, "[1,2,3]")
+ response, _ = s.HTTPRequest("GET", fmt.Sprintf("/api/tasks/%d/output", t.ID), nil)
+ c.Check(response.Code, Equals, 200)
+ c.Check(response.Body.String(), Matches, "\"Dummy task started.*")
+}
+
+func (s *TaskSuite) TestTaskDelete(c *C) {
+ response, _ := s.HTTPRequest("POST", "/api/tasks-dummy?_async=true", nil)
+ c.Check(response.Code, Equals, 202)
+ c.Check(response.Body.String(), Equals, "{\"Name\":\"Dummy task\",\"ID\":1,\"State\":0}")
+ // Give the task time to start
+ time.Sleep(time.Second)
+ response, _ = s.HTTPRequest("DELETE", "/api/tasks/1", nil)
+ c.Check(response.Code, Equals, 200)
+}
+
+func (s *TaskSuite) TestTasksClear(c *C) {
+ response, _ := s.HTTPRequest("POST", "/api/tasks-dummy?_async=true", nil)
+ c.Check(response.Code, Equals, 202)
+ var t task.Task
+ err := json.Unmarshal(response.Body.Bytes(), &t)
+ c.Assert(err, IsNil)
+ c.Check(t.Name, Equals, "Dummy task")
+ response, _ = s.HTTPRequest("GET", "/api/tasks-wait", nil)
+ c.Check(response.Code, Equals, 200)
+ response, _ = s.HTTPRequest("GET", "/api/tasks", nil)
+ c.Check(response.Code, Equals, 200)
+ var ts []task.Task
+ err = json.Unmarshal(response.Body.Bytes(), &ts)
+ c.Assert(err, IsNil)
+ c.Check(len(ts), Equals, 1)
+ c.Check(ts[0].State, Equals, task.SUCCEEDED)
+ response, _ = s.HTTPRequest("POST", "/api/tasks-clear", nil)
+ c.Check(response.Code, Equals, 200)
+ response, _ = s.HTTPRequest("GET", "/api/tasks", nil)
+ c.Check(response.Code, Equals, 200)
+ c.Check(response.Body.String(), Equals, "null")
+}
diff --git a/aptly/interfaces.go b/aptly/interfaces.go
index e17471a0..e912daba 100644
--- a/aptly/interfaces.go
+++ b/aptly/interfaces.go
@@ -7,6 +7,7 @@ import (
"io"
"os"
+ "github.com/aptly-dev/aptly/database"
"github.com/aptly-dev/aptly/utils"
)
@@ -96,6 +97,36 @@ type PublishedStorageProvider interface {
GetPublishedStorage(name string) PublishedStorage
}
+// BarType used to differentiate between different progress bars
+type BarType int
+
+const (
+ // BarGeneralBuildPackageList identifies bar for building package list
+ BarGeneralBuildPackageList BarType = iota
+ // BarGeneralVerifyDependencies identifies bar for verifying dependencies
+ BarGeneralVerifyDependencies
+ // BarGeneralBuildFileList identifies bar for building file list
+ BarGeneralBuildFileList
+ // BarCleanupBuildList identifies bar for building list to cleanup
+ BarCleanupBuildList
+ // BarCleanupDeleteUnreferencedFiles identifies bar for deleting unreferenced files
+ BarCleanupDeleteUnreferencedFiles
+ // BarMirrorUpdateDownloadIndexes identifies bar for downloading index files
+ BarMirrorUpdateDownloadIndexes
+ // BarMirrorUpdateDownloadPackages identifies bar for downloading packages
+ BarMirrorUpdateDownloadPackages
+ // BarMirrorUpdateBuildPackageList identifies bar for building package list of downloaded files
+ BarMirrorUpdateBuildPackageList
+ // BarMirrorUpdateImportFiles identifies bar for importing package files
+ BarMirrorUpdateImportFiles
+ // BarMirrorUpdateFinalizeDownload identifies bar for finalizing downloads
+ BarMirrorUpdateFinalizeDownload
+ // BarPublishGeneratePackageFiles identifies bar for generating package files to publish
+ BarPublishGeneratePackageFiles
+ // BarPublishFinalizeIndexes identifies bar for finalizing index files
+ BarPublishFinalizeIndexes
+)
+
// Progress is a progress displaying entity, it allows progress bars & simple prints
type Progress interface {
// Writer interface to support progress bar ticking
@@ -107,7 +138,7 @@ type Progress interface {
// Flush returns when all queued messages are sent
Flush()
// InitBar starts progressbar for count bytes or count items
- InitBar(count int64, isBytes bool)
+ InitBar(count int64, isBytes bool, barType BarType)
// ShutdownBar stops progress bar and hides it
ShutdownBar()
// AddBar increments progress for progress bar
@@ -127,13 +158,16 @@ type Downloader interface {
// Download starts new download task
Download(ctx context.Context, url string, destination string) error
// DownloadWithChecksum starts new download task with checksum verification
- DownloadWithChecksum(ctx context.Context, url string, destination string, expected *utils.ChecksumInfo, ignoreMismatch bool, maxTries int) error
+ DownloadWithChecksum(ctx context.Context, url string, destination string, expected *utils.ChecksumInfo, ignoreMismatch bool) error
// GetProgress returns Progress object
GetProgress() Progress
// GetLength returns size by heading object with url
GetLength(ctx context.Context, url string) (int64, error)
}
+// ChecksumStorageProvider creates ChecksumStorage based on DB
+type ChecksumStorageProvider func(db database.ReaderWriter) ChecksumStorage
+
// ChecksumStorage is stores checksums in some (persistent) storage
type ChecksumStorage interface {
// Get finds checksums in DB by path
diff --git a/azure/azure.go b/azure/azure.go
new file mode 100644
index 00000000..5f76b744
--- /dev/null
+++ b/azure/azure.go
@@ -0,0 +1,2 @@
+// Package azure handles publishing to Azure Storage
+package azure
diff --git a/azure/azure_test.go b/azure/azure_test.go
new file mode 100644
index 00000000..3e816a3a
--- /dev/null
+++ b/azure/azure_test.go
@@ -0,0 +1,12 @@
+package azure
+
+import (
+ "testing"
+
+ . "gopkg.in/check.v1"
+)
+
+// Launch gocheck tests
+func Test(t *testing.T) {
+ TestingT(t)
+}
diff --git a/azure/public.go b/azure/public.go
new file mode 100644
index 00000000..cf1a7b20
--- /dev/null
+++ b/azure/public.go
@@ -0,0 +1,375 @@
+package azure
+
+import (
+ "context"
+ "encoding/hex"
+ "fmt"
+ "io"
+ "net"
+ "net/http"
+ "net/url"
+ "os"
+ "path/filepath"
+ "time"
+
+ "github.com/Azure/azure-storage-blob-go/azblob"
+ "github.com/aptly-dev/aptly/aptly"
+ "github.com/aptly-dev/aptly/utils"
+ "github.com/pkg/errors"
+)
+
+// PublishedStorage abstract file system with published files (actually hosted on Azure)
+type PublishedStorage struct {
+ container azblob.ContainerURL
+ prefix string
+ pathCache map[string]string
+}
+
+// Check interface
+var (
+ _ aptly.PublishedStorage = (*PublishedStorage)(nil)
+)
+
+func isEmulatorEndpoint(endpoint string) bool {
+ if h, _, err := net.SplitHostPort(endpoint); err == nil {
+ endpoint = h
+ }
+ if endpoint == "localhost" {
+ return true
+ }
+ // For IPv6, there could be case where SplitHostPort fails for cannot finding port.
+ // In this case, eliminate the '[' and ']' in the URL.
+ // For details about IPv6 URL, please refer to https://tools.ietf.org/html/rfc2732
+ if endpoint[0] == '[' && endpoint[len(endpoint)-1] == ']' {
+ endpoint = endpoint[1 : len(endpoint)-1]
+ }
+ return net.ParseIP(endpoint) != nil
+}
+
+// NewPublishedStorage creates published storage from Azure storage credentials
+func NewPublishedStorage(accountName, accountKey, container, prefix, endpoint string) (*PublishedStorage, error) {
+ credential, err := azblob.NewSharedKeyCredential(accountName, accountKey)
+ if err != nil {
+ return nil, err
+ }
+
+ if endpoint == "" {
+ endpoint = "blob.core.windows.net"
+ }
+
+ var url *url.URL
+ if isEmulatorEndpoint(endpoint) {
+ url, err = url.Parse(fmt.Sprintf("http://%s/%s/%s", endpoint, accountName, container))
+ } else {
+ url, err = url.Parse(fmt.Sprintf("https://%s.%s/%s", accountName, endpoint, container))
+ }
+ if err != nil {
+ return nil, err
+ }
+
+ containerURL := azblob.NewContainerURL(*url, azblob.NewPipeline(credential, azblob.PipelineOptions{}))
+
+ result := &PublishedStorage{
+ container: containerURL,
+ prefix: prefix,
+ }
+
+ return result, nil
+}
+
+// String
+func (storage *PublishedStorage) String() string {
+ return fmt.Sprintf("Azure: %s/%s", storage.container, storage.prefix)
+}
+
+// MkDir creates directory recursively under public path
+func (storage *PublishedStorage) MkDir(path string) error {
+ // no op for Azure
+ return nil
+}
+
+// PutFile puts file into published storage at specified path
+func (storage *PublishedStorage) PutFile(path string, sourceFilename string) error {
+ var (
+ source *os.File
+ err error
+ )
+
+ sourceMD5, err := utils.MD5ChecksumForFile(sourceFilename)
+ if err != nil {
+ return err
+ }
+
+ source, err = os.Open(sourceFilename)
+ if err != nil {
+ return err
+ }
+ defer source.Close()
+
+ err = storage.putFile(path, source, sourceMD5)
+ if err != nil {
+ err = errors.Wrap(err, fmt.Sprintf("error uploading %s to %s", sourceFilename, storage))
+ }
+
+ return err
+}
+
+// putFile uploads file-like object to
+func (storage *PublishedStorage) putFile(path string, source io.Reader, sourceMD5 string) error {
+ path = filepath.Join(storage.prefix, path)
+
+ blob := storage.container.NewBlockBlobURL(path)
+
+ uploadOptions := azblob.UploadStreamToBlockBlobOptions{
+ BufferSize: 4 * 1024 * 1024,
+ MaxBuffers: 8,
+ }
+ if len(sourceMD5) > 0 {
+ decodedMD5, err := hex.DecodeString(sourceMD5)
+ if err != nil {
+ return err
+ }
+ uploadOptions.BlobHTTPHeaders = azblob.BlobHTTPHeaders{
+ ContentMD5: decodedMD5,
+ }
+ }
+
+ _, err := azblob.UploadStreamToBlockBlob(
+ context.Background(),
+ source,
+ blob,
+ uploadOptions,
+ )
+
+ return err
+}
+
+// RemoveDirs removes directory structure under public path
+func (storage *PublishedStorage) RemoveDirs(path string, progress aptly.Progress) error {
+ filelist, err := storage.Filelist(path)
+ if err != nil {
+ return err
+ }
+
+ for _, filename := range filelist {
+ blob := storage.container.NewBlobURL(filepath.Join(storage.prefix, path, filename))
+ _, err := blob.Delete(context.Background(), azblob.DeleteSnapshotsOptionNone, azblob.BlobAccessConditions{})
+ if err != nil {
+ return fmt.Errorf("error deleting path %s from %s: %s", filename, storage, err)
+ }
+ }
+
+ return nil
+}
+
+// Remove removes single file under public path
+func (storage *PublishedStorage) Remove(path string) error {
+ blob := storage.container.NewBlobURL(filepath.Join(storage.prefix, path))
+ _, err := blob.Delete(context.Background(), azblob.DeleteSnapshotsOptionNone, azblob.BlobAccessConditions{})
+ if err != nil {
+ err = errors.Wrap(err, fmt.Sprintf("error deleting %s from %s: %s", path, storage, err))
+ }
+ return err
+}
+
+// LinkFromPool links package file from pool to dist's pool location
+//
+// publishedDirectory is desired location in pool (like prefix/pool/component/liba/libav/)
+// sourcePool is instance of aptly.PackagePool
+// sourcePath is filepath to package file in package pool
+//
+// LinkFromPool returns relative path for the published file to be included in package index
+func (storage *PublishedStorage) LinkFromPool(publishedDirectory, fileName string, sourcePool aptly.PackagePool,
+ sourcePath string, sourceChecksums utils.ChecksumInfo, force bool) error {
+
+ relPath := filepath.Join(publishedDirectory, fileName)
+ poolPath := filepath.Join(storage.prefix, relPath)
+
+ if storage.pathCache == nil {
+ paths, md5s, err := storage.internalFilelist("")
+ if err != nil {
+ return fmt.Errorf("error caching paths under prefix: %s", err)
+ }
+
+ storage.pathCache = make(map[string]string, len(paths))
+
+ for i := range paths {
+ storage.pathCache[paths[i]] = md5s[i]
+ }
+ }
+
+ destinationMD5, exists := storage.pathCache[relPath]
+ sourceMD5 := sourceChecksums.MD5
+
+ if exists {
+ if sourceMD5 == "" {
+ return fmt.Errorf("unable to compare object, MD5 checksum missing")
+ }
+
+ if destinationMD5 == sourceMD5 {
+ return nil
+ }
+
+ if !force && destinationMD5 != sourceMD5 {
+ return fmt.Errorf("error putting file to %s: file already exists and is different: %s", poolPath, storage)
+ }
+ }
+
+ source, err := sourcePool.Open(sourcePath)
+ if err != nil {
+ return err
+ }
+ defer source.Close()
+
+ err = storage.putFile(relPath, source, sourceMD5)
+ if err == nil {
+ storage.pathCache[relPath] = sourceMD5
+ } else {
+ err = errors.Wrap(err, fmt.Sprintf("error uploading %s to %s: %s", sourcePath, storage, poolPath))
+ }
+
+ return err
+}
+
+func (storage *PublishedStorage) internalFilelist(prefix string) (paths []string, md5s []string, err error) {
+ const delimiter = "/"
+ paths = make([]string, 0, 1024)
+ md5s = make([]string, 0, 1024)
+ prefix = filepath.Join(storage.prefix, prefix)
+ if prefix != "" {
+ prefix += delimiter
+ }
+
+ for marker := (azblob.Marker{}); marker.NotDone(); {
+ listBlob, err := storage.container.ListBlobsFlatSegment(
+ context.Background(), marker, azblob.ListBlobsSegmentOptions{
+ Prefix: prefix,
+ MaxResults: 1000,
+ Details: azblob.BlobListingDetails{Metadata: true}})
+ if err != nil {
+ return nil, nil, fmt.Errorf("error listing under prefix %s in %s: %s", prefix, storage, err)
+ }
+
+ marker = listBlob.NextMarker
+
+ for _, blob := range listBlob.Segment.BlobItems {
+ if prefix == "" {
+ paths = append(paths, blob.Name)
+ } else {
+ paths = append(paths, blob.Name[len(prefix):])
+ }
+ md5s = append(md5s, fmt.Sprintf("%x", blob.Properties.ContentMD5))
+ }
+ }
+
+ return paths, md5s, nil
+}
+
+// Filelist returns list of files under prefix
+func (storage *PublishedStorage) Filelist(prefix string) ([]string, error) {
+ paths, _, err := storage.internalFilelist(prefix)
+ return paths, err
+}
+
+// Internal copy or move implementation
+func (storage *PublishedStorage) internalCopyOrMoveBlob(src, dst string, metadata azblob.Metadata, move bool) error {
+ const leaseDuration = 30
+
+ dstBlobURL := storage.container.NewBlobURL(filepath.Join(storage.prefix, dst))
+ srcBlobURL := storage.container.NewBlobURL(filepath.Join(storage.prefix, src))
+ leaseResp, err := srcBlobURL.AcquireLease(context.Background(), "", leaseDuration, azblob.ModifiedAccessConditions{})
+ if err != nil || leaseResp.StatusCode() != http.StatusCreated {
+ return fmt.Errorf("error acquiring lease on source blob %s", srcBlobURL)
+ }
+ defer srcBlobURL.BreakLease(context.Background(), azblob.LeaseBreakNaturally, azblob.ModifiedAccessConditions{})
+ srcBlobLeaseID := leaseResp.LeaseID()
+
+ copyResp, err := dstBlobURL.StartCopyFromURL(
+ context.Background(),
+ srcBlobURL.URL(),
+ metadata,
+ azblob.ModifiedAccessConditions{},
+ azblob.BlobAccessConditions{},
+ azblob.DefaultAccessTier,
+ nil)
+ if err != nil {
+ return fmt.Errorf("error copying %s -> %s in %s: %s", src, dst, storage, err)
+ }
+
+ copyStatus := copyResp.CopyStatus()
+ for {
+ if copyStatus == azblob.CopyStatusSuccess {
+ if move {
+ _, err = srcBlobURL.Delete(
+ context.Background(),
+ azblob.DeleteSnapshotsOptionNone,
+ azblob.BlobAccessConditions{
+ LeaseAccessConditions: azblob.LeaseAccessConditions{LeaseID: srcBlobLeaseID},
+ })
+ return err
+ }
+ return nil
+ } else if copyStatus == azblob.CopyStatusPending {
+ time.Sleep(1 * time.Second)
+ blobPropsResp, err := dstBlobURL.GetProperties(
+ context.Background(),
+ azblob.BlobAccessConditions{LeaseAccessConditions: azblob.LeaseAccessConditions{LeaseID: srcBlobLeaseID}},
+ azblob.ClientProvidedKeyOptions{})
+ if err != nil {
+ return fmt.Errorf("error getting destination blob properties %s", dstBlobURL)
+ }
+ copyStatus = blobPropsResp.CopyStatus()
+
+ _, err = srcBlobURL.RenewLease(context.Background(), srcBlobLeaseID, azblob.ModifiedAccessConditions{})
+ if err != nil {
+ return fmt.Errorf("error renewing source blob lease %s", srcBlobURL)
+ }
+ } else {
+ return fmt.Errorf("error copying %s -> %s in %s: %s", dst, src, storage, copyStatus)
+ }
+ }
+}
+
+// RenameFile renames (moves) file
+func (storage *PublishedStorage) RenameFile(oldName, newName string) error {
+ return storage.internalCopyOrMoveBlob(oldName, newName, nil, true /* move */)
+}
+
+// SymLink creates a copy of src file and adds link information as meta data
+func (storage *PublishedStorage) SymLink(src string, dst string) error {
+ return storage.internalCopyOrMoveBlob(src, dst, azblob.Metadata{"SymLink": src}, false /* move */)
+}
+
+// HardLink using symlink functionality as hard links do not exist
+func (storage *PublishedStorage) HardLink(src string, dst string) error {
+ return storage.SymLink(src, dst)
+}
+
+// FileExists returns true if path exists
+func (storage *PublishedStorage) FileExists(path string) (bool, error) {
+ blob := storage.container.NewBlobURL(filepath.Join(storage.prefix, path))
+ resp, err := blob.GetProperties(context.Background(), azblob.BlobAccessConditions{}, azblob.ClientProvidedKeyOptions{})
+ if err != nil {
+ storageError, ok := err.(azblob.StorageError)
+ if ok && string(storageError.ServiceCode()) == string(azblob.StorageErrorCodeBlobNotFound) {
+ return false, nil
+ }
+ return false, err
+ } else if resp.StatusCode() == http.StatusOK {
+ return true, nil
+ }
+ return false, fmt.Errorf("error checking if blob %s exists %d", blob, resp.StatusCode())
+}
+
+// ReadLink returns the symbolic link pointed to by path.
+// This simply reads text file created with SymLink
+func (storage *PublishedStorage) ReadLink(path string) (string, error) {
+ blob := storage.container.NewBlobURL(filepath.Join(storage.prefix, path))
+ resp, err := blob.GetProperties(context.Background(), azblob.BlobAccessConditions{}, azblob.ClientProvidedKeyOptions{})
+ if err != nil {
+ return "", err
+ } else if resp.StatusCode() != http.StatusOK {
+ return "", fmt.Errorf("error checking if blob %s exists %d", blob, resp.StatusCode())
+ }
+ return resp.NewMetadata()["SymLink"], nil
+}
diff --git a/azure/public_test.go b/azure/public_test.go
new file mode 100644
index 00000000..79abfed2
--- /dev/null
+++ b/azure/public_test.go
@@ -0,0 +1,371 @@
+package azure
+
+import (
+ "context"
+ "crypto/md5"
+ "crypto/rand"
+ "io/ioutil"
+ "os"
+ "path/filepath"
+
+ "github.com/Azure/azure-storage-blob-go/azblob"
+ "github.com/aptly-dev/aptly/files"
+ "github.com/aptly-dev/aptly/utils"
+ . "gopkg.in/check.v1"
+)
+
+type PublishedStorageSuite struct {
+ accountName, accountKey, endpoint string
+ storage, prefixedStorage *PublishedStorage
+}
+
+var _ = Suite(&PublishedStorageSuite{})
+
+const testContainerPrefix = "aptlytest-"
+
+func randContainer() string {
+ return testContainerPrefix + randString(32-len(testContainerPrefix))
+}
+
+func randString(n int) string {
+ if n <= 0 {
+ panic("negative number")
+ }
+ const alphanum = "0123456789abcdefghijklmnopqrstuvwxyz"
+ var bytes = make([]byte, n)
+ rand.Read(bytes)
+ for i, b := range bytes {
+ bytes[i] = alphanum[b%byte(len(alphanum))]
+ }
+ return string(bytes)
+}
+
+func (s *PublishedStorageSuite) SetUpSuite(c *C) {
+ s.accountName = os.Getenv("AZURE_STORAGE_ACCOUNT")
+ if s.accountName == "" {
+ println("Please set the the following two environment variables to run the Azure storage tests.")
+ println(" 1. AZURE_STORAGE_ACCOUNT")
+ println(" 2. AZURE_STORAGE_ACCESS_KEY")
+ c.Skip("AZURE_STORAGE_ACCOUNT not set.")
+ }
+ s.accountKey = os.Getenv("AZURE_STORAGE_ACCESS_KEY")
+ if s.accountKey == "" {
+ println("Please set the the following two environment variables to run the Azure storage tests.")
+ println(" 1. AZURE_STORAGE_ACCOUNT")
+ println(" 2. AZURE_STORAGE_ACCESS_KEY")
+ c.Skip("AZURE_STORAGE_ACCESS_KEY not set.")
+ }
+ s.endpoint = os.Getenv("AZURE_STORAGE_ENDPOINT")
+}
+
+func (s *PublishedStorageSuite) SetUpTest(c *C) {
+ container := randContainer()
+ prefix := "lala"
+
+ var err error
+
+ s.storage, err = NewPublishedStorage(s.accountName, s.accountKey, container, "", s.endpoint)
+ c.Assert(err, IsNil)
+ cnt := s.storage.container
+ _, err = cnt.Create(context.Background(), azblob.Metadata{}, azblob.PublicAccessContainer)
+ c.Assert(err, IsNil)
+
+ s.prefixedStorage, err = NewPublishedStorage(s.accountName, s.accountKey, container, prefix, s.endpoint)
+ c.Assert(err, IsNil)
+}
+
+func (s *PublishedStorageSuite) TearDownTest(c *C) {
+ cnt := s.storage.container
+ _, err := cnt.Delete(context.Background(), azblob.ContainerAccessConditions{})
+ c.Assert(err, IsNil)
+}
+
+func (s *PublishedStorageSuite) GetFile(c *C, path string) []byte {
+ blob := s.storage.container.NewBlobURL(path)
+ resp, err := blob.Download(context.Background(), 0, azblob.CountToEnd, azblob.BlobAccessConditions{}, false, azblob.ClientProvidedKeyOptions{})
+ c.Assert(err, IsNil)
+ body := resp.Body(azblob.RetryReaderOptions{MaxRetryRequests: 3})
+ data, err := ioutil.ReadAll(body)
+ c.Assert(err, IsNil)
+ return data
+}
+
+func (s *PublishedStorageSuite) AssertNoFile(c *C, path string) {
+ _, err := s.storage.container.NewBlobURL(path).GetProperties(
+ context.Background(), azblob.BlobAccessConditions{}, azblob.ClientProvidedKeyOptions{})
+ c.Assert(err, NotNil)
+ storageError, ok := err.(azblob.StorageError)
+ c.Assert(ok, Equals, true)
+ c.Assert(string(storageError.ServiceCode()), Equals, string(string(azblob.StorageErrorCodeBlobNotFound)))
+}
+
+func (s *PublishedStorageSuite) PutFile(c *C, path string, data []byte) {
+ hash := md5.Sum(data)
+ _, err := azblob.UploadBufferToBlockBlob(
+ context.Background(),
+ data,
+ s.storage.container.NewBlockBlobURL(path),
+ azblob.UploadToBlockBlobOptions{
+ BlobHTTPHeaders: azblob.BlobHTTPHeaders{
+ ContentMD5: hash[:],
+ },
+ })
+ c.Assert(err, IsNil)
+}
+
+func (s *PublishedStorageSuite) TestPutFile(c *C) {
+ content := []byte("Welcome to Azure!")
+ filename := "a/b.txt"
+
+ dir := c.MkDir()
+ err := ioutil.WriteFile(filepath.Join(dir, "a"), content, 0644)
+ c.Assert(err, IsNil)
+
+ err = s.storage.PutFile(filename, filepath.Join(dir, "a"))
+ c.Check(err, IsNil)
+
+ c.Check(s.GetFile(c, filename), DeepEquals, content)
+
+ err = s.prefixedStorage.PutFile(filename, filepath.Join(dir, "a"))
+ c.Check(err, IsNil)
+
+ c.Check(s.GetFile(c, filepath.Join(s.prefixedStorage.prefix, filename)), DeepEquals, content)
+}
+
+func (s *PublishedStorageSuite) TestPutFilePlus(c *C) {
+ content := []byte("Welcome to Azure!")
+ filename := "a/b+c.txt"
+
+ dir := c.MkDir()
+ err := ioutil.WriteFile(filepath.Join(dir, "a"), content, 0644)
+ c.Assert(err, IsNil)
+
+ err = s.storage.PutFile(filename, filepath.Join(dir, "a"))
+ c.Check(err, IsNil)
+
+ c.Check(s.GetFile(c, filename), DeepEquals, content)
+ s.AssertNoFile(c, "a/b c.txt")
+}
+
+func (s *PublishedStorageSuite) TestFilelist(c *C) {
+ paths := []string{"a", "b", "c", "testa", "test/a", "test/b", "lala/a", "lala/b", "lala/c"}
+ for _, path := range paths {
+ s.PutFile(c, path, []byte("test"))
+ }
+
+ list, err := s.storage.Filelist("")
+ c.Check(err, IsNil)
+ c.Check(list, DeepEquals, []string{"a", "b", "c", "lala/a", "lala/b", "lala/c", "test/a", "test/b", "testa"})
+
+ list, err = s.storage.Filelist("test")
+ c.Check(err, IsNil)
+ c.Check(list, DeepEquals, []string{"a", "b"})
+
+ list, err = s.storage.Filelist("test2")
+ c.Check(err, IsNil)
+ c.Check(list, DeepEquals, []string{})
+
+ list, err = s.prefixedStorage.Filelist("")
+ c.Check(err, IsNil)
+ c.Check(list, DeepEquals, []string{"a", "b", "c"})
+}
+
+func (s *PublishedStorageSuite) TestFilelistPlus(c *C) {
+ paths := []string{"a", "b", "c", "testa", "test/a+1", "test/a 1", "lala/a+b", "lala/a b", "lala/c"}
+ for _, path := range paths {
+ s.PutFile(c, path, []byte("test"))
+ }
+
+ list, err := s.storage.Filelist("")
+ c.Check(err, IsNil)
+ c.Check(list, DeepEquals, []string{"a", "b", "c", "lala/a b", "lala/a+b", "lala/c", "test/a 1", "test/a+1", "testa"})
+
+ list, err = s.storage.Filelist("test")
+ c.Check(err, IsNil)
+ c.Check(list, DeepEquals, []string{"a 1", "a+1"})
+
+ list, err = s.storage.Filelist("test2")
+ c.Check(err, IsNil)
+ c.Check(list, DeepEquals, []string{})
+
+ list, err = s.prefixedStorage.Filelist("")
+ c.Check(err, IsNil)
+ c.Check(list, DeepEquals, []string{"a b", "a+b", "c"})
+}
+
+func (s *PublishedStorageSuite) TestRemove(c *C) {
+ s.PutFile(c, "a/b", []byte("test"))
+
+ err := s.storage.Remove("a/b")
+ c.Check(err, IsNil)
+
+ s.AssertNoFile(c, "a/b")
+
+ s.PutFile(c, "lala/xyz", []byte("test"))
+
+ err = s.prefixedStorage.Remove("xyz")
+ c.Check(err, IsNil)
+
+ s.AssertNoFile(c, "lala/xyz")
+}
+
+func (s *PublishedStorageSuite) TestRemovePlus(c *C) {
+ s.PutFile(c, "a/b+c", []byte("test"))
+ s.PutFile(c, "a/b", []byte("test"))
+
+ err := s.storage.Remove("a/b+c")
+ c.Check(err, IsNil)
+
+ s.AssertNoFile(c, "a/b+c")
+ s.AssertNoFile(c, "a/b c")
+
+ err = s.storage.Remove("a/b")
+ c.Check(err, IsNil)
+
+ s.AssertNoFile(c, "a/b")
+}
+
+func (s *PublishedStorageSuite) TestRemoveDirs(c *C) {
+ paths := []string{"a", "b", "c", "testa", "test/a", "test/b", "lala/a", "lala/b", "lala/c"}
+ for _, path := range paths {
+ s.PutFile(c, path, []byte("test"))
+ }
+
+ err := s.storage.RemoveDirs("test", nil)
+ c.Check(err, IsNil)
+
+ list, err := s.storage.Filelist("")
+ c.Check(err, IsNil)
+ c.Check(list, DeepEquals, []string{"a", "b", "c", "lala/a", "lala/b", "lala/c", "testa"})
+}
+
+func (s *PublishedStorageSuite) TestRemoveDirsPlus(c *C) {
+ paths := []string{"a", "b", "c", "testa", "test/a+1", "test/a 1", "lala/a+b", "lala/a b", "lala/c"}
+ for _, path := range paths {
+ s.PutFile(c, path, []byte("test"))
+ }
+
+ err := s.storage.RemoveDirs("test", nil)
+ c.Check(err, IsNil)
+
+ list, err := s.storage.Filelist("")
+ c.Check(err, IsNil)
+ c.Check(list, DeepEquals, []string{"a", "b", "c", "lala/a b", "lala/a+b", "lala/c", "testa"})
+}
+
+func (s *PublishedStorageSuite) TestRenameFile(c *C) {
+ dir := c.MkDir()
+ err := ioutil.WriteFile(filepath.Join(dir, "a"), []byte("Welcome to Azure!"), 0644)
+ c.Assert(err, IsNil)
+
+ err = s.storage.PutFile("source.txt", filepath.Join(dir, "a"))
+ c.Check(err, IsNil)
+
+ err = s.storage.RenameFile("source.txt", "dest.txt")
+ c.Check(err, IsNil)
+
+ c.Check(s.GetFile(c, "dest.txt"), DeepEquals, []byte("Welcome to Azure!"))
+
+ exists, err := s.storage.FileExists("source.txt")
+ c.Check(err, IsNil)
+ c.Check(exists, Equals, false)
+}
+
+func (s *PublishedStorageSuite) TestLinkFromPool(c *C) {
+ root := c.MkDir()
+ pool := files.NewPackagePool(root, false)
+ cs := files.NewMockChecksumStorage()
+
+ tmpFile1 := filepath.Join(c.MkDir(), "mars-invaders_1.03.deb")
+ err := ioutil.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)
+ 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)
+ c.Assert(err, IsNil)
+ cksum3 := utils.ChecksumInfo{MD5: "c1df1da7a1ce305a3b60af9d5733ac1d"}
+
+ src1, err := pool.Import(tmpFile1, "mars-invaders_1.03.deb", &cksum1, true, cs)
+ c.Assert(err, IsNil)
+ src2, err := pool.Import(tmpFile2, "mars-invaders_1.03.deb", &cksum2, true, cs)
+ c.Assert(err, IsNil)
+ src3, err := pool.Import(tmpFile3, "netboot/boot.img.gz", &cksum3, true, cs)
+ c.Assert(err, IsNil)
+
+ // first link from pool
+ err = s.storage.LinkFromPool(filepath.Join("", "pool", "main", "m/mars-invaders"), "mars-invaders_1.03.deb", pool, src1, cksum1, false)
+ c.Check(err, IsNil)
+
+ c.Check(s.GetFile(c, "pool/main/m/mars-invaders/mars-invaders_1.03.deb"), DeepEquals, []byte("Contents"))
+
+ // duplicate link from pool
+ err = s.storage.LinkFromPool(filepath.Join("", "pool", "main", "m/mars-invaders"), "mars-invaders_1.03.deb", pool, src1, cksum1, false)
+ c.Check(err, IsNil)
+
+ c.Check(s.GetFile(c, "pool/main/m/mars-invaders/mars-invaders_1.03.deb"), DeepEquals, []byte("Contents"))
+
+ // link from pool with conflict
+ err = s.storage.LinkFromPool(filepath.Join("", "pool", "main", "m/mars-invaders"), "mars-invaders_1.03.deb", pool, src2, cksum2, false)
+ c.Check(err, ErrorMatches, ".*file already exists and is different.*")
+
+ c.Check(s.GetFile(c, "pool/main/m/mars-invaders/mars-invaders_1.03.deb"), DeepEquals, []byte("Contents"))
+
+ // link from pool with conflict and force
+ err = s.storage.LinkFromPool(filepath.Join("", "pool", "main", "m/mars-invaders"), "mars-invaders_1.03.deb", pool, src2, cksum2, true)
+ c.Check(err, IsNil)
+
+ c.Check(s.GetFile(c, "pool/main/m/mars-invaders/mars-invaders_1.03.deb"), DeepEquals, []byte("Spam"))
+
+ // for prefixed storage:
+ // first link from pool
+ err = s.prefixedStorage.LinkFromPool(filepath.Join("", "pool", "main", "m/mars-invaders"), "mars-invaders_1.03.deb", pool, src1, cksum1, false)
+ c.Check(err, IsNil)
+
+ // 2nd link from pool, providing wrong path for source file
+ //
+ // this test should check that file already exists in S3 and skip upload (which would fail if not skipped)
+ s.prefixedStorage.pathCache = nil
+ err = s.prefixedStorage.LinkFromPool(filepath.Join("", "pool", "main", "m/mars-invaders"), "mars-invaders_1.03.deb", pool, "wrong-looks-like-pathcache-doesnt-work", cksum1, false)
+ c.Check(err, IsNil)
+
+ c.Check(s.GetFile(c, "lala/pool/main/m/mars-invaders/mars-invaders_1.03.deb"), DeepEquals, []byte("Contents"))
+
+ // link from pool with nested file name
+ err = s.storage.LinkFromPool("dists/jessie/non-free/installer-i386/current/images", "netboot/boot.img.gz", pool, src3, cksum3, false)
+ c.Check(err, IsNil)
+
+ c.Check(s.GetFile(c, "dists/jessie/non-free/installer-i386/current/images/netboot/boot.img.gz"), DeepEquals, []byte("Contents"))
+}
+
+func (s *PublishedStorageSuite) TestSymLink(c *C) {
+ s.PutFile(c, "a/b", []byte("test"))
+
+ err := s.storage.SymLink("a/b", "a/b.link")
+ c.Check(err, IsNil)
+
+ var link string
+ link, err = s.storage.ReadLink("a/b.link")
+ c.Check(err, IsNil)
+ c.Check(link, Equals, "a/b")
+
+ c.Skip("copy not available in azure test")
+}
+
+func (s *PublishedStorageSuite) TestFileExists(c *C) {
+ s.PutFile(c, "a/b", []byte("test"))
+
+ exists, err := s.storage.FileExists("a/b")
+ c.Check(err, IsNil)
+ c.Check(exists, Equals, true)
+
+ exists, _ = s.storage.FileExists("a/b.invalid")
+ c.Check(err, IsNil)
+ c.Check(exists, Equals, false)
+}
diff --git a/cmd/api_serve.go b/cmd/api_serve.go
index c42e092c..7c19d2ef 100644
--- a/cmd/api_serve.go
+++ b/cmd/api_serve.go
@@ -58,25 +58,7 @@ func aptlyAPIServe(cmd *commander.Command, args []string) error {
listenURL, err := url.Parse(listen)
if err == nil && listenURL.Scheme == "unix" {
file := listenURL.Path
-
- var stat os.FileInfo
- stat, err = os.Stat(file)
- shouldRemove := true
-
- if err == nil && stat.Mode()&os.ModeSocket == os.ModeSocket {
- shouldRemove = false
- }
-
- if err != nil && os.IsNotExist(err) {
- shouldRemove = false
- }
-
- if shouldRemove {
- err = os.Remove(file)
- if err != nil {
- fmt.Printf("Warning: error removing file %s: %s\n", file, err)
- }
- }
+ os.Remove(file)
var listener net.Listener
listener, err = net.Listen("unix", file)
diff --git a/cmd/cmd.go b/cmd/cmd.go
index 18719392..14a0efd1 100644
--- a/cmd/cmd.go
+++ b/cmd/cmd.go
@@ -21,14 +21,14 @@ const (
)
// ListPackagesRefList shows list of packages in PackageRefList
-func ListPackagesRefList(reflist *deb.PackageRefList) (err error) {
+func ListPackagesRefList(reflist *deb.PackageRefList, collectionFactory *deb.CollectionFactory) (err error) {
fmt.Printf("Packages:\n")
if reflist == nil {
return
}
- list, err := deb.NewPackageListFromRefList(reflist, context.CollectionFactory().PackageCollection(), context.Progress())
+ list, err := deb.NewPackageListFromRefList(reflist, collectionFactory.PackageCollection(), context.Progress())
if err != nil {
return fmt.Errorf("unable to load packages: %s", err)
}
diff --git a/cmd/db_cleanup.go b/cmd/db_cleanup.go
index be246915..66fece67 100644
--- a/cmd/db_cleanup.go
+++ b/cmd/db_cleanup.go
@@ -5,6 +5,7 @@ import (
"sort"
"strings"
+ "github.com/aptly-dev/aptly/aptly"
"github.com/aptly-dev/aptly/deb"
"github.com/aptly-dev/aptly/utils"
"github.com/smira/commander"
@@ -21,6 +22,7 @@ func aptlyDbCleanup(cmd *commander.Command, args []string) error {
verbose := context.Flags().Lookup("verbose").Value.Get().(bool)
dryRun := context.Flags().Lookup("dry-run").Value.Get().(bool)
+ collectionFactory := context.NewCollectionFactory()
// collect information about references packages...
existingPackageRefs := deb.NewPackageRefList()
@@ -32,12 +34,12 @@ func aptlyDbCleanup(cmd *commander.Command, args []string) error {
if verbose {
context.Progress().ColoredPrintf("@{y}Loading mirrors:@|")
}
- err = context.CollectionFactory().RemoteRepoCollection().ForEach(func(repo *deb.RemoteRepo) error {
+ err = collectionFactory.RemoteRepoCollection().ForEach(func(repo *deb.RemoteRepo) error {
if verbose {
context.Progress().ColoredPrintf("- @{g}%s@|", repo.Name)
}
- e := context.CollectionFactory().RemoteRepoCollection().LoadComplete(repo)
+ e := collectionFactory.RemoteRepoCollection().LoadComplete(repo)
if e != nil {
return e
}
@@ -59,17 +61,17 @@ func aptlyDbCleanup(cmd *commander.Command, args []string) error {
return err
}
- context.CollectionFactory().Flush()
+ collectionFactory.Flush()
if verbose {
context.Progress().ColoredPrintf("@{y}Loading local repos:@|")
}
- err = context.CollectionFactory().LocalRepoCollection().ForEach(func(repo *deb.LocalRepo) error {
+ err = collectionFactory.LocalRepoCollection().ForEach(func(repo *deb.LocalRepo) error {
if verbose {
context.Progress().ColoredPrintf("- @{g}%s@|", repo.Name)
}
- e := context.CollectionFactory().LocalRepoCollection().LoadComplete(repo)
+ e := collectionFactory.LocalRepoCollection().LoadComplete(repo)
if e != nil {
return e
}
@@ -92,17 +94,17 @@ func aptlyDbCleanup(cmd *commander.Command, args []string) error {
return err
}
- context.CollectionFactory().Flush()
+ collectionFactory.Flush()
if verbose {
context.Progress().ColoredPrintf("@{y}Loading snapshots:@|")
}
- err = context.CollectionFactory().SnapshotCollection().ForEach(func(snapshot *deb.Snapshot) error {
+ err = collectionFactory.SnapshotCollection().ForEach(func(snapshot *deb.Snapshot) error {
if verbose {
context.Progress().ColoredPrintf("- @{g}%s@|", snapshot.Name)
}
- e := context.CollectionFactory().SnapshotCollection().LoadComplete(snapshot)
+ e := collectionFactory.SnapshotCollection().LoadComplete(snapshot)
if e != nil {
return e
}
@@ -122,19 +124,19 @@ func aptlyDbCleanup(cmd *commander.Command, args []string) error {
return err
}
- context.CollectionFactory().Flush()
+ collectionFactory.Flush()
if verbose {
context.Progress().ColoredPrintf("@{y}Loading published repositories:@|")
}
- err = context.CollectionFactory().PublishedRepoCollection().ForEach(func(published *deb.PublishedRepo) error {
+ err = collectionFactory.PublishedRepoCollection().ForEach(func(published *deb.PublishedRepo) error {
if verbose {
context.Progress().ColoredPrintf("- @{g}%s:%s/%s{|}", published.Storage, published.Prefix, published.Distribution)
}
if published.SourceKind != deb.SourceLocalRepo {
return nil
}
- e := context.CollectionFactory().PublishedRepoCollection().LoadComplete(published, context.CollectionFactory())
+ e := collectionFactory.PublishedRepoCollection().LoadComplete(published, collectionFactory)
if e != nil {
return e
}
@@ -156,11 +158,11 @@ func aptlyDbCleanup(cmd *commander.Command, args []string) error {
return err
}
- context.CollectionFactory().Flush()
+ collectionFactory.Flush()
// ... and compare it to the list of all packages
context.Progress().ColoredPrintf("@{w!}Loading list of all packages...@|")
- allPackageRefs := context.CollectionFactory().PackageCollection().AllPackageRefs()
+ allPackageRefs := collectionFactory.PackageCollection().AllPackageRefs()
toDelete := allPackageRefs.Subtract(existingPackageRefs)
@@ -183,15 +185,15 @@ func aptlyDbCleanup(cmd *commander.Command, args []string) error {
}
if !dryRun {
- db.StartBatch()
+ batch := db.CreateBatch()
err = toDelete.ForEach(func(ref []byte) error {
- return context.CollectionFactory().PackageCollection().DeleteByKey(ref)
+ return collectionFactory.PackageCollection().DeleteByKey(ref, batch)
})
if err != nil {
- return err
+ return fmt.Errorf("unable to delete by key: %s", err)
}
- err = db.FinishBatch()
+ err = batch.Write()
if err != nil {
return fmt.Errorf("unable to write to DB: %s", err)
}
@@ -200,15 +202,15 @@ func aptlyDbCleanup(cmd *commander.Command, args []string) error {
}
}
- context.CollectionFactory().Flush()
+ collectionFactory.Flush()
// now, build a list of files that should be present in Repository (package pool)
context.Progress().ColoredPrintf("@{w!}Building list of files referenced by packages...@|")
referencedFiles := make([]string, 0, existingPackageRefs.Len())
- context.Progress().InitBar(int64(existingPackageRefs.Len()), false)
+ context.Progress().InitBar(int64(existingPackageRefs.Len()), false, aptly.BarCleanupBuildList)
err = existingPackageRefs.ForEach(func(key []byte) error {
- pkg, err2 := context.CollectionFactory().PackageCollection().ByKey(key)
+ pkg, err2 := collectionFactory.PackageCollection().ByKey(key)
if err2 != nil {
tail := ""
if verbose {
@@ -259,7 +261,7 @@ func aptlyDbCleanup(cmd *commander.Command, args []string) error {
}
if !dryRun {
- context.Progress().InitBar(int64(len(filesToDelete)), false)
+ context.Progress().InitBar(int64(len(filesToDelete)), false, aptly.BarCleanupDeleteUnreferencedFiles)
var size, totalSize int64
for _, file := range filesToDelete {
diff --git a/cmd/db_recover.go b/cmd/db_recover.go
index a2cfa0d7..71cab0e0 100644
--- a/cmd/db_recover.go
+++ b/cmd/db_recover.go
@@ -1,8 +1,9 @@
package cmd
import (
- "github.com/aptly-dev/aptly/database"
"github.com/smira/commander"
+
+ "github.com/aptly-dev/aptly/database/goleveldb"
)
// aptly db recover
@@ -15,7 +16,7 @@ func aptlyDbRecover(cmd *commander.Command, args []string) error {
}
context.Progress().Printf("Recovering database...\n")
- err = database.RecoverDB(context.DBPath())
+ err = goleveldb.RecoverDB(context.DBPath())
return err
}
diff --git a/cmd/graph.go b/cmd/graph.go
index fd0098e2..868e5874 100644
--- a/cmd/graph.go
+++ b/cmd/graph.go
@@ -28,8 +28,8 @@ func aptlyGraph(cmd *commander.Command, args []string) error {
layout := context.Flags().Lookup("layout").Value.String()
fmt.Printf("Generating graph...\n")
- graph, err := deb.BuildGraph(context.CollectionFactory(), layout)
-
+ collectionFactory := context.NewCollectionFactory()
+ graph, err := deb.BuildGraph(collectionFactory, layout)
if err != nil {
return err
}
diff --git a/cmd/mirror_create.go b/cmd/mirror_create.go
index 7477bf34..78d91b58 100644
--- a/cmd/mirror_create.go
+++ b/cmd/mirror_create.go
@@ -64,7 +64,8 @@ func aptlyMirrorCreate(cmd *commander.Command, args []string) error {
return fmt.Errorf("unable to fetch mirror: %s", err)
}
- err = context.CollectionFactory().RemoteRepoCollection().Add(repo)
+ collectionFactory := context.NewCollectionFactory()
+ err = collectionFactory.RemoteRepoCollection().Add(repo)
if err != nil {
return fmt.Errorf("unable to add mirror: %s", err)
}
@@ -102,6 +103,7 @@ Example:
cmd.Flag.Bool("filter-with-deps", false, "when filtering, include dependencies of matching packages as well")
cmd.Flag.Bool("force-components", false, "(only with component list) skip check that requested components are listed in Release file")
cmd.Flag.Bool("force-architectures", false, "(only with architecture list) skip check that requested architectures are listed in Release file")
+ cmd.Flag.Int("max-tries", 1, "max download tries till process fails with download error")
cmd.Flag.Var(&keyRingsFlag{}, "keyring", "gpg keyring to use when verifying Release file (could be specified multiple times)")
return cmd
diff --git a/cmd/mirror_drop.go b/cmd/mirror_drop.go
index 84ccd38d..38778bf0 100644
--- a/cmd/mirror_drop.go
+++ b/cmd/mirror_drop.go
@@ -15,8 +15,9 @@ func aptlyMirrorDrop(cmd *commander.Command, args []string) error {
}
name := args[0]
+ collectionFactory := context.NewCollectionFactory()
- repo, err := context.CollectionFactory().RemoteRepoCollection().ByName(name)
+ repo, err := collectionFactory.RemoteRepoCollection().ByName(name)
if err != nil {
return fmt.Errorf("unable to drop: %s", err)
}
@@ -28,7 +29,7 @@ func aptlyMirrorDrop(cmd *commander.Command, args []string) error {
force := context.Flags().Lookup("force").Value.Get().(bool)
if !force {
- snapshots := context.CollectionFactory().SnapshotCollection().ByRemoteRepoSource(repo)
+ snapshots := collectionFactory.SnapshotCollection().ByRemoteRepoSource(repo)
if len(snapshots) > 0 {
fmt.Printf("Mirror `%s` was used to create following snapshots:\n", repo.Name)
@@ -40,7 +41,7 @@ func aptlyMirrorDrop(cmd *commander.Command, args []string) error {
}
}
- err = context.CollectionFactory().RemoteRepoCollection().Drop(repo)
+ err = collectionFactory.RemoteRepoCollection().Drop(repo)
if err != nil {
return fmt.Errorf("unable to drop: %s", err)
}
diff --git a/cmd/mirror_edit.go b/cmd/mirror_edit.go
index 06c2e559..86462c4c 100644
--- a/cmd/mirror_edit.go
+++ b/cmd/mirror_edit.go
@@ -16,7 +16,8 @@ func aptlyMirrorEdit(cmd *commander.Command, args []string) error {
return commander.ErrCommandError
}
- repo, err := context.CollectionFactory().RemoteRepoCollection().ByName(args[0])
+ collectionFactory := context.NewCollectionFactory()
+ repo, err := collectionFactory.RemoteRepoCollection().ByName(args[0])
if err != nil {
return fmt.Errorf("unable to edit: %s", err)
}
@@ -74,7 +75,7 @@ func aptlyMirrorEdit(cmd *commander.Command, args []string) error {
}
}
- err = context.CollectionFactory().RemoteRepoCollection().Update(repo)
+ err = collectionFactory.RemoteRepoCollection().Update(repo)
if err != nil {
return fmt.Errorf("unable to edit: %s", err)
}
diff --git a/cmd/mirror_list.go b/cmd/mirror_list.go
index d3a6daaf..1a54f433 100644
--- a/cmd/mirror_list.go
+++ b/cmd/mirror_list.go
@@ -1,6 +1,7 @@
package cmd
import (
+ "encoding/json"
"fmt"
"sort"
@@ -9,17 +10,29 @@ import (
)
func aptlyMirrorList(cmd *commander.Command, args []string) error {
- var err error
if len(args) != 0 {
cmd.Usage()
return commander.ErrCommandError
}
- raw := cmd.Flag.Lookup("raw").Value.Get().(bool)
+ jsonFlag := cmd.Flag.Lookup("json").Value.Get().(bool)
- repos := make([]string, context.CollectionFactory().RemoteRepoCollection().Len())
+ if jsonFlag {
+ return aptlyMirrorListJSON(cmd, args)
+ }
+
+ return aptlyMirrorListTxt(cmd, args)
+}
+
+func aptlyMirrorListTxt(cmd *commander.Command, args []string) error {
+ var err error
+
+ raw := cmd.Flag.Lookup("raw").Value.Get().(bool)
+ collectionFactory := context.NewCollectionFactory()
+
+ repos := make([]string, collectionFactory.RemoteRepoCollection().Len())
i := 0
- context.CollectionFactory().RemoteRepoCollection().ForEach(func(repo *deb.RemoteRepo) error {
+ collectionFactory.RemoteRepoCollection().ForEach(func(repo *deb.RemoteRepo) error {
if raw {
repos[i] = repo.Name
} else {
@@ -52,6 +65,32 @@ func aptlyMirrorList(cmd *commander.Command, args []string) error {
return err
}
+func aptlyMirrorListJSON(cmd *commander.Command, args []string) error {
+ var err error
+
+ repos := make([]*deb.RemoteRepo, context.NewCollectionFactory().RemoteRepoCollection().Len())
+ i := 0
+ context.NewCollectionFactory().RemoteRepoCollection().ForEach(func(repo *deb.RemoteRepo) error {
+ repos[i] = repo
+ i++
+ return nil
+ })
+
+ context.CloseDatabase()
+
+ sort.Slice(repos, func(i, j int) bool {
+ return repos[i].Name < repos[j].Name
+ })
+
+ if output, e := json.MarshalIndent(repos, "", " "); e == nil {
+ fmt.Println(string(output))
+ } else {
+ err = e
+ }
+
+ return err
+}
+
func makeCmdMirrorList() *commander.Command {
cmd := &commander.Command{
Run: aptlyMirrorList,
@@ -66,6 +105,7 @@ Example:
`,
}
+ cmd.Flag.Bool("json", false, "display list in JSON format")
cmd.Flag.Bool("raw", false, "display list in machine-readable format")
return cmd
diff --git a/cmd/mirror_rename.go b/cmd/mirror_rename.go
index 9ed5cb4c..2ff9f920 100644
--- a/cmd/mirror_rename.go
+++ b/cmd/mirror_rename.go
@@ -20,7 +20,8 @@ func aptlyMirrorRename(cmd *commander.Command, args []string) error {
oldName, newName := args[0], args[1]
- repo, err = context.CollectionFactory().RemoteRepoCollection().ByName(oldName)
+ collectionFactory := context.NewCollectionFactory()
+ repo, err = collectionFactory.RemoteRepoCollection().ByName(oldName)
if err != nil {
return fmt.Errorf("unable to rename: %s", err)
}
@@ -30,13 +31,13 @@ func aptlyMirrorRename(cmd *commander.Command, args []string) error {
return fmt.Errorf("unable to rename: %s", err)
}
- _, err = context.CollectionFactory().RemoteRepoCollection().ByName(newName)
+ _, err = collectionFactory.RemoteRepoCollection().ByName(newName)
if err == nil {
return fmt.Errorf("unable to rename: mirror %s already exists", newName)
}
repo.Name = newName
- err = context.CollectionFactory().RemoteRepoCollection().Update(repo)
+ err = collectionFactory.RemoteRepoCollection().Update(repo)
if err != nil {
return fmt.Errorf("unable to rename: %s", err)
}
diff --git a/cmd/mirror_show.go b/cmd/mirror_show.go
index 31b2b636..7491b355 100644
--- a/cmd/mirror_show.go
+++ b/cmd/mirror_show.go
@@ -1,7 +1,9 @@
package cmd
import (
+ "encoding/json"
"fmt"
+ "sort"
"strings"
"github.com/aptly-dev/aptly/deb"
@@ -11,20 +13,32 @@ import (
)
func aptlyMirrorShow(cmd *commander.Command, args []string) error {
- var err error
if len(args) != 1 {
cmd.Usage()
return commander.ErrCommandError
}
+ jsonFlag := cmd.Flag.Lookup("json").Value.Get().(bool)
+
+ if jsonFlag {
+ return aptlyMirrorShowJSON(cmd, args)
+ }
+
+ return aptlyMirrorShowTxt(cmd, args)
+}
+
+func aptlyMirrorShowTxt(cmd *commander.Command, args []string) error {
+ var err error
+
name := args[0]
- repo, err := context.CollectionFactory().RemoteRepoCollection().ByName(name)
+ collectionFactory := context.NewCollectionFactory()
+ repo, err := collectionFactory.RemoteRepoCollection().ByName(name)
if err != nil {
return fmt.Errorf("unable to show: %s", err)
}
- err = context.CollectionFactory().RemoteRepoCollection().LoadComplete(repo)
+ err = collectionFactory.RemoteRepoCollection().LoadComplete(repo)
if err != nil {
return fmt.Errorf("unable to show: %s", err)
}
@@ -72,13 +86,56 @@ func aptlyMirrorShow(cmd *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())
+ ListPackagesRefList(repo.RefList(), collectionFactory)
}
}
return err
}
+func aptlyMirrorShowJSON(cmd *commander.Command, args []string) error {
+ var err error
+
+ name := args[0]
+
+ repo, err := context.NewCollectionFactory().RemoteRepoCollection().ByName(name)
+ if err != nil {
+ return fmt.Errorf("unable to show: %s", err)
+ }
+
+ err = context.NewCollectionFactory().RemoteRepoCollection().LoadComplete(repo)
+ if err != nil {
+ return fmt.Errorf("unable to show: %s", err)
+ }
+
+ // include packages if requested
+ withPackages := context.Flags().Lookup("with-packages").Value.Get().(bool)
+ if withPackages {
+ if repo.RefList() != nil {
+ var list *deb.PackageList
+ list, err = deb.NewPackageListFromRefList(repo.RefList(), context.NewCollectionFactory().PackageCollection(), context.Progress())
+ if err != nil {
+ return fmt.Errorf("unable to get package list: %s", err)
+ }
+
+ list.PrepareIndex()
+ list.ForEachIndexed(func(p *deb.Package) error {
+ repo.Packages = append(repo.Packages, p.GetFullName())
+ return nil
+ })
+
+ sort.Strings(repo.Packages)
+ }
+ }
+
+ var output []byte
+ if output, err = json.MarshalIndent(repo, "", " "); err == nil {
+ fmt.Println(string(output))
+ }
+
+ return err
+}
+
func makeCmdMirrorShow() *commander.Command {
cmd := &commander.Command{
Run: aptlyMirrorShow,
@@ -94,6 +151,7 @@ Example:
Flag: *flag.NewFlagSet("aptly-mirror-show", flag.ExitOnError),
}
+ cmd.Flag.Bool("json", false, "display record in JSON format")
cmd.Flag.Bool("with-packages", false, "show detailed list of packages and versions stored in the mirror")
return cmd
diff --git a/cmd/mirror_update.go b/cmd/mirror_update.go
index 8fac46f0..111590bb 100644
--- a/cmd/mirror_update.go
+++ b/cmd/mirror_update.go
@@ -22,12 +22,13 @@ func aptlyMirrorUpdate(cmd *commander.Command, args []string) error {
name := args[0]
- repo, err := context.CollectionFactory().RemoteRepoCollection().ByName(name)
+ collectionFactory := context.NewCollectionFactory()
+ repo, err := collectionFactory.RemoteRepoCollection().ByName(name)
if err != nil {
return fmt.Errorf("unable to update: %s", err)
}
- err = context.CollectionFactory().RemoteRepoCollection().LoadComplete(repo)
+ err = collectionFactory.RemoteRepoCollection().LoadComplete(repo)
if err != nil {
return fmt.Errorf("unable to update: %s", err)
}
@@ -41,7 +42,6 @@ func aptlyMirrorUpdate(cmd *commander.Command, args []string) error {
}
ignoreMismatch := context.Flags().Lookup("ignore-checksums").Value.Get().(bool)
- maxTries := context.Flags().Lookup("max-tries").Value.Get().(int)
verifier, err := getVerifier(context.Flags())
if err != nil {
@@ -54,7 +54,7 @@ func aptlyMirrorUpdate(cmd *commander.Command, args []string) error {
}
context.Progress().Printf("Downloading & parsing package files...\n")
- err = repo.DownloadPackageIndexes(context.Progress(), context.Downloader(), verifier, context.CollectionFactory(), ignoreMismatch, maxTries)
+ err = repo.DownloadPackageIndexes(context.Progress(), context.Downloader(), verifier, collectionFactory, ignoreMismatch)
if err != nil {
return fmt.Errorf("unable to update: %s", err)
}
@@ -84,8 +84,8 @@ func aptlyMirrorUpdate(cmd *commander.Command, args []string) error {
skipExistingPackages := context.Flags().Lookup("skip-existing-packages").Value.Get().(bool)
context.Progress().Printf("Building download queue...\n")
- queue, downloadSize, err = repo.BuildDownloadQueue(context.PackagePool(), context.CollectionFactory().PackageCollection(),
- context.CollectionFactory().ChecksumCollection(), skipExistingPackages)
+ queue, downloadSize, err = repo.BuildDownloadQueue(context.PackagePool(), collectionFactory.PackageCollection(),
+ collectionFactory.ChecksumCollection(nil), skipExistingPackages)
if err != nil {
return fmt.Errorf("unable to update: %s", err)
@@ -96,12 +96,12 @@ func aptlyMirrorUpdate(cmd *commander.Command, args []string) error {
err = context.ReOpenDatabase()
if err == nil {
repo.MarkAsIdle()
- context.CollectionFactory().RemoteRepoCollection().Update(repo)
+ collectionFactory.RemoteRepoCollection().Update(repo)
}
}()
repo.MarkAsUpdating()
- err = context.CollectionFactory().RemoteRepoCollection().Update(repo)
+ err = collectionFactory.RemoteRepoCollection().Update(repo)
if err != nil {
return fmt.Errorf("unable to update: %s", err)
}
@@ -117,7 +117,7 @@ func aptlyMirrorUpdate(cmd *commander.Command, args []string) error {
context.Progress().Printf("Download queue: %d items (%s)\n", count, utils.HumanBytes(downloadSize))
// Download from the queue
- context.Progress().InitBar(downloadSize, true)
+ context.Progress().InitBar(downloadSize, true, aptly.BarMirrorUpdateDownloadPackages)
downloadQueue := make(chan int)
@@ -173,8 +173,7 @@ func aptlyMirrorUpdate(cmd *commander.Command, args []string) error {
repo.PackageURL(task.File.DownloadURL()).String(),
task.TempDownPath,
&task.File.Checksums,
- ignoreMismatch,
- maxTries)
+ ignoreMismatch)
if e != nil {
pushError(e)
continue
@@ -199,7 +198,7 @@ func aptlyMirrorUpdate(cmd *commander.Command, args []string) error {
}
// Import downloaded files
- context.Progress().InitBar(int64(len(queue)), false)
+ context.Progress().InitBar(int64(len(queue)), false, aptly.BarMirrorUpdateImportFiles)
for idx := range queue {
context.Progress().AddBar(1)
@@ -212,7 +211,7 @@ func aptlyMirrorUpdate(cmd *commander.Command, args []string) error {
}
// and import it back to the pool
- task.File.PoolPath, err = context.PackagePool().Import(task.TempDownPath, task.File.Filename, &task.File.Checksums, true, context.CollectionFactory().ChecksumCollection())
+ task.File.PoolPath, err = context.PackagePool().Import(task.TempDownPath, task.File.Filename, &task.File.Checksums, true, collectionFactory.ChecksumCollection(nil))
if err != nil {
return fmt.Errorf("unable to import file: %s", err)
}
@@ -236,8 +235,8 @@ func aptlyMirrorUpdate(cmd *commander.Command, args []string) error {
return fmt.Errorf("unable to update: download errors:\n %s", strings.Join(errors, "\n "))
}
- repo.FinalizeDownload(context.CollectionFactory(), context.Progress())
- err = context.CollectionFactory().RemoteRepoCollection().Update(repo)
+ repo.FinalizeDownload(collectionFactory, context.Progress())
+ err = collectionFactory.RemoteRepoCollection().Update(repo)
if err != nil {
return fmt.Errorf("unable to update: %s", err)
}
@@ -268,6 +267,7 @@ Example:
cmd.Flag.Bool("ignore-signatures", false, "disable verification of Release file signatures")
cmd.Flag.Bool("skip-existing-packages", false, "do not check file existence for packages listed in the internal database of the mirror")
cmd.Flag.Int64("download-limit", 0, "limit download speed (kbytes/sec)")
+ cmd.Flag.String("downloader", "default", "downloader to use (e.g. grab)")
cmd.Flag.Int("max-tries", 1, "max download tries till process fails with download error")
cmd.Flag.Var(&keyRingsFlag{}, "keyring", "gpg keyring to use when verifying Release file (could be specified multiple times)")
diff --git a/cmd/package_search.go b/cmd/package_search.go
index 52727a07..2105a1f3 100644
--- a/cmd/package_search.go
+++ b/cmd/package_search.go
@@ -29,7 +29,8 @@ func aptlyPackageSearch(cmd *commander.Command, args []string) error {
q = &deb.MatchAllQuery{}
}
- result := q.Query(context.CollectionFactory().PackageCollection())
+ collectionFactory := context.NewCollectionFactory()
+ result := q.Query(collectionFactory.PackageCollection())
if result.Len() == 0 {
return fmt.Errorf("no results")
}
diff --git a/cmd/package_show.go b/cmd/package_show.go
index d1e50332..37f07e9b 100644
--- a/cmd/package_show.go
+++ b/cmd/package_show.go
@@ -12,9 +12,9 @@ import (
"github.com/smira/flag"
)
-func printReferencesTo(p *deb.Package) (err error) {
- err = context.CollectionFactory().RemoteRepoCollection().ForEach(func(repo *deb.RemoteRepo) error {
- e := context.CollectionFactory().RemoteRepoCollection().LoadComplete(repo)
+func printReferencesTo(p *deb.Package, collectionFactory *deb.CollectionFactory) (err error) {
+ err = collectionFactory.RemoteRepoCollection().ForEach(func(repo *deb.RemoteRepo) error {
+ e := collectionFactory.RemoteRepoCollection().LoadComplete(repo)
if e != nil {
return e
}
@@ -29,8 +29,8 @@ func printReferencesTo(p *deb.Package) (err error) {
return err
}
- err = context.CollectionFactory().LocalRepoCollection().ForEach(func(repo *deb.LocalRepo) error {
- e := context.CollectionFactory().LocalRepoCollection().LoadComplete(repo)
+ err = collectionFactory.LocalRepoCollection().ForEach(func(repo *deb.LocalRepo) error {
+ e := collectionFactory.LocalRepoCollection().LoadComplete(repo)
if e != nil {
return e
}
@@ -45,8 +45,8 @@ func printReferencesTo(p *deb.Package) (err error) {
return err
}
- err = context.CollectionFactory().SnapshotCollection().ForEach(func(snapshot *deb.Snapshot) error {
- e := context.CollectionFactory().SnapshotCollection().LoadComplete(snapshot)
+ err = collectionFactory.SnapshotCollection().ForEach(func(snapshot *deb.Snapshot) error {
+ e := collectionFactory.SnapshotCollection().LoadComplete(snapshot)
if e != nil {
return e
}
@@ -76,7 +76,8 @@ func aptlyPackageShow(cmd *commander.Command, args []string) error {
w := bufio.NewWriter(os.Stdout)
- result := q.Query(context.CollectionFactory().PackageCollection())
+ collectionFactory := context.NewCollectionFactory()
+ result := q.Query(collectionFactory.PackageCollection())
err = result.ForEach(func(p *deb.Package) error {
p.Stanza().WriteTo(w, p.IsSource, false, false)
@@ -104,7 +105,7 @@ func aptlyPackageShow(cmd *commander.Command, args []string) error {
if withReferences {
fmt.Printf("References to package:\n")
- printReferencesTo(p)
+ printReferencesTo(p, collectionFactory)
fmt.Printf("\n")
}
diff --git a/cmd/publish_drop.go b/cmd/publish_drop.go
index 5d0c1028..2d626448 100644
--- a/cmd/publish_drop.go
+++ b/cmd/publish_drop.go
@@ -23,8 +23,9 @@ func aptlyPublishDrop(cmd *commander.Command, args []string) error {
storage, prefix := deb.ParsePrefix(param)
- err = context.CollectionFactory().PublishedRepoCollection().Remove(context, storage, prefix, distribution,
- context.CollectionFactory(), context.Progress(),
+ collectionFactory := context.NewCollectionFactory()
+ err = collectionFactory.PublishedRepoCollection().Remove(context, storage, prefix, distribution,
+ collectionFactory, context.Progress(),
context.Flags().Lookup("force-drop").Value.Get().(bool),
context.Flags().Lookup("skip-cleanup").Value.Get().(bool))
if err != nil {
diff --git a/cmd/publish_list.go b/cmd/publish_list.go
index dddf3b9f..a4e0281f 100644
--- a/cmd/publish_list.go
+++ b/cmd/publish_list.go
@@ -1,7 +1,9 @@
package cmd
import (
+ "encoding/json"
"fmt"
+ "os"
"sort"
"github.com/aptly-dev/aptly/deb"
@@ -9,19 +11,33 @@ import (
)
func aptlyPublishList(cmd *commander.Command, args []string) error {
- var err error
if len(args) != 0 {
cmd.Usage()
return commander.ErrCommandError
}
+ jsonFlag := cmd.Flag.Lookup("json").Value.Get().(bool)
+
+ if jsonFlag {
+ return aptlyPublishListJSON(cmd, args)
+ }
+
+ return aptlyPublishListTxt(cmd, args)
+}
+
+func aptlyPublishListTxt(cmd *commander.Command, args []string) error {
+ var err error
+
raw := cmd.Flag.Lookup("raw").Value.Get().(bool)
- published := make([]string, 0, context.CollectionFactory().PublishedRepoCollection().Len())
+ collectionFactory := context.NewCollectionFactory()
+ published := make([]string, 0, collectionFactory.PublishedRepoCollection().Len())
- err = context.CollectionFactory().PublishedRepoCollection().ForEach(func(repo *deb.PublishedRepo) error {
- e := context.CollectionFactory().PublishedRepoCollection().LoadComplete(repo, context.CollectionFactory())
+ err = collectionFactory.PublishedRepoCollection().ForEach(func(repo *deb.PublishedRepo) error {
+ e := collectionFactory.PublishedRepoCollection().LoadComplete(repo, collectionFactory)
if e != nil {
+ fmt.Fprintf(os.Stderr, "Error found on one publish (prefix:%s / distribution:%s / component:%s\n)",
+ repo.StoragePrefix(), repo.Distribution, repo.Components())
return e
}
@@ -61,6 +77,42 @@ func aptlyPublishList(cmd *commander.Command, args []string) error {
return err
}
+func aptlyPublishListJSON(cmd *commander.Command, args []string) error {
+ var err error
+
+ repos := make([]*deb.PublishedRepo, 0, context.NewCollectionFactory().PublishedRepoCollection().Len())
+
+ err = context.NewCollectionFactory().PublishedRepoCollection().ForEach(func(repo *deb.PublishedRepo) error {
+ e := context.NewCollectionFactory().PublishedRepoCollection().LoadComplete(repo, context.NewCollectionFactory())
+ if e != nil {
+ fmt.Fprintf(os.Stderr, "Error found on one publish (prefix:%s / distribution:%s / component:%s\n)",
+ repo.StoragePrefix(), repo.Distribution, repo.Components())
+ return e
+ }
+
+ repos = append(repos, repo)
+
+ return nil
+ })
+
+ if err != nil {
+ return fmt.Errorf("unable to load list of repos: %s", err)
+ }
+
+ context.CloseDatabase()
+
+ sort.Slice(repos, func(i, j int) bool {
+ return repos[i].GetPath() < repos[j].GetPath()
+ })
+ if output, e := json.MarshalIndent(repos, "", " "); e == nil {
+ fmt.Println(string(output))
+ } else {
+ err = e
+ }
+
+ return err
+}
+
func makeCmdPublishList() *commander.Command {
cmd := &commander.Command{
Run: aptlyPublishList,
@@ -75,6 +127,7 @@ Example:
`,
}
+ cmd.Flag.Bool("json", false, "display list in JSON format")
cmd.Flag.Bool("raw", false, "display list in machine-readable format")
return cmd
diff --git a/cmd/publish_repo.go b/cmd/publish_repo.go
index 33022fa9..3e357cb8 100644
--- a/cmd/publish_repo.go
+++ b/cmd/publish_repo.go
@@ -37,15 +37,17 @@ Example:
cmd.Flag.String("gpg-key", "", "GPG key ID to use when signing the release")
cmd.Flag.Var(&keyRingsFlag{}, "keyring", "GPG keyring to use (instead of default)")
cmd.Flag.String("secret-keyring", "", "GPG secret keyring to use (instead of default)")
- cmd.Flag.String("passphrase", "", "GPG passhprase for the key (warning: could be insecure)")
- cmd.Flag.String("passphrase-file", "", "GPG passhprase-file for the key (warning: could be insecure)")
+ cmd.Flag.String("passphrase", "", "GPG passphrase for the key (warning: could be insecure)")
+ cmd.Flag.String("passphrase-file", "", "GPG passphrase-file for the key (warning: could be insecure)")
cmd.Flag.Bool("batch", false, "run GPG with detached tty")
cmd.Flag.Bool("skip-signing", false, "don't sign Release files with GPG")
cmd.Flag.Bool("skip-contents", false, "don't generate Contents indexes")
+ cmd.Flag.Bool("skip-bz2", false, "don't generate bzipped indexes")
cmd.Flag.String("origin", "", "origin name to publish")
cmd.Flag.String("notautomatic", "", "set value for NotAutomatic field")
cmd.Flag.String("butautomaticupgrades", "", "set value for ButAutomaticUpgrades field")
cmd.Flag.String("label", "", "label to publish")
+ cmd.Flag.String("suite", "", "suite to publish (defaults to distribution)")
cmd.Flag.Bool("force-overwrite", false, "overwrite files in package pool in case of mismatch")
cmd.Flag.Bool("acquire-by-hash", false, "provide index files by hash")
diff --git a/cmd/publish_show.go b/cmd/publish_show.go
index cb4c959e..3b9ec4e3 100644
--- a/cmd/publish_show.go
+++ b/cmd/publish_show.go
@@ -1,6 +1,7 @@
package cmd
import (
+ "encoding/json"
"fmt"
"strings"
@@ -9,12 +10,23 @@ import (
)
func aptlyPublishShow(cmd *commander.Command, args []string) error {
- var err error
if len(args) < 1 || len(args) > 2 {
cmd.Usage()
return commander.ErrCommandError
}
+ jsonFlag := cmd.Flag.Lookup("json").Value.Get().(bool)
+
+ if jsonFlag {
+ return aptlyPublishShowJSON(cmd, args)
+ }
+
+ return aptlyPublishShowTxt(cmd, args)
+}
+
+func aptlyPublishShowTxt(cmd *commander.Command, args []string) error {
+ var err error
+
distribution := args[0]
param := "."
@@ -24,7 +36,8 @@ func aptlyPublishShow(cmd *commander.Command, args []string) error {
storage, prefix := deb.ParsePrefix(param)
- repo, err := context.CollectionFactory().PublishedRepoCollection().ByStoragePrefixDistribution(storage, prefix, distribution)
+ collectionFactory := context.NewCollectionFactory()
+ repo, err := collectionFactory.PublishedRepoCollection().ByStoragePrefixDistribution(storage, prefix, distribution)
if err != nil {
return fmt.Errorf("unable to show: %s", err)
}
@@ -42,13 +55,13 @@ func aptlyPublishShow(cmd *commander.Command, args []string) error {
for component, sourceID := range repo.Sources {
var name string
if repo.SourceKind == deb.SourceSnapshot {
- source, e := context.CollectionFactory().SnapshotCollection().ByUUID(sourceID)
+ source, e := collectionFactory.SnapshotCollection().ByUUID(sourceID)
if e != nil {
continue
}
name = source.Name
} else if repo.SourceKind == deb.SourceLocalRepo {
- source, e := context.CollectionFactory().LocalRepoCollection().ByUUID(sourceID)
+ source, e := collectionFactory.LocalRepoCollection().ByUUID(sourceID)
if e != nil {
continue
}
@@ -63,6 +76,36 @@ func aptlyPublishShow(cmd *commander.Command, args []string) error {
return err
}
+func aptlyPublishShowJSON(cmd *commander.Command, args []string) error {
+ var err error
+
+ distribution := args[0]
+ param := "."
+
+ if len(args) == 2 {
+ param = args[1]
+ }
+
+ storage, prefix := deb.ParsePrefix(param)
+
+ repo, err := context.NewCollectionFactory().PublishedRepoCollection().ByStoragePrefixDistribution(storage, prefix, distribution)
+ if err != nil {
+ return fmt.Errorf("unable to show: %s", err)
+ }
+
+ err = context.NewCollectionFactory().PublishedRepoCollection().LoadComplete(repo, context.NewCollectionFactory())
+ if err != nil {
+ return err
+ }
+
+ var output []byte
+ if output, err = json.MarshalIndent(repo, "", " "); err == nil {
+ fmt.Println(string(output))
+ }
+
+ return err
+}
+
func makeCmdPublishShow() *commander.Command {
cmd := &commander.Command{
Run: aptlyPublishShow,
@@ -77,5 +120,7 @@ Example:
`,
}
+ cmd.Flag.Bool("json", false, "display record in JSON format")
+
return cmd
}
diff --git a/cmd/publish_snapshot.go b/cmd/publish_snapshot.go
index 6e3e0952..5b02a6be 100644
--- a/cmd/publish_snapshot.go
+++ b/cmd/publish_snapshot.go
@@ -15,6 +15,7 @@ func aptlyPublishSnapshotOrRepo(cmd *commander.Command, args []string) error {
var err error
components := strings.Split(context.Flags().Lookup("component").Value.String(), ",")
+ collectionFactory := context.NewCollectionFactory()
if len(args) < len(components) || len(args) > len(components)+1 {
cmd.Usage()
@@ -43,12 +44,12 @@ func aptlyPublishSnapshotOrRepo(cmd *commander.Command, args []string) error {
)
for _, name := range args {
- snapshot, err = context.CollectionFactory().SnapshotCollection().ByName(name)
+ snapshot, err = collectionFactory.SnapshotCollection().ByName(name)
if err != nil {
return fmt.Errorf("unable to publish: %s", err)
}
- err = context.CollectionFactory().SnapshotCollection().LoadComplete(snapshot)
+ err = collectionFactory.SnapshotCollection().LoadComplete(snapshot)
if err != nil {
return fmt.Errorf("unable to publish: %s", err)
}
@@ -79,12 +80,12 @@ func aptlyPublishSnapshotOrRepo(cmd *commander.Command, args []string) error {
)
for _, name := range args {
- localRepo, err = context.CollectionFactory().LocalRepoCollection().ByName(name)
+ localRepo, err = collectionFactory.LocalRepoCollection().ByName(name)
if err != nil {
return fmt.Errorf("unable to publish: %s", err)
}
- err = context.CollectionFactory().LocalRepoCollection().LoadComplete(localRepo)
+ err = collectionFactory.LocalRepoCollection().LoadComplete(localRepo)
if err != nil {
return fmt.Errorf("unable to publish: %s", err)
}
@@ -116,7 +117,7 @@ func aptlyPublishSnapshotOrRepo(cmd *commander.Command, args []string) error {
notAutomatic := context.Flags().Lookup("notautomatic").Value.String()
butAutomaticUpgrades := context.Flags().Lookup("butautomaticupgrades").Value.String()
- published, err := deb.NewPublishedRepo(storage, prefix, distribution, context.ArchitecturesList(), components, sources, context.CollectionFactory())
+ published, err := deb.NewPublishedRepo(storage, prefix, distribution, context.ArchitecturesList(), components, sources, collectionFactory)
if err != nil {
return fmt.Errorf("unable to publish: %s", err)
}
@@ -130,6 +131,7 @@ func aptlyPublishSnapshotOrRepo(cmd *commander.Command, args []string) error {
published.ButAutomaticUpgrades = butAutomaticUpgrades
}
published.Label = context.Flags().Lookup("label").Value.String()
+ published.Suite = context.Flags().Lookup("suite").Value.String()
published.SkipContents = context.Config().SkipContentsPublishing
@@ -137,13 +139,18 @@ func aptlyPublishSnapshotOrRepo(cmd *commander.Command, args []string) error {
published.SkipContents = context.Flags().Lookup("skip-contents").Value.Get().(bool)
}
+ published.SkipBz2 = context.Config().SkipBz2Publishing
+ if context.Flags().IsSet("skip-bz2") {
+ published.SkipBz2 = context.Flags().Lookup("skip-bz2").Value.Get().(bool)
+ }
+
if context.Flags().IsSet("acquire-by-hash") {
published.AcquireByHash = context.Flags().Lookup("acquire-by-hash").Value.Get().(bool)
}
- duplicate := context.CollectionFactory().PublishedRepoCollection().CheckDuplicate(published)
+ duplicate := collectionFactory.PublishedRepoCollection().CheckDuplicate(published)
if duplicate != nil {
- context.CollectionFactory().PublishedRepoCollection().LoadComplete(duplicate, context.CollectionFactory())
+ collectionFactory.PublishedRepoCollection().LoadComplete(duplicate, collectionFactory)
return fmt.Errorf("prefix/distribution already used by another published repo: %s", duplicate)
}
@@ -158,12 +165,12 @@ func aptlyPublishSnapshotOrRepo(cmd *commander.Command, args []string) error {
"the same package pool.\n")
}
- err = published.Publish(context.PackagePool(), context, context.CollectionFactory(), signer, context.Progress(), forceOverwrite)
+ err = published.Publish(context.PackagePool(), context, collectionFactory, signer, context.Progress(), forceOverwrite)
if err != nil {
return fmt.Errorf("unable to publish: %s", err)
}
- err = context.CollectionFactory().PublishedRepoCollection().Add(published)
+ err = collectionFactory.PublishedRepoCollection().Add(published)
if err != nil {
return fmt.Errorf("unable to save to DB: %s", err)
}
@@ -221,15 +228,17 @@ Example:
cmd.Flag.String("gpg-key", "", "GPG key ID to use when signing the release")
cmd.Flag.Var(&keyRingsFlag{}, "keyring", "GPG keyring to use (instead of default)")
cmd.Flag.String("secret-keyring", "", "GPG secret keyring to use (instead of default)")
- cmd.Flag.String("passphrase", "", "GPG passhprase for the key (warning: could be insecure)")
- cmd.Flag.String("passphrase-file", "", "GPG passhprase-file for the key (warning: could be insecure)")
+ cmd.Flag.String("passphrase", "", "GPG passphrase for the key (warning: could be insecure)")
+ cmd.Flag.String("passphrase-file", "", "GPG passphrase-file for the key (warning: could be insecure)")
cmd.Flag.Bool("batch", false, "run GPG with detached tty")
cmd.Flag.Bool("skip-signing", false, "don't sign Release files with GPG")
cmd.Flag.Bool("skip-contents", false, "don't generate Contents indexes")
+ cmd.Flag.Bool("skip-bz2", false, "don't generate bzipped indexes")
cmd.Flag.String("origin", "", "overwrite origin name to publish")
cmd.Flag.String("notautomatic", "", "overwrite value for NotAutomatic field")
cmd.Flag.String("butautomaticupgrades", "", "overwrite value for ButAutomaticUpgrades field")
cmd.Flag.String("label", "", "label to publish")
+ cmd.Flag.String("suite", "", "suite to publish (defaults to distribution)")
cmd.Flag.Bool("force-overwrite", false, "overwrite files in package pool in case of mismatch")
cmd.Flag.Bool("acquire-by-hash", false, "provide index files by hash")
diff --git a/cmd/publish_switch.go b/cmd/publish_switch.go
index d367e996..0784fba3 100644
--- a/cmd/publish_switch.go
+++ b/cmd/publish_switch.go
@@ -39,7 +39,8 @@ func aptlyPublishSwitch(cmd *commander.Command, args []string) error {
var published *deb.PublishedRepo
- published, err = context.CollectionFactory().PublishedRepoCollection().ByStoragePrefixDistribution(storage, prefix, distribution)
+ collectionFactory := context.NewCollectionFactory()
+ published, err = collectionFactory.PublishedRepoCollection().ByStoragePrefixDistribution(storage, prefix, distribution)
if err != nil {
return fmt.Errorf("unable to update: %s", err)
}
@@ -48,7 +49,7 @@ func aptlyPublishSwitch(cmd *commander.Command, args []string) error {
return fmt.Errorf("unable to update: not a snapshot publish")
}
- err = context.CollectionFactory().PublishedRepoCollection().LoadComplete(published, context.CollectionFactory())
+ err = collectionFactory.PublishedRepoCollection().LoadComplete(published, collectionFactory)
if err != nil {
return fmt.Errorf("unable to update: %s", err)
}
@@ -67,12 +68,12 @@ func aptlyPublishSwitch(cmd *commander.Command, args []string) error {
return fmt.Errorf("unable to switch: component %s is not in published repository", component)
}
- snapshot, err = context.CollectionFactory().SnapshotCollection().ByName(names[i])
+ snapshot, err = collectionFactory.SnapshotCollection().ByName(names[i])
if err != nil {
return fmt.Errorf("unable to switch: %s", err)
}
- err = context.CollectionFactory().SnapshotCollection().LoadComplete(snapshot)
+ err = collectionFactory.SnapshotCollection().LoadComplete(snapshot)
if err != nil {
return fmt.Errorf("unable to switch: %s", err)
}
@@ -95,20 +96,24 @@ func aptlyPublishSwitch(cmd *commander.Command, args []string) error {
published.SkipContents = context.Flags().Lookup("skip-contents").Value.Get().(bool)
}
- err = published.Publish(context.PackagePool(), context, context.CollectionFactory(), signer, context.Progress(), forceOverwrite)
+ if context.Flags().IsSet("skip-bz2") {
+ published.SkipBz2 = context.Flags().Lookup("skip-bz2").Value.Get().(bool)
+ }
+
+ err = published.Publish(context.PackagePool(), context, collectionFactory, signer, context.Progress(), forceOverwrite)
if err != nil {
return fmt.Errorf("unable to publish: %s", err)
}
- err = context.CollectionFactory().PublishedRepoCollection().Update(published)
+ err = collectionFactory.PublishedRepoCollection().Update(published)
if err != nil {
return fmt.Errorf("unable to save to DB: %s", err)
}
skipCleanup := context.Flags().Lookup("skip-cleanup").Value.Get().(bool)
if !skipCleanup {
- err = context.CollectionFactory().PublishedRepoCollection().CleanupPrefixComponentFiles(published.Prefix, components,
- context.GetPublishedStorage(storage), context.CollectionFactory(), context.Progress())
+ err = collectionFactory.PublishedRepoCollection().CleanupPrefixComponentFiles(published.Prefix, components,
+ context.GetPublishedStorage(storage), collectionFactory, context.Progress())
if err != nil {
return fmt.Errorf("unable to update: %s", err)
}
@@ -147,11 +152,12 @@ This command would switch published repository (with one component) named ppa/wh
cmd.Flag.String("gpg-key", "", "GPG key ID to use when signing the release")
cmd.Flag.Var(&keyRingsFlag{}, "keyring", "GPG keyring to use (instead of default)")
cmd.Flag.String("secret-keyring", "", "GPG secret keyring to use (instead of default)")
- cmd.Flag.String("passphrase", "", "GPG passhprase for the key (warning: could be insecure)")
- cmd.Flag.String("passphrase-file", "", "GPG passhprase-file for the key (warning: could be insecure)")
+ cmd.Flag.String("passphrase", "", "GPG passphrase for the key (warning: could be insecure)")
+ cmd.Flag.String("passphrase-file", "", "GPG passphrase-file for the key (warning: could be insecure)")
cmd.Flag.Bool("batch", false, "run GPG with detached tty")
cmd.Flag.Bool("skip-signing", false, "don't sign Release files with GPG")
cmd.Flag.Bool("skip-contents", false, "don't generate Contents indexes")
+ cmd.Flag.Bool("skip-bz2", false, "don't generate bzipped indexes")
cmd.Flag.String("component", "", "component names to update (for multi-component publishing, separate components with commas)")
cmd.Flag.Bool("force-overwrite", false, "overwrite files in package pool in case of mismatch")
cmd.Flag.Bool("skip-cleanup", false, "don't remove unreferenced files in prefix/component")
diff --git a/cmd/publish_update.go b/cmd/publish_update.go
index b18f767e..fcdea8ed 100644
--- a/cmd/publish_update.go
+++ b/cmd/publish_update.go
@@ -25,7 +25,8 @@ func aptlyPublishUpdate(cmd *commander.Command, args []string) error {
var published *deb.PublishedRepo
- published, err = context.CollectionFactory().PublishedRepoCollection().ByStoragePrefixDistribution(storage, prefix, distribution)
+ collectionFactory := context.NewCollectionFactory()
+ published, err = collectionFactory.PublishedRepoCollection().ByStoragePrefixDistribution(storage, prefix, distribution)
if err != nil {
return fmt.Errorf("unable to update: %s", err)
}
@@ -34,7 +35,7 @@ func aptlyPublishUpdate(cmd *commander.Command, args []string) error {
return fmt.Errorf("unable to update: not a local repository publish")
}
- err = context.CollectionFactory().PublishedRepoCollection().LoadComplete(published, context.CollectionFactory())
+ err = collectionFactory.PublishedRepoCollection().LoadComplete(published, collectionFactory)
if err != nil {
return fmt.Errorf("unable to update: %s", err)
}
@@ -59,20 +60,24 @@ func aptlyPublishUpdate(cmd *commander.Command, args []string) error {
published.SkipContents = context.Flags().Lookup("skip-contents").Value.Get().(bool)
}
- err = published.Publish(context.PackagePool(), context, context.CollectionFactory(), signer, context.Progress(), forceOverwrite)
+ if context.Flags().IsSet("skip-bz2") {
+ published.SkipBz2 = context.Flags().Lookup("skip-bz2").Value.Get().(bool)
+ }
+
+ err = published.Publish(context.PackagePool(), context, collectionFactory, signer, context.Progress(), forceOverwrite)
if err != nil {
return fmt.Errorf("unable to publish: %s", err)
}
- err = context.CollectionFactory().PublishedRepoCollection().Update(published)
+ err = collectionFactory.PublishedRepoCollection().Update(published)
if err != nil {
return fmt.Errorf("unable to save to DB: %s", err)
}
skipCleanup := context.Flags().Lookup("skip-cleanup").Value.Get().(bool)
if !skipCleanup {
- err = context.CollectionFactory().PublishedRepoCollection().CleanupPrefixComponentFiles(published.Prefix, components,
- context.GetPublishedStorage(storage), context.CollectionFactory(), context.Progress())
+ err = collectionFactory.PublishedRepoCollection().CleanupPrefixComponentFiles(published.Prefix, components,
+ context.GetPublishedStorage(storage), collectionFactory, context.Progress())
if err != nil {
return fmt.Errorf("unable to update: %s", err)
}
@@ -106,11 +111,12 @@ Example:
cmd.Flag.String("gpg-key", "", "GPG key ID to use when signing the release")
cmd.Flag.Var(&keyRingsFlag{}, "keyring", "GPG keyring to use (instead of default)")
cmd.Flag.String("secret-keyring", "", "GPG secret keyring to use (instead of default)")
- cmd.Flag.String("passphrase", "", "GPG passhprase for the key (warning: could be insecure)")
- cmd.Flag.String("passphrase-file", "", "GPG passhprase-file for the key (warning: could be insecure)")
+ cmd.Flag.String("passphrase", "", "GPG passphrase for the key (warning: could be insecure)")
+ cmd.Flag.String("passphrase-file", "", "GPG passphrase-file for the key (warning: could be insecure)")
cmd.Flag.Bool("batch", false, "run GPG with detached tty")
cmd.Flag.Bool("skip-signing", false, "don't sign Release files with GPG")
cmd.Flag.Bool("skip-contents", false, "don't generate Contents indexes")
+ cmd.Flag.Bool("skip-bz2", false, "don't generate bzipped indexes")
cmd.Flag.Bool("force-overwrite", false, "overwrite files in package pool in case of mismatch")
cmd.Flag.Bool("skip-cleanup", false, "don't remove unreferenced files in prefix/component")
diff --git a/cmd/repo_add.go b/cmd/repo_add.go
index 0482b5a0..8189e783 100644
--- a/cmd/repo_add.go
+++ b/cmd/repo_add.go
@@ -22,19 +22,20 @@ func aptlyRepoAdd(cmd *commander.Command, args []string) error {
verifier := context.GetVerifier()
- repo, err := context.CollectionFactory().LocalRepoCollection().ByName(name)
+ collectionFactory := context.NewCollectionFactory()
+ repo, err := collectionFactory.LocalRepoCollection().ByName(name)
if err != nil {
return fmt.Errorf("unable to add: %s", err)
}
- err = context.CollectionFactory().LocalRepoCollection().LoadComplete(repo)
+ err = collectionFactory.LocalRepoCollection().LoadComplete(repo)
if err != nil {
return fmt.Errorf("unable to add: %s", err)
}
context.Progress().Printf("Loading packages...\n")
- list, err := deb.NewPackageListFromRefList(repo.RefList(), context.CollectionFactory().PackageCollection(), context.Progress())
+ list, err := deb.NewPackageListFromRefList(repo.RefList(), collectionFactory.PackageCollection(), context.Progress())
if err != nil {
return fmt.Errorf("unable to load packages: %s", err)
}
@@ -48,8 +49,8 @@ func aptlyRepoAdd(cmd *commander.Command, args []string) error {
var processedFiles, failedFiles2 []string
processedFiles, failedFiles2, err = deb.ImportPackageFiles(list, packageFiles, forceReplace, verifier, context.PackagePool(),
- context.CollectionFactory().PackageCollection(), &aptly.ConsoleResultReporter{Progress: context.Progress()}, nil,
- context.CollectionFactory().ChecksumCollection())
+ collectionFactory.PackageCollection(), &aptly.ConsoleResultReporter{Progress: context.Progress()}, nil,
+ collectionFactory.ChecksumCollection)
failedFiles = append(failedFiles, failedFiles2...)
if err != nil {
return fmt.Errorf("unable to import package files: %s", err)
@@ -59,7 +60,7 @@ func aptlyRepoAdd(cmd *commander.Command, args []string) error {
repo.UpdateRefList(deb.NewPackageRefListFromPackageList(list))
- err = context.CollectionFactory().LocalRepoCollection().Update(repo)
+ err = collectionFactory.LocalRepoCollection().Update(repo)
if err != nil {
return fmt.Errorf("unable to save: %s", err)
}
diff --git a/cmd/repo_create.go b/cmd/repo_create.go
index 7a75e92c..5fef46d9 100644
--- a/cmd/repo_create.go
+++ b/cmd/repo_create.go
@@ -27,15 +27,16 @@ func aptlyRepoCreate(cmd *commander.Command, args []string) error {
}
}
+ collectionFactory := context.NewCollectionFactory()
if len(args) == 4 {
var snapshot *deb.Snapshot
- snapshot, err = context.CollectionFactory().SnapshotCollection().ByName(args[3])
+ snapshot, err = collectionFactory.SnapshotCollection().ByName(args[3])
if err != nil {
return fmt.Errorf("unable to load source snapshot: %s", err)
}
- err = context.CollectionFactory().SnapshotCollection().LoadComplete(snapshot)
+ err = collectionFactory.SnapshotCollection().LoadComplete(snapshot)
if err != nil {
return fmt.Errorf("unable to load source snapshot: %s", err)
}
@@ -43,7 +44,7 @@ func aptlyRepoCreate(cmd *commander.Command, args []string) error {
repo.UpdateRefList(snapshot.RefList())
}
- err = context.CollectionFactory().LocalRepoCollection().Add(repo)
+ err = collectionFactory.LocalRepoCollection().Add(repo)
if err != nil {
return fmt.Errorf("unable to add local repo: %s", err)
}
diff --git a/cmd/repo_drop.go b/cmd/repo_drop.go
index 9c492d55..7505399f 100644
--- a/cmd/repo_drop.go
+++ b/cmd/repo_drop.go
@@ -15,17 +15,18 @@ func aptlyRepoDrop(cmd *commander.Command, args []string) error {
}
name := args[0]
+ collectionFactory := context.NewCollectionFactory()
- repo, err := context.CollectionFactory().LocalRepoCollection().ByName(name)
+ repo, err := collectionFactory.LocalRepoCollection().ByName(name)
if err != nil {
return fmt.Errorf("unable to drop: %s", err)
}
- published := context.CollectionFactory().PublishedRepoCollection().ByLocalRepo(repo)
+ published := collectionFactory.PublishedRepoCollection().ByLocalRepo(repo)
if len(published) > 0 {
fmt.Printf("Local repo `%s` is published currently:\n", repo.Name)
for _, repo := range published {
- err = context.CollectionFactory().PublishedRepoCollection().LoadComplete(repo, context.CollectionFactory())
+ err = collectionFactory.PublishedRepoCollection().LoadComplete(repo, collectionFactory)
if err != nil {
return fmt.Errorf("unable to load published: %s", err)
}
@@ -37,7 +38,7 @@ func aptlyRepoDrop(cmd *commander.Command, args []string) error {
force := context.Flags().Lookup("force").Value.Get().(bool)
if !force {
- snapshots := context.CollectionFactory().SnapshotCollection().ByLocalRepoSource(repo)
+ snapshots := collectionFactory.SnapshotCollection().ByLocalRepoSource(repo)
if len(snapshots) > 0 {
fmt.Printf("Local repo `%s` was used to create following snapshots:\n", repo.Name)
@@ -49,7 +50,7 @@ func aptlyRepoDrop(cmd *commander.Command, args []string) error {
}
}
- err = context.CollectionFactory().LocalRepoCollection().Drop(repo)
+ err = collectionFactory.LocalRepoCollection().Drop(repo)
if err != nil {
return fmt.Errorf("unable to drop: %s", err)
}
diff --git a/cmd/repo_edit.go b/cmd/repo_edit.go
index a6812680..bc81dc4a 100644
--- a/cmd/repo_edit.go
+++ b/cmd/repo_edit.go
@@ -16,12 +16,13 @@ func aptlyRepoEdit(cmd *commander.Command, args []string) error {
return commander.ErrCommandError
}
- repo, err := context.CollectionFactory().LocalRepoCollection().ByName(args[0])
+ collectionFactory := context.NewCollectionFactory()
+ repo, err := collectionFactory.LocalRepoCollection().ByName(args[0])
if err != nil {
return fmt.Errorf("unable to edit: %s", err)
}
- err = context.CollectionFactory().LocalRepoCollection().LoadComplete(repo)
+ err = collectionFactory.LocalRepoCollection().LoadComplete(repo)
if err != nil {
return fmt.Errorf("unable to edit: %s", err)
}
@@ -52,7 +53,7 @@ func aptlyRepoEdit(cmd *commander.Command, args []string) error {
}
}
- err = context.CollectionFactory().LocalRepoCollection().Update(repo)
+ err = collectionFactory.LocalRepoCollection().Update(repo)
if err != nil {
return fmt.Errorf("unable to edit: %s", err)
}
diff --git a/cmd/repo_include.go b/cmd/repo_include.go
index 120d0244..b84b96a3 100644
--- a/cmd/repo_include.go
+++ b/cmd/repo_include.go
@@ -2,6 +2,7 @@ package cmd
import (
"fmt"
+ "text/template"
"github.com/aptly-dev/aptly/aptly"
"github.com/aptly-dev/aptly/deb"
@@ -31,6 +32,13 @@ func aptlyRepoInclude(cmd *commander.Command, args []string) error {
ignoreSignatures := context.Flags().Lookup("ignore-signatures").Value.Get().(bool)
noRemoveFiles := context.Flags().Lookup("no-remove-files").Value.Get().(bool)
repoTemplateString := context.Flags().Lookup("repo").Value.Get().(string)
+ collectionFactory := context.NewCollectionFactory()
+
+ var repoTemplate *template.Template
+ repoTemplate, err = template.New("repo").Parse(repoTemplateString)
+ if err != nil {
+ return fmt.Errorf("error parsing -repo template: %s", err)
+ }
uploaders := (*deb.Uploaders)(nil)
uploadersFile := context.Flags().Lookup("uploaders-file").Value.Get().(string)
@@ -54,9 +62,9 @@ func aptlyRepoInclude(cmd *commander.Command, args []string) error {
changesFiles, failedFiles = deb.CollectChangesFiles(args, reporter)
_, failedFiles2, err = deb.ImportChangesFiles(
- changesFiles, reporter, acceptUnsigned, ignoreSignatures, forceReplace, noRemoveFiles, verifier, repoTemplateString,
- context.Progress(), context.CollectionFactory().LocalRepoCollection(), context.CollectionFactory().PackageCollection(),
- context.PackagePool(), context.CollectionFactory().ChecksumCollection(),
+ changesFiles, reporter, acceptUnsigned, ignoreSignatures, forceReplace, noRemoveFiles, verifier, repoTemplate,
+ context.Progress(), collectionFactory.LocalRepoCollection(), collectionFactory.PackageCollection(),
+ context.PackagePool(), collectionFactory.ChecksumCollection,
uploaders, query.Parse)
failedFiles = append(failedFiles, failedFiles2...)
diff --git a/cmd/repo_list.go b/cmd/repo_list.go
index b2eea06b..40dec6d4 100644
--- a/cmd/repo_list.go
+++ b/cmd/repo_list.go
@@ -1,6 +1,7 @@
package cmd
import (
+ "encoding/json"
"fmt"
"sort"
@@ -9,21 +10,33 @@ import (
)
func aptlyRepoList(cmd *commander.Command, args []string) error {
- var err error
if len(args) != 0 {
cmd.Usage()
return commander.ErrCommandError
}
+ jsonFlag := cmd.Flag.Lookup("json").Value.Get().(bool)
+
+ if jsonFlag {
+ return aptlyRepoListJSON(cmd, args)
+ }
+
+ return aptlyRepoListTxt(cmd, args)
+}
+
+func aptlyRepoListTxt(cmd *commander.Command, args []string) error {
+ var err error
+
raw := cmd.Flag.Lookup("raw").Value.Get().(bool)
- repos := make([]string, context.CollectionFactory().LocalRepoCollection().Len())
+ collectionFactory := context.NewCollectionFactory()
+ repos := make([]string, collectionFactory.LocalRepoCollection().Len())
i := 0
- context.CollectionFactory().LocalRepoCollection().ForEach(func(repo *deb.LocalRepo) error {
+ collectionFactory.LocalRepoCollection().ForEach(func(repo *deb.LocalRepo) error {
if raw {
repos[i] = repo.Name
} else {
- e := context.CollectionFactory().LocalRepoCollection().LoadComplete(repo)
+ e := collectionFactory.LocalRepoCollection().LoadComplete(repo)
if e != nil {
return e
}
@@ -58,6 +71,36 @@ func aptlyRepoList(cmd *commander.Command, args []string) error {
return err
}
+func aptlyRepoListJSON(cmd *commander.Command, args []string) error {
+ var err error
+
+ repos := make([]*deb.LocalRepo, context.NewCollectionFactory().LocalRepoCollection().Len())
+ i := 0
+ context.NewCollectionFactory().LocalRepoCollection().ForEach(func(repo *deb.LocalRepo) error {
+ e := context.NewCollectionFactory().LocalRepoCollection().LoadComplete(repo)
+ if e != nil {
+ return e
+ }
+
+ repos[i] = repo
+ i++
+ return nil
+ })
+
+ context.CloseDatabase()
+
+ sort.Slice(repos, func(i, j int) bool {
+ return repos[i].Name < repos[j].Name
+ })
+ if output, e := json.MarshalIndent(repos, "", " "); e == nil {
+ fmt.Println(string(output))
+ } else {
+ err = e
+ }
+
+ return err
+}
+
func makeCmdRepoList() *commander.Command {
cmd := &commander.Command{
Run: aptlyRepoList,
@@ -72,6 +115,7 @@ Example:
`,
}
+ cmd.Flag.Bool("json", false, "display list in JSON format")
cmd.Flag.Bool("raw", false, "display list in machine-readable format")
return cmd
diff --git a/cmd/repo_move.go b/cmd/repo_move.go
index 78735ee6..8be6698b 100644
--- a/cmd/repo_move.go
+++ b/cmd/repo_move.go
@@ -19,12 +19,13 @@ func aptlyRepoMoveCopyImport(cmd *commander.Command, args []string) error {
command := cmd.Name()
- dstRepo, err := context.CollectionFactory().LocalRepoCollection().ByName(args[1])
+ collectionFactory := context.NewCollectionFactory()
+ dstRepo, err := collectionFactory.LocalRepoCollection().ByName(args[1])
if err != nil {
return fmt.Errorf("unable to %s: %s", command, err)
}
- err = context.CollectionFactory().LocalRepoCollection().LoadComplete(dstRepo)
+ err = collectionFactory.LocalRepoCollection().LoadComplete(dstRepo)
if err != nil {
return fmt.Errorf("unable to %s: %s", command, err)
}
@@ -35,7 +36,7 @@ func aptlyRepoMoveCopyImport(cmd *commander.Command, args []string) error {
)
if command == "copy" || command == "move" { // nolint: goconst
- srcRepo, err = context.CollectionFactory().LocalRepoCollection().ByName(args[0])
+ srcRepo, err = collectionFactory.LocalRepoCollection().ByName(args[0])
if err != nil {
return fmt.Errorf("unable to %s: %s", command, err)
}
@@ -44,7 +45,7 @@ func aptlyRepoMoveCopyImport(cmd *commander.Command, args []string) error {
return fmt.Errorf("unable to %s: source and destination are the same", command)
}
- err = context.CollectionFactory().LocalRepoCollection().LoadComplete(srcRepo)
+ err = collectionFactory.LocalRepoCollection().LoadComplete(srcRepo)
if err != nil {
return fmt.Errorf("unable to %s: %s", command, err)
}
@@ -53,12 +54,12 @@ func aptlyRepoMoveCopyImport(cmd *commander.Command, args []string) error {
} else if command == "import" { // nolint: goconst
var srcRemoteRepo *deb.RemoteRepo
- srcRemoteRepo, err = context.CollectionFactory().RemoteRepoCollection().ByName(args[0])
+ srcRemoteRepo, err = collectionFactory.RemoteRepoCollection().ByName(args[0])
if err != nil {
return fmt.Errorf("unable to %s: %s", command, err)
}
- err = context.CollectionFactory().RemoteRepoCollection().LoadComplete(srcRemoteRepo)
+ err = collectionFactory.RemoteRepoCollection().LoadComplete(srcRemoteRepo)
if err != nil {
return fmt.Errorf("unable to %s: %s", command, err)
}
@@ -74,12 +75,12 @@ func aptlyRepoMoveCopyImport(cmd *commander.Command, args []string) error {
context.Progress().Printf("Loading packages...\n")
- dstList, err := deb.NewPackageListFromRefList(dstRepo.RefList(), context.CollectionFactory().PackageCollection(), context.Progress())
+ dstList, err := deb.NewPackageListFromRefList(dstRepo.RefList(), collectionFactory.PackageCollection(), context.Progress())
if err != nil {
return fmt.Errorf("unable to load packages: %s", err)
}
- srcList, err := deb.NewPackageListFromRefList(srcRefList, context.CollectionFactory().PackageCollection(), context.Progress())
+ srcList, err := deb.NewPackageListFromRefList(srcRefList, collectionFactory.PackageCollection(), context.Progress())
if err != nil {
return fmt.Errorf("unable to load packages: %s", err)
}
@@ -151,7 +152,7 @@ func aptlyRepoMoveCopyImport(cmd *commander.Command, args []string) error {
} else {
dstRepo.UpdateRefList(deb.NewPackageRefListFromPackageList(dstList))
- err = context.CollectionFactory().LocalRepoCollection().Update(dstRepo)
+ err = collectionFactory.LocalRepoCollection().Update(dstRepo)
if err != nil {
return fmt.Errorf("unable to save: %s", err)
}
@@ -159,7 +160,7 @@ func aptlyRepoMoveCopyImport(cmd *commander.Command, args []string) error {
if command == "move" { // nolint: goconst
srcRepo.UpdateRefList(deb.NewPackageRefListFromPackageList(srcList))
- err = context.CollectionFactory().LocalRepoCollection().Update(srcRepo)
+ err = collectionFactory.LocalRepoCollection().Update(srcRepo)
if err != nil {
return fmt.Errorf("unable to save: %s", err)
}
diff --git a/cmd/repo_remove.go b/cmd/repo_remove.go
index 3dc10197..93e8535c 100644
--- a/cmd/repo_remove.go
+++ b/cmd/repo_remove.go
@@ -18,19 +18,20 @@ func aptlyRepoRemove(cmd *commander.Command, args []string) error {
name := args[0]
- repo, err := context.CollectionFactory().LocalRepoCollection().ByName(name)
+ collectionFactory := context.NewCollectionFactory()
+ repo, err := collectionFactory.LocalRepoCollection().ByName(name)
if err != nil {
return fmt.Errorf("unable to remove: %s", err)
}
- err = context.CollectionFactory().LocalRepoCollection().LoadComplete(repo)
+ err = collectionFactory.LocalRepoCollection().LoadComplete(repo)
if err != nil {
return fmt.Errorf("unable to remove: %s", err)
}
context.Progress().Printf("Loading packages...\n")
- list, err := deb.NewPackageListFromRefList(repo.RefList(), context.CollectionFactory().PackageCollection(), context.Progress())
+ list, err := deb.NewPackageListFromRefList(repo.RefList(), collectionFactory.PackageCollection(), context.Progress())
if err != nil {
return fmt.Errorf("unable to load packages: %s", err)
}
@@ -60,7 +61,7 @@ func aptlyRepoRemove(cmd *commander.Command, args []string) error {
} else {
repo.UpdateRefList(deb.NewPackageRefListFromPackageList(list))
- err = context.CollectionFactory().LocalRepoCollection().Update(repo)
+ err = collectionFactory.LocalRepoCollection().Update(repo)
if err != nil {
return fmt.Errorf("unable to save: %s", err)
}
diff --git a/cmd/repo_rename.go b/cmd/repo_rename.go
index b7c1073c..9234b7c7 100644
--- a/cmd/repo_rename.go
+++ b/cmd/repo_rename.go
@@ -20,18 +20,19 @@ func aptlyRepoRename(cmd *commander.Command, args []string) error {
oldName, newName := args[0], args[1]
- repo, err = context.CollectionFactory().LocalRepoCollection().ByName(oldName)
+ collectionFactory := context.NewCollectionFactory()
+ repo, err = collectionFactory.LocalRepoCollection().ByName(oldName)
if err != nil {
return fmt.Errorf("unable to rename: %s", err)
}
- _, err = context.CollectionFactory().LocalRepoCollection().ByName(newName)
+ _, err = collectionFactory.LocalRepoCollection().ByName(newName)
if err == nil {
return fmt.Errorf("unable to rename: local repo %s already exists", newName)
}
repo.Name = newName
- err = context.CollectionFactory().LocalRepoCollection().Update(repo)
+ err = collectionFactory.LocalRepoCollection().Update(repo)
if err != nil {
return fmt.Errorf("unable to rename: %s", err)
}
diff --git a/cmd/repo_show.go b/cmd/repo_show.go
index 7ca5b009..6a0be42d 100644
--- a/cmd/repo_show.go
+++ b/cmd/repo_show.go
@@ -1,27 +1,42 @@
package cmd
import (
+ "encoding/json"
"fmt"
+ "sort"
+ "github.com/aptly-dev/aptly/deb"
"github.com/smira/commander"
"github.com/smira/flag"
)
func aptlyRepoShow(cmd *commander.Command, args []string) error {
- var err error
if len(args) != 1 {
cmd.Usage()
return commander.ErrCommandError
}
+ jsonFlag := cmd.Flag.Lookup("json").Value.Get().(bool)
+
+ if jsonFlag {
+ return aptlyRepoShowJSON(cmd, args)
+ }
+
+ return aptlyRepoShowTxt(cmd, args)
+}
+
+func aptlyRepoShowTxt(cmd *commander.Command, args []string) error {
+ var err error
+
name := args[0]
- repo, err := context.CollectionFactory().LocalRepoCollection().ByName(name)
+ collectionFactory := context.NewCollectionFactory()
+ repo, err := collectionFactory.LocalRepoCollection().ByName(name)
if err != nil {
return fmt.Errorf("unable to show: %s", err)
}
- err = context.CollectionFactory().LocalRepoCollection().LoadComplete(repo)
+ err = collectionFactory.LocalRepoCollection().LoadComplete(repo)
if err != nil {
return fmt.Errorf("unable to show: %s", err)
}
@@ -37,7 +52,49 @@ func aptlyRepoShow(cmd *commander.Command, args []string) error {
withPackages := context.Flags().Lookup("with-packages").Value.Get().(bool)
if withPackages {
- ListPackagesRefList(repo.RefList())
+ ListPackagesRefList(repo.RefList(), collectionFactory)
+ }
+
+ return err
+}
+
+func aptlyRepoShowJSON(cmd *commander.Command, args []string) error {
+ var err error
+
+ name := args[0]
+
+ repo, err := context.NewCollectionFactory().LocalRepoCollection().ByName(name)
+ if err != nil {
+ return fmt.Errorf("unable to show: %s", err)
+ }
+
+ err = context.NewCollectionFactory().LocalRepoCollection().LoadComplete(repo)
+ if err != nil {
+ return fmt.Errorf("unable to show: %s", err)
+ }
+
+ // include packages if requested
+ packageList := []string{}
+ withPackages := context.Flags().Lookup("with-packages").Value.Get().(bool)
+ if withPackages {
+ if repo.RefList() != nil {
+ var list *deb.PackageList
+ list, err = deb.NewPackageListFromRefList(repo.RefList(), context.NewCollectionFactory().PackageCollection(), context.Progress())
+ if err == nil {
+ packageList = list.FullNames()
+ }
+ }
+
+ sort.Strings(packageList)
+ }
+
+ // merge the repo object with the package list
+ var output []byte
+ if output, err = json.MarshalIndent(struct {
+ *deb.LocalRepo
+ Packages []string
+ }{repo, packageList}, "", " "); err == nil {
+ fmt.Println(string(output))
}
return err
@@ -57,6 +114,7 @@ ex:
Flag: *flag.NewFlagSet("aptly-repo-show", flag.ExitOnError),
}
+ cmd.Flag.Bool("json", false, "display record in JSON format")
cmd.Flag.Bool("with-packages", false, "show list of packages")
return cmd
diff --git a/cmd/serve.go b/cmd/serve.go
index c22b1433..9efaa772 100644
--- a/cmd/serve.go
+++ b/cmd/serve.go
@@ -34,7 +34,8 @@ func aptlyServe(cmd *commander.Command, args []string) error {
return err
}
- if context.CollectionFactory().PublishedRepoCollection().Len() == 0 {
+ collectionFactory := context.NewCollectionFactory()
+ if collectionFactory.PublishedRepoCollection().Len() == 0 {
fmt.Printf("No published repositories, unable to serve.\n")
return nil
}
@@ -56,11 +57,11 @@ func aptlyServe(cmd *commander.Command, args []string) error {
fmt.Printf("Serving published repositories, recommended apt sources list:\n\n")
- sources := make(sort.StringSlice, 0, context.CollectionFactory().PublishedRepoCollection().Len())
- published := make(map[string]*deb.PublishedRepo, context.CollectionFactory().PublishedRepoCollection().Len())
+ sources := make(sort.StringSlice, 0, collectionFactory.PublishedRepoCollection().Len())
+ published := make(map[string]*deb.PublishedRepo, collectionFactory.PublishedRepoCollection().Len())
- err = context.CollectionFactory().PublishedRepoCollection().ForEach(func(repo *deb.PublishedRepo) error {
- e := context.CollectionFactory().PublishedRepoCollection().LoadComplete(repo, context.CollectionFactory())
+ err = collectionFactory.PublishedRepoCollection().ForEach(func(repo *deb.PublishedRepo) error {
+ e := collectionFactory.PublishedRepoCollection().LoadComplete(repo, collectionFactory)
if e != nil {
return e
}
diff --git a/cmd/snapshot_create.go b/cmd/snapshot_create.go
index 2f17f86d..000a78d9 100644
--- a/cmd/snapshot_create.go
+++ b/cmd/snapshot_create.go
@@ -13,13 +13,14 @@ func aptlySnapshotCreate(cmd *commander.Command, args []string) error {
snapshot *deb.Snapshot
)
+ collectionFactory := context.NewCollectionFactory()
if len(args) == 4 && args[1] == "from" && args[2] == "mirror" { // nolint: goconst
// aptly snapshot create snap from mirror mirror
var repo *deb.RemoteRepo
repoName, snapshotName := args[3], args[0]
- repo, err = context.CollectionFactory().RemoteRepoCollection().ByName(repoName)
+ repo, err = collectionFactory.RemoteRepoCollection().ByName(repoName)
if err != nil {
return fmt.Errorf("unable to create snapshot: %s", err)
}
@@ -29,7 +30,7 @@ func aptlySnapshotCreate(cmd *commander.Command, args []string) error {
return fmt.Errorf("unable to create snapshot: %s", err)
}
- err = context.CollectionFactory().RemoteRepoCollection().LoadComplete(repo)
+ err = collectionFactory.RemoteRepoCollection().LoadComplete(repo)
if err != nil {
return fmt.Errorf("unable to create snapshot: %s", err)
}
@@ -44,12 +45,12 @@ func aptlySnapshotCreate(cmd *commander.Command, args []string) error {
localRepoName, snapshotName := args[3], args[0]
- repo, err = context.CollectionFactory().LocalRepoCollection().ByName(localRepoName)
+ repo, err = collectionFactory.LocalRepoCollection().ByName(localRepoName)
if err != nil {
return fmt.Errorf("unable to create snapshot: %s", err)
}
- err = context.CollectionFactory().LocalRepoCollection().LoadComplete(repo)
+ err = collectionFactory.LocalRepoCollection().LoadComplete(repo)
if err != nil {
return fmt.Errorf("unable to create snapshot: %s", err)
}
@@ -70,7 +71,7 @@ func aptlySnapshotCreate(cmd *commander.Command, args []string) error {
return commander.ErrCommandError
}
- err = context.CollectionFactory().SnapshotCollection().Add(snapshot)
+ err = collectionFactory.SnapshotCollection().Add(snapshot)
if err != nil {
return fmt.Errorf("unable to add snapshot: %s", err)
}
diff --git a/cmd/snapshot_diff.go b/cmd/snapshot_diff.go
index 1ced963d..ccbea32e 100644
--- a/cmd/snapshot_diff.go
+++ b/cmd/snapshot_diff.go
@@ -15,31 +15,32 @@ func aptlySnapshotDiff(cmd *commander.Command, args []string) error {
}
onlyMatching := context.Flags().Lookup("only-matching").Value.Get().(bool)
+ collectionFactory := context.NewCollectionFactory()
// Load snapshot
- snapshotA, err := context.CollectionFactory().SnapshotCollection().ByName(args[0])
+ snapshotA, err := collectionFactory.SnapshotCollection().ByName(args[0])
if err != nil {
return fmt.Errorf("unable to load snapshot A: %s", err)
}
- err = context.CollectionFactory().SnapshotCollection().LoadComplete(snapshotA)
+ err = collectionFactory.SnapshotCollection().LoadComplete(snapshotA)
if err != nil {
return fmt.Errorf("unable to load snapshot A: %s", err)
}
// Load snapshot
- snapshotB, err := context.CollectionFactory().SnapshotCollection().ByName(args[1])
+ snapshotB, err := collectionFactory.SnapshotCollection().ByName(args[1])
if err != nil {
return fmt.Errorf("unable to load snapshot B: %s", err)
}
- err = context.CollectionFactory().SnapshotCollection().LoadComplete(snapshotB)
+ err = collectionFactory.SnapshotCollection().LoadComplete(snapshotB)
if err != nil {
return fmt.Errorf("unable to load snapshot B: %s", err)
}
// Calculate diff
- diff, err := snapshotA.RefList().Diff(snapshotB.RefList(), context.CollectionFactory().PackageCollection())
+ diff, err := snapshotA.RefList().Diff(snapshotB.RefList(), collectionFactory.PackageCollection())
if err != nil {
return fmt.Errorf("unable to calculate diff: %s", err)
}
diff --git a/cmd/snapshot_drop.go b/cmd/snapshot_drop.go
index a468255e..a569ff6d 100644
--- a/cmd/snapshot_drop.go
+++ b/cmd/snapshot_drop.go
@@ -15,18 +15,19 @@ func aptlySnapshotDrop(cmd *commander.Command, args []string) error {
}
name := args[0]
+ collectionFactory := context.NewCollectionFactory()
- snapshot, err := context.CollectionFactory().SnapshotCollection().ByName(name)
+ snapshot, err := collectionFactory.SnapshotCollection().ByName(name)
if err != nil {
return fmt.Errorf("unable to drop: %s", err)
}
- published := context.CollectionFactory().PublishedRepoCollection().BySnapshot(snapshot)
+ published := collectionFactory.PublishedRepoCollection().BySnapshot(snapshot)
if len(published) > 0 {
fmt.Printf("Snapshot `%s` is published currently:\n", snapshot.Name)
for _, repo := range published {
- err = context.CollectionFactory().PublishedRepoCollection().LoadComplete(repo, context.CollectionFactory())
+ err = collectionFactory.PublishedRepoCollection().LoadComplete(repo, collectionFactory)
if err != nil {
return fmt.Errorf("unable to load published: %s", err)
}
@@ -38,7 +39,7 @@ func aptlySnapshotDrop(cmd *commander.Command, args []string) error {
force := context.Flags().Lookup("force").Value.Get().(bool)
if !force {
- snapshots := context.CollectionFactory().SnapshotCollection().BySnapshotSource(snapshot)
+ snapshots := collectionFactory.SnapshotCollection().BySnapshotSource(snapshot)
if len(snapshots) > 0 {
fmt.Printf("Snapshot `%s` was used as a source in following snapshots:\n", snapshot.Name)
for _, snap := range snapshots {
@@ -49,7 +50,7 @@ func aptlySnapshotDrop(cmd *commander.Command, args []string) error {
}
}
- err = context.CollectionFactory().SnapshotCollection().Drop(snapshot)
+ err = collectionFactory.SnapshotCollection().Drop(snapshot)
if err != nil {
return fmt.Errorf("unable to drop: %s", err)
}
diff --git a/cmd/snapshot_filter.go b/cmd/snapshot_filter.go
index b861ea5e..b81a9cfc 100644
--- a/cmd/snapshot_filter.go
+++ b/cmd/snapshot_filter.go
@@ -19,21 +19,22 @@ func aptlySnapshotFilter(cmd *commander.Command, args []string) error {
}
withDeps := context.Flags().Lookup("with-deps").Value.Get().(bool)
+ collectionFactory := context.NewCollectionFactory()
// Load snapshot
- source, err := context.CollectionFactory().SnapshotCollection().ByName(args[0])
+ source, err := collectionFactory.SnapshotCollection().ByName(args[0])
if err != nil {
return fmt.Errorf("unable to filter: %s", err)
}
- err = context.CollectionFactory().SnapshotCollection().LoadComplete(source)
+ err = collectionFactory.SnapshotCollection().LoadComplete(source)
if err != nil {
return fmt.Errorf("unable to filter: %s", err)
}
// Convert snapshot to package list
context.Progress().Printf("Loading packages (%d)...\n", source.RefList().Len())
- packageList, err := deb.NewPackageListFromRefList(source.RefList(), context.CollectionFactory().PackageCollection(), context.Progress())
+ packageList, err := deb.NewPackageListFromRefList(source.RefList(), collectionFactory.PackageCollection(), context.Progress())
if err != nil {
return fmt.Errorf("unable to load packages: %s", err)
}
@@ -75,7 +76,7 @@ func aptlySnapshotFilter(cmd *commander.Command, args []string) error {
destination := deb.NewSnapshotFromPackageList(args[1], []*deb.Snapshot{source}, result,
fmt.Sprintf("Filtered '%s', query was: '%s'", source.Name, strings.Join(args[2:], " ")))
- err = context.CollectionFactory().SnapshotCollection().Add(destination)
+ err = collectionFactory.SnapshotCollection().Add(destination)
if err != nil {
return fmt.Errorf("unable to create snapshot: %s", err)
}
@@ -97,7 +98,7 @@ as 'package-name' or as package queries.
Example:
- $ aptly snapshot filter wheezy-main wheezy-required 'Priorioty (required)'
+ $ aptly snapshot filter wheezy-main wheezy-required 'Priority (required)'
`,
Flag: *flag.NewFlagSet("aptly-snapshot-filter", flag.ExitOnError),
}
diff --git a/cmd/snapshot_list.go b/cmd/snapshot_list.go
index 2d3fb29f..b7836630 100644
--- a/cmd/snapshot_list.go
+++ b/cmd/snapshot_list.go
@@ -1,6 +1,7 @@
package cmd
import (
+ "encoding/json"
"fmt"
"github.com/aptly-dev/aptly/deb"
@@ -8,16 +9,28 @@ import (
)
func aptlySnapshotList(cmd *commander.Command, args []string) error {
- var err error
if len(args) != 0 {
cmd.Usage()
return commander.ErrCommandError
}
+ jsonFlag := cmd.Flag.Lookup("json").Value.Get().(bool)
+
+ if jsonFlag {
+ return aptlySnapshotListJSON(cmd, args)
+ }
+
+ return aptlySnapshotListTxt(cmd, args)
+}
+
+func aptlySnapshotListTxt(cmd *commander.Command, args []string) error {
+ var err error
+
raw := cmd.Flag.Lookup("raw").Value.Get().(bool)
sortMethodString := cmd.Flag.Lookup("sort").Value.Get().(string)
- collection := context.CollectionFactory().SnapshotCollection()
+ collectionFactory := context.NewCollectionFactory()
+ collection := collectionFactory.SnapshotCollection()
if raw {
collection.ForEachSorted(sortMethodString, func(snapshot *deb.Snapshot) error {
@@ -46,6 +59,29 @@ func aptlySnapshotList(cmd *commander.Command, args []string) error {
return err
}
+func aptlySnapshotListJSON(cmd *commander.Command, args []string) error {
+ var err error
+
+ sortMethodString := cmd.Flag.Lookup("sort").Value.Get().(string)
+
+ collection := context.NewCollectionFactory().SnapshotCollection()
+
+ jsonSnapshots := make([]*deb.Snapshot, collection.Len())
+ i := 0
+ collection.ForEachSorted(sortMethodString, func(snapshot *deb.Snapshot) error {
+ jsonSnapshots[i] = snapshot
+ i++
+ return nil
+ })
+ if output, e := json.MarshalIndent(jsonSnapshots, "", " "); e == nil {
+ fmt.Println(string(output))
+ } else {
+ err = e
+ }
+
+ return err
+}
+
func makeCmdSnapshotList() *commander.Command {
cmd := &commander.Command{
Run: aptlySnapshotList,
@@ -60,6 +96,7 @@ Example:
`,
}
+ cmd.Flag.Bool("json", false, "display list in JSON format")
cmd.Flag.Bool("raw", false, "display list in machine-readable format")
cmd.Flag.String("sort", "name", "display list in 'name' or creation 'time' order")
diff --git a/cmd/snapshot_merge.go b/cmd/snapshot_merge.go
index 711dada1..0a319a5a 100644
--- a/cmd/snapshot_merge.go
+++ b/cmd/snapshot_merge.go
@@ -15,15 +15,16 @@ func aptlySnapshotMerge(cmd *commander.Command, args []string) error {
return commander.ErrCommandError
}
+ collectionFactory := context.NewCollectionFactory()
sources := make([]*deb.Snapshot, len(args)-1)
for i := 0; i < len(args)-1; i++ {
- sources[i], err = context.CollectionFactory().SnapshotCollection().ByName(args[i+1])
+ sources[i], err = collectionFactory.SnapshotCollection().ByName(args[i+1])
if err != nil {
return fmt.Errorf("unable to load snapshot: %s", err)
}
- err = context.CollectionFactory().SnapshotCollection().LoadComplete(sources[i])
+ err = collectionFactory.SnapshotCollection().LoadComplete(sources[i])
if err != nil {
return fmt.Errorf("unable to load snapshot: %s", err)
}
@@ -56,7 +57,7 @@ func aptlySnapshotMerge(cmd *commander.Command, args []string) error {
destination := deb.NewSnapshotFromRefList(args[0], sources, result,
fmt.Sprintf("Merged from sources: %s", strings.Join(sourceDescription, ", ")))
- err = context.CollectionFactory().SnapshotCollection().Add(destination)
+ err = collectionFactory.SnapshotCollection().Add(destination)
if err != nil {
return fmt.Errorf("unable to create snapshot: %s", err)
}
diff --git a/cmd/snapshot_pull.go b/cmd/snapshot_pull.go
index b9165b72..884b50ff 100644
--- a/cmd/snapshot_pull.go
+++ b/cmd/snapshot_pull.go
@@ -21,25 +21,26 @@ func aptlySnapshotPull(cmd *commander.Command, args []string) error {
noDeps := context.Flags().Lookup("no-deps").Value.Get().(bool)
noRemove := context.Flags().Lookup("no-remove").Value.Get().(bool)
allMatches := context.Flags().Lookup("all-matches").Value.Get().(bool)
+ collectionFactory := context.NewCollectionFactory()
// Load snapshot
- snapshot, err := context.CollectionFactory().SnapshotCollection().ByName(args[0])
+ snapshot, err := collectionFactory.SnapshotCollection().ByName(args[0])
if err != nil {
return fmt.Errorf("unable to pull: %s", err)
}
- err = context.CollectionFactory().SnapshotCollection().LoadComplete(snapshot)
+ err = collectionFactory.SnapshotCollection().LoadComplete(snapshot)
if err != nil {
return fmt.Errorf("unable to pull: %s", err)
}
// Load snapshot
- source, err := context.CollectionFactory().SnapshotCollection().ByName(args[1])
+ source, err := collectionFactory.SnapshotCollection().ByName(args[1])
if err != nil {
return fmt.Errorf("unable to pull: %s", err)
}
- err = context.CollectionFactory().SnapshotCollection().LoadComplete(source)
+ err = collectionFactory.SnapshotCollection().LoadComplete(source)
if err != nil {
return fmt.Errorf("unable to pull: %s", err)
}
@@ -49,12 +50,12 @@ func aptlySnapshotPull(cmd *commander.Command, args []string) error {
// Convert snapshot to package list
context.Progress().Printf("Loading packages (%d)...\n", snapshot.RefList().Len()+source.RefList().Len())
- packageList, err := deb.NewPackageListFromRefList(snapshot.RefList(), context.CollectionFactory().PackageCollection(), context.Progress())
+ packageList, err := deb.NewPackageListFromRefList(snapshot.RefList(), collectionFactory.PackageCollection(), context.Progress())
if err != nil {
return fmt.Errorf("unable to load packages: %s", err)
}
- sourcePackageList, err := deb.NewPackageListFromRefList(source.RefList(), context.CollectionFactory().PackageCollection(), context.Progress())
+ sourcePackageList, err := deb.NewPackageListFromRefList(source.RefList(), collectionFactory.PackageCollection(), context.Progress())
if err != nil {
return fmt.Errorf("unable to load packages: %s", err)
}
@@ -137,7 +138,7 @@ func aptlySnapshotPull(cmd *commander.Command, args []string) error {
destination := deb.NewSnapshotFromPackageList(args[2], []*deb.Snapshot{snapshot, source}, packageList,
fmt.Sprintf("Pulled into '%s' with '%s' as source, pull request was: '%s'", snapshot.Name, source.Name, strings.Join(args[3:], " ")))
- err = context.CollectionFactory().SnapshotCollection().Add(destination)
+ err = collectionFactory.SnapshotCollection().Add(destination)
if err != nil {
return fmt.Errorf("unable to create snapshot: %s", err)
}
diff --git a/cmd/snapshot_rename.go b/cmd/snapshot_rename.go
index 94047fcb..b8ac74cf 100644
--- a/cmd/snapshot_rename.go
+++ b/cmd/snapshot_rename.go
@@ -19,19 +19,20 @@ func aptlySnapshotRename(cmd *commander.Command, args []string) error {
}
oldName, newName := args[0], args[1]
+ collectionFactory := context.NewCollectionFactory()
- snapshot, err = context.CollectionFactory().SnapshotCollection().ByName(oldName)
+ snapshot, err = collectionFactory.SnapshotCollection().ByName(oldName)
if err != nil {
return fmt.Errorf("unable to rename: %s", err)
}
- _, err = context.CollectionFactory().SnapshotCollection().ByName(newName)
+ _, err = collectionFactory.SnapshotCollection().ByName(newName)
if err == nil {
return fmt.Errorf("unable to rename: snapshot %s already exists", newName)
}
snapshot.Name = newName
- err = context.CollectionFactory().SnapshotCollection().Update(snapshot)
+ err = collectionFactory.SnapshotCollection().Update(snapshot)
if err != nil {
return fmt.Errorf("unable to rename: %s", err)
}
diff --git a/cmd/snapshot_search.go b/cmd/snapshot_search.go
index 4904a298..d771af7c 100644
--- a/cmd/snapshot_search.go
+++ b/cmd/snapshot_search.go
@@ -23,17 +23,18 @@ func aptlySnapshotMirrorRepoSearch(cmd *commander.Command, args []string) error
name := args[0]
command := cmd.Parent.Name()
+ collectionFactory := context.NewCollectionFactory()
var reflist *deb.PackageRefList
if command == "snapshot" { // nolint: goconst
var snapshot *deb.Snapshot
- snapshot, err = context.CollectionFactory().SnapshotCollection().ByName(name)
+ snapshot, err = collectionFactory.SnapshotCollection().ByName(name)
if err != nil {
return fmt.Errorf("unable to search: %s", err)
}
- err = context.CollectionFactory().SnapshotCollection().LoadComplete(snapshot)
+ err = collectionFactory.SnapshotCollection().LoadComplete(snapshot)
if err != nil {
return fmt.Errorf("unable to search: %s", err)
}
@@ -41,12 +42,12 @@ func aptlySnapshotMirrorRepoSearch(cmd *commander.Command, args []string) error
reflist = snapshot.RefList()
} else if command == "mirror" {
var repo *deb.RemoteRepo
- repo, err = context.CollectionFactory().RemoteRepoCollection().ByName(name)
+ repo, err = collectionFactory.RemoteRepoCollection().ByName(name)
if err != nil {
return fmt.Errorf("unable to search: %s", err)
}
- err = context.CollectionFactory().RemoteRepoCollection().LoadComplete(repo)
+ err = collectionFactory.RemoteRepoCollection().LoadComplete(repo)
if err != nil {
return fmt.Errorf("unable to search: %s", err)
}
@@ -54,12 +55,12 @@ func aptlySnapshotMirrorRepoSearch(cmd *commander.Command, args []string) error
reflist = repo.RefList()
} else if command == "repo" { // nolint: goconst
var repo *deb.LocalRepo
- repo, err = context.CollectionFactory().LocalRepoCollection().ByName(name)
+ repo, err = collectionFactory.LocalRepoCollection().ByName(name)
if err != nil {
return fmt.Errorf("unable to search: %s", err)
}
- err = context.CollectionFactory().LocalRepoCollection().LoadComplete(repo)
+ err = collectionFactory.LocalRepoCollection().LoadComplete(repo)
if err != nil {
return fmt.Errorf("unable to search: %s", err)
}
@@ -69,7 +70,7 @@ func aptlySnapshotMirrorRepoSearch(cmd *commander.Command, args []string) error
panic("unknown command")
}
- list, err := deb.NewPackageListFromRefList(reflist, context.CollectionFactory().PackageCollection(), context.Progress())
+ list, err := deb.NewPackageListFromRefList(reflist, collectionFactory.PackageCollection(), context.Progress())
if err != nil {
return fmt.Errorf("unable to search: %s", err)
}
diff --git a/cmd/snapshot_show.go b/cmd/snapshot_show.go
index 38dfb39c..98f15a9f 100644
--- a/cmd/snapshot_show.go
+++ b/cmd/snapshot_show.go
@@ -1,7 +1,9 @@
package cmd
import (
+ "encoding/json"
"fmt"
+ "sort"
"github.com/aptly-dev/aptly/deb"
"github.com/smira/commander"
@@ -9,20 +11,31 @@ import (
)
func aptlySnapshotShow(cmd *commander.Command, args []string) error {
- var err error
if len(args) != 1 {
cmd.Usage()
return commander.ErrCommandError
}
- name := args[0]
+ jsonFlag := cmd.Flag.Lookup("json").Value.Get().(bool)
- snapshot, err := context.CollectionFactory().SnapshotCollection().ByName(name)
+ if jsonFlag {
+ return aptlySnapshotShowJSON(cmd, args)
+ }
+
+ return aptlySnapshotShowTxt(cmd, args)
+}
+
+func aptlySnapshotShowTxt(cmd *commander.Command, args []string) error {
+ var err error
+ name := args[0]
+ collectionFactory := context.NewCollectionFactory()
+
+ snapshot, err := collectionFactory.SnapshotCollection().ByName(name)
if err != nil {
return fmt.Errorf("unable to show: %s", err)
}
- err = context.CollectionFactory().SnapshotCollection().LoadComplete(snapshot)
+ err = collectionFactory.SnapshotCollection().LoadComplete(snapshot)
if err != nil {
return fmt.Errorf("unable to show: %s", err)
}
@@ -37,21 +50,21 @@ func aptlySnapshotShow(cmd *commander.Command, args []string) error {
var name string
if snapshot.SourceKind == deb.SourceSnapshot {
var source *deb.Snapshot
- source, err = context.CollectionFactory().SnapshotCollection().ByUUID(sourceID)
+ source, err = collectionFactory.SnapshotCollection().ByUUID(sourceID)
if err != nil {
continue
}
name = source.Name
} else if snapshot.SourceKind == deb.SourceLocalRepo {
var source *deb.LocalRepo
- source, err = context.CollectionFactory().LocalRepoCollection().ByUUID(sourceID)
+ source, err = collectionFactory.LocalRepoCollection().ByUUID(sourceID)
if err != nil {
continue
}
name = source.Name
} else if snapshot.SourceKind == deb.SourceRemoteRepo {
var source *deb.RemoteRepo
- source, err = context.CollectionFactory().RemoteRepoCollection().ByUUID(sourceID)
+ source, err = collectionFactory.RemoteRepoCollection().ByUUID(sourceID)
if err != nil {
continue
}
@@ -66,7 +79,78 @@ func aptlySnapshotShow(cmd *commander.Command, args []string) error {
withPackages := context.Flags().Lookup("with-packages").Value.Get().(bool)
if withPackages {
- ListPackagesRefList(snapshot.RefList())
+ ListPackagesRefList(snapshot.RefList(), collectionFactory)
+ }
+
+ return err
+}
+
+func aptlySnapshotShowJSON(cmd *commander.Command, args []string) error {
+ var err error
+
+ name := args[0]
+
+ snapshot, err := context.NewCollectionFactory().SnapshotCollection().ByName(name)
+ if err != nil {
+ return fmt.Errorf("unable to show: %s", err)
+ }
+
+ err = context.NewCollectionFactory().SnapshotCollection().LoadComplete(snapshot)
+ if err != nil {
+ return fmt.Errorf("unable to show: %s", err)
+ }
+
+ // include the sources
+ if len(snapshot.SourceIDs) > 0 {
+ for _, sourceID := range snapshot.SourceIDs {
+ if snapshot.SourceKind == deb.SourceSnapshot {
+ var source *deb.Snapshot
+ source, err = context.NewCollectionFactory().SnapshotCollection().ByUUID(sourceID)
+ if err != nil {
+ continue
+ }
+ snapshot.Snapshots = append(snapshot.Snapshots, source)
+ } else if snapshot.SourceKind == deb.SourceLocalRepo {
+ var source *deb.LocalRepo
+ source, err = context.NewCollectionFactory().LocalRepoCollection().ByUUID(sourceID)
+ if err != nil {
+ continue
+ }
+ snapshot.LocalRepos = append(snapshot.LocalRepos, source)
+ } else if snapshot.SourceKind == deb.SourceRemoteRepo {
+ var source *deb.RemoteRepo
+ source, err = context.NewCollectionFactory().RemoteRepoCollection().ByUUID(sourceID)
+ if err != nil {
+ continue
+ }
+ snapshot.RemoteRepos = append(snapshot.RemoteRepos, source)
+ }
+ }
+ }
+
+ // include packages if requested
+ withPackages := context.Flags().Lookup("with-packages").Value.Get().(bool)
+ if withPackages {
+ if snapshot.RefList() != nil {
+ var list *deb.PackageList
+ list, err = deb.NewPackageListFromRefList(snapshot.RefList(), context.NewCollectionFactory().PackageCollection(), context.Progress())
+ if err != nil {
+ return fmt.Errorf("unable to get package list: %s", err)
+ }
+
+ list.PrepareIndex()
+ list.ForEachIndexed(func(p *deb.Package) error {
+ snapshot.Packages = append(snapshot.Packages, p.GetFullName())
+ return nil
+ })
+
+ sort.Strings(snapshot.Packages)
+ }
+ }
+
+ var output []byte
+ if output, err = json.MarshalIndent(snapshot, "", " "); err == nil {
+ fmt.Println(string(output))
}
return err
@@ -87,6 +171,7 @@ Example:
Flag: *flag.NewFlagSet("aptly-snapshot-show", flag.ExitOnError),
}
+ cmd.Flag.Bool("json", false, "display record in JSON format")
cmd.Flag.Bool("with-packages", false, "show list of packages")
return cmd
diff --git a/cmd/snapshot_verify.go b/cmd/snapshot_verify.go
index 586e96a8..f815f29c 100644
--- a/cmd/snapshot_verify.go
+++ b/cmd/snapshot_verify.go
@@ -16,13 +16,14 @@ func aptlySnapshotVerify(cmd *commander.Command, args []string) error {
}
snapshots := make([]*deb.Snapshot, len(args))
+ collectionFactory := context.NewCollectionFactory()
for i := range snapshots {
- snapshots[i], err = context.CollectionFactory().SnapshotCollection().ByName(args[i])
+ snapshots[i], err = collectionFactory.SnapshotCollection().ByName(args[i])
if err != nil {
return fmt.Errorf("unable to verify: %s", err)
}
- err = context.CollectionFactory().SnapshotCollection().LoadComplete(snapshots[i])
+ err = collectionFactory.SnapshotCollection().LoadComplete(snapshots[i])
if err != nil {
return fmt.Errorf("unable to verify: %s", err)
}
@@ -30,7 +31,7 @@ func aptlySnapshotVerify(cmd *commander.Command, args []string) error {
context.Progress().Printf("Loading packages...\n")
- packageList, err := deb.NewPackageListFromRefList(snapshots[0].RefList(), context.CollectionFactory().PackageCollection(), context.Progress())
+ packageList, err := deb.NewPackageListFromRefList(snapshots[0].RefList(), collectionFactory.PackageCollection(), context.Progress())
if err != nil {
return fmt.Errorf("unable to load packages: %s", err)
}
@@ -43,7 +44,7 @@ func aptlySnapshotVerify(cmd *commander.Command, args []string) error {
var pL *deb.PackageList
for i := 1; i < len(snapshots); i++ {
- pL, err = deb.NewPackageListFromRefList(snapshots[i].RefList(), context.CollectionFactory().PackageCollection(), context.Progress())
+ pL, err = deb.NewPackageListFromRefList(snapshots[i].RefList(), collectionFactory.PackageCollection(), context.Progress())
if err != nil {
return fmt.Errorf("unable to load packages: %s", err)
}
diff --git a/codecov.yml b/codecov.yml
new file mode 100644
index 00000000..ec78c1ee
--- /dev/null
+++ b/codecov.yml
@@ -0,0 +1,7 @@
+coverage:
+ status:
+ project:
+ default:
+ target: auto
+ threshold: 0%
+ if_ci_failed: error
diff --git a/completion.d/_aptly b/completion.d/_aptly
index c93cd68d..505c0609 100644
--- a/completion.d/_aptly
+++ b/completion.d/_aptly
@@ -204,6 +204,7 @@ local keyring="*-keyring=[gpg keyring to use when verifying Release file (could
update)
_arguments \
"-download-limit=[limit download speed (kB/s)]:kB/s: " \
+ "-downloader=[downloader to use]:str: " \
"-force=[force update mirror even if it is locked by another process]:$bool" \
"-ignore-checksums=[ignore checksum mismatches while downloading package files and metadata]:$bool" \
"-ignore-signatures=[disable verification of Release file signatures]:$bool" \
@@ -285,6 +286,7 @@ local keyring="*-keyring=[gpg keyring to use when verifying Release file (could
;;
list)
_arguments '1:: :' \
+ "-json=[display list in JSON format]:$bool" \
"-raw=[display list in machine−readable format]:$bool"
;;
move)
@@ -300,6 +302,7 @@ local keyring="*-keyring=[gpg keyring to use when verifying Release file (could
;;
show)
_arguments \
+ "-json=[display record in JSON format]:$bool" \
"-with-packages=[show list of packages]:$bool" \
"(-)2:repo name:$repos"
;;
@@ -439,10 +442,11 @@ local keyring="*-keyring=[gpg keyring to use when verifying Release file (could
"-force-overwrite=[overwrite files in package pool in case of mismatch]:$bool"
"-gpg-key=[GPG key ID to use when signing the release]:gpg key id:$gpg_keys"
"-keyring=[GPG keyring to use (instead of default)]:keyring file:_files -g '*.gpg'"
- "-passphrase=[GPG passhprase for the key (warning: could be insecure)]:passphrase: "
- "-passphrase-file=[GPG passhprase−file for the key (warning: could be insecure)]:passphrase file:_files"
+ "-passphrase=[GPG passphrase for the key (warning: could be insecure)]:passphrase: "
+ "-passphrase-file=[GPG passphrase−file for the key (warning: could be insecure)]:passphrase file:_files"
"-secret-keyring=[GPG secret keyring to use (instead of default)]:secret-keyring:_files"
"-skip-contents=[don’t generate Contents indexes]:$bool"
+ "-skip-bz2=[don't generate bzipped indexes]:$bool"
"-skip-signing=[don’t sign Release files with GPG]:$bool"
)
local components_options=(
@@ -452,6 +456,7 @@ local keyring="*-keyring=[gpg keyring to use when verifying Release file (could
"-butautomaticupgrades=[set value for ButAutomaticUpgrades field]:$bool"
"-distribution=[distribution name to publish]:distribution:($dists)"
"-label=[label to publish]:label: "
+ "-suite=[suite to publish]:suite: "
"-notautomatic=[set value for NotAutomatic field]:notautomatic: "
"-origin=[origin name to publish]:origin: "
${components_options[@]}
diff --git a/completion.d/aptly b/completion.d/aptly
index 0308653e..afddd63d 100644
--- a/completion.d/aptly
+++ b/completion.d/aptly
@@ -216,7 +216,7 @@ _aptly()
"update")
if [[ $numargs -eq 0 ]]; then
if [[ "$cur" == -* ]]; then
- COMPREPLY=($(compgen -W "-force -download-limit= -ignore-checksums -ignore-signatures -keyring= -skip-existing-packages" -- ${cur}))
+ COMPREPLY=($(compgen -W "-force -download-limit= -downloader= -ignore-checksums -ignore-signatures -keyring= -skip-existing-packages" -- ${cur}))
else
COMPREPLY=($(compgen -W "$(__aptly_mirror_list)" -- ${cur}))
fi
@@ -314,7 +314,11 @@ _aptly()
;;
"list")
if [[ $numargs -eq 0 ]]; then
- COMPREPLY=($(compgen -W "-raw" -- ${cur}))
+ if [[ "$cur" == -* ]]; then
+ COMPREPLY=($(compgen -W "-raw -json" -- ${cur}))
+ else
+ COMPREPLY=($(compgen -W "$(__aptly_repo_list)" -- ${cur}))
+ fi
return 0
fi
;;
@@ -361,7 +365,7 @@ _aptly()
"show")
if [[ $numargs -eq 0 ]]; then
if [[ "$cur" == -* ]]; then
- COMPREPLY=($(compgen -W "-with-packages" -- ${cur}))
+ COMPREPLY=($(compgen -W "-json -with-packages" -- ${cur}))
else
COMPREPLY=($(compgen -W "$(__aptly_repo_list)" -- ${cur}))
fi
@@ -499,7 +503,7 @@ _aptly()
"snapshot"|"repo")
if [[ $numargs -eq 0 ]]; then
if [[ "$cur" == -* ]]; then
- COMPREPLY=($(compgen -W "-acquire-by-hash -batch -butautomaticupgrades= -component= -distribution= -force-overwrite -gpg-key= -keyring= -label= -notautomatic= -origin= -passphrase= -passphrase-file= -secret-keyring= -skip-contents -skip-signing" -- ${cur}))
+ COMPREPLY=($(compgen -W "-acquire-by-hash -batch -butautomaticupgrades= -component= -distribution= -force-overwrite -gpg-key= -keyring= -label= -suite= -notautomatic= -origin= -passphrase= -passphrase-file= -secret-keyring= -skip-contents -skip-bz2 -skip-signing" -- ${cur}))
else
if [[ "$subcmd" == "snapshot" ]]; then
COMPREPLY=($(compgen -W "$(__aptly_snapshot_list)" -- ${cur}))
@@ -524,7 +528,7 @@ _aptly()
"update")
if [[ $numargs -eq 0 ]]; then
if [[ "$cur" == -* ]]; then
- COMPREPLY=($(compgen -W "-batch -force-overwrite -gpg-key= -keyring= -passphrase= -passphrase-file= -secret-keyring= -skip-cleanup -skip-contents -skip-signing" -- ${cur}))
+ COMPREPLY=($(compgen -W "-batch -force-overwrite -gpg-key= -keyring= -passphrase= -passphrase-file= -secret-keyring= -skip-cleanup -skip-contents -skip-bz2 -skip-signing" -- ${cur}))
else
COMPREPLY=($(compgen -W "$(__aptly_published_distributions)" -- ${cur}))
fi
@@ -539,7 +543,7 @@ _aptly()
"switch")
if [[ $numargs -eq 0 ]]; then
if [[ "$cur" == -* ]]; then
- COMPREPLY=($(compgen -W "-batch -force-overwrite -component= -gpg-key= -keyring= -passphrase= -passphrase-file= -secret-keyring= -skip-cleanup -skip-contents -skip-signing" -- ${cur}))
+ COMPREPLY=($(compgen -W "-batch -force-overwrite -component= -gpg-key= -keyring= -passphrase= -passphrase-file= -secret-keyring= -skip-cleanup -skip-contents -skip-bz2 -skip-signing" -- ${cur}))
else
COMPREPLY=($(compgen -W "$(__aptly_published_distributions)" -- ${cur}))
fi
diff --git a/console/progress.go b/console/progress.go
index 56abbef8..3671fc3a 100644
--- a/console/progress.go
+++ b/console/progress.go
@@ -69,7 +69,7 @@ func (p *Progress) Flush() {
}
// InitBar starts progressbar for count bytes or count items
-func (p *Progress) InitBar(count int64, isBytes bool) {
+func (p *Progress) InitBar(count int64, isBytes bool, barType aptly.BarType) {
if p.bar != nil {
panic("bar already initialized")
}
diff --git a/console/terminal.go b/console/terminal.go
index 796edc28..ba88af70 100644
--- a/console/terminal.go
+++ b/console/terminal.go
@@ -3,10 +3,10 @@ package console
import (
"syscall"
- "golang.org/x/crypto/ssh/terminal"
+ "golang.org/x/term"
)
// RunningOnTerminal checks whether stdout is terminal
func RunningOnTerminal() bool {
- return terminal.IsTerminal(syscall.Stdout)
+ return term.IsTerminal(syscall.Stdout)
}
diff --git a/context/context.go b/context/context.go
index eb7c8885..8ee3ebf9 100644
--- a/context/context.go
+++ b/context/context.go
@@ -15,14 +15,17 @@ import (
"time"
"github.com/aptly-dev/aptly/aptly"
+ "github.com/aptly-dev/aptly/azure"
"github.com/aptly-dev/aptly/console"
"github.com/aptly-dev/aptly/database"
+ "github.com/aptly-dev/aptly/database/goleveldb"
"github.com/aptly-dev/aptly/deb"
"github.com/aptly-dev/aptly/files"
"github.com/aptly-dev/aptly/http"
"github.com/aptly-dev/aptly/pgp"
"github.com/aptly-dev/aptly/s3"
"github.com/aptly-dev/aptly/swift"
+ "github.com/aptly-dev/aptly/task"
"github.com/aptly-dev/aptly/utils"
"github.com/smira/commander"
"github.com/smira/flag"
@@ -39,10 +42,10 @@ type AptlyContext struct {
progress aptly.Progress
downloader aptly.Downloader
+ taskList *task.List
database database.Storage
packagePool aptly.PackagePool
publishedStorages map[string]aptly.PublishedStorage
- collectionFactory *deb.CollectionFactory
dependencyOptions int
architecturesList []string
// Debug features
@@ -199,26 +202,66 @@ func (context *AptlyContext) _progress() aptly.Progress {
return context.progress
}
+// NewDownloader returns instance of new downloader with given progress
+func (context *AptlyContext) NewDownloader(progress aptly.Progress) aptly.Downloader {
+ context.Lock()
+ defer context.Unlock()
+
+ return context.newDownloader(progress)
+}
+
+// NewDownloader returns instance of new downloader with given progress without locking
+// so it can be used for internal usage.
+func (context *AptlyContext) newDownloader(progress aptly.Progress) aptly.Downloader {
+ var downloadLimit int64
+ limitFlag := context.flags.Lookup("download-limit")
+ if limitFlag != nil {
+ downloadLimit = limitFlag.Value.Get().(int64)
+ }
+ if downloadLimit == 0 {
+ downloadLimit = context.config().DownloadLimit
+ }
+ maxTries := context.config().DownloadRetries + 1
+ maxTriesFlag := context.flags.Lookup("max-tries")
+ if maxTriesFlag != nil {
+ // If flag is defined prefer it to global setting
+ maxTries = maxTriesFlag.Value.Get().(int)
+ }
+ var downloader string = context.config().Downloader
+ downloaderFlag := context.flags.Lookup("downloader")
+ if downloaderFlag != nil {
+ downloader = downloaderFlag.Value.String()
+ }
+
+ if downloader == "grab" {
+ return http.NewGrabDownloader(downloadLimit*1024, maxTries, progress)
+ }
+ return http.NewDownloader(downloadLimit*1024, maxTries, progress)
+}
+
// Downloader returns instance of current downloader
func (context *AptlyContext) Downloader() aptly.Downloader {
context.Lock()
defer context.Unlock()
if context.downloader == nil {
- var downloadLimit int64
- limitFlag := context.flags.Lookup("download-limit")
- if limitFlag != nil {
- downloadLimit = limitFlag.Value.Get().(int64)
- }
- if downloadLimit == 0 {
- downloadLimit = context.config().DownloadLimit
- }
- context.downloader = http.NewDownloader(downloadLimit*1024, context._progress())
+ context.downloader = context.newDownloader(context._progress())
}
return context.downloader
}
+// TaskList returns instance of current task list
+func (context *AptlyContext) TaskList() *task.List {
+ context.Lock()
+ defer context.Unlock()
+
+ if context.taskList == nil {
+ context.taskList = task.NewList()
+ }
+ return context.taskList
+}
+
// DBPath builds path to database
func (context *AptlyContext) DBPath() string {
context.Lock()
@@ -244,13 +287,19 @@ func (context *AptlyContext) _database() (database.Storage, error) {
if context.database == nil {
var err error
- context.database, err = database.NewDB(context.dbPath())
+ context.database, err = goleveldb.NewDB(context.dbPath())
if err != nil {
return nil, fmt.Errorf("can't instantiate database: %s", err)
}
}
- tries := context.flags.Lookup("db-open-attempts").Value.Get().(int)
+ var tries int
+ if context.config().DatabaseOpenAttempts == -1 {
+ tries = context.flags.Lookup("db-open-attempts").Value.Get().(int)
+ } else {
+ tries = context.config().DatabaseOpenAttempts
+ }
+
const BaseDelay = 10 * time.Second
const Jitter = 1 * time.Second
@@ -293,20 +342,16 @@ func (context *AptlyContext) ReOpenDatabase() error {
return err
}
-// CollectionFactory builds factory producing all kinds of collections
-func (context *AptlyContext) CollectionFactory() *deb.CollectionFactory {
+// NewCollectionFactory builds factory producing all kinds of collections
+func (context *AptlyContext) NewCollectionFactory() *deb.CollectionFactory {
context.Lock()
defer context.Unlock()
- if context.collectionFactory == nil {
- db, err := context._database()
- if err != nil {
- Fatal(err)
- }
- context.collectionFactory = deb.NewCollectionFactory(db)
+ db, err := context._database()
+ if err != nil {
+ Fatal(err)
}
-
- return context.collectionFactory
+ return deb.NewCollectionFactory(db)
}
// PackagePool returns instance of PackagePool
@@ -364,6 +409,18 @@ func (context *AptlyContext) GetPublishedStorage(name string) aptly.PublishedSto
if err != nil {
Fatal(err)
}
+ } 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:]))
+ }
+
+ var err error
+ publishedStorage, err = azure.NewPublishedStorage(
+ params.AccountName, params.AccountKey, params.Container, params.Prefix, params.Endpoint)
+ if err != nil {
+ Fatal(err)
+ }
} else {
Fatal(fmt.Errorf("unknown published storage format: %v", name))
}
@@ -468,7 +525,7 @@ func (context *AptlyContext) GoContextHandleSignals() {
defer context.Unlock()
// Catch ^C
- sigch := make(chan os.Signal)
+ sigch := make(chan os.Signal, 1)
signal.Notify(sigch, os.Interrupt)
var cancel gocontext.CancelFunc
diff --git a/database/database.go b/database/database.go
new file mode 100644
index 00000000..709a1aa8
--- /dev/null
+++ b/database/database.go
@@ -0,0 +1,75 @@
+// Package database provides KV database for meta-information
+package database
+
+import "errors"
+
+// Errors for Storage
+var (
+ ErrNotFound = errors.New("key not found")
+)
+
+// StorageProcessor is a function to process one single storage entry
+type StorageProcessor func(key []byte, value []byte) error
+
+// Reader provides KV read calls
+type Reader interface {
+ Get(key []byte) ([]byte, error)
+}
+
+// PrefixReader provides prefixed operations
+type PrefixReader interface {
+ HasPrefix(prefix []byte) bool
+ ProcessByPrefix(prefix []byte, proc StorageProcessor) error
+ KeysByPrefix(prefix []byte) [][]byte
+ FetchByPrefix(prefix []byte) [][]byte
+}
+
+// Writer provides KV update/delete calls
+type Writer interface {
+ Put(key []byte, value []byte) error
+ Delete(key []byte) error
+}
+
+// ReaderWriter combines Reader and Writer
+type ReaderWriter interface {
+ Reader
+ Writer
+}
+
+// Storage is an interface to KV storage
+type Storage interface {
+ Reader
+ Writer
+
+ PrefixReader
+
+ CreateBatch() Batch
+ OpenTransaction() (Transaction, error)
+
+ CreateTemporary() (Storage, error)
+
+ Open() error
+ Close() error
+ CompactDB() error
+ Drop() error
+}
+
+// Batch provides a way to pack many writes.
+type Batch interface {
+ Writer
+
+ // Write closes batch and send accumulated writes to the database
+ Write() error
+}
+
+// Transaction provides isolated atomic way to perform updates.
+//
+// Transactions might be expensive.
+// Transaction should always finish with either Discard() or Commit()
+type Transaction interface {
+ Reader
+ Writer
+
+ Commit() error
+ Discard()
+}
diff --git a/database/goleveldb/batch.go b/database/goleveldb/batch.go
new file mode 100644
index 00000000..7e94c57f
--- /dev/null
+++ b/database/goleveldb/batch.go
@@ -0,0 +1,34 @@
+package goleveldb
+
+import (
+ "github.com/syndtr/goleveldb/leveldb"
+ "github.com/syndtr/goleveldb/leveldb/opt"
+
+ "github.com/aptly-dev/aptly/database"
+)
+
+type batch struct {
+ db *leveldb.DB
+ b *leveldb.Batch
+}
+
+func (b *batch) Put(key, value []byte) error {
+ b.b.Put(key, value)
+
+ return nil
+}
+
+func (b *batch) Delete(key []byte) error {
+ b.b.Delete(key)
+
+ return nil
+}
+
+func (b *batch) Write() error {
+ return b.db.Write(b.b, &opt.WriteOptions{})
+}
+
+// batch should implement database.Batch
+var (
+ _ database.Batch = &batch{}
+)
diff --git a/database/goleveldb/database.go b/database/goleveldb/database.go
new file mode 100644
index 00000000..a2874a6e
--- /dev/null
+++ b/database/goleveldb/database.go
@@ -0,0 +1,58 @@
+package goleveldb
+
+import (
+ "github.com/syndtr/goleveldb/leveldb"
+ "github.com/syndtr/goleveldb/leveldb/filter"
+ "github.com/syndtr/goleveldb/leveldb/opt"
+ leveldbstorage "github.com/syndtr/goleveldb/leveldb/storage"
+
+ "github.com/aptly-dev/aptly/database"
+)
+
+func internalOpen(path string, throttleCompaction bool) (*leveldb.DB, error) {
+ o := &opt.Options{
+ Filter: filter.NewBloomFilter(10),
+ OpenFilesCacheCapacity: 256,
+ }
+
+ if throttleCompaction {
+ o.CompactionL0Trigger = 32
+ o.WriteL0PauseTrigger = 96
+ o.WriteL0SlowdownTrigger = 64
+ }
+
+ return leveldb.OpenFile(path, o)
+}
+
+// NewDB creates new instance of DB, but doesn't open it (yet)
+func NewDB(path string) (database.Storage, error) {
+ return &storage{path: path}, nil
+}
+
+// NewOpenDB creates new instance of DB and opens it
+func NewOpenDB(path string) (database.Storage, error) {
+ db, err := NewDB(path)
+ if err != nil {
+ return nil, err
+ }
+
+ return db, db.Open()
+}
+
+// RecoverDB recovers LevelDB database from corruption
+func RecoverDB(path string) error {
+ stor, err := leveldbstorage.OpenFile(path, false)
+ if err != nil {
+ return err
+ }
+
+ db, err := leveldb.Recover(stor, nil)
+ if err != nil {
+ return err
+ }
+
+ db.Close()
+ stor.Close()
+
+ return nil
+}
diff --git a/database/leveldb_test.go b/database/goleveldb/database_test.go
similarity index 91%
rename from database/leveldb_test.go
rename to database/goleveldb/database_test.go
index 21f43a24..e192df6b 100644
--- a/database/leveldb_test.go
+++ b/database/goleveldb/database_test.go
@@ -1,9 +1,12 @@
-package database
+package goleveldb_test
import (
"testing"
. "gopkg.in/check.v1"
+
+ "github.com/aptly-dev/aptly/database"
+ "github.com/aptly-dev/aptly/database/goleveldb"
)
// Launch gocheck tests
@@ -13,7 +16,7 @@ func Test(t *testing.T) {
type LevelDBSuite struct {
path string
- db Storage
+ db database.Storage
}
var _ = Suite(&LevelDBSuite{})
@@ -22,7 +25,7 @@ func (s *LevelDBSuite) SetUpTest(c *C) {
var err error
s.path = c.MkDir()
- s.db, err = NewOpenDB(s.path)
+ s.db, err = goleveldb.NewOpenDB(s.path)
c.Assert(err, IsNil)
}
@@ -43,10 +46,10 @@ func (s *LevelDBSuite) TestRecoverDB(c *C) {
err = s.db.Close()
c.Check(err, IsNil)
- err = RecoverDB(s.path)
+ err = goleveldb.RecoverDB(s.path)
c.Check(err, IsNil)
- s.db, err = NewOpenDB(s.path)
+ s.db, err = goleveldb.NewOpenDB(s.path)
c.Check(err, IsNil)
result, err := s.db.Get(key)
@@ -143,11 +146,11 @@ func (s *LevelDBSuite) TestByPrefix(c *C) {
c.Check(keys, DeepEquals, [][]byte{{0x80, 0x01}, {0x80, 0x02}, {0x80, 0x03}})
c.Check(s.db.ProcessByPrefix([]byte{0x80}, func(k, v []byte) error {
- return ErrNotFound
- }), Equals, ErrNotFound)
+ return database.ErrNotFound
+ }), Equals, database.ErrNotFound)
c.Check(s.db.ProcessByPrefix([]byte{0xa0}, func(k, v []byte) error {
- return ErrNotFound
+ return database.ErrNotFound
}), IsNil)
c.Check(s.db.FetchByPrefix([]byte{0xa0}), DeepEquals, [][]byte{})
@@ -176,9 +179,9 @@ func (s *LevelDBSuite) TestBatch(c *C) {
err := s.db.Put(key, value)
c.Assert(err, IsNil)
- s.db.StartBatch()
- s.db.Put(key2, value2)
- s.db.Delete(key)
+ batch := s.db.CreateBatch()
+ batch.Put(key2, value2)
+ batch.Delete(key)
v, err := s.db.Get(key)
c.Check(err, IsNil)
@@ -187,7 +190,7 @@ func (s *LevelDBSuite) TestBatch(c *C) {
_, err = s.db.Get(key2)
c.Check(err, ErrorMatches, "key not found")
- err = s.db.FinishBatch()
+ err = batch.Write()
c.Check(err, IsNil)
v2, err := s.db.Get(key2)
@@ -196,11 +199,6 @@ func (s *LevelDBSuite) TestBatch(c *C) {
_, err = s.db.Get(key)
c.Check(err, ErrorMatches, "key not found")
-
- c.Check(func() { s.db.FinishBatch() }, Panics, "no batch")
-
- s.db.StartBatch()
- c.Check(func() { s.db.StartBatch() }, Panics, "batch already started")
}
func (s *LevelDBSuite) TestCompactDB(c *C) {
diff --git a/database/goleveldb/leveldb.go b/database/goleveldb/leveldb.go
new file mode 100644
index 00000000..68eb19b3
--- /dev/null
+++ b/database/goleveldb/leveldb.go
@@ -0,0 +1,2 @@
+// Package goleveldb implements database interface via goleveldb
+package goleveldb
diff --git a/database/goleveldb/storage.go b/database/goleveldb/storage.go
new file mode 100644
index 00000000..a95c5680
--- /dev/null
+++ b/database/goleveldb/storage.go
@@ -0,0 +1,180 @@
+package goleveldb
+
+import (
+ "bytes"
+ "errors"
+ "io/ioutil"
+ "os"
+
+ "github.com/syndtr/goleveldb/leveldb"
+ "github.com/syndtr/goleveldb/leveldb/util"
+
+ "github.com/aptly-dev/aptly/database"
+)
+
+type storage struct {
+ path string
+ db *leveldb.DB
+}
+
+// CreateTemporary creates new DB of the same type in temp dir
+func (s *storage) CreateTemporary() (database.Storage, error) {
+ tempdir, err := ioutil.TempDir("", "aptly")
+ if err != nil {
+ return nil, err
+ }
+
+ db, err := internalOpen(tempdir, true)
+ if err != nil {
+ return nil, err
+ }
+ return &storage{db: db, path: tempdir}, nil
+}
+
+// Get key value from database
+func (s *storage) Get(key []byte) ([]byte, error) {
+ value, err := s.db.Get(key, nil)
+ if err != nil {
+ if err == leveldb.ErrNotFound {
+ return nil, database.ErrNotFound
+ }
+ return nil, err
+ }
+
+ return value, nil
+}
+
+// Put saves key to database, if key has the same value in DB already, it is not saved
+func (s *storage) Put(key []byte, value []byte) error {
+ old, err := s.db.Get(key, nil)
+ if err != nil {
+ if err != leveldb.ErrNotFound {
+ return err
+ }
+ } else {
+ if bytes.Equal(old, value) {
+ return nil
+ }
+ }
+ return s.db.Put(key, value, nil)
+}
+
+// Delete removes key from DB
+func (s *storage) Delete(key []byte) error {
+ return s.db.Delete(key, nil)
+}
+
+// KeysByPrefix returns all keys that start with prefix
+func (s *storage) KeysByPrefix(prefix []byte) [][]byte {
+ result := make([][]byte, 0, 20)
+
+ iterator := s.db.NewIterator(nil, nil)
+ defer iterator.Release()
+
+ for ok := iterator.Seek(prefix); ok && bytes.HasPrefix(iterator.Key(), prefix); ok = iterator.Next() {
+ key := iterator.Key()
+ keyc := make([]byte, len(key))
+ copy(keyc, key)
+ result = append(result, keyc)
+ }
+
+ return result
+}
+
+// FetchByPrefix returns all values with keys that start with prefix
+func (s *storage) FetchByPrefix(prefix []byte) [][]byte {
+ result := make([][]byte, 0, 20)
+
+ iterator := s.db.NewIterator(nil, nil)
+ defer iterator.Release()
+
+ for ok := iterator.Seek(prefix); ok && bytes.HasPrefix(iterator.Key(), prefix); ok = iterator.Next() {
+ val := iterator.Value()
+ valc := make([]byte, len(val))
+ copy(valc, val)
+ result = append(result, valc)
+ }
+
+ return result
+}
+
+// HasPrefix checks whether it can find any key with given prefix and returns true if one exists
+func (s *storage) HasPrefix(prefix []byte) bool {
+ iterator := s.db.NewIterator(nil, nil)
+ defer iterator.Release()
+ return iterator.Seek(prefix) && bytes.HasPrefix(iterator.Key(), prefix)
+}
+
+// ProcessByPrefix iterates through all entries where key starts with prefix and calls
+// StorageProcessor on key value pair
+func (s *storage) ProcessByPrefix(prefix []byte, proc database.StorageProcessor) error {
+ iterator := s.db.NewIterator(nil, nil)
+ defer iterator.Release()
+
+ for ok := iterator.Seek(prefix); ok && bytes.HasPrefix(iterator.Key(), prefix); ok = iterator.Next() {
+ err := proc(iterator.Key(), iterator.Value())
+ if err != nil {
+ return err
+ }
+ }
+
+ return nil
+}
+
+// Close finishes DB work
+func (s *storage) Close() error {
+ if s.db == nil {
+ return nil
+ }
+ err := s.db.Close()
+ s.db = nil
+ return err
+}
+
+// Reopen tries to open (re-open) the database
+func (s *storage) Open() error {
+ if s.db != nil {
+ return nil
+ }
+
+ var err error
+ s.db, err = internalOpen(s.path, false)
+ return err
+}
+
+// CreateBatch creates a Batch object
+func (s *storage) CreateBatch() database.Batch {
+ return &batch{
+ db: s.db,
+ b: &leveldb.Batch{},
+ }
+}
+
+// OpenTransaction creates new transaction.
+func (s *storage) OpenTransaction() (database.Transaction, error) {
+ t, err := s.db.OpenTransaction()
+ if err != nil {
+ return nil, err
+ }
+
+ return &transaction{t: t}, nil
+}
+
+// CompactDB compacts database by merging layers
+func (s *storage) CompactDB() error {
+ return s.db.CompactRange(util.Range{})
+}
+
+// Drop removes all the DB files (DANGEROUS!)
+func (s *storage) Drop() error {
+ if s.db != nil {
+ return errors.New("DB is still open")
+ }
+
+ return os.RemoveAll(s.path)
+}
+
+// Check interface
+var (
+ _ database.Storage = &storage{}
+)
diff --git a/database/goleveldb/transaction.go b/database/goleveldb/transaction.go
new file mode 100644
index 00000000..880480f2
--- /dev/null
+++ b/database/goleveldb/transaction.go
@@ -0,0 +1,60 @@
+package goleveldb
+
+import (
+ "bytes"
+
+ "github.com/aptly-dev/aptly/database"
+ "github.com/syndtr/goleveldb/leveldb"
+)
+
+type transaction struct {
+ t *leveldb.Transaction
+}
+
+// Get implements database.Reader interface.
+func (t *transaction) Get(key []byte) ([]byte, error) {
+ value, err := t.t.Get(key, nil)
+ if err != nil {
+ if err == leveldb.ErrNotFound {
+ return nil, database.ErrNotFound
+ }
+ return nil, err
+ }
+
+ return value, nil
+}
+
+// Put implements database.Writer interface.
+func (t *transaction) Put(key, value []byte) error {
+ old, err := t.t.Get(key, nil)
+ if err != nil {
+ if err != leveldb.ErrNotFound {
+ return err
+ }
+ } else {
+ if bytes.Equal(old, value) {
+ return nil
+ }
+ }
+ return t.t.Put(key, value, nil)
+}
+
+// Delete implements database.Writer interface.
+func (t *transaction) Delete(key []byte) error {
+ return t.t.Delete(key, nil)
+}
+
+// Commit finalizes transaction and commits changes to the stable storage.
+func (t *transaction) Commit() error {
+ return t.t.Commit()
+}
+
+// Discard any transaction changes.
+//
+// Discard is safe to call after Commit(), it would be no-op
+func (t *transaction) Discard() {
+ t.t.Discard()
+}
+
+// transaction should implement database.Transaction
+var _ database.Transaction = &transaction{}
diff --git a/database/leveldb.go b/database/leveldb.go
deleted file mode 100644
index bea1c84f..00000000
--- a/database/leveldb.go
+++ /dev/null
@@ -1,267 +0,0 @@
-// Package database provides KV database for meta-information
-package database
-
-import (
- "bytes"
- "errors"
- "io/ioutil"
- "os"
-
- "github.com/syndtr/goleveldb/leveldb"
- "github.com/syndtr/goleveldb/leveldb/filter"
- "github.com/syndtr/goleveldb/leveldb/opt"
- "github.com/syndtr/goleveldb/leveldb/storage"
- "github.com/syndtr/goleveldb/leveldb/util"
-)
-
-// Errors for Storage
-var (
- ErrNotFound = errors.New("key not found")
-)
-
-// StorageProcessor is a function to process one single storage entry
-type StorageProcessor func(key []byte, value []byte) error
-
-// Storage is an interface to KV storage
-type Storage interface {
- CreateTemporary() (Storage, error)
- Get(key []byte) ([]byte, error)
- Put(key []byte, value []byte) error
- Delete(key []byte) error
- HasPrefix(prefix []byte) bool
- ProcessByPrefix(prefix []byte, proc StorageProcessor) error
- KeysByPrefix(prefix []byte) [][]byte
- FetchByPrefix(prefix []byte) [][]byte
- Open() error
- Close() error
- StartBatch()
- FinishBatch() error
- CompactDB() error
- Drop() error
-}
-
-type levelDB struct {
- path string
- db *leveldb.DB
- batch *leveldb.Batch
-}
-
-// Check interface
-var (
- _ Storage = &levelDB{}
-)
-
-func internalOpen(path string, throttleCompaction bool) (*leveldb.DB, error) {
- o := &opt.Options{
- Filter: filter.NewBloomFilter(10),
- OpenFilesCacheCapacity: 256,
- }
-
- if throttleCompaction {
- o.CompactionL0Trigger = 32
- o.WriteL0PauseTrigger = 96
- o.WriteL0SlowdownTrigger = 64
- }
-
- return leveldb.OpenFile(path, o)
-}
-
-// NewDB creates new instance of DB, but doesn't open it (yet)
-func NewDB(path string) (Storage, error) {
- return &levelDB{path: path}, nil
-}
-
-// NewOpenDB creates new instance of DB and opens it
-func NewOpenDB(path string) (Storage, error) {
- db, err := NewDB(path)
- if err != nil {
- return nil, err
- }
-
- return db, db.Open()
-}
-
-// RecoverDB recovers LevelDB database from corruption
-func RecoverDB(path string) error {
- stor, err := storage.OpenFile(path, false)
- if err != nil {
- return err
- }
-
- db, err := leveldb.Recover(stor, nil)
- if err != nil {
- return err
- }
-
- db.Close()
- stor.Close()
-
- return nil
-}
-
-// CreateTemporary creates new DB of the same type in temp dir
-func (l *levelDB) CreateTemporary() (Storage, error) {
- tempdir, err := ioutil.TempDir("", "aptly")
- if err != nil {
- return nil, err
- }
-
- db, err := internalOpen(tempdir, true)
- if err != nil {
- return nil, err
- }
- return &levelDB{db: db, path: tempdir}, nil
-}
-
-// Get key value from database
-func (l *levelDB) Get(key []byte) ([]byte, error) {
- value, err := l.db.Get(key, nil)
- if err != nil {
- if err == leveldb.ErrNotFound {
- return nil, ErrNotFound
- }
- return nil, err
- }
-
- return value, nil
-}
-
-// Put saves key to database, if key has the same value in DB already, it is not saved
-func (l *levelDB) Put(key []byte, value []byte) error {
- if l.batch != nil {
- l.batch.Put(key, value)
- return nil
- }
- old, err := l.db.Get(key, nil)
- if err != nil {
- if err != leveldb.ErrNotFound {
- return err
- }
- } else {
- if bytes.Equal(old, value) {
- return nil
- }
- }
- return l.db.Put(key, value, nil)
-}
-
-// Delete removes key from DB
-func (l *levelDB) Delete(key []byte) error {
- if l.batch != nil {
- l.batch.Delete(key)
- return nil
- }
- return l.db.Delete(key, nil)
-}
-
-// KeysByPrefix returns all keys that start with prefix
-func (l *levelDB) KeysByPrefix(prefix []byte) [][]byte {
- result := make([][]byte, 0, 20)
-
- iterator := l.db.NewIterator(nil, nil)
- defer iterator.Release()
-
- for ok := iterator.Seek(prefix); ok && bytes.HasPrefix(iterator.Key(), prefix); ok = iterator.Next() {
- key := iterator.Key()
- keyc := make([]byte, len(key))
- copy(keyc, key)
- result = append(result, keyc)
- }
-
- return result
-}
-
-// FetchByPrefix returns all values with keys that start with prefix
-func (l *levelDB) FetchByPrefix(prefix []byte) [][]byte {
- result := make([][]byte, 0, 20)
-
- iterator := l.db.NewIterator(nil, nil)
- defer iterator.Release()
-
- for ok := iterator.Seek(prefix); ok && bytes.HasPrefix(iterator.Key(), prefix); ok = iterator.Next() {
- val := iterator.Value()
- valc := make([]byte, len(val))
- copy(valc, val)
- result = append(result, valc)
- }
-
- return result
-}
-
-// HasPrefix checks whether it can find any key with given prefix and returns true if one exists
-func (l *levelDB) HasPrefix(prefix []byte) bool {
- iterator := l.db.NewIterator(nil, nil)
- defer iterator.Release()
- return iterator.Seek(prefix) && bytes.HasPrefix(iterator.Key(), prefix)
-}
-
-// ProcessByPrefix iterates through all entries where key starts with prefix and calls
-// StorageProcessor on key value pair
-func (l *levelDB) ProcessByPrefix(prefix []byte, proc StorageProcessor) error {
- iterator := l.db.NewIterator(nil, nil)
- defer iterator.Release()
-
- for ok := iterator.Seek(prefix); ok && bytes.HasPrefix(iterator.Key(), prefix); ok = iterator.Next() {
- err := proc(iterator.Key(), iterator.Value())
- if err != nil {
- return err
- }
- }
-
- return nil
-}
-
-// Close finishes DB work
-func (l *levelDB) Close() error {
- if l.db == nil {
- return nil
- }
- err := l.db.Close()
- l.db = nil
- return err
-}
-
-// Reopen tries to open (re-open) the database
-func (l *levelDB) Open() error {
- if l.db != nil {
- return nil
- }
-
- var err error
- l.db, err = internalOpen(l.path, false)
- return err
-}
-
-// StartBatch starts batch processing of keys
-//
-// All subsequent Get, Put and Delete would work on batch
-func (l *levelDB) StartBatch() {
- if l.batch != nil {
- panic("batch already started")
- }
- l.batch = new(leveldb.Batch)
-}
-
-// FinishBatch finalizes the batch, saving operations
-func (l *levelDB) FinishBatch() error {
- if l.batch == nil {
- panic("no batch")
- }
- err := l.db.Write(l.batch, nil)
- l.batch = nil
- return err
-}
-
-// CompactDB compacts database by merging layers
-func (l *levelDB) CompactDB() error {
- return l.db.CompactRange(util.Range{})
-}
-
-// Drop removes all the DB files (DANGEROUS!)
-func (l *levelDB) Drop() error {
- if l.db != nil {
- return errors.New("DB is still open")
- }
-
- return os.RemoveAll(l.path)
-}
diff --git a/deb/changes.go b/deb/changes.go
index 7794b3a3..3e2c6914 100644
--- a/deb/changes.go
+++ b/deb/changes.go
@@ -195,11 +195,6 @@ func (c *Changes) PackageQuery() PackageQuery {
}
}
- ddebQuery = &AndQuery{
- L: &FieldQuery{Field: "Source", Relation: VersionEqual, Value: c.Source},
- R: ddebQuery,
- }
-
binaryQuery = &OrQuery{
L: binaryQuery,
R: ddebQuery,
@@ -293,14 +288,9 @@ func CollectChangesFiles(locations []string, reporter aptly.ResultReporter) (cha
// ImportChangesFiles imports referenced files in changes files into local repository
func ImportChangesFiles(changesFiles []string, reporter aptly.ResultReporter, acceptUnsigned, ignoreSignatures, forceReplace, noRemoveFiles bool,
- verifier pgp.Verifier, repoTemplateString string, progress aptly.Progress, localRepoCollection *LocalRepoCollection, packageCollection *PackageCollection,
- pool aptly.PackagePool, checksumStorage aptly.ChecksumStorage, uploaders *Uploaders, parseQuery parseQuery) (processedFiles []string, failedFiles []string, err error) {
+ verifier pgp.Verifier, repoTemplate *template.Template, progress aptly.Progress, localRepoCollection *LocalRepoCollection, packageCollection *PackageCollection,
+ pool aptly.PackagePool, checksumStorageProvider aptly.ChecksumStorageProvider, uploaders *Uploaders, parseQuery parseQuery) (processedFiles []string, failedFiles []string, err error) {
- var repoTemplate *template.Template
- repoTemplate, err = template.New("repo").Parse(repoTemplateString)
- if err != nil {
- return nil, nil, fmt.Errorf("error parsing -repo template: %s", err)
- }
for _, path := range changesFiles {
var changes *Changes
@@ -384,7 +374,7 @@ func ImportChangesFiles(changesFiles []string, reporter aptly.ResultReporter, ac
var processedFiles2, failedFiles2 []string
processedFiles2, failedFiles2, err = ImportPackageFiles(list, packageFiles, forceReplace, verifier, pool,
- packageCollection, reporter, restriction, checksumStorage)
+ packageCollection, reporter, restriction, checksumStorageProvider)
if err != nil {
return nil, nil, fmt.Errorf("unable to import package files: %s", err)
diff --git a/deb/changes_test.go b/deb/changes_test.go
index 2a848d6a..64b962b7 100644
--- a/deb/changes_test.go
+++ b/deb/changes_test.go
@@ -3,10 +3,12 @@ package deb
import (
"os"
"path/filepath"
+ "text/template"
"github.com/aptly-dev/aptly/aptly"
"github.com/aptly-dev/aptly/console"
"github.com/aptly-dev/aptly/database"
+ "github.com/aptly-dev/aptly/database/goleveldb"
"github.com/aptly-dev/aptly/files"
"github.com/aptly-dev/aptly/utils"
@@ -37,7 +39,7 @@ func (s *ChangesSuite) SetUpTest(c *C) {
err := utils.CopyFile("testdata/changes/calamares.changes", s.Path)
c.Assert(err, IsNil)
- s.db, _ = database.NewOpenDB(c.MkDir())
+ s.db, _ = goleveldb.NewOpenDB(c.MkDir())
s.localRepoCollection = NewLocalRepoCollection(s.db)
s.packageCollection = NewPackageCollection(s.db)
@@ -122,13 +124,30 @@ func (s *ChangesSuite) TestImportChangesFiles(c *C) {
processedFiles, failedFiles, err := ImportChangesFiles(
append(changesFiles, "testdata/changes/notexistent.changes"),
s.Reporter, true, true, false, false, &NullVerifier{},
- "test", s.progress, s.localRepoCollection, s.packageCollection, s.packagePool, s.checksumStorage,
+ template.Must(template.New("test").Parse("test")), s.progress, s.localRepoCollection, s.packageCollection, s.packagePool, func(database.ReaderWriter) aptly.ChecksumStorage { return s.checksumStorage },
nil, nil)
c.Assert(err, IsNil)
c.Check(failedFiles, DeepEquals, append(expectedFailedFiles, "testdata/changes/notexistent.changes"))
c.Check(processedFiles, DeepEquals, expectedProcessedFiles)
}
+func (s *ChangesSuite) TestImportDbgsymWithVersionedSourceField(c *C) {
+ repo := NewLocalRepo("test", "Test Comment")
+ c.Assert(s.localRepoCollection.Add(repo), IsNil)
+
+ changesFiles, failedFiles := CollectChangesFiles(
+ []string{"testdata/dbgsym-with-source-version"}, s.Reporter)
+ c.Check(changesFiles, HasLen, 1)
+ c.Check(failedFiles, HasLen, 0)
+
+ _, failedFiles, err := ImportChangesFiles(
+ changesFiles, s.Reporter, true, true, false, true, &NullVerifier{},
+ template.Must(template.New("test").Parse("test")), s.progress, s.localRepoCollection, s.packageCollection, s.packagePool, func(database.ReaderWriter) aptly.ChecksumStorage { return s.checksumStorage },
+ nil, nil)
+ c.Assert(err, IsNil)
+ c.Check(failedFiles, IsNil)
+}
+
func (s *ChangesSuite) TestPrepare(c *C) {
changes, err := NewChanges("testdata/changes/hardlink_0.2.1_amd64.changes")
c.Assert(err, IsNil)
@@ -148,5 +167,5 @@ func (s *ChangesSuite) TestPackageQuery(c *C) {
q := changes.PackageQuery()
c.Check(q.String(), Equals,
- "(($Architecture (= amd64)) | (($Architecture (= source)) | ($Architecture (= )))), ((($PackageType (= source)), (Name (= calamares))) | ((!($PackageType (= source))), (((Name (= calamares-dbg)) | (Name (= calamares))) | ((Source (= calamares)), ((Name (= calamares-dbg-dbgsym)) | (Name (= calamares-dbgsym)))))))")
+ "(($Architecture (= amd64)) | (($Architecture (= source)) | ($Architecture (= )))), ((($PackageType (= source)), (Name (= calamares))) | ((!($PackageType (= source))), (((Name (= calamares-dbg)) | (Name (= calamares))) | ((Name (= calamares-dbg-dbgsym)) | (Name (= calamares-dbgsym))))))")
}
diff --git a/deb/checksum_collection.go b/deb/checksum_collection.go
index dfffb5ae..23edd240 100644
--- a/deb/checksum_collection.go
+++ b/deb/checksum_collection.go
@@ -11,12 +11,12 @@ import (
// ChecksumCollection does management of ChecksumInfo in DB
type ChecksumCollection struct {
- db database.Storage
+ db database.ReaderWriter
codecHandle *codec.MsgpackHandle
}
// NewChecksumCollection creates new ChecksumCollection and binds it to database
-func NewChecksumCollection(db database.Storage) *ChecksumCollection {
+func NewChecksumCollection(db database.ReaderWriter) *ChecksumCollection {
return &ChecksumCollection{
db: db,
codecHandle: &codec.MsgpackHandle{},
diff --git a/deb/checksum_collection_test.go b/deb/checksum_collection_test.go
index 9bc8babf..0a60949e 100644
--- a/deb/checksum_collection_test.go
+++ b/deb/checksum_collection_test.go
@@ -2,6 +2,7 @@ package deb
import (
"github.com/aptly-dev/aptly/database"
+ "github.com/aptly-dev/aptly/database/goleveldb"
"github.com/aptly-dev/aptly/utils"
. "gopkg.in/check.v1"
@@ -22,7 +23,7 @@ func (s *ChecksumCollectionSuite) SetUpTest(c *C) {
SHA1: "da39a3ee5e6b4b0d3255bfef95601890afd80709",
SHA256: "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
}
- s.db, _ = database.NewOpenDB(c.MkDir())
+ s.db, _ = goleveldb.NewOpenDB(c.MkDir())
s.collection = NewChecksumCollection(s.db)
}
diff --git a/deb/collections.go b/deb/collections.go
index 49f1e93c..7dfe8523 100644
--- a/deb/collections.go
+++ b/deb/collections.go
@@ -3,6 +3,7 @@ package deb
import (
"sync"
+ "github.com/aptly-dev/aptly/aptly"
"github.com/aptly-dev/aptly/database"
)
@@ -91,10 +92,14 @@ func (factory *CollectionFactory) PublishedRepoCollection() *PublishedRepoCollec
}
// ChecksumCollection returns (or creates) new ChecksumCollection
-func (factory *CollectionFactory) ChecksumCollection() *ChecksumCollection {
+func (factory *CollectionFactory) ChecksumCollection(db database.ReaderWriter) aptly.ChecksumStorage {
factory.Lock()
defer factory.Unlock()
+ if db != nil {
+ return NewChecksumCollection(db)
+ }
+
if factory.checksums == nil {
factory.checksums = NewChecksumCollection(factory.db)
}
diff --git a/deb/contents.go b/deb/contents.go
index 9f5bd321..9f694354 100644
--- a/deb/contents.go
+++ b/deb/contents.go
@@ -25,11 +25,11 @@ func NewContentsIndex(db database.Storage) *ContentsIndex {
}
// Push adds package to contents index, calculating package contents as required
-func (index *ContentsIndex) Push(qualifiedName []byte, contents []string) error {
+func (index *ContentsIndex) Push(qualifiedName []byte, contents []string, dbw database.Writer) error {
for _, path := range contents {
// for performance reasons we only write to leveldb during push.
// merging of qualified names per path will be done in WriteTo
- err := index.db.Put(append(append(append(index.prefix, []byte(path)...), byte(0)), qualifiedName...), nil)
+ err := dbw.Put(append(append(append(index.prefix, []byte(path)...), byte(0)), qualifiedName...), nil)
if err != nil {
return err
}
diff --git a/deb/deb.go b/deb/deb.go
index b0ff3fe3..8ce1371f 100644
--- a/deb/deb.go
+++ b/deb/deb.go
@@ -16,6 +16,7 @@ import (
"github.com/aptly-dev/aptly/pgp"
"github.com/kjk/lzma"
+ "github.com/klauspost/compress/zstd"
"github.com/smira/go-xz"
)
@@ -74,6 +75,13 @@ func GetControlFileFromDeb(packageFile string) (Stanza, error) {
}
defer unxz.Close()
tarInput = unxz
+ case "control.tar.zst":
+ unzstd, err := zstd.NewReader(bufReader)
+ if err != nil {
+ return nil, errors.Wrapf(err, "unable to unzstd %s from %s", header.Name, packageFile)
+ }
+ defer unzstd.Close()
+ tarInput = unzstd
default:
return nil, fmt.Errorf("unsupported tar compression in %s: %s", packageFile, header.Name)
}
@@ -189,6 +197,13 @@ func GetContentsFromDeb(file io.Reader, packageFile string) ([]string, error) {
unlzma := lzma.NewReader(bufReader)
defer unlzma.Close()
tarInput = unlzma
+ case "data.tar.zst":
+ unzstd, err := zstd.NewReader(bufReader)
+ if err != nil {
+ return nil, errors.Wrapf(err, "unable to unzstd %s from %s", header.Name, packageFile)
+ }
+ defer unzstd.Close()
+ tarInput = unzstd
default:
return nil, fmt.Errorf("unsupported tar compression in %s: %s", packageFile, header.Name)
}
diff --git a/deb/deb_test.go b/deb/deb_test.go
index 1892a73c..146a2521 100644
--- a/deb/deb_test.go
+++ b/deb/deb_test.go
@@ -11,7 +11,7 @@ import (
)
type DebSuite struct {
- debFile, debFile2, debFileWithXzControl, dscFile, dscFileNoSign string
+ debFile, debFile2, debFileWithXzControl, debFileWithZstdControl, dscFile, dscFileNoSign string
}
var _ = Suite(&DebSuite{})
@@ -21,6 +21,7 @@ func (s *DebSuite) SetUpSuite(c *C) {
s.debFile = filepath.Join(filepath.Dir(_File), "../system/files/libboost-program-options-dev_1.49.0.1_i386.deb")
s.debFile2 = filepath.Join(filepath.Dir(_File), "../system/changes/hardlink_0.2.1_amd64.deb")
s.debFileWithXzControl = filepath.Join(filepath.Dir(_File), "../system/changes/libqt5concurrent5-dbgsym_5.9.1+dfsg-2+18.04+bionic+build4_amd64.ddeb")
+ s.debFileWithZstdControl = filepath.Join(filepath.Dir(_File), "../system/changes/libqt5concurrent5-dbgsym_5.15.2+dfsg-12_amd64.ddeb")
s.dscFile = filepath.Join(filepath.Dir(_File), "../system/files/pyspi_0.6.1-1.3.dsc")
s.dscFileNoSign = filepath.Join(filepath.Dir(_File), "../system/files/pyspi-0.6.1-1.3.stripped.dsc")
}
@@ -47,6 +48,14 @@ func (s *DebSuite) TestGetControlFileFromDebWithXzControl(c *C) {
c.Check(st["Package"], Equals, "libqt5concurrent5-dbgsym")
}
+func (s *DebSuite) TestGetControlFileFromDebWithZstdControl(c *C) {
+ // Has control.tar.zstd archive inside.
+ st, err := GetControlFileFromDeb(s.debFileWithZstdControl)
+ c.Check(err, IsNil)
+ c.Check(st["Version"], Equals, "5.15.2+dfsg-12")
+ c.Check(st["Package"], Equals, "libqt5concurrent5-dbgsym")
+}
+
func (s *DebSuite) TestGetControlFileFromDsc(c *C) {
verifier := &pgp.GoVerifier{}
diff --git a/deb/import.go b/deb/import.go
index f4172a35..53322f8d 100644
--- a/deb/import.go
+++ b/deb/import.go
@@ -66,11 +66,19 @@ func CollectPackageFiles(locations []string, reporter aptly.ResultReporter) (pac
// ImportPackageFiles imports files into local repository
func ImportPackageFiles(list *PackageList, packageFiles []string, forceReplace bool, verifier pgp.Verifier,
pool aptly.PackagePool, collection *PackageCollection, reporter aptly.ResultReporter, restriction PackageQuery,
- checksumStorage aptly.ChecksumStorage) (processedFiles []string, failedFiles []string, err error) {
+ checksumStorageProvider aptly.ChecksumStorageProvider) (processedFiles []string, failedFiles []string, err error) {
if forceReplace {
list.PrepareIndex()
}
+ transaction, err := collection.db.OpenTransaction()
+ if err != nil {
+ return nil, nil, err
+ }
+ defer transaction.Discard()
+
+ checksumStorage := checksumStorageProvider(transaction)
+
for _, file := range packageFiles {
var (
stanza Stanza
@@ -193,7 +201,7 @@ func ImportPackageFiles(list *PackageList, packageFiles []string, forceReplace b
continue
}
- err = collection.Update(p)
+ err = collection.UpdateInTransaction(p, transaction)
if err != nil {
reporter.Warning("Unable to save package %s: %s", p, err)
failedFiles = append(failedFiles, file)
@@ -219,6 +227,6 @@ func ImportPackageFiles(list *PackageList, packageFiles []string, forceReplace b
processedFiles = append(processedFiles, candidateProcessedFiles...)
}
- err = nil
+ err = transaction.Commit()
return
}
diff --git a/deb/index_files.go b/deb/index_files.go
index 4affd0a9..d8fb7dc5 100644
--- a/deb/index_files.go
+++ b/deb/index_files.go
@@ -22,6 +22,7 @@ type indexFiles struct {
suffix string
indexes map[string]*indexFile
acquireByHash bool
+ skipBz2 bool
}
type indexFile struct {
@@ -68,7 +69,7 @@ func (file *indexFile) Finalize(signer pgp.Signer) error {
}
if file.compressable {
- err = utils.CompressFile(file.tempFile, file.onlyGzip)
+ err = utils.CompressFile(file.tempFile, file.onlyGzip || file.parent.skipBz2)
if err != nil {
file.tempFile.Close()
return fmt.Errorf("unable to compress index file: %s", err)
@@ -80,11 +81,15 @@ func (file *indexFile) Finalize(signer pgp.Signer) error {
exts := []string{""}
cksumExts := exts
if file.compressable {
- exts = append(exts, ".gz", ".bz2")
- cksumExts = exts
if file.onlyGzip {
exts = []string{".gz"}
cksumExts = []string{"", ".gz"}
+ } else {
+ exts = append(exts, ".gz")
+ if !file.parent.skipBz2 {
+ exts = append(exts, ".bz2")
+ }
+ cksumExts = exts
}
}
@@ -229,7 +234,7 @@ func packageIndexByHash(file *indexFile, ext string, hash string, sum string) er
return nil
}
-func newIndexFiles(publishedStorage aptly.PublishedStorage, basePath, tempDir, suffix string, acquireByHash bool) *indexFiles {
+func newIndexFiles(publishedStorage aptly.PublishedStorage, basePath, tempDir, suffix string, acquireByHash bool, skipBz2 bool) *indexFiles {
return &indexFiles{
publishedStorage: publishedStorage,
basePath: basePath,
@@ -239,6 +244,7 @@ func newIndexFiles(publishedStorage aptly.PublishedStorage, basePath, tempDir, s
suffix: suffix,
indexes: make(map[string]*indexFile),
acquireByHash: acquireByHash,
+ skipBz2: skipBz2,
}
}
@@ -391,7 +397,7 @@ func (files *indexFiles) ReleaseFile() *indexFile {
func (files *indexFiles) FinalizeAll(progress aptly.Progress, signer pgp.Signer) (err error) {
if progress != nil {
- progress.InitBar(int64(len(files.indexes)), false)
+ progress.InitBar(int64(len(files.indexes)), false, aptly.BarPublishFinalizeIndexes)
defer progress.ShutdownBar()
}
diff --git a/deb/list.go b/deb/list.go
index 84f57864..ec14bb98 100644
--- a/deb/list.go
+++ b/deb/list.go
@@ -99,7 +99,7 @@ func NewPackageListFromRefList(reflist *PackageRefList, collection *PackageColle
result := NewPackageListWithDuplicates(false, reflist.Len())
if progress != nil {
- progress.InitBar(int64(reflist.Len()), false)
+ progress.InitBar(int64(reflist.Len()), false, aptly.BarGeneralBuildPackageList)
}
err := reflist.ForEach(func(key []byte) error {
@@ -266,6 +266,19 @@ func (l *PackageList) Strings() []string {
return result
}
+// FullNames builds a list of package {name}_{version}_{arch}
+func (l *PackageList) FullNames() []string {
+ result := make([]string, l.Len())
+ i := 0
+
+ for _, p := range l.packages {
+ result[i] = p.GetFullName()
+ i++
+ }
+
+ return result
+}
+
// depSliceDeduplicate removes dups in slice of Dependencies
func depSliceDeduplicate(s []Dependency) []Dependency {
l := len(s)
@@ -301,7 +314,7 @@ func (l *PackageList) VerifyDependencies(options int, architectures []string, so
missing := make([]Dependency, 0, 128)
if progress != nil {
- progress.InitBar(int64(l.Len())*int64(len(architectures)), false)
+ progress.InitBar(int64(l.Len())*int64(len(architectures)), false, aptly.BarGeneralVerifyDependencies)
}
for _, arch := range architectures {
diff --git a/deb/local.go b/deb/local.go
index 229f6e1d..2a15c734 100644
--- a/deb/local.go
+++ b/deb/local.go
@@ -5,7 +5,6 @@ import (
"errors"
"fmt"
"log"
- "sync"
"github.com/aptly-dev/aptly/database"
"github.com/pborman/uuid"
@@ -15,7 +14,7 @@ import (
// LocalRepo is a collection of packages created locally
type LocalRepo struct {
// Permanent internal ID
- UUID string `json:"-"`
+ UUID string `codec:"UUID" json:"-"`
// User-assigned name
Name string
// Comment
@@ -25,7 +24,7 @@ type LocalRepo struct {
// DefaultComponent
DefaultComponent string `codec:",omitempty"`
// Uploaders configuration
- Uploaders *Uploaders `code:",omitempty" json:"-"`
+ Uploaders *Uploaders `codec:"Uploaders,omitempty" json:"-"`
// "Snapshot" of current list of packages
packageRefs *PackageRefList
}
@@ -93,7 +92,6 @@ func (repo *LocalRepo) RefKey() []byte {
// LocalRepoCollection does listing, updating/adding/deleting of LocalRepos
type LocalRepoCollection struct {
- *sync.RWMutex
db database.Storage
cache map[string]*LocalRepo
}
@@ -101,9 +99,8 @@ type LocalRepoCollection struct {
// NewLocalRepoCollection loads LocalRepos from DB and makes up collection
func NewLocalRepoCollection(db database.Storage) *LocalRepoCollection {
return &LocalRepoCollection{
- RWMutex: &sync.RWMutex{},
- db: db,
- cache: make(map[string]*LocalRepo),
+ db: db,
+ cache: make(map[string]*LocalRepo),
}
}
@@ -161,17 +158,12 @@ func (collection *LocalRepoCollection) Add(repo *LocalRepo) error {
// Update stores updated information about repo in DB
func (collection *LocalRepoCollection) Update(repo *LocalRepo) error {
- err := collection.db.Put(repo.Key(), repo.Encode())
- if err != nil {
- return err
- }
+ batch := collection.db.CreateBatch()
+ batch.Put(repo.Key(), repo.Encode())
if repo.packageRefs != nil {
- err = collection.db.Put(repo.RefKey(), repo.packageRefs.Encode())
- if err != nil {
- return err
- }
+ batch.Put(repo.RefKey(), repo.packageRefs.Encode())
}
- return nil
+ return batch.Write()
}
// LoadComplete loads additional information for local repo
@@ -245,16 +237,17 @@ func (collection *LocalRepoCollection) Len() int {
// Drop removes remote repo from collection
func (collection *LocalRepoCollection) Drop(repo *LocalRepo) error {
- if _, err := collection.db.Get(repo.Key()); err == database.ErrNotFound {
- panic("local repo not found!")
- }
+ if _, err := collection.db.Get(repo.Key()); err != nil {
+ if err == database.ErrNotFound {
+ return errors.New("local repo not found")
+ }
- delete(collection.cache, repo.UUID)
-
- err := collection.db.Delete(repo.Key())
- if err != nil {
return err
}
+ delete(collection.cache, repo.UUID)
- return collection.db.Delete(repo.RefKey())
+ batch := collection.db.CreateBatch()
+ batch.Delete(repo.Key())
+ batch.Delete(repo.RefKey())
+ return batch.Write()
}
diff --git a/deb/local_test.go b/deb/local_test.go
index 82df0497..c9072b7d 100644
--- a/deb/local_test.go
+++ b/deb/local_test.go
@@ -4,6 +4,7 @@ import (
"errors"
"github.com/aptly-dev/aptly/database"
+ "github.com/aptly-dev/aptly/database/goleveldb"
. "gopkg.in/check.v1"
)
@@ -18,7 +19,7 @@ type LocalRepoSuite struct {
var _ = Suite(&LocalRepoSuite{})
func (s *LocalRepoSuite) SetUpTest(c *C) {
- s.db, _ = database.NewOpenDB(c.MkDir())
+ 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"})
@@ -83,7 +84,7 @@ type LocalRepoCollectionSuite struct {
var _ = Suite(&LocalRepoCollectionSuite{})
func (s *LocalRepoCollectionSuite) SetUpTest(c *C) {
- s.db, _ = database.NewOpenDB(c.MkDir())
+ s.db, _ = goleveldb.NewOpenDB(c.MkDir())
s.collection = NewLocalRepoCollection(s.db)
s.list = NewPackageList()
@@ -198,5 +199,15 @@ func (s *LocalRepoCollectionSuite) TestDrop(c *C) {
r2, _ := collection.ByName("local2")
c.Check(r2.String(), Equals, repo2.String())
- c.Check(func() { s.collection.Drop(repo1) }, Panics, "local repo not found!")
+ c.Check(s.collection.Drop(repo1), ErrorMatches, "local repo not found")
+}
+
+func (s *LocalRepoCollectionSuite) TestDropNonExisting(c *C) {
+ repo := NewLocalRepo("local3", "Comment 3")
+
+ _, err := s.collection.ByUUID(repo.UUID)
+ c.Check(err, ErrorMatches, "local repo .* not found")
+
+ err = 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 56b2ecb7..ce16adf2 100644
--- a/deb/package.go
+++ b/deb/package.go
@@ -52,10 +52,10 @@ const (
PackageTypeInstaller = "installer"
)
-// Special arhictectures
+// Special architectures
const (
ArchitectureAll = "all"
- ArhictectureAny = "any"
+ ArchitectureAny = "any"
ArchitectureSource = "source"
)
@@ -361,6 +361,11 @@ func (p *Package) GetName() string {
return p.Name
}
+// GetFullName returns the package full name
+func (p *Package) GetFullName() string {
+ return strings.Join([]string{p.Name, p.Version, p.Architecture}, "_")
+}
+
// GetVersion returns package version
func (p *Package) GetVersion() string {
return p.Version
diff --git a/deb/package_collection.go b/deb/package_collection.go
index 0ef923c8..2da7fe67 100644
--- a/deb/package_collection.go
+++ b/deb/package_collection.go
@@ -201,8 +201,23 @@ func (collection *PackageCollection) loadContents(p *Package, packagePool aptly.
return contents
}
-// Update adds or updates information about package in DB checking for conficts first
+// Update adds or updates information about package in DB
func (collection *PackageCollection) Update(p *Package) error {
+ transaction, err := collection.db.OpenTransaction()
+ if err != nil {
+ return err
+ }
+ defer transaction.Discard()
+
+ if err = collection.UpdateInTransaction(p, transaction); err != nil {
+ return err
+ }
+
+ return transaction.Commit()
+}
+
+// UpdateInTransaction updates/creates package info in the context of the outer transaction
+func (collection *PackageCollection) UpdateInTransaction(p *Package, transaction database.Transaction) error {
var encodeBuffer bytes.Buffer
encoder := codec.NewEncoder(&encodeBuffer, collection.codecHandle)
@@ -210,12 +225,11 @@ func (collection *PackageCollection) Update(p *Package) error {
encodeBuffer.Reset()
encodeBuffer.WriteByte(0xc1)
encodeBuffer.WriteByte(0x1)
- err := encoder.Encode(p)
- if err != nil {
+ if err := encoder.Encode(p); err != nil {
return err
}
- err = collection.db.Put(p.Key(""), encodeBuffer.Bytes())
+ err := transaction.Put(p.Key(""), encodeBuffer.Bytes())
if err != nil {
return err
}
@@ -228,7 +242,7 @@ func (collection *PackageCollection) Update(p *Package) error {
return err
}
- err = collection.db.Put(p.Key("xF"), encodeBuffer.Bytes())
+ err = transaction.Put(p.Key("xF"), encodeBuffer.Bytes())
if err != nil {
return err
}
@@ -241,7 +255,7 @@ func (collection *PackageCollection) Update(p *Package) error {
return err
}
- err = collection.db.Put(p.Key("xD"), encodeBuffer.Bytes())
+ err = transaction.Put(p.Key("xD"), encodeBuffer.Bytes())
if err != nil {
return err
}
@@ -256,7 +270,7 @@ func (collection *PackageCollection) Update(p *Package) error {
return err
}
- err = collection.db.Put(p.Key("xE"), encodeBuffer.Bytes())
+ err = transaction.Put(p.Key("xE"), encodeBuffer.Bytes())
if err != nil {
return err
}
@@ -265,7 +279,6 @@ func (collection *PackageCollection) Update(p *Package) error {
}
p.collection = collection
-
return nil
}
@@ -275,9 +288,9 @@ func (collection *PackageCollection) AllPackageRefs() *PackageRefList {
}
// DeleteByKey deletes package in DB by key
-func (collection *PackageCollection) DeleteByKey(key []byte) error {
+func (collection *PackageCollection) DeleteByKey(key []byte, dbw database.Writer) error {
for _, key := range [][]byte{key, append([]byte("xF"), key...), append([]byte("xD"), key...), append([]byte("xE"), key...)} {
- err := collection.db.Delete(key)
+ err := dbw.Delete(key)
if err != nil {
return err
}
diff --git a/deb/package_collection_test.go b/deb/package_collection_test.go
index 1b14f80b..eb726e31 100644
--- a/deb/package_collection_test.go
+++ b/deb/package_collection_test.go
@@ -2,6 +2,7 @@ package deb
import (
"github.com/aptly-dev/aptly/database"
+ "github.com/aptly-dev/aptly/database/goleveldb"
"github.com/aptly-dev/aptly/utils"
. "gopkg.in/check.v1"
@@ -17,7 +18,7 @@ var _ = Suite(&PackageCollectionSuite{})
func (s *PackageCollectionSuite) SetUpTest(c *C) {
s.p = NewPackageFromControlFile(packageStanza.Copy())
- s.db, _ = database.NewOpenDB(c.MkDir())
+ s.db, _ = goleveldb.NewOpenDB(c.MkDir())
s.collection = NewPackageCollection(s.db)
}
@@ -113,7 +114,7 @@ func (s *PackageCollectionSuite) TestDeleteByKey(c *C) {
_, err = s.db.Get(s.p.Key("xF"))
c.Check(err, IsNil)
- err = s.collection.DeleteByKey(s.p.Key(""))
+ err = s.collection.DeleteByKey(s.p.Key(""), s.db)
c.Check(err, IsNil)
_, err = s.collection.ByKey(s.p.Key(""))
diff --git a/deb/publish.go b/deb/publish.go
index f3d32d8f..7a7bab88 100644
--- a/deb/publish.go
+++ b/deb/publish.go
@@ -11,7 +11,6 @@ import (
"path/filepath"
"sort"
"strings"
- "sync"
"time"
"github.com/pborman/uuid"
@@ -44,6 +43,7 @@ type PublishedRepo struct {
NotAutomatic string
ButAutomaticUpgrades string
Label string
+ Suite string
// Architectures is a list of all architectures published
Architectures []string
// SourceKind is "local"/"repo"
@@ -62,6 +62,9 @@ type PublishedRepo struct {
// Skip contents generation
SkipContents bool
+ // Skip bz2 compression for index files
+ SkipBz2 bool
+
// True if repo is being re-published
rePublishing bool
@@ -281,7 +284,7 @@ func NewPublishedRepo(storage, prefix, distribution string, architectures []stri
return result, nil
}
-// MarshalJSON requires object to be "loeaded completely"
+// MarshalJSON requires object to be "loaded completely"
func (p *PublishedRepo) MarshalJSON() ([]byte, error) {
type sourceInfo struct {
Component, Name string
@@ -308,9 +311,11 @@ func (p *PublishedRepo) MarshalJSON() ([]byte, error) {
"Distribution": p.Distribution,
"Label": p.Label,
"Origin": p.Origin,
+ "Suite": p.Suite,
"NotAutomatic": p.NotAutomatic,
"ButAutomaticUpgrades": p.ButAutomaticUpgrades,
"Prefix": p.Prefix,
+ "Path": p.GetPath(),
"SourceKind": p.SourceKind,
"Sources": sources,
"Storage": p.Storage,
@@ -357,6 +362,10 @@ func (p *PublishedRepo) String() string {
extras = append(extras, fmt.Sprintf("label: %s", p.Label))
}
+ if p.Suite != "" {
+ extras = append(extras, fmt.Sprintf("suite: %s", p.Suite))
+ }
+
extra = strings.Join(extras, ", ")
if extra != "" {
@@ -485,6 +494,25 @@ func (p *PublishedRepo) GetLabel() string {
return p.Label
}
+// GetPath returns the unique name of the repo
+func (p *PublishedRepo) GetPath() string {
+ prefix := p.StoragePrefix()
+
+ if prefix == "" {
+ return p.Distribution
+ }
+
+ return fmt.Sprintf("%s/%s", prefix, p.Distribution)
+}
+
+// GetSuite returns default or manual Suite:
+func (p *PublishedRepo) GetSuite() string {
+ if p.Suite == "" {
+ return p.Distribution
+ }
+ return p.Suite
+}
+
// Publish publishes snapshot (repository) contents, links package files, generates Packages & Release files, signs them
func (p *PublishedRepo) Publish(packagePool aptly.PackagePool, publishedStorageProvider aptly.PublishedStorageProvider,
collectionFactory *CollectionFactory, signer pgp.Signer, progress aptly.Progress, forceOverwrite bool) error {
@@ -560,9 +588,17 @@ func (p *PublishedRepo) Publish(packagePool aptly.PackagePool, publishedStorageP
}
defer os.RemoveAll(tempDir)
- indexes := newIndexFiles(publishedStorage, basePath, tempDir, suffix, p.AcquireByHash)
+ indexes := newIndexFiles(publishedStorage, basePath, tempDir, suffix, p.AcquireByHash, p.SkipBz2)
legacyContentIndexes := map[string]*ContentsIndex{}
+ var count int64
+ for _, list := range lists {
+ count = count + int64(list.Len())
+ }
+
+ if progress != nil {
+ progress.InitBar(count, false, aptly.BarPublishGeneratePackageFiles)
+ }
for component, list := range lists {
hadUdebs := false
@@ -572,10 +608,6 @@ func (p *PublishedRepo) Publish(packagePool aptly.PackagePool, publishedStorageP
indexes.PackageIndex(component, arch, false, false)
}
- if progress != nil {
- progress.InitBar(int64(list.Len()), false)
- }
-
list.PrepareIndex()
contentIndexes := map[string]*ContentsIndex{}
@@ -612,8 +644,7 @@ func (p *PublishedRepo) Publish(packagePool aptly.PackagePool, publishedStorageP
// to push each path of the package into the database.
// We'll want this batched so as to avoid an excessive
// amount of write() calls.
- tempDB.StartBatch()
- defer tempDB.FinishBatch()
+ batch := tempDB.CreateBatch()
for _, arch := range p.Architectures {
if pkg.MatchesArchitecture(arch) {
@@ -632,7 +663,7 @@ func (p *PublishedRepo) Publish(packagePool aptly.PackagePool, publishedStorageP
contentIndexesMap[key] = contentIndex
}
- contentIndex.Push(qualifiedName, contents)
+ contentIndex.Push(qualifiedName, contents, batch)
}
}
@@ -657,7 +688,7 @@ func (p *PublishedRepo) Publish(packagePool aptly.PackagePool, publishedStorageP
pkg.extra = nil
pkg.contents = nil
- return nil
+ return batch.Write()
})
if err != nil {
@@ -684,10 +715,6 @@ func (p *PublishedRepo) Publish(packagePool aptly.PackagePool, publishedStorageP
}
}
- if progress != nil {
- progress.ShutdownBar()
- }
-
udebs := []bool{false}
if hadUdebs {
udebs = append(udebs, true)
@@ -707,6 +734,7 @@ func (p *PublishedRepo) Publish(packagePool aptly.PackagePool, publishedStorageP
release["Component"] = component
release["Origin"] = p.GetOrigin()
release["Label"] = p.GetLabel()
+ release["Suite"] = p.GetSuite()
if p.AcquireByHash {
release["Acquire-By-Hash"] = "yes"
}
@@ -746,6 +774,7 @@ func (p *PublishedRepo) Publish(packagePool aptly.PackagePool, publishedStorageP
}
if progress != nil {
+ progress.ShutdownBar()
progress.Printf("Finalizing metadata files...\n")
}
@@ -763,7 +792,7 @@ func (p *PublishedRepo) Publish(packagePool aptly.PackagePool, publishedStorageP
release["ButAutomaticUpgrades"] = p.ButAutomaticUpgrades
}
release["Label"] = p.GetLabel()
- release["Suite"] = p.Distribution
+ release["Suite"] = p.GetSuite()
release["Codename"] = p.Distribution
release["Date"] = time.Now().UTC().Format("Mon, 2 Jan 2006 15:04:05 MST")
release["Architectures"] = strings.Join(utils.StrSlicesSubstract(p.Architectures, []string{ArchitectureSource}), " ")
@@ -852,7 +881,6 @@ func (p *PublishedRepo) RemoveFiles(publishedStorageProvider aptly.PublishedStor
// PublishedRepoCollection does listing, updating/adding/deleting of PublishedRepos
type PublishedRepoCollection struct {
- *sync.RWMutex
db database.Storage
list []*PublishedRepo
}
@@ -860,8 +888,7 @@ type PublishedRepoCollection struct {
// NewPublishedRepoCollection loads PublishedRepos from DB and makes up collection
func NewPublishedRepoCollection(db database.Storage) *PublishedRepoCollection {
return &PublishedRepoCollection{
- RWMutex: &sync.RWMutex{},
- db: db,
+ db: db,
}
}
@@ -914,21 +941,16 @@ func (collection *PublishedRepoCollection) CheckDuplicate(repo *PublishedRepo) *
}
// Update stores updated information about repo in DB
-func (collection *PublishedRepoCollection) Update(repo *PublishedRepo) (err error) {
- err = collection.db.Put(repo.Key(), repo.Encode())
- if err != nil {
- return
- }
+func (collection *PublishedRepoCollection) Update(repo *PublishedRepo) error {
+ batch := collection.db.CreateBatch()
+ batch.Put(repo.Key(), repo.Encode())
if repo.SourceKind == SourceLocalRepo {
for component, item := range repo.sourceItems {
- err = collection.db.Put(repo.RefKey(component), item.packageRefs.Encode())
- if err != nil {
- return
- }
+ batch.Put(repo.RefKey(component), item.packageRefs.Encode())
}
}
- return
+ return batch.Write()
}
// LoadComplete loads additional information for remote repo
@@ -1170,6 +1192,7 @@ func (collection *PublishedRepoCollection) Remove(publishedStorageProvider aptly
storage, prefix, distribution string, collectionFactory *CollectionFactory, progress aptly.Progress,
force, skipCleanup bool) error {
+ // TODO: load via transaction
collection.loadList()
repo, err := collection.ByStoragePrefixDistribution(storage, prefix, distribution)
@@ -1221,17 +1244,12 @@ func (collection *PublishedRepoCollection) Remove(publishedStorageProvider aptly
}
}
- err = collection.db.Delete(repo.Key())
- if err != nil {
- return err
- }
+ batch := collection.db.CreateBatch()
+ batch.Delete(repo.Key())
for _, component := range repo.Components() {
- err = collection.db.Delete(repo.RefKey(component))
- if err != nil {
- return err
- }
+ batch.Delete(repo.RefKey(component))
}
- return nil
+ return batch.Write()
}
diff --git a/deb/publish_test.go b/deb/publish_test.go
index 371823e8..4850720f 100644
--- a/deb/publish_test.go
+++ b/deb/publish_test.go
@@ -10,6 +10,7 @@ import (
"github.com/aptly-dev/aptly/aptly"
"github.com/aptly-dev/aptly/database"
+ "github.com/aptly-dev/aptly/database/goleveldb"
"github.com/aptly-dev/aptly/files"
"github.com/ugorji/go/codec"
@@ -87,7 +88,7 @@ var _ = Suite(&PublishedRepoSuite{})
func (s *PublishedRepoSuite) SetUpTest(c *C) {
s.SetUpPackages()
- s.db, _ = database.NewOpenDB(c.MkDir())
+ s.db, _ = goleveldb.NewOpenDB(c.MkDir())
s.factory = NewCollectionFactory(s.db)
s.root = c.MkDir()
@@ -449,7 +450,7 @@ type PublishedRepoCollectionSuite struct {
var _ = Suite(&PublishedRepoCollectionSuite{})
func (s *PublishedRepoCollectionSuite) SetUpTest(c *C) {
- s.db, _ = database.NewOpenDB(c.MkDir())
+ s.db, _ = goleveldb.NewOpenDB(c.MkDir())
s.factory = NewCollectionFactory(s.db)
s.snapshotCollection = s.factory.SnapshotCollection()
@@ -640,7 +641,7 @@ type PublishedRepoRemoveSuite struct {
var _ = Suite(&PublishedRepoRemoveSuite{})
func (s *PublishedRepoRemoveSuite) SetUpTest(c *C) {
- s.db, _ = database.NewOpenDB(c.MkDir())
+ s.db, _ = goleveldb.NewOpenDB(c.MkDir())
s.factory = NewCollectionFactory(s.db)
s.snapshotCollection = s.factory.SnapshotCollection()
diff --git a/deb/query.go b/deb/query.go
index a96af829..19a1cdc9 100644
--- a/deb/query.go
+++ b/deb/query.go
@@ -168,15 +168,15 @@ func (q *FieldQuery) Matches(pkg PackageLike) bool {
case VersionDontCare:
return field != ""
case VersionEqual:
- return field == q.Value
+ return CompareVersions(field, q.Value) == 0
case VersionGreater:
- return field > q.Value
+ return CompareVersions(field, q.Value) > 0
case VersionGreaterOrEqual:
- return field >= q.Value
+ return CompareVersions(field, q.Value) >= 0
case VersionLess:
- return field < q.Value
+ return CompareVersions(field, q.Value) < 0
case VersionLessOrEqual:
- return field <= q.Value
+ return CompareVersions(field, q.Value) <= 0
case VersionPatternMatch:
matched, err := filepath.Match(q.Value, field)
return err == nil && matched
diff --git a/deb/query_test.go b/deb/query_test.go
new file mode 100644
index 00000000..fccd0cf8
--- /dev/null
+++ b/deb/query_test.go
@@ -0,0 +1,23 @@
+package deb
+
+import (
+ . "gopkg.in/check.v1"
+)
+
+type QuerySuite struct {
+}
+
+var _ = Suite(&QuerySuite{})
+
+func (s *QuerySuite) TestVersionCompare(c *C) {
+ q := FieldQuery{"Version", VersionLess, "5.0.0.2", nil}
+
+ p100 := Package{}
+ p100.Version = "5.0.0.100"
+
+ p1 := Package{}
+ p1.Version = "5.0.0.1"
+
+ c.Check(q.Matches(&p100), Equals, false)
+ c.Check(q.Matches(&p1), Equals, true)
+}
diff --git a/deb/reflist_test.go b/deb/reflist_test.go
index f987fbaa..d0ce21f5 100644
--- a/deb/reflist_test.go
+++ b/deb/reflist_test.go
@@ -3,7 +3,7 @@ package deb
import (
"errors"
- "github.com/aptly-dev/aptly/database"
+ "github.com/aptly-dev/aptly/database/goleveldb"
. "gopkg.in/check.v1"
)
@@ -44,7 +44,7 @@ func (s *PackageRefListSuite) SetUpTest(c *C) {
}
func (s *PackageRefListSuite) TestNewPackageListFromRefList(c *C) {
- db, _ := database.NewOpenDB(c.MkDir())
+ db, _ := goleveldb.NewOpenDB(c.MkDir())
coll := NewPackageCollection(db)
coll.Update(s.p1)
coll.Update(s.p3)
@@ -166,7 +166,7 @@ func (s *PackageRefListSuite) TestSubstract(c *C) {
}
func (s *PackageRefListSuite) TestDiff(c *C) {
- db, _ := database.NewOpenDB(c.MkDir())
+ db, _ := goleveldb.NewOpenDB(c.MkDir())
coll := NewPackageCollection(db)
packages := []*Package{
@@ -238,7 +238,7 @@ func (s *PackageRefListSuite) TestDiff(c *C) {
}
func (s *PackageRefListSuite) TestMerge(c *C) {
- db, _ := database.NewOpenDB(c.MkDir())
+ db, _ := goleveldb.NewOpenDB(c.MkDir())
coll := NewPackageCollection(db)
packages := []*Package{
diff --git a/deb/remote.go b/deb/remote.go
index 72165baf..6d30e999 100644
--- a/deb/remote.go
+++ b/deb/remote.go
@@ -12,7 +12,6 @@ import (
"sort"
"strconv"
"strings"
- "sync"
"syscall"
"time"
@@ -33,7 +32,7 @@ const (
// RemoteRepo represents remote (fetchable) Debian repository.
//
-// Repostitory could be filtered when fetching by components, architectures
+// Repository could be filtered when fetching by components, architectures
type RemoteRepo struct {
// Permanent internal ID
UUID string
@@ -52,7 +51,7 @@ type RemoteRepo struct {
// Last update date
LastDownloadDate time.Time
// Checksums for release files
- ReleaseFiles map[string]utils.ChecksumInfo
+ ReleaseFiles map[string]utils.ChecksumInfo `json:"-"` // exclude from json output
// Filter for packages
Filter string
// Status marks state of repository (being updated, no action)
@@ -71,6 +70,8 @@ type RemoteRepo struct {
DownloadUdebs bool
// Should we download installer files?
DownloadInstaller bool
+ // Packages for json output
+ Packages []string `codec:"-" json:",omitempty"`
// "Snapshot" of current list of packages
packageRefs *PackageRefList
// Parsed archived root
@@ -174,6 +175,11 @@ func (repo *RemoteRepo) RefList() *PackageRefList {
return repo.packageRefs
}
+// PackageList returns package list for repo
+func (repo *RemoteRepo) PackageList() *PackageList {
+ return repo.packageList
+}
+
// MarkAsUpdating puts current PID and sets status to updating
func (repo *RemoteRepo) MarkAsUpdating() {
repo.Status = MirrorUpdating
@@ -423,7 +429,7 @@ ok:
// DownloadPackageIndexes downloads & parses package index files
func (repo *RemoteRepo) DownloadPackageIndexes(progress aptly.Progress, d aptly.Downloader, verifier pgp.Verifier, collectionFactory *CollectionFactory,
- ignoreMismatch bool, maxTries int) error {
+ ignoreMismatch bool) error {
if repo.packageList != nil {
panic("packageList != nil")
}
@@ -456,7 +462,7 @@ func (repo *RemoteRepo) DownloadPackageIndexes(progress aptly.Progress, d aptly.
for _, info := range packagesPaths {
path, kind, component, architecture := info[0], info[1], info[2], info[3]
- packagesReader, packagesFile, err := http.DownloadTryCompression(gocontext.TODO(), d, repo.IndexesRootURL(), path, repo.ReleaseFiles, ignoreMismatch, maxTries)
+ packagesReader, packagesFile, err := http.DownloadTryCompression(gocontext.TODO(), d, repo.IndexesRootURL(), path, repo.ReleaseFiles, ignoreMismatch)
isInstaller := kind == PackageTypeInstaller
if err != nil {
@@ -505,8 +511,10 @@ func (repo *RemoteRepo) DownloadPackageIndexes(progress aptly.Progress, d aptly.
}
defer packagesFile.Close()
- stat, _ := packagesFile.Stat()
- progress.InitBar(stat.Size(), true)
+ if progress != nil {
+ stat, _ := packagesFile.Stat()
+ progress.InitBar(stat.Size(), true, aptly.BarMirrorUpdateBuildPackageList)
+ }
sreader := NewControlFileReader(packagesReader, false, isInstaller)
@@ -519,8 +527,10 @@ func (repo *RemoteRepo) DownloadPackageIndexes(progress aptly.Progress, d aptly.
break
}
- off, _ := packagesFile.Seek(0, 1)
- progress.SetBar(int(off))
+ if progress != nil {
+ off, _ := packagesFile.Seek(0, 1)
+ progress.SetBar(int(off))
+ }
var p *Package
@@ -540,14 +550,20 @@ func (repo *RemoteRepo) DownloadPackageIndexes(progress aptly.Progress, d aptly.
}
}
err = repo.packageList.Add(p)
- if _, ok := err.(*PackageConflictError); ok {
- progress.ColoredPrintf("@y[!]@| @!skipping package %s: duplicate in packages index@|", p)
- } else if err != nil {
- return err
+ if err != nil {
+ if _, ok := err.(*PackageConflictError); ok {
+ if progress != nil {
+ progress.ColoredPrintf("@y[!]@| @!skipping package %s: duplicate in packages index@|", p)
+ }
+ } else if err != nil {
+ return err
+ }
}
}
- progress.ShutdownBar()
+ if progress != nil {
+ progress.ShutdownBar()
+ }
}
return nil
@@ -617,34 +633,44 @@ func (repo *RemoteRepo) BuildDownloadQueue(packagePool aptly.PackagePool, packag
// FinalizeDownload swaps for final value of package refs
func (repo *RemoteRepo) FinalizeDownload(collectionFactory *CollectionFactory, progress aptly.Progress) error {
+ transaction, err := collectionFactory.PackageCollection().db.OpenTransaction()
+ if err != nil {
+ return err
+ }
+ defer transaction.Discard()
+
repo.LastDownloadDate = time.Now()
if progress != nil {
- progress.InitBar(int64(repo.packageList.Len()), true)
+ progress.InitBar(int64(repo.packageList.Len()), true, aptly.BarMirrorUpdateFinalizeDownload)
}
var i int
// update all the packages in collection
- err := repo.packageList.ForEach(func(p *Package) error {
+ err = repo.packageList.ForEach(func(p *Package) error {
i++
if progress != nil {
progress.SetBar(i)
}
// download process might have updated checksums
p.UpdateFiles(p.Files())
- return collectionFactory.PackageCollection().Update(p)
+ return collectionFactory.PackageCollection().UpdateInTransaction(p, transaction)
})
- repo.packageRefs = NewPackageRefListFromPackageList(repo.packageList)
+ if err == nil {
+ repo.packageRefs = NewPackageRefListFromPackageList(repo.packageList)
+ repo.packageList = nil
+ }
if progress != nil {
progress.ShutdownBar()
}
- repo.packageList = nil
-
- return err
+ if err != nil {
+ return err
+ }
+ return transaction.Commit()
}
// Encode does msgpack encoding of RemoteRepo
@@ -696,6 +722,18 @@ func (repo *RemoteRepo) Decode(input []byte) error {
repo.ReleaseFiles = repo11.ReleaseFiles
repo.Filter = repo11.Filter
repo.FilterWithDeps = repo11.FilterWithDeps
+ } else if strings.Contains(err.Error(), "invalid length of bytes for decoding time") {
+ // DB created by old codec version, time.Time is not builtin type.
+ // https://github.com/ugorji/go-codec/issues/269
+ decoder := codec.NewDecoderBytes(input, &codec.MsgpackHandle{
+ // only can be configured in Deprecated BasicHandle struct
+ BasicHandle: codec.BasicHandle{ // nolint: staticcheck
+ TimeNotBuiltin: true,
+ },
+ })
+ if err = decoder.Decode(repo); err != nil {
+ return err
+ }
} else {
return err
}
@@ -715,7 +753,6 @@ func (repo *RemoteRepo) RefKey() []byte {
// RemoteRepoCollection does listing, updating/adding/deleting of RemoteRepos
type RemoteRepoCollection struct {
- *sync.RWMutex
db database.Storage
cache map[string]*RemoteRepo
}
@@ -723,9 +760,8 @@ type RemoteRepoCollection struct {
// NewRemoteRepoCollection loads RemoteRepos from DB and makes up collection
func NewRemoteRepoCollection(db database.Storage) *RemoteRepoCollection {
return &RemoteRepoCollection{
- RWMutex: &sync.RWMutex{},
- db: db,
- cache: make(map[string]*RemoteRepo),
+ db: db,
+ cache: make(map[string]*RemoteRepo),
}
}
@@ -783,17 +819,13 @@ func (collection *RemoteRepoCollection) Add(repo *RemoteRepo) error {
// Update stores updated information about repo in DB
func (collection *RemoteRepoCollection) Update(repo *RemoteRepo) error {
- err := collection.db.Put(repo.Key(), repo.Encode())
- if err != nil {
- return err
- }
+ batch := collection.db.CreateBatch()
+
+ batch.Put(repo.Key(), repo.Encode())
if repo.packageRefs != nil {
- err = collection.db.Put(repo.RefKey(), repo.packageRefs.Encode())
- if err != nil {
- return err
- }
+ batch.Put(repo.RefKey(), repo.packageRefs.Encode())
}
- return nil
+ return batch.Write()
}
// LoadComplete loads additional information for remote repo
@@ -866,16 +898,18 @@ func (collection *RemoteRepoCollection) Len() int {
// Drop removes remote repo from collection
func (collection *RemoteRepoCollection) Drop(repo *RemoteRepo) error {
- if _, err := collection.db.Get(repo.Key()); err == database.ErrNotFound {
- panic("repo not found!")
+ if _, err := collection.db.Get(repo.Key()); err != nil {
+ if err == database.ErrNotFound {
+ return errors.New("repo not found")
+ }
+
+ return err
}
delete(collection.cache, repo.UUID)
- err := collection.db.Delete(repo.Key())
- if err != nil {
- return err
- }
-
- return collection.db.Delete(repo.RefKey())
+ batch := collection.db.CreateBatch()
+ batch.Delete(repo.Key())
+ batch.Delete(repo.RefKey())
+ return batch.Write()
}
diff --git a/deb/remote_test.go b/deb/remote_test.go
index 71b429c1..1ea1d558 100644
--- a/deb/remote_test.go
+++ b/deb/remote_test.go
@@ -10,6 +10,7 @@ import (
"github.com/aptly-dev/aptly/aptly"
"github.com/aptly-dev/aptly/console"
"github.com/aptly-dev/aptly/database"
+ "github.com/aptly-dev/aptly/database/goleveldb"
"github.com/aptly-dev/aptly/files"
"github.com/aptly-dev/aptly/http"
"github.com/aptly-dev/aptly/pgp"
@@ -92,7 +93,7 @@ func (s *RemoteRepoSuite) SetUpTest(c *C) {
s.flat, _ = NewRemoteRepo("exp42", "http://repos.express42.com/virool/precise/", "./", []string{}, []string{}, false, false, false)
s.downloader = http.NewFakeDownloader().ExpectResponse("http://mirror.yandex.ru/debian/dists/squeeze/Release", exampleReleaseFile)
s.progress = console.NewProgress()
- s.db, _ = database.NewOpenDB(c.MkDir())
+ s.db, _ = goleveldb.NewOpenDB(c.MkDir())
s.collectionFactory = NewCollectionFactory(s.db)
s.packagePool = files.NewPackagePool(c.MkDir(), false)
s.cs = files.NewMockChecksumStorage()
@@ -276,7 +277,7 @@ func (s *RemoteRepoSuite) TestDownload(c *C) {
s.downloader.ExpectError("http://mirror.yandex.ru/debian/dists/squeeze/main/binary-i386/Packages.gz", &http.Error{Code: 404})
s.downloader.ExpectResponse("http://mirror.yandex.ru/debian/dists/squeeze/main/binary-i386/Packages", examplePackagesFile)
- err = s.repo.DownloadPackageIndexes(s.progress, s.downloader, nil, s.collectionFactory, false, 1)
+ err = s.repo.DownloadPackageIndexes(s.progress, s.downloader, nil, s.collectionFactory, false)
c.Assert(err, IsNil)
c.Assert(s.downloader.Empty(), Equals, true)
@@ -303,7 +304,7 @@ func (s *RemoteRepoSuite) TestDownload(c *C) {
s.downloader.ExpectError("http://mirror.yandex.ru/debian/dists/squeeze/main/binary-i386/Packages.gz", &http.Error{Code: 404})
s.downloader.ExpectResponse("http://mirror.yandex.ru/debian/dists/squeeze/main/binary-i386/Packages", examplePackagesFile)
- err = s.repo.DownloadPackageIndexes(s.progress, s.downloader, nil, s.collectionFactory, false, 1)
+ err = s.repo.DownloadPackageIndexes(s.progress, s.downloader, nil, s.collectionFactory, false)
c.Assert(err, IsNil)
c.Assert(s.downloader.Empty(), Equals, true)
@@ -324,7 +325,7 @@ func (s *RemoteRepoSuite) TestDownload(c *C) {
s.downloader.ExpectError("http://mirror.yandex.ru/debian/dists/squeeze/main/binary-i386/Packages.gz", &http.Error{Code: 404})
s.downloader.ExpectResponse("http://mirror.yandex.ru/debian/dists/squeeze/main/binary-i386/Packages", examplePackagesFile)
- err = s.repo.DownloadPackageIndexes(s.progress, s.downloader, nil, s.collectionFactory, false, 1)
+ err = s.repo.DownloadPackageIndexes(s.progress, s.downloader, nil, s.collectionFactory, false)
c.Assert(err, IsNil)
c.Assert(s.downloader.Empty(), Equals, true)
@@ -351,7 +352,7 @@ func (s *RemoteRepoSuite) TestDownloadWithInstaller(c *C) {
s.downloader.ExpectResponse("http://mirror.yandex.ru/debian/dists/squeeze/main/installer-i386/current/images/SHA256SUMS", exampleInstallerHashSumFile)
s.downloader.ExpectResponse("http://mirror.yandex.ru/debian/dists/squeeze/main/installer-i386/current/images/MANIFEST", exampleInstallerManifestFile)
- err = s.repo.DownloadPackageIndexes(s.progress, s.downloader, nil, s.collectionFactory, false, 1)
+ err = s.repo.DownloadPackageIndexes(s.progress, s.downloader, nil, s.collectionFactory, false)
c.Assert(err, IsNil)
c.Assert(s.downloader.Empty(), Equals, true)
@@ -395,7 +396,7 @@ func (s *RemoteRepoSuite) TestDownloadWithSources(c *C) {
s.downloader.ExpectError("http://mirror.yandex.ru/debian/dists/squeeze/main/source/Sources.gz", &http.Error{Code: 404})
s.downloader.ExpectResponse("http://mirror.yandex.ru/debian/dists/squeeze/main/source/Sources", exampleSourcesFile)
- err = s.repo.DownloadPackageIndexes(s.progress, s.downloader, nil, s.collectionFactory, false, 1)
+ err = s.repo.DownloadPackageIndexes(s.progress, s.downloader, nil, s.collectionFactory, false)
c.Assert(err, IsNil)
c.Assert(s.downloader.Empty(), Equals, true)
@@ -439,7 +440,7 @@ func (s *RemoteRepoSuite) TestDownloadWithSources(c *C) {
s.downloader.ExpectError("http://mirror.yandex.ru/debian/dists/squeeze/main/source/Sources.gz", &http.Error{Code: 404})
s.downloader.ExpectResponse("http://mirror.yandex.ru/debian/dists/squeeze/main/source/Sources", exampleSourcesFile)
- err = s.repo.DownloadPackageIndexes(s.progress, s.downloader, nil, s.collectionFactory, false, 1)
+ err = s.repo.DownloadPackageIndexes(s.progress, s.downloader, nil, s.collectionFactory, false)
c.Assert(err, IsNil)
c.Assert(s.downloader.Empty(), Equals, true)
@@ -464,7 +465,7 @@ func (s *RemoteRepoSuite) TestDownloadWithSources(c *C) {
s.downloader.ExpectError("http://mirror.yandex.ru/debian/dists/squeeze/main/source/Sources.gz", &http.Error{Code: 404})
s.downloader.ExpectResponse("http://mirror.yandex.ru/debian/dists/squeeze/main/source/Sources", exampleSourcesFile)
- err = s.repo.DownloadPackageIndexes(s.progress, s.downloader, nil, s.collectionFactory, false, 1)
+ err = s.repo.DownloadPackageIndexes(s.progress, s.downloader, nil, s.collectionFactory, false)
c.Assert(err, IsNil)
c.Assert(s.downloader.Empty(), Equals, true)
@@ -488,7 +489,7 @@ func (s *RemoteRepoSuite) TestDownloadFlat(c *C) {
err := s.flat.Fetch(downloader, nil)
c.Assert(err, IsNil)
- err = s.flat.DownloadPackageIndexes(s.progress, downloader, nil, s.collectionFactory, true, 1)
+ err = s.flat.DownloadPackageIndexes(s.progress, downloader, nil, s.collectionFactory, true)
c.Assert(err, IsNil)
c.Assert(downloader.Empty(), Equals, true)
@@ -516,7 +517,7 @@ func (s *RemoteRepoSuite) TestDownloadFlat(c *C) {
err = s.flat.Fetch(downloader, nil)
c.Assert(err, IsNil)
- err = s.flat.DownloadPackageIndexes(s.progress, downloader, nil, s.collectionFactory, true, 1)
+ err = s.flat.DownloadPackageIndexes(s.progress, downloader, nil, s.collectionFactory, true)
c.Assert(err, IsNil)
c.Assert(downloader.Empty(), Equals, true)
@@ -538,7 +539,7 @@ func (s *RemoteRepoSuite) TestDownloadFlat(c *C) {
err = s.flat.Fetch(downloader, nil)
c.Assert(err, IsNil)
- err = s.flat.DownloadPackageIndexes(s.progress, downloader, nil, s.collectionFactory, true, 1)
+ err = s.flat.DownloadPackageIndexes(s.progress, downloader, nil, s.collectionFactory, true)
c.Assert(err, IsNil)
c.Assert(downloader.Empty(), Equals, true)
@@ -569,7 +570,7 @@ func (s *RemoteRepoSuite) TestDownloadWithSourcesFlat(c *C) {
err := s.flat.Fetch(downloader, nil)
c.Assert(err, IsNil)
- err = s.flat.DownloadPackageIndexes(s.progress, downloader, nil, s.collectionFactory, true, 1)
+ err = s.flat.DownloadPackageIndexes(s.progress, downloader, nil, s.collectionFactory, true)
c.Assert(err, IsNil)
c.Assert(downloader.Empty(), Equals, true)
@@ -615,7 +616,7 @@ func (s *RemoteRepoSuite) TestDownloadWithSourcesFlat(c *C) {
err = s.flat.Fetch(downloader, nil)
c.Assert(err, IsNil)
- err = s.flat.DownloadPackageIndexes(s.progress, downloader, nil, s.collectionFactory, true, 1)
+ err = s.flat.DownloadPackageIndexes(s.progress, downloader, nil, s.collectionFactory, true)
c.Assert(err, IsNil)
c.Assert(downloader.Empty(), Equals, true)
@@ -641,7 +642,7 @@ func (s *RemoteRepoSuite) TestDownloadWithSourcesFlat(c *C) {
err = s.flat.Fetch(downloader, nil)
c.Assert(err, IsNil)
- err = s.flat.DownloadPackageIndexes(s.progress, downloader, nil, s.collectionFactory, true, 1)
+ err = s.flat.DownloadPackageIndexes(s.progress, downloader, nil, s.collectionFactory, true)
c.Assert(err, IsNil)
c.Assert(downloader.Empty(), Equals, true)
@@ -663,7 +664,7 @@ type RemoteRepoCollectionSuite struct {
var _ = Suite(&RemoteRepoCollectionSuite{})
func (s *RemoteRepoCollectionSuite) SetUpTest(c *C) {
- s.db, _ = database.NewOpenDB(c.MkDir())
+ s.db, _ = goleveldb.NewOpenDB(c.MkDir())
s.collection = NewRemoteRepoCollection(s.db)
s.SetUpPackages()
}
@@ -773,7 +774,7 @@ func (s *RemoteRepoCollectionSuite) TestDrop(c *C) {
r2, _ := collection.ByName("tyndex")
c.Check(r2.String(), Equals, repo2.String())
- c.Check(func() { s.collection.Drop(repo1) }, Panics, "repo not found!")
+ c.Check(s.collection.Drop(repo1), ErrorMatches, "repo not found")
}
const exampleReleaseFile = `Origin: LP-PPA-agenda-developers-daily
diff --git a/deb/snapshot.go b/deb/snapshot.go
index 307433af..f351b87f 100644
--- a/deb/snapshot.go
+++ b/deb/snapshot.go
@@ -7,7 +7,6 @@ import (
"log"
"sort"
"strings"
- "sync"
"time"
"github.com/aptly-dev/aptly/database"
@@ -19,15 +18,21 @@ import (
// Snapshot is immutable state of repository: list of packages
type Snapshot struct {
// Persisten internal ID
- UUID string `json:"-"`
+ UUID string `codec:"UUID" json:"-"`
// Human-readable name
Name string
// Date of creation
CreatedAt time.Time
// Source: kind + ID
- SourceKind string `json:"-"`
- SourceIDs []string `json:"-"`
+ SourceKind string `codec:"SourceKind"`
+ SourceIDs []string `codec:"SourceIDs" json:"-"`
+ // Sources
+ Snapshots []*Snapshot `codec:"-" json:",omitempty"`
+ RemoteRepos []*RemoteRepo `codec:"-" json:",omitempty"`
+ LocalRepos []*LocalRepo `codec:"-" json:",omitempty"`
+ Packages []string `codec:"-" json:",omitempty"`
+
// Description of how snapshot was created
Description string
@@ -120,6 +125,13 @@ func (s *Snapshot) Key() []byte {
return []byte("S" + s.UUID)
}
+// ResourceKey is a unique identifier of the resource
+// this snapshot uses. Instead of uuid it uses name
+// which needs to be unique as well.
+func (s *Snapshot) ResourceKey() []byte {
+ return []byte("S" + s.Name)
+}
+
// RefKey is a unique id for package reference list
func (s *Snapshot) RefKey() []byte {
return []byte("E" + s.UUID)
@@ -163,6 +175,18 @@ func (s *Snapshot) Decode(input []byte) error {
s.SourceKind = snapshot11.SourceKind
s.SourceIDs = snapshot11.SourceIDs
s.Description = snapshot11.Description
+ } else if strings.Contains(err.Error(), "invalid length of bytes for decoding time") {
+ // DB created by old codec version, time.Time is not builtin type.
+ // https://github.com/ugorji/go-codec/issues/269
+ decoder := codec.NewDecoderBytes(input, &codec.MsgpackHandle{
+ // only can be configured in Deprecated BasicHandle struct
+ BasicHandle: codec.BasicHandle{ // nolint: staticcheck
+ TimeNotBuiltin: true,
+ },
+ })
+ if err = decoder.Decode(s); err != nil {
+ return err
+ }
} else {
return err
}
@@ -172,7 +196,6 @@ func (s *Snapshot) Decode(input []byte) error {
// SnapshotCollection does listing, updating/adding/deleting of Snapshots
type SnapshotCollection struct {
- *sync.RWMutex
db database.Storage
cache map[string]*Snapshot
}
@@ -180,9 +203,8 @@ type SnapshotCollection struct {
// NewSnapshotCollection loads Snapshots from DB and makes up collection
func NewSnapshotCollection(db database.Storage) *SnapshotCollection {
return &SnapshotCollection{
- RWMutex: &sync.RWMutex{},
- db: db,
- cache: map[string]*Snapshot{},
+ db: db,
+ cache: map[string]*Snapshot{},
}
}
@@ -204,14 +226,14 @@ func (collection *SnapshotCollection) Add(snapshot *Snapshot) error {
// Update stores updated information about snapshot in DB
func (collection *SnapshotCollection) Update(snapshot *Snapshot) error {
- err := collection.db.Put(snapshot.Key(), snapshot.Encode())
- if err != nil {
- return err
- }
+ batch := collection.db.CreateBatch()
+
+ batch.Put(snapshot.Key(), snapshot.Encode())
if snapshot.packageRefs != nil {
- return collection.db.Put(snapshot.RefKey(), snapshot.packageRefs.Encode())
+ batch.Put(snapshot.RefKey(), snapshot.packageRefs.Encode())
}
- return nil
+
+ return batch.Write()
}
// LoadComplete loads additional information about snapshot
@@ -367,18 +389,20 @@ func (collection *SnapshotCollection) Len() int {
// Drop removes snapshot from collection
func (collection *SnapshotCollection) Drop(snapshot *Snapshot) error {
- if _, err := collection.db.Get(snapshot.Key()); err == database.ErrNotFound {
- panic("snapshot not found!")
+ if _, err := collection.db.Get(snapshot.Key()); err != nil {
+ if err == database.ErrNotFound {
+ return errors.New("snapshot not found")
+ }
+
+ return err
}
delete(collection.cache, snapshot.UUID)
- err := collection.db.Delete(snapshot.Key())
- if err != nil {
- return err
- }
-
- return collection.db.Delete(snapshot.RefKey())
+ batch := collection.db.CreateBatch()
+ batch.Delete(snapshot.Key())
+ batch.Delete(snapshot.RefKey())
+ return batch.Write()
}
// Snapshot sorting methods
diff --git a/deb/snapshot_bench_test.go b/deb/snapshot_bench_test.go
index 0240b9f8..c6bb94a2 100644
--- a/deb/snapshot_bench_test.go
+++ b/deb/snapshot_bench_test.go
@@ -5,7 +5,7 @@ import (
"os"
"testing"
- "github.com/aptly-dev/aptly/database"
+ "github.com/aptly-dev/aptly/database/goleveldb"
)
func BenchmarkSnapshotCollectionForEach(b *testing.B) {
@@ -14,7 +14,7 @@ func BenchmarkSnapshotCollectionForEach(b *testing.B) {
tmpDir := os.TempDir()
defer os.RemoveAll(tmpDir)
- db, _ := database.NewOpenDB(tmpDir)
+ db, _ := goleveldb.NewOpenDB(tmpDir)
defer db.Close()
collection := NewSnapshotCollection(db)
@@ -43,7 +43,7 @@ func BenchmarkSnapshotCollectionByUUID(b *testing.B) {
tmpDir := os.TempDir()
defer os.RemoveAll(tmpDir)
- db, _ := database.NewOpenDB(tmpDir)
+ db, _ := goleveldb.NewOpenDB(tmpDir)
defer db.Close()
collection := NewSnapshotCollection(db)
@@ -74,7 +74,7 @@ func BenchmarkSnapshotCollectionByName(b *testing.B) {
tmpDir := os.TempDir()
defer os.RemoveAll(tmpDir)
- db, _ := database.NewOpenDB(tmpDir)
+ db, _ := goleveldb.NewOpenDB(tmpDir)
defer db.Close()
collection := NewSnapshotCollection(db)
diff --git a/deb/snapshot_test.go b/deb/snapshot_test.go
index 017910b5..d27c4226 100644
--- a/deb/snapshot_test.go
+++ b/deb/snapshot_test.go
@@ -5,6 +5,7 @@ import (
"sort"
"github.com/aptly-dev/aptly/database"
+ "github.com/aptly-dev/aptly/database/goleveldb"
. "gopkg.in/check.v1"
)
@@ -113,7 +114,7 @@ type SnapshotCollectionSuite struct {
var _ = Suite(&SnapshotCollectionSuite{})
func (s *SnapshotCollectionSuite) SetUpTest(c *C) {
- s.db, _ = database.NewOpenDB(c.MkDir())
+ s.db, _ = goleveldb.NewOpenDB(c.MkDir())
s.collection = NewSnapshotCollection(s.db)
s.SetUpPackages()
@@ -279,5 +280,5 @@ func (s *SnapshotCollectionSuite) TestDrop(c *C) {
_, err = collection.ByUUID(s.snapshot1.UUID)
c.Check(err, ErrorMatches, "snapshot .* not found")
- c.Check(func() { s.collection.Drop(s.snapshot1) }, Panics, "snapshot not found!")
+ c.Check(s.collection.Drop(s.snapshot1), ErrorMatches, "snapshot not found")
}
diff --git a/deb/testdata/dbgsym-with-source-version/dbgsym-with-source-version-dbgsym_0.1+aptly2021.01_amd64.ddeb b/deb/testdata/dbgsym-with-source-version/dbgsym-with-source-version-dbgsym_0.1+aptly2021.01_amd64.ddeb
new file mode 100644
index 00000000..3e6a91f4
Binary files /dev/null and b/deb/testdata/dbgsym-with-source-version/dbgsym-with-source-version-dbgsym_0.1+aptly2021.01_amd64.ddeb differ
diff --git a/deb/testdata/dbgsym-with-source-version/dbgsym-with-source-version_0.1+aptly2021.01_amd64.deb b/deb/testdata/dbgsym-with-source-version/dbgsym-with-source-version_0.1+aptly2021.01_amd64.deb
new file mode 100644
index 00000000..aba2a771
Binary files /dev/null and b/deb/testdata/dbgsym-with-source-version/dbgsym-with-source-version_0.1+aptly2021.01_amd64.deb differ
diff --git a/deb/testdata/dbgsym-with-source-version/dbgsym-with-source-version_2021.01.dsc b/deb/testdata/dbgsym-with-source-version/dbgsym-with-source-version_2021.01.dsc
new file mode 100644
index 00000000..f315d482
--- /dev/null
+++ b/deb/testdata/dbgsym-with-source-version/dbgsym-with-source-version_2021.01.dsc
@@ -0,0 +1,16 @@
+Format: 3.0 (native)
+Source: dbgsym-with-source-version
+Binary: dbgsym-with-source-version
+Architecture: any
+Version: 2021.01
+Maintainer: Ratchanan Srirattanamet
+Standards-Version: 4.4.1
+Build-Depends: debhelper-compat (= 12)
+Package-List:
+ dbgsym-with-source-version deb unknown optional arch=any
+Checksums-Sha1:
+ 626c500200d9837b475f61a2563a647e785a9ccf 1664 dbgsym-with-source-version_2021.01.tar.xz
+Checksums-Sha256:
+ 00e1915300d0996056867b66d2cfc608e3839febb9feb596fe940f99ced632b0 1664 dbgsym-with-source-version_2021.01.tar.xz
+Files:
+ 5f50d8d87421226d33536471d294140e 1664 dbgsym-with-source-version_2021.01.tar.xz
diff --git a/deb/testdata/dbgsym-with-source-version/dbgsym-with-source-version_2021.01.tar.xz b/deb/testdata/dbgsym-with-source-version/dbgsym-with-source-version_2021.01.tar.xz
new file mode 100644
index 00000000..80d68dfa
Binary files /dev/null and b/deb/testdata/dbgsym-with-source-version/dbgsym-with-source-version_2021.01.tar.xz differ
diff --git a/deb/testdata/dbgsym-with-source-version/dbgsym-with-source-version_2021.01_amd64.buildinfo b/deb/testdata/dbgsym-with-source-version/dbgsym-with-source-version_2021.01_amd64.buildinfo
new file mode 100644
index 00000000..1772650c
--- /dev/null
+++ b/deb/testdata/dbgsym-with-source-version/dbgsym-with-source-version_2021.01_amd64.buildinfo
@@ -0,0 +1,182 @@
+Format: 1.0
+Source: dbgsym-with-source-version
+Binary: dbgsym-with-source-version
+Architecture: amd64 source
+Version: 2021.01
+Checksums-Md5:
+ d411f22d5ae7a68256faa2d02276da33 646 dbgsym-with-source-version_2021.01.dsc
+ 91adadcd5b04c89a6775e6be20d03705 2668 dbgsym-with-source-version-dbgsym_0.1+aptly2021.01_amd64.ddeb
+ 1e3c04499395851894fda69903b1c6ff 3520 dbgsym-with-source-version_0.1+aptly2021.01_amd64.deb
+Checksums-Sha1:
+ 07b21e2cf16c966695455a56343f653b0322d00c 646 dbgsym-with-source-version_2021.01.dsc
+ c8b0e5ef412749c60ada84f07b9a9abeb8a9b58f 2668 dbgsym-with-source-version-dbgsym_0.1+aptly2021.01_amd64.ddeb
+ e46bb74e4ca1a8b6013b145d95db90264b873225 3520 dbgsym-with-source-version_0.1+aptly2021.01_amd64.deb
+Checksums-Sha256:
+ f1d6a9ab1b73d8ed798ebac79b472433712cc964fa73c60fc4b82e828a279070 646 dbgsym-with-source-version_2021.01.dsc
+ afba2bf24c4978de82d49dc196ee26ed678ef54386fa4f1982f70aec985ccc02 2668 dbgsym-with-source-version-dbgsym_0.1+aptly2021.01_amd64.ddeb
+ 7834699e4f3f27ed7cb8776e6846e8367d6e18d0c589bb283900841a2a5bbcd5 3520 dbgsym-with-source-version_0.1+aptly2021.01_amd64.deb
+Build-Origin: Ubuntu
+Build-Architecture: amd64
+Build-Date: Fri, 08 Jan 2021 20:59:06 +0700
+Build-Tainted-By:
+ usr-local-has-libraries
+ usr-local-has-programs
+Installed-Build-Depends:
+ autoconf (= 2.69-11.1),
+ automake (= 1:1.16.1-4ubuntu6),
+ autopoint (= 0.19.8.1-10build1),
+ autotools-dev (= 20180224.1),
+ base-files (= 11ubuntu5.2),
+ base-passwd (= 3.5.47),
+ bash (= 5.0-6ubuntu1.1),
+ binutils (= 2.34-6ubuntu1),
+ binutils-common (= 2.34-6ubuntu1),
+ binutils-x86-64-linux-gnu (= 2.34-6ubuntu1),
+ bsdmainutils (= 11.1.2ubuntu3),
+ bsdutils (= 1:2.34-0.1ubuntu9.1),
+ build-essential (= 12.8ubuntu1.1),
+ bzip2 (= 1.0.8-2),
+ coreutils (= 8.30-3ubuntu2),
+ cpp (= 4:9.3.0-1ubuntu2),
+ cpp-7 (= 7.5.0-6ubuntu2),
+ cpp-9 (= 9.3.0-17ubuntu1~20.04),
+ dash (= 0.5.10.2-6),
+ debconf (= 1.5.73),
+ debhelper (= 12.10ubuntu1),
+ debianutils (= 4.9.1),
+ dh-autoreconf (= 19),
+ dh-strip-nondeterminism (= 1.7.0-1),
+ diffutils (= 1:3.7-3),
+ dpkg (= 1.19.7ubuntu3),
+ dpkg-dev (= 1.19.7ubuntu3),
+ dwz (= 0.13-5),
+ file (= 1:5.38-4),
+ findutils (= 4.7.0-1ubuntu1),
+ g++ (= 4:9.3.0-1ubuntu2),
+ g++-9 (= 9.3.0-17ubuntu1~20.04),
+ gawk (= 1:5.0.1+dfsg-1),
+ gcc (= 4:9.3.0-1ubuntu2),
+ gcc-10-base (= 10.2.0-5ubuntu1~20.04),
+ gcc-7 (= 7.5.0-6ubuntu2),
+ gcc-7-base (= 7.5.0-6ubuntu2),
+ gcc-8-base (= 8.4.0-3ubuntu2),
+ gcc-9 (= 9.3.0-17ubuntu1~20.04),
+ gcc-9-base (= 9.3.0-17ubuntu1~20.04),
+ gettext (= 0.19.8.1-10build1),
+ gettext-base (= 0.19.8.1-10build1),
+ grep (= 3.4-1),
+ groff-base (= 1.22.4-4build1),
+ gzip (= 1.10-0ubuntu4),
+ hostname (= 3.23),
+ init-system-helpers (= 1.57),
+ install-info (= 6.7.0.dfsg.2-5),
+ intltool-debian (= 0.35.0+20060710.5),
+ libacl1 (= 2.2.53-6),
+ libarchive-zip-perl (= 1.67-2),
+ libasan4 (= 7.5.0-6ubuntu2),
+ libasan5 (= 9.3.0-17ubuntu1~20.04),
+ libatomic1 (= 10.2.0-5ubuntu1~20.04),
+ libattr1 (= 1:2.4.48-5),
+ libaudit-common (= 1:2.8.5-2ubuntu6),
+ libaudit1 (= 1:2.8.5-2ubuntu6),
+ libbinutils (= 2.34-6ubuntu1),
+ libblkid1 (= 2.34-0.1ubuntu9.1),
+ libbsd0 (= 0.10.0-1),
+ libbz2-1.0 (= 1.0.8-2),
+ libc-bin (= 2.31-0ubuntu9.1),
+ libc-dev-bin (= 2.31-0ubuntu9.1),
+ libc6 (= 2.31-0ubuntu9.1),
+ libc6-dev (= 2.31-0ubuntu9.1),
+ libcap-ng0 (= 0.7.9-2.1build1),
+ libcc1-0 (= 10.2.0-5ubuntu1~20.04),
+ libcilkrts5 (= 7.5.0-6ubuntu2),
+ libcroco3 (= 0.6.13-1),
+ libcrypt-dev (= 1:4.4.10-10ubuntu4),
+ libcrypt1 (= 1:4.4.10-10ubuntu4),
+ libctf-nobfd0 (= 2.34-6ubuntu1),
+ libctf0 (= 2.34-6ubuntu1),
+ libdb5.3 (= 5.3.28+dfsg1-0.6ubuntu2),
+ libdebconfclient0 (= 0.251ubuntu1),
+ libdebhelper-perl (= 12.10ubuntu1),
+ libdpkg-perl (= 1.19.7ubuntu3),
+ libelf1 (= 0.176-1.1build1),
+ libffi7 (= 3.3-4),
+ libfile-stripnondeterminism-perl (= 1.7.0-1),
+ libgcc-7-dev (= 7.5.0-6ubuntu2),
+ libgcc-9-dev (= 9.3.0-17ubuntu1~20.04),
+ libgcc-s1 (= 10.2.0-5ubuntu1~20.04),
+ libgcrypt20 (= 1.8.5-5ubuntu1),
+ libgdbm-compat4 (= 1.18.1-5),
+ libgdbm6 (= 1.18.1-5),
+ libglib2.0-0 (= 2.64.3-1~ubuntu20.04.1),
+ libgmp10 (= 2:6.2.0+dfsg-4),
+ libgomp1 (= 10.2.0-5ubuntu1~20.04),
+ libgpg-error0 (= 1.37-1),
+ libicu66 (= 66.1-2ubuntu2),
+ libisl22 (= 0.22.1-1),
+ libitm1 (= 10.2.0-5ubuntu1~20.04),
+ liblsan0 (= 10.2.0-5ubuntu1~20.04),
+ liblz4-1 (= 1.9.2-2),
+ liblzma5 (= 5.2.4-1ubuntu1),
+ libmagic-mgc (= 1:5.38-4),
+ libmagic1 (= 1:5.38-4),
+ libmount1 (= 2.34-0.1ubuntu9.1),
+ libmpc3 (= 1.1.0-1),
+ libmpfr6 (= 4.0.2-1),
+ libmpx2 (= 8.4.0-3ubuntu2),
+ libpam-modules (= 1.3.1-5ubuntu4.1),
+ libpam-modules-bin (= 1.3.1-5ubuntu4.1),
+ libpam-runtime (= 1.3.1-5ubuntu4.1),
+ libpam0g (= 1.3.1-5ubuntu4.1),
+ libpcre2-8-0 (= 10.34-7),
+ libpcre3 (= 2:8.39-12build1),
+ libperl5.30 (= 5.30.0-9ubuntu0.2),
+ libpipeline1 (= 1.5.2-2build1),
+ libquadmath0 (= 10.2.0-5ubuntu1~20.04),
+ libreadline8 (= 8.0-4),
+ libseccomp2 (= 2.4.3-1ubuntu3.20.04.3),
+ libselinux1 (= 3.0-1build2),
+ libsigsegv2 (= 2.12-2),
+ libsmartcols1 (= 2.34-0.1ubuntu9.1),
+ libstdc++-9-dev (= 9.3.0-17ubuntu1~20.04),
+ libstdc++6 (= 10.2.0-5ubuntu1~20.04),
+ libsub-override-perl (= 0.09-2),
+ libsystemd0 (= 245.4-4ubuntu3.3),
+ libtinfo6 (= 6.2-0ubuntu2),
+ libtool (= 2.4.6-14),
+ libtsan0 (= 10.2.0-5ubuntu1~20.04),
+ libubsan0 (= 7.5.0-6ubuntu2),
+ libubsan1 (= 10.2.0-5ubuntu1~20.04),
+ libuchardet0 (= 0.0.6-3build1),
+ libudev1 (= 245.4-4ubuntu3.3),
+ libunistring2 (= 0.9.10-2),
+ libuuid1 (= 2.34-0.1ubuntu9.1),
+ libxml2 (= 2.9.10+dfsg-5),
+ libzstd1 (= 1.4.4+dfsg-3),
+ linux-libc-dev (= 5.4.0-60.67),
+ login (= 1:4.8.1-1ubuntu5.20.04),
+ lsb-base (= 11.1.0ubuntu2),
+ m4 (= 1.4.18-4),
+ make (= 4.2.1-1.2),
+ man-db (= 2.9.1-1),
+ mawk (= 1.3.4.20200120-2),
+ ncurses-base (= 6.2-0ubuntu2),
+ ncurses-bin (= 6.2-0ubuntu2),
+ patch (= 2.7.6-6),
+ perl (= 5.30.0-9ubuntu0.2),
+ perl-base (= 5.30.0-9ubuntu0.2),
+ perl-modules-5.30 (= 5.30.0-9ubuntu0.2),
+ po-debconf (= 1.0.21),
+ readline-common (= 8.0-4),
+ sed (= 4.7-1),
+ sensible-utils (= 0.0.12+nmu1),
+ sysvinit-utils (= 2.96-2.1ubuntu1),
+ tar (= 1.30+dfsg-7),
+ tzdata (= 2020f-0ubuntu0.20.04),
+ util-linux (= 2.34-0.1ubuntu9.1),
+ xz-utils (= 5.2.4-1ubuntu1),
+ zlib1g (= 1:1.2.11.dfsg-2ubuntu1.2)
+Environment:
+ DEB_BUILD_OPTIONS="parallel=4"
+ LANG="th_TH.UTF-8"
+ SOURCE_DATE_EPOCH="1610111766"
diff --git a/deb/testdata/dbgsym-with-source-version/dbgsym-with-source-version_2021.01_amd64.changes b/deb/testdata/dbgsym-with-source-version/dbgsym-with-source-version_2021.01_amd64.changes
new file mode 100644
index 00000000..e0933a59
--- /dev/null
+++ b/deb/testdata/dbgsym-with-source-version/dbgsym-with-source-version_2021.01_amd64.changes
@@ -0,0 +1,34 @@
+Format: 1.8
+Date: Fri, 08 Jan 2021 20:16:06 +0700
+Source: dbgsym-with-source-version
+Binary: dbgsym-with-source-version
+Architecture: source amd64
+Version: 2021.01
+Distribution: unstable
+Urgency: medium
+Maintainer: Ratchanan Srirattanamet
+Changed-By: Ratchanan Srirattanamet
+Description:
+ dbgsym-with-source-version - Test Aptly importing dbgsym with versioned Source field
+Changes:
+ dbgsym-with-source-version (2021.01) unstable; urgency=medium
+ .
+ * Initial Release.
+Checksums-Sha1:
+ 07b21e2cf16c966695455a56343f653b0322d00c 646 dbgsym-with-source-version_2021.01.dsc
+ 626c500200d9837b475f61a2563a647e785a9ccf 1664 dbgsym-with-source-version_2021.01.tar.xz
+ c8b0e5ef412749c60ada84f07b9a9abeb8a9b58f 2668 dbgsym-with-source-version-dbgsym_0.1+aptly2021.01_amd64.ddeb
+ e46bb74e4ca1a8b6013b145d95db90264b873225 3520 dbgsym-with-source-version_0.1+aptly2021.01_amd64.deb
+ d95a8d9cf1e7c0e68a99ad901ed88e8ac2f22fc0 6155 dbgsym-with-source-version_2021.01_amd64.buildinfo
+Checksums-Sha256:
+ f1d6a9ab1b73d8ed798ebac79b472433712cc964fa73c60fc4b82e828a279070 646 dbgsym-with-source-version_2021.01.dsc
+ 00e1915300d0996056867b66d2cfc608e3839febb9feb596fe940f99ced632b0 1664 dbgsym-with-source-version_2021.01.tar.xz
+ afba2bf24c4978de82d49dc196ee26ed678ef54386fa4f1982f70aec985ccc02 2668 dbgsym-with-source-version-dbgsym_0.1+aptly2021.01_amd64.ddeb
+ 7834699e4f3f27ed7cb8776e6846e8367d6e18d0c589bb283900841a2a5bbcd5 3520 dbgsym-with-source-version_0.1+aptly2021.01_amd64.deb
+ 763abc57edbe79e2a7cfc6665bcf63b2c58d8a3d04fb27d7247f0272e21032e1 6155 dbgsym-with-source-version_2021.01_amd64.buildinfo
+Files:
+ d411f22d5ae7a68256faa2d02276da33 646 unknown optional dbgsym-with-source-version_2021.01.dsc
+ 5f50d8d87421226d33536471d294140e 1664 unknown optional dbgsym-with-source-version_2021.01.tar.xz
+ 91adadcd5b04c89a6775e6be20d03705 2668 debug optional dbgsym-with-source-version-dbgsym_0.1+aptly2021.01_amd64.ddeb
+ 1e3c04499395851894fda69903b1c6ff 3520 unknown optional dbgsym-with-source-version_0.1+aptly2021.01_amd64.deb
+ 62d96c0271d499d9c848ec66fc888f6d 6155 unknown optional dbgsym-with-source-version_2021.01_amd64.buildinfo
diff --git a/deb/version.go b/deb/version.go
index 059439bf..8be9f131 100644
--- a/deb/version.go
+++ b/deb/version.go
@@ -236,6 +236,17 @@ func ParseDependencyVariants(variants string) (l []Dependency, err error) {
return
}
+// ParseDependencyArch parses the dependency name in format "pkg:any" into name and architecture
+func ParseDependencyArch(d *Dependency) {
+ if strings.ContainsRune(d.Pkg, ':') {
+ parts := strings.SplitN(d.Pkg, ":", 2)
+ d.Pkg, d.Architecture = parts[0], parts[1]
+ if d.Architecture == "any" {
+ d.Architecture = ""
+ }
+ }
+}
+
// ParseDependency parses dependency in format "pkg (>= 1.35) [arch]" into parts
func ParseDependency(dep string) (d Dependency, err error) {
if strings.HasSuffix(dep, "}") {
@@ -252,6 +263,7 @@ func ParseDependency(dep string) (d Dependency, err error) {
if !strings.HasSuffix(dep, ")") {
d.Pkg = strings.TrimSpace(dep)
d.Relation = VersionDontCare
+ ParseDependencyArch(&d)
return
}
@@ -262,13 +274,7 @@ func ParseDependency(dep string) (d Dependency, err error) {
}
d.Pkg = strings.TrimSpace(dep[0:i])
- if strings.ContainsRune(d.Pkg, ':') {
- parts := strings.SplitN(d.Pkg, ":", 2)
- d.Pkg, d.Architecture = parts[0], parts[1]
- if d.Architecture == "any" {
- d.Architecture = ""
- }
- }
+ ParseDependencyArch(&d)
rel := ""
if dep[i+1] == '>' || dep[i+1] == '<' || dep[i+1] == '=' {
diff --git a/deb/version_test.go b/deb/version_test.go
index 32ebbb85..7dbcb145 100644
--- a/deb/version_test.go
+++ b/deb/version_test.go
@@ -98,6 +98,8 @@ func (s *VersionSuite) TestCompareVersions(c *C) {
c.Check(CompareVersions("1.0-133-avc", "1.1"), Equals, -1)
c.Check(CompareVersions("1.0-133-avc", "1.0"), Equals, 1)
+
+ c.Check(CompareVersions("5.2.0.3", "5.2.0.283"), Equals, -1)
}
func (s *VersionSuite) TestParseDependency(c *C) {
@@ -232,4 +234,8 @@ func (s *VersionSuite) TestDependencyString(c *C) {
d, _ = ParseDependency("dpkg")
d.Architecture = "i386"
c.Check(d.String(), Equals, "dpkg [i386]")
+
+ d, _ = ParseDependency("dpkg:any")
+ c.Check(d.Pkg, Equals, "dpkg")
+ c.Check(d.Architecture, Equals, "")
}
diff --git a/files/README.md b/files/README.md
new file mode 100644
index 00000000..4a5b6421
--- /dev/null
+++ b/files/README.md
@@ -0,0 +1,98 @@
+## Downloaded packages
+
+### SHA-256
+
+For each uploaded _Debian_ package a [SHA-256](https://en.wikipedia.org/wiki/SHA-2) checksum is computed.
+This checksum is used to create a file tree where each package will reside, with following hierarchy.
+
+#### Directory and sub-directories structure
+
+ - 1st and 2nd characters of SHA-256 checksum as sub-directory of **rootDir**/pool directory.
+ - 3rd and 4th characters of SHA-256 checksum as sub-directory of the former
+
+ex:
+
+ sha256sum **476e**0cdac6bc757dd2b78bacc1325323b09c45ecb41d4562deec2a1c7c148405 my-package_1.2.3_all.deb
+
+```bash
+${rootDir}/pool # rootDir defined in aptly.conf
+└── 47
+ └── 6e
+```
+
+#### Filename
+
+The following items are concatenated to form the filename under which package is stored.
+ - 5th to the 31st characters of SHA-256 checksum
+ - "\_" (undescore)
+ - filename of uploaded _Debian_ as defined in [Debian package file names](https://www.debian.org/doc/manuals/debian-reference/ch02.en.html#_debian_package_file_names)
+
+ex:
+
+ sha256sum 476e**0cdac6bc757dd2b78bacc13253**23b09c45ecb41d4562deec2a1c7c148405 **my-package_1.2.3_all.deb**
+
+```
+ 0cdac6bc757dd2b78bacc13253_my-package_1.2.3_all.deb
+```
+
+### MD5
+
+For each uploaded _Debian_ package a [MD5](https://en.wikipedia.org/wiki/MD5) checksum is computed.
+This checksum is used to create a file tree where each package will reside, with following hierarchy
+
+**Note:** [MD5](https://en.wikipedia.org/wiki/MD5) is only legacy layout. Its support is limited to
+ 'read' files from the pool, it never puts files this way for new package files.
+
+#### Directory and sub-directories structure
+
+ - 1st and 2nd characters of MD5 checksum as sub-directory name of **rootDir**/pool directory
+ - 3rd and 4th characters of MD5 chacksum as sub-directory name of the former
+
+ex:
+
+ md5sum **feea**3c0c3e823615bf2d417b052a96b4 my-package_1.2.3_all.deb
+
+
+```bash
+${rootDir}/pool # rootDir defined in aptly.conf
+└── fe
+ └── ea
+```
+
+#### Filename
+
+Uploaded _Debian_ is stored as-is and not renamed.
+
+### Example
+
+```bash
+${rootDir}/pool # rootDir defined in aptly.conf
+├── 00
+│ ├── 25
+│ │ └── yet_another_package-0.6.0_all.deb
+│ ├── 60
+│ ├── 97
+│ │ └── 80ced73165f92fea490f2561a7c4_my-package_0.0.1_all.deb
+│ ├── 6e
+│ │ └── 0cdac6bc757dd2b78bacc13253_my-package_1.2.3_all.deb # sha256sum 476e0cdac6bc757dd2b78bacc1325323b09c45ecb41d4562deec2a1c7c148405
+│ └── db
+│ └── yet_another_package-0.5.8_all.deb # md5sum 00db7ada61aa28a6931267f1714cbb15
+...
+├── 2a
+│ ├── 10
+│ │ └── yet_another_package-0.5.9_all.deb
+│ ├── 64
+│ │ └── 80ced73165f92fea490f2561a7c4_my-other-package_2.3.2_amd64.deb
+│ ├── 4c
+│ ├── 5c
+│ │ └── yet_another_package-0.6.1_all.deb
+│ ├── 77
+│ ├── b5
+│ │ └── 4b2eb349236cf5c4af7eca68a43b_my-package_0.2.0_amd64.deb
+...
+└── ff
+ ├── 4c
+ ├── 5a
+ │ └── 8868dd8661bbe25c51bdd9b2d25c_my-package_0.2.0_amd64.deb
+ └── dc
+```
diff --git a/files/package_pool.go b/files/package_pool.go
index 8aa3a084..8b1e8b25 100644
--- a/files/package_pool.go
+++ b/files/package_pool.go
@@ -94,7 +94,7 @@ func (pool *PackagePool) FilepathList(progress aptly.Progress) ([]string, error)
}
if progress != nil {
- progress.InitBar(int64(len(dirs)), false)
+ progress.InitBar(int64(len(dirs)), false, aptly.BarGeneralBuildFileList)
defer progress.ShutdownBar()
}
diff --git a/files/package_pool_test.go b/files/package_pool_test.go
index c05770ff..3f65ed2c 100644
--- a/files/package_pool_test.go
+++ b/files/package_pool_test.go
@@ -91,6 +91,19 @@ func (s *PackagePoolSuite) TestRemove(c *C) {
c.Check(list, DeepEquals, []string{"ae/0c/1.deb", "bd/0a/3.deb", "bd/0b/4.deb"})
}
+func isSameDevice(s *PackagePoolSuite) bool {
+ poolPath, _ := s.pool.buildPoolPath(filepath.Base(s.debFile), &s.checksum)
+ fullPoolPath := filepath.Join(s.pool.rootPath, poolPath)
+ poolDir := filepath.Dir(fullPoolPath)
+ poolDirInfo, _ := os.Stat(poolDir)
+
+ source, _ := os.Open(s.debFile)
+ sourceInfo, _ := source.Stat()
+ defer source.Close()
+
+ return poolDirInfo.Sys().(*syscall.Stat_t).Dev == sourceInfo.Sys().(*syscall.Stat_t).Dev
+}
+
func (s *PackagePoolSuite) TestImportOk(c *C) {
path, err := s.pool.Import(s.debFile, filepath.Base(s.debFile), &s.checksum, false, s.cs)
c.Check(err, IsNil)
@@ -103,7 +116,12 @@ func (s *PackagePoolSuite) TestImportOk(c *C) {
info, err := s.pool.Stat(path)
c.Assert(err, IsNil)
c.Check(info.Size(), Equals, int64(2738))
- c.Check(info.Sys().(*syscall.Stat_t).Nlink > 1, Equals, true)
+ // /tmp may be on different devices, so hardlinks are not used
+ if isSameDevice(s) {
+ c.Check(info.Sys().(*syscall.Stat_t).Nlink > 1, Equals, true)
+ } else {
+ c.Check(info.Sys().(*syscall.Stat_t).Nlink, Equals, uint64(1))
+ }
// import as different name
path, err = s.pool.Import(s.debFile, "some.deb", &s.checksum, false, s.cs)
@@ -326,7 +344,11 @@ func (s *PackagePoolSuite) TestLink(c *C) {
info, err := os.Stat(dstPath)
c.Assert(err, IsNil)
c.Check(info.Size(), Equals, int64(2738))
- c.Check(info.Sys().(*syscall.Stat_t).Nlink > 2, Equals, true)
+ if isSameDevice(s) {
+ c.Check(info.Sys().(*syscall.Stat_t).Nlink > 2, Equals, true)
+ } else {
+ c.Check(info.Sys().(*syscall.Stat_t).Nlink, Equals, uint64(2))
+ }
}
func (s *PackagePoolSuite) TestSymlink(c *C) {
@@ -340,7 +362,11 @@ func (s *PackagePoolSuite) TestSymlink(c *C) {
info, err := os.Stat(dstPath)
c.Assert(err, IsNil)
c.Check(info.Size(), Equals, int64(2738))
- c.Check(info.Sys().(*syscall.Stat_t).Nlink > 2, Equals, true)
+ if isSameDevice(s) {
+ c.Check(info.Sys().(*syscall.Stat_t).Nlink > 2, Equals, true)
+ } else {
+ c.Check(info.Sys().(*syscall.Stat_t).Nlink, Equals, uint64(1))
+ }
info, err = os.Lstat(dstPath)
c.Assert(err, IsNil)
diff --git a/go.mod b/go.mod
new file mode 100644
index 00000000..4c2e85ad
--- /dev/null
+++ b/go.mod
@@ -0,0 +1,48 @@
+module github.com/aptly-dev/aptly
+
+go 1.15
+
+require (
+ github.com/AlekSi/pointer v1.0.0
+ github.com/Azure/azure-storage-blob-go v0.15.0
+ github.com/DisposaBoy/JsonConfigReader v0.0.0-20130112093355-33a99fdf1d5e
+ github.com/awalterschulze/gographviz v0.0.0-20160912181450-761fd5fbb34e
+ github.com/aws/aws-sdk-go v1.25.0
+ github.com/cavaliergopher/grab/v3 v3.0.1
+ github.com/cheggaaa/pb v1.0.10
+ github.com/fatih/color v1.7.0 // indirect
+ github.com/gin-gonic/gin v1.7.7
+ github.com/go-playground/validator/v10 v10.10.1 // indirect
+ github.com/h2non/filetype v1.0.5
+ github.com/jlaffaye/ftp v0.0.0-20180404123514-2403248fa8cc // indirect
+ github.com/kjk/lzma v0.0.0-20161016003348-3fd93898850d
+ github.com/klauspost/compress v1.13.6
+ github.com/klauspost/pgzip v1.2.5
+ github.com/mattn/go-colorable v0.1.2 // indirect
+ github.com/mattn/go-isatty v0.0.14 // indirect
+ github.com/mattn/go-runewidth v0.0.2 // indirect
+ github.com/mattn/go-shellwords v1.0.2
+ github.com/mkrautz/goar v0.0.0-20150919110319-282caa8bd9da
+ github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f
+ github.com/ncw/swift v1.0.30
+ github.com/pborman/uuid v0.0.0-20180122190007-c65b2f87fee3
+ github.com/pkg/errors v0.9.1
+ github.com/prometheus/client_golang v1.12.1
+ github.com/smartystreets/gunit v1.0.4 // indirect
+ github.com/smira/commander v0.0.0-20140515201010-f408b00e68d5
+ github.com/smira/flag v0.0.0-20170926215700-695ea5e84e76
+ github.com/smira/go-aws-auth v0.0.0-20180731211914-8b73995fd8d1
+ github.com/smira/go-ftp-protocol v0.0.0-20140829150050-066b75c2b70d
+ github.com/smira/go-xz v0.0.0-20150414201226-0c531f070014
+ github.com/syndtr/goleveldb v1.0.1-0.20190923125748-758128399b1d
+ github.com/ugorji/go/codec v1.2.7
+ github.com/wsxiaoys/terminal v0.0.0-20160513160801-0940f3fc43a0
+ golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29
+ golang.org/x/sys v0.0.0-20220405052023-b1e9470b6e64
+ golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1
+ golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11
+ google.golang.org/protobuf v1.28.0 // indirect
+ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c
+ gopkg.in/cheggaaa/pb.v1 v1.0.28 // indirect
+ gopkg.in/h2non/filetype.v1 v1.0.1 // indirect
+)
diff --git a/go.sum b/go.sum
new file mode 100644
index 00000000..370f953d
--- /dev/null
+++ b/go.sum
@@ -0,0 +1,641 @@
+cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
+cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
+cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
+cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
+cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
+cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
+cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
+cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
+cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=
+cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk=
+cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=
+cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=
+cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
+cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
+cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
+cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
+cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
+cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
+cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
+cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
+cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
+cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
+cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
+cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
+cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=
+cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
+cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
+cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
+cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
+cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
+dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
+github.com/AlekSi/pointer v1.0.0 h1:KWCWzsvFxNLcmM5XmiqHsGTTsuwZMsLFwWF9Y+//bNE=
+github.com/AlekSi/pointer v1.0.0/go.mod h1:1kjywbfcPFCmncIxtk6fIEub6LKrfMz3gc5QKVOSOA8=
+github.com/Azure/azure-pipeline-go v0.2.3 h1:7U9HBg1JFK3jHl5qmo4CTZKFTVgMwdFHMVtCdfBE21U=
+github.com/Azure/azure-pipeline-go v0.2.3/go.mod h1:x841ezTBIMG6O3lAcl8ATHnsOPVl2bqk7S3ta6S6u4k=
+github.com/Azure/azure-storage-blob-go v0.15.0 h1:rXtgp8tN1p29GvpGgfJetavIG0V7OgcSXPpwp3tx6qk=
+github.com/Azure/azure-storage-blob-go v0.15.0/go.mod h1:vbjsVbX0dlxnRc4FFMPsS9BsJWPcne7GB7onqlPvz58=
+github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs=
+github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
+github.com/Azure/go-autorest/autorest/adal v0.9.13 h1:Mp5hbtOePIzM8pJVRa3YLrWWmZtoxRXqUEzCfJt3+/Q=
+github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M=
+github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw=
+github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74=
+github.com/Azure/go-autorest/autorest/mocks v0.4.1 h1:K0laFcLE6VLTOwNgSxaGbUcLPuGXlNkbVvq4cW4nIHk=
+github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k=
+github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+ZtXWSmf4Tg=
+github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8=
+github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo=
+github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU=
+github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
+github.com/DisposaBoy/JsonConfigReader v0.0.0-20130112093355-33a99fdf1d5e h1:rv5qJCfIzQhhefHp8MO98hoGRI3mdps2iiGA3o4nm8A=
+github.com/DisposaBoy/JsonConfigReader v0.0.0-20130112093355-33a99fdf1d5e/go.mod h1:GCzqZQHydohgVLSIqRKZeTt8IGb1Y4NaFfim3H40uUI=
+github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
+github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
+github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
+github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
+github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
+github.com/awalterschulze/gographviz v0.0.0-20160912181450-761fd5fbb34e h1:24jix3mqu421BBMWbVBOl5pDw0f9ncazW10kaMywzHQ=
+github.com/awalterschulze/gographviz v0.0.0-20160912181450-761fd5fbb34e/go.mod h1:GEV5wmg4YquNw7v1kkyoX9etIk8yVmXj+AkDHuuETHs=
+github.com/aws/aws-sdk-go v1.25.0 h1:MyXUdCesJLBvSSKYcaKeeEwxNUwUpG6/uqVYeH/Zzfo=
+github.com/aws/aws-sdk-go v1.25.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
+github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
+github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
+github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/cavaliergopher/grab/v3 v3.0.1 h1:4z7TkBfmPjmLAAmkkAZNX/6QJ1nNFdv3SdIHXju0Fr4=
+github.com/cavaliergopher/grab/v3 v3.0.1/go.mod h1:1U/KNnD+Ft6JJiYoYBAimKH2XrYptb8Kl3DFGmsjpq4=
+github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE=
+github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/cheggaaa/pb v1.0.10 h1:CNg2511WECXZ7Ja6jjyz9CMBpQOrMuP5+H5zfjgVi/Q=
+github.com/cheggaaa/pb v1.0.10/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s=
+github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
+github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
+github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
+github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
+github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
+github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
+github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys=
+github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
+github.com/form3tech-oss/jwt-go v3.2.2+incompatible h1:TcekIExNqud5crz4xD2pavyTgWiPvpYe4Xau31I0PRk=
+github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
+github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
+github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
+github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
+github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
+github.com/gin-gonic/gin v1.7.7 h1:3DoBmSbJbZAWqXJC3SLjAPfutPJJRN1U5pALB7EeTTs=
+github.com/gin-gonic/gin v1.7.7/go.mod h1:axIBovoeJpVj8S3BwE0uPMTeReE4+AfFtqpqaZ1qq1U=
+github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
+github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
+github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
+github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
+github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
+github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
+github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
+github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
+github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
+github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
+github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
+github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
+github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU=
+github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs=
+github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
+github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho=
+github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA=
+github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4=
+github.com/go-playground/validator/v10 v10.10.1 h1:uA0+amWMiglNZKZ9FJRKUAe9U3RX91eVn1JYXMWt7ig=
+github.com/go-playground/validator/v10 v10.10.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU=
+github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
+github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
+github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
+github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
+github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
+github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
+github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
+github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
+github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
+github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
+github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
+github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
+github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
+github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
+github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
+github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
+github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
+github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
+github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4=
+github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
+github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
+github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
+github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
+github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
+github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
+github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
+github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
+github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
+github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
+github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
+github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
+github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
+github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
+github.com/google/uuid v1.2.0 h1:qJYtXnJRWmpe7m/3XlyhrsLrEURqHRM2kxzoxXqyUDs=
+github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
+github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
+github.com/h2non/filetype v1.0.5 h1:Esu2EFM5vrzNynnGQpj0nxhCkzVQh2HRY7AXUh/dyJM=
+github.com/h2non/filetype v1.0.5/go.mod h1:isekKqOuhMj+s/7r3rIeTErIRy4Rub5uBWHfvMusLMU=
+github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
+github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
+github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
+github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
+github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
+github.com/jlaffaye/ftp v0.0.0-20180404123514-2403248fa8cc h1:lWFup/SOhwcpvRJIFqx/WQis5U4SrOSyWfSqvfdF09w=
+github.com/jlaffaye/ftp v0.0.0-20180404123514-2403248fa8cc/go.mod h1:lli8NYPQOFy3O++YmYbqVgOcQ1JPCwdOy+5zSjKJ9qY=
+github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM=
+github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
+github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
+github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
+github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
+github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
+github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
+github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
+github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
+github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
+github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
+github.com/kjk/lzma v0.0.0-20161016003348-3fd93898850d h1:RnWZeH8N8KXfbwMTex/KKMYMj0FJRCF6tQubUuQ02GM=
+github.com/kjk/lzma v0.0.0-20161016003348-3fd93898850d/go.mod h1:phT/jsRPBAEqjAibu1BurrabCBNTYiVI+zbmyCZJY6Q=
+github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc=
+github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
+github.com/klauspost/pgzip v1.2.5 h1:qnWYvvKqedOF2ulHpMG72XQol4ILEJ8k2wwRl/Km8oE=
+github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs=
+github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
+github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
+github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
+github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
+github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w=
+github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
+github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU=
+github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
+github.com/mattn/go-ieproxy v0.0.1 h1:qiyop7gCflfhwCzGyeT0gro3sF9AIg9HU98JORTkqfI=
+github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E=
+github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
+github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
+github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
+github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
+github.com/mattn/go-runewidth v0.0.2 h1:UnlwIPBGaTZfPQ6T1IGzPI0EkYAQmT9fAEJ/poFC63o=
+github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
+github.com/mattn/go-shellwords v1.0.2 h1:5FJ7APbaUYdUTxxP/XXltfy/mICrGqugUEClfnj+D3Y=
+github.com/mattn/go-shellwords v1.0.2/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o=
+github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
+github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
+github.com/mkrautz/goar v0.0.0-20150919110319-282caa8bd9da h1:Iu5QFXIMK/YrHJ0NgUnK0rqYTTyb0ldt/rqNenAj39U=
+github.com/mkrautz/goar v0.0.0-20150919110319-282caa8bd9da/go.mod h1:NfnmoBY0gGkr3/NmI+DP/UXbZvOCurCUYAzOdYJjlOc=
+github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
+github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
+github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
+github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
+github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus=
+github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
+github.com/ncw/swift v1.0.30 h1:CrRYmUc+mFGIvBiS5JIA4sIdURfDpJ4CGmpmR9mQAZ0=
+github.com/ncw/swift v1.0.30/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM=
+github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs=
+github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU=
+github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
+github.com/pborman/uuid v0.0.0-20180122190007-c65b2f87fee3 h1:9J0mOv1rXIBlRjQCiAGyx9C3dZZh5uIa3HU0oTV8v1E=
+github.com/pborman/uuid v0.0.0-20180122190007-c65b2f87fee3/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34=
+github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
+github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
+github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
+github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
+github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
+github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
+github.com/prometheus/client_golang v1.12.1 h1:ZiaPsmm9uiBeaSMRznKsCDNtPCS0T3JVDGF+06gjBzk=
+github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY=
+github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
+github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M=
+github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
+github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
+github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc=
+github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4=
+github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
+github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
+github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
+github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
+github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
+github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU=
+github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
+github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
+github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
+github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8=
+github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
+github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
+github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
+github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
+github.com/smartystreets/assertions v1.0.1 h1:voD4ITNjPL5jjBfgR/r8fPIIBrliWrWHeiJApdr3r4w=
+github.com/smartystreets/assertions v1.0.1/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM=
+github.com/smartystreets/gunit v1.0.4 h1:tpTjnuH7MLlqhoD21vRoMZbMIi5GmBsAJDFyF67GhZA=
+github.com/smartystreets/gunit v1.0.4/go.mod h1:EH5qMBab2UclzXUcpR8b93eHsIlp9u+pDQIRp5DZNzQ=
+github.com/smira/commander v0.0.0-20140515201010-f408b00e68d5 h1:jLFwP6SDEUHmb6QSu5n2FHseWzMio1ou1FV9p7W6p7I=
+github.com/smira/commander v0.0.0-20140515201010-f408b00e68d5/go.mod h1:XTQy55hw5s3pxmC42m7X0/b+9naXQ1rGN9Of6BGIZmU=
+github.com/smira/flag v0.0.0-20170926215700-695ea5e84e76 h1:OM075OkN4x9IB1mbzkzaKaJjFxx8Mfss8Z3E1LHwawQ=
+github.com/smira/flag v0.0.0-20170926215700-695ea5e84e76/go.mod h1:KQ5bP0mZypI2qXa4Wjk+r7B6Wt/0L8/DvJwpbR1UWg4=
+github.com/smira/go-aws-auth v0.0.0-20180731211914-8b73995fd8d1 h1:VPv+J50mFyP42/GzYhGuT4MJK8w/dlLt4jkoO5yhJRs=
+github.com/smira/go-aws-auth v0.0.0-20180731211914-8b73995fd8d1/go.mod h1:KKhbssKjyR//TUP31t3ksE2b6oeAw328JzwmFJnzRCw=
+github.com/smira/go-ftp-protocol v0.0.0-20140829150050-066b75c2b70d h1:rvtR4+9N2LWPo0UHe6/aHvWpqD9Dhf10P2bfGFht74g=
+github.com/smira/go-ftp-protocol v0.0.0-20140829150050-066b75c2b70d/go.mod h1:Jm7yHrROA5tC42gyJ5EwiR8EWp0PUy0qOc4sE7Y8Uzo=
+github.com/smira/go-xz v0.0.0-20150414201226-0c531f070014 h1:tne8XW3soRDJn4DIiqBc4jw+DPashtFMTSC9G0pC3ug=
+github.com/smira/go-xz v0.0.0-20150414201226-0c531f070014/go.mod h1:smSuTvETRIkX95VAIWBdKoGJuUxif7NT7FgbkpVqOiA=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
+github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
+github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/syndtr/goleveldb v1.0.1-0.20190923125748-758128399b1d h1:gZZadD8H+fF+n9CmNhYL1Y0dJB+kLOmKd7FbPJLeGHs=
+github.com/syndtr/goleveldb v1.0.1-0.20190923125748-758128399b1d/go.mod h1:9OrXJhf154huy1nPWmuSrkgjPUtUNhA+Zmy+6AESzuA=
+github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
+github.com/ugorji/go v1.2.7 h1:qYhyWUUd6WbiM+C6JZAUkIJt/1WrjzNHY9+KCIjVqTo=
+github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M=
+github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
+github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0=
+github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY=
+github.com/wsxiaoys/terminal v0.0.0-20160513160801-0940f3fc43a0 h1:3UeQBvD0TFrlVjOeLOBz+CPAI8dnbqNSVwUwRrkp7vQ=
+github.com/wsxiaoys/terminal v0.0.0-20160513160801-0940f3fc43a0/go.mod h1:IXCdmsXIht47RaVFLEdVnh1t+pgYtTAhQGj73kz+2DM=
+github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
+go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
+go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
+go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
+go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
+golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
+golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29 h1:tkVvjkPTB7pnW3jnid7kNyAMPVWllTNOf/qKDze4p9o=
+golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
+golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
+golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
+golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
+golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
+golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
+golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
+golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
+golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
+golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
+golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
+golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
+golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
+golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
+golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
+golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
+golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
+golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
+golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
+golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
+golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
+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/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
+golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
+golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
+golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
+golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 h1:CIJ76btIcR3eFI5EgSo6k1qKw9KJexJuRLI9G7Hp5wE=
+golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
+golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/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=
+golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/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-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220405052023-b1e9470b6e64 h1:D1v9ucDTYBtbz5vNuBbAhIMAGhQhJ6Ym5ah3maMVNX4=
+golang.org/x/sys v0.0.0-20220405052023-b1e9470b6e64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E=
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
+golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
+golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11 h1:GZokNIeuVkl3aZHJchRrr13WCsols02MLUcz1U9is6M=
+golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
+golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
+golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
+golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
+golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
+golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
+golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
+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=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
+google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
+google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
+google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
+google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
+google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
+google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
+google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
+google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
+google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
+google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
+google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
+google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
+google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
+google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=
+google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=
+google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
+google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
+google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
+google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
+google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
+google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
+google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
+google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
+google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=
+google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=
+google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
+google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
+google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
+google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
+google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
+google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
+google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
+google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=
+google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
+google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
+google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
+google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
+google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
+google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
+google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
+google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
+google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
+google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
+google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
+google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw=
+google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
+gopkg.in/cheggaaa/pb.v1 v1.0.28 h1:n1tBJnnK2r7g9OW2btFH91V92STTUevLXYFb8gy9EMk=
+gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw=
+gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
+gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
+gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
+gopkg.in/h2non/filetype.v1 v1.0.1 h1:JMZLYHwIsvWGh+6UcU//eA1aiM8g4SaZm3lJweIR5Ew=
+gopkg.in/h2non/filetype.v1 v1.0.1/go.mod h1:M0yem4rwSX5lLVrkEuRRp2/NinFMD5vgJ4DlAhZcfNo=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
+gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
+gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
+gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
+honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
+honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
+rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
+rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
+rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
diff --git a/http/compression.go b/http/compression.go
index eaec2d5f..e3ea7e0c 100644
--- a/http/compression.go
+++ b/http/compression.go
@@ -39,7 +39,7 @@ var compressionMethods = []struct {
// DownloadTryCompression tries to download from URL .bz2, .gz and raw extension until
// it finds existing file.
-func DownloadTryCompression(ctx context.Context, downloader aptly.Downloader, baseURL *url.URL, path string, expectedChecksums map[string]utils.ChecksumInfo, ignoreMismatch bool, maxTries int) (io.Reader, *os.File, error) {
+func DownloadTryCompression(ctx context.Context, downloader aptly.Downloader, baseURL *url.URL, path string, expectedChecksums map[string]utils.ChecksumInfo, ignoreMismatch bool) (io.Reader, *os.File, error) {
var err error
for _, method := range compressionMethods {
@@ -63,7 +63,7 @@ func DownloadTryCompression(ctx context.Context, downloader aptly.Downloader, ba
if foundChecksum {
expected := expectedChecksums[bestSuffix]
- file, err = DownloadTempWithChecksum(ctx, downloader, tryURL.String(), &expected, ignoreMismatch, maxTries)
+ file, err = DownloadTempWithChecksum(ctx, downloader, tryURL.String(), &expected, ignoreMismatch)
} else {
if !ignoreMismatch {
continue
diff --git a/http/compression_test.go b/http/compression_test.go
index 9ce46f76..6d0dd86a 100644
--- a/http/compression_test.go
+++ b/http/compression_test.go
@@ -44,7 +44,7 @@ func (s *CompressionSuite) TestDownloadTryCompression(c *C) {
buf = make([]byte, 4)
d := NewFakeDownloader()
d.ExpectResponse("http://example.com/file.bz2", bzipData)
- r, file, err := DownloadTryCompression(s.ctx, d, s.baseURL, "file", expectedChecksums, false, 1)
+ r, file, err := DownloadTryCompression(s.ctx, d, s.baseURL, "file", expectedChecksums, false)
c.Assert(err, IsNil)
defer file.Close()
io.ReadFull(r, buf)
@@ -56,7 +56,7 @@ func (s *CompressionSuite) TestDownloadTryCompression(c *C) {
d = NewFakeDownloader()
d.ExpectError("http://example.com/file.bz2", &Error{Code: 404})
d.ExpectResponse("http://example.com/file.gz", gzipData)
- r, file, err = DownloadTryCompression(s.ctx, d, s.baseURL, "file", expectedChecksums, false, 1)
+ r, file, err = DownloadTryCompression(s.ctx, d, s.baseURL, "file", expectedChecksums, false)
c.Assert(err, IsNil)
defer file.Close()
io.ReadFull(r, buf)
@@ -69,7 +69,7 @@ func (s *CompressionSuite) TestDownloadTryCompression(c *C) {
d.ExpectError("http://example.com/file.bz2", &Error{Code: 404})
d.ExpectError("http://example.com/file.gz", &Error{Code: 404})
d.ExpectResponse("http://example.com/file.xz", xzData)
- r, file, err = DownloadTryCompression(s.ctx, d, s.baseURL, "file", expectedChecksums, false, 1)
+ r, file, err = DownloadTryCompression(s.ctx, d, s.baseURL, "file", expectedChecksums, false)
c.Assert(err, IsNil)
defer file.Close()
io.ReadFull(r, buf)
@@ -83,7 +83,7 @@ func (s *CompressionSuite) TestDownloadTryCompression(c *C) {
d.ExpectError("http://example.com/file.gz", &Error{Code: 404})
d.ExpectError("http://example.com/file.xz", &Error{Code: 404})
d.ExpectResponse("http://example.com/file", rawData)
- r, file, err = DownloadTryCompression(s.ctx, d, s.baseURL, "file", expectedChecksums, false, 1)
+ r, file, err = DownloadTryCompression(s.ctx, d, s.baseURL, "file", expectedChecksums, false)
c.Assert(err, IsNil)
defer file.Close()
io.ReadFull(r, buf)
@@ -94,7 +94,7 @@ func (s *CompressionSuite) TestDownloadTryCompression(c *C) {
d = NewFakeDownloader()
d.ExpectError("http://example.com/file.bz2", &Error{Code: 404})
d.ExpectResponse("http://example.com/file.gz", "x")
- _, _, err = DownloadTryCompression(s.ctx, d, s.baseURL, "file", nil, true, 1)
+ _, _, err = DownloadTryCompression(s.ctx, d, s.baseURL, "file", nil, true)
c.Assert(err, ErrorMatches, "unexpected EOF")
c.Assert(d.Empty(), Equals, true)
}
@@ -112,7 +112,7 @@ func (s *CompressionSuite) TestDownloadTryCompressionLongestSuffix(c *C) {
buf = make([]byte, 4)
d := NewFakeDownloader()
d.ExpectResponse("http://example.com/subdir/file.bz2", bzipData)
- r, file, err := DownloadTryCompression(s.ctx, d, s.baseURL, "subdir/file", expectedChecksums, false, 1)
+ r, file, err := DownloadTryCompression(s.ctx, d, s.baseURL, "subdir/file", expectedChecksums, false)
c.Assert(err, IsNil)
defer file.Close()
io.ReadFull(r, buf)
@@ -122,7 +122,7 @@ func (s *CompressionSuite) TestDownloadTryCompressionLongestSuffix(c *C) {
func (s *CompressionSuite) TestDownloadTryCompressionErrors(c *C) {
d := NewFakeDownloader()
- _, _, err := DownloadTryCompression(s.ctx, d, s.baseURL, "file", nil, true, 1)
+ _, _, err := DownloadTryCompression(s.ctx, d, s.baseURL, "file", nil, true)
c.Assert(err, ErrorMatches, "unexpected request.*")
d = NewFakeDownloader()
@@ -130,7 +130,7 @@ func (s *CompressionSuite) TestDownloadTryCompressionErrors(c *C) {
d.ExpectError("http://example.com/file.gz", &Error{Code: 404})
d.ExpectError("http://example.com/file.xz", &Error{Code: 404})
d.ExpectError("http://example.com/file", errors.New("403"))
- _, _, err = DownloadTryCompression(s.ctx, d, s.baseURL, "file", nil, true, 1)
+ _, _, err = DownloadTryCompression(s.ctx, d, s.baseURL, "file", nil, true)
c.Assert(err, ErrorMatches, "403")
d = NewFakeDownloader()
@@ -144,6 +144,6 @@ func (s *CompressionSuite) TestDownloadTryCompressionErrors(c *C) {
"file.xz": {Size: 7},
"file": {Size: 7},
}
- _, _, err = DownloadTryCompression(s.ctx, d, s.baseURL, "file", expectedChecksums, false, 1)
+ _, _, err = DownloadTryCompression(s.ctx, d, s.baseURL, "file", expectedChecksums, false)
c.Assert(err, ErrorMatches, "checksums don't match.*")
}
diff --git a/http/download.go b/http/download.go
index cdc8ff3d..3c2a1ebd 100644
--- a/http/download.go
+++ b/http/download.go
@@ -4,8 +4,10 @@ import (
"context"
"fmt"
"io"
+ "io/ioutil"
"net"
"net/http"
+ "net/url"
"os"
"path/filepath"
"strings"
@@ -28,12 +30,13 @@ var (
type downloaderImpl struct {
progress aptly.Progress
aggWriter io.Writer
+ maxTries int
client *http.Client
}
// NewDownloader creates new instance of Downloader which specified number
// of threads and download limit in bytes/sec
-func NewDownloader(downLimit int64, progress aptly.Progress) aptly.Downloader {
+func NewDownloader(downLimit int64, maxTries int, progress aptly.Progress) aptly.Downloader {
transport := http.Transport{}
transport.Proxy = http.DefaultTransport.(*http.Transport).Proxy
transport.ResponseHeaderTimeout = 30 * time.Second
@@ -45,20 +48,35 @@ func NewDownloader(downLimit int64, progress aptly.Progress) aptly.Downloader {
downloader := &downloaderImpl{
progress: progress,
+ maxTries: maxTries,
client: &http.Client{
Transport: &transport,
},
}
+ progressWriter := io.Writer(progress)
+ if progress == nil {
+ progressWriter = ioutil.Discard
+ }
+
+ downloader.client.CheckRedirect = downloader.checkRedirect
if downLimit > 0 {
- downloader.aggWriter = flowrate.NewWriter(progress, downLimit)
+ downloader.aggWriter = flowrate.NewWriter(progressWriter, downLimit)
} else {
- downloader.aggWriter = progress
+ downloader.aggWriter = progressWriter
}
return downloader
}
+func (downloader *downloaderImpl) checkRedirect(req *http.Request, via []*http.Request) error {
+ if downloader.progress != nil {
+ downloader.progress.Printf("Following redirect to %s...\n", req.URL)
+ }
+
+ return nil
+}
+
// GetProgress returns Progress object
func (downloader *downloaderImpl) GetProgress() aptly.Progress {
return downloader.progress
@@ -71,7 +89,19 @@ func (downloader *downloaderImpl) GetLength(ctx context.Context, url string) (in
return -1, err
}
- resp, err := downloader.client.Do(req)
+ var resp *http.Response
+
+ maxTries := downloader.maxTries
+ for maxTries > 0 {
+ resp, err = downloader.client.Do(req)
+ if err != nil && retryableError(err) {
+ maxTries--
+ } else {
+ // stop retrying
+ break
+ }
+ }
+
if err != nil {
return -1, errors.Wrap(err, url)
}
@@ -81,6 +111,10 @@ func (downloader *downloaderImpl) GetLength(ctx context.Context, url string) (in
}
if resp.ContentLength < 0 {
+ // an existing, but zero-length file can be reported with ContentLength -1
+ if resp.StatusCode == 200 && resp.ContentLength == -1 {
+ return 0, nil
+ }
return -1, fmt.Errorf("could not determine length of %s", url)
}
@@ -89,10 +123,25 @@ func (downloader *downloaderImpl) GetLength(ctx context.Context, url string) (in
// Download starts new download task
func (downloader *downloaderImpl) Download(ctx context.Context, url string, destination string) error {
- return downloader.DownloadWithChecksum(ctx, url, destination, nil, false, 1)
+ return downloader.DownloadWithChecksum(ctx, url, destination, nil, false)
}
func retryableError(err error) bool {
+ // unwrap errors.Wrap
+ err = errors.Cause(err)
+
+ // unwrap *url.Error
+ if wrapped, ok := err.(*url.Error); ok {
+ err = wrapped.Err
+ }
+
+ switch err {
+ case io.EOF:
+ return true
+ case io.ErrUnexpectedEOF:
+ return true
+ }
+
switch err.(type) {
case *net.OpError:
return true
@@ -101,11 +150,13 @@ func retryableError(err error) bool {
case net.Error:
return true
}
- return false
+ // Note: make all errors retryable
+ return true
}
func (downloader *downloaderImpl) newRequest(ctx context.Context, method, url string) (*http.Request, error) {
req, err := http.NewRequest(method, url, nil)
+
if err != nil {
return nil, errors.Wrap(err, url)
}
@@ -123,27 +174,57 @@ func (downloader *downloaderImpl) newRequest(ctx context.Context, method, url st
// DownloadWithChecksum starts new download task with checksum verification
func (downloader *downloaderImpl) DownloadWithChecksum(ctx context.Context, url string, destination string,
- expected *utils.ChecksumInfo, ignoreMismatch bool, maxTries int) error {
+ expected *utils.ChecksumInfo, ignoreMismatch bool) error {
if downloader.progress != nil {
downloader.progress.Printf("Downloading %s...\n", url)
+ defer downloader.progress.Flush()
}
req, err := downloader.newRequest(ctx, "GET", url)
var temppath string
+ maxTries := downloader.maxTries
+ const delayMax = time.Duration(5 * time.Minute)
+ delay := time.Duration(1 * time.Second)
+ const delayMultiplier = 2
for maxTries > 0 {
temppath, err = downloader.download(req, url, destination, expected, ignoreMismatch)
- if err != nil && retryableError(err) {
- maxTries--
+ if err != nil {
+ if retryableError(err) {
+ if downloader.progress != nil {
+ downloader.progress.Printf("Error downloading %s: %s retrying...\n", url, err)
+ }
+ maxTries--
+ time.Sleep(delay)
+ // Sleep exponentially at the next retry, but no longer than delayMax
+ delay *= delayMultiplier
+ if delay > delayMax {
+ delay = delayMax
+ }
+ } else {
+ if downloader.progress != nil {
+ downloader.progress.Printf("Error downloading %s: %s cannot retry...\n", url, err)
+ }
+ break
+ }
} else {
// get out of the loop
+ if downloader.progress != nil {
+ downloader.progress.Printf("Success downloading %s\n", url)
+ }
break
}
+ if downloader.progress != nil {
+ downloader.progress.Printf("Retrying %d %s...\n", maxTries, url)
+ }
}
// still an error after retrying, giving up
if err != nil {
+ if downloader.progress != nil {
+ downloader.progress.Printf("Giving up on %s...\n", url)
+ }
return err
}
@@ -183,7 +264,11 @@ func (downloader *downloaderImpl) download(req *http.Request, url, destination s
defer outfile.Close()
checksummer := utils.NewChecksumWriter()
- writers := []io.Writer{outfile, downloader.aggWriter}
+ writers := []io.Writer{outfile}
+
+ if downloader.progress != nil {
+ writers = append(writers, downloader.progress)
+ }
if expected != nil {
writers = append(writers, checksummer)
@@ -214,7 +299,9 @@ func (downloader *downloaderImpl) download(req *http.Request, url, destination s
if err != nil {
if ignoreMismatch {
- downloader.progress.Printf("WARNING: %s\n", err.Error())
+ if downloader.progress != nil {
+ downloader.progress.Printf("WARNING: %s\n", err.Error())
+ }
} else {
os.Remove(temppath)
return "", err
diff --git a/http/download_go17.go b/http/download_go17.go
index a69a210c..5d67f1d8 100644
--- a/http/download_go17.go
+++ b/http/download_go17.go
@@ -1,3 +1,4 @@
+//go:build go1.7
// +build go1.7
package http
diff --git a/http/download_test.go b/http/download_test.go
index fc2581c7..7f89a777 100644
--- a/http/download_test.go
+++ b/http/download_test.go
@@ -7,6 +7,7 @@ import (
"net"
"net/http"
"os"
+ "os/user"
"github.com/aptly-dev/aptly/aptly"
"github.com/aptly-dev/aptly/console"
@@ -45,7 +46,7 @@ func (s *DownloaderSuiteBase) SetUpTest(c *C) {
s.progress = console.NewProgress()
s.progress.Start()
- s.d = NewDownloader(0, s.progress)
+ s.d = NewDownloader(0, 1, s.progress)
s.ctx = context.Background()
}
@@ -78,32 +79,32 @@ func (s *DownloaderSuite) TestDownloadOK(c *C) {
}
func (s *DownloaderSuite) TestDownloadWithChecksum(c *C) {
- c.Assert(s.d.DownloadWithChecksum(s.ctx, s.url+"/test", s.tempfile.Name(), &utils.ChecksumInfo{}, false, 1),
+ c.Assert(s.d.DownloadWithChecksum(s.ctx, s.url+"/test", s.tempfile.Name(), &utils.ChecksumInfo{}, false),
ErrorMatches, ".*size check mismatch 12 != 0")
- c.Assert(s.d.DownloadWithChecksum(s.ctx, s.url+"/test", s.tempfile.Name(), &utils.ChecksumInfo{Size: 12, MD5: "abcdef"}, false, 1),
+ c.Assert(s.d.DownloadWithChecksum(s.ctx, s.url+"/test", s.tempfile.Name(), &utils.ChecksumInfo{Size: 12, MD5: "abcdef"}, false),
ErrorMatches, ".*md5 hash mismatch \"a1acb0fe91c7db45ec4d775192ec5738\" != \"abcdef\"")
- c.Assert(s.d.DownloadWithChecksum(s.ctx, s.url+"/test", s.tempfile.Name(), &utils.ChecksumInfo{Size: 12, MD5: "abcdef"}, true, 1),
+ c.Assert(s.d.DownloadWithChecksum(s.ctx, s.url+"/test", s.tempfile.Name(), &utils.ChecksumInfo{Size: 12, MD5: "abcdef"}, true),
IsNil)
- c.Assert(s.d.DownloadWithChecksum(s.ctx, s.url+"/test", s.tempfile.Name(), &utils.ChecksumInfo{Size: 12, MD5: "a1acb0fe91c7db45ec4d775192ec5738"}, false, 1),
+ c.Assert(s.d.DownloadWithChecksum(s.ctx, s.url+"/test", s.tempfile.Name(), &utils.ChecksumInfo{Size: 12, MD5: "a1acb0fe91c7db45ec4d775192ec5738"}, false),
IsNil)
- c.Assert(s.d.DownloadWithChecksum(s.ctx, s.url+"/test", s.tempfile.Name(), &utils.ChecksumInfo{Size: 12, MD5: "a1acb0fe91c7db45ec4d775192ec5738", SHA1: "abcdef"}, false, 1),
+ c.Assert(s.d.DownloadWithChecksum(s.ctx, s.url+"/test", s.tempfile.Name(), &utils.ChecksumInfo{Size: 12, MD5: "a1acb0fe91c7db45ec4d775192ec5738", SHA1: "abcdef"}, false),
ErrorMatches, ".*sha1 hash mismatch \"921893bae6ad6fd818401875d6779254ef0ff0ec\" != \"abcdef\"")
c.Assert(s.d.DownloadWithChecksum(s.ctx, s.url+"/test", s.tempfile.Name(), &utils.ChecksumInfo{Size: 12, MD5: "a1acb0fe91c7db45ec4d775192ec5738",
- SHA1: "921893bae6ad6fd818401875d6779254ef0ff0ec"}, false, 1),
+ SHA1: "921893bae6ad6fd818401875d6779254ef0ff0ec"}, false),
IsNil)
c.Assert(s.d.DownloadWithChecksum(s.ctx, s.url+"/test", s.tempfile.Name(), &utils.ChecksumInfo{Size: 12, MD5: "a1acb0fe91c7db45ec4d775192ec5738",
- SHA1: "921893bae6ad6fd818401875d6779254ef0ff0ec", SHA256: "abcdef"}, false, 1),
+ SHA1: "921893bae6ad6fd818401875d6779254ef0ff0ec", SHA256: "abcdef"}, false),
ErrorMatches, ".*sha256 hash mismatch \"b3c92ee1246176ed35f6e8463cd49074f29442f5bbffc3f8591cde1dcc849dac\" != \"abcdef\"")
checksums := utils.ChecksumInfo{Size: 12, MD5: "a1acb0fe91c7db45ec4d775192ec5738",
SHA1: "921893bae6ad6fd818401875d6779254ef0ff0ec", SHA256: "b3c92ee1246176ed35f6e8463cd49074f29442f5bbffc3f8591cde1dcc849dac"}
- c.Assert(s.d.DownloadWithChecksum(s.ctx, s.url+"/test", s.tempfile.Name(), &checksums, false, 1),
+ c.Assert(s.d.DownloadWithChecksum(s.ctx, s.url+"/test", s.tempfile.Name(), &checksums, false),
IsNil)
// download backfills missing checksums
c.Check(checksums.SHA512, Equals, "bac18bf4e564856369acc2ed57300fecba3a2c1af5ae8304021e4252488678feb18118466382ee4e1210fe1f065080210e453a80cfb37ccb8752af3269df160e")
@@ -115,13 +116,25 @@ func (s *DownloaderSuite) TestDownload404(c *C) {
}
func (s *DownloaderSuite) TestDownloadConnectError(c *C) {
- c.Assert(s.d.Download(s.ctx, "http://nosuch.localhost/", s.tempfile.Name()),
+ c.Assert(s.d.Download(s.ctx, "http://nosuch.host/", s.tempfile.Name()),
ErrorMatches, ".*no such host")
}
+func skipIfRoot(c *C) {
+ currentUser, err := user.Current()
+ if err != nil {
+ c.Skip("Unknown user")
+ }
+
+ if currentUser.Username == "root" {
+ c.Skip("Root user")
+ }
+}
+
func (s *DownloaderSuite) TestDownloadFileError(c *C) {
+ skipIfRoot(c)
c.Assert(s.d.Download(s.ctx, s.url+"/test", "/"),
- ErrorMatches, ".*permission denied")
+ ErrorMatches, ".*(permission denied|read-only file system)")
}
func (s *DownloaderSuite) TestGetLength(c *C) {
@@ -138,7 +151,7 @@ func (s *DownloaderSuite) TestGetLength404(c *C) {
}
func (s *DownloaderSuite) TestGetLengthConnectError(c *C) {
- _, err := s.d.GetLength(s.ctx, "http://nosuch.localhost/")
+ _, err := s.d.GetLength(s.ctx, "http://nosuch.host/")
c.Assert(err, ErrorMatches, ".*no such host")
}
diff --git a/http/fake.go b/http/fake.go
index 4026791a..2cbb72d6 100644
--- a/http/fake.go
+++ b/http/fake.go
@@ -89,7 +89,7 @@ func (f *FakeDownloader) getExpectedRequest(url string) (*expectedRequest, error
}
// DownloadWithChecksum performs fake download by matching against first expectation in the queue or any expectation, with cheksum verification
-func (f *FakeDownloader) DownloadWithChecksum(ctx context.Context, url string, filename string, expected *utils.ChecksumInfo, ignoreMismatch bool, maxTries int) error {
+func (f *FakeDownloader) DownloadWithChecksum(ctx context.Context, url string, filename string, expected *utils.ChecksumInfo, ignoreMismatch bool) error {
expectation, err := f.getExpectedRequest(url)
if err != nil {
return err
@@ -130,7 +130,7 @@ func (f *FakeDownloader) DownloadWithChecksum(ctx context.Context, url string, f
// Download performs fake download by matching against first expectation in the queue
func (f *FakeDownloader) Download(ctx context.Context, url string, filename string) error {
- return f.DownloadWithChecksum(ctx, url, filename, nil, false, 1)
+ return f.DownloadWithChecksum(ctx, url, filename, nil, false)
}
// GetProgress returns Progress object
diff --git a/http/grab.go b/http/grab.go
new file mode 100644
index 00000000..2d07521c
--- /dev/null
+++ b/http/grab.go
@@ -0,0 +1,173 @@
+package http
+
+import (
+ "context"
+ "crypto/md5"
+ "crypto/sha1"
+ "crypto/sha256"
+ "crypto/sha512"
+ "encoding/hex"
+ "fmt"
+ "net/http"
+ "time"
+
+ "golang.org/x/time/rate"
+
+ "github.com/aptly-dev/aptly/utils"
+ "github.com/cavaliergopher/grab/v3"
+ "github.com/pkg/errors"
+
+ "github.com/aptly-dev/aptly/aptly"
+)
+
+type GrabDownloader struct {
+ client *grab.Client
+ progress aptly.Progress
+ maxTries int
+ downLimit int64
+}
+
+// Check interface
+var (
+ _ aptly.Downloader = (*GrabDownloader)(nil)
+)
+
+// NewGrabDownloader creates new expected downloader
+func NewGrabDownloader(downLimit int64, maxTries int, progress aptly.Progress) *GrabDownloader {
+ client := grab.NewClient()
+ return &GrabDownloader{
+ client: client,
+ progress: progress,
+ maxTries: maxTries,
+ downLimit: downLimit,
+ }
+}
+
+func (d *GrabDownloader) Download(ctx context.Context, url string, destination string) error {
+ return d.DownloadWithChecksum(ctx, url, destination, nil, false)
+}
+
+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)
+ delay := time.Duration(1 * time.Second)
+ const delayMultiplier = 2
+ err := fmt.Errorf("No tries available")
+ for maxTries > 0 {
+ err = d.download(ctx, url, destination, expected, ignoreMismatch)
+ if err == nil {
+ // Success
+ break
+ }
+ d.log("Error downloading %s: %v\n", url, err)
+ if retryableError(err) {
+ maxTries--
+ d.log("Retrying download %s: %d\n", url, maxTries)
+ time.Sleep(delay)
+ } else {
+ // Can't retry
+ d.log("Cannot retry download %s\n", url)
+ break
+ }
+ }
+ return err
+}
+
+func (d *GrabDownloader) log(msg string, a ...interface{}) {
+ fmt.Printf(msg, a...)
+ if d.progress != nil {
+ d.progress.Printf(msg, a...)
+ }
+}
+
+func (d *GrabDownloader) maybeSetupChecksum(req *grab.Request, expected *utils.ChecksumInfo) error {
+ if expected == nil {
+ // Nothing to setup
+ return nil
+ }
+ if expected.MD5 != "" {
+ expectedHash, err := hex.DecodeString(expected.MD5)
+ if err != nil {
+ return err
+ }
+ req.SetChecksum(md5.New(), expectedHash, true)
+ } else if expected.SHA1 != "" {
+ expectedHash, err := hex.DecodeString(expected.SHA1)
+ if err != nil {
+ return err
+ }
+ req.SetChecksum(sha1.New(), expectedHash, true)
+ } else if expected.SHA256 != "" {
+ expectedHash, err := hex.DecodeString(expected.SHA256)
+ if err != nil {
+ return err
+ }
+ req.SetChecksum(sha256.New(), expectedHash, true)
+ } else if expected.SHA512 != "" {
+ expectedHash, err := hex.DecodeString(expected.SHA512)
+ if err != nil {
+ return err
+ }
+ req.SetChecksum(sha512.New(), expectedHash, true)
+ }
+ req.Size = expected.Size
+ return nil
+}
+
+func (d *GrabDownloader) download(ctx context.Context, url string, destination string, expected *utils.ChecksumInfo, ignoreMismatch bool) error {
+ // TODO clean up dest dir on permanent failure
+ d.log("Download %s -> %s\n", url, destination)
+
+ req, err := grab.NewRequest(destination, url)
+ if err != nil {
+ d.log("Error creating new request: %v\n", err)
+ return errors.Wrap(err, url)
+ }
+ if d.downLimit > 0 {
+ req.RateLimiter = rate.NewLimiter(rate.Limit(d.downLimit), int(d.downLimit))
+ }
+
+ d.maybeSetupChecksum(req, expected)
+ if err != nil {
+ d.log("Error setting up checksum: %v\n", err)
+ return errors.Wrap(err, url)
+ }
+
+ resp := d.client.Do(req)
+
+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)
+ return nil
+ }
+ return err
+}
+
+func (d *GrabDownloader) GetProgress() aptly.Progress {
+ return d.progress
+}
+
+func (d *GrabDownloader) GetLength(ctx context.Context, url string) (int64, error) {
+ resp, err := http.Head(url)
+ if err != nil {
+ return -1, err
+ }
+
+ if resp.StatusCode < 200 || resp.StatusCode > 299 {
+ return -1, &Error{Code: resp.StatusCode, URL: url}
+ }
+
+ if resp.ContentLength < 0 {
+ return -1, fmt.Errorf("could not determine length of %s", url)
+ }
+
+ return resp.ContentLength, nil
+}
diff --git a/http/grab_test.go b/http/grab_test.go
new file mode 100644
index 00000000..3980c453
--- /dev/null
+++ b/http/grab_test.go
@@ -0,0 +1,137 @@
+package http
+
+import (
+ "context"
+ "fmt"
+ "io/ioutil"
+ "net"
+ "net/http"
+ "os"
+
+ "github.com/aptly-dev/aptly/aptly"
+ "github.com/aptly-dev/aptly/console"
+ "github.com/aptly-dev/aptly/utils"
+
+ . "gopkg.in/check.v1"
+)
+
+type GrabDownloaderSuiteBase struct {
+ tempfile *os.File
+ l net.Listener
+ url string
+ ch chan struct{}
+ progress aptly.Progress
+ d aptly.Downloader
+ ctx context.Context
+}
+
+func (s *GrabDownloaderSuiteBase) SetUpTest(c *C) {
+ s.tempfile, _ = ioutil.TempFile(os.TempDir(), "aptly-test")
+ s.l, _ = net.ListenTCP("tcp4", &net.TCPAddr{IP: net.IPv4(127, 0, 0, 1)})
+ s.url = fmt.Sprintf("http://localhost:%d", s.l.Addr().(*net.TCPAddr).Port)
+
+ mux := http.NewServeMux()
+ mux.HandleFunc("/test", func(w http.ResponseWriter, r *http.Request) {
+ fmt.Fprintf(w, "Hello, %s", r.URL.Path)
+ })
+
+ s.ch = make(chan struct{})
+
+ go func() {
+ http.Serve(s.l, mux)
+ close(s.ch)
+ }()
+
+ s.progress = console.NewProgress()
+ s.progress.Start()
+
+ s.d = NewGrabDownloader(0, 1, s.progress)
+ s.ctx = context.Background()
+}
+
+func (s *GrabDownloaderSuiteBase) TearDownTest(c *C) {
+ s.progress.Shutdown()
+
+ s.l.Close()
+ <-s.ch
+
+ os.Remove(s.tempfile.Name())
+ s.tempfile.Close()
+}
+
+type GrabDownloaderSuite struct {
+ GrabDownloaderSuiteBase
+}
+
+var _ = Suite(&GrabDownloaderSuite{})
+
+func (s *GrabDownloaderSuite) SetUpTest(c *C) {
+ s.GrabDownloaderSuiteBase.SetUpTest(c)
+}
+
+func (s *GrabDownloaderSuite) TearDownTest(c *C) {
+ s.GrabDownloaderSuiteBase.TearDownTest(c)
+}
+
+func (s *GrabDownloaderSuite) TestDownloadOK(c *C) {
+ c.Assert(s.d.Download(s.ctx, s.url+"/test", s.tempfile.Name()), IsNil)
+}
+
+func (s *GrabDownloaderSuite) TestDownloadWithChecksum(c *C) {
+ c.Assert(s.d.DownloadWithChecksum(s.ctx, s.url+"/test", s.tempfile.Name(), &utils.ChecksumInfo{Size: 1}, false),
+ // ErrorMatches, ".*size check mismatch 12 != 1")
+ ErrorMatches, "bad content length")
+
+ c.Assert(s.d.DownloadWithChecksum(s.ctx, s.url+"/test", s.tempfile.Name(), &utils.ChecksumInfo{Size: 12, MD5: "abcdef"}, false),
+ ErrorMatches, "checksum mismatch")
+
+ c.Assert(s.d.DownloadWithChecksum(s.ctx, s.url+"/test", s.tempfile.Name(), &utils.ChecksumInfo{Size: 12, MD5: "abcdef"}, true),
+ IsNil)
+
+ c.Assert(s.d.DownloadWithChecksum(s.ctx, s.url+"/test", s.tempfile.Name(), &utils.ChecksumInfo{Size: 12, MD5: "a1acb0fe91c7db45ec4d775192ec5738"}, false),
+ IsNil)
+
+ c.Assert(s.d.DownloadWithChecksum(s.ctx, s.url+"/test", s.tempfile.Name(), &utils.ChecksumInfo{Size: 12, MD5: "a1acb0fe91c7db45ec4d775192ec5738",
+ SHA1: "921893bae6ad6fd818401875d6779254ef0ff0ec"}, false),
+ IsNil)
+
+ checksums := utils.ChecksumInfo{Size: 12, MD5: "a1acb0fe91c7db45ec4d775192ec5738",
+ SHA1: "921893bae6ad6fd818401875d6779254ef0ff0ec", SHA256: "b3c92ee1246176ed35f6e8463cd49074f29442f5bbffc3f8591cde1dcc849dac"}
+ c.Assert(s.d.DownloadWithChecksum(s.ctx, s.url+"/test", s.tempfile.Name(), &checksums, false),
+ IsNil)
+}
+
+func (s *GrabDownloaderSuite) TestDownload404(c *C) {
+ c.Assert(s.d.Download(s.ctx, s.url+"/doesntexist", s.tempfile.Name()),
+ ErrorMatches, ".* 404 .*")
+}
+
+func (s *GrabDownloaderSuite) TestDownloadConnectError(c *C) {
+ c.Assert(s.d.Download(s.ctx, "http://nosuch.host/", s.tempfile.Name()),
+ ErrorMatches, ".*no such host")
+}
+
+func (s *GrabDownloaderSuite) TestDownloadFileError(c *C) {
+ skipIfRoot(c)
+ c.Assert(s.d.Download(s.ctx, s.url+"/test", "/"),
+ ErrorMatches, ".*(permission denied|read-only file system)")
+}
+
+func (s *GrabDownloaderSuite) TestGetLength(c *C) {
+ size, err := s.d.GetLength(s.ctx, s.url+"/test")
+
+ c.Assert(err, IsNil)
+ c.Assert(size, Equals, int64(12))
+}
+
+func (s *GrabDownloaderSuite) TestGetLength404(c *C) {
+ _, err := s.d.GetLength(s.ctx, s.url+"/doesntexist")
+
+ c.Assert(err, ErrorMatches, "HTTP code 404.*")
+}
+
+func (s *GrabDownloaderSuite) TestGetLengthConnectError(c *C) {
+ _, err := s.d.GetLength(s.ctx, "http://nosuch.host/")
+
+ c.Assert(err, ErrorMatches, ".*no such host")
+}
diff --git a/http/temp.go b/http/temp.go
index 3ef95199..8e6a3fde 100644
--- a/http/temp.go
+++ b/http/temp.go
@@ -14,13 +14,13 @@ import (
//
// Temporary file would be already removed, so no need to cleanup
func DownloadTemp(ctx context.Context, downloader aptly.Downloader, url string) (*os.File, error) {
- return DownloadTempWithChecksum(ctx, downloader, url, nil, false, 1)
+ return DownloadTempWithChecksum(ctx, downloader, url, nil, false)
}
// DownloadTempWithChecksum is a DownloadTemp with checksum verification
//
// Temporary file would be already removed, so no need to cleanup
-func DownloadTempWithChecksum(ctx context.Context, downloader aptly.Downloader, url string, expected *utils.ChecksumInfo, ignoreMismatch bool, maxTries int) (*os.File, error) {
+func DownloadTempWithChecksum(ctx context.Context, downloader aptly.Downloader, url string, expected *utils.ChecksumInfo, ignoreMismatch bool) (*os.File, error) {
tempdir, err := ioutil.TempDir(os.TempDir(), "aptly")
if err != nil {
return nil, err
@@ -30,11 +30,11 @@ func DownloadTempWithChecksum(ctx context.Context, downloader aptly.Downloader,
tempfile := filepath.Join(tempdir, "buffer")
if expected != nil && downloader.GetProgress() != nil {
- downloader.GetProgress().InitBar(expected.Size, true)
+ downloader.GetProgress().InitBar(expected.Size, true, aptly.BarMirrorUpdateDownloadIndexes)
defer downloader.GetProgress().ShutdownBar()
}
- err = downloader.DownloadWithChecksum(ctx, url, tempfile, expected, ignoreMismatch, maxTries)
+ err = downloader.DownloadWithChecksum(ctx, url, tempfile, expected, ignoreMismatch)
if err != nil {
return nil, err
}
diff --git a/http/temp_test.go b/http/temp_test.go
index d4c3414e..715ed9c7 100644
--- a/http/temp_test.go
+++ b/http/temp_test.go
@@ -38,12 +38,12 @@ func (s *TempSuite) TestDownloadTemp(c *C) {
func (s *TempSuite) TestDownloadTempWithChecksum(c *C) {
f, err := DownloadTempWithChecksum(s.ctx, s.d, s.url+"/test", &utils.ChecksumInfo{Size: 12, MD5: "a1acb0fe91c7db45ec4d775192ec5738",
- SHA1: "921893bae6ad6fd818401875d6779254ef0ff0ec", SHA256: "b3c92ee1246176ed35f6e8463cd49074f29442f5bbffc3f8591cde1dcc849dac"}, false, 1)
+ SHA1: "921893bae6ad6fd818401875d6779254ef0ff0ec", SHA256: "b3c92ee1246176ed35f6e8463cd49074f29442f5bbffc3f8591cde1dcc849dac"}, false)
c.Assert(err, IsNil)
c.Assert(f.Close(), IsNil)
- _, err = DownloadTempWithChecksum(s.ctx, s.d, s.url+"/test", &utils.ChecksumInfo{Size: 13}, false, 1)
+ _, err = DownloadTempWithChecksum(s.ctx, s.d, s.url+"/test", &utils.ChecksumInfo{Size: 13}, false)
c.Assert(err, ErrorMatches, ".*size check mismatch 12 != 13")
}
diff --git a/man/Makefile b/man/Makefile
index db2927a6..de73526d 100644
--- a/man/Makefile
+++ b/man/Makefile
@@ -1,10 +1,12 @@
-all: prepare generate
+RUBYBINPATH=$(shell ruby -r rubygems -e 'puts Gem.user_dir')/bin
-prepare:
- gem install specific_install
- gem specific_install -l smira/ronn
+all: $(RUBYBINPATH)/ronn generate
+
+$(RUBYBINPATH)/ronn:
+ gem install --user-install specific_install
+ gem specific_install --user-install -l smira/ronn
generate:
- go run ../_man/gen.go
+ PATH=$(RUBYBINPATH):$(PATH) go run ../_man/gen.go
-.PHONY: prepare generate
+.PHONY: generate
diff --git a/man/aptly.1 b/man/aptly.1
index 03461f2c..4cc042a4 100644
--- a/man/aptly.1
+++ b/man/aptly.1
@@ -1,7 +1,7 @@
.\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
-.TH "APTLY" "1" "September 2018" "" ""
+.TH "APTLY" "1" "January 2022" "" ""
.
.SH "NAME"
\fBaptly\fR \- Debian repository management tool
@@ -38,6 +38,9 @@ Configuration file is stored in JSON format (default values shown below):
"rootDir": "$HOME/\.aptly",
"downloadConcurrency": 4,
"downloadSpeedLimit": 0,
+ "downloadRetries": 0,
+ "downloader": "default",
+ "databaseOpenAttempts": 10,
"architectures": [],
"dependencyFollowSuggests": false,
"dependencyFollowRecommends": false,
@@ -94,6 +97,15 @@ Configuration file is stored in JSON format (default values shown below):
"tenant": "",
"tenantid": ""
}
+ },
+ "AzurePublishEndpoints": {
+ "test": {
+ "accountName": "",
+ "accountKey": "",
+ "container": "repo",
+ "prefix": ""
+ "endpoint": "blob.core.windows.net"
+ }
}
}
.
@@ -114,7 +126,15 @@ is a number of parallel download threads to use when downloading packages
.
.TP
\fBdownloadSpeedLimit\fR
-limit in kbytes/sec on download speed while mirroring remote repositieis
+limit in kbytes/sec on download speed while mirroring remote repositories
+.
+.TP
+\fBdownloadRetries\fR
+number of retries for download attempts
+.
+.TP
+\fBdatabaseOpenAttempts\fR
+number of attempts to open DB if it\(cqs locked by other instance; could be overridden with option \fB\-db\-open\-attempts\fR
.
.TP
\fBarchitectures\fR
@@ -218,7 +238,7 @@ bucket name
.
.TP
\fBacl\fR
-(optional) assign ACL to published files (one of the canned ACLs in Amazon terminology)\. Useful values: \fBprivate\fR (default) or \fBpublic\-read\fR (public repository)\. Public repositories could be consumed by \fBapt\fR using HTTP endpoint (Amazon bucket should be configured for "website hosting"), for private repositories special apt S3 transport is required\.
+(optional) assign ACL to published files (one of the canned ACLs in Amazon terminology)\. Useful values: \fBprivate\fR (default), \fBpublic\-read\fR (public repository) or \fBnone\fR (don\(cqt set ACL)\. Public repositories could be consumed by \fBapt\fR using HTTP endpoint (Amazon bucket should be configured for "website hosting"), for private repositories special apt S3 transport is required\.
.
.TP
\fBawsAccessKeyID\fR, \fBawsSecretAccessKey\fR
@@ -509,6 +529,10 @@ $ aptly mirror list
Options:
.
.TP
+\-\fBjson\fR
+display list in JSON format
+.
+.TP
\-\fBraw\fR
display list in machine\-readable format
.
@@ -528,6 +552,10 @@ $ aptly mirror show wheezy\-main
Options:
.
.TP
+\-\fBjson\fR
+display record in JSON format
+.
+.TP
\-\fBwith\-packages\fR
show detailed list of packages and versions stored in the mirror
.
@@ -570,6 +598,10 @@ Options:
limit download speed (kbytes/sec)
.
.TP
+\-\fBdownloader\fR=default
+downloader to use (e\.g\. grab)
+.
+.TP
\-\fBforce\fR
force update mirror even if it is locked by another process
.
@@ -857,6 +889,10 @@ $ aptly repo list
Options:
.
.TP
+\-\fBjson\fR
+display list in JSON format
+.
+.TP
\-\fBraw\fR
display list in machine\-readable format
.
@@ -915,6 +951,10 @@ ex: $ aptly repo show testing
Options:
.
.TP
+\-\fBjson\fR
+display record in JSON format
+.
+.TP
\-\fBwith\-packages\fR
show list of packages
.
@@ -1043,6 +1083,10 @@ $ aptly snapshot list
Options:
.
.TP
+\-\fBjson\fR
+display list in JSON format
+.
+.TP
\-\fBraw\fR
display list in machine\-readable format
.
@@ -1073,6 +1117,10 @@ $ aptly snapshot show wheezy\-main
Options:
.
.TP
+\-\fBjson\fR
+display record in JSON format
+.
+.TP
\-\fBwith\-packages\fR
show list of packages
.
@@ -1273,7 +1321,7 @@ Example:
.
.nf
-$ aptly snapshot filter wheezy\-main wheezy\-required \(cqPriorioty (required)\(cq
+$ aptly snapshot filter wheezy\-main wheezy\-required \(cqPriority (required)\(cq
.
.fi
.
@@ -1339,6 +1387,10 @@ $ aptly publish list
Options:
.
.TP
+\-\fBjson\fR
+display list in JSON format
+.
+.TP
\-\fBraw\fR
display list in machine\-readable format
.
@@ -1426,11 +1478,11 @@ origin name to publish
.
.TP
\-\fBpassphrase\fR=
-GPG passhprase for the key (warning: could be insecure)
+GPG passphrase for the key (warning: could be insecure)
.
.TP
\-\fBpassphrase\-file\fR=
-GPG passhprase\-file for the key (warning: could be insecure)
+GPG passphrase\-file for the key (warning: could be insecure)
.
.TP
\-\fBsecret\-keyring\fR=
@@ -1444,6 +1496,10 @@ don\(cqt generate Contents indexes
\-\fBskip\-signing\fR
don\(cqt sign Release files with GPG
.
+.TP
+\-\fBsuite\fR=
+suite to publish (defaults to distribution)
+.
.SH "PUBLISH SNAPSHOT"
\fBaptly\fR \fBpublish\fR \fBsnapshot\fR \fIname\fR [[\fIendpoint\fR:]\fIprefix\fR]
.
@@ -1525,11 +1581,11 @@ overwrite origin name to publish
.
.TP
\-\fBpassphrase\fR=
-GPG passhprase for the key (warning: could be insecure)
+GPG passphrase for the key (warning: could be insecure)
.
.TP
\-\fBpassphrase\-file\fR=
-GPG passhprase\-file for the key (warning: could be insecure)
+GPG passphrase\-file for the key (warning: could be insecure)
.
.TP
\-\fBsecret\-keyring\fR=
@@ -1543,6 +1599,10 @@ don\(cqt generate Contents indexes
\-\fBskip\-signing\fR
don\(cqt sign Release files with GPG
.
+.TP
+\-\fBsuite\fR=
+suite to publish (defaults to distribution)
+.
.SH "UPDATE PUBLISHED REPOSITORY BY SWITCHING TO NEW SNAPSHOT"
\fBaptly\fR \fBpublish\fR \fBswitch\fR \fIdistribution\fR [[\fIendpoint\fR:]\fIprefix\fR] \fInew\-snapshot\fR
.
@@ -1603,11 +1663,11 @@ GPG keyring to use (instead of default)
.
.TP
\-\fBpassphrase\fR=
-GPG passhprase for the key (warning: could be insecure)
+GPG passphrase for the key (warning: could be insecure)
.
.TP
\-\fBpassphrase\-file\fR=
-GPG passhprase\-file for the key (warning: could be insecure)
+GPG passphrase\-file for the key (warning: could be insecure)
.
.TP
\-\fBsecret\-keyring\fR=
@@ -1668,11 +1728,11 @@ GPG keyring to use (instead of default)
.
.TP
\-\fBpassphrase\fR=
-GPG passhprase for the key (warning: could be insecure)
+GPG passphrase for the key (warning: could be insecure)
.
.TP
\-\fBpassphrase\-file\fR=
-GPG passhprase\-file for the key (warning: could be insecure)
+GPG passphrase\-file for the key (warning: could be insecure)
.
.TP
\-\fBsecret\-keyring\fR=
@@ -1709,6 +1769,13 @@ $ aptly publish show wheezy
.
.IP "" 0
.
+.P
+Options:
+.
+.TP
+\-\fBjson\fR
+display record in JSON format
+.
.SH "SEARCH FOR PACKAGES MATCHING QUERY"
\fBaptly\fR \fBpackage\fR \fBsearch\fR [\fIpackage\-query\fR]
.
@@ -2050,5 +2117,35 @@ Strajan Sebastian (https://github\.com/strajansebastian)
.IP "\[ci]" 4
Artem Smirnov (https://github\.com/urpylka)
.
+.IP "\[ci]" 4
+William Manley (https://github\.com/wmanley)
+.
+.IP "\[ci]" 4
+Shengjing Zhu (https://github\.com/zhsj)
+.
+.IP "\[ci]" 4
+Nabil Bendafi (https://github\.com/nabilbendafi)
+.
+.IP "\[ci]" 4
+Raphael Medaer (https://github\.com/rmedaer)
+.
+.IP "\[ci]" 4
+Raul Benencia (https://github\.com/rul)
+.
+.IP "\[ci]" 4
+Don Kuntz (https://github\.com/dkuntz2)
+.
+.IP "\[ci]" 4
+Joshua Colson (https://github\.com/freakinhippie)
+.
+.IP "\[ci]" 4
+Andre Roth (https://github\.com/neolynx)
+.
+.IP "\[ci]" 4
+Lorenzo Bolla (https://github\.com/lbolla)
+.
+.IP "\[ci]" 4
+Benj Fassbind (https://github\.com/randombenj)
+.
.IP "" 0
diff --git a/man/aptly.1.ronn.tmpl b/man/aptly.1.ronn.tmpl
index 29b0b44f..82cc1dfc 100644
--- a/man/aptly.1.ronn.tmpl
+++ b/man/aptly.1.ronn.tmpl
@@ -30,6 +30,9 @@ Configuration file is stored in JSON format (default values shown below):
"rootDir": "$HOME/.aptly",
"downloadConcurrency": 4,
"downloadSpeedLimit": 0,
+ "downloadRetries": 0,
+ "downloader": "default",
+ "databaseOpenAttempts": 10,
"architectures": [],
"dependencyFollowSuggests": false,
"dependencyFollowRecommends": false,
@@ -86,6 +89,15 @@ Configuration file is stored in JSON format (default values shown below):
"tenant": "",
"tenantid": ""
}
+ },
+ "AzurePublishEndpoints": {
+ "test": {
+ "accountName": "",
+ "accountKey": "",
+ "container": "repo",
+ "prefix": ""
+ "endpoint": "blob.core.windows.net"
+ }
}
}
@@ -99,7 +111,14 @@ Options:
is a number of parallel download threads to use when downloading packages
* `downloadSpeedLimit`:
- limit in kbytes/sec on download speed while mirroring remote repositieis
+ limit in kbytes/sec on download speed while mirroring remote repositories
+
+ * `downloadRetries`:
+ number of retries for download attempts
+
+ * `databaseOpenAttempts`:
+ number of attempts to open DB if it's locked by other instance; could be overridden with option
+ `-db-open-attempts`
* `architectures`:
is a list of architectures to process; if left empty defaults to all available architectures; could be
@@ -204,8 +223,8 @@ and associated settings:
no prefix (bucket root)
* `acl`:
(optional) assign ACL to published files (one of the canned ACLs in Amazon
- terminology). Useful values: `private` (default) or `public-read` (public
- repository). Public repositories could be consumed by `apt` using
+ terminology). Useful values: `private` (default), `public-read` (public
+ repository) or `none` (don't set ACL). Public repositories could be consumed by `apt` using
HTTP endpoint (Amazon bucket should be configured for "website hosting"),
for private repositories special apt S3 transport is required.
* `awsAccessKeyID`, `awsSecretAccessKey`:
@@ -428,7 +447,7 @@ to proxy all HTTP requests.
{{.Long}}
-{{if (allFlags .Flag | len) gt 0}}
+{{if allFlags .Flag | len}}
Options:
{{template "options" .}}
diff --git a/pgp/1.clearsigned b/pgp/1.clearsigned
index a16b729a..1f83933a 100644
--- a/pgp/1.clearsigned
+++ b/pgp/1.clearsigned
@@ -1,1822 +1,1312 @@
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
-Origin: Debian Backports
-Label: Debian Backports
-Suite: wheezy-backports
-Version:
-Codename: wheezy-backports
-Date: Fri, 02 Jun 2017 14:42:12 UTC
-Valid-Until: Fri, 09 Jun 2017 14:42:12 UTC
-NotAutomatic: yes
-ButAutomaticUpgrades: yes
-Architectures: amd64 armel armhf i386 ia64 kfreebsd-amd64 kfreebsd-i386 mips mipsel powerpc s390 s390x sparc
+Origin: Debian
+Label: Debian
+Suite: stable
+Version: 10.7
+Codename: buster
+Changelogs: http://metadata.ftp-master.debian.org/changelogs/@CHANGEPATH@_changelog
+Date: Sat, 05 Dec 2020 10:35:57 UTC
+Acquire-By-Hash: yes
+Architectures: amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64el s390x
Components: main contrib non-free
-Description: Backports for the Wheezy Distribution
+Description: Debian 10.7 Released 05 December 2020
MD5Sum:
- 21206181d8c101b785f51c82820acef7 118763 contrib/Contents-amd64
- 85c8255dffc0437f45d71e2e0d27401b 2704 contrib/Contents-amd64.diff/Index
- 01c60695e6465dc1a3f2035d7060de57 10211 contrib/Contents-amd64.gz
- 01d265b9bcabbad6969c560a69550890 72100 contrib/Contents-armel
- e03cee735398401fedf5b505fdc0cdbc 1720 contrib/Contents-armel.diff/Index
- 72d7c7425cd9f63839a435b39bb24e06 5965 contrib/Contents-armel.gz
- 4167ca89eeb054f691120044056826fc 79842 contrib/Contents-armhf
- f45e888e54ded9592481bafff7205d06 1720 contrib/Contents-armhf.diff/Index
- 1ea96a00a7a076e87a34bb79a832f82a 6899 contrib/Contents-armhf.gz
- f95b4601d08c3caf94381584885104e3 119085 contrib/Contents-i386
- f1dc4e7fc716744158c005ce42b42cc4 2704 contrib/Contents-i386.diff/Index
- 5855fb5e3001431569c1907c201242ef 10231 contrib/Contents-i386.gz
- 83d17f4a4b2cdb6a8ba5e91914039eaa 72100 contrib/Contents-ia64
- b2a399aa60fee08d4425bd528950dda9 1720 contrib/Contents-ia64.diff/Index
- 68c7d76f5dc7e4b29f0b789ae4724349 5937 contrib/Contents-ia64.gz
- 307195d9ac2b4d0b7cbefa3dcc638be0 72100 contrib/Contents-kfreebsd-amd64
- 685fb0b3f0922d9721358d52c8457641 1720 contrib/Contents-kfreebsd-amd64.diff/Index
- acc9830a3ee369949b4c3ab1d048dbbe 5938 contrib/Contents-kfreebsd-amd64.gz
- aac7310720ec1facdc9d2b36c776e155 72100 contrib/Contents-kfreebsd-i386
- a68afa49897820e0aac0e6d132a95394 1720 contrib/Contents-kfreebsd-i386.diff/Index
- 968c837d24af1013d29f3fcd98736dac 5961 contrib/Contents-kfreebsd-i386.gz
- 384900ef54f1434a179d7909f0e85a9f 72100 contrib/Contents-mips
- f993a554f0e0396c3fb8e18e94b69b38 1720 contrib/Contents-mips.diff/Index
- 29e50d04f0a1a71416c53eb994626420 5938 contrib/Contents-mips.gz
- 3d04b6fe8a213e1b6c9ec4aa6a4f8941 72100 contrib/Contents-mipsel
- ed39d4f7b1c5c54acf0724eda2f9f25f 1720 contrib/Contents-mipsel.diff/Index
- a229ecea20a8917d47c4089045213212 5936 contrib/Contents-mipsel.gz
- bf1ca5e429376aae7d39e0e110feb257 72100 contrib/Contents-powerpc
- 389c41d49f26b9d1d4c607c78c3f1f2c 1720 contrib/Contents-powerpc.diff/Index
- ba4ad04ef38b60878b2c752dd91a7692 5938 contrib/Contents-powerpc.gz
- eb0e770d0af5d589be28cdf84916f546 72100 contrib/Contents-s390
- 21c3e26b8ae24185a9a0bc75bc481f15 1720 contrib/Contents-s390.diff/Index
- c1057ea97080d6948594e49ca57dc483 5940 contrib/Contents-s390.gz
- 56267a6863aceedc62c5a61fd77403ba 72100 contrib/Contents-s390x
- 41ee31ddbdbf8445dd7592d7fb0da1d8 1720 contrib/Contents-s390x.diff/Index
- eef7ac6c7bb791dc7d1728bd725ce3f0 5932 contrib/Contents-s390x.gz
- 2fff5fc20450e2e52c7ae64e2c5b94c9 1174098 contrib/Contents-source
- c62c2cc191786bc40a45c71401393f00 3204 contrib/Contents-source.diff/Index
- dc37b268cb927bd1f15b708213fbd6b7 102051 contrib/Contents-source.gz
- 5b581575f7b79e911344b7e3b9c2977c 72100 contrib/Contents-sparc
- e7fe628625382aa61d8715cba997f087 1720 contrib/Contents-sparc.diff/Index
- b3a10372cd0690c21c0730638f293c35 5940 contrib/Contents-sparc.gz
+ 811507576f30ac20cbbf60727a806ec6 1356901 contrib/Contents-amd64
+ 71c6b30a40bc923c803520b2c1b1c22f 102635 contrib/Contents-amd64.gz
+ f15ab65dc63759004ec988abecd65e9e 1075476 contrib/Contents-arm64
+ ecc9200020eb4b13aa4813171eb9118d 84016 contrib/Contents-arm64.gz
+ 676e2e1aba5bac2737acba11457c1b80 1072443 contrib/Contents-armel
+ a797ac094917d1cf47a9225a7a9c3216 83766 contrib/Contents-armel.gz
+ 47bc4a4cd68ebc9481fab48e1f0b9003 1080904 contrib/Contents-armhf
+ 82aa19149bdf972afba35c8e9e77bb17 84798 contrib/Contents-armhf.gz
+ 09ad93c6e7ebeceeeefd1c50a564b346 1143948 contrib/Contents-i386
+ c69566c8c80c2c8a5457be46cd596a78 90478 contrib/Contents-i386.gz
+ 3c268400200bc805cafcc108c5188e44 1075642 contrib/Contents-mips
+ 527e948e4357fbb7bd57ff03a426dc5e 84001 contrib/Contents-mips.gz
+ f3fbd545d9c657455e13228df11d6b50 1074552 contrib/Contents-mips64el
+ 6cc26c41eb6f1c0984c8124c354e3937 83874 contrib/Contents-mips64el.gz
+ f0b81c783d3d131e7bc6e8650028cae6 1075659 contrib/Contents-mipsel
+ 99663ce5790eda2371ff7f7e0b24b588 84014 contrib/Contents-mipsel.gz
+ 39a1024465b566689892a9eb6d0a038e 1075941 contrib/Contents-ppc64el
+ 29c2c4753948b7aeee341635793ef22a 83977 contrib/Contents-ppc64el.gz
+ 1535a8917c15a80e810021ff1e2607c4 1072966 contrib/Contents-s390x
+ 16e48dca693f5f0a7dd57cf5c4eb7251 83555 contrib/Contents-s390x.gz
+ 92a4ddb55c7c33ef2c84a0ab1ac22170 4560575 contrib/Contents-source
+ ae9f65c0c8d8a5f4de6e846e84e73f4b 373646 contrib/Contents-source.gz
d41d8cd98f00b204e9800998ecf8427e 0 contrib/Contents-udeb-amd64
4a4dd3598707603b3f76a2378a4504aa 20 contrib/Contents-udeb-amd64.gz
+ d41d8cd98f00b204e9800998ecf8427e 0 contrib/Contents-udeb-arm64
+ 4a4dd3598707603b3f76a2378a4504aa 20 contrib/Contents-udeb-arm64.gz
d41d8cd98f00b204e9800998ecf8427e 0 contrib/Contents-udeb-armel
4a4dd3598707603b3f76a2378a4504aa 20 contrib/Contents-udeb-armel.gz
d41d8cd98f00b204e9800998ecf8427e 0 contrib/Contents-udeb-armhf
4a4dd3598707603b3f76a2378a4504aa 20 contrib/Contents-udeb-armhf.gz
d41d8cd98f00b204e9800998ecf8427e 0 contrib/Contents-udeb-i386
4a4dd3598707603b3f76a2378a4504aa 20 contrib/Contents-udeb-i386.gz
- d41d8cd98f00b204e9800998ecf8427e 0 contrib/Contents-udeb-ia64
- 4a4dd3598707603b3f76a2378a4504aa 20 contrib/Contents-udeb-ia64.gz
- d41d8cd98f00b204e9800998ecf8427e 0 contrib/Contents-udeb-kfreebsd-amd64
- 4a4dd3598707603b3f76a2378a4504aa 20 contrib/Contents-udeb-kfreebsd-amd64.gz
- d41d8cd98f00b204e9800998ecf8427e 0 contrib/Contents-udeb-kfreebsd-i386
- 4a4dd3598707603b3f76a2378a4504aa 20 contrib/Contents-udeb-kfreebsd-i386.gz
d41d8cd98f00b204e9800998ecf8427e 0 contrib/Contents-udeb-mips
4a4dd3598707603b3f76a2378a4504aa 20 contrib/Contents-udeb-mips.gz
+ d41d8cd98f00b204e9800998ecf8427e 0 contrib/Contents-udeb-mips64el
+ 4a4dd3598707603b3f76a2378a4504aa 20 contrib/Contents-udeb-mips64el.gz
d41d8cd98f00b204e9800998ecf8427e 0 contrib/Contents-udeb-mipsel
4a4dd3598707603b3f76a2378a4504aa 20 contrib/Contents-udeb-mipsel.gz
- d41d8cd98f00b204e9800998ecf8427e 0 contrib/Contents-udeb-powerpc
- 4a4dd3598707603b3f76a2378a4504aa 20 contrib/Contents-udeb-powerpc.gz
- d41d8cd98f00b204e9800998ecf8427e 0 contrib/Contents-udeb-s390
- 4a4dd3598707603b3f76a2378a4504aa 20 contrib/Contents-udeb-s390.gz
+ d41d8cd98f00b204e9800998ecf8427e 0 contrib/Contents-udeb-ppc64el
+ 4a4dd3598707603b3f76a2378a4504aa 20 contrib/Contents-udeb-ppc64el.gz
d41d8cd98f00b204e9800998ecf8427e 0 contrib/Contents-udeb-s390x
4a4dd3598707603b3f76a2378a4504aa 20 contrib/Contents-udeb-s390x.gz
- d41d8cd98f00b204e9800998ecf8427e 0 contrib/Contents-udeb-sparc
- 4a4dd3598707603b3f76a2378a4504aa 20 contrib/Contents-udeb-sparc.gz
- 180a225f83f76f8f7649a62b6bee54d9 5197 contrib/binary-all/Packages
- 6c39e46c3ee5f114abda1529ca70a171 2004 contrib/binary-all/Packages.bz2
- 408865f80df05f52e1fbc89b7b5fe066 1824 contrib/binary-all/Packages.gz
- 10ec089531400f643303eb8b2c9ffd2f 166 contrib/binary-all/Release
- 64950d690f6c6ea4477e904e63786b58 34074 contrib/binary-amd64/Packages
- 0a06d6a87beada84759f82c741c186b2 8725 contrib/binary-amd64/Packages.bz2
- b8d5734d394d59e06166bc6441d6c869 2212 contrib/binary-amd64/Packages.diff/Index
- 2392309d48c42ca7f7555a08c2a37642 9229 contrib/binary-amd64/Packages.gz
- f2d2da667edf02444b2b0c8a3019a7b3 168 contrib/binary-amd64/Release
- acd673898519a8b386ac373fa3eafe8b 9111 contrib/binary-armel/Packages
- 6aad51ada8f190601d9e7ed3d1b9ce92 3160 contrib/binary-armel/Packages.bz2
- 32dc61275183b6dd25a4a7c8c237e436 2212 contrib/binary-armel/Packages.diff/Index
- 6a824b41bb0e025839f3d9a57cfd974f 3027 contrib/binary-armel/Packages.gz
- 4abf28324fff6541410f05163ebf43b9 168 contrib/binary-armel/Release
- 1e18ff1073fd269017f3f233b6c2dcef 19971 contrib/binary-armhf/Packages
- 420c8bcf5b925cf9db6f7a95094026e7 5661 contrib/binary-armhf/Packages.bz2
- 57675dd933fa04cabaa3fab06c0b3b11 2212 contrib/binary-armhf/Packages.diff/Index
- 3ca4bc00fbaeefc9ab771dee6b4a772f 5755 contrib/binary-armhf/Packages.gz
- 7b2590a94c932a4bfceba8c63a7fd96f 168 contrib/binary-armhf/Release
- 17cdb828d6aa455125ccc90b4b089a0b 34024 contrib/binary-i386/Packages
- 313182b47fd78782fa630bda02d7719e 8744 contrib/binary-i386/Packages.bz2
- eb758210d8bb5ca8a00c3571f9bca250 2212 contrib/binary-i386/Packages.diff/Index
- d0969cbfd0d0c1248e87295e643c42b6 9375 contrib/binary-i386/Packages.gz
- ee7c07f328ec75e82ee876e5092da5c7 167 contrib/binary-i386/Release
- 68b01dc9020b4e080e04aa37864964db 9149 contrib/binary-ia64/Packages
- bea10196ca9a0441ba81b42190f8787a 3188 contrib/binary-ia64/Packages.bz2
- bbbeba3f35c3b46fb56c8ec6f3d82364 2212 contrib/binary-ia64/Packages.diff/Index
- c6f0cb2e66622756634d07c9b1ebc82e 3029 contrib/binary-ia64/Packages.gz
- b706fdcbc8d0783146ad9251a1a1ef02 167 contrib/binary-ia64/Release
- def06686d1edb7a6f25244f364c87736 9208 contrib/binary-kfreebsd-amd64/Packages
- 6070e37002a52f26e38ef2892a152c29 3171 contrib/binary-kfreebsd-amd64/Packages.bz2
- e60ac309e79e8c8690096b4f85c7bdf3 2212 contrib/binary-kfreebsd-amd64/Packages.diff/Index
- 3f37edd8d005a3b1b638dd746812844c 3031 contrib/binary-kfreebsd-amd64/Packages.gz
- dade35d2b96a40c96112ee21333f0050 177 contrib/binary-kfreebsd-amd64/Release
- fd27bfc6f853290c51600a9a463e38b4 9198 contrib/binary-kfreebsd-i386/Packages
- 27e71ff9195af8bb09280e7fb39f93e1 3183 contrib/binary-kfreebsd-i386/Packages.bz2
- 436e3356e08e3dee4094a38550ac1fec 2212 contrib/binary-kfreebsd-i386/Packages.diff/Index
- 659373a8d73cefd67f7cbe58b1f8073c 3034 contrib/binary-kfreebsd-i386/Packages.gz
- 66e7a191e7c2cb7325f6421e4ef4c53f 176 contrib/binary-kfreebsd-i386/Release
- 4518f5122a89a2376d75844723766809 9105 contrib/binary-mips/Packages
- dc8cef1231cac4b7952aa92b13cc99d2 3157 contrib/binary-mips/Packages.bz2
- 961ef5bab71a5d2b68b2db5bf7b8edb2 2212 contrib/binary-mips/Packages.diff/Index
- 7130d3d277bae1f171443a8955ee7039 3016 contrib/binary-mips/Packages.gz
- 3cea3a9ce042468957699ec51d3ec7fe 167 contrib/binary-mips/Release
- 18235b8a1c849336ee6ff5be6c3f9eb5 9125 contrib/binary-mipsel/Packages
- ef835080704a422b436d56d2996076bb 3167 contrib/binary-mipsel/Packages.bz2
- cf53166a4ef7945d5c1f350dcdd50188 2212 contrib/binary-mipsel/Packages.diff/Index
- e4966def40b4f3efe2fcfe5f4693c3d5 3016 contrib/binary-mipsel/Packages.gz
- bbf396e9ec12920c0b207be2b00f9c79 169 contrib/binary-mipsel/Release
- aedf392fca6641b3c28ca90b440b1d9b 9132 contrib/binary-powerpc/Packages
- 011926ec364f4687b59028002bd08b0e 3169 contrib/binary-powerpc/Packages.bz2
- 3f7346e01410da53eed798cea079e199 2212 contrib/binary-powerpc/Packages.diff/Index
- 72145def16fc64b68174931728775def 3019 contrib/binary-powerpc/Packages.gz
- ebc648a84fcf7f88cad58f2826a79c56 170 contrib/binary-powerpc/Release
- 6e3ba38d638b539e7f100e306858837c 9102 contrib/binary-s390/Packages
- 6fafb4999a9f1b2bd5762db8a3ee1a49 3162 contrib/binary-s390/Packages.bz2
- fb655de23142b1a2e931a00d9e90298a 2212 contrib/binary-s390/Packages.diff/Index
- c9206c823e50e7959de938971a186f7a 3023 contrib/binary-s390/Packages.gz
- 719241f1c3257f7dd8f4d816037e4147 167 contrib/binary-s390/Release
- 7c6f6a9405bb883c117e1ae77d53358c 9116 contrib/binary-s390x/Packages
- 2d080cf802826d2d9b0c5c939b39efb0 3168 contrib/binary-s390x/Packages.bz2
- af4d702d35fd21858dd4a954efab43fa 2212 contrib/binary-s390x/Packages.diff/Index
- 08dba5532cff5a631863e1a37821c86a 3013 contrib/binary-s390x/Packages.gz
- 5f8fde0830b63afa7397b99ee375cc31 168 contrib/binary-s390x/Release
- 3b9a3e4cf04acc7992788176ddcdf974 9112 contrib/binary-sparc/Packages
- fac005a267230b2dd37ea0e7487b6a92 3149 contrib/binary-sparc/Packages.bz2
- 7640946c3968cacde18d1555dfcbdc1c 2212 contrib/binary-sparc/Packages.diff/Index
- 51e844a8b3be662c40cc2a2e14cd25c3 3028 contrib/binary-sparc/Packages.gz
- 6369b075d6a420172fbf4ba3dbdee12e 168 contrib/binary-sparc/Release
+ 442711ec7af297f6e2ddd8bafd2aa5ea 98559 contrib/binary-all/Packages
+ 1feaacc94448fc8905a29272e7527b88 26589 contrib/binary-all/Packages.gz
+ 60c66d44524ac287d367ef9b629ac0b0 22872 contrib/binary-all/Packages.xz
+ e7fbb90665bc579e9751d402641fc3e0 117 contrib/binary-all/Release
+ 41fabc3ab376478e0e76a7a09a796e06 227288 contrib/binary-amd64/Packages
+ 570c9d54ef2f4e7ceb4cd392a1ea11fa 60376 contrib/binary-amd64/Packages.gz
+ ec098b007461aa6c1776072e7bb9c7df 50236 contrib/binary-amd64/Packages.xz
+ 90cb757b24d3ee47c2ce4e392702c670 119 contrib/binary-amd64/Release
+ 667c9853d929fc81bff2417f78a3bacc 167017 contrib/binary-arm64/Packages
+ f48c19d105ae94c9062848bfef20f408 45595 contrib/binary-arm64/Packages.gz
+ 0e177535fdda31191013fdb94826ff8b 38392 contrib/binary-arm64/Packages.xz
+ 89c87b62dd65014146c8e000c0257e7a 119 contrib/binary-arm64/Release
+ 5ca175acac29a7f8bdb3f3a97b99ff36 162625 contrib/binary-armel/Packages
+ f25c56f6aa57cef57dedb5eb7ae165fb 44533 contrib/binary-armel/Packages.gz
+ 966aa9b069ea553c1c5e47ae756c645a 37628 contrib/binary-armel/Packages.xz
+ 0068fc8b67ecf461a42b73e9c6032ba4 119 contrib/binary-armel/Release
+ 27f73aad12b6eb2ee927e186bd9750f5 174724 contrib/binary-armhf/Packages
+ 536e28160527dc2eae93dbc51afafd62 47683 contrib/binary-armhf/Packages.gz
+ f5ce2ed2e4064fd767b729fe2fa416a2 40096 contrib/binary-armhf/Packages.xz
+ 15c942727ed1e465fab28016bd75ac0d 119 contrib/binary-armhf/Release
+ 2616550f776e43cc6032ed07a2a73a44 206737 contrib/binary-i386/Packages
+ 235f3b6c8b6092af51e06dcc91c9010f 55449 contrib/binary-i386/Packages.gz
+ 53141a204404ad25d4d9b38da2b27ed0 46132 contrib/binary-i386/Packages.xz
+ 753defbd14fa63473cfd91c20f66893d 118 contrib/binary-i386/Release
+ 20b800a190455a428e6581351be5eca2 167136 contrib/binary-mips/Packages
+ 2bdc16706a42fbc7075bb6c9ab45500e 45932 contrib/binary-mips/Packages.gz
+ 6992c61321b685daaf42a0483d8ae231 38528 contrib/binary-mips/Packages.xz
+ 1e57761c3b8793adac4e5155b28b91f3 118 contrib/binary-mips/Release
+ 6383dea846ca8e6e09efc0eb969ff035 166369 contrib/binary-mips64el/Packages
+ 3bba1443f877e96f86b24cef754bc798 45086 contrib/binary-mips64el/Packages.gz
+ 81e4988ef5590096034629ede93f65f7 38180 contrib/binary-mips64el/Packages.xz
+ bc4dc5721d9b23b1f3caf569400a6727 122 contrib/binary-mips64el/Release
+ 84bba6436aae87efae86797e6f543940 167464 contrib/binary-mipsel/Packages
+ 91dfa6f6151b67a40e8f030ffe718622 45960 contrib/binary-mipsel/Packages.gz
+ 1c6f9e368cfec4479270f4f03a2250fb 38528 contrib/binary-mipsel/Packages.xz
+ 16b05b7c666c1c28e1424735d3c66ca5 120 contrib/binary-mipsel/Release
+ 303ad3d88546c1eac36e109e5a3d5caf 168194 contrib/binary-ppc64el/Packages
+ 387d4aef431798a19f9928353680742b 45836 contrib/binary-ppc64el/Packages.gz
+ f93be05f66940a74e57e436b9f8a6a71 38604 contrib/binary-ppc64el/Packages.xz
+ aa2bac1df7d66ea953fd3b2818de0f9a 121 contrib/binary-ppc64el/Release
+ 16f8badc92317e2998911b2066958f8a 164846 contrib/binary-s390x/Packages
+ cb996459079cbfd2aacfb5ae2be75c5a 45123 contrib/binary-s390x/Packages.gz
+ dbd01877994b73f76c0119443dbb533d 37960 contrib/binary-s390x/Packages.xz
+ 3845dd4e23aab2172b3651507cd2ef03 119 contrib/binary-s390x/Release
d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-all/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 contrib/debian-installer/binary-all/Packages.bz2
4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-all/Packages.gz
- 10ec089531400f643303eb8b2c9ffd2f 166 contrib/debian-installer/binary-all/Release
+ 8dc5aea5b03dff8595f096f9e368e888 32 contrib/debian-installer/binary-all/Packages.xz
+ e7fbb90665bc579e9751d402641fc3e0 117 contrib/debian-installer/binary-all/Release
d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-amd64/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 contrib/debian-installer/binary-amd64/Packages.bz2
4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-amd64/Packages.gz
- f2d2da667edf02444b2b0c8a3019a7b3 168 contrib/debian-installer/binary-amd64/Release
+ 8dc5aea5b03dff8595f096f9e368e888 32 contrib/debian-installer/binary-amd64/Packages.xz
+ 90cb757b24d3ee47c2ce4e392702c670 119 contrib/debian-installer/binary-amd64/Release
+ d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-arm64/Packages
+ 4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-arm64/Packages.gz
+ 8dc5aea5b03dff8595f096f9e368e888 32 contrib/debian-installer/binary-arm64/Packages.xz
+ 89c87b62dd65014146c8e000c0257e7a 119 contrib/debian-installer/binary-arm64/Release
d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-armel/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 contrib/debian-installer/binary-armel/Packages.bz2
4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-armel/Packages.gz
- 4abf28324fff6541410f05163ebf43b9 168 contrib/debian-installer/binary-armel/Release
+ 8dc5aea5b03dff8595f096f9e368e888 32 contrib/debian-installer/binary-armel/Packages.xz
+ 0068fc8b67ecf461a42b73e9c6032ba4 119 contrib/debian-installer/binary-armel/Release
d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-armhf/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 contrib/debian-installer/binary-armhf/Packages.bz2
4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-armhf/Packages.gz
- 7b2590a94c932a4bfceba8c63a7fd96f 168 contrib/debian-installer/binary-armhf/Release
+ 8dc5aea5b03dff8595f096f9e368e888 32 contrib/debian-installer/binary-armhf/Packages.xz
+ 15c942727ed1e465fab28016bd75ac0d 119 contrib/debian-installer/binary-armhf/Release
d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-i386/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 contrib/debian-installer/binary-i386/Packages.bz2
4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-i386/Packages.gz
- ee7c07f328ec75e82ee876e5092da5c7 167 contrib/debian-installer/binary-i386/Release
- d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-ia64/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 contrib/debian-installer/binary-ia64/Packages.bz2
- 4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-ia64/Packages.gz
- b706fdcbc8d0783146ad9251a1a1ef02 167 contrib/debian-installer/binary-ia64/Release
- d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-kfreebsd-amd64/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 contrib/debian-installer/binary-kfreebsd-amd64/Packages.bz2
- 4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-kfreebsd-amd64/Packages.gz
- dade35d2b96a40c96112ee21333f0050 177 contrib/debian-installer/binary-kfreebsd-amd64/Release
- d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-kfreebsd-i386/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 contrib/debian-installer/binary-kfreebsd-i386/Packages.bz2
- 4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-kfreebsd-i386/Packages.gz
- 66e7a191e7c2cb7325f6421e4ef4c53f 176 contrib/debian-installer/binary-kfreebsd-i386/Release
+ 8dc5aea5b03dff8595f096f9e368e888 32 contrib/debian-installer/binary-i386/Packages.xz
+ 753defbd14fa63473cfd91c20f66893d 118 contrib/debian-installer/binary-i386/Release
d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-mips/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 contrib/debian-installer/binary-mips/Packages.bz2
4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-mips/Packages.gz
- 3cea3a9ce042468957699ec51d3ec7fe 167 contrib/debian-installer/binary-mips/Release
+ 8dc5aea5b03dff8595f096f9e368e888 32 contrib/debian-installer/binary-mips/Packages.xz
+ 1e57761c3b8793adac4e5155b28b91f3 118 contrib/debian-installer/binary-mips/Release
+ d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-mips64el/Packages
+ 4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-mips64el/Packages.gz
+ 8dc5aea5b03dff8595f096f9e368e888 32 contrib/debian-installer/binary-mips64el/Packages.xz
+ bc4dc5721d9b23b1f3caf569400a6727 122 contrib/debian-installer/binary-mips64el/Release
d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-mipsel/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 contrib/debian-installer/binary-mipsel/Packages.bz2
4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-mipsel/Packages.gz
- bbf396e9ec12920c0b207be2b00f9c79 169 contrib/debian-installer/binary-mipsel/Release
- d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-powerpc/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 contrib/debian-installer/binary-powerpc/Packages.bz2
- 4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-powerpc/Packages.gz
- ebc648a84fcf7f88cad58f2826a79c56 170 contrib/debian-installer/binary-powerpc/Release
- d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-s390/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 contrib/debian-installer/binary-s390/Packages.bz2
- 4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-s390/Packages.gz
- 719241f1c3257f7dd8f4d816037e4147 167 contrib/debian-installer/binary-s390/Release
+ 8dc5aea5b03dff8595f096f9e368e888 32 contrib/debian-installer/binary-mipsel/Packages.xz
+ 16b05b7c666c1c28e1424735d3c66ca5 120 contrib/debian-installer/binary-mipsel/Release
+ d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-ppc64el/Packages
+ 4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-ppc64el/Packages.gz
+ 8dc5aea5b03dff8595f096f9e368e888 32 contrib/debian-installer/binary-ppc64el/Packages.xz
+ aa2bac1df7d66ea953fd3b2818de0f9a 121 contrib/debian-installer/binary-ppc64el/Release
d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-s390x/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 contrib/debian-installer/binary-s390x/Packages.bz2
4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-s390x/Packages.gz
- 5f8fde0830b63afa7397b99ee375cc31 168 contrib/debian-installer/binary-s390x/Release
- d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-sparc/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 contrib/debian-installer/binary-sparc/Packages.bz2
- 4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-sparc/Packages.gz
- 6369b075d6a420172fbf4ba3dbdee12e 168 contrib/debian-installer/binary-sparc/Release
- d86ec3b4ef4918669eaec15b93113db2 21108 contrib/i18n/Translation-en
- c13c78365715efcbbb8e090710bd6ee3 6350 contrib/i18n/Translation-en.bz2
- 6a203d860cc9f1bd6994dca6f938b6d2 1228 contrib/i18n/Translation-en.diff/Index
- 96724da09b4e1570206a8746c33ae818 169 contrib/source/Release
- 8d98b94ed7990ac8c77601bef8dcf023 29845 contrib/source/Sources
- 47a1f7c66f32d5dea14e5788e5ad2540 7880 contrib/source/Sources.bz2
- 53c044b02e578e6aa2708624bcb9589b 4180 contrib/source/Sources.diff/Index
- 3bb7a2ee91a77a8ab7a38c7f4c170c79 8150 contrib/source/Sources.gz
- 7c361a01fb7ec7693b9c187233861e12 55983554 main/Contents-amd64
- ebbaf2d76f453e9e8fb1b633c41d2850 21550 main/Contents-amd64.diff/Index
- 1bf68b885976ad7281ef74346573b66f 3864160 main/Contents-amd64.gz
- 261d8ba7a16221a215775edd01b32204 55728755 main/Contents-armel
- c93d2441019fb6c3a51110e7bd0fd8b2 22168 main/Contents-armel.diff/Index
- acca77d7238fbfb7b72aede001487971 3786638 main/Contents-armel.gz
- ba83106c478fdaf638a0caa033cda5e6 55205131 main/Contents-armhf
- 79ef92985af39c7db3b8684787e2ecce 24360 main/Contents-armhf.diff/Index
- 4055c5caaef6ba71c3ddb958f1501869 3775056 main/Contents-armhf.gz
- b8f098a94e2ec40c5c671f2a0d88236b 57405299 main/Contents-i386
- 33b0c567855f9d0959f41f64027cfbc1 25070 main/Contents-i386.diff/Index
- 59733d3bbf4db625c3d289ddb9cc6c91 3936378 main/Contents-i386.gz
- e9c389315070ba909867915531e77866 58007915 main/Contents-ia64
- f807a4e0968528b1e0bf2a4f336bdb7b 18293 main/Contents-ia64.diff/Index
- 5357ca7f7ae4adde4add4bf93378822d 3901535 main/Contents-ia64.gz
- 3e472e155c7967a5e76e94965a467a27 50310305 main/Contents-kfreebsd-amd64
- 17c5d44b0d5ca586e49eca0057f07421 17583 main/Contents-kfreebsd-amd64.diff/Index
- 60daee82820b3e910dd99797cac63c72 3450398 main/Contents-kfreebsd-amd64.gz
- c399d1a48cda8265a1147ea1fcd15471 50378896 main/Contents-kfreebsd-i386
- 1cc949dbffb70dbee00063d1380dfbea 17583 main/Contents-kfreebsd-i386.diff/Index
- fe40b2802ab0b38c761ff856944b3f1d 3459123 main/Contents-kfreebsd-i386.gz
- ac3fdc4c8d5b218f8bc1ef07bb0bc9f5 55948774 main/Contents-mips
- 4c118fea67706610dac0cb0b86bb6e13 20068 main/Contents-mips.diff/Index
- 443a7588f0586fc498fc684f52fe6bc0 3801345 main/Contents-mips.gz
- 5a4465f3f1e8c6a3b7f9f62d67e3eaaf 56551959 main/Contents-mipsel
- b38bd4b16504ece2a3e0496e1f39cbb0 19065 main/Contents-mipsel.diff/Index
- b4ef28b4eb8465f5f15ed9a6b4b37483 3833328 main/Contents-mipsel.gz
- 11107038b5e2bc0b292bd7f09eead60d 55924659 main/Contents-powerpc
- 4b956c415cc5f1b9de8b695c4d402959 18710 main/Contents-powerpc.diff/Index
- 207d459dcf2308c2ab5ceb14e08083a5 3821616 main/Contents-powerpc.gz
- 0ad28325f17975281948d823fddcf252 52562968 main/Contents-s390
- 235de07f48da4ec5179bee0358fa4cdc 17228 main/Contents-s390.diff/Index
- 78dba09265860b31787e73e68a313a0c 3617572 main/Contents-s390.gz
- e229d217353665790a3092ea98cd308c 53483632 main/Contents-s390x
- 566c5169c727b0fd9f6ffb46bc6d1982 17722 main/Contents-s390x.diff/Index
- 35402c3ff36ce214f552086814715b83 3697504 main/Contents-s390x.gz
- 3df6440ebae51e19146e11d3393b0fef 54200433 main/Contents-source
- 4cba1a9f9d10fb989448283ec1703577 17052 main/Contents-source.diff/Index
- a1a061f394839ad12a265e3d6ceda7e0 5742422 main/Contents-source.gz
- c33f3ee46ffcd1ca327b3d9b1b67882f 54439714 main/Contents-sparc
- 81aeaaaffa87b3f55ce275f1dd0a104f 18710 main/Contents-sparc.diff/Index
- 27e302fe6e2382575b2362b5dfae6183 3732736 main/Contents-sparc.gz
- c80baf801312f7ac23e3fc997b4d343f 97265 main/Contents-udeb-amd64
- 4cb7afe7e52ca6452f3a1763ddb37490 6729 main/Contents-udeb-amd64.gz
- d32ae1214fea4175916f25bed0a88f68 82315 main/Contents-udeb-armel
- defb39d8262e55f00c473a5d176309d6 4995 main/Contents-udeb-armel.gz
- ca6ca65da4fa12cb3e33403ce6f62055 84492 main/Contents-udeb-armhf
- 5966c80964e07c990ac5e03f5b3c5c52 5965 main/Contents-udeb-armhf.gz
- 35c09d0cbd2c8360c9cbeb3eaee690d4 206559 main/Contents-udeb-i386
- a6994c6f4c40132b962d058529545f88 13256 main/Contents-udeb-i386.gz
- 351ff56062da41558e245210453cf43a 201741 main/Contents-udeb-ia64
- 22c8608236aee22cd5aa517e4f2c7e8a 12924 main/Contents-udeb-ia64.gz
- f820368898781dffb60ea2672ff38571 3612 main/Contents-udeb-kfreebsd-amd64
- 659264454ab22fcd0e3f9b890287e07c 433 main/Contents-udeb-kfreebsd-amd64.gz
- 08616a648938715b15fa2b8c7c2a6071 3612 main/Contents-udeb-kfreebsd-i386
- bcf22d0881a5cc81e572d7651910dc0a 428 main/Contents-udeb-kfreebsd-i386.gz
- 39b77d73e322e9ef98cdf3cb8c48af9d 219854 main/Contents-udeb-mips
- 47e9f7539d7c5cb479f6e7adc27c9959 13373 main/Contents-udeb-mips.gz
- e171ff0a5ce1975659fa8e184226323b 347698 main/Contents-udeb-mipsel
- d63fc762bd9c81d74dad4d9b488c8573 20139 main/Contents-udeb-mipsel.gz
- a5d6794d232b5e2d7f7646eff2bb1155 167963 main/Contents-udeb-powerpc
- 34060a5c3db922bd669cec60a3a90b8b 9936 main/Contents-udeb-powerpc.gz
- 9b4b8575459d7739c0794a98fdd41eb4 17745 main/Contents-udeb-s390
- 49072caf5bbd1aafcf40d8c6d9773ba6 1678 main/Contents-udeb-s390.gz
- 2727507c07bb79bde2dbc69d2fe361fe 17655 main/Contents-udeb-s390x
- 653a350f0a58e9cbea15e7ed71843cc0 1666 main/Contents-udeb-s390x.gz
- a770a4bea65ce8c2e0c57aabd909ded9 41956 main/Contents-udeb-sparc
- b786e38ff31ca14f3249737e0582e92c 3108 main/Contents-udeb-sparc.gz
- 7ca1fdf726560c51a45c7528e016bfd1 1752561 main/binary-all/Packages
- 3d130d603acf07bc32357931f91f6252 298614 main/binary-all/Packages.bz2
- ff3fdae05a916ce98e77d9e907e879d7 363124 main/binary-all/Packages.gz
- 0648470b3749580b15a54b99c79efac2 163 main/binary-all/Release
- 24bbca6569fa9c4a5c227c4c251c028f 3101317 main/binary-amd64/Packages
- 87626490df204e31ff4f8b094cec62d2 611011 main/binary-amd64/Packages.bz2
- 16d776ae81133eaec1bf14e0cb392192 27088 main/binary-amd64/Packages.diff/Index
- 1ea9bc78896a4e8b4411fcdadee7be27 776104 main/binary-amd64/Packages.gz
- 1d25d6fa6edb6e6465efc85711b0ed24 165 main/binary-amd64/Release
- cd15e4e8718c1e631641d221b639bd5e 2946046 main/binary-armel/Packages
- 29e0c4642b2c4be7124ccc30139c3589 581488 main/binary-armel/Packages.bz2
- 007c19a2d55c524fed473140dcf86f6b 27796 main/binary-armel/Packages.diff/Index
- e5ddbf6b03aa18c509ca58bb0eded628 738067 main/binary-armel/Packages.gz
- 20a0ba802ec84a346684e905e17ffd67 165 main/binary-armel/Release
- 4249dec69f4e3d4b7b00e2d43418d9b7 2977442 main/binary-armhf/Packages
- 3ffdafb9c3ef2a9d44b81bf0988eb3c3 586282 main/binary-armhf/Packages.bz2
- da0549870ac49583af21e2c9645d14ab 27796 main/binary-armhf/Packages.diff/Index
- 8b558f72e214b99571995bd2cb36bfe3 745128 main/binary-armhf/Packages.gz
- c0715be16e413f97086cb4652fdf1f4b 165 main/binary-armhf/Release
- 1dfab6e9cf6a54d486fb93443dc97829 3097673 main/binary-i386/Packages
- 82857ebc08c071985035d14a462e430b 610952 main/binary-i386/Packages.bz2
- 86357fa1a52bc5cd50061074221abbaf 27796 main/binary-i386/Packages.diff/Index
- f592530b1e85ca47bc68e72de6d7f7e8 775752 main/binary-i386/Packages.gz
- 256efda78dc1ee6ac4684298bdc0bd08 164 main/binary-i386/Release
- c82528433f09ec198b113348e6f0178e 2807416 main/binary-ia64/Packages
- 5b93a989a48d012610419936ea08b3ce 557449 main/binary-ia64/Packages.bz2
- 5cc1a72002e3cf76b7c8b5af1df878ff 18214 main/binary-ia64/Packages.diff/Index
- db75326bbd53c5f23c42c7a1a2b80e25 707233 main/binary-ia64/Packages.gz
- 8bf955a1803254edc8ab50bd4deb69da 164 main/binary-ia64/Release
- 488d8087d7dcfa64f0c3a8ba4dc7fd82 2641182 main/binary-kfreebsd-amd64/Packages
- b963ab5c151c3699c44b7426a4b957c9 517444 main/binary-kfreebsd-amd64/Packages.bz2
- 4768870b596144c89161d8e204128d40 24256 main/binary-kfreebsd-amd64/Packages.diff/Index
- 0e227262acc6a9f6cbdca0faaa8f1816 660341 main/binary-kfreebsd-amd64/Packages.gz
- c307c2e353e97c4ba16a073741c6a50f 174 main/binary-kfreebsd-amd64/Release
- 51175703ff6f27e468fc346fbce99a50 2666534 main/binary-kfreebsd-i386/Packages
- f816db1a22f681ce4801d23f02142204 521809 main/binary-kfreebsd-i386/Packages.bz2
- 1e6b4c7f9ec264eec0c3abbed4694c19 24610 main/binary-kfreebsd-i386/Packages.diff/Index
- dc41d1ebee7cc6be47070461c4bea3b4 665460 main/binary-kfreebsd-i386/Packages.gz
- 827398cb5c8ae42b63e765474d148a7c 173 main/binary-kfreebsd-i386/Release
- 673e1aff449fa6bf49cd633b7d94c80f 2907660 main/binary-mips/Packages
- 348d8c62b40cc128c16e22065a35cee4 575633 main/binary-mips/Packages.bz2
- 74d9d22cd7f328071b80c305257343a6 21382 main/binary-mips/Packages.diff/Index
- 600efcb416dbfa35b3e8393af188b3e0 729884 main/binary-mips/Packages.gz
- e4ceb469304796b04b532a08a6a9a106 164 main/binary-mips/Release
- 6f34c6d9bab265eaf804e367314c861b 2942003 main/binary-mipsel/Packages
- cd5e5326e2ba8c9570457992c502a52c 579576 main/binary-mipsel/Packages.bz2
- 0448aab227641230beec73207719b7dd 21010 main/binary-mipsel/Packages.diff/Index
- cc9659fc25a1d39267ae0f7bbd5d6abf 735563 main/binary-mipsel/Packages.gz
- a35812c7a528f08d2f7d4a6ad685d9b4 166 main/binary-mipsel/Release
- b66577e1ae5c5afc86c5211c8b6b5770 3158047 main/binary-powerpc/Packages
- 3976a4834ce6f8bb20c13155cf3eda0e 609147 main/binary-powerpc/Packages.bz2
- ababeea1b89a7367f2c0ff7b7b8464a6 19888 main/binary-powerpc/Packages.diff/Index
- 41818e8cf326f2f85da8fd18be835153 769669 main/binary-powerpc/Packages.gz
- b1abb3bd37811bb0fd2fdb8fd6fd76f8 167 main/binary-powerpc/Release
- f4ffafc3ff575ef63b19081a14122dd7 2921850 main/binary-s390/Packages
- 838a88af3931f66b096b2b3fa685de1d 574234 main/binary-s390/Packages.bz2
- 0b966d561bf1c32bbb7df48315dca7de 19396 main/binary-s390/Packages.diff/Index
- d56a9730247feadc7b8f2daef75432f5 721451 main/binary-s390/Packages.gz
- 802eeb13ab8a90afb7e3e92ed2015e09 164 main/binary-s390/Release
- aef68b5f492a02ff90a579e092d6a797 3092767 main/binary-s390x/Packages
- ac8ce66051576a7752fc0a7cdbdf6cd2 598557 main/binary-s390x/Packages.bz2
- 0948e17d74b2edf5c845ac72900a78f3 19396 main/binary-s390x/Packages.diff/Index
- 54417ee0bf8656cdbba93f0818addd79 754961 main/binary-s390x/Packages.gz
- 0440d3a9164f72eadd90924f4f64cad1 165 main/binary-s390x/Release
- 71baf1455080e05f9fe6beea58d56bd3 2909809 main/binary-sparc/Packages
- 7d2e6096e8436c0c8612255bde334c88 572645 main/binary-sparc/Packages.bz2
- 2e824308bedc54d466867dc388b66e8a 20380 main/binary-sparc/Packages.diff/Index
- 181f467d4f14b7c7b82e5dd4471c8d8c 727797 main/binary-sparc/Packages.gz
- 590f0831be4e901a085c0ef6332d1e96 165 main/binary-sparc/Release
- 567567cb6a803350afe744cb29219553 1201 main/debian-installer/binary-all/Packages
- fb79f10d2d76c0b895357f5270129180 720 main/debian-installer/binary-all/Packages.bz2
- b57af6ddd5a86fdfe93111305e9bfa6f 648 main/debian-installer/binary-all/Packages.gz
- 0648470b3749580b15a54b99c79efac2 163 main/debian-installer/binary-all/Release
- db16c6b4aef3a6b3727caec006b6810b 52673 main/debian-installer/binary-amd64/Packages
- 245c1e5fb33cb0cc15597217de82c087 10640 main/debian-installer/binary-amd64/Packages.bz2
- 2c3dddc5ab9836af3c331c75d59b65f8 12316 main/debian-installer/binary-amd64/Packages.gz
- 1d25d6fa6edb6e6465efc85711b0ed24 165 main/debian-installer/binary-amd64/Release
- 5701bd882591ad1112dfdaccdacd050d 85058 main/debian-installer/binary-armel/Packages
- dc8f461be23a2be6d1ce51f3c151671e 15131 main/debian-installer/binary-armel/Packages.bz2
- 81d56436922b008bf52b50df4ad98697 17272 main/debian-installer/binary-armel/Packages.gz
- 20a0ba802ec84a346684e905e17ffd67 165 main/debian-installer/binary-armel/Release
- 5fad949665e01ed6e7fe2e37902ed0ea 40455 main/debian-installer/binary-armhf/Packages
- 97a83f9466cf2740dae079538b993f75 9030 main/debian-installer/binary-armhf/Packages.bz2
- 9fca0237195ca594b6435b97b9086ee3 10230 main/debian-installer/binary-armhf/Packages.gz
- c0715be16e413f97086cb4652fdf1f4b 165 main/debian-installer/binary-armhf/Release
- f2b9adf1a74d6ae4f7d2b8e9c0778b06 93685 main/debian-installer/binary-i386/Packages
- 8d68dc391c6b0447fa0ebb2e460ad3f8 16533 main/debian-installer/binary-i386/Packages.bz2
- bfa474579328a427a6c4842b6cfd73b0 19236 main/debian-installer/binary-i386/Packages.gz
- 256efda78dc1ee6ac4684298bdc0bd08 164 main/debian-installer/binary-i386/Release
- 5a3f9192f21aa692fd4add1564d353c5 134527 main/debian-installer/binary-ia64/Packages
- 976dc2162b315aca04bea33d7bd17a59 22052 main/debian-installer/binary-ia64/Packages.bz2
- 2f2d59559618f5cf5fac86f0a851e161 25474 main/debian-installer/binary-ia64/Packages.gz
- 8bf955a1803254edc8ab50bd4deb69da 164 main/debian-installer/binary-ia64/Release
- 2ddd4a06721e5c42328806d446d26223 5111 main/debian-installer/binary-kfreebsd-amd64/Packages
- a8ff7889d778221dfd3d8c571a1a30f4 2073 main/debian-installer/binary-kfreebsd-amd64/Packages.bz2
- e0c38db1f36659322b725dc2bb03ca48 1944 main/debian-installer/binary-kfreebsd-amd64/Packages.gz
- c307c2e353e97c4ba16a073741c6a50f 174 main/debian-installer/binary-kfreebsd-amd64/Release
- e886293d08443cbc577a7353f6f330f3 5099 main/debian-installer/binary-kfreebsd-i386/Packages
- f7468f07b15a874f299b74ada766776f 2061 main/debian-installer/binary-kfreebsd-i386/Packages.bz2
- 4dc6ba72486080afcf97624a58440fcc 1942 main/debian-installer/binary-kfreebsd-i386/Packages.gz
- 827398cb5c8ae42b63e765474d148a7c 173 main/debian-installer/binary-kfreebsd-i386/Release
- 31998840b7f7fec45047047a51713cd6 133337 main/debian-installer/binary-mips/Packages
- 9aefed4276afc82ba689688bca87c16f 21486 main/debian-installer/binary-mips/Packages.bz2
- d098c76cabb047587ace7423923460ba 25104 main/debian-installer/binary-mips/Packages.gz
- e4ceb469304796b04b532a08a6a9a106 164 main/debian-installer/binary-mips/Release
- 22da5033a66d97aa14f338df17e28b0c 180613 main/debian-installer/binary-mipsel/Packages
- f093c1d3e4903c42b24c019ddb6b8822 27088 main/debian-installer/binary-mipsel/Packages.bz2
- 67502c5031dc607d9598da5e3f27f5ba 32425 main/debian-installer/binary-mipsel/Packages.gz
- a35812c7a528f08d2f7d4a6ad685d9b4 166 main/debian-installer/binary-mipsel/Release
- 61e500b72399112fda837db8d22ea351 81646 main/debian-installer/binary-powerpc/Packages
- a105bd2fd9658390e216a4cc90b0f5c1 14561 main/debian-installer/binary-powerpc/Packages.bz2
- 2c1761c0004dc28c73d8981e1fcd427c 16569 main/debian-installer/binary-powerpc/Packages.gz
- b1abb3bd37811bb0fd2fdb8fd6fd76f8 167 main/debian-installer/binary-powerpc/Release
- ed7d1fcd4fe92f36f49e879b664d1b50 23156 main/debian-installer/binary-s390/Packages
- db2f4c5e3ac586b83b7de3e31199105f 6029 main/debian-installer/binary-s390/Packages.bz2
- e5b93dc1906cde592a498a596fec7f68 6480 main/debian-installer/binary-s390/Packages.gz
- 802eeb13ab8a90afb7e3e92ed2015e09 164 main/debian-installer/binary-s390/Release
- 22020f13358dda276d84eae5ccece986 22632 main/debian-installer/binary-s390x/Packages
- 0aadc1ab1732436cb5b9ed4b8e570c3d 5845 main/debian-installer/binary-s390x/Packages.bz2
- df8cee6809241ecfce2d00f3f861c038 6312 main/debian-installer/binary-s390x/Packages.gz
- 0440d3a9164f72eadd90924f4f64cad1 165 main/debian-installer/binary-s390x/Release
- dd8ed91a5490e609ed33d67ebb931a80 33653 main/debian-installer/binary-sparc/Packages
- 04c7d0804e33354bcb014cfb5b1ebc15 7535 main/debian-installer/binary-sparc/Packages.bz2
- d6b0ad8ae13ea294209f403f6a6d5e67 8369 main/debian-installer/binary-sparc/Packages.gz
- 590f0831be4e901a085c0ef6332d1e96 165 main/debian-installer/binary-sparc/Release
- c6a58456bcb1193c52837a6efbeb4a35 2215515 main/i18n/Translation-en
- 7bf0c494f82a92ddccda216d828b3f06 379130 main/i18n/Translation-en.bz2
- fa6390a5aadeeec810a461f0005dca34 10360 main/i18n/Translation-en.diff/Index
- 231ea9fe8283afe71a5d631808d594a1 166 main/source/Release
- 767a3c512c25dfc77b2739ae07bd1cad 2698141 main/source/Sources
- f782069d0e7e84b9ae70f00af757b9bd 459978 main/source/Sources.bz2
- 48edd6b5194a68794ffe29f630ba6d16 27796 main/source/Sources.diff/Index
- 9d1b11eb546b38401daae8419dabfffa 594683 main/source/Sources.gz
- 1c1637cd6de2f0741473288863feeadc 980964 non-free/Contents-amd64
- 1cb9e5a2fd231ac870ef6af71ce51a36 4948 non-free/Contents-amd64.diff/Index
- 43a0c073fb132b52dda6b448d852787e 59410 non-free/Contents-amd64.gz
- 4b562a063521bcf8ec001e649b1402b1 489792 non-free/Contents-armel
- 3bf6227a4d7157f64d4691acfb2b5d65 736 non-free/Contents-armel.diff/Index
- 022e49114e4faac64baffde3c12b58d2 27750 non-free/Contents-armel.gz
- 4b562a063521bcf8ec001e649b1402b1 489792 non-free/Contents-armhf
- b3e57dde8edb3c5f25d066cac229d8a9 736 non-free/Contents-armhf.diff/Index
- 022e49114e4faac64baffde3c12b58d2 27750 non-free/Contents-armhf.gz
- cc7f8337d582fd46f5a9349fbd302abd 991147 non-free/Contents-i386
- ce633bde0d0628611287e98ac6f4e75c 4948 non-free/Contents-i386.diff/Index
- 09cc63c7ae3278432a722df985a22989 59944 non-free/Contents-i386.gz
- 4b562a063521bcf8ec001e649b1402b1 489792 non-free/Contents-ia64
- 54abdac8488b349bc0f1e4b917acf3f6 736 non-free/Contents-ia64.diff/Index
- 022e49114e4faac64baffde3c12b58d2 27750 non-free/Contents-ia64.gz
- 4b562a063521bcf8ec001e649b1402b1 489792 non-free/Contents-kfreebsd-amd64
- 3ed577fe2af24f5e0d51bcee6c63c9f7 736 non-free/Contents-kfreebsd-amd64.diff/Index
- 022e49114e4faac64baffde3c12b58d2 27750 non-free/Contents-kfreebsd-amd64.gz
- 4b562a063521bcf8ec001e649b1402b1 489792 non-free/Contents-kfreebsd-i386
- 5ab5348fcb1d362c6a6a8a23a70794a9 736 non-free/Contents-kfreebsd-i386.diff/Index
- 022e49114e4faac64baffde3c12b58d2 27750 non-free/Contents-kfreebsd-i386.gz
- 4b562a063521bcf8ec001e649b1402b1 489792 non-free/Contents-mips
- 74e1406428909f94652eb9bf307649ae 736 non-free/Contents-mips.diff/Index
- 022e49114e4faac64baffde3c12b58d2 27750 non-free/Contents-mips.gz
- 4b562a063521bcf8ec001e649b1402b1 489792 non-free/Contents-mipsel
- 16a6293d5aaa2609ec082dc26b9d4009 736 non-free/Contents-mipsel.diff/Index
- 022e49114e4faac64baffde3c12b58d2 27750 non-free/Contents-mipsel.gz
- 4b562a063521bcf8ec001e649b1402b1 489792 non-free/Contents-powerpc
- b7e11d6e76f7f52ccf6d361dddd292f9 736 non-free/Contents-powerpc.diff/Index
- 022e49114e4faac64baffde3c12b58d2 27750 non-free/Contents-powerpc.gz
- 4b562a063521bcf8ec001e649b1402b1 489792 non-free/Contents-s390
- 4fa4b270afdd4f67c698686cc39b16b6 736 non-free/Contents-s390.diff/Index
- 022e49114e4faac64baffde3c12b58d2 27750 non-free/Contents-s390.gz
- 4b562a063521bcf8ec001e649b1402b1 489792 non-free/Contents-s390x
- af6921da00841f9c927b6723e6fc5982 736 non-free/Contents-s390x.diff/Index
- 022e49114e4faac64baffde3c12b58d2 27750 non-free/Contents-s390x.gz
- 34bbbfbb60b933774466cdf5b836ec75 310077 non-free/Contents-source
- 2cafeaa3b68b2f7d8e0dde7ff0c2ac3b 4188 non-free/Contents-source.diff/Index
- a1b049b25abda43a80db9d2d5b58a8a1 30075 non-free/Contents-source.gz
- 4b562a063521bcf8ec001e649b1402b1 489792 non-free/Contents-sparc
- 0e285596e58b5871996001c592c52046 736 non-free/Contents-sparc.diff/Index
- 022e49114e4faac64baffde3c12b58d2 27750 non-free/Contents-sparc.gz
+ 8dc5aea5b03dff8595f096f9e368e888 32 contrib/debian-installer/binary-s390x/Packages.xz
+ 3845dd4e23aab2172b3651507cd2ef03 119 contrib/debian-installer/binary-s390x/Release
+ ec956928e3e97c16ce51dc23850891da 103445 contrib/dep11/Components-amd64.yml
+ b822d803017967b38ed80d71b0dd46f6 12945 contrib/dep11/Components-amd64.yml.gz
+ b291a35c699ef0e97d89cb45e8e6425e 11504 contrib/dep11/Components-amd64.yml.xz
+ 665ed78bc919c6d10b58ee3cd0af7aae 103445 contrib/dep11/Components-arm64.yml
+ 8d50ebb0934fda2248f03e150f98943c 12903 contrib/dep11/Components-arm64.yml.gz
+ 45d5d030de525d849ca7dd45f265c6eb 11516 contrib/dep11/Components-arm64.yml.xz
+ d3d0795a9c89fec6d1256fee7a79989c 99187 contrib/dep11/Components-armel.yml
+ 171a096100ad8d45b1bb2c182d33d038 12210 contrib/dep11/Components-armel.yml.gz
+ 897c0a8a6d777db873a11fd2891819de 10720 contrib/dep11/Components-armel.yml.xz
+ 15116dbc0b352fc234b8fc298eb8fbb7 101441 contrib/dep11/Components-armhf.yml
+ 33e3f201a9ece89b80022de024d80220 12814 contrib/dep11/Components-armhf.yml.gz
+ c184cc177a13455296d300828dcbd946 11180 contrib/dep11/Components-armhf.yml.xz
+ 81feae838a1738fe9f757f294d16e9cf 101191 contrib/dep11/Components-i386.yml
+ 761a218ab2c00de309a3bd0c74b6b24a 12199 contrib/dep11/Components-i386.yml.gz
+ 2ea8f7169a0b30030ec97cacc11b46bf 11068 contrib/dep11/Components-i386.yml.xz
+ 54ffff085d89a17df3cc29920fd9a5af 101191 contrib/dep11/Components-mips64el.yml
+ c64b104c932fe0291ea276fbdcc8a286 12714 contrib/dep11/Components-mips64el.yml.gz
+ f723d21708e668f0b50617abf6a2b95c 11136 contrib/dep11/Components-mips64el.yml.xz
+ 697e672d9c6aba7d352c8b02cb6cf873 101191 contrib/dep11/Components-ppc64el.yml
+ 9cfce9b087ef099d7d7a5c51fc97ae36 12411 contrib/dep11/Components-ppc64el.yml.gz
+ 5cd33df702cad613a5c06d61537a7fb9 11060 contrib/dep11/Components-ppc64el.yml.xz
+ bd198f18cae5d51ef7f4c51260de3487 101191 contrib/dep11/Components-s390x.yml
+ a5df1415281a7ef864aea8b2b00637af 12351 contrib/dep11/Components-s390x.yml.gz
+ b078638ea8750fef2fb9e6dc10b9d40f 11076 contrib/dep11/Components-s390x.yml.xz
+ 437c9335eaaa898f9d0d5924fbe6cdf7 266240 contrib/dep11/icons-128x128.tar
+ 7410281d597da0fbed09db823e7afc44 226447 contrib/dep11/icons-128x128.tar.gz
+ ab362cc15a02c056eb4576a9a07ba7c8 87552 contrib/dep11/icons-48x48.tar
+ 791cd086dff0b50f33c0ab9ed69ec8f2 56361 contrib/dep11/icons-48x48.tar.gz
+ dc1559abf1adf3e202e703dfc43b26f9 152064 contrib/dep11/icons-64x64.tar
+ 88467f294491b80429ac2f2be92e26be 110187 contrib/dep11/icons-64x64.tar.gz
+ be2d4a1b00c65b21689be1be286bfac4 180788 contrib/i18n/Translation-en
+ 260bd29500d2636121b5d8a8653a5f99 44160 contrib/i18n/Translation-en.bz2
+ 9a00d72cbb8a0c3f5f4a7e34a19ebabf 120 contrib/source/Release
+ 6b644bdc3d569c9ea0717bf679ef45e6 171415 contrib/source/Sources
+ d9cad2e9f54a54cf418a368d4fd8c836 50324 contrib/source/Sources.gz
+ af6ebca8d1acd3dc4c6c7c09153fc789 42524 contrib/source/Sources.xz
+ a356cb9c62586e9421ef22efc40160fb 544269024 main/Contents-amd64
+ 07bba89a4cf38da79cb88adc88d8f3d2 37329769 main/Contents-amd64.gz
+ f37ba6046f1f692c65027282b9dd6d58 529782549 main/Contents-arm64
+ 2a1d95eac44bdcf5b29b71b6a642e16e 36507963 main/Contents-arm64.gz
+ 1b2aaa3a7bd19c60743cba8f081018b0 521282981 main/Contents-armel
+ 299acdd9e8ad526181a8f87e89835e10 35956662 main/Contents-armel.gz
+ 3cfe120dbf9ba1491b5b2f9c3088f21e 528756979 main/Contents-armhf
+ 9c7d6900e4b07dc1fcbc0dbb8b7a8912 36456075 main/Contents-armhf.gz
+ c4f1d7a46ee070c0ec1d9e79e2bf87c7 545147025 main/Contents-i386
+ b4253c077d3105830c0c0f214bcc550b 37351315 main/Contents-i386.gz
+ 22422f11306f4ed3be8d20fd1fdfcf28 522760520 main/Contents-mips
+ fcfadc393f1e2946caadd837d73a665b 36036428 main/Contents-mips.gz
+ fdf5f43cd735702d4ea9d4a84fe1d551 524387669 main/Contents-mips64el
+ 1e653405e2bebf8bb17b819a0e56399a 36106653 main/Contents-mips64el.gz
+ d90c1ab4aef974497055761988931e6d 526408849 main/Contents-mipsel
+ 1ba92eb12f2c88d83389b3da7e48de75 36291254 main/Contents-mipsel.gz
+ f7ac1bb8c12c7de2b9b9186d387e2d48 525623049 main/Contents-ppc64el
+ 06e601917909599d1b630c0590c4b5a4 36164749 main/Contents-ppc64el.gz
+ 8e6c9c94892aa3fc9ae7dadf21b9b0af 518948132 main/Contents-s390x
+ b552beb74edd8714c4b06c64cb6a70b7 35843209 main/Contents-s390x.gz
+ 8bd0373ed9c9fccefa0e2051142459cc 562813257 main/Contents-source
+ 9c4f2e1617cf7aef2cda6ffb13b461d8 62910627 main/Contents-source.gz
+ d374c66d0b6a6733dafe05069e6d85fc 612676 main/Contents-udeb-amd64
+ 9cb96f20a7625c0124cc80c89f28c1d9 48325 main/Contents-udeb-amd64.gz
+ 552ae813cd82d3b809670b606ff72bf2 602615 main/Contents-udeb-arm64
+ cb4a58cdc1271834c578ab0080e1f427 47303 main/Contents-udeb-arm64.gz
+ f07d8cb30637b2ab0a8410bfe932f41a 479897 main/Contents-udeb-armel
+ cff2d4f826607070ee22b00e97e78929 38663 main/Contents-udeb-armel.gz
+ d39c4fbb0c01d294d4d261c036536f69 694946 main/Contents-udeb-armhf
+ 664d1f4cdd0482805032d5ffcd6ddc99 53579 main/Contents-udeb-armhf.gz
+ 9fa9ff70518916f7beaaccdcbf991fc3 873048 main/Contents-udeb-i386
+ e55fb627daf06e3a053fcb2460bdfa28 65269 main/Contents-udeb-i386.gz
+ 65cb1e936777fdd0e95bc792415fbb30 722121 main/Contents-udeb-mips
+ a5c3896de85771cef476a3248698b15c 54179 main/Contents-udeb-mips.gz
+ 7749fa5d76b86d0c610e3c96ce5194aa 896156 main/Contents-udeb-mips64el
+ e3d864cc585c280f7bb20c45af26e3a0 65165 main/Contents-udeb-mips64el.gz
+ bdbe953bd99adf5b1c8bd953ebf8f173 896790 main/Contents-udeb-mipsel
+ f22f8ca795be2f8313e8c0e5cea7e80b 65657 main/Contents-udeb-mipsel.gz
+ 9e3632e249151d83388059602b618cf1 549534 main/Contents-udeb-ppc64el
+ e6f63c95cd06c9f9a279856f291539e0 42112 main/Contents-udeb-ppc64el.gz
+ 441173cc864e6cd011d095ad41fa79d2 401986 main/Contents-udeb-s390x
+ 67aae48377ea8edd8b2274b410dd2acf 32973 main/Contents-udeb-s390x.gz
+ f01e30984c7ae13c926a49c66b58cf8b 20390421 main/binary-all/Packages
+ 93ec96c5f99b7711ffa980f46da33e59 5111764 main/binary-all/Packages.gz
+ f45d82d3b8406a9cc83cd79c08c45420 3842444 main/binary-all/Packages.xz
+ 8591eb3bd82bade7901c90592c82e146 114 main/binary-all/Release
+ a7ed5e70875d114cb3407b76ef4a0193 44656195 main/binary-amd64/Packages
+ a1167a2208d00941d4503c2276670317 10739377 main/binary-amd64/Packages.gz
+ 6043a440cb8038062bed716e76b3d7e7 7907472 main/binary-amd64/Packages.xz
+ 88b62a196e01cd813c8b8162980c4a0d 116 main/binary-amd64/Release
+ 42c3512dffdaa0aa196c2eb0a03ea315 43514688 main/binary-arm64/Packages
+ fcd237afb84932ac220f1f7a7baa65af 10513209 main/binary-arm64/Packages.gz
+ 62d03f622aa153be358f9c7016d4ade3 7736792 main/binary-arm64/Packages.xz
+ 322314350e3c6c9b0925ff36223138c7 116 main/binary-arm64/Release
+ c91c335985c1a72c788e01c97d9e1412 42670055 main/binary-armel/Packages
+ 2a61b30970605b648e20176a05e5f8dd 10362991 main/binary-armel/Packages.gz
+ 6639382d8d01f82052b2f273dcb74e5a 7627288 main/binary-armel/Packages.xz
+ cd7a385b4f9ec5b88fd51334b1ecc182 116 main/binary-armel/Release
+ ce6c22b632cf57f95711899535ee8baa 43208104 main/binary-armhf/Packages
+ ed5ddf82b8c0d6b24381425c0ae1690f 10466710 main/binary-armhf/Packages.gz
+ 7838bb1df385f65d3dde36b902fc4c83 7697896 main/binary-armhf/Packages.xz
+ 71dc245cf6acffd9d84dc4e0c6dfefd7 116 main/binary-armhf/Release
+ c1901bc36e2e0af45f9181d89d99bf33 44343034 main/binary-i386/Packages
+ 568f8488b9331ef92986036b6b0e9433 10688157 main/binary-i386/Packages.gz
+ afbccdbb97f95e2fc05fd275b0ef944b 7863200 main/binary-i386/Packages.xz
+ a61c08021d5e3c5cb8342cc89b4a5327 115 main/binary-i386/Release
+ 0f30136ccdeebe351fd76cddec0a36a7 42557231 main/binary-mips/Packages
+ 8041fb6f7ed0b30c3ef4f49b0f0419fc 10346394 main/binary-mips/Packages.gz
+ 5fd6c02578b6e2601b5af388b76ec0c9 7612396 main/binary-mips/Packages.xz
+ 9c0910db326874db3e6184c362dd10b7 115 main/binary-mips/Release
+ 7930f45053524f18b5bc0635c7015174 42846249 main/binary-mips64el/Packages
+ 9d03ab2e18a79590436d5c1e3db30020 10373188 main/binary-mips64el/Packages.gz
+ 5087845b4bd1c3f1f99fd9596eefd1a4 7636864 main/binary-mips64el/Packages.xz
+ 93e21d97b9f854d2c028389799a8cdd4 119 main/binary-mips64el/Release
+ 7301d9b4a2bc9ae31db035006116ead7 43000527 main/binary-mipsel/Packages
+ 22788acdf68c11251fa487542d530310 10412166 main/binary-mipsel/Packages.gz
+ 0fe070a4e4cd5ce9a7662927419e1a36 7659328 main/binary-mipsel/Packages.xz
+ 489ffe3ae830b933e033b4aa92a9e593 117 main/binary-mipsel/Release
+ 3c8882493245813c9417af085567c824 43280940 main/binary-ppc64el/Packages
+ 91ef02584aa623ef1b4f1f4c33437d9a 10455452 main/binary-ppc64el/Packages.gz
+ 45ffbc0a18c7b7b36f4d625ef51d1714 7692576 main/binary-ppc64el/Packages.xz
+ 6791cb55dcbce2c6025f505de0bbe19d 118 main/binary-ppc64el/Release
+ 4b05fdf6bfd32738b7dd61d5a7a67277 42631824 main/binary-s390x/Packages
+ 29de43d4f62e8ce0553e2db8d6630565 10361868 main/binary-s390x/Packages.gz
+ 9f42b63d928857c1ee46fdb64814872e 7623224 main/binary-s390x/Packages.xz
+ 2266e386bba07fde1acaac2a5eacff13 116 main/binary-s390x/Release
+ 3c7838ecfb2a711692e457ac86d64924 63142 main/debian-installer/binary-all/Packages
+ 25349cd6dfc4f1c81701888a2ef14994 17278 main/debian-installer/binary-all/Packages.gz
+ f543df84a8473128d2eda978516544da 15132 main/debian-installer/binary-all/Packages.xz
+ 8591eb3bd82bade7901c90592c82e146 114 main/debian-installer/binary-all/Release
+ 0fad80ac57eb694714875481a8c376d2 271411 main/debian-installer/binary-amd64/Packages
+ f203e2d43cb0cd85ab67d6b604378b99 66996 main/debian-installer/binary-amd64/Packages.gz
+ b0a4c2652c8729d27ec07421ac5abbe6 55500 main/debian-installer/binary-amd64/Packages.xz
+ 88b62a196e01cd813c8b8162980c4a0d 116 main/debian-installer/binary-amd64/Release
+ d5bfb66a68c8a9e92a966a5e0100b6c3 255344 main/debian-installer/binary-arm64/Packages
+ 458325cdd4c467228035622c3256786a 63881 main/debian-installer/binary-arm64/Packages.gz
+ 61615f501e9c3902132e8f106751e7df 53440 main/debian-installer/binary-arm64/Packages.xz
+ 322314350e3c6c9b0925ff36223138c7 116 main/debian-installer/binary-arm64/Release
+ 06da1163d43690b260b5e0ebee608e22 248135 main/debian-installer/binary-armel/Packages
+ 3e0a6e691c2be246843a54d8154e1bee 63564 main/debian-installer/binary-armel/Packages.gz
+ c1183a890893f574330d89133bde453f 52876 main/debian-installer/binary-armel/Packages.xz
+ cd7a385b4f9ec5b88fd51334b1ecc182 116 main/debian-installer/binary-armel/Release
+ bfc524d4617e155f1a5fcf0b5acdfea9 251177 main/debian-installer/binary-armhf/Packages
+ 4d4968b169a5151901ef613ea5fcaa5c 63799 main/debian-installer/binary-armhf/Packages.gz
+ 416cdce4b269142110d05bb20958f0fc 53524 main/debian-installer/binary-armhf/Packages.xz
+ 71dc245cf6acffd9d84dc4e0c6dfefd7 116 main/debian-installer/binary-armhf/Release
+ 21aad5f0edfb71fe916fc4b51523065b 345002 main/debian-installer/binary-i386/Packages
+ c475d3f4c3adccde26ce9d90095771c2 76332 main/debian-installer/binary-i386/Packages.gz
+ c75b2f5fd182162f5b069949f6083241 63380 main/debian-installer/binary-i386/Packages.xz
+ a61c08021d5e3c5cb8342cc89b4a5327 115 main/debian-installer/binary-i386/Release
+ 5b147b519345336240033c5d80b2273f 307351 main/debian-installer/binary-mips/Packages
+ 30f75c24f880d771834c06fa087b6311 71711 main/debian-installer/binary-mips/Packages.gz
+ 02aba1bdc792818f1c84156a709ff97a 59860 main/debian-installer/binary-mips/Packages.xz
+ 9c0910db326874db3e6184c362dd10b7 115 main/debian-installer/binary-mips/Release
+ c0dd5ee95547670d687ecf9f553fcf80 370605 main/debian-installer/binary-mips64el/Packages
+ 7bd6bb429dc4eb9755f4562a9fff24fa 80509 main/debian-installer/binary-mips64el/Packages.gz
+ 33a7b38b849b4de5e6cb9caf89e8333d 66792 main/debian-installer/binary-mips64el/Packages.xz
+ 93e21d97b9f854d2c028389799a8cdd4 119 main/debian-installer/binary-mips64el/Release
+ cca5f3369f5b9db863673efd97f34ce2 370026 main/debian-installer/binary-mipsel/Packages
+ c5a4d2b92f959cc2e69341de92c1aa92 80667 main/debian-installer/binary-mipsel/Packages.gz
+ b2679b0f864321d44f673ad9cb18cbe9 66912 main/debian-installer/binary-mipsel/Packages.xz
+ 489ffe3ae830b933e033b4aa92a9e593 117 main/debian-installer/binary-mipsel/Release
+ 5d929059d701cc70a9d7a9040ef49d48 254867 main/debian-installer/binary-ppc64el/Packages
+ fd7768f30e134817aab9e9d473240084 64252 main/debian-installer/binary-ppc64el/Packages.gz
+ 0aefa3b052e9c19aa9e2db179f9e3a2a 53500 main/debian-installer/binary-ppc64el/Packages.xz
+ 6791cb55dcbce2c6025f505de0bbe19d 118 main/debian-installer/binary-ppc64el/Release
+ b56c5642efcf04e986e8e2bb4dcebe4b 225602 main/debian-installer/binary-s390x/Packages
+ 47c6bc193e00dbfaca0706813adf87e0 59739 main/debian-installer/binary-s390x/Packages.gz
+ 69e66466ff21fbc925455d9f93d9e413 49824 main/debian-installer/binary-s390x/Packages.xz
+ 2266e386bba07fde1acaac2a5eacff13 116 main/debian-installer/binary-s390x/Release
+ b96f87c0a5d7b5963acaf8adb09075ea 17636009 main/dep11/Components-amd64.yml
+ d990e48fd695b2267feccb1ea63acdd6 5882693 main/dep11/Components-amd64.yml.gz
+ 4e9b9a054e5f62e9701a2a30bdf464b0 3807040 main/dep11/Components-amd64.yml.xz
+ 10a265ac5e8364852e0fb7f0bdd2fe90 17503252 main/dep11/Components-arm64.yml
+ fdc60299aa57d047aac6019e2d4b4d0c 5850429 main/dep11/Components-arm64.yml.gz
+ b39cf9a70365ba39f190e5996a1d95c7 3781052 main/dep11/Components-arm64.yml.xz
+ 7a29c827ab47be6214b1ea6950cdabce 17108464 main/dep11/Components-armel.yml
+ 1df880b8342a9a90c297d5a6d8c67b2b 5710419 main/dep11/Components-armel.yml.gz
+ 7ea81e0b33e39311b7492288ab536d22 3694524 main/dep11/Components-armel.yml.xz
+ 588eeca71f4fc4e38d69a28b609a1074 17414118 main/dep11/Components-armhf.yml
+ 79ad6138562c9e2458e6071a566d98e0 5813436 main/dep11/Components-armhf.yml.gz
+ eb357a2ffaeed4fd7269066dd5c06ecd 3761128 main/dep11/Components-armhf.yml.xz
+ f7394bafe6bcad481e532f987cd3332c 17595585 main/dep11/Components-i386.yml
+ bd92af3fd5c952b2d5414967adb2ef4c 5873032 main/dep11/Components-i386.yml.gz
+ 4049f174864f75c554ad1bbba90f39f3 3798312 main/dep11/Components-i386.yml.xz
+ a5bb60f71b930ac854b2a8350ccd53a5 17138095 main/dep11/Components-mips64el.yml
+ 451219859dd3cbe7bbb18fc300eb88dc 5721423 main/dep11/Components-mips64el.yml.gz
+ 5c6f25c2d6efefdd50ddbf3701c1a3f3 3700172 main/dep11/Components-mips64el.yml.xz
+ 706e7d78873ac1b40fbf969f8df21076 17193596 main/dep11/Components-ppc64el.yml
+ a17d1417ee23a62c0bd0f5c38785c3cf 5735595 main/dep11/Components-ppc64el.yml.gz
+ 5eccbad47150c50b67f32e954850f238 3712596 main/dep11/Components-ppc64el.yml.xz
+ 4034ba73954352a1d16dc8956087203b 16895854 main/dep11/Components-s390x.yml
+ 7f81bb7a4ef589b3784a0f891ada1020 5630817 main/dep11/Components-s390x.yml.gz
+ 92973453ea935493359f1ccb54666668 3649696 main/dep11/Components-s390x.yml.xz
+ cef7f6b822b761933cad9e81fc312d65 14067712 main/dep11/icons-128x128.tar
+ af3a6676c322b21db078c1ecb19dd148 12784398 main/dep11/icons-128x128.tar.gz
+ cd6bcfcb05ca143a96afd0dc23a60a0d 5092352 main/dep11/icons-48x48.tar
+ d29d763d0dc55a3fba88f6ac32e7dbec 3769936 main/dep11/icons-48x48.tar.gz
+ aa6fe219908873a01f9a75335cd2e834 9509888 main/dep11/icons-64x64.tar
+ 8c9f7501ca2a85480c6f03eb84eb864c 7595526 main/dep11/icons-64x64.tar.gz
+ fa47006302dbafc5528170cb894e89ee 8583 main/i18n/Translation-ca
+ f9414bf874a93cef66aea7c000e783d2 3510 main/i18n/Translation-ca.bz2
+ 07bd7cac4615a58b744fef7bdc3be27a 1366172 main/i18n/Translation-cs
+ 768f92c13031a48e1932eccc1f95e253 364196 main/i18n/Translation-cs.bz2
+ 592a2601d97924c29d90cb73d1dc5766 19338879 main/i18n/Translation-da
+ 7e827c691840e04a11603253eb7fe918 4250838 main/i18n/Translation-da.bz2
+ 3716384a1cf1221f3492b4622de3c0c7 7372339 main/i18n/Translation-de
+ 59ab9917bbf0b4ab15e63ff73c2ebd87 1654058 main/i18n/Translation-de.bz2
+ a344219bf0eec9139d5270017ecfceee 1347 main/i18n/Translation-de_DE
+ 0fe0725f74bb5249f15f30ce965142d5 830 main/i18n/Translation-de_DE.bz2
+ b496cd1efbf91a6ba429e09a5c98fcbe 6733 main/i18n/Translation-el
+ 42887a67e38f7fd8604921849398765a 1616 main/i18n/Translation-el.bz2
+ 7cafa89f86b953d71eb6f51d35d2ed28 29377800 main/i18n/Translation-en
+ ef5614f6b84398a2d096d551c08ab57b 5970967 main/i18n/Translation-en.bz2
+ a8b606406158411b47570cdb3b266d4c 2704 main/i18n/Translation-eo
+ 371019718dd9f3a97f3c2095d1c989f6 1353 main/i18n/Translation-eo.bz2
+ cd993e966e0f1eacdc856fa568a6f676 1386165 main/i18n/Translation-es
+ aab2ac38999cd83a7ce8e76f2a9cb770 334639 main/i18n/Translation-es.bz2
+ c46ea462e3be8ad325f5cf28f7cd7941 12877 main/i18n/Translation-eu
+ 44a5a9553ab64cee611cfb29eb5fe405 4940 main/i18n/Translation-eu.bz2
+ 2edeb5b568cab2b35bcd9da365a3700a 292391 main/i18n/Translation-fi
+ 3e7a9339ea3232a762e557dd0ecdd9eb 83317 main/i18n/Translation-fi.bz2
+ 998e60f465b03be25eaf2b2430685f67 12076413 main/i18n/Translation-fr
+ 35e89f49cdfaa179e552aee1d67c5cdb 2478327 main/i18n/Translation-fr.bz2
+ f9914db645538b20b96244e34733d47b 19295 main/i18n/Translation-hr
+ 91971a211da20a6f48c1394960fa934a 5467 main/i18n/Translation-hr.bz2
+ 195fb7b7be30472752d494b1726147c5 76824 main/i18n/Translation-hu
+ 414de05380433cb378a222a880a7868d 25899 main/i18n/Translation-hu.bz2
+ 84c49b63d2f806c0bfbab936950f851f 5807 main/i18n/Translation-id
+ 2b1519b50480d327bd6f74c2c81d7391 2493 main/i18n/Translation-id.bz2
+ 512e8b23f1e9feb9d5b8c6b79845479d 24318841 main/i18n/Translation-it
+ c35983d50552f4406e01b59187cb276d 4853002 main/i18n/Translation-it.bz2
+ 567dca02563164ed6abd0d61bd2d599b 4944611 main/i18n/Translation-ja
+ 668439d1aafdda8d00c1419ac67963cd 892190 main/i18n/Translation-ja.bz2
+ dae7e1832c27c8588dfa2998f1827d27 14066 main/i18n/Translation-km
+ a641fcf269b0fc95e02f12a24b470180 2744 main/i18n/Translation-km.bz2
+ 635c3c2728a5c873e46eeb020b73c3ef 2085975 main/i18n/Translation-ko
+ 9ddf2c44356facb76517ce3043f5f2d1 467722 main/i18n/Translation-ko.bz2
+ d41d8cd98f00b204e9800998ecf8427e 0 main/i18n/Translation-ml
+ 4059d198768f9f8dc9372dc1c54bc3c3 14 main/i18n/Translation-ml.bz2
+ 255f4e34b3f284a3c0292d110f30331d 2030 main/i18n/Translation-nb
+ 623c4efc2ad76f7f357e216a5064fa8e 1188 main/i18n/Translation-nb.bz2
+ f0da060304e2f6e0d57ba4be8cf4da7e 191719 main/i18n/Translation-nl
+ ca93be5b1833ed6011c75a841fc3aec0 53879 main/i18n/Translation-nl.bz2
+ 05ad8e22643158048836514265ccc683 2280270 main/i18n/Translation-pl
+ 0b2ffcea3fc954994fffabcd58d96d17 543734 main/i18n/Translation-pl.bz2
+ 7221ef57304e7d1c0b597ebfdf02ff72 1228959 main/i18n/Translation-pt
+ 85262e79582e4f52f3dd14e07e968e91 309452 main/i18n/Translation-pt.bz2
+ 35188d93caf5abc81b6f413a13ec1bba 2848622 main/i18n/Translation-pt_BR
+ 54caf5f17bd856e6e5447af20f72c1a9 683144 main/i18n/Translation-pt_BR.bz2
+ 60f08a8c65af4e8895cf8c53d1e35b98 2710 main/i18n/Translation-ro
+ a998260e0995f073174d9e0d1fb65a9f 1374 main/i18n/Translation-ro.bz2
+ f1498d8198317d17d9f79f1d7b59301a 3167815 main/i18n/Translation-ru
+ a272511716d6272bc732457da7e1347d 515734 main/i18n/Translation-ru.bz2
+ 808aa9b0e2051b46af7f79f71d7bab78 7171062 main/i18n/Translation-sk
+ 52c4c9dc0a44449efb055b09f24d6164 1545666 main/i18n/Translation-sk.bz2
+ bf2c9b66fd77430a04968a9b055da51d 346061 main/i18n/Translation-sr
+ 9a5e4866948f872593aa7e08074d9f74 63630 main/i18n/Translation-sr.bz2
+ fcab095643b3d06345d1079281264fe9 101310 main/i18n/Translation-sv
+ 919912db6b193f78e8ac2ca5922653a6 32083 main/i18n/Translation-sv.bz2
+ 4c2ec68a3497dcebe5c4350a4506f9bd 16580 main/i18n/Translation-tr
+ 9b0229b1a12dc754d31c40f7bc920f50 5960 main/i18n/Translation-tr.bz2
+ e6163e4fb7ad7efbf7c239807cf5dfe4 3992741 main/i18n/Translation-uk
+ a9380d85f807b3d0d5733220dd823cfb 624098 main/i18n/Translation-uk.bz2
+ 38d0995e8cfd8ec40f26dbd1ec52420f 26441 main/i18n/Translation-vi
+ b9ad5f6391f3ef928a084ee742c1560d 7797 main/i18n/Translation-vi.bz2
+ 7717fa25bd691ec385bddacf42419c9f 2799 main/i18n/Translation-zh
+ b5a4e7e47da47ac7596ed5d72fdeef93 1526 main/i18n/Translation-zh.bz2
+ 95432a86e622f1b36c7f317e52885699 479128 main/i18n/Translation-zh_CN
+ 808905780a670fb77e1670dfd71ca515 125740 main/i18n/Translation-zh_CN.bz2
+ d7a5b7c2ede44aa04ccc804f228268e4 44731 main/i18n/Translation-zh_TW
+ ac968f92b5010547d38ff6daa39ec759 16257 main/i18n/Translation-zh_TW.bz2
+ 9b2bb26c7b19bbfce667875176e7cfd8 56179 main/installer-amd64/20190702+deb10u7/images/MD5SUMS
+ 6fa1248aafe23867f9e7855eb4ac2606 75295 main/installer-amd64/20190702+deb10u7/images/SHA256SUMS
+ ad49f52e91138552068010feebb60e77 56179 main/installer-amd64/20190702/images/MD5SUMS
+ 665f4bf4b34662ff86de8fd00fd228d3 75295 main/installer-amd64/20190702/images/SHA256SUMS
+ 9b2bb26c7b19bbfce667875176e7cfd8 56179 main/installer-amd64/current/images/MD5SUMS
+ 6fa1248aafe23867f9e7855eb4ac2606 75295 main/installer-amd64/current/images/SHA256SUMS
+ e5e74cdc8a0927057ae51d23f93dd404 30751 main/installer-arm64/20190702+deb10u7/images/MD5SUMS
+ 6e8819d7cabcd5baf7efaf2f4f0024fd 42187 main/installer-arm64/20190702+deb10u7/images/SHA256SUMS
+ a39c3a53db0c77f14a14ccbea1537665 30588 main/installer-arm64/20190702/images/MD5SUMS
+ e8187453c5dbd3609bd0d049c4f9f741 41960 main/installer-arm64/20190702/images/SHA256SUMS
+ e5e74cdc8a0927057ae51d23f93dd404 30751 main/installer-arm64/current/images/MD5SUMS
+ 6e8819d7cabcd5baf7efaf2f4f0024fd 42187 main/installer-arm64/current/images/SHA256SUMS
+ 2123d8e0b43a3377d19322b3c0253534 21361 main/installer-armel/20190702+deb10u7/images/MD5SUMS
+ 0575d93e2640eb129edf41b9d3a40cf4 29821 main/installer-armel/20190702+deb10u7/images/SHA256SUMS
+ c1880211395f66276ee1ca7f3d2f894a 21360 main/installer-armel/20190702/images/MD5SUMS
+ 6db724bf214851668085c774a465a3b8 29820 main/installer-armel/20190702/images/SHA256SUMS
+ 2123d8e0b43a3377d19322b3c0253534 21361 main/installer-armel/current/images/MD5SUMS
+ 0575d93e2640eb129edf41b9d3a40cf4 29821 main/installer-armel/current/images/SHA256SUMS
+ dfb1d8853a96d6dc95ff56ae5b814274 53105 main/installer-armhf/20190702+deb10u7/images/MD5SUMS
+ d5b29779d6916cae607662045b118314 76541 main/installer-armhf/20190702+deb10u7/images/SHA256SUMS
+ 6d90c2edd459b920698ab1dd54407f73 51125 main/installer-armhf/20190702/images/MD5SUMS
+ 1219d67ba3ff45a1893c5654ffd19432 73665 main/installer-armhf/20190702/images/SHA256SUMS
+ dfb1d8853a96d6dc95ff56ae5b814274 53105 main/installer-armhf/current/images/MD5SUMS
+ d5b29779d6916cae607662045b118314 76541 main/installer-armhf/current/images/SHA256SUMS
+ 2cd5528c59cdca4ebba6c4c4c2a5bcb3 54808 main/installer-i386/20190702+deb10u7/images/MD5SUMS
+ d0002231f0a34a3a727c196d7038c427 73988 main/installer-i386/20190702+deb10u7/images/SHA256SUMS
+ dacea188c1cceadfc32a29bec71f4f0d 54808 main/installer-i386/20190702/images/MD5SUMS
+ 2a5644e4b648e33cc10b00c8c1d5ef9a 73988 main/installer-i386/20190702/images/SHA256SUMS
+ 2cd5528c59cdca4ebba6c4c4c2a5bcb3 54808 main/installer-i386/current/images/MD5SUMS
+ d0002231f0a34a3a727c196d7038c427 73988 main/installer-i386/current/images/SHA256SUMS
+ 93b8443d6d17fbcb520d98952ef0cac9 417 main/installer-mips/20190702+deb10u7/images/MD5SUMS
+ f5b5f310b0b8713c2158a9bf7ac96edd 717 main/installer-mips/20190702+deb10u7/images/SHA256SUMS
+ 3c235875cd79118928fd772b2e7adb03 415 main/installer-mips/20190702/images/MD5SUMS
+ 95cc8a69ba4524d31598f85d5b316923 715 main/installer-mips/20190702/images/SHA256SUMS
+ 93b8443d6d17fbcb520d98952ef0cac9 417 main/installer-mips/current/images/MD5SUMS
+ f5b5f310b0b8713c2158a9bf7ac96edd 717 main/installer-mips/current/images/SHA256SUMS
+ 645f588e9a19321394cc3e20d2cd65bc 630 main/installer-mips64el/20190702+deb10u7/images/MD5SUMS
+ 860868ad110a424a7b89f938d6fe2e14 1026 main/installer-mips64el/20190702+deb10u7/images/SHA256SUMS
+ d0162ed7d22164b8f62ba46e82386251 627 main/installer-mips64el/20190702/images/MD5SUMS
+ 8582972e189ce6fb33bf758600bfac95 1023 main/installer-mips64el/20190702/images/SHA256SUMS
+ 645f588e9a19321394cc3e20d2cd65bc 630 main/installer-mips64el/current/images/MD5SUMS
+ 860868ad110a424a7b89f938d6fe2e14 1026 main/installer-mips64el/current/images/SHA256SUMS
+ a4d1f9461e4c8fa09379671719a3a8f2 630 main/installer-mipsel/20190702+deb10u7/images/MD5SUMS
+ fae6f9fdbf6ab12af8140333f831d1fd 1026 main/installer-mipsel/20190702+deb10u7/images/SHA256SUMS
+ 445d014a79fe490d98b0f38ad42cdc85 627 main/installer-mipsel/20190702/images/MD5SUMS
+ 2b56aa2f2d7dbe41123c5397b963811c 1023 main/installer-mipsel/20190702/images/SHA256SUMS
+ a4d1f9461e4c8fa09379671719a3a8f2 630 main/installer-mipsel/current/images/MD5SUMS
+ fae6f9fdbf6ab12af8140333f831d1fd 1026 main/installer-mipsel/current/images/SHA256SUMS
+ dc3241d484c4d251b79fd22e1da04baa 576 main/installer-ppc64el/20190702+deb10u7/images/MD5SUMS
+ 3f44bb61d930081f40ab60ce364c0553 972 main/installer-ppc64el/20190702+deb10u7/images/SHA256SUMS
+ 70e6905a28fcbec961dbf0c6a67f3d29 576 main/installer-ppc64el/20190702/images/MD5SUMS
+ 30f10e9cdfe4c711ac35c1b82d685848 972 main/installer-ppc64el/20190702/images/SHA256SUMS
+ dc3241d484c4d251b79fd22e1da04baa 576 main/installer-ppc64el/current/images/MD5SUMS
+ 3f44bb61d930081f40ab60ce364c0553 972 main/installer-ppc64el/current/images/SHA256SUMS
+ 0d60e8b92e6ef957dd933ac9e1b00bbb 374 main/installer-s390x/20190702+deb10u7/images/MD5SUMS
+ 1dfe2cd45c5437301bacdeec0e5c7b27 674 main/installer-s390x/20190702+deb10u7/images/SHA256SUMS
+ d7f3cc9a35e19b5f133172e53b5e1c6b 374 main/installer-s390x/20190702/images/MD5SUMS
+ 1888cbe42497ea0655283c32185d8c36 674 main/installer-s390x/20190702/images/SHA256SUMS
+ 0d60e8b92e6ef957dd933ac9e1b00bbb 374 main/installer-s390x/current/images/MD5SUMS
+ 1dfe2cd45c5437301bacdeec0e5c7b27 674 main/installer-s390x/current/images/SHA256SUMS
+ 71a791f193c5f693b43448eee03bee6c 117 main/source/Release
+ 983b067131f254c933abc52ad1745d42 40374106 main/source/Sources
+ 19b4ee1b62ddabd22696da853ac30d87 10410977 main/source/Sources.gz
+ d50e5ad0674a3efce55fa7e94555435f 7841528 main/source/Sources.xz
+ b8f91d3271b9c6bc46bed2bae4239757 15041698 non-free/Contents-amd64
+ 5bfcb75b52642fe9308bfc40813a7681 860518 non-free/Contents-amd64.gz
+ a3331fd5c248b55677aa0388a70ce4a7 13915102 non-free/Contents-arm64
+ 77af7853538fcb331d3821a6e5c6df16 772610 non-free/Contents-arm64.gz
+ f65f61e066c787eae0cf35cbff3907b3 13907158 non-free/Contents-armel
+ 9fe12f9bb1911950e74f8e35c59b83ea 772003 non-free/Contents-armel.gz
+ 5977370fa511bf1788aeb8c14be11d1d 14007145 non-free/Contents-armhf
+ 4eaa14fceb77c785e35cfcb038680aee 779131 non-free/Contents-armhf.gz
+ b322e71b43866b8354011b862a66a0e4 14178942 non-free/Contents-i386
+ 81036b2b13b50b0fc879b7ccb87c709e 794908 non-free/Contents-i386.gz
+ 2983601bda56554bf0a9a95154c05d6c 13903213 non-free/Contents-mips
+ 9b2a8b0f473be6d1d0c55e56410924e4 771624 non-free/Contents-mips.gz
+ 4dd4444215b86bca626419fe6ff0ffd2 13909546 non-free/Contents-mips64el
+ c2ac0c19cbef61dfa447084d524c610f 771712 non-free/Contents-mips64el.gz
+ 59b0b55aa5af13dda5f75e5cca4fb16e 13910453 non-free/Contents-mipsel
+ d1e167d2999198e37e3799dffd301037 771959 non-free/Contents-mipsel.gz
+ 50015067db7d5e5cf48e1ecfa6646b72 14154515 non-free/Contents-ppc64el
+ 0012e7e30031d8e28182d15783fee827 793531 non-free/Contents-ppc64el.gz
+ 38ea6f764cb7555c461d2e2eece3edcc 13903234 non-free/Contents-s390x
+ f0f38accba1c396eb1aa7d24f9be18b2 771491 non-free/Contents-s390x.gz
+ 2e5aaf58d662f9ba14cb6c044350739d 8556010 non-free/Contents-source
+ 0362ff68d659dc8744d617fe21c13433 884017 non-free/Contents-source.gz
d41d8cd98f00b204e9800998ecf8427e 0 non-free/Contents-udeb-amd64
4a4dd3598707603b3f76a2378a4504aa 20 non-free/Contents-udeb-amd64.gz
+ d41d8cd98f00b204e9800998ecf8427e 0 non-free/Contents-udeb-arm64
+ 4a4dd3598707603b3f76a2378a4504aa 20 non-free/Contents-udeb-arm64.gz
d41d8cd98f00b204e9800998ecf8427e 0 non-free/Contents-udeb-armel
4a4dd3598707603b3f76a2378a4504aa 20 non-free/Contents-udeb-armel.gz
d41d8cd98f00b204e9800998ecf8427e 0 non-free/Contents-udeb-armhf
4a4dd3598707603b3f76a2378a4504aa 20 non-free/Contents-udeb-armhf.gz
d41d8cd98f00b204e9800998ecf8427e 0 non-free/Contents-udeb-i386
4a4dd3598707603b3f76a2378a4504aa 20 non-free/Contents-udeb-i386.gz
- d41d8cd98f00b204e9800998ecf8427e 0 non-free/Contents-udeb-ia64
- 4a4dd3598707603b3f76a2378a4504aa 20 non-free/Contents-udeb-ia64.gz
- d41d8cd98f00b204e9800998ecf8427e 0 non-free/Contents-udeb-kfreebsd-amd64
- 4a4dd3598707603b3f76a2378a4504aa 20 non-free/Contents-udeb-kfreebsd-amd64.gz
- d41d8cd98f00b204e9800998ecf8427e 0 non-free/Contents-udeb-kfreebsd-i386
- 4a4dd3598707603b3f76a2378a4504aa 20 non-free/Contents-udeb-kfreebsd-i386.gz
d41d8cd98f00b204e9800998ecf8427e 0 non-free/Contents-udeb-mips
4a4dd3598707603b3f76a2378a4504aa 20 non-free/Contents-udeb-mips.gz
+ d41d8cd98f00b204e9800998ecf8427e 0 non-free/Contents-udeb-mips64el
+ 4a4dd3598707603b3f76a2378a4504aa 20 non-free/Contents-udeb-mips64el.gz
d41d8cd98f00b204e9800998ecf8427e 0 non-free/Contents-udeb-mipsel
4a4dd3598707603b3f76a2378a4504aa 20 non-free/Contents-udeb-mipsel.gz
- d41d8cd98f00b204e9800998ecf8427e 0 non-free/Contents-udeb-powerpc
- 4a4dd3598707603b3f76a2378a4504aa 20 non-free/Contents-udeb-powerpc.gz
- d41d8cd98f00b204e9800998ecf8427e 0 non-free/Contents-udeb-s390
- 4a4dd3598707603b3f76a2378a4504aa 20 non-free/Contents-udeb-s390.gz
+ d41d8cd98f00b204e9800998ecf8427e 0 non-free/Contents-udeb-ppc64el
+ 4a4dd3598707603b3f76a2378a4504aa 20 non-free/Contents-udeb-ppc64el.gz
d41d8cd98f00b204e9800998ecf8427e 0 non-free/Contents-udeb-s390x
4a4dd3598707603b3f76a2378a4504aa 20 non-free/Contents-udeb-s390x.gz
- d41d8cd98f00b204e9800998ecf8427e 0 non-free/Contents-udeb-sparc
- 4a4dd3598707603b3f76a2378a4504aa 20 non-free/Contents-udeb-sparc.gz
- 8eb9ba9862dde2537fb0018ed61ddbeb 20438 non-free/binary-all/Packages
- be622b92c1a0dea9ea8ba70854b02804 5570 non-free/binary-all/Packages.bz2
- 562351c676a9077d80bcfb38a1ddc4f5 5805 non-free/binary-all/Packages.gz
- 8a053a952d0cf77ea952db25ac7ccba4 167 non-free/binary-all/Release
- dd95c9ca41e9595bdf8c8ad76e8a0ef3 115902 non-free/binary-amd64/Packages
- 3e56b00749f7747a25a798ecee3af5b7 21633 non-free/binary-amd64/Packages.bz2
- 160af7517babc555f7e500c60a6129fe 4456 non-free/binary-amd64/Packages.diff/Index
- 1ab0dad43dc060877c23bd4dd6450d19 25323 non-free/binary-amd64/Packages.gz
- c61296e8d0af003c52ef9680912c9da6 169 non-free/binary-amd64/Release
- 8eb9ba9862dde2537fb0018ed61ddbeb 20438 non-free/binary-armel/Packages
- be622b92c1a0dea9ea8ba70854b02804 5570 non-free/binary-armel/Packages.bz2
- 562351c676a9077d80bcfb38a1ddc4f5 5805 non-free/binary-armel/Packages.gz
- fe6d4e9f72edbde044d5001a1bb3adb2 169 non-free/binary-armel/Release
- 8eb9ba9862dde2537fb0018ed61ddbeb 20438 non-free/binary-armhf/Packages
- be622b92c1a0dea9ea8ba70854b02804 5570 non-free/binary-armhf/Packages.bz2
- 562351c676a9077d80bcfb38a1ddc4f5 5805 non-free/binary-armhf/Packages.gz
- 4d0c6feeab7eb8a414cff2d0bdbb511d 169 non-free/binary-armhf/Release
- 1cc37632bfa4049cbc2bb3048b7ca01f 123415 non-free/binary-i386/Packages
- 53161d2efe5bef07e2f161ef078961c4 22755 non-free/binary-i386/Packages.bz2
- e44d5142c8833f9bbe59ea3a34a68140 4456 non-free/binary-i386/Packages.diff/Index
- 527d6ec0554d20069949ba5beb2d746d 26726 non-free/binary-i386/Packages.gz
- 796ee8e87ab70a4e6011a71d86882bbd 168 non-free/binary-i386/Release
- 8eb9ba9862dde2537fb0018ed61ddbeb 20438 non-free/binary-ia64/Packages
- be622b92c1a0dea9ea8ba70854b02804 5570 non-free/binary-ia64/Packages.bz2
- 562351c676a9077d80bcfb38a1ddc4f5 5805 non-free/binary-ia64/Packages.gz
- 9f62666ae15132e08591ffd2c4ee9aa3 168 non-free/binary-ia64/Release
- 8eb9ba9862dde2537fb0018ed61ddbeb 20438 non-free/binary-kfreebsd-amd64/Packages
- be622b92c1a0dea9ea8ba70854b02804 5570 non-free/binary-kfreebsd-amd64/Packages.bz2
- 562351c676a9077d80bcfb38a1ddc4f5 5805 non-free/binary-kfreebsd-amd64/Packages.gz
- 31d49354b5c24e5d06b038c08098f9d2 178 non-free/binary-kfreebsd-amd64/Release
- 8eb9ba9862dde2537fb0018ed61ddbeb 20438 non-free/binary-kfreebsd-i386/Packages
- be622b92c1a0dea9ea8ba70854b02804 5570 non-free/binary-kfreebsd-i386/Packages.bz2
- 562351c676a9077d80bcfb38a1ddc4f5 5805 non-free/binary-kfreebsd-i386/Packages.gz
- 2dc5e7adb20a129fdfb2a4e9b5117fd0 177 non-free/binary-kfreebsd-i386/Release
- 8eb9ba9862dde2537fb0018ed61ddbeb 20438 non-free/binary-mips/Packages
- be622b92c1a0dea9ea8ba70854b02804 5570 non-free/binary-mips/Packages.bz2
- 562351c676a9077d80bcfb38a1ddc4f5 5805 non-free/binary-mips/Packages.gz
- 76895aaaf47189eb842696e1df859788 168 non-free/binary-mips/Release
- 8eb9ba9862dde2537fb0018ed61ddbeb 20438 non-free/binary-mipsel/Packages
- be622b92c1a0dea9ea8ba70854b02804 5570 non-free/binary-mipsel/Packages.bz2
- 562351c676a9077d80bcfb38a1ddc4f5 5805 non-free/binary-mipsel/Packages.gz
- e9c22c78683f205aba569eaf765d9a61 170 non-free/binary-mipsel/Release
- 8eb9ba9862dde2537fb0018ed61ddbeb 20438 non-free/binary-powerpc/Packages
- be622b92c1a0dea9ea8ba70854b02804 5570 non-free/binary-powerpc/Packages.bz2
- 562351c676a9077d80bcfb38a1ddc4f5 5805 non-free/binary-powerpc/Packages.gz
- 3ccfaf3f206f185319481a05aeb66dfd 171 non-free/binary-powerpc/Release
- 8eb9ba9862dde2537fb0018ed61ddbeb 20438 non-free/binary-s390/Packages
- be622b92c1a0dea9ea8ba70854b02804 5570 non-free/binary-s390/Packages.bz2
- 562351c676a9077d80bcfb38a1ddc4f5 5805 non-free/binary-s390/Packages.gz
- d9f6ba9e051b36f235a4b338de5ce6bf 168 non-free/binary-s390/Release
- 8eb9ba9862dde2537fb0018ed61ddbeb 20438 non-free/binary-s390x/Packages
- be622b92c1a0dea9ea8ba70854b02804 5570 non-free/binary-s390x/Packages.bz2
- 562351c676a9077d80bcfb38a1ddc4f5 5805 non-free/binary-s390x/Packages.gz
- 285e0659a707afb5d95b1205ce40c8c6 169 non-free/binary-s390x/Release
- 8eb9ba9862dde2537fb0018ed61ddbeb 20438 non-free/binary-sparc/Packages
- be622b92c1a0dea9ea8ba70854b02804 5570 non-free/binary-sparc/Packages.bz2
- 562351c676a9077d80bcfb38a1ddc4f5 5805 non-free/binary-sparc/Packages.gz
- 8f60e8f7687fb0ca009a517dacbf2b90 169 non-free/binary-sparc/Release
+ b5b2645622d140639406cca66fa720e1 197436 non-free/binary-all/Packages
+ c59da68be798ad1ecc32829540bf2902 53089 non-free/binary-all/Packages.gz
+ ac57d0a85d3cf4e8b757f5dfe1e00488 44620 non-free/binary-all/Packages.xz
+ 8d55289349e24a8bdfbfafe3b1a0250e 118 non-free/binary-all/Release
+ b97118b8ca8c4cdd476cc78efb0c3992 447124 non-free/binary-amd64/Packages
+ dd04ef2075209444a00107f39ea3dfb3 106655 non-free/binary-amd64/Packages.gz
+ d4ae25506e8a3c5df30e92fc28b16264 87652 non-free/binary-amd64/Packages.xz
+ cfc520362a18820be3cd7862f6027fee 120 non-free/binary-amd64/Release
+ 18e14e676b624666292af151aa938fa6 238804 non-free/binary-arm64/Packages
+ d12395ffaf8206752d301b41696f8028 64350 non-free/binary-arm64/Packages.gz
+ ba3dd6978604061d023096b3eddf1ca4 53832 non-free/binary-arm64/Packages.xz
+ a6294408159c637f9b38048279fd7d14 120 non-free/binary-arm64/Release
+ 010e44805b42fd032fa2375f5f43d61b 236032 non-free/binary-armel/Packages
+ 4f00fdde79f2cc2a5c7338d0b976c0a4 63889 non-free/binary-armel/Packages.gz
+ e921a211b8560013c303ebb6315c018b 53416 non-free/binary-armel/Packages.xz
+ 2eea6a5059d2ef1ee1046c3091d833b3 120 non-free/binary-armel/Release
+ f7b5e14b165078895634dece2af7b07c 299334 non-free/binary-armhf/Packages
+ 422f92d043cfa73a9fa286111b7e6ab1 74486 non-free/binary-armhf/Packages.gz
+ a9cad2f0a98986cf4c6bae64cc36ec5d 62040 non-free/binary-armhf/Packages.xz
+ 32cf11659508790b337c3468fc9a4f28 120 non-free/binary-armhf/Release
+ ec96c68576a2413fcdbbc3f1a405d5d5 383285 non-free/binary-i386/Packages
+ a0e482c06bfe479eb1366bb29d88a79c 92741 non-free/binary-i386/Packages.gz
+ 39327445fa6e2385c5a20d4a0268c25c 76156 non-free/binary-i386/Packages.xz
+ f5f56c78547ee0aafa74d9466afa52ce 119 non-free/binary-i386/Release
+ 72b0f5996f53c8f73af875f8c4df4b83 233779 non-free/binary-mips/Packages
+ bb9e4bc491866963c9e0a83e015423d4 63210 non-free/binary-mips/Packages.gz
+ d8f84846d85a59ca3646c9bdde7b8f2f 52832 non-free/binary-mips/Packages.xz
+ 9fcd7ad8f36e26a3576613c36027f34f 119 non-free/binary-mips/Release
+ df87cf7f9cd1267381ade89bb48c715c 235974 non-free/binary-mips64el/Packages
+ 246a8ebebf76c613606d76a55fa436a8 63464 non-free/binary-mips64el/Packages.gz
+ 53c61fd14242c25877d8aa072b41303d 53076 non-free/binary-mips64el/Packages.xz
+ 9fdd17f52a2d64af876aaedbb41648d7 123 non-free/binary-mips64el/Release
+ e5769c4e7edc2a378b687a30b7176e7b 236623 non-free/binary-mipsel/Packages
+ 06fe3d5f72705a11a33e8815d2949387 63967 non-free/binary-mipsel/Packages.gz
+ 812f3ea565a7ad841c5d1d36455265ac 53380 non-free/binary-mipsel/Packages.xz
+ 1ec715c5db7cfce83942a050b0a1e676 121 non-free/binary-mipsel/Release
+ 14ce67f1d61959ead426856821806535 258455 non-free/binary-ppc64el/Packages
+ 6687a328ae0daf5ed56f141b81a4bb32 67734 non-free/binary-ppc64el/Packages.gz
+ f8ab4bdeeeb0265955e2a956ba53342a 56708 non-free/binary-ppc64el/Packages.xz
+ 310d2892affa74c2f75a93aafeb55a2c 122 non-free/binary-ppc64el/Release
+ 671b34215da3fe5a3c88dfdcd5e7f790 233878 non-free/binary-s390x/Packages
+ 374177044aac480900f3bdac57919608 62973 non-free/binary-s390x/Packages.gz
+ 3040e2bbe7fa20ab04e374d2518d437d 52796 non-free/binary-s390x/Packages.xz
+ 152733f6083e0b5b59c5b86bfd32133c 120 non-free/binary-s390x/Release
d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-all/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 non-free/debian-installer/binary-all/Packages.bz2
4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-all/Packages.gz
- 8a053a952d0cf77ea952db25ac7ccba4 167 non-free/debian-installer/binary-all/Release
+ 8dc5aea5b03dff8595f096f9e368e888 32 non-free/debian-installer/binary-all/Packages.xz
+ 8d55289349e24a8bdfbfafe3b1a0250e 118 non-free/debian-installer/binary-all/Release
d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-amd64/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 non-free/debian-installer/binary-amd64/Packages.bz2
4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-amd64/Packages.gz
- c61296e8d0af003c52ef9680912c9da6 169 non-free/debian-installer/binary-amd64/Release
+ 8dc5aea5b03dff8595f096f9e368e888 32 non-free/debian-installer/binary-amd64/Packages.xz
+ cfc520362a18820be3cd7862f6027fee 120 non-free/debian-installer/binary-amd64/Release
+ d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-arm64/Packages
+ 4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-arm64/Packages.gz
+ 8dc5aea5b03dff8595f096f9e368e888 32 non-free/debian-installer/binary-arm64/Packages.xz
+ a6294408159c637f9b38048279fd7d14 120 non-free/debian-installer/binary-arm64/Release
d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-armel/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 non-free/debian-installer/binary-armel/Packages.bz2
4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-armel/Packages.gz
- fe6d4e9f72edbde044d5001a1bb3adb2 169 non-free/debian-installer/binary-armel/Release
+ 8dc5aea5b03dff8595f096f9e368e888 32 non-free/debian-installer/binary-armel/Packages.xz
+ 2eea6a5059d2ef1ee1046c3091d833b3 120 non-free/debian-installer/binary-armel/Release
d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-armhf/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 non-free/debian-installer/binary-armhf/Packages.bz2
4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-armhf/Packages.gz
- 4d0c6feeab7eb8a414cff2d0bdbb511d 169 non-free/debian-installer/binary-armhf/Release
+ 8dc5aea5b03dff8595f096f9e368e888 32 non-free/debian-installer/binary-armhf/Packages.xz
+ 32cf11659508790b337c3468fc9a4f28 120 non-free/debian-installer/binary-armhf/Release
d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-i386/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 non-free/debian-installer/binary-i386/Packages.bz2
4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-i386/Packages.gz
- 796ee8e87ab70a4e6011a71d86882bbd 168 non-free/debian-installer/binary-i386/Release
- d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-ia64/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 non-free/debian-installer/binary-ia64/Packages.bz2
- 4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-ia64/Packages.gz
- 9f62666ae15132e08591ffd2c4ee9aa3 168 non-free/debian-installer/binary-ia64/Release
- d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-kfreebsd-amd64/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 non-free/debian-installer/binary-kfreebsd-amd64/Packages.bz2
- 4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-kfreebsd-amd64/Packages.gz
- 31d49354b5c24e5d06b038c08098f9d2 178 non-free/debian-installer/binary-kfreebsd-amd64/Release
- d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-kfreebsd-i386/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 non-free/debian-installer/binary-kfreebsd-i386/Packages.bz2
- 4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-kfreebsd-i386/Packages.gz
- 2dc5e7adb20a129fdfb2a4e9b5117fd0 177 non-free/debian-installer/binary-kfreebsd-i386/Release
+ 8dc5aea5b03dff8595f096f9e368e888 32 non-free/debian-installer/binary-i386/Packages.xz
+ f5f56c78547ee0aafa74d9466afa52ce 119 non-free/debian-installer/binary-i386/Release
d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-mips/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 non-free/debian-installer/binary-mips/Packages.bz2
4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-mips/Packages.gz
- 76895aaaf47189eb842696e1df859788 168 non-free/debian-installer/binary-mips/Release
+ 8dc5aea5b03dff8595f096f9e368e888 32 non-free/debian-installer/binary-mips/Packages.xz
+ 9fcd7ad8f36e26a3576613c36027f34f 119 non-free/debian-installer/binary-mips/Release
+ d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-mips64el/Packages
+ 4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-mips64el/Packages.gz
+ 8dc5aea5b03dff8595f096f9e368e888 32 non-free/debian-installer/binary-mips64el/Packages.xz
+ 9fdd17f52a2d64af876aaedbb41648d7 123 non-free/debian-installer/binary-mips64el/Release
d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-mipsel/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 non-free/debian-installer/binary-mipsel/Packages.bz2
4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-mipsel/Packages.gz
- e9c22c78683f205aba569eaf765d9a61 170 non-free/debian-installer/binary-mipsel/Release
- d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-powerpc/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 non-free/debian-installer/binary-powerpc/Packages.bz2
- 4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-powerpc/Packages.gz
- 3ccfaf3f206f185319481a05aeb66dfd 171 non-free/debian-installer/binary-powerpc/Release
- d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-s390/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 non-free/debian-installer/binary-s390/Packages.bz2
- 4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-s390/Packages.gz
- d9f6ba9e051b36f235a4b338de5ce6bf 168 non-free/debian-installer/binary-s390/Release
+ 8dc5aea5b03dff8595f096f9e368e888 32 non-free/debian-installer/binary-mipsel/Packages.xz
+ 1ec715c5db7cfce83942a050b0a1e676 121 non-free/debian-installer/binary-mipsel/Release
+ d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-ppc64el/Packages
+ 4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-ppc64el/Packages.gz
+ 8dc5aea5b03dff8595f096f9e368e888 32 non-free/debian-installer/binary-ppc64el/Packages.xz
+ 310d2892affa74c2f75a93aafeb55a2c 122 non-free/debian-installer/binary-ppc64el/Release
d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-s390x/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 non-free/debian-installer/binary-s390x/Packages.bz2
4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-s390x/Packages.gz
- 285e0659a707afb5d95b1205ce40c8c6 169 non-free/debian-installer/binary-s390x/Release
- d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-sparc/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 non-free/debian-installer/binary-sparc/Packages.bz2
- 4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-sparc/Packages.gz
- 8f60e8f7687fb0ca009a517dacbf2b90 169 non-free/debian-installer/binary-sparc/Release
- 8a6daafc8470f7a679e0607d878e6b34 131565 non-free/i18n/Translation-en
- 604c67946e2fe854d8e5e80ddfb9a791 21737 non-free/i18n/Translation-en.bz2
- bac2b3442c4b633604314768450aea28 2980 non-free/i18n/Translation-en.diff/Index
- 6e1aef469883722192c7b9c6322f8b51 170 non-free/source/Release
- fbe537860a4e5135424622003a7c147c 43755 non-free/source/Sources
- 1bf945c550193f648fcc1e5f6da3ba3e 10083 non-free/source/Sources.bz2
- 1241272f7a5fb0d87dc7a4da0c5f3622 4456 non-free/source/Sources.diff/Index
- f7bcbda670aea9312fd417887babd5f8 10609 non-free/source/Sources.gz
-SHA1:
- c82b0a105ed1498a11bed3a6d8e4ef6436aecd9d 118763 contrib/Contents-amd64
- baac486584498bc49fb2c4e161c099a5db643245 2704 contrib/Contents-amd64.diff/Index
- e1401905cb967c8d8430baac88f64c012e037fa7 10211 contrib/Contents-amd64.gz
- 78008205377e9a2e5ca54ffb65cb48b190bc5400 72100 contrib/Contents-armel
- b57dc27d89c7ee6109bea6abe4724c2ea2ea26a5 1720 contrib/Contents-armel.diff/Index
- 67b1798fca35684f656349628298830e0f025c4b 5965 contrib/Contents-armel.gz
- f7168eac68ca85fa791ad5001ce7ed7b724cd7d6 79842 contrib/Contents-armhf
- d9417178b60b6f8f82dc0cca44068564504ca279 1720 contrib/Contents-armhf.diff/Index
- 6ca77b6515ad8c0cc86fea12f98f7279ba0f24b1 6899 contrib/Contents-armhf.gz
- 397a1130e0ab4412f4bb9e3752914a27d02e9674 119085 contrib/Contents-i386
- ec3e686d65e0d9f2f4d0862e25b7d67c8a25a6e2 2704 contrib/Contents-i386.diff/Index
- 5a26d6315eae1c9d266e0bdf3e63ec79b25d00ab 10231 contrib/Contents-i386.gz
- 35dfe17f1cafea71da72af99f020347c2ce630b7 72100 contrib/Contents-ia64
- 29534c158d554d78200d36b1cd9b49431f56e6dd 1720 contrib/Contents-ia64.diff/Index
- 2e0c9797c7bb79467ad1bd558fdf11c386234e20 5937 contrib/Contents-ia64.gz
- 63486c8b7ed4c35477d725f997be870aea980895 72100 contrib/Contents-kfreebsd-amd64
- 90aab598e4455df4b0de940bc0409c5a947a281d 1720 contrib/Contents-kfreebsd-amd64.diff/Index
- b75c2ae647e90b4292e2ae927a10d230969c7766 5938 contrib/Contents-kfreebsd-amd64.gz
- a5167f0726eead369d66733fe79969d85ccf2fef 72100 contrib/Contents-kfreebsd-i386
- 96f0389be210d12f4016fbc9d893fc99bd78d8ae 1720 contrib/Contents-kfreebsd-i386.diff/Index
- 88e14a2c2b8749ede73a532a0075ba1e29470314 5961 contrib/Contents-kfreebsd-i386.gz
- 254c167cfba5486e24bc54d952694b96e96eebe4 72100 contrib/Contents-mips
- 38e9da737e0f8c8abf2742fc88200f369d3e7032 1720 contrib/Contents-mips.diff/Index
- 2660e0046b4384f8486da71acf45c872ee3dd05f 5938 contrib/Contents-mips.gz
- e1b77ce053e66d5fbeb55da718e50a0189c291ed 72100 contrib/Contents-mipsel
- 32f4b9004831815d4fa553be35c743e70053223a 1720 contrib/Contents-mipsel.diff/Index
- 9b1beda1c8614a3bba26f798fb73e63bcb457e76 5936 contrib/Contents-mipsel.gz
- 978345291903fd650c11089e6a9b4c66fbf0bf01 72100 contrib/Contents-powerpc
- e24a7cd148bb85018c385db23e2366119c52ff67 1720 contrib/Contents-powerpc.diff/Index
- 9c0f5a4c6fa9468bedd6498ec8c592390940da03 5938 contrib/Contents-powerpc.gz
- 263030552c6ef07844165a921ea1ef86957b4a6e 72100 contrib/Contents-s390
- 1257a8910333b008239bf8c2828b2fbe95949745 1720 contrib/Contents-s390.diff/Index
- a02c6400fa92b328fcd4dd320996233f012fbe0c 5940 contrib/Contents-s390.gz
- 904c6cb79b27d3e5d0798a044030aa7996442b65 72100 contrib/Contents-s390x
- a00056988de29417a0666cb0643b116b54fa7af7 1720 contrib/Contents-s390x.diff/Index
- e648259daf8df9097d0cb26e4ddbe6f2e0275660 5932 contrib/Contents-s390x.gz
- e228182c317c119aef3b2c1ccf9ba65de1ccb9c5 1174098 contrib/Contents-source
- 3067368e7fab638d88072b0370fe164a5a598528 3204 contrib/Contents-source.diff/Index
- f8cfdf1772d58a72cadb4d16fd52af16556c23bc 102051 contrib/Contents-source.gz
- 80affaf053fc6ca4eede5d55ef98ff2a912a3976 72100 contrib/Contents-sparc
- d3ebbb57ab87a0e474a8d1110af9ad5d44097097 1720 contrib/Contents-sparc.diff/Index
- 995554e2eb97b0f25fa9bc45007a0aeee7eb7189 5940 contrib/Contents-sparc.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/Contents-udeb-amd64
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/Contents-udeb-amd64.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/Contents-udeb-armel
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/Contents-udeb-armel.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/Contents-udeb-armhf
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/Contents-udeb-armhf.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/Contents-udeb-i386
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/Contents-udeb-i386.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/Contents-udeb-ia64
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/Contents-udeb-ia64.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/Contents-udeb-kfreebsd-amd64
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/Contents-udeb-kfreebsd-amd64.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/Contents-udeb-kfreebsd-i386
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/Contents-udeb-kfreebsd-i386.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/Contents-udeb-mips
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/Contents-udeb-mips.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/Contents-udeb-mipsel
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/Contents-udeb-mipsel.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/Contents-udeb-powerpc
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/Contents-udeb-powerpc.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/Contents-udeb-s390
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/Contents-udeb-s390.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/Contents-udeb-s390x
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/Contents-udeb-s390x.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/Contents-udeb-sparc
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/Contents-udeb-sparc.gz
- 2afb0d88d05ac2b0684427f732aa4df1dc7b2bde 5197 contrib/binary-all/Packages
- a4aeff6b1da65a84a945a8de87a3f34b9d953897 2004 contrib/binary-all/Packages.bz2
- 0549e717d35e4896c5785f148bcd2960aa08b7b2 1824 contrib/binary-all/Packages.gz
- 687df862bbf0740ba8a7307a46b4208d739d74cb 166 contrib/binary-all/Release
- 86560001fe3baa529560ee74770fc3814976286f 34074 contrib/binary-amd64/Packages
- 7b07c5d6c1bba4110ce17f2f596181f61c8ad599 8725 contrib/binary-amd64/Packages.bz2
- d0c99f44856bc36cdfb0923934efde183b1c54e9 2212 contrib/binary-amd64/Packages.diff/Index
- 707c2f90e2abb139c2c634f6d0b57412e2b05754 9229 contrib/binary-amd64/Packages.gz
- 3f2a9219a5b84f15276eb809fba3a915a41382fe 168 contrib/binary-amd64/Release
- e063a9595d33874002aa09af0998a7ba127dd337 9111 contrib/binary-armel/Packages
- caad09418a3d544be034fcf41d0106520a0de25a 3160 contrib/binary-armel/Packages.bz2
- 1f445c98d0840fbf85fbc01e86ad64e4c49be9f0 2212 contrib/binary-armel/Packages.diff/Index
- 7046e1a3aa4e9e503815c62caf65564b5684c778 3027 contrib/binary-armel/Packages.gz
- 36845a0bf2dfd28fef4a6376b9f50399ad418d92 168 contrib/binary-armel/Release
- 1b61e891e4d1ba68ff324ca2b45f60161e5b0b6b 19971 contrib/binary-armhf/Packages
- 671cd95a53c010852c3b3f46a1bb2faa7affd5bc 5661 contrib/binary-armhf/Packages.bz2
- 0b06636e10e93b74685864a5f6c81b6e33d11c55 2212 contrib/binary-armhf/Packages.diff/Index
- db1aaed2b6c8a91a1f88d1bdc8251601b3a3e6b6 5755 contrib/binary-armhf/Packages.gz
- 170cd54797a72c149157433a5d0429eeaafd9cc0 168 contrib/binary-armhf/Release
- 649b63d89c89afe11acd6f5ba19c4cad0aa42cc9 34024 contrib/binary-i386/Packages
- 5870505b74652b7c2703aa9bda0c1bf8abd4b7af 8744 contrib/binary-i386/Packages.bz2
- 11c14c0f7eed83d2481ba3fc8139c0711babfc0d 2212 contrib/binary-i386/Packages.diff/Index
- e4cafbc903966b66361417dd95a9b992da73cdae 9375 contrib/binary-i386/Packages.gz
- aabb18e230f83f4de2953001f2ded1036829c5ae 167 contrib/binary-i386/Release
- 583851d1337f7eaeef4f698f336cf0a55b24b8e9 9149 contrib/binary-ia64/Packages
- 62a7e6ba4990b9064deb35852aa24df7e5f06a7e 3188 contrib/binary-ia64/Packages.bz2
- 31dbd8ae3b83c293bbd182fee9170bb2b0c4d301 2212 contrib/binary-ia64/Packages.diff/Index
- a40e2868f9dde1a8c3cada4684cb6151e9809857 3029 contrib/binary-ia64/Packages.gz
- d22f6b0a7c0ebc1cb530e23746864dcc4e48d880 167 contrib/binary-ia64/Release
- 6da1701885af80597242e4af60ba40af8442dfcc 9208 contrib/binary-kfreebsd-amd64/Packages
- 9fb59baee9091d42b9c07f1f11ad7fc764ce1f2e 3171 contrib/binary-kfreebsd-amd64/Packages.bz2
- 5cdb24477fb0049791894a71628af40aa65d5566 2212 contrib/binary-kfreebsd-amd64/Packages.diff/Index
- 56e7dc8c39c80c7621b4bd77511f974bb3c324ae 3031 contrib/binary-kfreebsd-amd64/Packages.gz
- 56ad2c48ad4d796c7c0562879a704a2d8282d5ba 177 contrib/binary-kfreebsd-amd64/Release
- 92f154477520c89506f0f7577cdfbaebe41c6e29 9198 contrib/binary-kfreebsd-i386/Packages
- 7781f02437820ebd8342aa25eabc98d1115a484f 3183 contrib/binary-kfreebsd-i386/Packages.bz2
- 971ad540135e191a0a19e5c47672951ff14de822 2212 contrib/binary-kfreebsd-i386/Packages.diff/Index
- 477aca5dc3f1a864631f3b1c56fe04fe0a07609c 3034 contrib/binary-kfreebsd-i386/Packages.gz
- ce2651b2c09ca5bc4e7c5394b48ae41a72b3999c 176 contrib/binary-kfreebsd-i386/Release
- ef9b436774a2e4d17bbeac107a9c2fd20bcf70bf 9105 contrib/binary-mips/Packages
- 47f135ab88ceef2cf863ece353b7d8f80508b4f3 3157 contrib/binary-mips/Packages.bz2
- 308c430a35b2328786fed397c7e58dcc175571a3 2212 contrib/binary-mips/Packages.diff/Index
- 78c7de22ae27df50b5f64d85cabb561caf2ad86e 3016 contrib/binary-mips/Packages.gz
- a44771dbabd944c91bc6076a9818eddcc4cbe7fb 167 contrib/binary-mips/Release
- 1e64d011f922da090bd5a879882cadd68636269e 9125 contrib/binary-mipsel/Packages
- e7f8b44f47029a10821c4e25370beebd229145db 3167 contrib/binary-mipsel/Packages.bz2
- 9f3ed8412857c79e3850d34a5773064a72930344 2212 contrib/binary-mipsel/Packages.diff/Index
- 2f9ff82fe0f943cf7254cb7f9d95e15fab777c5b 3016 contrib/binary-mipsel/Packages.gz
- e3b66918f5ccffe8d5c423f5a80e7a603e1c3465 169 contrib/binary-mipsel/Release
- da663948618824cad53a68e82f529abc2de05f33 9132 contrib/binary-powerpc/Packages
- 6db0ee6985a968f976f374527aafd4efc698302d 3169 contrib/binary-powerpc/Packages.bz2
- bd04b46e5cd04cee6c79edf8b41d18f427cd1a67 2212 contrib/binary-powerpc/Packages.diff/Index
- a75e9a113a8d645880c555ef1624c1acc6b62b88 3019 contrib/binary-powerpc/Packages.gz
- 0520f668e7aae12a6b5a3bb32b31c103fa30cd90 170 contrib/binary-powerpc/Release
- d7b45a94967ec9ca5f1afcec5d579f1f4d22ac7b 9102 contrib/binary-s390/Packages
- 99870ee019954ce43fbf3eaa9c670812a14b2db7 3162 contrib/binary-s390/Packages.bz2
- 7aebb4ee1c72463718477de42f26907766233564 2212 contrib/binary-s390/Packages.diff/Index
- dcd248c54a626fe042cf6f54c5c5d9fac1465943 3023 contrib/binary-s390/Packages.gz
- 9758c00a74bdfb4e98c1f2d5a73e1b972d25c73c 167 contrib/binary-s390/Release
- ed2b6ceec796a4788e5df24137e120fd7d412483 9116 contrib/binary-s390x/Packages
- 986ea44bf1b069c51164b0525a51f4b20c867f82 3168 contrib/binary-s390x/Packages.bz2
- 71b778c299b999d6d695abbd28e19e613ef50596 2212 contrib/binary-s390x/Packages.diff/Index
- 76e356425d34d1729ef833cc15e523c1615ec8d7 3013 contrib/binary-s390x/Packages.gz
- 6300a24e57123ae3c449c8f1249d858fc79fa9b5 168 contrib/binary-s390x/Release
- 8775ca90b0b9e0841e19162f89271164d19c4f0d 9112 contrib/binary-sparc/Packages
- a028f618b9ca5b794b09ec35216bfef0e6665102 3149 contrib/binary-sparc/Packages.bz2
- 2bc0a3be89fb5c8b3865b60d28601920ea46b532 2212 contrib/binary-sparc/Packages.diff/Index
- 43bb192c5aca3be98cb1193936aa52897dd746ab 3028 contrib/binary-sparc/Packages.gz
- f5bf33202f20b53bd6df88fbef136e00a78b1452 168 contrib/binary-sparc/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/debian-installer/binary-all/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 contrib/debian-installer/binary-all/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/debian-installer/binary-all/Packages.gz
- 687df862bbf0740ba8a7307a46b4208d739d74cb 166 contrib/debian-installer/binary-all/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/debian-installer/binary-amd64/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 contrib/debian-installer/binary-amd64/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/debian-installer/binary-amd64/Packages.gz
- 3f2a9219a5b84f15276eb809fba3a915a41382fe 168 contrib/debian-installer/binary-amd64/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/debian-installer/binary-armel/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 contrib/debian-installer/binary-armel/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/debian-installer/binary-armel/Packages.gz
- 36845a0bf2dfd28fef4a6376b9f50399ad418d92 168 contrib/debian-installer/binary-armel/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/debian-installer/binary-armhf/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 contrib/debian-installer/binary-armhf/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/debian-installer/binary-armhf/Packages.gz
- 170cd54797a72c149157433a5d0429eeaafd9cc0 168 contrib/debian-installer/binary-armhf/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/debian-installer/binary-i386/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 contrib/debian-installer/binary-i386/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/debian-installer/binary-i386/Packages.gz
- aabb18e230f83f4de2953001f2ded1036829c5ae 167 contrib/debian-installer/binary-i386/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/debian-installer/binary-ia64/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 contrib/debian-installer/binary-ia64/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/debian-installer/binary-ia64/Packages.gz
- d22f6b0a7c0ebc1cb530e23746864dcc4e48d880 167 contrib/debian-installer/binary-ia64/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/debian-installer/binary-kfreebsd-amd64/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 contrib/debian-installer/binary-kfreebsd-amd64/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/debian-installer/binary-kfreebsd-amd64/Packages.gz
- 56ad2c48ad4d796c7c0562879a704a2d8282d5ba 177 contrib/debian-installer/binary-kfreebsd-amd64/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/debian-installer/binary-kfreebsd-i386/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 contrib/debian-installer/binary-kfreebsd-i386/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/debian-installer/binary-kfreebsd-i386/Packages.gz
- ce2651b2c09ca5bc4e7c5394b48ae41a72b3999c 176 contrib/debian-installer/binary-kfreebsd-i386/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/debian-installer/binary-mips/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 contrib/debian-installer/binary-mips/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/debian-installer/binary-mips/Packages.gz
- a44771dbabd944c91bc6076a9818eddcc4cbe7fb 167 contrib/debian-installer/binary-mips/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/debian-installer/binary-mipsel/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 contrib/debian-installer/binary-mipsel/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/debian-installer/binary-mipsel/Packages.gz
- e3b66918f5ccffe8d5c423f5a80e7a603e1c3465 169 contrib/debian-installer/binary-mipsel/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/debian-installer/binary-powerpc/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 contrib/debian-installer/binary-powerpc/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/debian-installer/binary-powerpc/Packages.gz
- 0520f668e7aae12a6b5a3bb32b31c103fa30cd90 170 contrib/debian-installer/binary-powerpc/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/debian-installer/binary-s390/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 contrib/debian-installer/binary-s390/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/debian-installer/binary-s390/Packages.gz
- 9758c00a74bdfb4e98c1f2d5a73e1b972d25c73c 167 contrib/debian-installer/binary-s390/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/debian-installer/binary-s390x/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 contrib/debian-installer/binary-s390x/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/debian-installer/binary-s390x/Packages.gz
- 6300a24e57123ae3c449c8f1249d858fc79fa9b5 168 contrib/debian-installer/binary-s390x/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/debian-installer/binary-sparc/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 contrib/debian-installer/binary-sparc/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/debian-installer/binary-sparc/Packages.gz
- f5bf33202f20b53bd6df88fbef136e00a78b1452 168 contrib/debian-installer/binary-sparc/Release
- ab4fc829fdf3e3755fb22d665067945d95ea22eb 21108 contrib/i18n/Translation-en
- 916e8428c705b0e93271037fc8677764fedf4edb 6350 contrib/i18n/Translation-en.bz2
- 405c3683abcb7a96f3e8bf28d9b565f9c89c990f 1228 contrib/i18n/Translation-en.diff/Index
- b4ffbab9a851ac754374bd2f7875218ee2f1a542 169 contrib/source/Release
- 0244c5075d82f5ccd94afbd41f3ab844819f1a25 29845 contrib/source/Sources
- a8c576cec92862054295ad3b3da4892a819cf5fa 7880 contrib/source/Sources.bz2
- 025179800cb3b804c23878fbe7d49c4cc950687f 4180 contrib/source/Sources.diff/Index
- 0ce58b032347503bd6e42a45814430ac13d8c855 8150 contrib/source/Sources.gz
- 4d0f199e28866236b5b7e15d345ead6ace1a9a6c 55983554 main/Contents-amd64
- d6e1dd810e010858b271065f8bab552d71e8ac1f 21550 main/Contents-amd64.diff/Index
- cd627efb29a70af3def81025dc95ae81848f807e 3864160 main/Contents-amd64.gz
- 217d6d5a7adca36a021fc1150f1795a9a2188ed5 55728755 main/Contents-armel
- 387a3b9344899e6291efd9d42863fbdc2ced731b 22168 main/Contents-armel.diff/Index
- 372a56816811061a35f043c4baf863a2c6360993 3786638 main/Contents-armel.gz
- 4d7ee8b6a00ef3029c042bf3c8f573e61a8aafea 55205131 main/Contents-armhf
- a672781ba1cf0d7145f53f145409f5c6e1cc66ce 24360 main/Contents-armhf.diff/Index
- 50141f59a34eb382fa509a358ac47fd89598df01 3775056 main/Contents-armhf.gz
- 5fc54acf306b8a4f032a5abc43ee233b036c61bb 57405299 main/Contents-i386
- cd3d047ec798a25c6fb402014f22d3983999edde 25070 main/Contents-i386.diff/Index
- cbf28f6d810aefd57b267dd1c9478e2846994047 3936378 main/Contents-i386.gz
- 4770e2d430c9ebb181cc5d53302cc639209cfcee 58007915 main/Contents-ia64
- b44258ec3ed8da9d1f2c9f0f6573682d015cdb32 18293 main/Contents-ia64.diff/Index
- c4b6c9411fa0fb2655b92401f2c2d4cfb6e46b75 3901535 main/Contents-ia64.gz
- 0bd93bfab61c094e193413d01fdbee1ed5602ee0 50310305 main/Contents-kfreebsd-amd64
- 49704e36d433270aba2dca1c8124b0913f61a2b9 17583 main/Contents-kfreebsd-amd64.diff/Index
- da2f7c5e233d0de83632f7422d6b44ca431e4099 3450398 main/Contents-kfreebsd-amd64.gz
- 8b2173647156f9746234dbad2b5d7a76570f6257 50378896 main/Contents-kfreebsd-i386
- 0fae1f5e2381824a70d183bc06a19999b5f021aa 17583 main/Contents-kfreebsd-i386.diff/Index
- 0633e3c8bccdc56b08ec8be23463ca9e5e16c4db 3459123 main/Contents-kfreebsd-i386.gz
- 10df0433f251917ecb3897dadc913cc3f81b1b77 55948774 main/Contents-mips
- 0c80319299124d461791692325193b455955b758 20068 main/Contents-mips.diff/Index
- 539b98ac093d75977d0e7701d8535583ada02b69 3801345 main/Contents-mips.gz
- 8c18a0ed6dda5ab10f2191543b5159a91f9cf846 56551959 main/Contents-mipsel
- f46f76dc474fff4ba4b261c429f015229207f20b 19065 main/Contents-mipsel.diff/Index
- a92fc968165066011d5e7dd3b31a40fbb5df6f33 3833328 main/Contents-mipsel.gz
- 87e9636a7c7d5878d9972bdfc9c55760e2712e90 55924659 main/Contents-powerpc
- ecda034c47fd2986534dc315b4845c106ad8badf 18710 main/Contents-powerpc.diff/Index
- 4cf5deb31dd6d74174e7188c383b25ab0c2d5fb6 3821616 main/Contents-powerpc.gz
- e17b7383369ab8326937e3206d8b61019cd60935 52562968 main/Contents-s390
- c5d2f42b1ed48446c7b2baaf3ac36f3752df7439 17228 main/Contents-s390.diff/Index
- 62cccee196bb7ba6a534aee1955c1c26820661f2 3617572 main/Contents-s390.gz
- 27a9c0ebab1904f8818c5790c82927e7454a4073 53483632 main/Contents-s390x
- c21ce0f07d62bed73a1c1c67f44bf6ff3c02e1b1 17722 main/Contents-s390x.diff/Index
- 1943c7df32cf3808c1c6fdbba8200ac76415955f 3697504 main/Contents-s390x.gz
- 9ae53447a5f7bc6822bbae4ce8edc3b8cd3d0921 54200433 main/Contents-source
- ff366b0376ed239fa25034880dd843ceb2e97531 17052 main/Contents-source.diff/Index
- bc29780060ea9f1f4269c6e75cfeaf92a425798b 5742422 main/Contents-source.gz
- 7d881b20dcf75379f03443cc18cfc17bcfc506d5 54439714 main/Contents-sparc
- 19a0af4b550d38bea085b848cb46aa41307536d5 18710 main/Contents-sparc.diff/Index
- 46751adc32443477d096d6e2bf58898be653865e 3732736 main/Contents-sparc.gz
- 2ff220ef64df83aa085dd0c2cfe545ee4b8b8757 97265 main/Contents-udeb-amd64
- a87785c77270ce649965e9c496ab66b59f97c103 6729 main/Contents-udeb-amd64.gz
- 21a1294972a2fe377ea013461ee7e70d22f6ab1f 82315 main/Contents-udeb-armel
- d0a4147a22703291e2e400199efdf7039a014e01 4995 main/Contents-udeb-armel.gz
- 9c7a34e0325ecb3453fd75198d63bf203f9f477f 84492 main/Contents-udeb-armhf
- f85899764e0a6885c03b0ce1a1063699be05e5ed 5965 main/Contents-udeb-armhf.gz
- be0a4cc9a292df9f8fe5ce6d842c61a9f137f08f 206559 main/Contents-udeb-i386
- 72e1cecb96616e29b7c6463003af7db759da9e5c 13256 main/Contents-udeb-i386.gz
- b86138355c7305ee1fd674a4902f05129b147503 201741 main/Contents-udeb-ia64
- dcce0ed33993fbd136ba5c3cb6ad5e15ca7f1f18 12924 main/Contents-udeb-ia64.gz
- c6d4852a3849d696eb9afc864473493a9d86f50b 3612 main/Contents-udeb-kfreebsd-amd64
- 36589ca28b2e4f6bab552e08295dbc86eeaa3bee 433 main/Contents-udeb-kfreebsd-amd64.gz
- 513daf8260b475e086d07d1cb1ea038f8a61aedd 3612 main/Contents-udeb-kfreebsd-i386
- d8bc492deb853fb8fa50cd07729363a15612ff0b 428 main/Contents-udeb-kfreebsd-i386.gz
- 77d419635732133fc347d933a476674439d8b8ef 219854 main/Contents-udeb-mips
- 3f9564b30bf69b1bf073aced82b7c73b0dcfe250 13373 main/Contents-udeb-mips.gz
- d2ad15e61388b90b9f550677efd3a19c9e3effbe 347698 main/Contents-udeb-mipsel
- 1526a0ebbfc7d087bd40dc2bf0eff17a38bd582f 20139 main/Contents-udeb-mipsel.gz
- ded0033d3158f37312c1e7268331ab50cc710fae 167963 main/Contents-udeb-powerpc
- cb3495a703bbe1fad1e4c94abeb766b1782eb469 9936 main/Contents-udeb-powerpc.gz
- 096ca150eb1c6f7f93024e650c8ff95bc77c9ff0 17745 main/Contents-udeb-s390
- e1faaad806d7a647d1881f5568897d10889fecd3 1678 main/Contents-udeb-s390.gz
- 2fe9f7fe129b93e12cacf4d5d99cc77c070f5afb 17655 main/Contents-udeb-s390x
- ca122c9c900deda9f5ef5f48ce630d0828e35a63 1666 main/Contents-udeb-s390x.gz
- ff95740a3e5c1d4ba5f09e984e5378bca2545a22 41956 main/Contents-udeb-sparc
- f17f4b8a8462386f9914dde28a8a2ef5ea43a787 3108 main/Contents-udeb-sparc.gz
- 6f525cefbd73e3135dd769e94e4c79e3cb1bcfd3 1752561 main/binary-all/Packages
- c82dd228965f2e71e59362da75741f9b3c27997a 298614 main/binary-all/Packages.bz2
- 70932a96872741fb6c68a670246b2334ace0255a 363124 main/binary-all/Packages.gz
- 92ec46b2df938dcbecb58850ef8518df5d481fb0 163 main/binary-all/Release
- a65cf3e4f889ee9d254fe7071dc734d48a3f6133 3101317 main/binary-amd64/Packages
- 6851174452cc79bce8d15ab469d4d0486e15cad2 611011 main/binary-amd64/Packages.bz2
- 53e4a5a6142dfe8dfcd08d74a5465f8affe3c7b4 27088 main/binary-amd64/Packages.diff/Index
- 6c89f5b4c9a6e1d493cfbdba0623b8c2d5554186 776104 main/binary-amd64/Packages.gz
- 64346210e6f9365f0d28bcfee95559507c5a661b 165 main/binary-amd64/Release
- 473a45c81ed85ce386fab5d44f107055c02984d0 2946046 main/binary-armel/Packages
- 952cd18bd5ecc1931f4aa84e917408634ea0cc83 581488 main/binary-armel/Packages.bz2
- c095b7abe14692c2a70d79eba2deca448c21f406 27796 main/binary-armel/Packages.diff/Index
- fc7930ee7d8921961d641e97df17735f77524fcc 738067 main/binary-armel/Packages.gz
- 5f4c2846d626a89d17f9f4b823218b62234c3cdd 165 main/binary-armel/Release
- 3539b746ec24c53a4e3eaf049a25066e6e3df6b9 2977442 main/binary-armhf/Packages
- 5e88d97ca5ea5cfc98f688f565ca72c08d872bda 586282 main/binary-armhf/Packages.bz2
- a6696b2bf29fc7535ac63556c6b3cae6cc19d98c 27796 main/binary-armhf/Packages.diff/Index
- ae40caabf8fb4faa34dccc2eb4dd2029f98b5b02 745128 main/binary-armhf/Packages.gz
- c3ab2525fe58477217fd83727852368ed89037fd 165 main/binary-armhf/Release
- 31e3b3379e41b0b980de2197ad9f2da62ca26822 3097673 main/binary-i386/Packages
- aed63603adfda162726f72993af79ffbbe5512ae 610952 main/binary-i386/Packages.bz2
- 28e172987110a98af68128cf7633218078d43641 27796 main/binary-i386/Packages.diff/Index
- 389fba5cb039e1870495e9bde14c6dbaf9765089 775752 main/binary-i386/Packages.gz
- cca95962e577f85cad70429ac01e0927a8209759 164 main/binary-i386/Release
- 04cac61bd9f8173d35edee73b1a8d8b602b835a6 2807416 main/binary-ia64/Packages
- f7175c28304b3cc0b349a3139fea341e72ab6c1f 557449 main/binary-ia64/Packages.bz2
- 7630dbf31c636d6c98eed676565e793b02a6a90b 18214 main/binary-ia64/Packages.diff/Index
- 4920d48a91d25170530641a4c726610fd7dabf04 707233 main/binary-ia64/Packages.gz
- bcaa36980ebe58562b01ffac2e45ec6c08236bc3 164 main/binary-ia64/Release
- 90c4d3302b42f4a4aa90f94624571039ae922055 2641182 main/binary-kfreebsd-amd64/Packages
- 22b90de5ad8b50fc875e2e26c0cfd8c47057603e 517444 main/binary-kfreebsd-amd64/Packages.bz2
- 527c36d5d5a516c8636060a9a1c99eeaae616f06 24256 main/binary-kfreebsd-amd64/Packages.diff/Index
- 78548ca0f528b8a1a7f0388c2fee2bbd6c75a7f0 660341 main/binary-kfreebsd-amd64/Packages.gz
- 2939811591312465d0d49eaa8ebb198209c016ef 174 main/binary-kfreebsd-amd64/Release
- d97635651697d0ab20ded6a3fbfb36b0f10ed5f3 2666534 main/binary-kfreebsd-i386/Packages
- 2a0faf37a86708bbadc39da6b207932281ec77ff 521809 main/binary-kfreebsd-i386/Packages.bz2
- ffdb50776f0fc557b13285f000f062cd7d104c7b 24610 main/binary-kfreebsd-i386/Packages.diff/Index
- 1f3819f4affbf789d961db7c8a228b576ac62ec9 665460 main/binary-kfreebsd-i386/Packages.gz
- 75a814be20b5db5f15d8d5a0f217c16eb15fd858 173 main/binary-kfreebsd-i386/Release
- c2c9904020f1b83ce2b26f62981eb1d8a3decb53 2907660 main/binary-mips/Packages
- 407acedf55919fa00838669aadd2195aa8a58818 575633 main/binary-mips/Packages.bz2
- 13805e1a1e47970f0c836d01e3a5e7a8216fb8ae 21382 main/binary-mips/Packages.diff/Index
- 7e47dac39239a86ae5a026edb7fe38be1a2b8b27 729884 main/binary-mips/Packages.gz
- e2530a004affe638d225c2cf593c4dba77d32bc9 164 main/binary-mips/Release
- 67767ae8de58a191aebacd53caa39f3125304078 2942003 main/binary-mipsel/Packages
- b4c7f46ce8e31f49d29f5fc03a4d5924dff787fe 579576 main/binary-mipsel/Packages.bz2
- d38786e92a193879a5f5b101cd97965b481fdb4f 21010 main/binary-mipsel/Packages.diff/Index
- 9b89791e95ae14aeac9756866f04f98a22be1a46 735563 main/binary-mipsel/Packages.gz
- a5077fe58287383235af6409b21014132ac41726 166 main/binary-mipsel/Release
- b72a839ca17d30dc5dc1927caadec528971eab74 3158047 main/binary-powerpc/Packages
- ca0ba36e80f10d21e05821a9a63b22e3ae973253 609147 main/binary-powerpc/Packages.bz2
- 9dd9a3282da86b77e51b9206f0b46c22ddf997ca 19888 main/binary-powerpc/Packages.diff/Index
- 3549fc5ae953045649a2e4effae3465775a81688 769669 main/binary-powerpc/Packages.gz
- 9bf63b7c649e00d562ba7dce63a2c390bca13b20 167 main/binary-powerpc/Release
- 7581a92463e606d7c37cb99fd9a453bdca6556f2 2921850 main/binary-s390/Packages
- 15e69cf966d8e899973daadd8709b68cc5168c11 574234 main/binary-s390/Packages.bz2
- 4c0499bab6de2450efc1568549ba117a88157eca 19396 main/binary-s390/Packages.diff/Index
- c7231fc4c7c09518b66a23bfe5b9bbd6972df14a 721451 main/binary-s390/Packages.gz
- 6cc288bb4070256933aa3d43ad2c281edbd17517 164 main/binary-s390/Release
- 48560981d49803335e8b6195f59540e1fad1c715 3092767 main/binary-s390x/Packages
- a66b483582b08577a8b511f2dcdf6de34ad6ea4b 598557 main/binary-s390x/Packages.bz2
- cd00565504da6f374e73f33e56cb76b109275d09 19396 main/binary-s390x/Packages.diff/Index
- 4947484deb2bc78a0459128be6db4b40031c00ce 754961 main/binary-s390x/Packages.gz
- 613c89d6401af813b75b4b3077b4b37109c9b573 165 main/binary-s390x/Release
- 58303c76048271f37b87c01d02e408cf390c4754 2909809 main/binary-sparc/Packages
- 486e666f5d54d7e00367761b8b3150bd6457119b 572645 main/binary-sparc/Packages.bz2
- 0380fb8c3a8d01f5cc8d560def418aa239bf852e 20380 main/binary-sparc/Packages.diff/Index
- d994bc75598168fc8636bf84740a51feb89e75bc 727797 main/binary-sparc/Packages.gz
- bc8445aa9777ee6652cac3ba4cd3b2514cc799ab 165 main/binary-sparc/Release
- 27e359e2b317b2c0c69b809cdf43bf69a4d66f88 1201 main/debian-installer/binary-all/Packages
- f6fc56f5f14a27c5227b66f605a50e67daa6a5a4 720 main/debian-installer/binary-all/Packages.bz2
- 5741514b7abed31fdaddd5e1e177c44effa4bb59 648 main/debian-installer/binary-all/Packages.gz
- 92ec46b2df938dcbecb58850ef8518df5d481fb0 163 main/debian-installer/binary-all/Release
- 3b717fbb6d3dfa50e4dbc5dbdd645be8d06a2b3a 52673 main/debian-installer/binary-amd64/Packages
- 6c8f2173cb269f88c254ee13b4097c2f765e0f7c 10640 main/debian-installer/binary-amd64/Packages.bz2
- 771802d111b1f10ee5bb0c792d2339aea92694f4 12316 main/debian-installer/binary-amd64/Packages.gz
- 64346210e6f9365f0d28bcfee95559507c5a661b 165 main/debian-installer/binary-amd64/Release
- 36c9cdd21b7ceb75000dfe8136762e52599d21d5 85058 main/debian-installer/binary-armel/Packages
- e050836b0434d9e656dce3cd8e0ba7e330312e66 15131 main/debian-installer/binary-armel/Packages.bz2
- 98bdfb7bedb8747179f8a2f9f49ebbb637a69429 17272 main/debian-installer/binary-armel/Packages.gz
- 5f4c2846d626a89d17f9f4b823218b62234c3cdd 165 main/debian-installer/binary-armel/Release
- 45d2e85e87304bd487a8d8122f063037c4590fba 40455 main/debian-installer/binary-armhf/Packages
- 635f91d1008a4b4a4af8cf9bef016916fc5a5b0b 9030 main/debian-installer/binary-armhf/Packages.bz2
- 0afacde2798a2bf5059dbe0a980db3e78dc39b00 10230 main/debian-installer/binary-armhf/Packages.gz
- c3ab2525fe58477217fd83727852368ed89037fd 165 main/debian-installer/binary-armhf/Release
- 1c4ee62be21aeb227e92d96fa1c9482260e5f678 93685 main/debian-installer/binary-i386/Packages
- 9ff563b0cb47bb379059e5a0f40409b267affb81 16533 main/debian-installer/binary-i386/Packages.bz2
- d7308e2538c139b32e44c5153b6d0c6b8a391a87 19236 main/debian-installer/binary-i386/Packages.gz
- cca95962e577f85cad70429ac01e0927a8209759 164 main/debian-installer/binary-i386/Release
- e3ae29953df8792d54d630c91f27c3ecea18264d 134527 main/debian-installer/binary-ia64/Packages
- dfed838f687858297fc7871bd1addafdd0fcf55b 22052 main/debian-installer/binary-ia64/Packages.bz2
- e7906cc70083fb17e526c9e40556989b41a42681 25474 main/debian-installer/binary-ia64/Packages.gz
- bcaa36980ebe58562b01ffac2e45ec6c08236bc3 164 main/debian-installer/binary-ia64/Release
- 91475959e635ec114d2a29a03deebe2ce8393043 5111 main/debian-installer/binary-kfreebsd-amd64/Packages
- 058fa2e69f4f008c989d30fd4eadbee6070bb99c 2073 main/debian-installer/binary-kfreebsd-amd64/Packages.bz2
- dc709a9e6525dab3992d210fea5cd8f816a45431 1944 main/debian-installer/binary-kfreebsd-amd64/Packages.gz
- 2939811591312465d0d49eaa8ebb198209c016ef 174 main/debian-installer/binary-kfreebsd-amd64/Release
- c48885d041ec5ea1cce7795d287ced557addc2ed 5099 main/debian-installer/binary-kfreebsd-i386/Packages
- 39e66296141e79da12423d433eed9242c3c9f367 2061 main/debian-installer/binary-kfreebsd-i386/Packages.bz2
- f50d88691707591f891de4ca4902352a52df9c7e 1942 main/debian-installer/binary-kfreebsd-i386/Packages.gz
- 75a814be20b5db5f15d8d5a0f217c16eb15fd858 173 main/debian-installer/binary-kfreebsd-i386/Release
- 6de1e62fa94c19d1679369f406774adbf88943c2 133337 main/debian-installer/binary-mips/Packages
- ddb359c2c7892abce0897c4c0b37e3cb105d1c8c 21486 main/debian-installer/binary-mips/Packages.bz2
- f634c9a281602619328eff254fc7a274fc108934 25104 main/debian-installer/binary-mips/Packages.gz
- e2530a004affe638d225c2cf593c4dba77d32bc9 164 main/debian-installer/binary-mips/Release
- 744c81c7b29764d4fbf5d511c9ef41b3f6aaf624 180613 main/debian-installer/binary-mipsel/Packages
- bcfbc7f034f7f797ea81bd149569e86c4c4d24fe 27088 main/debian-installer/binary-mipsel/Packages.bz2
- 1c128e427b646c5f2c93297d0177d115961e1910 32425 main/debian-installer/binary-mipsel/Packages.gz
- a5077fe58287383235af6409b21014132ac41726 166 main/debian-installer/binary-mipsel/Release
- 4c996a17fbf7bdd4a8b7d5c817cb92a324c2cbc0 81646 main/debian-installer/binary-powerpc/Packages
- 0c5a2786532f72f8f7070eff9c198be73696144f 14561 main/debian-installer/binary-powerpc/Packages.bz2
- a37ae7931aaa070640f690037c8c442f27c1cc6f 16569 main/debian-installer/binary-powerpc/Packages.gz
- 9bf63b7c649e00d562ba7dce63a2c390bca13b20 167 main/debian-installer/binary-powerpc/Release
- d6b3836b8aff36bbeb74e7c14ad5d00c69656972 23156 main/debian-installer/binary-s390/Packages
- 380a50a639be3ea6edf11df8941dd1ac1d5fe6e9 6029 main/debian-installer/binary-s390/Packages.bz2
- 86c241e13cf53fd2e338194bef6ef42eee0a876a 6480 main/debian-installer/binary-s390/Packages.gz
- 6cc288bb4070256933aa3d43ad2c281edbd17517 164 main/debian-installer/binary-s390/Release
- 9a572381f3205212a48b403b284b6348bdaa6b99 22632 main/debian-installer/binary-s390x/Packages
- 527fba38371c795d2cf9a49cdfaf850d35b48e22 5845 main/debian-installer/binary-s390x/Packages.bz2
- 60db7880a5e1b59f857fc18ef2b51290ffc81fcb 6312 main/debian-installer/binary-s390x/Packages.gz
- 613c89d6401af813b75b4b3077b4b37109c9b573 165 main/debian-installer/binary-s390x/Release
- 9b7233f5d5b9f4a7b3560a446a6e7d4ab57ef664 33653 main/debian-installer/binary-sparc/Packages
- 346d92a39ffe9d681d6e0ed57923982d6a123dc8 7535 main/debian-installer/binary-sparc/Packages.bz2
- 029fd0365160824f3b500d265d4cb134fde031bf 8369 main/debian-installer/binary-sparc/Packages.gz
- bc8445aa9777ee6652cac3ba4cd3b2514cc799ab 165 main/debian-installer/binary-sparc/Release
- 96164a55cd73fc0644d11340c977197fb995eb2d 2215515 main/i18n/Translation-en
- 69c808ae9173576aa8bb4f2b0b5ac98f17cf7781 379130 main/i18n/Translation-en.bz2
- 3a98bc715e5e13c76d6154adc9b08899bee2e2d3 10360 main/i18n/Translation-en.diff/Index
- 2b313b3cd72c616c018605dfb8b1946668f932f8 166 main/source/Release
- b4829f58a119a77ea2022741d5c7aa99cf61c070 2698141 main/source/Sources
- 4b3a7f42a196a4206cda019f5e9bf969ace041ae 459978 main/source/Sources.bz2
- 59bdf99091ba61a1e9cbd0d02a21698b395bfa8c 27796 main/source/Sources.diff/Index
- 82540485d3262ffe9f085a692f4b089564410fcf 594683 main/source/Sources.gz
- f2ed326998abc2da1879876da83192068dd74156 980964 non-free/Contents-amd64
- 93a227c6fc73d4dba42752824d5baf311c66b6ff 4948 non-free/Contents-amd64.diff/Index
- d38fa32b9f1da058276b76422cdfefc746073290 59410 non-free/Contents-amd64.gz
- 9306d43bda62ee13437c1af2a5646d5c53c94638 489792 non-free/Contents-armel
- b978f85fdbcaaaf59ef784e78672f0aa2a6645fd 736 non-free/Contents-armel.diff/Index
- d11840c4a651fd78658ad3e8ff1a85934de41141 27750 non-free/Contents-armel.gz
- 9306d43bda62ee13437c1af2a5646d5c53c94638 489792 non-free/Contents-armhf
- eb97448ca9a90cc653945c93e068f7be9bdd3e5f 736 non-free/Contents-armhf.diff/Index
- d11840c4a651fd78658ad3e8ff1a85934de41141 27750 non-free/Contents-armhf.gz
- 05925099e99e72991de38d9d09127123aa6ebba7 991147 non-free/Contents-i386
- df7e417002818c31eb6c599d28280a376a3576d9 4948 non-free/Contents-i386.diff/Index
- 5a0761a8b184c3689d8eb3ac6afec3a74a050ac7 59944 non-free/Contents-i386.gz
- 9306d43bda62ee13437c1af2a5646d5c53c94638 489792 non-free/Contents-ia64
- 6c0d13531ef544bfe73faf4bb5268e7f3d170c8f 736 non-free/Contents-ia64.diff/Index
- d11840c4a651fd78658ad3e8ff1a85934de41141 27750 non-free/Contents-ia64.gz
- 9306d43bda62ee13437c1af2a5646d5c53c94638 489792 non-free/Contents-kfreebsd-amd64
- 005ac5c573649f7d97b90b0c60ee6e4be06a0b2e 736 non-free/Contents-kfreebsd-amd64.diff/Index
- d11840c4a651fd78658ad3e8ff1a85934de41141 27750 non-free/Contents-kfreebsd-amd64.gz
- 9306d43bda62ee13437c1af2a5646d5c53c94638 489792 non-free/Contents-kfreebsd-i386
- ee319b06b8d6620ddf8146fd8c146c714d798983 736 non-free/Contents-kfreebsd-i386.diff/Index
- d11840c4a651fd78658ad3e8ff1a85934de41141 27750 non-free/Contents-kfreebsd-i386.gz
- 9306d43bda62ee13437c1af2a5646d5c53c94638 489792 non-free/Contents-mips
- 493c670c28f74153e862b145c0b6f5d37b4dfaec 736 non-free/Contents-mips.diff/Index
- d11840c4a651fd78658ad3e8ff1a85934de41141 27750 non-free/Contents-mips.gz
- 9306d43bda62ee13437c1af2a5646d5c53c94638 489792 non-free/Contents-mipsel
- 1080d768ac585a1b53823c5053503aaa45c84138 736 non-free/Contents-mipsel.diff/Index
- d11840c4a651fd78658ad3e8ff1a85934de41141 27750 non-free/Contents-mipsel.gz
- 9306d43bda62ee13437c1af2a5646d5c53c94638 489792 non-free/Contents-powerpc
- b4fd5060d161d488aaa1a5a76f056b09947c89ac 736 non-free/Contents-powerpc.diff/Index
- d11840c4a651fd78658ad3e8ff1a85934de41141 27750 non-free/Contents-powerpc.gz
- 9306d43bda62ee13437c1af2a5646d5c53c94638 489792 non-free/Contents-s390
- d222a6526ee4962c4cf7af27e48f21c3a6429eb5 736 non-free/Contents-s390.diff/Index
- d11840c4a651fd78658ad3e8ff1a85934de41141 27750 non-free/Contents-s390.gz
- 9306d43bda62ee13437c1af2a5646d5c53c94638 489792 non-free/Contents-s390x
- 8e60a8d13336d143bb027dee111536fa7a989ec7 736 non-free/Contents-s390x.diff/Index
- d11840c4a651fd78658ad3e8ff1a85934de41141 27750 non-free/Contents-s390x.gz
- 1b594ef4f47fc39005cb23ef5a9997af0c863490 310077 non-free/Contents-source
- f1e35cd727a978cc62a9649360aba1d1768819d2 4188 non-free/Contents-source.diff/Index
- 284104b4f64fe9b7d3707e7ba7c1c56190b5e88a 30075 non-free/Contents-source.gz
- 9306d43bda62ee13437c1af2a5646d5c53c94638 489792 non-free/Contents-sparc
- 01fc995415f9a26c7e07d27127770fa44e10406a 736 non-free/Contents-sparc.diff/Index
- d11840c4a651fd78658ad3e8ff1a85934de41141 27750 non-free/Contents-sparc.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/Contents-udeb-amd64
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/Contents-udeb-amd64.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/Contents-udeb-armel
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/Contents-udeb-armel.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/Contents-udeb-armhf
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/Contents-udeb-armhf.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/Contents-udeb-i386
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/Contents-udeb-i386.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/Contents-udeb-ia64
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/Contents-udeb-ia64.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/Contents-udeb-kfreebsd-amd64
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/Contents-udeb-kfreebsd-amd64.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/Contents-udeb-kfreebsd-i386
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/Contents-udeb-kfreebsd-i386.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/Contents-udeb-mips
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/Contents-udeb-mips.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/Contents-udeb-mipsel
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/Contents-udeb-mipsel.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/Contents-udeb-powerpc
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/Contents-udeb-powerpc.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/Contents-udeb-s390
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/Contents-udeb-s390.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/Contents-udeb-s390x
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/Contents-udeb-s390x.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/Contents-udeb-sparc
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/Contents-udeb-sparc.gz
- e23adff3346a205ba382e2f35423d073c3ba1658 20438 non-free/binary-all/Packages
- 65a879f7d150b13b9552141a163a67f6aa48b42c 5570 non-free/binary-all/Packages.bz2
- 1ba72ba83c51d224e1933d633630f1a504f6d7b2 5805 non-free/binary-all/Packages.gz
- cdd61cd701bbf9b6384ea8b98780c4da448b25ef 167 non-free/binary-all/Release
- 636b8bdbb959df46cf512dbbc3464271ebc67329 115902 non-free/binary-amd64/Packages
- bdd7b7efc919ad4b8a6d65ec6c0f70f8e0dc4da0 21633 non-free/binary-amd64/Packages.bz2
- 7e9d12f5da82d75577c5b741ad5aa17c4684f78a 4456 non-free/binary-amd64/Packages.diff/Index
- 0f270b965a3433b31e702976613f124a13edb444 25323 non-free/binary-amd64/Packages.gz
- 775e14a1a8f3c4754658ad35473f48c0efa97269 169 non-free/binary-amd64/Release
- e23adff3346a205ba382e2f35423d073c3ba1658 20438 non-free/binary-armel/Packages
- 65a879f7d150b13b9552141a163a67f6aa48b42c 5570 non-free/binary-armel/Packages.bz2
- 1ba72ba83c51d224e1933d633630f1a504f6d7b2 5805 non-free/binary-armel/Packages.gz
- 2ddd2eed259a3af3f7811acd975768c9cce5588b 169 non-free/binary-armel/Release
- e23adff3346a205ba382e2f35423d073c3ba1658 20438 non-free/binary-armhf/Packages
- 65a879f7d150b13b9552141a163a67f6aa48b42c 5570 non-free/binary-armhf/Packages.bz2
- 1ba72ba83c51d224e1933d633630f1a504f6d7b2 5805 non-free/binary-armhf/Packages.gz
- f27138b0a3e48d605d608e59276ceda902001f2d 169 non-free/binary-armhf/Release
- 0256e7d5dfdb364ae7c2e7f35629ee1940f695e3 123415 non-free/binary-i386/Packages
- 821dc47959da0ec2342b62be80bbf622c7c385fd 22755 non-free/binary-i386/Packages.bz2
- 8923c0f302c69b274f1038fd44b8dc3638651b49 4456 non-free/binary-i386/Packages.diff/Index
- 08e473cba7e57771e6ac52b2376ed9991f945d24 26726 non-free/binary-i386/Packages.gz
- b90a64d220f8e9be0ae1bb3f90be2ba3444a4e83 168 non-free/binary-i386/Release
- e23adff3346a205ba382e2f35423d073c3ba1658 20438 non-free/binary-ia64/Packages
- 65a879f7d150b13b9552141a163a67f6aa48b42c 5570 non-free/binary-ia64/Packages.bz2
- 1ba72ba83c51d224e1933d633630f1a504f6d7b2 5805 non-free/binary-ia64/Packages.gz
- eadbc90140bcf8c7e0c163781b2fa362845579c8 168 non-free/binary-ia64/Release
- e23adff3346a205ba382e2f35423d073c3ba1658 20438 non-free/binary-kfreebsd-amd64/Packages
- 65a879f7d150b13b9552141a163a67f6aa48b42c 5570 non-free/binary-kfreebsd-amd64/Packages.bz2
- 1ba72ba83c51d224e1933d633630f1a504f6d7b2 5805 non-free/binary-kfreebsd-amd64/Packages.gz
- 480129760bec0f8d0b3a5786d08dfd1e5d17d96d 178 non-free/binary-kfreebsd-amd64/Release
- e23adff3346a205ba382e2f35423d073c3ba1658 20438 non-free/binary-kfreebsd-i386/Packages
- 65a879f7d150b13b9552141a163a67f6aa48b42c 5570 non-free/binary-kfreebsd-i386/Packages.bz2
- 1ba72ba83c51d224e1933d633630f1a504f6d7b2 5805 non-free/binary-kfreebsd-i386/Packages.gz
- a5895cfd930d3e839f761fab580728c999f33bf2 177 non-free/binary-kfreebsd-i386/Release
- e23adff3346a205ba382e2f35423d073c3ba1658 20438 non-free/binary-mips/Packages
- 65a879f7d150b13b9552141a163a67f6aa48b42c 5570 non-free/binary-mips/Packages.bz2
- 1ba72ba83c51d224e1933d633630f1a504f6d7b2 5805 non-free/binary-mips/Packages.gz
- 7418d9a26f166bbb55a0d3c41d227e280432f479 168 non-free/binary-mips/Release
- e23adff3346a205ba382e2f35423d073c3ba1658 20438 non-free/binary-mipsel/Packages
- 65a879f7d150b13b9552141a163a67f6aa48b42c 5570 non-free/binary-mipsel/Packages.bz2
- 1ba72ba83c51d224e1933d633630f1a504f6d7b2 5805 non-free/binary-mipsel/Packages.gz
- 0feff878ceaf570225e2e38ed11846b86527719d 170 non-free/binary-mipsel/Release
- e23adff3346a205ba382e2f35423d073c3ba1658 20438 non-free/binary-powerpc/Packages
- 65a879f7d150b13b9552141a163a67f6aa48b42c 5570 non-free/binary-powerpc/Packages.bz2
- 1ba72ba83c51d224e1933d633630f1a504f6d7b2 5805 non-free/binary-powerpc/Packages.gz
- 304f85df998fe8c13d47896e08a66d334a4ed002 171 non-free/binary-powerpc/Release
- e23adff3346a205ba382e2f35423d073c3ba1658 20438 non-free/binary-s390/Packages
- 65a879f7d150b13b9552141a163a67f6aa48b42c 5570 non-free/binary-s390/Packages.bz2
- 1ba72ba83c51d224e1933d633630f1a504f6d7b2 5805 non-free/binary-s390/Packages.gz
- d26298f53c39038fd82349fa85214f5cab066117 168 non-free/binary-s390/Release
- e23adff3346a205ba382e2f35423d073c3ba1658 20438 non-free/binary-s390x/Packages
- 65a879f7d150b13b9552141a163a67f6aa48b42c 5570 non-free/binary-s390x/Packages.bz2
- 1ba72ba83c51d224e1933d633630f1a504f6d7b2 5805 non-free/binary-s390x/Packages.gz
- 33f55cf4b0b588654cf39f8035feb8c5a495f10b 169 non-free/binary-s390x/Release
- e23adff3346a205ba382e2f35423d073c3ba1658 20438 non-free/binary-sparc/Packages
- 65a879f7d150b13b9552141a163a67f6aa48b42c 5570 non-free/binary-sparc/Packages.bz2
- 1ba72ba83c51d224e1933d633630f1a504f6d7b2 5805 non-free/binary-sparc/Packages.gz
- 60650c4938afabd6581418f225bffd0ff97fa94b 169 non-free/binary-sparc/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/debian-installer/binary-all/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 non-free/debian-installer/binary-all/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/debian-installer/binary-all/Packages.gz
- cdd61cd701bbf9b6384ea8b98780c4da448b25ef 167 non-free/debian-installer/binary-all/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/debian-installer/binary-amd64/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 non-free/debian-installer/binary-amd64/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/debian-installer/binary-amd64/Packages.gz
- 775e14a1a8f3c4754658ad35473f48c0efa97269 169 non-free/debian-installer/binary-amd64/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/debian-installer/binary-armel/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 non-free/debian-installer/binary-armel/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/debian-installer/binary-armel/Packages.gz
- 2ddd2eed259a3af3f7811acd975768c9cce5588b 169 non-free/debian-installer/binary-armel/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/debian-installer/binary-armhf/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 non-free/debian-installer/binary-armhf/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/debian-installer/binary-armhf/Packages.gz
- f27138b0a3e48d605d608e59276ceda902001f2d 169 non-free/debian-installer/binary-armhf/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/debian-installer/binary-i386/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 non-free/debian-installer/binary-i386/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/debian-installer/binary-i386/Packages.gz
- b90a64d220f8e9be0ae1bb3f90be2ba3444a4e83 168 non-free/debian-installer/binary-i386/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/debian-installer/binary-ia64/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 non-free/debian-installer/binary-ia64/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/debian-installer/binary-ia64/Packages.gz
- eadbc90140bcf8c7e0c163781b2fa362845579c8 168 non-free/debian-installer/binary-ia64/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/debian-installer/binary-kfreebsd-amd64/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 non-free/debian-installer/binary-kfreebsd-amd64/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/debian-installer/binary-kfreebsd-amd64/Packages.gz
- 480129760bec0f8d0b3a5786d08dfd1e5d17d96d 178 non-free/debian-installer/binary-kfreebsd-amd64/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/debian-installer/binary-kfreebsd-i386/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 non-free/debian-installer/binary-kfreebsd-i386/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/debian-installer/binary-kfreebsd-i386/Packages.gz
- a5895cfd930d3e839f761fab580728c999f33bf2 177 non-free/debian-installer/binary-kfreebsd-i386/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/debian-installer/binary-mips/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 non-free/debian-installer/binary-mips/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/debian-installer/binary-mips/Packages.gz
- 7418d9a26f166bbb55a0d3c41d227e280432f479 168 non-free/debian-installer/binary-mips/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/debian-installer/binary-mipsel/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 non-free/debian-installer/binary-mipsel/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/debian-installer/binary-mipsel/Packages.gz
- 0feff878ceaf570225e2e38ed11846b86527719d 170 non-free/debian-installer/binary-mipsel/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/debian-installer/binary-powerpc/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 non-free/debian-installer/binary-powerpc/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/debian-installer/binary-powerpc/Packages.gz
- 304f85df998fe8c13d47896e08a66d334a4ed002 171 non-free/debian-installer/binary-powerpc/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/debian-installer/binary-s390/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 non-free/debian-installer/binary-s390/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/debian-installer/binary-s390/Packages.gz
- d26298f53c39038fd82349fa85214f5cab066117 168 non-free/debian-installer/binary-s390/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/debian-installer/binary-s390x/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 non-free/debian-installer/binary-s390x/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/debian-installer/binary-s390x/Packages.gz
- 33f55cf4b0b588654cf39f8035feb8c5a495f10b 169 non-free/debian-installer/binary-s390x/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/debian-installer/binary-sparc/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 non-free/debian-installer/binary-sparc/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/debian-installer/binary-sparc/Packages.gz
- 60650c4938afabd6581418f225bffd0ff97fa94b 169 non-free/debian-installer/binary-sparc/Release
- c074a1ef90f2864e3e6551e40431b69a3cdf7954 131565 non-free/i18n/Translation-en
- d59c1647928c493bfdbba381f43262aa33cbeb6a 21737 non-free/i18n/Translation-en.bz2
- 0a3bc09a38d3a831c1292f507455b7cea0666820 2980 non-free/i18n/Translation-en.diff/Index
- 6843f16d8cf1aaeba0b9ac89fa526234d1235e1f 170 non-free/source/Release
- 8d13abcbae03bbcddc09dc23e236a22912c9ff14 43755 non-free/source/Sources
- a6808e27f77427ca0ed68d284cb0005707c4fe23 10083 non-free/source/Sources.bz2
- 16e0ec80f50e2313cc10a2f03315bf9c72201719 4456 non-free/source/Sources.diff/Index
- d43fd73e2e94a4f9be923464b7549e5a5f0068d8 10609 non-free/source/Sources.gz
+ 8dc5aea5b03dff8595f096f9e368e888 32 non-free/debian-installer/binary-s390x/Packages.xz
+ 152733f6083e0b5b59c5b86bfd32133c 120 non-free/debian-installer/binary-s390x/Release
+ ea2bdb74c726d091f253a2c6127167d1 88700 non-free/dep11/Components-amd64.yml
+ 93eec39af1979c6864121135d5542a73 10864 non-free/dep11/Components-amd64.yml.gz
+ 29987d3784196aa5301c8811c3ed7e87 9096 non-free/dep11/Components-amd64.yml.xz
+ 7aea6ce6cf4391565a3076eeb9d2b4a9 83062 non-free/dep11/Components-arm64.yml
+ 2f2d6b2fae879a7faf6c624e90e05566 9530 non-free/dep11/Components-arm64.yml.gz
+ d9caa6c976bbd9e2b1ad0f4a1d749aa7 7880 non-free/dep11/Components-arm64.yml.xz
+ 6c5a51ebd9bc172157bc76422e259e70 83062 non-free/dep11/Components-armel.yml
+ 31886c0bc8f9722e6e8a97f2e0c2cdc5 9587 non-free/dep11/Components-armel.yml.gz
+ 9630f1f18858b0ebc5dd62ee5b2754e5 7876 non-free/dep11/Components-armel.yml.xz
+ 79c0384c9c347b0898ddf757e4d433f2 83062 non-free/dep11/Components-armhf.yml
+ 3d662561e7639151594ac3e03b8b5ec7 9811 non-free/dep11/Components-armhf.yml.gz
+ 7d52b715c6f751765fcd800bf0c45170 7880 non-free/dep11/Components-armhf.yml.xz
+ d1935733598feabbf04d8a0e206a24a8 91016 non-free/dep11/Components-i386.yml
+ 28d31441f2e84b3439b123467b999d77 12590 non-free/dep11/Components-i386.yml.gz
+ b36312b245860444cca439264c9db834 10272 non-free/dep11/Components-i386.yml.xz
+ cb9a7e0606dbdae1d8bf34ffcc6f8cc8 83062 non-free/dep11/Components-mips64el.yml
+ 02d653d7c5919505df5b1bd7d2d111a8 9512 non-free/dep11/Components-mips64el.yml.gz
+ ea159dba691eec406a4e6782edba8e60 7840 non-free/dep11/Components-mips64el.yml.xz
+ 6b8564a5e93e142e9199e40a05ce4e90 83062 non-free/dep11/Components-ppc64el.yml
+ ac188ea1210c74a3fe45f0c235c0bf34 9548 non-free/dep11/Components-ppc64el.yml.gz
+ 11c7b62706ac6e897cbf8d01d5fbcb40 7840 non-free/dep11/Components-ppc64el.yml.xz
+ 6ecef201689d225031ad4012f01e7635 83062 non-free/dep11/Components-s390x.yml
+ e09bdaa5a800874a0cc40d279d306ceb 9542 non-free/dep11/Components-s390x.yml.gz
+ 47142810e4d91ae57ffa318b6920ed62 7884 non-free/dep11/Components-s390x.yml.xz
+ 065baa655f9308fcab3f48be45cec371 15360 non-free/dep11/icons-128x128.tar
+ 1167bd0857d5ed3801bdecd6b5aa4934 6725 non-free/dep11/icons-128x128.tar.gz
+ 02119965dc14c896ce81251383224903 9216 non-free/dep11/icons-48x48.tar
+ e07e2bada0ce207aec3c9c571db4a478 3491 non-free/dep11/icons-48x48.tar.gz
+ 98d589d6d143bb0afef63283e0a0b5f6 49664 non-free/dep11/icons-64x64.tar
+ 43b2d99ff5912094ed4991dbe4c1e15c 38343 non-free/dep11/icons-64x64.tar.gz
+ 7b745ad5f0b35076026b3d6cac8cd4cd 512965 non-free/i18n/Translation-en
+ 888fdd3a5c5f0c27eaf7c01dd6951855 88834 non-free/i18n/Translation-en.bz2
+ bc3086f9a876353349550f977457f245 121 non-free/source/Release
+ db9a85186998828daa917a3f78169533 371347 non-free/source/Sources
+ e6e7b02dd46d838f5b15f0a9b9625cdc 103716 non-free/source/Sources.gz
+ 934b3f80ead8a7045d52b5c812fc6b4b 85628 non-free/source/Sources.xz
SHA256:
- 322bd6a6966ec834e41f442c3d9dee4333a913b2bd862f8225bbb010af0d9855 118763 contrib/Contents-amd64
- 611b243f66cfb089837d7e4cf3d56e3f3a6cc5e234ecca5b2cffcfb1cefc1900 2704 contrib/Contents-amd64.diff/Index
- bebfaff1d7ce71c0912b9ec9a056e32c03dff36e35238e7e26a4cb77906b7b56 10211 contrib/Contents-amd64.gz
- cf637f331435c9571cd8c371a572e12d0e60af2dd487a5391d51752ab44a4fb5 72100 contrib/Contents-armel
- d1104bd244adedce2f1767272d27b6cc91ba564b26a43d06fdda276282b170c5 1720 contrib/Contents-armel.diff/Index
- c109b740ba4adfd9721f9781e709a3a6103fdef97a6fff46436dd04849073506 5965 contrib/Contents-armel.gz
- 3750f588762760840c4bf9e639dd558d19a92d3d78404c749d2d0cad4e5228fb 79842 contrib/Contents-armhf
- 78889197cb12a2acb5022caa7420f13d816f23f4b0434ca60fb8f7abf56414ff 1720 contrib/Contents-armhf.diff/Index
- 602b416bf5b5042fbe97a8f3f919f42dbef0505d2d1b6bb83e746650f4424fea 6899 contrib/Contents-armhf.gz
- 057a94c8142af25aaca0eb0d347e99490f32263bf5893bfe25e6cbfec1aee88c 119085 contrib/Contents-i386
- 3a3774ff254a8bf36d8a90c6feec2b844312bed187ca309c3ebb95c941725eab 2704 contrib/Contents-i386.diff/Index
- 474b5588e7ad302be517de763ab9e17c92435ef929157cb20da393d3a5a072a1 10231 contrib/Contents-i386.gz
- 1b6bce724b5df838a96983b844634dfdf98443066732dda1d2d37997c5b9961f 72100 contrib/Contents-ia64
- 91d93c0f5604057154e7b2417b9d8a0c18b8e3bad9d92f6c9ba5899799378662 1720 contrib/Contents-ia64.diff/Index
- f8aef456e204f825358bf47ceea736a857cf17f041b3c4b4acde915e5b304d16 5937 contrib/Contents-ia64.gz
- d491e5e92db51a3a9a73f879c685a2b5b52ed9f75b274b8a9e2b63ad0d52146c 72100 contrib/Contents-kfreebsd-amd64
- 4cb549d5c589037fc3e8a01042eccf8a3095e92d7e742cf1b8943728814be69e 1720 contrib/Contents-kfreebsd-amd64.diff/Index
- 032003ce736d27c55686d5cfa9fa1d857709ecbcacd4ac9c58cdaeb0d5011ef2 5938 contrib/Contents-kfreebsd-amd64.gz
- 30b3b24657f49d78d26d7bd1509d6da9280b4a1249cc1afd034aa4f7e7fb6997 72100 contrib/Contents-kfreebsd-i386
- a67113dfc244da82e0a04b28e3897ae13e8a2a4740c7b9459d3d2085ca965880 1720 contrib/Contents-kfreebsd-i386.diff/Index
- b59725cb84e1be1a35c09ad2c266219f124d1b8b5673e370b328a3881ea1d0f7 5961 contrib/Contents-kfreebsd-i386.gz
- c5447b2eed21774b204ecac042ab8e5d8ce046313b8b7c25638c6452b888b031 72100 contrib/Contents-mips
- 7043f96eacca364216ab5c6c4e72d31732b5a425391bc35d14172a0e61e4d8b8 1720 contrib/Contents-mips.diff/Index
- 39f42c4b618c9defa221512eb07e8b8b3ac86c9bb49bb32960fd5534405e4357 5938 contrib/Contents-mips.gz
- 6b7f01b626b48ed444269bce5832563e8d22454bc3df9893e570fabfd0039687 72100 contrib/Contents-mipsel
- ff5c4b6a9a6cda4931947f45de2e15c260915c94eb661bf14b5ddbba294227d4 1720 contrib/Contents-mipsel.diff/Index
- 395dd1af0ea04c95c80055371b30062ba8249bf619c38e9624ac730d3bb5fcc4 5936 contrib/Contents-mipsel.gz
- c2f13bd047e52834d43dc6edb8c61b967336c160ad50325f7dfe58652e8d78cf 72100 contrib/Contents-powerpc
- 38f33dd3475c842a2db1f59e201832593d2af003f428c36b6715a885de0871d2 1720 contrib/Contents-powerpc.diff/Index
- 39ac1dfdf9111142760a3fe12e525ba9c81ad4923c5171a05ca77993935c7cbe 5938 contrib/Contents-powerpc.gz
- 244d14df65e95bfd0941fb4443d402d0a783be9eec7631f5f4ea379a42a9d96e 72100 contrib/Contents-s390
- 13c566957ae3fd6a7077b8f8fd325d52cdd1b52053ce0c7bd0d596e4dfc39f00 1720 contrib/Contents-s390.diff/Index
- 49747a2facafa523d53f09dc6ffff4dfb0b854c302f6e91e4c66c1020e8c5c1e 5940 contrib/Contents-s390.gz
- bc0f6f3a16c4b206fc5b22ae76b99d9cb1d5a5eb93260b2c19e0f001d254e4e0 72100 contrib/Contents-s390x
- b929f8351cff6f2732327ed54f63440ddeb0f977d16617d98fd34a715db14cac 1720 contrib/Contents-s390x.diff/Index
- 2f7ba95c24f21e023952b4578ebc7f90d9d7c99bc66f296fc38d2839e750a0d1 5932 contrib/Contents-s390x.gz
- 0636f87700d03b04f0fa0e1c5fe4af677e49d9e0b38367b3c4b852954dd7799b 1174098 contrib/Contents-source
- eec1da8dc1006310e7d6d926fa972d4d7e24f08b69f3e87fcad0dd43561ea8ba 3204 contrib/Contents-source.diff/Index
- 9025bd78880e2149f538512bc2619b473f0c2f1624f23f63dc655ba72c437b12 102051 contrib/Contents-source.gz
- 9788aad81fd811adbc9021184d912cf88276505dc43ad21fa8b6ea66e40d749f 72100 contrib/Contents-sparc
- 5e4496f12f473b5cefb5989e7819cf8a6cd0daadbd4483e60038d524763df139 1720 contrib/Contents-sparc.diff/Index
- c8df81e6bea29fd2636f7ee59672392a9c94fb73d8dc3d43d365d3fd4f3e8d8f 5940 contrib/Contents-sparc.gz
+ 9c790f028c5b33697c05246ca543dda29c41d323dfcdab2220dc67e5f28d7b09 1356901 contrib/Contents-amd64
+ 74f0a26875c1f937803fffcb64f9c0acfe7a328bc3889b74f81bd2640f57294d 102635 contrib/Contents-amd64.gz
+ f388b3541940cada4df5489fbc1016440fa9290a23b998674ba41e4aacb20ccd 1075476 contrib/Contents-arm64
+ aaaa209c6f255165a7b9431fe92d02809c25fca3684f7e601887268cdab4a1a5 84016 contrib/Contents-arm64.gz
+ 10b740b16a0d26a88646becbcb8ef8ff06fbe89809cbaac7b6f307c4d8e8881e 1072443 contrib/Contents-armel
+ 6b7a5352ebf79480492b1a8f97eed09ca5ee9ceb420166f08a7b4c134e23511d 83766 contrib/Contents-armel.gz
+ c9f0a57a303faca07100304f2cd667d80b69cf7bf89542775df96d4a9f9afafd 1080904 contrib/Contents-armhf
+ 4166e976622328a8e190eb34a568edc34533b1efa3163f4d92e2666b8dbe938a 84798 contrib/Contents-armhf.gz
+ 140415c888c7dc2693992efb792554abb23c4de7134a471ee3c937735e4a0393 1143948 contrib/Contents-i386
+ 87282daf671c0570604f78b19c3067edc7f8bdbcaa57d6252275639db2638973 90478 contrib/Contents-i386.gz
+ 48f58d320b54e7446afc794229752d8c2c9275f9f6cf1ce52aa389fc66120bae 1075642 contrib/Contents-mips
+ 4b3513ee199736469a136bb9e0a48b2893a750cd9262a38a53329b3802d1072e 84001 contrib/Contents-mips.gz
+ 26ac5083b610d8fb131cd1afd9602ed7de47d537ca0c204ebd916dc139b5ff73 1074552 contrib/Contents-mips64el
+ d3e7387b09f3a790334c18e38aae11e046fc99f76c583191b1e699d6a7aa6efd 83874 contrib/Contents-mips64el.gz
+ 4d051c904d3ea2447434533c58c687308b11faf9153f0936ec9f09215cd86510 1075659 contrib/Contents-mipsel
+ 3555635e5a367b6b44ab57b5de50dfadb29a9fb4c00fe62fc5f9175389223d7d 84014 contrib/Contents-mipsel.gz
+ 06ebbd84e3711891177f2397354844d7e644c0855bf2dc53fbbbb17e637daa9e 1075941 contrib/Contents-ppc64el
+ b352d31f889a0644acb2d45e53f9ce7dd0dc2872164cd6ce1ed760ade2245b42 83977 contrib/Contents-ppc64el.gz
+ de597ec15bbab37a66b986bb10d223bc3796b90d553016055ad618f9ff54606a 1072966 contrib/Contents-s390x
+ b0e8178e08c872a1f58024274960a92e7a634f346ab433eec437713480c980f6 83555 contrib/Contents-s390x.gz
+ 6334c45c6b956f6142ba1534c5b23ba45bd96a79610767edaaff3b8245e191f0 4560575 contrib/Contents-source
+ 1f4b57a7535b47a74ae67012a07e3f7121e8f89957e52f3cce298b7a2167c0a0 373646 contrib/Contents-source.gz
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/Contents-udeb-amd64
f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/Contents-udeb-amd64.gz
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/Contents-udeb-arm64
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/Contents-udeb-arm64.gz
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/Contents-udeb-armel
f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/Contents-udeb-armel.gz
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/Contents-udeb-armhf
f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/Contents-udeb-armhf.gz
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/Contents-udeb-i386
f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/Contents-udeb-i386.gz
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/Contents-udeb-ia64
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/Contents-udeb-ia64.gz
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/Contents-udeb-kfreebsd-amd64
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/Contents-udeb-kfreebsd-amd64.gz
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/Contents-udeb-kfreebsd-i386
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/Contents-udeb-kfreebsd-i386.gz
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/Contents-udeb-mips
f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/Contents-udeb-mips.gz
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/Contents-udeb-mips64el
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/Contents-udeb-mips64el.gz
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/Contents-udeb-mipsel
f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/Contents-udeb-mipsel.gz
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/Contents-udeb-powerpc
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/Contents-udeb-powerpc.gz
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/Contents-udeb-s390
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/Contents-udeb-s390.gz
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/Contents-udeb-ppc64el
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/Contents-udeb-ppc64el.gz
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/Contents-udeb-s390x
f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/Contents-udeb-s390x.gz
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/Contents-udeb-sparc
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/Contents-udeb-sparc.gz
- e2ef8ddb8fbe422e3553b769b90a268fcffe1e1c73ef616b6d081627ce21d915 5197 contrib/binary-all/Packages
- f3f613e8566828fdeac5f350d03c6843ff4083385692ddf229ea8cf6dc86e430 2004 contrib/binary-all/Packages.bz2
- 2104593b1a6353909b26d1071fa873278963ca824041dc6eb5ad0dc773bec542 1824 contrib/binary-all/Packages.gz
- 36f2e59f40ae395ed64ed1eaa681859cd64855f1a02cea7783e78c2932af34a4 166 contrib/binary-all/Release
- d8af16b11093284f7b7b964f12f5c5cfd15708a5dec759cd40d39262a9544365 34074 contrib/binary-amd64/Packages
- 9e4c0c1d9175991a3a980c6432711b12e4f16d9c3806281aa568ef7b8ae987f9 8725 contrib/binary-amd64/Packages.bz2
- c3e93ed28873c82f255a0fda14c9b944445869e342f7043d299238555fc87955 2212 contrib/binary-amd64/Packages.diff/Index
- e95fd1bc67a498e83e48577b3dc0920a20b8a8703b33d7b244e460a54c0b5bd9 9229 contrib/binary-amd64/Packages.gz
- 2dc245a6a705ac8bb26c79b103e14e7beec849e8ec82dda6bd9b5c2bf6711440 168 contrib/binary-amd64/Release
- 908e7195fddc7de3d6b4a4d3da512d5e5e0efebab78c041be80c841f75ee0a29 9111 contrib/binary-armel/Packages
- b19e72543f17b61065de834077ab2890b679d86525851894c281d61c028217ef 3160 contrib/binary-armel/Packages.bz2
- 16c37edc62ad5998e22aad7deb4d8d01c1304bf40c1478cf34a49e1c1f09ea6a 2212 contrib/binary-armel/Packages.diff/Index
- 5b9489fde1ab0743403dffd14b51d93adc0f7e1a532e0fad66727427835fcc17 3027 contrib/binary-armel/Packages.gz
- eb034948d05f90cdc115f9ed0b91b34260ed9f587ea76cff2fd19b044ec0af71 168 contrib/binary-armel/Release
- 018fad6630fab0c6602b7cf5f237557fd16305b3857197b0b5b0e1476b69da49 19971 contrib/binary-armhf/Packages
- 3b2ae208a7b8f00d003615fa308c8f34bd006894a5f3ab23be1cdf73667f5179 5661 contrib/binary-armhf/Packages.bz2
- a3a7dc62045cadb7a1a35553188ee2cafff3712ee883a2f302718145a50fc768 2212 contrib/binary-armhf/Packages.diff/Index
- 2d043526477059471beb373e05ca77d18c0482c41261be0b8edf2b734887a6c6 5755 contrib/binary-armhf/Packages.gz
- 7c546630d30e8343c19c47d8e22350de88535fcdbe696881281e62f90409706e 168 contrib/binary-armhf/Release
- 8eff628d946278b9665d4a1c7c5690120e1b8189fc6056d78a30670769603a75 34024 contrib/binary-i386/Packages
- 1be527fc8dafb18b1cf9f4140ab21c0d6f5d69cc699f58342e596afbd322ae05 8744 contrib/binary-i386/Packages.bz2
- 55d2566716914a7ae8b67eb8b6ec98a84e981bcde977cad9237b42cb17697404 2212 contrib/binary-i386/Packages.diff/Index
- ad12988823b2b3f1a342500f28c1f96ce88358581056645567b73b096e992e28 9375 contrib/binary-i386/Packages.gz
- 076f0931dcffde9a9a4bfa08afc2d3070cf3f301708707073192ff88546027fc 167 contrib/binary-i386/Release
- 5914503fa3666a9ff2ddcb770c0b5a891a489df3168dd5696ef81d3bb62a062f 9149 contrib/binary-ia64/Packages
- 9cf74704161206d25690f361d13a8dfe27533873aac2795c0edcfb52ac3c519d 3188 contrib/binary-ia64/Packages.bz2
- 2c694412f22212525591629e0e69e118af0d579e42ef3c36501048e5bb5f39d3 2212 contrib/binary-ia64/Packages.diff/Index
- edf2b403359f978b01e25ad5ff38dda2f7daf343a852f35ae9cc8ff92f25ad8c 3029 contrib/binary-ia64/Packages.gz
- 537df961889947a91130a263716883c11b63a7ff752db477ae0f4ef636ecb7d7 167 contrib/binary-ia64/Release
- d8084f1ec522c33d8f594634476889e18dc13892573d3356d7cfb9725be758b5 9208 contrib/binary-kfreebsd-amd64/Packages
- f2f1a7a30decab1d720ed55b0fe70922999a8d145392c1d6e7bc80a4625564c0 3171 contrib/binary-kfreebsd-amd64/Packages.bz2
- 60b6e025fc73e41c0be905b612f0341eb936215cab423b20d0a427ce033b659f 2212 contrib/binary-kfreebsd-amd64/Packages.diff/Index
- 1de8d75780242e0fc08e9beeb5bfcc9d83888f4d83b808d911e8e02369564926 3031 contrib/binary-kfreebsd-amd64/Packages.gz
- b166dd74c833882ca534742b2b0ea0e378ad3012bdee0a98fb3794796c7dc736 177 contrib/binary-kfreebsd-amd64/Release
- 0776572560241587f1d20041a897bfa68d954a7fbac162d3079835b9f3645fc7 9198 contrib/binary-kfreebsd-i386/Packages
- 9fab7c624f28e68df3c84b9b7b4dea8e5dadfa07870ddf11a6b856425c9d70b4 3183 contrib/binary-kfreebsd-i386/Packages.bz2
- ec76d176fba8efaac7c0683082c3e7c97eacb1ad4e59b5a6e28279699886c41c 2212 contrib/binary-kfreebsd-i386/Packages.diff/Index
- 8568b53730ea0d0ba279b7097b86d6d134c80f36a9ae552b7df2a83a78f92667 3034 contrib/binary-kfreebsd-i386/Packages.gz
- a15797e2c7bc0ebc571a69a298daea5b00879846cfbe35b0d33a9be977311570 176 contrib/binary-kfreebsd-i386/Release
- d76dbf666401fc104f0b36a88c5e1d8735f7059ef729da116925167cb0a43878 9105 contrib/binary-mips/Packages
- dd1f0046e14d922ce6ef039a957adf849b78eca443e535a7fafaf95c595c2315 3157 contrib/binary-mips/Packages.bz2
- 5c9919abb8778da1f1350621c34503751a54a01d5add12bcf88c542e35eae99a 2212 contrib/binary-mips/Packages.diff/Index
- 18007891ae1a433ed05e3a012360fbba1d4a006e9e5c86611760d39a0053c575 3016 contrib/binary-mips/Packages.gz
- 04d046e29a5c89eb84dc10b99f756b2b13dc0d3e47146b589c26c647f70b92f4 167 contrib/binary-mips/Release
- fbb35d0d20619dff856818ce8e5213be49425d4a13853f7019177bbcd3b5a6d2 9125 contrib/binary-mipsel/Packages
- d6f1229724f6c5efab9e2a3013574711e8e3cad24c314a2dad0209388a742c78 3167 contrib/binary-mipsel/Packages.bz2
- b6746f7ff0200c874999d1539610539d45f1807f404843e70fd7d4626c826e6f 2212 contrib/binary-mipsel/Packages.diff/Index
- 9ad7ebe3e10cc3be52c474eac82eda7a616c6814f87ae889b99e464a02f2b1b5 3016 contrib/binary-mipsel/Packages.gz
- 59a1e4c2e213fefae9338f8ba85508aeab6151052ec1fdfd68a7ff9c50eefff2 169 contrib/binary-mipsel/Release
- 4faccaa6b10df75b721e43d23be022d428ff1047fed14ad001d2fe1d2454a09c 9132 contrib/binary-powerpc/Packages
- 946e62690ee4c9f47b492e0ed6131fa882268d42018e162bcda2f16cf6f8a32b 3169 contrib/binary-powerpc/Packages.bz2
- b85007dc8d92614e0cadc8177bd44c75bce27f6fa04edc216182f3be71e5daaf 2212 contrib/binary-powerpc/Packages.diff/Index
- 5f49131f352e32ef7e7d0fd46ad32c0ec4cab0b9cca35a4b38f980ca7f320bf9 3019 contrib/binary-powerpc/Packages.gz
- dc1a2193eee149c2e922c14ec0eb2ba71378fc1452ccbe8a3b1b2ee289c8ff1a 170 contrib/binary-powerpc/Release
- d7ad9a8412ceae8e5efeefe1f760e1449c5f818f565ad688ebf12a1f17a7c6d5 9102 contrib/binary-s390/Packages
- 3e146eecf233f7d0827e8f4b14d59554655065a9c7092b5c87d084fd2060e5e3 3162 contrib/binary-s390/Packages.bz2
- d7370a14d03518365838486cd48d51ee12d21dba119bf3d43e1511c67e3e5fd4 2212 contrib/binary-s390/Packages.diff/Index
- 21dd28fd1deb32d50be54bae11defd9837fefaefb49ae66c4897e62630e95d43 3023 contrib/binary-s390/Packages.gz
- 2e83cc6bb4cff65560d10c4f59084a931e834849a59a66e5111eac2039cf6583 167 contrib/binary-s390/Release
- ce49a9b82d2f740568bfd7eb1be22d9150b3344b873e50fab163220bc374617c 9116 contrib/binary-s390x/Packages
- 0c47f04d7d81338722724a8859cb6d36e1668fe94fd6cbb25a1f98b88a51ec93 3168 contrib/binary-s390x/Packages.bz2
- 5b83ad03954464ed7e038880be41f7b693b3b24c0510594dbddd33ac40e695dc 2212 contrib/binary-s390x/Packages.diff/Index
- f87e84214a089e7c46dad1331f53cb6091828bd35110cdba6eee6d7e5d3d445d 3013 contrib/binary-s390x/Packages.gz
- 7a0a2c981e4f93731a4daccb516abda97c167a783789c9a7dd4d541bb621e9b0 168 contrib/binary-s390x/Release
- f79faf73f41023da2bec6d52e68358fee35eb3b77056af64fe8790d40c61ef7e 9112 contrib/binary-sparc/Packages
- d1783ea414562dba6c85cad9b4dc8dc150f28159404b1ffd7299ca54d5f3df35 3149 contrib/binary-sparc/Packages.bz2
- 932ac0572803f7e82689dd349007067f1b6093c6b03df033095b9c53e9c2e354 2212 contrib/binary-sparc/Packages.diff/Index
- 09ae755a7a4f80b30c1b3ad3014acfa857795dff3d946886530a94268a76928e 3028 contrib/binary-sparc/Packages.gz
- e7ed8b06fda9a737a002175773ca4f6182dd65163b95eaaa7f453fd88dcb0c52 168 contrib/binary-sparc/Release
+ b5ee95317eb9d02687d2b5588a6e7987a20c2be4e2e2b126c591744ee0def2ba 98559 contrib/binary-all/Packages
+ 469e7f1a6c7798f07b42cd00db06a4e8e213d0238f01b5ac30751257f1444456 26589 contrib/binary-all/Packages.gz
+ 11da5321c5dae785bd80725c7e12088cf19bd157a97baf02156dca1c8c9a4aeb 22872 contrib/binary-all/Packages.xz
+ fc4f3ccb9b340c09b5acce7d17c2e49c747df06e5360fee8ab8e7c4a3b2fe243 117 contrib/binary-all/Release
+ 85122b023c4bbd0fb4de263b3ad03212735f162897bc3403f10c31a4dbb62255 227288 contrib/binary-amd64/Packages
+ 06a2453b9ec49fbc900b96b1ff806cb5b8e1dca5037d4cbf7e469ff6e2b5583a 60376 contrib/binary-amd64/Packages.gz
+ e7df50561ad9ede5afee7d9fcdd62e08b828aef6ce72dbfaaeac0c679db05d78 50236 contrib/binary-amd64/Packages.xz
+ 2ee75c8b42f9ffb6dfd73d41721927ce163206a229721a4e2c1736eb4287755d 119 contrib/binary-amd64/Release
+ df11cad1806630d3d2438738de2d595239edd4b6f2b5272cc1c19682ffe0bacf 167017 contrib/binary-arm64/Packages
+ 9a3af463bc932429198974079d3a054ef81609deeb7e4e3a4783a93af23fa86f 45595 contrib/binary-arm64/Packages.gz
+ 4ff769644e5c15565c5e6d9d65661744b659d8d4f0fa65b42be9fb3af18b87a4 38392 contrib/binary-arm64/Packages.xz
+ 54ce82fa743fd600d12eba77b7f822626aa6786d6947c94b854dbb9b642847d2 119 contrib/binary-arm64/Release
+ fa42e75b4f2cb66c61fbb1ba6d8ea532e33b4cd2c1db474a162e61842b242528 162625 contrib/binary-armel/Packages
+ 4a4c211c84e44f0e1d46079067ced1b2e324884307d5e632ffb568cc75dc44fa 44533 contrib/binary-armel/Packages.gz
+ 09fcad4e5f463099f6ada67c516af999924b19622abaaccf88237f64a76ee5b1 37628 contrib/binary-armel/Packages.xz
+ d32ee9c01904230410e920fb392e844c9acf27a805f3ce4c57313b5095f7f87a 119 contrib/binary-armel/Release
+ 75035f3252700b256a0713e314b2dda2f3cd1effee7b78b3a754fb28f7aebd6f 174724 contrib/binary-armhf/Packages
+ d42c08c1b6b61348178d8d4d2833b7e24c8e49cb0b1d7b4590d1ef0208fc6485 47683 contrib/binary-armhf/Packages.gz
+ b40cfb24a255dc01b03f6f15ea229c443923fd888842219ee22733d255992a85 40096 contrib/binary-armhf/Packages.xz
+ b82baface03301f8746025632d9c3bec923f5a780e97d9ac13acb719f3610731 119 contrib/binary-armhf/Release
+ ba4e01ea3ef65f033809d1074387e10a4405978d98668338412457cd6c15f514 206737 contrib/binary-i386/Packages
+ 23a014ef9b724c51f2df1f176c0eebd2488b48f207c54692451bfb6f59fa3aaf 55449 contrib/binary-i386/Packages.gz
+ 87c152422c424e7e78c0638c452db84b2cafb22a150176f010ac5e3e92cb870e 46132 contrib/binary-i386/Packages.xz
+ 30290422018963a52263028d24b76604a6785c980a890f925d27dba4ddd882fa 118 contrib/binary-i386/Release
+ 023d762cf6b389b57a59391f74657ec04a93c54765be233d1d8874a3748486b7 167136 contrib/binary-mips/Packages
+ e1a4d3b9070a31bb24463e87228f08030d58c3b91d4efb3fc168be5efa4e7a9a 45932 contrib/binary-mips/Packages.gz
+ e3b7f4795059f48024d541239e9453bc914b97e697c8cd138a59c9e1c83fc5a9 38528 contrib/binary-mips/Packages.xz
+ 51b7ca85724cdee1aa5d0204849b3c5ac92e1a1712f11f7dce18d750621c2fc5 118 contrib/binary-mips/Release
+ c55967e05ff4b1a4477dc082827037f65ed9b39096e954f998b57c1395ea63ff 166369 contrib/binary-mips64el/Packages
+ b2541fdb930b0e8075e0af4c61bafe37914184a93d41a0c594aac1b3beee5b1e 45086 contrib/binary-mips64el/Packages.gz
+ 1217659e1b39a3b23c180f02643b6e66ebd90fe017805e7382b402547ca5cb88 38180 contrib/binary-mips64el/Packages.xz
+ 840c6fbd5330973e80d9755ff83521712589d7f0ea9d4e5473c6f134ad6bf27e 122 contrib/binary-mips64el/Release
+ 748b69328d513c5bcb247342245d78225035d2a1ac0bfd6af170a85d6aea0846 167464 contrib/binary-mipsel/Packages
+ 895668177cac60bab0eab069a67ebbf7fc4357d91b38ac6b094a764d996bdefb 45960 contrib/binary-mipsel/Packages.gz
+ 79a47acdcc228af08d076e1d25fba14f83738df4333eb94af6a8908765df9da1 38528 contrib/binary-mipsel/Packages.xz
+ 03b6d7414bc8381adfa2be290069a7888a944ebbe2043556c826346218f183c4 120 contrib/binary-mipsel/Release
+ da07017a553a9c7eff4fa50ecc5dc136d49a2bf83b48ff6331fed1abde4595fe 168194 contrib/binary-ppc64el/Packages
+ 9f503e9c742d8c62c9ca827d35a848d5ce5381344fff8e29ee72def94f4c54e7 45836 contrib/binary-ppc64el/Packages.gz
+ 407bbe67f1147dea5f3ecf8a38feed269a3a38c7b608782b3ac767f484785bb1 38604 contrib/binary-ppc64el/Packages.xz
+ dc84ab7b831fa491eceaefc97734dcd65f1ab77ea5328f731df117db434c00df 121 contrib/binary-ppc64el/Release
+ 6a1d91b83442f19191a50002810f375edb04dcfc2529dd7f3757710b830f9cdd 164846 contrib/binary-s390x/Packages
+ cc090e2f3cb57547b7c78dceaa0dd8b95012a095bd9513bbb86ac51eda3a411a 45123 contrib/binary-s390x/Packages.gz
+ 19ae425f63772fcf6b5b7c8a826e15b240aa7592a6f0e88f043920ecf6cbc0b1 37960 contrib/binary-s390x/Packages.xz
+ 8e59ec07ff791a520c79650486c51c0f55720a78c397899ef649a8a2608b449f 119 contrib/binary-s390x/Release
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-all/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 contrib/debian-installer/binary-all/Packages.bz2
f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-all/Packages.gz
- 36f2e59f40ae395ed64ed1eaa681859cd64855f1a02cea7783e78c2932af34a4 166 contrib/debian-installer/binary-all/Release
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 contrib/debian-installer/binary-all/Packages.xz
+ fc4f3ccb9b340c09b5acce7d17c2e49c747df06e5360fee8ab8e7c4a3b2fe243 117 contrib/debian-installer/binary-all/Release
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-amd64/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 contrib/debian-installer/binary-amd64/Packages.bz2
f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-amd64/Packages.gz
- 2dc245a6a705ac8bb26c79b103e14e7beec849e8ec82dda6bd9b5c2bf6711440 168 contrib/debian-installer/binary-amd64/Release
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 contrib/debian-installer/binary-amd64/Packages.xz
+ 2ee75c8b42f9ffb6dfd73d41721927ce163206a229721a4e2c1736eb4287755d 119 contrib/debian-installer/binary-amd64/Release
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-arm64/Packages
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-arm64/Packages.gz
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 contrib/debian-installer/binary-arm64/Packages.xz
+ 54ce82fa743fd600d12eba77b7f822626aa6786d6947c94b854dbb9b642847d2 119 contrib/debian-installer/binary-arm64/Release
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-armel/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 contrib/debian-installer/binary-armel/Packages.bz2
f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-armel/Packages.gz
- eb034948d05f90cdc115f9ed0b91b34260ed9f587ea76cff2fd19b044ec0af71 168 contrib/debian-installer/binary-armel/Release
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 contrib/debian-installer/binary-armel/Packages.xz
+ d32ee9c01904230410e920fb392e844c9acf27a805f3ce4c57313b5095f7f87a 119 contrib/debian-installer/binary-armel/Release
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-armhf/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 contrib/debian-installer/binary-armhf/Packages.bz2
f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-armhf/Packages.gz
- 7c546630d30e8343c19c47d8e22350de88535fcdbe696881281e62f90409706e 168 contrib/debian-installer/binary-armhf/Release
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 contrib/debian-installer/binary-armhf/Packages.xz
+ b82baface03301f8746025632d9c3bec923f5a780e97d9ac13acb719f3610731 119 contrib/debian-installer/binary-armhf/Release
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-i386/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 contrib/debian-installer/binary-i386/Packages.bz2
f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-i386/Packages.gz
- 076f0931dcffde9a9a4bfa08afc2d3070cf3f301708707073192ff88546027fc 167 contrib/debian-installer/binary-i386/Release
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-ia64/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 contrib/debian-installer/binary-ia64/Packages.bz2
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-ia64/Packages.gz
- 537df961889947a91130a263716883c11b63a7ff752db477ae0f4ef636ecb7d7 167 contrib/debian-installer/binary-ia64/Release
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-kfreebsd-amd64/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 contrib/debian-installer/binary-kfreebsd-amd64/Packages.bz2
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-kfreebsd-amd64/Packages.gz
- b166dd74c833882ca534742b2b0ea0e378ad3012bdee0a98fb3794796c7dc736 177 contrib/debian-installer/binary-kfreebsd-amd64/Release
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-kfreebsd-i386/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 contrib/debian-installer/binary-kfreebsd-i386/Packages.bz2
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-kfreebsd-i386/Packages.gz
- a15797e2c7bc0ebc571a69a298daea5b00879846cfbe35b0d33a9be977311570 176 contrib/debian-installer/binary-kfreebsd-i386/Release
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 contrib/debian-installer/binary-i386/Packages.xz
+ 30290422018963a52263028d24b76604a6785c980a890f925d27dba4ddd882fa 118 contrib/debian-installer/binary-i386/Release
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-mips/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 contrib/debian-installer/binary-mips/Packages.bz2
f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-mips/Packages.gz
- 04d046e29a5c89eb84dc10b99f756b2b13dc0d3e47146b589c26c647f70b92f4 167 contrib/debian-installer/binary-mips/Release
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 contrib/debian-installer/binary-mips/Packages.xz
+ 51b7ca85724cdee1aa5d0204849b3c5ac92e1a1712f11f7dce18d750621c2fc5 118 contrib/debian-installer/binary-mips/Release
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-mips64el/Packages
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-mips64el/Packages.gz
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 contrib/debian-installer/binary-mips64el/Packages.xz
+ 840c6fbd5330973e80d9755ff83521712589d7f0ea9d4e5473c6f134ad6bf27e 122 contrib/debian-installer/binary-mips64el/Release
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-mipsel/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 contrib/debian-installer/binary-mipsel/Packages.bz2
f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-mipsel/Packages.gz
- 59a1e4c2e213fefae9338f8ba85508aeab6151052ec1fdfd68a7ff9c50eefff2 169 contrib/debian-installer/binary-mipsel/Release
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-powerpc/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 contrib/debian-installer/binary-powerpc/Packages.bz2
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-powerpc/Packages.gz
- dc1a2193eee149c2e922c14ec0eb2ba71378fc1452ccbe8a3b1b2ee289c8ff1a 170 contrib/debian-installer/binary-powerpc/Release
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-s390/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 contrib/debian-installer/binary-s390/Packages.bz2
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-s390/Packages.gz
- 2e83cc6bb4cff65560d10c4f59084a931e834849a59a66e5111eac2039cf6583 167 contrib/debian-installer/binary-s390/Release
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 contrib/debian-installer/binary-mipsel/Packages.xz
+ 03b6d7414bc8381adfa2be290069a7888a944ebbe2043556c826346218f183c4 120 contrib/debian-installer/binary-mipsel/Release
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-ppc64el/Packages
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-ppc64el/Packages.gz
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 contrib/debian-installer/binary-ppc64el/Packages.xz
+ dc84ab7b831fa491eceaefc97734dcd65f1ab77ea5328f731df117db434c00df 121 contrib/debian-installer/binary-ppc64el/Release
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-s390x/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 contrib/debian-installer/binary-s390x/Packages.bz2
f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-s390x/Packages.gz
- 7a0a2c981e4f93731a4daccb516abda97c167a783789c9a7dd4d541bb621e9b0 168 contrib/debian-installer/binary-s390x/Release
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-sparc/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 contrib/debian-installer/binary-sparc/Packages.bz2
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-sparc/Packages.gz
- e7ed8b06fda9a737a002175773ca4f6182dd65163b95eaaa7f453fd88dcb0c52 168 contrib/debian-installer/binary-sparc/Release
- b23996634a3d9c047d674f02020f9ac42433fd9cc00b8d0e5e7dc1ec64e56bb9 21108 contrib/i18n/Translation-en
- 1c45a22ffe14152dab9d4d1ae67b71961c46248d2e737a328577c4361215ee67 6350 contrib/i18n/Translation-en.bz2
- 49550c43cc8a33b0c2c3e61adfe9d236bbfccaf3a4bf34c09f9f0caec02f8d4b 1228 contrib/i18n/Translation-en.diff/Index
- 30d4c7a64ecdc358b2b1a7a2fa1f8e312ada85ff04b6b9aa8b9746d3f26a9cdf 169 contrib/source/Release
- 2cfd2708a3684821becb437c8bfd40f7abff9a0a40ce9881990f9d5416f699e3 29845 contrib/source/Sources
- 314ee058d46aa70635c4c90e8e5811507a736c3dc541164ba3d5ae3df28afa2f 7880 contrib/source/Sources.bz2
- dcc3e19153d4e8b8c1d8d4b4dba0e3ed9dabc5245cf90a704e371239a75008ed 4180 contrib/source/Sources.diff/Index
- 5f2ce488107faa571dc50afc259bd2996d4f37dfbffce1fb467d0670c2858da9 8150 contrib/source/Sources.gz
- 1dd53bc807fc24c2110400d31a78dbd675acd4082934e805466868b29d596e71 55983554 main/Contents-amd64
- 442fe799e2c5b671da1833504b324e056f67b340c8976fac071675a07a71e09c 21550 main/Contents-amd64.diff/Index
- 32c23efaa979da3363afb494b2b0965b6452f347cbc459d718d1830e2e5459f0 3864160 main/Contents-amd64.gz
- 465eca946e23098242edc467ee755c4f3cbb4dda58e8b12bb62f972c732b60b5 55728755 main/Contents-armel
- 2c187abd21d394cf3278fa1c63e4c1af1fcabd88083ba912ac6fa021e9841f5c 22168 main/Contents-armel.diff/Index
- c78bc501904387e014257406d6a0af9a34203b802814790736f30eff6ca48147 3786638 main/Contents-armel.gz
- ced3a5723b45f4e37f195eb82f95407fe4305334b30449a0ea5aed0068fe467f 55205131 main/Contents-armhf
- 65b1ab873ed52e7f5634853cd8b47c990d4c4e0a7fe8a86d77cb58359d642747 24360 main/Contents-armhf.diff/Index
- 153d2ef93ab78a34c1bd42157f24b2870c8e3c2bb4956bb552ca8ac9298a26ec 3775056 main/Contents-armhf.gz
- 1144e56690668e1feee07bfa1b58a8b99a4ad941a8e2bae20eea2de786ff0ce7 57405299 main/Contents-i386
- 878ddc41b55890c0fe3f3a34974b3f141b971cad201b15d2b6a902fa4a5c3982 25070 main/Contents-i386.diff/Index
- b9fe556297a5d6c39d7c932d701a67c31c938714e8840554f94a94a2d93f6f43 3936378 main/Contents-i386.gz
- a46a9be8808fd7a6c7ce6cb8ec832b7f3103147dc1fa57fa85dc54b76a03d2e7 58007915 main/Contents-ia64
- f425d31079800b33314d1bb0e19aba123f3e014d35a47170b43d9b40284d806b 18293 main/Contents-ia64.diff/Index
- c4ab6f14ad18ee6c12eaa7afe67fdd473c68e6bb777580ceebf4a9e1bb2a39fd 3901535 main/Contents-ia64.gz
- 2632f1a663c559f3468f5c308d113107247684e997fd977dd6d388a5075859b2 50310305 main/Contents-kfreebsd-amd64
- a9c7213fe664c9bc86a61958f687f8ac24ca6ccb62ccb8525781ac38dfb59a76 17583 main/Contents-kfreebsd-amd64.diff/Index
- 4805e6d023d45344ab6011fca5ddb0947e33cf7aa373c78b04e74eac83ddbd71 3450398 main/Contents-kfreebsd-amd64.gz
- 68b5d8c737c037d6831b63c74ad5e818a53268a21ee224a97cca9fcea0c2eabb 50378896 main/Contents-kfreebsd-i386
- e6c0b2d977ae24706905313e2b82c2c0310ecb074302582bf55701c2888370e7 17583 main/Contents-kfreebsd-i386.diff/Index
- ba961c6965a38a7a7d3df0eb6a447c4ac0068c1a67e8a939a4850f5c269310e3 3459123 main/Contents-kfreebsd-i386.gz
- 8a696368e377f0ab2a9c7557a98f3017fcd237c9ab8c15f589fb2557edf3576e 55948774 main/Contents-mips
- 417ffb09eb5160c6e59926968e287f403a0acb2516eab74f085cbfb21c169ec8 20068 main/Contents-mips.diff/Index
- 57c55c3441de9773f7ac461bdc5191c8efd131eb2674d3efe56c322b826a813a 3801345 main/Contents-mips.gz
- 69f2223ac63ab39a186a5671b6d14008f3b0e0dbdc692d46b2c8ed9130eaeaf1 56551959 main/Contents-mipsel
- b22d579a8b6907e8832cc26f0ff457697698d2b81eda8cc79c5460aef3455b95 19065 main/Contents-mipsel.diff/Index
- b8461c2517b69da654a773ddfc45fb353ecfb26f5e5c4e1f7b096099fc5762be 3833328 main/Contents-mipsel.gz
- b9ed7e9c29a097bb8fac81cbacac70d117faad7d9e29b8c24a94d2dfdfdfd41b 55924659 main/Contents-powerpc
- fb65f77ad9065e7e99d0ae7149c2ef9a65b0a3a9e5d5c20a398c725af3ec357f 18710 main/Contents-powerpc.diff/Index
- 7babdd47540ee53f09f0877e27b9b23e859ea29e339b4c7a7325d6ce0aa4fb21 3821616 main/Contents-powerpc.gz
- 9ca381a9e9f7d268a0b2238ffeadee53299339f55592f6a1eb5be5323f5a56f7 52562968 main/Contents-s390
- d57912459a11a3d33f88e0a1e05e7266731e3e2a825fce812c1e663b20a40208 17228 main/Contents-s390.diff/Index
- 265c1d3ef08e00c4cee8233bce2e3d3b32560711bc0a87810d67216efda6cf99 3617572 main/Contents-s390.gz
- 0b783185231d2a1c44ea2cc3022a81b4e38fc04aada4de8f186c084f45f97874 53483632 main/Contents-s390x
- d9debbb4fc6023bd54e15ff42cf00dc7c15d37c88a94f2b6af3cc1c5ca9af951 17722 main/Contents-s390x.diff/Index
- 3e0085be305564641adaea73fdeffc17d60b593b2a7d29fee9aa6dac8e111c6e 3697504 main/Contents-s390x.gz
- 85b5e1c4daf4a14028131e5fc78d75a0af78e4b65bce9d1b3fd20fa743957787 54200433 main/Contents-source
- 7feabed48474a7e410428e09354815e88b6abc70d2299780786fb1c64f542dee 17052 main/Contents-source.diff/Index
- 799289de2e0cb0f159c6904ed870e15630ae8f46cf74d482975bc895a13fac7e 5742422 main/Contents-source.gz
- 65fb5166afcfeb347b115789fcc02b3eb8179157f3a89e8eb6afca7b0745027f 54439714 main/Contents-sparc
- 265da7f419562983d6cc22605653f95b0300059ed1eb274d64dbbb790d56a434 18710 main/Contents-sparc.diff/Index
- dba3f5adf64b74492b34ee1152d2403e53f5d0c57273f6671f327257ea144cbe 3732736 main/Contents-sparc.gz
- 7bf66d68a469cfdd558e5f85abf42db42790dc1a21afbe43cbcb34b620b8a5d8 97265 main/Contents-udeb-amd64
- bc7710c34d0de835e037e193762946431f5edd008a47c43619a72a2c3be48122 6729 main/Contents-udeb-amd64.gz
- 367f34bfbedaa8737e138166e4681eea440e71b00b2457784753fa9d2e191448 82315 main/Contents-udeb-armel
- 07d3422b7a95f6c7c13a5ab96d55ae3c6b04683161428e7d43b0e18c1534c65f 4995 main/Contents-udeb-armel.gz
- 7d885a06242d4918776ba40df82df74a22633f5e2b3d5a5495b1f75ebe2c400c 84492 main/Contents-udeb-armhf
- a8aabc9273773d221246827b7aa7bc14bf36f8e0ab70a95a19d8455f001554f3 5965 main/Contents-udeb-armhf.gz
- c0f23b77aab3c28a2ed745ec8ac45f0a38876f6cd288b9d249734a3bc33782f4 206559 main/Contents-udeb-i386
- efc4f25c56dad68a37a6a5795acef73178433237ab767602f95f0e6f0dd691f5 13256 main/Contents-udeb-i386.gz
- bd1fda18c230710b09de4370f5231ed76737ddf8fe042cd817b70815cdbf9f1b 201741 main/Contents-udeb-ia64
- 8f3ddfe0bb3cbc3955c4acac4a1098dc0fb19d0b9c3ec36b66a5928f6ccd3247 12924 main/Contents-udeb-ia64.gz
- 55fb3b40258de379d9a4936e166039dbb9ea84b469656d8ebad2cda58a951211 3612 main/Contents-udeb-kfreebsd-amd64
- 83b49cbbb983cf0de6da1c723427e894bf21d8f0eacb89d4a0433a701d3ef29d 433 main/Contents-udeb-kfreebsd-amd64.gz
- dd412ae0d33833bbccdaf75eced7948f430de4a37a4fb8335aab1977fa3cee46 3612 main/Contents-udeb-kfreebsd-i386
- ad50dedfd1ce89218c1d9bcbd700ea40f56a02bf15766ade1d4297a8aea1cf8e 428 main/Contents-udeb-kfreebsd-i386.gz
- e302a0f01d1de3d784a50ba965e1fc06040bf36780357b9f7fb5c7c850b355b1 219854 main/Contents-udeb-mips
- fa5c24758abf864273083cca022eb60ff5214c85e489964f35ba0b737dd53dee 13373 main/Contents-udeb-mips.gz
- 3577c912cc408e7abe5f33abcff30aae33b65bbe7dce8f0c998f104b8eb06d5f 347698 main/Contents-udeb-mipsel
- 4a770632d46ca4b704bece9bc788816b825ce3dc6ef8d3a47b84c85134390851 20139 main/Contents-udeb-mipsel.gz
- dba0dc3ec48355fb6e25dd0f7f5f25ec1f93ab42244f7849023b1b72f14e4175 167963 main/Contents-udeb-powerpc
- a39684b3d2888280dc1d83b5799f961a63517c559629a0f1b1ac7d84f07f8648 9936 main/Contents-udeb-powerpc.gz
- 9ee001514882e2421a804c0d4825276ce655c8ceed48e1364d843dacebfac879 17745 main/Contents-udeb-s390
- 762d0423796358385d524357a7dacdd23a2169b80be43f916bf5fc800f7d5b0d 1678 main/Contents-udeb-s390.gz
- c9538cd0ddf724218a3278cfe4cce12cf15c39e20d80533c5f7d9b39d4c9b686 17655 main/Contents-udeb-s390x
- 42725abe9d5c0ae097c514850d1913562ad8717501b16f50f0aeffc418e3f1d3 1666 main/Contents-udeb-s390x.gz
- 5d50e03a39c3de7c08c6e3572b038589ad8a0a279c54abf8c73ef66546816d9f 41956 main/Contents-udeb-sparc
- fe0e7d065c7352418c145d55a9ce7d9ace52cc9494804e95d3f4db506a7d1852 3108 main/Contents-udeb-sparc.gz
- 4d6226c1694288e86a80f046c32e4e0a6e81c8a7f3d477ad27122fb0b8a91320 1752561 main/binary-all/Packages
- e2b3a9b56aa3e3dd1f01459d0ddbfbe361e95bc281837c8c0e877c03d0fcde36 298614 main/binary-all/Packages.bz2
- 6c6669151cc4fa9c5ffb15f706effe1a294df37df83260045b2f31b134c4ab0b 363124 main/binary-all/Packages.gz
- d9a1edb484cd5244b1a08dc60412b680ad1780aede975451f453751f3037f855 163 main/binary-all/Release
- a7a4f2bbbc2bbdfbaacf73ddf885ea9ad389a9bb6ad80663b8a7eb4c88056c68 3101317 main/binary-amd64/Packages
- 5ef91566cabcbba8f5ba1a723b7e4c64a3459e2e622ca62fc32d6553e2671acf 611011 main/binary-amd64/Packages.bz2
- 44879fc6a3ea6caaef6da21afea1247f2fd1c8938f103efbcff230f9f662664b 27088 main/binary-amd64/Packages.diff/Index
- e0e9f98d60d23275d5ad25e0a6a76b89e1e8925748f05fc74c22f654cccffd5e 776104 main/binary-amd64/Packages.gz
- dbc0e8638ceceb54f2f06a3d6242cbdff415d17c70d5033ed0f8421f3e1fd874 165 main/binary-amd64/Release
- 3d2451737b41a5970041bf9fadb420f453cf1662eca83d37951699dadd344c3d 2946046 main/binary-armel/Packages
- 3404e26fc6c3bfd88be093ce626e5c8b5e4c223959eaea5b86ec306acefbe390 581488 main/binary-armel/Packages.bz2
- 2790d7c50e36526a1cbbf11e4af968604da6b5003dd5043941b038d00c4f3633 27796 main/binary-armel/Packages.diff/Index
- 377d0cc948eb5b0cfe1eebcf3603146b2d6b5a108a5ec4c21d2ec5700fdbc3ec 738067 main/binary-armel/Packages.gz
- 30f63e300320ae162b398dee548c1be29ec01697c56b79f338b18a539190d486 165 main/binary-armel/Release
- 506e732790b0c2af30c2049ad6dbf2eda937a6aaeba9b74789997662f1c39efe 2977442 main/binary-armhf/Packages
- be5a99d36a423d8e5bdae1fefa38b047c97e956c310b5bba3053fb189cc98dc0 586282 main/binary-armhf/Packages.bz2
- 9ab67201390bfc12f2852bf15e62b08b104bffa4d3cfc57d34f7e68fd3193e06 27796 main/binary-armhf/Packages.diff/Index
- 8c0a674848abbb5cfe51066585200e56ef9012501488070c607dfd3688a827bc 745128 main/binary-armhf/Packages.gz
- a7725b4223240509ffd611c9f3106175bfe410c43f72c40fb6fd7c22481519e4 165 main/binary-armhf/Release
- 53d6df9fd84253cd9e79699126a5f2e941e55069b111ec7e4d14c57f8a32e9f3 3097673 main/binary-i386/Packages
- 3576b3561f496edb5f2400af0450d31910a11ea48d6238854401947ddc23b82b 610952 main/binary-i386/Packages.bz2
- a42b99aca348ab798cf075d7bc7046b2fc1321fb6b78ac40aff85c6d1e49db37 27796 main/binary-i386/Packages.diff/Index
- 5aa6255a3d353d05303a74185eb5b1d8f8e7d576197be0273c9a7a40f1b074c0 775752 main/binary-i386/Packages.gz
- 1d7733a3c35b04b7df2f6cb0ec3b8552da504f817ae9914091f4914f97f09406 164 main/binary-i386/Release
- dd462577073446cbff8bd33e81ecd7da4c9cff902332094a8768c0ee83a4a52b 2807416 main/binary-ia64/Packages
- 14c475f3d755baf93741e2d0f336280e37c21edb9b56d6abcb09b88b403502be 557449 main/binary-ia64/Packages.bz2
- 0d2cb36b443bdf0d67f835bd54240e33954c796485ddc59dc8e73b5065ea4e00 18214 main/binary-ia64/Packages.diff/Index
- 3fa170b163f147f74340aee6f9675b13286f4f66b8443d10c02bc0dcb0456995 707233 main/binary-ia64/Packages.gz
- 32c2cc3ce3cdf65c3798b482e25bf4f880d1598810125a04a32a30c7ef91418d 164 main/binary-ia64/Release
- e5ef09115f7513ddd7b871684f44586a55c5aa57b9b79e8e56663f104e51fe43 2641182 main/binary-kfreebsd-amd64/Packages
- 8fd18eac264f7087bc4bceb555ef38ea7367f74761a08c951ad32bb866b07cd0 517444 main/binary-kfreebsd-amd64/Packages.bz2
- 4731711984a30d5f1008ce08b107085adc0901cde943308180a53b42182104d3 24256 main/binary-kfreebsd-amd64/Packages.diff/Index
- 95de68a11aac06f67b860529a590185849ad2130144e90a5528f8e002cc2fa9b 660341 main/binary-kfreebsd-amd64/Packages.gz
- 65da1dce99093a3c64f6f2cd5f3382d407dfefb44a843fd3a2346923b9a3ccb1 174 main/binary-kfreebsd-amd64/Release
- e6e3602a2e6683d63fdda5e8f2d0b9f8e8b480ea136d8f3cc783a7c837fd71b6 2666534 main/binary-kfreebsd-i386/Packages
- 1420789f19e9369d2adebd63f0ec8191e350329e11658997cca532deddff9ae1 521809 main/binary-kfreebsd-i386/Packages.bz2
- 0fb1b3159ed6605158505be46ccf2fa96640450b7d0e90f3dc52eecb0d38b625 24610 main/binary-kfreebsd-i386/Packages.diff/Index
- 9a44c8e9c97d314a920022ea05bcbcb1ef0712daeb84819ce5e443d906db0d12 665460 main/binary-kfreebsd-i386/Packages.gz
- e11e8f9febeac4ecadfecd86eaa8f5c06f5b2368fd22e2ef65512687cf85dbf3 173 main/binary-kfreebsd-i386/Release
- c392598e8cd789ac3484d92c7325bb0b37ebeb763507eafe722386f980954f4f 2907660 main/binary-mips/Packages
- 166e2d4748463744ba5ce609a9cc352dc1f4fdd818b871d54fe5c085c6bbbe87 575633 main/binary-mips/Packages.bz2
- a8c03942526380bb77d55d66b87a69a011526c18d770f6c8c26ccc4e902e8ecb 21382 main/binary-mips/Packages.diff/Index
- 761ae00368ab40b4399d9293e2dda4252fa7a2986429d0c92cc65553c752a66d 729884 main/binary-mips/Packages.gz
- 09e235fe6d52246b56de4a92c7616f7fb3bad0009530eaed8df7a39f92f3c0a1 164 main/binary-mips/Release
- 4d7269d0892cafa41e6d28aa03e572c94d257d4e34ddb4cf6f03c5d6a4d5d512 2942003 main/binary-mipsel/Packages
- 4a167b20f529697adc3bb0b15e9369475c7fec388fa88f75845bd709fd2d807d 579576 main/binary-mipsel/Packages.bz2
- a0cc715932540da7896c98c58df363807be2f669e069fc5ad039735f58f09cda 21010 main/binary-mipsel/Packages.diff/Index
- b8ac07593e4d7c04a766eb09aa186db9fba6ef22f3bee24f0b3317104bfc1b73 735563 main/binary-mipsel/Packages.gz
- 54922acd9553bcd9c89f54ad0bb4d72ec92ef60bf6fc75842027dcddaf057b5f 166 main/binary-mipsel/Release
- e205878d57fd3ffe1bf345f7227b6043693b0d761046d55ab689a4e433d428c1 3158047 main/binary-powerpc/Packages
- d373e7450ab3cd3c85963f6db1b3e15b7b85f422ed2819b58517da3fe9fbcead 609147 main/binary-powerpc/Packages.bz2
- 0836c4f87471f1f9792c40c130ca8e65b0ea598d3a00a5e40a76027b2ea0ba7c 19888 main/binary-powerpc/Packages.diff/Index
- 7db73940a1d3723f46bfdd1e6832bddb90ea8f5c8977ddc963e559be578a13c6 769669 main/binary-powerpc/Packages.gz
- 0f7df182a0e6728adf61215b598a9a67133bd0e429ac9aa3b40c6a1c90a2e661 167 main/binary-powerpc/Release
- f654374167ad53b10fe7fc114c8fc968663cfe7e0a71b35a04ba55baf773e8fd 2921850 main/binary-s390/Packages
- fb56fb8f2bdc67b1eb4297ef290989e6e2ee8f042b964e7d37eccd1896cadba2 574234 main/binary-s390/Packages.bz2
- d9306f2ff79bda63c8dcb02d3707813876cc785983c21825818f720a4f7abeb8 19396 main/binary-s390/Packages.diff/Index
- f226eee1a1afdbd4ace3b0356f57854452607923e35be46016fb49a5ae9fdbbe 721451 main/binary-s390/Packages.gz
- c5d7fb58493c1bf263ea7ed0801cc0abea81cfa1a3af902c132f213bd7c22853 164 main/binary-s390/Release
- d40dc5b4d0738a17ef5d27258814490752fe9f49280a91dc9db1150ab26b9234 3092767 main/binary-s390x/Packages
- 74fda6122d09875a8b4be6ae69e9ef3c40f079c3ebdb2d8610c6e65ef356a1c5 598557 main/binary-s390x/Packages.bz2
- 88a765ca4696b9ffff19a0a1be20daf90277e0a2f6af16df6ca54a1869f93b2e 19396 main/binary-s390x/Packages.diff/Index
- 6bccd612b8402e1dec87db30edd509540dff013c09e03c5ae806266482d8e18b 754961 main/binary-s390x/Packages.gz
- 0e1e8c9ead5ace3b8e30bc080dd2439b6107dd65f2929804bbb823d764155e1d 165 main/binary-s390x/Release
- 298ea188b7cdf79c6eeeafea2c5640d4c68cbf81457b5110da13a39e2d0860c4 2909809 main/binary-sparc/Packages
- b62cbace7b86df8d1e5f8fccadc57dda5b04f514cd8afd08e02f08b87cd3237c 572645 main/binary-sparc/Packages.bz2
- 95dcb75f3ff7770262f2863916430c6c09a25d015f04901205ad248928a9ab0a 20380 main/binary-sparc/Packages.diff/Index
- 9a6876c403fb7f8160ab86cf2bedbce7ff0a6cc70c9522049cbfe0cf85159b05 727797 main/binary-sparc/Packages.gz
- 0705eaa8964a3db6f050c2d7d932b3fb092c79030d04348a63f66dd62c668dc1 165 main/binary-sparc/Release
- 6d30fc2100a9474713dbf69ecbd10390472c5dfe33253efdcb9ff520616368fb 1201 main/debian-installer/binary-all/Packages
- 9656b69d4d107f08544687996e0d1cc609a2779e0c2a28d7bafd2780f4411d30 720 main/debian-installer/binary-all/Packages.bz2
- 361d8cc62f2d64de5396558132ca5c04f3c76790228d6e22edf0a9e7e87daff6 648 main/debian-installer/binary-all/Packages.gz
- d9a1edb484cd5244b1a08dc60412b680ad1780aede975451f453751f3037f855 163 main/debian-installer/binary-all/Release
- 4360ef11c7b649f76751f940d35bdfe90c80cee84820b0dba70afd2e8f79c53b 52673 main/debian-installer/binary-amd64/Packages
- c8cf8d6f3935f9b28dcf4b2e79120ddc82af1596e55c67233af4b32cdf97229b 10640 main/debian-installer/binary-amd64/Packages.bz2
- 01a99d9dc8920be61faccde2602f1c150f07bfb9d09c765c0b193b3e34ba7e9c 12316 main/debian-installer/binary-amd64/Packages.gz
- dbc0e8638ceceb54f2f06a3d6242cbdff415d17c70d5033ed0f8421f3e1fd874 165 main/debian-installer/binary-amd64/Release
- 1aa099eb91d75e49027218771eb8440eb1d459f90c93824357633257ca39d660 85058 main/debian-installer/binary-armel/Packages
- 38f64d83b19ca9c49f6cd192f75a35aa46ebc7f8beda1aef56c1aedf31860ace 15131 main/debian-installer/binary-armel/Packages.bz2
- 86365a32d6f5c29d7f49ac724fa7a2976944930f42971160163903e43157585a 17272 main/debian-installer/binary-armel/Packages.gz
- 30f63e300320ae162b398dee548c1be29ec01697c56b79f338b18a539190d486 165 main/debian-installer/binary-armel/Release
- bb442212d7dbfb6f2bc8a774d7a926103c25d754b136fad0d4ab432e0f663731 40455 main/debian-installer/binary-armhf/Packages
- 3c7985f074f48285126fd36e19475d99e4f9e1417f999f5c3ae87a4c41a145ab 9030 main/debian-installer/binary-armhf/Packages.bz2
- aa075e6b5042276e0730f36f1736f464ce91c96e258cb5364e2ceda3d60c94ec 10230 main/debian-installer/binary-armhf/Packages.gz
- a7725b4223240509ffd611c9f3106175bfe410c43f72c40fb6fd7c22481519e4 165 main/debian-installer/binary-armhf/Release
- 2758bacbd04f98de0108ff48b513a932071b443cfb3d5a6ba1466c47d7ba77a2 93685 main/debian-installer/binary-i386/Packages
- 2166c219d6bfea16b90b920b0ecd0b59d3078356771dae2ca0ec75d12c2c26a3 16533 main/debian-installer/binary-i386/Packages.bz2
- 2d6f2f630b4d8ee87c6c49e61b6797e42a3267a6164ea2bdf8b3c257dabe5145 19236 main/debian-installer/binary-i386/Packages.gz
- 1d7733a3c35b04b7df2f6cb0ec3b8552da504f817ae9914091f4914f97f09406 164 main/debian-installer/binary-i386/Release
- 40f17a90437cecf1d5f14267e56db92e12cfa218a243f7b472bce26b6e271a63 134527 main/debian-installer/binary-ia64/Packages
- 7f8657efcfaca35a182beec01eaf5915feabb2599e1336fe38cd728061ca404a 22052 main/debian-installer/binary-ia64/Packages.bz2
- 401cd598b141e3a7d206d57b6f959450dba03f1a234e9881f419f6172fd14f10 25474 main/debian-installer/binary-ia64/Packages.gz
- 32c2cc3ce3cdf65c3798b482e25bf4f880d1598810125a04a32a30c7ef91418d 164 main/debian-installer/binary-ia64/Release
- 302d7619eae081899bbd76f9ee8803bf1c0e92319969ad95cca0622f48af9e3a 5111 main/debian-installer/binary-kfreebsd-amd64/Packages
- a5cecd7aea3991b7d54075755e38ff50d0fd39061733b6c38b7d6a14485885d7 2073 main/debian-installer/binary-kfreebsd-amd64/Packages.bz2
- f385b0f50b4fc7306a0a78e195750e4a8dcf3a773652b6ce7817ac5274ed73dd 1944 main/debian-installer/binary-kfreebsd-amd64/Packages.gz
- 65da1dce99093a3c64f6f2cd5f3382d407dfefb44a843fd3a2346923b9a3ccb1 174 main/debian-installer/binary-kfreebsd-amd64/Release
- 95a2f373443eac247fe5f8b3a98edcdf5fc6b93a1d9b0253c375ae3fccf91751 5099 main/debian-installer/binary-kfreebsd-i386/Packages
- 2badd1d5e2a73e8d63904334482e9b339e9963d7b6fb6480ba1986f65e1c7297 2061 main/debian-installer/binary-kfreebsd-i386/Packages.bz2
- f76c304e34b15b79257ea7981102243961c75d19d29b110790343cf689e166f9 1942 main/debian-installer/binary-kfreebsd-i386/Packages.gz
- e11e8f9febeac4ecadfecd86eaa8f5c06f5b2368fd22e2ef65512687cf85dbf3 173 main/debian-installer/binary-kfreebsd-i386/Release
- bb078685b88010eb988c588f361040a0a1012196b37a79bc02a6f96e4d4018c0 133337 main/debian-installer/binary-mips/Packages
- e3179186982a41b2241351dc00ef056739f30dd599a95718384ee427433b3d35 21486 main/debian-installer/binary-mips/Packages.bz2
- ed32cf55a376003ef9a06e9f7fe2a63c272a23171b4a894d13cbc2e5eb459540 25104 main/debian-installer/binary-mips/Packages.gz
- 09e235fe6d52246b56de4a92c7616f7fb3bad0009530eaed8df7a39f92f3c0a1 164 main/debian-installer/binary-mips/Release
- c8d4cf4c725bb5b63644bd538d55835b7f4d491b970f376c5425d26e393339ef 180613 main/debian-installer/binary-mipsel/Packages
- 28f8686775d39670f8bbe2a0596116c2724847b8ef268f056bb194b1ef58c629 27088 main/debian-installer/binary-mipsel/Packages.bz2
- d56f72e3775058c54e38e247bdd36b37af215a0e9526d205c83162b42d1f5a5e 32425 main/debian-installer/binary-mipsel/Packages.gz
- 54922acd9553bcd9c89f54ad0bb4d72ec92ef60bf6fc75842027dcddaf057b5f 166 main/debian-installer/binary-mipsel/Release
- 7e71a05af9de71d6c5dfe078b81a2ea430521b4541aa2eadf898a71e42ebcbc8 81646 main/debian-installer/binary-powerpc/Packages
- 918aee274485b85c37edeff31f5854e3339d9da3edf0997a7ec3b4e93388801a 14561 main/debian-installer/binary-powerpc/Packages.bz2
- e01744a5ab9d30b42271157bb28c66df2b0388c50ec20ae68f0f5381551c9a6f 16569 main/debian-installer/binary-powerpc/Packages.gz
- 0f7df182a0e6728adf61215b598a9a67133bd0e429ac9aa3b40c6a1c90a2e661 167 main/debian-installer/binary-powerpc/Release
- 7842b55581b4efe5408c9ca583c1a833f000bef2640bba19f271e802b1262bf4 23156 main/debian-installer/binary-s390/Packages
- 9f03bf4e0c9f1d751648862ef9c99aea99aacfe38a870f1d3ee2d33bb52c734b 6029 main/debian-installer/binary-s390/Packages.bz2
- 7c55b1aafafe12b8f047fd18a650ffc4343b3bb7c673794d7972fb131db04a6a 6480 main/debian-installer/binary-s390/Packages.gz
- c5d7fb58493c1bf263ea7ed0801cc0abea81cfa1a3af902c132f213bd7c22853 164 main/debian-installer/binary-s390/Release
- 115a4d4d581c84b7d00f458fbb7620a1e13afab06a103b7c4cf57e6e22a5ab58 22632 main/debian-installer/binary-s390x/Packages
- 625d0f59f9076e74c8f6bca3198ff6ed52a7488e660061e81fe7612a5181e1f4 5845 main/debian-installer/binary-s390x/Packages.bz2
- b0d65230dfa5a6f026db8f822933f6c7472f28235c395d32410ba2e6acd11ca2 6312 main/debian-installer/binary-s390x/Packages.gz
- 0e1e8c9ead5ace3b8e30bc080dd2439b6107dd65f2929804bbb823d764155e1d 165 main/debian-installer/binary-s390x/Release
- 0bb0571f97da35e45459aa1267a1a63b30d7d44cde634ec7f2591e17357f4b75 33653 main/debian-installer/binary-sparc/Packages
- bf05047c6ef7f510655bd89279544768332c783f613ecd457dbfac5c85a09b14 7535 main/debian-installer/binary-sparc/Packages.bz2
- e8cfdd9dcf82a0dd8ac54c27713cccc10c245c11f6d65c60e84e995fba8a1f3d 8369 main/debian-installer/binary-sparc/Packages.gz
- 0705eaa8964a3db6f050c2d7d932b3fb092c79030d04348a63f66dd62c668dc1 165 main/debian-installer/binary-sparc/Release
- d0f7ca93704c44282e861887f695decd0d479edf208f23be0152384385be7308 2215515 main/i18n/Translation-en
- 8f421c86f47bd1ebb36133db2cdbf234a10f99bda1d1df323ce82b61a7fd23a0 379130 main/i18n/Translation-en.bz2
- cf9526d0724d3560b33574f8d2a979898ed93830b2f876b68d10ab3b44bb0c40 10360 main/i18n/Translation-en.diff/Index
- b99f4a8c1db622a1fcade3c95c997617a0aef45b4679a259095732e8c5005bfa 166 main/source/Release
- de9c9e7ace5f988d57462b427cea0a1789f7b9f882c8bb2ca5c642db8c8c9853 2698141 main/source/Sources
- f06a222099ad7914826adc34b933b0935acb151548de4f55e35f04ba6078e3f1 459978 main/source/Sources.bz2
- 2ff7187f2fe2c6e873a60ec9a8ec237c766a88f29efe9f6ffac8c2fa3127ccbe 27796 main/source/Sources.diff/Index
- 35f91f9c6d2175e786ae5965cdfd4cb66461ee063923a73a9aeb62d3eaca77a2 594683 main/source/Sources.gz
- 754292b20f72f6d34b72d7a8d3f4638482462bb08de6116defb07516149cb890 980964 non-free/Contents-amd64
- 66c214470d188c9ece1e22c0670f78dfeb40cdae870d3be859b4c4eb0c822416 4948 non-free/Contents-amd64.diff/Index
- 07cf291d52f2c8be5cacafa2fcb7f09c8aef81117c3577a3f6c80b5d54c46e78 59410 non-free/Contents-amd64.gz
- d95d524e2616e2801f54e42af44a88ec34936894f01ad6e8f75899071b3bad14 489792 non-free/Contents-armel
- 1df27ca350ec51d5d898f9f8eee41521275d8ddb07e5014662a154d762798cb4 736 non-free/Contents-armel.diff/Index
- b6d1efc0e9a2c3e6ccef18902fd1a8c0cdeeb3fdf754435cb078e4e1c3552d76 27750 non-free/Contents-armel.gz
- d95d524e2616e2801f54e42af44a88ec34936894f01ad6e8f75899071b3bad14 489792 non-free/Contents-armhf
- 1cc13ce6c325349068cddddebe6f871c2b8f2f1b5cbd7110cbfc74859f47e19b 736 non-free/Contents-armhf.diff/Index
- b6d1efc0e9a2c3e6ccef18902fd1a8c0cdeeb3fdf754435cb078e4e1c3552d76 27750 non-free/Contents-armhf.gz
- a231efe47da01835f72d945469bb19e7df84091fd90a4a8125bbbe87e26231bc 991147 non-free/Contents-i386
- de65f182a17e7422c86397acf73a7e021ced3296ef0f70a140695be1a7dbe30c 4948 non-free/Contents-i386.diff/Index
- 003689f826cdc022f82425a7694b2c72c40b3329394f87b8481b7a78d2c2211b 59944 non-free/Contents-i386.gz
- d95d524e2616e2801f54e42af44a88ec34936894f01ad6e8f75899071b3bad14 489792 non-free/Contents-ia64
- 51527ffe58042d5cc337a62e4582b24e3cf86e7cfc0fe0b06314f42fd920f82c 736 non-free/Contents-ia64.diff/Index
- b6d1efc0e9a2c3e6ccef18902fd1a8c0cdeeb3fdf754435cb078e4e1c3552d76 27750 non-free/Contents-ia64.gz
- d95d524e2616e2801f54e42af44a88ec34936894f01ad6e8f75899071b3bad14 489792 non-free/Contents-kfreebsd-amd64
- 608feaee0f0ff1ff6972d1507a9e4c5c20da76bb8f8d8f67c391c6fb3be0caa9 736 non-free/Contents-kfreebsd-amd64.diff/Index
- b6d1efc0e9a2c3e6ccef18902fd1a8c0cdeeb3fdf754435cb078e4e1c3552d76 27750 non-free/Contents-kfreebsd-amd64.gz
- d95d524e2616e2801f54e42af44a88ec34936894f01ad6e8f75899071b3bad14 489792 non-free/Contents-kfreebsd-i386
- bab102245fc1428fdb3fbba911f666131b5d76ae1358e593c39d5784ddb01f6f 736 non-free/Contents-kfreebsd-i386.diff/Index
- b6d1efc0e9a2c3e6ccef18902fd1a8c0cdeeb3fdf754435cb078e4e1c3552d76 27750 non-free/Contents-kfreebsd-i386.gz
- d95d524e2616e2801f54e42af44a88ec34936894f01ad6e8f75899071b3bad14 489792 non-free/Contents-mips
- 4a6898f70592bbd994ebd5d573f15e4a2b15208e85cd099c4f083300ffe8226e 736 non-free/Contents-mips.diff/Index
- b6d1efc0e9a2c3e6ccef18902fd1a8c0cdeeb3fdf754435cb078e4e1c3552d76 27750 non-free/Contents-mips.gz
- d95d524e2616e2801f54e42af44a88ec34936894f01ad6e8f75899071b3bad14 489792 non-free/Contents-mipsel
- a35bfbbcccd9a8ddf608fde432372556567b71c68fab58eedc6641fc732bf7b9 736 non-free/Contents-mipsel.diff/Index
- b6d1efc0e9a2c3e6ccef18902fd1a8c0cdeeb3fdf754435cb078e4e1c3552d76 27750 non-free/Contents-mipsel.gz
- d95d524e2616e2801f54e42af44a88ec34936894f01ad6e8f75899071b3bad14 489792 non-free/Contents-powerpc
- bd7ef317440199ff5640d24331b5be69c24ff9421d2fa88a98483b1263e7c906 736 non-free/Contents-powerpc.diff/Index
- b6d1efc0e9a2c3e6ccef18902fd1a8c0cdeeb3fdf754435cb078e4e1c3552d76 27750 non-free/Contents-powerpc.gz
- d95d524e2616e2801f54e42af44a88ec34936894f01ad6e8f75899071b3bad14 489792 non-free/Contents-s390
- 9f45565118b581c8b4e1fc317f9a0ade7d5c4db6d908942ce88b31b757c16920 736 non-free/Contents-s390.diff/Index
- b6d1efc0e9a2c3e6ccef18902fd1a8c0cdeeb3fdf754435cb078e4e1c3552d76 27750 non-free/Contents-s390.gz
- d95d524e2616e2801f54e42af44a88ec34936894f01ad6e8f75899071b3bad14 489792 non-free/Contents-s390x
- d13c3279bbfa98c7e1baf9cf2b0a9e8598b283e087a6a9fde56300ae00d68567 736 non-free/Contents-s390x.diff/Index
- b6d1efc0e9a2c3e6ccef18902fd1a8c0cdeeb3fdf754435cb078e4e1c3552d76 27750 non-free/Contents-s390x.gz
- f9e3c329638f22cfb795d09e4b1d64a726fbe224994c3f69a200b09049df550f 310077 non-free/Contents-source
- 3e2876750bf2453fe394e3553f07d38a9640afd980d3f50c17f9242b45f3c603 4188 non-free/Contents-source.diff/Index
- 613d44a2fa8cfee04c27b074671c7730415ebaacce397ecd69921a1616a7c87a 30075 non-free/Contents-source.gz
- d95d524e2616e2801f54e42af44a88ec34936894f01ad6e8f75899071b3bad14 489792 non-free/Contents-sparc
- c5b56d026414facf83037ea2ddee925e15e18f374cece29fe523fbf21b86c2f9 736 non-free/Contents-sparc.diff/Index
- b6d1efc0e9a2c3e6ccef18902fd1a8c0cdeeb3fdf754435cb078e4e1c3552d76 27750 non-free/Contents-sparc.gz
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 contrib/debian-installer/binary-s390x/Packages.xz
+ 8e59ec07ff791a520c79650486c51c0f55720a78c397899ef649a8a2608b449f 119 contrib/debian-installer/binary-s390x/Release
+ b70f521acc48449b13a9a673cf73d721448ea160b38424fbf42c8933f3e2ff74 103445 contrib/dep11/Components-amd64.yml
+ ca98fc212a6484cb7311913faca93a05fbabdd228e9f2d1b56ebe14f4e5156fa 12945 contrib/dep11/Components-amd64.yml.gz
+ 58f0a9eb19c41780bf096d83c05b432810184b5d1369a8a534936a72205d3c0c 11504 contrib/dep11/Components-amd64.yml.xz
+ e39b26337892086f0888962f9343b4f0fd1aa2d6ebe8bb8115097e6a4f917b47 103445 contrib/dep11/Components-arm64.yml
+ 545f78c666d64c55f15beb3880a4573055d66229c912c6fd3a4d7a84dab65795 12903 contrib/dep11/Components-arm64.yml.gz
+ 0e5634ded56c93eea86a656b908b8c846d24d5ff06a74b928e26a7417da1604b 11516 contrib/dep11/Components-arm64.yml.xz
+ e36423353fd694500a74817fa2bebb21d58c38395dad2bf2add5073a2644724f 99187 contrib/dep11/Components-armel.yml
+ 2cb6f6927697c4b1649a91f2e2f72a3d1c7c43615906fe1c4af404ee80f0e248 12210 contrib/dep11/Components-armel.yml.gz
+ 3b94c4d8027521b7be3bec371f52aeebf7159a6a3296e1fde3f11f11456ea980 10720 contrib/dep11/Components-armel.yml.xz
+ 00b78864ff64d82944a5f2d300a62812fa196763e625316d3db58738544dc2a2 101441 contrib/dep11/Components-armhf.yml
+ 0044bb3bfdfc8da84c3d5e3c81860694cac68261a84218e5a92061c1c60a6986 12814 contrib/dep11/Components-armhf.yml.gz
+ 13ec5d2e265c26a3fc19618af7c32fabe670d52da46f18c79f3ef9c7cd4715b5 11180 contrib/dep11/Components-armhf.yml.xz
+ 5013757a04854d8aabf05ae96612928deac471b7c9e30e58e2a98ac08985b912 101191 contrib/dep11/Components-i386.yml
+ 7c1a7c73f99a30852d723184c546f75b8389c1c63e3f73598035d405d6ad483f 12199 contrib/dep11/Components-i386.yml.gz
+ aa69ed88b70c92ca45baadf44bbfefd6335b5020742c1792e351ca3fef36a798 11068 contrib/dep11/Components-i386.yml.xz
+ 71f5222035e7d659cf15c07cf1dfe94d7fb726e5b5da25177d5b297b88c0557a 101191 contrib/dep11/Components-mips64el.yml
+ 6381199b774b417034501cc0d5c392529ce398b7b2719fea5697b9e666be1af0 12714 contrib/dep11/Components-mips64el.yml.gz
+ c1e0dd5fc17ae25a58a5156971f62dd375bedd1217364105ab0abde22040e580 11136 contrib/dep11/Components-mips64el.yml.xz
+ 3354ec23c7d17492e38149db5f6287409b184f5dbe0c60af524d7ebb80514db3 101191 contrib/dep11/Components-ppc64el.yml
+ bb2cacf37cde6a92362f82fe54ced0bf13d3f65c0bc7c6c15b6abcb4e8c15b63 12411 contrib/dep11/Components-ppc64el.yml.gz
+ eac61754b1b69ecfe567667cd8a6e18739eb977f2e5c7445b21971db8656277a 11060 contrib/dep11/Components-ppc64el.yml.xz
+ db7a586ea016be0048909ec388471930825762ed4e430f7c2f70a8ee63a153d9 101191 contrib/dep11/Components-s390x.yml
+ f4be93bf26afcfd003840d518dbea491340054277d26a46017e1519968910d94 12351 contrib/dep11/Components-s390x.yml.gz
+ e5b4acbad29eb21e6a40386cb8bfea26da92955f7a5e7d9706410e3bb5a2b9a3 11076 contrib/dep11/Components-s390x.yml.xz
+ 2c81593070959b32532e1f13c648932e9279301d7fdb94a9914ba1ae418b55be 266240 contrib/dep11/icons-128x128.tar
+ 33ca052001bb1bd14a302b0f11a4481f3745404e535400599b86fec031a3dd7c 226447 contrib/dep11/icons-128x128.tar.gz
+ 4d59a6c0f37b735745ad1c92263c3997ae209e1d38173171f887cc571f03b55d 87552 contrib/dep11/icons-48x48.tar
+ 6182cb3cd6db800f1a922360ba7624ec36e6766f48c453b69410829692e31821 56361 contrib/dep11/icons-48x48.tar.gz
+ 757f07da1dadc299a5eea2688b05452f3e64fd2dead54e2936738907cda394a9 152064 contrib/dep11/icons-64x64.tar
+ fbb7de3b2bdf4ea369787510353dd0151798c333479c1222f2db53db1c2c6f69 110187 contrib/dep11/icons-64x64.tar.gz
+ be032b9c35f7184578c1929157828f3a7a5c85f0a942740bdeeb9ae939e97a5d 180788 contrib/i18n/Translation-en
+ 2b645f7b673de99d725d3e45963340d45da744681c3171359372abfb3d020154 44160 contrib/i18n/Translation-en.bz2
+ 77e7d426420d5107c7b096dbaf60660f81b65b772743738fe0c5479af01a8665 120 contrib/source/Release
+ c01b2cc6fcbd8b2a7384062fb0062f8a4affbda3fc0b2f82f6272edf2a8f8f8b 171415 contrib/source/Sources
+ 2f8988e1d77b67c9abcb54d0ac68161b00eb0c524e3c2982c84c43de95b83429 50324 contrib/source/Sources.gz
+ 9d4a1c01ee63c5bdcdd6f7eff94a560e82f9af94bf744edd666c3a8e844e7b5e 42524 contrib/source/Sources.xz
+ 93b394d4c4986e7f633466a7c8af44ff39ddbbc993b461b05d00ed08d6794b7b 544269024 main/Contents-amd64
+ a85d67ea86d5fd4bbac4787809e86d9e97da2f171fb2491057bc9a5164be555f 37329769 main/Contents-amd64.gz
+ c36d79a0253bf87590243cb5f48c089584e829043f8d60ab5d32081e8641929d 529782549 main/Contents-arm64
+ 0fab2f30b128f1b1793e3d81241ec150e6b603abe019ab3ab6dcd439a0551998 36507963 main/Contents-arm64.gz
+ 32fbdc090963b2593adf15d2ae548f3ce7a8c226fe7d82172be78a0724590e11 521282981 main/Contents-armel
+ 21c357893e943d6140d32fb0761a07987c126ca974c6e2a6350d3144539763e8 35956662 main/Contents-armel.gz
+ 19a636cc67382e7c6b472f4215495e0e9d35d163d6f5adc8fd14d4e3737aa16c 528756979 main/Contents-armhf
+ 4969c66f08a108f14e2916068fdf297951be31a0d0ab177f3230c4f90d25b794 36456075 main/Contents-armhf.gz
+ 3bf3f9bfd8a92aceb746c54435c6246eeb50e86a2081736b3dd4baf6cf5cb0d5 545147025 main/Contents-i386
+ 3b95eac92307c45ff53bd90b194281fc700d031ffbee8bc66e6f2da8240d96ba 37351315 main/Contents-i386.gz
+ 4966944c1f9a1c5deb988377eb491467b7735518adb62aa049ef6274f7c3e6c2 522760520 main/Contents-mips
+ 26dff52eebbccd2f4f1f324938d644ff41939466b81a977c18a5a0c1d7a690bc 36036428 main/Contents-mips.gz
+ dcd5c09137248da64553321d149bda3012283f943bc692b6a888ab2b36451d1c 524387669 main/Contents-mips64el
+ b30b1d72315d7b4001e0c8d2f587f5e69422c0fcec7656bad45e31540595334a 36106653 main/Contents-mips64el.gz
+ 3664a5579456f932dff527d5ea7d1522f646578eceaf9d9399e39663c042753f 526408849 main/Contents-mipsel
+ 0f9f3e1e05b1e480bde3805684672b9140fa68f03c794b39036c2e5995d9f245 36291254 main/Contents-mipsel.gz
+ 213a13d6e2afc94a847702ff0231ea88a30d3396d3d1e0c8309919a108557897 525623049 main/Contents-ppc64el
+ 73745252dc22291efce580854203e825e361defcf08fbd41e9e92928ec81a929 36164749 main/Contents-ppc64el.gz
+ bcac825125df97de22beed24e112c67771916c35253de375cebaea85be27e1ec 518948132 main/Contents-s390x
+ 667883032ece76f00fd8ac0e0198bbf189389085194b5d09061ee56fd9b7d89c 35843209 main/Contents-s390x.gz
+ a7c43dfc8d1f454ecee9467beb13c53e8ed556bb14fbe4c602a00dedfc5ab033 562813257 main/Contents-source
+ 25d68078879d11c20ad2c4569d64310bf426b9c8c45848276328d14f2a752a5a 62910627 main/Contents-source.gz
+ 0e204f0aff355ab22a63095f1ab0ef2e2096322b4f6e6d048436f320fed30ca9 612676 main/Contents-udeb-amd64
+ 50a5e5f5c1a7653920acdc37e6078cc4dcbf38fc6d3f593ced6dfe66bcd652c7 48325 main/Contents-udeb-amd64.gz
+ 95b6f113aa59c2b9ce7c3e63493bcd9bc2f2437b6fae15885e988896ebe110a1 602615 main/Contents-udeb-arm64
+ 37425f5b05af47eb016488ee8f2c15dd9d768c21994e6af3c687e990b296bb73 47303 main/Contents-udeb-arm64.gz
+ c1ad39c0ef4d6b50f6a53f9c742b152f10e70b62dc93a01e5074584ccc827af3 479897 main/Contents-udeb-armel
+ 305625671fc76a3e1020dbec0aa54efb95ba1bd183c5a79f48f70e143c5b6bac 38663 main/Contents-udeb-armel.gz
+ 047608d47cc09177796aaf0e2bbf8d224c08f57751248db4ccae287590a79b01 694946 main/Contents-udeb-armhf
+ 3e23306aff76208af5f089cf68a67359edacb4ab2fb9194ec54285bdeeb5dc49 53579 main/Contents-udeb-armhf.gz
+ e2bc095196c65f0c8a20d2dfb11f606acf24286de91dc38eccb0bfbf72acc04f 873048 main/Contents-udeb-i386
+ d35411804187bb7c470ef9992046f573db22023ba7cdd25bc952272caab6247b 65269 main/Contents-udeb-i386.gz
+ b44b3a93f4c39dcdbc22448343eac37e5e5ed302f0b409582d3a4ea344375993 722121 main/Contents-udeb-mips
+ 0024b9ab97a8c95a0dc20c5013100278d17e63daf504e7764acd060bf924d8f1 54179 main/Contents-udeb-mips.gz
+ fa243bb06b8267642bbe4e70170573035860b2bd5c59049a834125a09813ab1a 896156 main/Contents-udeb-mips64el
+ dff3b39faf034987dfa43f319cea12473817cfb6dbcb22362e61100b33b9f58e 65165 main/Contents-udeb-mips64el.gz
+ 46f2db52244b2609c34473062c9854a533789489d09196ca1246bd9ccd55cca9 896790 main/Contents-udeb-mipsel
+ 587f631d4bfc127d4d281d5fb3232f87468f1f6033e440218bc642d7c61fe511 65657 main/Contents-udeb-mipsel.gz
+ 89d63f7d823d995c284f4eddea02c354706f287aab2e007acf6ea93f87fa15ad 549534 main/Contents-udeb-ppc64el
+ ec1d12ff9d02168f060c04d2cde7cc8c8ff38c97fc2354ef29be03af2c9399c3 42112 main/Contents-udeb-ppc64el.gz
+ ecabbdec37f527e0e441511e78e04d61a151886d56d30cd452b2e7f32346058e 401986 main/Contents-udeb-s390x
+ 615e1de55f3529edf1353fc2b23550065dc91e684f3af4e3626253809231c34e 32973 main/Contents-udeb-s390x.gz
+ ed6aafe37ec8243adb763641ed0f7dd4e194dd274d30b754532a3abb1d5fc885 20390421 main/binary-all/Packages
+ 2fc6ae91509bb70ea7c2fc615d96b9325407d171b7ab86d6c8ede1c9680664e7 5111764 main/binary-all/Packages.gz
+ 6738c75ccbae7abb36804279031dbf010125c9ccaec5bf2b833c5ebebfb32a81 3842444 main/binary-all/Packages.xz
+ 7d2d2372f48f812985476de4ede122b880a17294f5bf25e8d5d3ba549bf7ab83 114 main/binary-all/Release
+ 168008b9f930d1f62b1de5f2f4f9997ce1c2b1383cc8a9fad0c2a6782899f714 44656195 main/binary-amd64/Packages
+ 15d6bbf761c95c4795d50d41a0385fd643c32b670c58d7abaa17f9736f17e578 10739377 main/binary-amd64/Packages.gz
+ c88216232d353afbc95e57a5ad04fc515335fb75659dbcae6967cd1109b7e4fb 7907472 main/binary-amd64/Packages.xz
+ 516f03cde021edeb63193e9397acdb0da7272abef0f3c05fb45b777928192112 116 main/binary-amd64/Release
+ 3889a49551b7ac28486dd1049b10a98e9614ba87bad30f4fd417f17c6435d455 43514688 main/binary-arm64/Packages
+ 28d478abdb9f5163e11870becfd3caae37bea73d4d6a95e9e45cc9c2f9e1c965 10513209 main/binary-arm64/Packages.gz
+ 67493607c9ebc82ec41751a9dd9955cbccead057cc0fadc5cdf3e3f5dc311777 7736792 main/binary-arm64/Packages.xz
+ a01b55245eb702536933aa450eb0893be41af4af8f010bb7ffc0e7a07d5fd92d 116 main/binary-arm64/Release
+ 67d18a269961d68e66c611a00d61b21aeb0dad7d6fed00a8b5da9410ae70600b 42670055 main/binary-armel/Packages
+ 2570256ccf958c325bb3ae5eed2f9d6ee810ba712e575263bac85feee3e4258c 10362991 main/binary-armel/Packages.gz
+ 9a3069845b72861739c83fe6a7cd6ec15dffe9659c726818cd8a312ff739af81 7627288 main/binary-armel/Packages.xz
+ 7ac9ddebee3ef14b4990f5e5a4fb03079a569bddaed4e1712b753335e4fb867f 116 main/binary-armel/Release
+ 5e0b99b0eea37d10fc21b1c046bc1583f8ed62cf3d945a1a30ecc75c3315c819 43208104 main/binary-armhf/Packages
+ b3627288b064de7ca2d98ad008ddfad94d9de2624c24def331b77650a0e4966d 10466710 main/binary-armhf/Packages.gz
+ d423d0b72277a978dad96605f2f2bc53b23288d88b914ba340b8d487051b6ca4 7697896 main/binary-armhf/Packages.xz
+ 86b95a33fcc279d16d8c8ecd12e4c33e3cb37e7671dc3f9db952687a4d2a1f9f 116 main/binary-armhf/Release
+ 6ffca283feda13c44283ccd52b71c6a9b726fa15e911f3c3ea124478589edc07 44343034 main/binary-i386/Packages
+ 2ded4d266f75d83f5964351168efc8a269e45d124f6cda8c030834e02f778aa1 10688157 main/binary-i386/Packages.gz
+ ec749fc77721c83b3b50cc6077ff247aaa0201dfb6afc4d4b37c2cddc3cf62ae 7863200 main/binary-i386/Packages.xz
+ 266e1164865ac60cb51ffe1d1039f5d5238f78e07b02df1def778037d32d71e6 115 main/binary-i386/Release
+ 2baa9d880f1857aad7a3e7d2226910076e0d47250480471e93571c965e3b1e14 42557231 main/binary-mips/Packages
+ d49ff9656a5058f25eb7df7ebc46b25afb523bc4c9306c6a19f78968d737d01b 10346394 main/binary-mips/Packages.gz
+ bb07d6a6c68b603a24bdc30d49c0c714e308e8ac11491cb2584fce4f71330521 7612396 main/binary-mips/Packages.xz
+ c589e6dae630bfb7de89ed7e85f683dc83ea937ad06bd58fa00254cd40702bd6 115 main/binary-mips/Release
+ 89cf1f4e4f76ef7e4effeefa47313552bfa42fef233f8bade91fd612cf5a5ce7 42846249 main/binary-mips64el/Packages
+ e4eff470b9b6394f644f6f0244cc4e965898393f9f9b2a851f32dac5df17703e 10373188 main/binary-mips64el/Packages.gz
+ 4f022997aacaef7737538dd60306f80619e8fd2b17260a25a016c610a22cdd2e 7636864 main/binary-mips64el/Packages.xz
+ 2fd57acc73e008d369888477760efe6ace31845451005165fc817f55825d46f5 119 main/binary-mips64el/Release
+ e9cb73ece59be04c5dac0e5ace2877a2c88427b6ffa466a70eaa48aa5af3a228 43000527 main/binary-mipsel/Packages
+ 9f9ba0200162f39bc3b48dd0208a92fc097c26d04ba5b0deeb4228d916f53c76 10412166 main/binary-mipsel/Packages.gz
+ 92dd18bc44dd74d0eae0810a2a38042d7de3b15e850f46d2709930bbf5286a5e 7659328 main/binary-mipsel/Packages.xz
+ 32c4bc3ae791366ccd7471b092c1fe6f8dfc119a6b00eb225363321ec0c93280 117 main/binary-mipsel/Release
+ 252fa922933a8ad176dbd48ef58f48356efbaa02c99a35c1f25112b51843c0f1 43280940 main/binary-ppc64el/Packages
+ 8b5054a0268cac706a034797dfd0513226322ea652889d3e47e85d97df463838 10455452 main/binary-ppc64el/Packages.gz
+ 432138d2541192d1b0fa8efd12f474c462c30f57be116b2dc20ecc2cbe45b33a 7692576 main/binary-ppc64el/Packages.xz
+ 13fe606809a74125f2fbba74f36d5392bcdcc7449355beea25af0e9b4ec568ae 118 main/binary-ppc64el/Release
+ be96e87755a4df2b3509f11e37313d0caf4bc8d0919b6fb8fbfcae1aa6cc3e84 42631824 main/binary-s390x/Packages
+ 8acfdb66322fc278e491882e433c7a73755156bc1df93ddfef2886112ffedbe3 10361868 main/binary-s390x/Packages.gz
+ 6b851bc1b40e44d33447daae396db1d6e756c49b5aa7324dca34c446931804ce 7623224 main/binary-s390x/Packages.xz
+ c10370d6c719ff21025669e2ea71d1b80f50577c118fb39fe9e02a051311dba2 116 main/binary-s390x/Release
+ decc049958f6bfd978a2e6700f8edfd284c501c53c3ba9f53212bb72e4821d02 63142 main/debian-installer/binary-all/Packages
+ 98565f932bbeeef14e87df564c9ee020db53bab092e985810171e8fff36db9a2 17278 main/debian-installer/binary-all/Packages.gz
+ 20e2572a449ebd8c97bdc377247ca1eab210500fbe2c59876332a3f08cfd5af6 15132 main/debian-installer/binary-all/Packages.xz
+ 7d2d2372f48f812985476de4ede122b880a17294f5bf25e8d5d3ba549bf7ab83 114 main/debian-installer/binary-all/Release
+ 5b963a67aee583026122382a2a163cf7b3374dc670a209c7bb2e8626fa4ca714 271411 main/debian-installer/binary-amd64/Packages
+ 057a072795234cd9b1cd750c081276ac0570ada1f6f9f3a36065271e757aedcf 66996 main/debian-installer/binary-amd64/Packages.gz
+ 9e65d94a6691d52a378b2c2619e84f246fcf763a1545d8a0a57d0aa2467bf727 55500 main/debian-installer/binary-amd64/Packages.xz
+ 516f03cde021edeb63193e9397acdb0da7272abef0f3c05fb45b777928192112 116 main/debian-installer/binary-amd64/Release
+ 086cef844e0af82fb66381137706786913784993c51dd1113126e178e8760e00 255344 main/debian-installer/binary-arm64/Packages
+ 64b196a3bb8f72f8756c87192e2f5bc987ee2706f7fdaf758b8aa877702cc251 63881 main/debian-installer/binary-arm64/Packages.gz
+ c0bdae2b1d3cb53f64a1e6380f22cd528a17f5155729f6b8dcdc32b0b6c8e5aa 53440 main/debian-installer/binary-arm64/Packages.xz
+ a01b55245eb702536933aa450eb0893be41af4af8f010bb7ffc0e7a07d5fd92d 116 main/debian-installer/binary-arm64/Release
+ bac6f7b2d82ffdc08f4f67eac41c309bba59440405c3d9fc9fc531f4b1645da1 248135 main/debian-installer/binary-armel/Packages
+ 5544c26f909747c44e9978284f5500fe5d33dde6d57cc4bc4ad936ba0978eee0 63564 main/debian-installer/binary-armel/Packages.gz
+ 3ca8372890b17b51c11f12a2ac7df310699266fe346e09f4ce2e1ecbc5d3ce6a 52876 main/debian-installer/binary-armel/Packages.xz
+ 7ac9ddebee3ef14b4990f5e5a4fb03079a569bddaed4e1712b753335e4fb867f 116 main/debian-installer/binary-armel/Release
+ 7697562c72661fbb992f466b27ec55fe37af598d08c25dc37072453a4c6190d0 251177 main/debian-installer/binary-armhf/Packages
+ ab9c143ccd59536908ce360bb095017021129147c92869e9815928cd73cef1e8 63799 main/debian-installer/binary-armhf/Packages.gz
+ 38e376fa81eeceea908892c45a1ee0288dc6e8fe188c2752de26e0759e7f2694 53524 main/debian-installer/binary-armhf/Packages.xz
+ 86b95a33fcc279d16d8c8ecd12e4c33e3cb37e7671dc3f9db952687a4d2a1f9f 116 main/debian-installer/binary-armhf/Release
+ 2912b5fd81980fc0a0a17c676200eb41fbf6d2c570c1430060909bec958fde93 345002 main/debian-installer/binary-i386/Packages
+ e4df5943c1e42054f034fdb46e179d3928d5f8be8fc6022958af042f59bd3e62 76332 main/debian-installer/binary-i386/Packages.gz
+ 6ff7b91661b1e161c261d05f1c5f30a856f5649507e6c2035c126c4db33a067f 63380 main/debian-installer/binary-i386/Packages.xz
+ 266e1164865ac60cb51ffe1d1039f5d5238f78e07b02df1def778037d32d71e6 115 main/debian-installer/binary-i386/Release
+ d915fc3757d2236b72dc081ef49da351e143ced930cea845e06c2284129b90b9 307351 main/debian-installer/binary-mips/Packages
+ d0390f7138af0e0b7044a6d290ad2efcf83f8e31ee82ff095ee7b5d2e5396280 71711 main/debian-installer/binary-mips/Packages.gz
+ 68ce07514f62e01656987141b1fc43181af0449abc5dac88da533facccf8a8d1 59860 main/debian-installer/binary-mips/Packages.xz
+ c589e6dae630bfb7de89ed7e85f683dc83ea937ad06bd58fa00254cd40702bd6 115 main/debian-installer/binary-mips/Release
+ 63e75105ab43a65e8799ea0c27fa0edb27bc5cf508b05fc870743df7995fa478 370605 main/debian-installer/binary-mips64el/Packages
+ 619062ed9b33f83533a0efe1c07c8111e0d553e08ce7929066308d8491cef881 80509 main/debian-installer/binary-mips64el/Packages.gz
+ 463eaff5c7cbb551b21997a09e7788e6b209eb3e3bcbcf8c61b687a245d31276 66792 main/debian-installer/binary-mips64el/Packages.xz
+ 2fd57acc73e008d369888477760efe6ace31845451005165fc817f55825d46f5 119 main/debian-installer/binary-mips64el/Release
+ a4fcd153c9dc20fa36687df593eb6bd1194e4029a1a6417dff0fb1013b197501 370026 main/debian-installer/binary-mipsel/Packages
+ d0894a703ed03e9c8fc97a7854d61f3d1163a970326cd334516874bc0ab9a61e 80667 main/debian-installer/binary-mipsel/Packages.gz
+ 37e3700ace33291afa7210fd9b85e6914ae4d3c5ad3b574fa4be4de20f54c2dc 66912 main/debian-installer/binary-mipsel/Packages.xz
+ 32c4bc3ae791366ccd7471b092c1fe6f8dfc119a6b00eb225363321ec0c93280 117 main/debian-installer/binary-mipsel/Release
+ 2a294ade50ef758ccba05d6fca245d8980e8ece243dc53d0812b3262a958cff3 254867 main/debian-installer/binary-ppc64el/Packages
+ ea68f0b6c92517d148f56f79dda306a8e9b92810af4ab8e1d63c3f1d7638ac46 64252 main/debian-installer/binary-ppc64el/Packages.gz
+ 47a0e578122d488bfe8e21b507a1485c63d156054c211bdfdc461fbdbd5cdbe5 53500 main/debian-installer/binary-ppc64el/Packages.xz
+ 13fe606809a74125f2fbba74f36d5392bcdcc7449355beea25af0e9b4ec568ae 118 main/debian-installer/binary-ppc64el/Release
+ 8d67dcfbd34d044fa0776143cf5fccc06b4dbbc56b138384c2a58822dc3c558a 225602 main/debian-installer/binary-s390x/Packages
+ 15b77b3b1b9fef3b862f1cc484dc8bbb175974f4c1577cf51b2bd650daedf93b 59739 main/debian-installer/binary-s390x/Packages.gz
+ 0a638be2a93286db3dffb9de0928427c4d3dfe21e2ff4800c2d5b25cf6ef7b2e 49824 main/debian-installer/binary-s390x/Packages.xz
+ c10370d6c719ff21025669e2ea71d1b80f50577c118fb39fe9e02a051311dba2 116 main/debian-installer/binary-s390x/Release
+ ae1ada6294fcf57e0d7f45401fabe4e2b92baa877c47abfc48848de02c252ccf 17636009 main/dep11/Components-amd64.yml
+ 0d4993820c68feb474ff3808458fda3fea60bae7fe009e6e7ae3354eb0d4fc74 5882693 main/dep11/Components-amd64.yml.gz
+ d1bb17b0962bb3605f9cc019e504fb0e040b090b1014808a479ee84b086ad7d1 3807040 main/dep11/Components-amd64.yml.xz
+ 3e629d67397f40f0605bc25a485831feea70fc56406b789e71994f9363a8dbd8 17503252 main/dep11/Components-arm64.yml
+ 049d13a803cc7a7055320a29e65785bceb740afcec373f2e48aa2053c116e6df 5850429 main/dep11/Components-arm64.yml.gz
+ b93caf9e36bdc3ff365f930550cef5594be9ae0cb1d71cdfa059241179e40454 3781052 main/dep11/Components-arm64.yml.xz
+ 4d732e0d18e8132a1126ae93a3ab6ce5803ca491fb0bbb07c782dd3686d43174 17108464 main/dep11/Components-armel.yml
+ 26e6ff4fe3c9c04e731a10fe5054d739ed61f7d45dabd7ff733f153e59407eb9 5710419 main/dep11/Components-armel.yml.gz
+ 3152dde22102995553d6eef4b5f8a52504b4ca27a785ed45090a73818ce5bc68 3694524 main/dep11/Components-armel.yml.xz
+ aacd27825688f9d9d73c00544556bb6ebe18577648cac4e48f998afd443f4236 17414118 main/dep11/Components-armhf.yml
+ d5495763b7941ed74e9ae989c87e4a3b1fafa32b2e5584ce3b7c39096aa48613 5813436 main/dep11/Components-armhf.yml.gz
+ e7ab179def4d3d56814ff8ed5f33254768d713ad03be35243aa1a4c2115996e7 3761128 main/dep11/Components-armhf.yml.xz
+ 382c0b11e601db949a18cd2b04ad1f8bf71a8475f3a4081e8567f62915663c00 17595585 main/dep11/Components-i386.yml
+ 4e774f47086ac2b44c394affc065e8ec5a5e6c6062bfc2b2b485541b0b813ce6 5873032 main/dep11/Components-i386.yml.gz
+ 244dbdddee0ccb6dc1320c9f98f9aefe8b309ea289bd0b25845dc1546cb4e930 3798312 main/dep11/Components-i386.yml.xz
+ 8bff5da2bb4af0741b123a168bbf2fc0af3f39ac8e6aa1948adeaadf89e93212 17138095 main/dep11/Components-mips64el.yml
+ 1d3eeb2a29b242d1b6c6411b515215fdf2ace8bbf68953b30534fad2a079463f 5721423 main/dep11/Components-mips64el.yml.gz
+ ea637df6cf6b5f34b9c40d706013c58477ab5bc3ad98ab5c1b53e687b69d9bfe 3700172 main/dep11/Components-mips64el.yml.xz
+ 4b24ee95b31cf5918acdce685ce719e65c9ee76093f529b9a636fbd7cc3989a4 17193596 main/dep11/Components-ppc64el.yml
+ f8e8c84cf0f01085ffeae75609c2a64a854a0da1b6cc1963caf18dcb4da0a3b6 5735595 main/dep11/Components-ppc64el.yml.gz
+ 0da8ec5de7c7c8377b37f9274759e298d6ccddba5ca8e6a4b791971ca6e70da8 3712596 main/dep11/Components-ppc64el.yml.xz
+ 5e68cdda91847e0fe330dcd94c8c86938a3c094c61228399fa6aad1b0415d9ff 16895854 main/dep11/Components-s390x.yml
+ 458144638a3d52161c2e636691e914ffa47783369210f2752394eab6c3aed4bb 5630817 main/dep11/Components-s390x.yml.gz
+ 0faca5b3c2977b2829202cbeb0393170d9192a9a79805eb7db3cfe64471a5921 3649696 main/dep11/Components-s390x.yml.xz
+ dc999a4ea17aa5f797a43009d797c7ec3a8c2da54e784beb2ea27a127e7ce449 14067712 main/dep11/icons-128x128.tar
+ 3a95a1a11e4deed8dc1b502c4f023b8d0f090d1267e3f5e36352b47aed6cdbb0 12784398 main/dep11/icons-128x128.tar.gz
+ 3e29369d6670db38322d3fea9fbdfd781a0f84427611ac1a5b62eee2d372bc5d 5092352 main/dep11/icons-48x48.tar
+ bdb819f9f320271aa81400179c292a45031c013f921229735babf7ae3c13371f 3769936 main/dep11/icons-48x48.tar.gz
+ 6aa2a19cb4b7f9ef4bdf63fe851f93ea4dd343e9655de82dfa934a8f4ccb9b54 9509888 main/dep11/icons-64x64.tar
+ 8f6622eccd2370e8aa20ef188b480c47847b3e8c9ff41bbb9ddf674ef766d6df 7595526 main/dep11/icons-64x64.tar.gz
+ 0a19019ef516d847ccf29119d4b00e195208034e7e743e9d9f520c487e6a8ce1 8583 main/i18n/Translation-ca
+ 261a7d13ba8d1bfab5ba67c2cf68aa9ef8da9380e418fa5606f5cee7530a4fd7 3510 main/i18n/Translation-ca.bz2
+ ad6c1279f07ece247a5002f3b1755cfc350a2c3181f4a5572cb22661afd32891 1366172 main/i18n/Translation-cs
+ 0c5cd9fa962bb72a406987715aaa801c25b27de0a2d971a7911c25dd5fecc581 364196 main/i18n/Translation-cs.bz2
+ 6812c7220e5c5bdc3ccc2c4274da2d3665b14ea9760ae6fc12a401208cd06737 19338879 main/i18n/Translation-da
+ 797e90fa21e67261fc5e1436b7c862a395915bbbc93091016fdf63250bebe507 4250838 main/i18n/Translation-da.bz2
+ 064f3858b4fddbd96c12e18a59c14a0488b3e9b5dd7777807a069a74cafcc3d3 7372339 main/i18n/Translation-de
+ 62aaf172d1b2bbdd35cfaf1270087bc568b7f2670d9534f150035b8bff1dde21 1654058 main/i18n/Translation-de.bz2
+ 284169348b8bd4e0de4cc5641eeb05577e80d2bd736452e454976c052cf3cbe2 1347 main/i18n/Translation-de_DE
+ 481a435ad350105b74c4972859c44f447b7a8b5edea0d42f6dd635792e00a461 830 main/i18n/Translation-de_DE.bz2
+ f287f63af0023e297789985164d37d7e308f8fbcd8919dafbd2cfa2cdc0dac3c 6733 main/i18n/Translation-el
+ 845d38e74d1a929b368e55d1f1096bb99405662bbb5b81f1db9b1588e0d3eaed 1616 main/i18n/Translation-el.bz2
+ c2135968c5d848fa876e5a1ed01a7c94a21b28e6b75898fabbd9fcc2145c8aaf 29377800 main/i18n/Translation-en
+ 81c2ee543d7e1855f8cf18ab39c1e8a4bcb034d2affb9b06094e59113c8f92fd 5970967 main/i18n/Translation-en.bz2
+ d9276fce589c3a2e3d7649c9876f6f463c4bb537a851a2a6e92567d88cf5b912 2704 main/i18n/Translation-eo
+ 000b462c41e5e5761e9d904ce5c14f557b48975ca39bc740982b50345dc2c74c 1353 main/i18n/Translation-eo.bz2
+ 4d80ab4e6d43f37ccdbbadfc60ea7dcca5378f86ff7792b6b826cdfcd868153f 1386165 main/i18n/Translation-es
+ 1abae05bde29468308f7ebf0085b8c149c8ae80637a6bb28c0168c08b59ee7d0 334639 main/i18n/Translation-es.bz2
+ eb73e0e15f6f54f617fc4e0c65f711356513e8fa3a1824755fda0f7675ab1554 12877 main/i18n/Translation-eu
+ 59bb11c7366d6f18fc230a5a7246a9d8bc333f07a0a2717cf807a3eb749e27cb 4940 main/i18n/Translation-eu.bz2
+ fb7d993dd981b31d6883afd6462d8781face77b6ed56abf425c8f1b2a58bd3f3 292391 main/i18n/Translation-fi
+ 7fd58d2f04c10c4caad28f9f03d3348aeeb6065f0e2097c19049df0d766788da 83317 main/i18n/Translation-fi.bz2
+ 6d96783320da61a4c6a48564017c3162e6a18ae6c4c66b5341f1a33f02c738e8 12076413 main/i18n/Translation-fr
+ ec33dfa0a51ff60b51c685e878f6c5cf3f6aba4d9e108a2ee777a962791c52aa 2478327 main/i18n/Translation-fr.bz2
+ cd557c96e9949763e7d30a53a608188c20bef4475011985bd8bd22ff3002b734 19295 main/i18n/Translation-hr
+ ef508176ff5b8513f93299ff4075fd034784233b10aa274859d47c2a8e7104b4 5467 main/i18n/Translation-hr.bz2
+ 5418e1c65d1bc8c977330c3ad745a4cef5915f537cd9135e8b611ea993b71714 76824 main/i18n/Translation-hu
+ 7c6ae2a7078d734f64a6ba45f9547222f11f056d14822e21355bd326a03f1577 25899 main/i18n/Translation-hu.bz2
+ cc4a606c914c16f3fd620e2d49594e695a7b249f8faa627606f6db0baeeb67a8 5807 main/i18n/Translation-id
+ e271bb80b23dd2e2e739c6a32a6bd2fb9d666cd30d52c8299707f6a4703429af 2493 main/i18n/Translation-id.bz2
+ ce367f2aa25d865702fffc9c6c02eb678bdb8fd880c73b139ff527b40ba6521e 24318841 main/i18n/Translation-it
+ 3316040e84824e7a691255d9bae9c778a308cf31aaf8f759fa8c030e43d545f4 4853002 main/i18n/Translation-it.bz2
+ 440ceff1b06a70ff9d67d7378bfdd50bcafcb22ca8bdcdfa7bbed6e30595d288 4944611 main/i18n/Translation-ja
+ d4c46b0da64640a2e883ee9e27c2e656178a46f3aab96228037ce94813f061c9 892190 main/i18n/Translation-ja.bz2
+ 2c55c8d68bb607be575330f6997dbb4e47e10c2c7ad7158fc328ba56c88a1127 14066 main/i18n/Translation-km
+ 70d886e0ccc3955ec5b39c2a4b2aef7313aaeaae41200e06f2dfacccc9289310 2744 main/i18n/Translation-km.bz2
+ 0d3cf3232797cef6e7cb69d8723c51c29b028d92b672a2f258a2e588934321c0 2085975 main/i18n/Translation-ko
+ 1477a4a675a138c5545968a955f00b9f1845b6bbed257cba78f32cff96ed3cc3 467722 main/i18n/Translation-ko.bz2
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 main/i18n/Translation-ml
+ d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 main/i18n/Translation-ml.bz2
+ 32f29702ce1043f88b5bc518c42170b70f453420517cc419590ddb85b9bdc396 2030 main/i18n/Translation-nb
+ 57a199a512a810fbdc135ede04597528788a00959c32bb13a37bf20d0010cd6b 1188 main/i18n/Translation-nb.bz2
+ 1b50179109c9e99a96d692944ab1e5fc9f2ca9aed459081479ac8efd87da5e17 191719 main/i18n/Translation-nl
+ 98a900a15209956a0c4984ce6404c7eecc8dcb98ce12a88ba27685864e5668e0 53879 main/i18n/Translation-nl.bz2
+ 6b67b4de476a264e541859b0018067fc76e2c8811e27c84fe470f1942b6a117e 2280270 main/i18n/Translation-pl
+ a3eb01f2c453821244040b22fc48068cd5de6fa8a14d24026e2005022fdae703 543734 main/i18n/Translation-pl.bz2
+ 3fb89751961fc21b61e4e1236778a19e73a8c7c96eb8be6b7e3115102fa25ebf 1228959 main/i18n/Translation-pt
+ 64d7194afeadf3b43c7f68ec010c667f70f1d650649daec424c62a0e5c02cd75 309452 main/i18n/Translation-pt.bz2
+ 054d02cd6cf572898fa6d2d23ad2ae4d65bb15dd743c614d35e6b714cf52f508 2848622 main/i18n/Translation-pt_BR
+ e95285617d04dde90266d27ef57823c38d91be6203706c0b350dc7c4d4c576e0 683144 main/i18n/Translation-pt_BR.bz2
+ e7ab43bbc80d3424f08ec3e14ec6219b7bbf86a201b3bf719393a578ab064ea9 2710 main/i18n/Translation-ro
+ cbc7eed8d01c12cb9bb5b551548780739136155c80f26a09b26ec2ced71a387f 1374 main/i18n/Translation-ro.bz2
+ 4a8974efd1bad48edc29e00a264d563f47caac70f97944ea8805d5e62540fc95 3167815 main/i18n/Translation-ru
+ 5c2db1497e78c196838d95dc7032047ac440b55a5571366c00f5275e8d347bb8 515734 main/i18n/Translation-ru.bz2
+ 858c2e8f7a1cbc095af8cb896cb858206609f4ed396a30063d48de9d332675c8 7171062 main/i18n/Translation-sk
+ da3a9fa0241cc3ce78351096ca718e417dd4ebbc6dfec8ec27476585470cac21 1545666 main/i18n/Translation-sk.bz2
+ 31c1cf587eb9d500b34c35c6c754c72df5173cf7c16f6ff181c626f39ede8494 346061 main/i18n/Translation-sr
+ 93ac28a724e1a0a3d74f756f94ff90038ba75addda5a3f105752bd1b06396b72 63630 main/i18n/Translation-sr.bz2
+ 1b7ff19980f5be694cc97e2fcc0867d75187f9fb7495afba87023ac23021d78b 101310 main/i18n/Translation-sv
+ 33a3e5355274f2dfcb7013f2692f5e8a6423471377c211e48b9e91f98fa1a2a8 32083 main/i18n/Translation-sv.bz2
+ f2046174615fb12f150c0c7b187874485299073efbdcd2463b86cfcf36e497ab 16580 main/i18n/Translation-tr
+ c4e499ef14f38119d052f1ae8c99321338e1ad9c5fb3e3f6bb562601a1d8feaa 5960 main/i18n/Translation-tr.bz2
+ 0b008e71f5b09f659b76a5c2a01fddfd950f916adc937c4f6dd6063f85490f79 3992741 main/i18n/Translation-uk
+ cb160b0b7f77ccce994a4c202443e80b709bec66043d5b2873fb61ab41786eed 624098 main/i18n/Translation-uk.bz2
+ 76cd56ee66ffbd8efe1c5271f5b489e1be5a37ad6810fa53b4f8317ddbd63663 26441 main/i18n/Translation-vi
+ d71a6fb0515d8c2f6949f4401e70beb8a77d8702eb09b64c6105ce2d4593ce76 7797 main/i18n/Translation-vi.bz2
+ ba5bf385ecf4799de85e8ab873c233fe0478bbdd30611baf528aea51ae2b97d2 2799 main/i18n/Translation-zh
+ ebb2e1910c3096f393f46f4fb6b1316e571d805d654c2d97d0ea92ddb2229424 1526 main/i18n/Translation-zh.bz2
+ 92fbeb098ff3256eb921db661422ae92a9b72e82d01d2ee677d2fdb8413e195a 479128 main/i18n/Translation-zh_CN
+ ddf3c24b3468c575fc03734fdc25e7a1a914421d3194c43864ea4fac8378d13a 125740 main/i18n/Translation-zh_CN.bz2
+ bebb6004c777b95938ecd905d78c970aa3895fd4a65b10227b2fb627c959f124 44731 main/i18n/Translation-zh_TW
+ 1a164f8b284b53e6d3b3e0a9815e02cb7ffa19acc07a599e8f9ef384e10612c2 16257 main/i18n/Translation-zh_TW.bz2
+ 88799c27dd5a8e80e3ea60bcdd76b3fc079cf2a732707a25b6c48644832a8550 56179 main/installer-amd64/20190702+deb10u7/images/MD5SUMS
+ 8cb7a51e8669ac59c7a73c406dc32ec3570604c271f62b0d86d4a4b5262108ba 75295 main/installer-amd64/20190702+deb10u7/images/SHA256SUMS
+ b930348c06b644bd294ae98c1e21ed14aa42e3e9368f4c60bbee4047ae2216a4 56179 main/installer-amd64/20190702/images/MD5SUMS
+ 17cfa6a677e4253e82ee6b9ccffc9143277b1911ec472438889b7373ba509ba2 75295 main/installer-amd64/20190702/images/SHA256SUMS
+ 88799c27dd5a8e80e3ea60bcdd76b3fc079cf2a732707a25b6c48644832a8550 56179 main/installer-amd64/current/images/MD5SUMS
+ 8cb7a51e8669ac59c7a73c406dc32ec3570604c271f62b0d86d4a4b5262108ba 75295 main/installer-amd64/current/images/SHA256SUMS
+ 4ad2ee646f96f909cd901219fe9d234117b2dad29327d0f157f054d052558f9a 30751 main/installer-arm64/20190702+deb10u7/images/MD5SUMS
+ c50144aefb760f25ca6dc5d466eefbf498c3b88ad1c514d8e064ee77046dccf2 42187 main/installer-arm64/20190702+deb10u7/images/SHA256SUMS
+ d9cfc8206347ee0c5cd548b0d5e925a8c209f48d1b24cc41f3faaf486c5de1bb 30588 main/installer-arm64/20190702/images/MD5SUMS
+ 2acbcd56fadc22705ed93273c090ca4b96526c297f8c1d6112b9bee85e0dfbbc 41960 main/installer-arm64/20190702/images/SHA256SUMS
+ 4ad2ee646f96f909cd901219fe9d234117b2dad29327d0f157f054d052558f9a 30751 main/installer-arm64/current/images/MD5SUMS
+ c50144aefb760f25ca6dc5d466eefbf498c3b88ad1c514d8e064ee77046dccf2 42187 main/installer-arm64/current/images/SHA256SUMS
+ f4ee988e44564c8e1f8fb31d1184a31d1c406b215e76821589dc8d935b32cbfd 21361 main/installer-armel/20190702+deb10u7/images/MD5SUMS
+ 4471bb107a0a9e5610e07f62353528fe3f2abf0372b685b803b65d3797b24b34 29821 main/installer-armel/20190702+deb10u7/images/SHA256SUMS
+ 947b239487ff0648e70a61f8ce7c8444db53034268d64afe48f4c3233489bdae 21360 main/installer-armel/20190702/images/MD5SUMS
+ 07108ca1bef26e8a8f4fbc0f8a32cbf381b96ce7aeb56f9dff3f62643e171adb 29820 main/installer-armel/20190702/images/SHA256SUMS
+ f4ee988e44564c8e1f8fb31d1184a31d1c406b215e76821589dc8d935b32cbfd 21361 main/installer-armel/current/images/MD5SUMS
+ 4471bb107a0a9e5610e07f62353528fe3f2abf0372b685b803b65d3797b24b34 29821 main/installer-armel/current/images/SHA256SUMS
+ fccc98b997b8efae0b8f23e17534a504929dda9bddf26e2ca51e77860a6ccbca 53105 main/installer-armhf/20190702+deb10u7/images/MD5SUMS
+ d4723ea295267cf2f3e646484823884e4f65dbefef3348c8a27d832d4ed2fa37 76541 main/installer-armhf/20190702+deb10u7/images/SHA256SUMS
+ 0910063c0cef763aa7db7dd84f60ad9f8c214417642927b21d2fcc73445a8bd3 51125 main/installer-armhf/20190702/images/MD5SUMS
+ fcbe6bc7fbda9f8d3332d11c949e77901cf4b81c368561ea6dde731ffd529e04 73665 main/installer-armhf/20190702/images/SHA256SUMS
+ fccc98b997b8efae0b8f23e17534a504929dda9bddf26e2ca51e77860a6ccbca 53105 main/installer-armhf/current/images/MD5SUMS
+ d4723ea295267cf2f3e646484823884e4f65dbefef3348c8a27d832d4ed2fa37 76541 main/installer-armhf/current/images/SHA256SUMS
+ 7bb302c04fd9b4291b2ba9017ea13e1b4dd9e4174601c9435156d30e16bcfd49 54808 main/installer-i386/20190702+deb10u7/images/MD5SUMS
+ 341121c45e4ca89b9267aec6336490d85ad29e7e9ef067d0d1c2552eac043eae 73988 main/installer-i386/20190702+deb10u7/images/SHA256SUMS
+ a37766de66137447adf0dade279c6aa206448d310a9ff64dbccee3b4b14e70a8 54808 main/installer-i386/20190702/images/MD5SUMS
+ db753e6c3ff520459cf018e8562be164f5a88beab1f37e65cd39d91ee1d4fc38 73988 main/installer-i386/20190702/images/SHA256SUMS
+ 7bb302c04fd9b4291b2ba9017ea13e1b4dd9e4174601c9435156d30e16bcfd49 54808 main/installer-i386/current/images/MD5SUMS
+ 341121c45e4ca89b9267aec6336490d85ad29e7e9ef067d0d1c2552eac043eae 73988 main/installer-i386/current/images/SHA256SUMS
+ ed85ff13779ea2d5ca6f9e724840a475b8c78130e784249c6723895f93e48f6a 417 main/installer-mips/20190702+deb10u7/images/MD5SUMS
+ a7fe4d483366f8187b37c544b8506042203cfb3762ef9250d7623633b30c55e6 717 main/installer-mips/20190702+deb10u7/images/SHA256SUMS
+ e549e00f75f6c63cdf22a207c8537167e4e54cb8b17f87ecfe9ce54ac40fc472 415 main/installer-mips/20190702/images/MD5SUMS
+ ce424bd500e3289e0a9f9082eb33bfd97fc58c9f5081dd5b9d0ef44029cd56d4 715 main/installer-mips/20190702/images/SHA256SUMS
+ ed85ff13779ea2d5ca6f9e724840a475b8c78130e784249c6723895f93e48f6a 417 main/installer-mips/current/images/MD5SUMS
+ a7fe4d483366f8187b37c544b8506042203cfb3762ef9250d7623633b30c55e6 717 main/installer-mips/current/images/SHA256SUMS
+ bb4dfd6a913ab04e4554ff95a42dc7078f760c58759d63800bfdbda377dc8dcb 630 main/installer-mips64el/20190702+deb10u7/images/MD5SUMS
+ 852cfb080efdab9a4c557f8a29df3225125e5f4dac90560d70844625a21f71b6 1026 main/installer-mips64el/20190702+deb10u7/images/SHA256SUMS
+ 9eaf96172f5d0eacecdecbd3a137fce2408653ee03ca457b42583f1c78fa2987 627 main/installer-mips64el/20190702/images/MD5SUMS
+ f696a0bb84fd77125e0552dcc514620c7f793a139d0342eae6f1b0771f60521f 1023 main/installer-mips64el/20190702/images/SHA256SUMS
+ bb4dfd6a913ab04e4554ff95a42dc7078f760c58759d63800bfdbda377dc8dcb 630 main/installer-mips64el/current/images/MD5SUMS
+ 852cfb080efdab9a4c557f8a29df3225125e5f4dac90560d70844625a21f71b6 1026 main/installer-mips64el/current/images/SHA256SUMS
+ c4352e120d73d397a73d866f48fe3ba3c7bf1ab1fd8a0866dc6fb7149261b4fd 630 main/installer-mipsel/20190702+deb10u7/images/MD5SUMS
+ 4fbf0781229f6ec8b044fa3ead972186db969fa6a8868839cee3eee6a5fc8098 1026 main/installer-mipsel/20190702+deb10u7/images/SHA256SUMS
+ e1d65034c8fb4c3121392c92c50dd9c2f7dc0334e3b90b308edcdf84779b0b78 627 main/installer-mipsel/20190702/images/MD5SUMS
+ be9b533b7fab891b5a70059f0a7778da48d61c2395b91e067b094d8165e265f1 1023 main/installer-mipsel/20190702/images/SHA256SUMS
+ c4352e120d73d397a73d866f48fe3ba3c7bf1ab1fd8a0866dc6fb7149261b4fd 630 main/installer-mipsel/current/images/MD5SUMS
+ 4fbf0781229f6ec8b044fa3ead972186db969fa6a8868839cee3eee6a5fc8098 1026 main/installer-mipsel/current/images/SHA256SUMS
+ 14d1a3a459998205ca98ae34c9162e65e3a2ce116dded7fc337a88d7e43c01e4 576 main/installer-ppc64el/20190702+deb10u7/images/MD5SUMS
+ fcfb6e8c8813db572db92575ba92a055af5348aed2b1a68fc1bfa3ed0339ad29 972 main/installer-ppc64el/20190702+deb10u7/images/SHA256SUMS
+ ec4cc0688449d392c9c99448a130901477da2c0049449d755d56a81c7cc28fa1 576 main/installer-ppc64el/20190702/images/MD5SUMS
+ 7d064bb87434ebec491fe828f105f2fad403de798a41f2911f17bb489025587c 972 main/installer-ppc64el/20190702/images/SHA256SUMS
+ 14d1a3a459998205ca98ae34c9162e65e3a2ce116dded7fc337a88d7e43c01e4 576 main/installer-ppc64el/current/images/MD5SUMS
+ fcfb6e8c8813db572db92575ba92a055af5348aed2b1a68fc1bfa3ed0339ad29 972 main/installer-ppc64el/current/images/SHA256SUMS
+ d6822aea9c37008277f5c58b7cf9c1c91fe9656946eced0244d828a7c44120ab 374 main/installer-s390x/20190702+deb10u7/images/MD5SUMS
+ 485a6912fa653025c76067b547b6b325631244901cffb249b3f570fd180d54e2 674 main/installer-s390x/20190702+deb10u7/images/SHA256SUMS
+ a18a237d1f6e6864732b731e9ccd4d616497d1d87ddee2de9820c5b8729ae4d0 374 main/installer-s390x/20190702/images/MD5SUMS
+ 8a1bf4ab6a36a05f88c11fc48d44896517fba6a495f15f81205dedc7c96a91f7 674 main/installer-s390x/20190702/images/SHA256SUMS
+ d6822aea9c37008277f5c58b7cf9c1c91fe9656946eced0244d828a7c44120ab 374 main/installer-s390x/current/images/MD5SUMS
+ 485a6912fa653025c76067b547b6b325631244901cffb249b3f570fd180d54e2 674 main/installer-s390x/current/images/SHA256SUMS
+ a6265ee5e2ca37241ebeb346b196ed3302cb35e0bb2e388774521ac5c2e70ca4 117 main/source/Release
+ e9958030da1c3ea690ba210e4116bb46b8e53e2d8790e2ba44f9b5882ba18fac 40374106 main/source/Sources
+ 78094a3a1b9118f5625cd42f4559fe6733f057077b08fba4abb1e8073729a9df 10410977 main/source/Sources.gz
+ 60d9a8bfc6cafd440c2996528f6b2cadc225c9fc85b5e6246f63d96d62e183e5 7841528 main/source/Sources.xz
+ 14532ad2c7f87b363d52dd16172d368998b5f6914ccf987d4ea89c4c070709e7 15041698 non-free/Contents-amd64
+ 69d40670f577f1dec2c9f36ae9a7f26b9fddfa8bf8c705ead40bea8558b7d38d 860518 non-free/Contents-amd64.gz
+ f083b85927065a4b886c5135e0b437ba9206377f8fc1ab2bc2db5c46554ce8fa 13915102 non-free/Contents-arm64
+ da3d3bda9b6dc35eb40d625b85fe4eb3216757dd4499730516ae77180eceeb1a 772610 non-free/Contents-arm64.gz
+ e59789bf28679e8dc68c8e2bcc15cf99d259e8f2cad9ce1301b710d5922cc372 13907158 non-free/Contents-armel
+ dae7f0f40f9462bf73273cfddf27679835c65673b472cdc82810902a0ac33d8c 772003 non-free/Contents-armel.gz
+ e4ddc688ec7e311842dcfe3f558bddabd8dbf3c6d7826cfde3b47882cd9f0388 14007145 non-free/Contents-armhf
+ fd1d6a515269a55b9ddb115e91ef36368c3a508edffd8e4942de8431d8d0b54b 779131 non-free/Contents-armhf.gz
+ 7f2cf56c0fb66e0ba991a818677a9b72764374ae4bbfe94262ea84853f69f890 14178942 non-free/Contents-i386
+ 3ee986f785499fa9d477492382b445dd88ab48a008668f639b75b2c41eb7b6f3 794908 non-free/Contents-i386.gz
+ 8903c9bbb1108c603d118001f2ad118b1e27d66da9606e684bdb6732a8432a9a 13903213 non-free/Contents-mips
+ e31a2e82535d9924ffd4e6be3c74f3f254503c30de844a4c407a3c2b7004c235 771624 non-free/Contents-mips.gz
+ 9bb02dbbf37c38a8023de72770636af5d83b08ba7a92d719672232a54da209fa 13909546 non-free/Contents-mips64el
+ 91a8f5857e6e552105a737b7a283be769fd94d1de7e212e5d8dd178e48f32ddd 771712 non-free/Contents-mips64el.gz
+ 72360de7386fe6b4a331015395eeb48f01bc178c3afb0fb395b7abe649da766f 13910453 non-free/Contents-mipsel
+ 31de69ca77b7da084a7b3641030283872be479b37d4f2cb0fb48a3b009c35264 771959 non-free/Contents-mipsel.gz
+ 33ef0441ae76dc27b85c6aa581ba94fcfe888a849abdf16daa6761b6651035bb 14154515 non-free/Contents-ppc64el
+ 4dcf7c005daa9ff0876156aa32748fb980f7afb6b0dee620bd35c81533786aca 793531 non-free/Contents-ppc64el.gz
+ 0442e4cb0abc93d922a6c0d97bd032ac4834b728e6fc4506aadc10438a2bcc01 13903234 non-free/Contents-s390x
+ bdff8fd835b617719ae6c8275295de2c0175dffb97e1c7e1181b44688592f6f3 771491 non-free/Contents-s390x.gz
+ 7a3049a870b2a270f928bb17de2a8f73254959fb02721f12a0261cbefe21b1c0 8556010 non-free/Contents-source
+ cd95eb973b5d087ae33defd935f34d7b99214c5c8130071a18eb56aeb7b6f317 884017 non-free/Contents-source.gz
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/Contents-udeb-amd64
f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/Contents-udeb-amd64.gz
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/Contents-udeb-arm64
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/Contents-udeb-arm64.gz
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/Contents-udeb-armel
f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/Contents-udeb-armel.gz
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/Contents-udeb-armhf
f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/Contents-udeb-armhf.gz
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/Contents-udeb-i386
f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/Contents-udeb-i386.gz
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/Contents-udeb-ia64
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/Contents-udeb-ia64.gz
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/Contents-udeb-kfreebsd-amd64
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/Contents-udeb-kfreebsd-amd64.gz
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/Contents-udeb-kfreebsd-i386
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/Contents-udeb-kfreebsd-i386.gz
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/Contents-udeb-mips
f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/Contents-udeb-mips.gz
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/Contents-udeb-mips64el
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/Contents-udeb-mips64el.gz
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/Contents-udeb-mipsel
f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/Contents-udeb-mipsel.gz
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/Contents-udeb-powerpc
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/Contents-udeb-powerpc.gz
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/Contents-udeb-s390
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/Contents-udeb-s390.gz
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/Contents-udeb-ppc64el
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/Contents-udeb-ppc64el.gz
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/Contents-udeb-s390x
f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/Contents-udeb-s390x.gz
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/Contents-udeb-sparc
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/Contents-udeb-sparc.gz
- 9418f25377f008cfcff977fb057fcbc636f7eeb57b90680c825c31ea9e70f6b9 20438 non-free/binary-all/Packages
- 764e1a1be89b877a04fc132946becf6220e4210607cc43aa8186d755a15a9caa 5570 non-free/binary-all/Packages.bz2
- f24b7acd306cd258d7ee0f6cd54fb56727a6e211c88c82e06141b11b92c8f109 5805 non-free/binary-all/Packages.gz
- 8918675fadc9eebe2c331d82c95b446c9beceba6e64057e7699f7b017043fca2 167 non-free/binary-all/Release
- 6a1f62ade70fae08b61d4ca4a41746cc3233840363e9456268fc7d3c065bc9eb 115902 non-free/binary-amd64/Packages
- d9479ab166e753a1d214ca2a05bf20a62c6b3501c7efdf6a797dc7412d1ac05b 21633 non-free/binary-amd64/Packages.bz2
- 546b477527295b3ab15a98d76a79117f82ef6bb4f2140a2b9a7f8bc8960e382e 4456 non-free/binary-amd64/Packages.diff/Index
- b6a5cce719f7e79758613213898cf39409517965246efe230517ed6da8f56221 25323 non-free/binary-amd64/Packages.gz
- 0491de1431b49ae3ed04caf3c01d3d894d8123ac913225015fc667c8a2ed01ee 169 non-free/binary-amd64/Release
- 9418f25377f008cfcff977fb057fcbc636f7eeb57b90680c825c31ea9e70f6b9 20438 non-free/binary-armel/Packages
- 764e1a1be89b877a04fc132946becf6220e4210607cc43aa8186d755a15a9caa 5570 non-free/binary-armel/Packages.bz2
- f24b7acd306cd258d7ee0f6cd54fb56727a6e211c88c82e06141b11b92c8f109 5805 non-free/binary-armel/Packages.gz
- cbc0530c91253bb3d264a486e850f8717b5ee7507f71ce2bee7a0579ebf3e696 169 non-free/binary-armel/Release
- 9418f25377f008cfcff977fb057fcbc636f7eeb57b90680c825c31ea9e70f6b9 20438 non-free/binary-armhf/Packages
- 764e1a1be89b877a04fc132946becf6220e4210607cc43aa8186d755a15a9caa 5570 non-free/binary-armhf/Packages.bz2
- f24b7acd306cd258d7ee0f6cd54fb56727a6e211c88c82e06141b11b92c8f109 5805 non-free/binary-armhf/Packages.gz
- 5d28c1733de1e4849a10f260a7b54e32f4f137e69b99aad5ab983fb64608f1df 169 non-free/binary-armhf/Release
- bc8e5b15f34fde94b79ae4bb8fdc88ec6d5c3b8d5f65590997cf8daa413d2eda 123415 non-free/binary-i386/Packages
- bc756d41465d603e8226f8204b0dbce4b099727e943e5fbd41ef0f6f18586716 22755 non-free/binary-i386/Packages.bz2
- d0c8861475331395d35c77e558d1301f377a2425c983962a55cb6f6cdbeda4e0 4456 non-free/binary-i386/Packages.diff/Index
- 2ebc81e9f1164689742d7110a8f97c438e406bd3ba89ff6c0e01f83b20da3e6c 26726 non-free/binary-i386/Packages.gz
- 493bcb093fddbcab3d5ef0f1af40ab9c8bf70b2cc6a43cb44a13c1e6bf3e67a8 168 non-free/binary-i386/Release
- 9418f25377f008cfcff977fb057fcbc636f7eeb57b90680c825c31ea9e70f6b9 20438 non-free/binary-ia64/Packages
- 764e1a1be89b877a04fc132946becf6220e4210607cc43aa8186d755a15a9caa 5570 non-free/binary-ia64/Packages.bz2
- f24b7acd306cd258d7ee0f6cd54fb56727a6e211c88c82e06141b11b92c8f109 5805 non-free/binary-ia64/Packages.gz
- 24f6f1e57776f7539dbeac178e12952a7feb754ed1ea5be719e3af58062de02f 168 non-free/binary-ia64/Release
- 9418f25377f008cfcff977fb057fcbc636f7eeb57b90680c825c31ea9e70f6b9 20438 non-free/binary-kfreebsd-amd64/Packages
- 764e1a1be89b877a04fc132946becf6220e4210607cc43aa8186d755a15a9caa 5570 non-free/binary-kfreebsd-amd64/Packages.bz2
- f24b7acd306cd258d7ee0f6cd54fb56727a6e211c88c82e06141b11b92c8f109 5805 non-free/binary-kfreebsd-amd64/Packages.gz
- 68ba83dce2ab39aedc29dfcc3a8740ce8247fcbad94cc60bfd4bd7d7d059518d 178 non-free/binary-kfreebsd-amd64/Release
- 9418f25377f008cfcff977fb057fcbc636f7eeb57b90680c825c31ea9e70f6b9 20438 non-free/binary-kfreebsd-i386/Packages
- 764e1a1be89b877a04fc132946becf6220e4210607cc43aa8186d755a15a9caa 5570 non-free/binary-kfreebsd-i386/Packages.bz2
- f24b7acd306cd258d7ee0f6cd54fb56727a6e211c88c82e06141b11b92c8f109 5805 non-free/binary-kfreebsd-i386/Packages.gz
- 0955151e699f53cd5c865e64251bcaf409a9b4bb48a414538b33488c021ad442 177 non-free/binary-kfreebsd-i386/Release
- 9418f25377f008cfcff977fb057fcbc636f7eeb57b90680c825c31ea9e70f6b9 20438 non-free/binary-mips/Packages
- 764e1a1be89b877a04fc132946becf6220e4210607cc43aa8186d755a15a9caa 5570 non-free/binary-mips/Packages.bz2
- f24b7acd306cd258d7ee0f6cd54fb56727a6e211c88c82e06141b11b92c8f109 5805 non-free/binary-mips/Packages.gz
- a751f134211e8b37375007883ab323d0f67e78d6d67341e667162c2253834184 168 non-free/binary-mips/Release
- 9418f25377f008cfcff977fb057fcbc636f7eeb57b90680c825c31ea9e70f6b9 20438 non-free/binary-mipsel/Packages
- 764e1a1be89b877a04fc132946becf6220e4210607cc43aa8186d755a15a9caa 5570 non-free/binary-mipsel/Packages.bz2
- f24b7acd306cd258d7ee0f6cd54fb56727a6e211c88c82e06141b11b92c8f109 5805 non-free/binary-mipsel/Packages.gz
- 168dd50fe7b88f1169de213af2bcc15c2f7a39d85edd0cf21fbc744d883d0139 170 non-free/binary-mipsel/Release
- 9418f25377f008cfcff977fb057fcbc636f7eeb57b90680c825c31ea9e70f6b9 20438 non-free/binary-powerpc/Packages
- 764e1a1be89b877a04fc132946becf6220e4210607cc43aa8186d755a15a9caa 5570 non-free/binary-powerpc/Packages.bz2
- f24b7acd306cd258d7ee0f6cd54fb56727a6e211c88c82e06141b11b92c8f109 5805 non-free/binary-powerpc/Packages.gz
- 8bb794b5b0108f8534a00ec0485c3d37059bd52c9092137ecd0ee47a8332d96e 171 non-free/binary-powerpc/Release
- 9418f25377f008cfcff977fb057fcbc636f7eeb57b90680c825c31ea9e70f6b9 20438 non-free/binary-s390/Packages
- 764e1a1be89b877a04fc132946becf6220e4210607cc43aa8186d755a15a9caa 5570 non-free/binary-s390/Packages.bz2
- f24b7acd306cd258d7ee0f6cd54fb56727a6e211c88c82e06141b11b92c8f109 5805 non-free/binary-s390/Packages.gz
- 7beb853133574ab5667b33daf2eb84dfcf6e20d8feec1abf009508934b18470e 168 non-free/binary-s390/Release
- 9418f25377f008cfcff977fb057fcbc636f7eeb57b90680c825c31ea9e70f6b9 20438 non-free/binary-s390x/Packages
- 764e1a1be89b877a04fc132946becf6220e4210607cc43aa8186d755a15a9caa 5570 non-free/binary-s390x/Packages.bz2
- f24b7acd306cd258d7ee0f6cd54fb56727a6e211c88c82e06141b11b92c8f109 5805 non-free/binary-s390x/Packages.gz
- 640cb4aa183bad6baf468fe014842c9ccebc186f2362e0e9684a0f137ae9b083 169 non-free/binary-s390x/Release
- 9418f25377f008cfcff977fb057fcbc636f7eeb57b90680c825c31ea9e70f6b9 20438 non-free/binary-sparc/Packages
- 764e1a1be89b877a04fc132946becf6220e4210607cc43aa8186d755a15a9caa 5570 non-free/binary-sparc/Packages.bz2
- f24b7acd306cd258d7ee0f6cd54fb56727a6e211c88c82e06141b11b92c8f109 5805 non-free/binary-sparc/Packages.gz
- 9557109452703575618cdec2c29d56ae54e4d515897f654878fa33c8f08c11b3 169 non-free/binary-sparc/Release
+ b7c5eeb06f7da854555da8ff770067487d2ce570f470186e68f66509a77c39ff 197436 non-free/binary-all/Packages
+ 14b9e9f5e3e975a57cca55b37de720402db95887075f30053b05dc9b3f9a6e97 53089 non-free/binary-all/Packages.gz
+ 156cedcfa43cdca8d0e3af673d3d3334047ee2de3aff631bcd71fc2f9995d7bd 44620 non-free/binary-all/Packages.xz
+ f5547175ebe37c05bd1ef58300e5bd693eebe41b015bc69cf252e701e311767f 118 non-free/binary-all/Release
+ a9f16feb9e1b936f64db42f1a6de039308e7653e0e080b6304473fc64fac06de 447124 non-free/binary-amd64/Packages
+ 8a793bc944d6b8e4affbdf3341840967a833f26b9631ca1ed597320d83ae1a26 106655 non-free/binary-amd64/Packages.gz
+ 9d1d5ef202ed32622a8cafeac394ee5bc99cf8ac27c7fbc823c4e3e3d10cf32c 87652 non-free/binary-amd64/Packages.xz
+ 5585db7a83f8c9c09853f11b7e485d98157f21be42eaf31fd363dc6f50e13208 120 non-free/binary-amd64/Release
+ 5228e0e9414181484ce18bf56e05dfc10a7d8e8f9b32ed1a15b3aeb47d4c4e16 238804 non-free/binary-arm64/Packages
+ c70bdcdff163092a3e23d78adc63e3318857a00aa852b34345897c6e6112167e 64350 non-free/binary-arm64/Packages.gz
+ 3c9aa861de381554ee2f458f911a586fd77bb0e5da76eb485d9b0788b8d7d5a8 53832 non-free/binary-arm64/Packages.xz
+ 13d0a32c3988291e09c9df4c514e4c38b0849fae130d21901dd06b89c722b8d9 120 non-free/binary-arm64/Release
+ 11667b51beb164905947bb05e0c8f11f7f2965fdfddf81b8586b753abeefbbae 236032 non-free/binary-armel/Packages
+ 1bce85e2256d089c1e7a1bc631ab79ea4c01bd5129b5e21620504fb68b5836b2 63889 non-free/binary-armel/Packages.gz
+ d4ce4dd793fea3fee474703e75148bde9cf4371071ec54498f92386b8816e921 53416 non-free/binary-armel/Packages.xz
+ c25af00a67560a12a086853d505485276c2ff0a69265bbf88a3d02908678f9d1 120 non-free/binary-armel/Release
+ 40685e8b1d2ce79aace5cb54e3cca5f3dd4c25d998125ab2c1e7b4c3ee56c5af 299334 non-free/binary-armhf/Packages
+ 2de6b677ad244d66572aae8bad0401f78d92cd72d3b35eb3d775cbfc46d33b64 74486 non-free/binary-armhf/Packages.gz
+ 6aebe691f11fa662572c99b4862198014a948ef5deccc20c142b3fb5ca1e5c30 62040 non-free/binary-armhf/Packages.xz
+ c44a59218b7d684e19dab049557018a5173c94c0bab8b145d7285b2b69741c1c 120 non-free/binary-armhf/Release
+ d48fd0b56ef3d3325b99ff5d6c91314d70c23bb779d2c32b59ea41eb153eb6e4 383285 non-free/binary-i386/Packages
+ 7b1d7d18a3130b028e3c75e3067aae700b691726b267480040228b19fc208315 92741 non-free/binary-i386/Packages.gz
+ 07b6f0e89a17cd72989b08c67f005c9696583aafe90d9337d2aa60441189ee2e 76156 non-free/binary-i386/Packages.xz
+ f89a8e17c7d5ab6493301ca251a6e8738a6b151bd1d720fb2afc99bda6e6ca8f 119 non-free/binary-i386/Release
+ 2bd229841bf68e5d5b9f35304f8cd3109d26ca2ff0738a8a55b598ef62fb4690 233779 non-free/binary-mips/Packages
+ 30878aa51c7b70045f57c1f4b012eb7ce343a030dd18af79391a0e996824695d 63210 non-free/binary-mips/Packages.gz
+ 00b6e7f425f0774e635672f91e5aa695e25b8a53b1dffb9cbbde4847d81e99ae 52832 non-free/binary-mips/Packages.xz
+ 43ddc2d6ba579aae67f5ea64ce2b4c20a04aa41b1fb4958ef3c970c018ec90a1 119 non-free/binary-mips/Release
+ 408665fbedcbe3fde32df922eeb11cf30731a54edc43b9fe304fa57c2c17c81e 235974 non-free/binary-mips64el/Packages
+ 6e3161b720ebf8450206ff4a9b1ed5df3089c6614f669abc76a9aebb46768545 63464 non-free/binary-mips64el/Packages.gz
+ 97ec5be7af21b38e2f4d0012f84ca692dc68ed3c63818dd87b63b711de850bea 53076 non-free/binary-mips64el/Packages.xz
+ e9393c8a3a36b187e14d5e316e60a1b2aa2efa46b1aa8558c41769889ddee82d 123 non-free/binary-mips64el/Release
+ 5e8fc0c084a824117bea9b552e377c0b115ece59e98a7c6fecb542c11073dcd7 236623 non-free/binary-mipsel/Packages
+ bd76f3600b5e14b534f869ba8df82a30d890aa6aba74c1e0d9cbe3dc44356b40 63967 non-free/binary-mipsel/Packages.gz
+ ea9470b47ba94f738ffa60510964dc033e2b752cf62c2ac0fb8bfb8f3a8f86b0 53380 non-free/binary-mipsel/Packages.xz
+ 85fc40a8f928fb700acf0850348773b71636144545f5126a0e9de943d60da602 121 non-free/binary-mipsel/Release
+ ef67287a65f88083d1c7d84e09ad652117fbf52c139c9972b6b32c76ff20de23 258455 non-free/binary-ppc64el/Packages
+ 7206983569b87eac4d7ee03343598b968a4b8fb7fb26c0e5a1954521b80806f9 67734 non-free/binary-ppc64el/Packages.gz
+ 1604ffc5189b54330972a6a3a8fa300136329c8c7a7b58f22eefe042627de514 56708 non-free/binary-ppc64el/Packages.xz
+ 981ae1cb8813a1deb38f94bb9d6ac503a8a781c7a1b15f097cb3ec7011093306 122 non-free/binary-ppc64el/Release
+ 50bb151cafb0d9accc328ba7f9c074b84d65404d25b50aac27519f38420e750e 233878 non-free/binary-s390x/Packages
+ 73e3f0942b4c48060522e1c2d100b527e8538aca7a7734f5c69133f34be19398 62973 non-free/binary-s390x/Packages.gz
+ fc8284c25d95e4d2573dd8ea2c2fa749916e2d5b4bff251002d29359c279dfb7 52796 non-free/binary-s390x/Packages.xz
+ ee63a32d4bc1848ef2289fdab633e047470a06462c6f5b45ab9730b859df0141 120 non-free/binary-s390x/Release
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-all/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 non-free/debian-installer/binary-all/Packages.bz2
f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-all/Packages.gz
- 8918675fadc9eebe2c331d82c95b446c9beceba6e64057e7699f7b017043fca2 167 non-free/debian-installer/binary-all/Release
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 non-free/debian-installer/binary-all/Packages.xz
+ f5547175ebe37c05bd1ef58300e5bd693eebe41b015bc69cf252e701e311767f 118 non-free/debian-installer/binary-all/Release
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-amd64/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 non-free/debian-installer/binary-amd64/Packages.bz2
f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-amd64/Packages.gz
- 0491de1431b49ae3ed04caf3c01d3d894d8123ac913225015fc667c8a2ed01ee 169 non-free/debian-installer/binary-amd64/Release
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 non-free/debian-installer/binary-amd64/Packages.xz
+ 5585db7a83f8c9c09853f11b7e485d98157f21be42eaf31fd363dc6f50e13208 120 non-free/debian-installer/binary-amd64/Release
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-arm64/Packages
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-arm64/Packages.gz
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 non-free/debian-installer/binary-arm64/Packages.xz
+ 13d0a32c3988291e09c9df4c514e4c38b0849fae130d21901dd06b89c722b8d9 120 non-free/debian-installer/binary-arm64/Release
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-armel/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 non-free/debian-installer/binary-armel/Packages.bz2
f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-armel/Packages.gz
- cbc0530c91253bb3d264a486e850f8717b5ee7507f71ce2bee7a0579ebf3e696 169 non-free/debian-installer/binary-armel/Release
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 non-free/debian-installer/binary-armel/Packages.xz
+ c25af00a67560a12a086853d505485276c2ff0a69265bbf88a3d02908678f9d1 120 non-free/debian-installer/binary-armel/Release
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-armhf/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 non-free/debian-installer/binary-armhf/Packages.bz2
f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-armhf/Packages.gz
- 5d28c1733de1e4849a10f260a7b54e32f4f137e69b99aad5ab983fb64608f1df 169 non-free/debian-installer/binary-armhf/Release
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 non-free/debian-installer/binary-armhf/Packages.xz
+ c44a59218b7d684e19dab049557018a5173c94c0bab8b145d7285b2b69741c1c 120 non-free/debian-installer/binary-armhf/Release
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-i386/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 non-free/debian-installer/binary-i386/Packages.bz2
f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-i386/Packages.gz
- 493bcb093fddbcab3d5ef0f1af40ab9c8bf70b2cc6a43cb44a13c1e6bf3e67a8 168 non-free/debian-installer/binary-i386/Release
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-ia64/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 non-free/debian-installer/binary-ia64/Packages.bz2
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-ia64/Packages.gz
- 24f6f1e57776f7539dbeac178e12952a7feb754ed1ea5be719e3af58062de02f 168 non-free/debian-installer/binary-ia64/Release
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-kfreebsd-amd64/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 non-free/debian-installer/binary-kfreebsd-amd64/Packages.bz2
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-kfreebsd-amd64/Packages.gz
- 68ba83dce2ab39aedc29dfcc3a8740ce8247fcbad94cc60bfd4bd7d7d059518d 178 non-free/debian-installer/binary-kfreebsd-amd64/Release
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-kfreebsd-i386/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 non-free/debian-installer/binary-kfreebsd-i386/Packages.bz2
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-kfreebsd-i386/Packages.gz
- 0955151e699f53cd5c865e64251bcaf409a9b4bb48a414538b33488c021ad442 177 non-free/debian-installer/binary-kfreebsd-i386/Release
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 non-free/debian-installer/binary-i386/Packages.xz
+ f89a8e17c7d5ab6493301ca251a6e8738a6b151bd1d720fb2afc99bda6e6ca8f 119 non-free/debian-installer/binary-i386/Release
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-mips/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 non-free/debian-installer/binary-mips/Packages.bz2
f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-mips/Packages.gz
- a751f134211e8b37375007883ab323d0f67e78d6d67341e667162c2253834184 168 non-free/debian-installer/binary-mips/Release
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 non-free/debian-installer/binary-mips/Packages.xz
+ 43ddc2d6ba579aae67f5ea64ce2b4c20a04aa41b1fb4958ef3c970c018ec90a1 119 non-free/debian-installer/binary-mips/Release
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-mips64el/Packages
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-mips64el/Packages.gz
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 non-free/debian-installer/binary-mips64el/Packages.xz
+ e9393c8a3a36b187e14d5e316e60a1b2aa2efa46b1aa8558c41769889ddee82d 123 non-free/debian-installer/binary-mips64el/Release
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-mipsel/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 non-free/debian-installer/binary-mipsel/Packages.bz2
f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-mipsel/Packages.gz
- 168dd50fe7b88f1169de213af2bcc15c2f7a39d85edd0cf21fbc744d883d0139 170 non-free/debian-installer/binary-mipsel/Release
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-powerpc/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 non-free/debian-installer/binary-powerpc/Packages.bz2
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-powerpc/Packages.gz
- 8bb794b5b0108f8534a00ec0485c3d37059bd52c9092137ecd0ee47a8332d96e 171 non-free/debian-installer/binary-powerpc/Release
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-s390/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 non-free/debian-installer/binary-s390/Packages.bz2
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-s390/Packages.gz
- 7beb853133574ab5667b33daf2eb84dfcf6e20d8feec1abf009508934b18470e 168 non-free/debian-installer/binary-s390/Release
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 non-free/debian-installer/binary-mipsel/Packages.xz
+ 85fc40a8f928fb700acf0850348773b71636144545f5126a0e9de943d60da602 121 non-free/debian-installer/binary-mipsel/Release
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-ppc64el/Packages
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-ppc64el/Packages.gz
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 non-free/debian-installer/binary-ppc64el/Packages.xz
+ 981ae1cb8813a1deb38f94bb9d6ac503a8a781c7a1b15f097cb3ec7011093306 122 non-free/debian-installer/binary-ppc64el/Release
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-s390x/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 non-free/debian-installer/binary-s390x/Packages.bz2
f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-s390x/Packages.gz
- 640cb4aa183bad6baf468fe014842c9ccebc186f2362e0e9684a0f137ae9b083 169 non-free/debian-installer/binary-s390x/Release
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-sparc/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 non-free/debian-installer/binary-sparc/Packages.bz2
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-sparc/Packages.gz
- 9557109452703575618cdec2c29d56ae54e4d515897f654878fa33c8f08c11b3 169 non-free/debian-installer/binary-sparc/Release
- 2789f8442e76ade168110f73d13089da06d335030e2c959f80d9b6933d2bea89 131565 non-free/i18n/Translation-en
- 51a6faa812b2d21c902e9db73de2f82b63b58c55901b5f1282993af6996c9fe3 21737 non-free/i18n/Translation-en.bz2
- e2db93903544885c673f69cf0e99a675c4ae3b4ea7a28b9fee9a7d245a2a62eb 2980 non-free/i18n/Translation-en.diff/Index
- 34c53449e221ce14bcd3d3c06a65ff19814a67e45d204ce4d6179f77fdc99e69 170 non-free/source/Release
- 2d22e8c34a0de862e6ca1debf0433666220799be017c32d1b9e485958dcdf4a9 43755 non-free/source/Sources
- 334db34bd81e3ca9b45a6d8fb227b3b72dee936fa75ec4dd0037d43280e8634a 10083 non-free/source/Sources.bz2
- 7efd7cffbc3df4291295e58c661876ab5cfa44ba9202b1a843be9a696959bcf7 4456 non-free/source/Sources.diff/Index
- 8fc659c10e69e4952e1b641cfe5ab9dcf3189c273b2801190cd2fed7e63dd98a 10609 non-free/source/Sources.gz
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 non-free/debian-installer/binary-s390x/Packages.xz
+ ee63a32d4bc1848ef2289fdab633e047470a06462c6f5b45ab9730b859df0141 120 non-free/debian-installer/binary-s390x/Release
+ 3da098d6f5fc6ed570d3d341e24695dd72d7f3083b4d9aff2d2322f428d3d7eb 88700 non-free/dep11/Components-amd64.yml
+ 67b3bfccb4ed98bbdac2ae1df1ea3354161e74aa99ae7f704f0a94e48acc22c0 10864 non-free/dep11/Components-amd64.yml.gz
+ 4285b90a01fcf948a092814381a82d4fc717710cdb1e11c5521952403b4d70c4 9096 non-free/dep11/Components-amd64.yml.xz
+ 09da7a80769f3722693caa0e184ca444dd83bc1608e2cff2839c7203402e8300 83062 non-free/dep11/Components-arm64.yml
+ 4e38879b90bc4c173f09513db9ccd123eb1b50f498bbd72c1c3849ce53cff980 9530 non-free/dep11/Components-arm64.yml.gz
+ 368733a2718c329fef5d7a07a5bc833fa7c3d90fd02909f6849b6daccbbbd751 7880 non-free/dep11/Components-arm64.yml.xz
+ cb8051d38c808dce32203503546be3a182fb478d03a19f2ffdc4c4590efb449f 83062 non-free/dep11/Components-armel.yml
+ 5e6a85b27ffe8baab12554a4f31428089525e52213ccf12125fd07aef95460fc 9587 non-free/dep11/Components-armel.yml.gz
+ 3e1a2467d0b1f487269fa42c88818e305d4deb7f322ae902ca925cb9201fc06a 7876 non-free/dep11/Components-armel.yml.xz
+ 84b2d27a44feb474b743631ab4abc33fa4e7c7a48b2dc7e3f38ce7eec250d0ce 83062 non-free/dep11/Components-armhf.yml
+ 6e5a306a988f1b4a8b86ebf55fa217c88527fead488e0ff7450650373641c162 9811 non-free/dep11/Components-armhf.yml.gz
+ eeb5327e0aea2cd08ba590765db8dcb79a2bcb810eacee7ed9ca9520eda28837 7880 non-free/dep11/Components-armhf.yml.xz
+ 4131d969807862660bc18a091f1d47f87ac765117f557288a788bc88ffbb3fd0 91016 non-free/dep11/Components-i386.yml
+ dfb263dfcf78f6fafdb35d3b8a2d61ced8567b447d1673f1d8656db62475411f 12590 non-free/dep11/Components-i386.yml.gz
+ e5eeef57ecb49c0582242241bc0489a4f84d0c9748dd342532fed0cad9945d1b 10272 non-free/dep11/Components-i386.yml.xz
+ 1b6947dd4bed99974dec715dae4b8a33dc40c961d93f3ef905855c9981eabfaf 83062 non-free/dep11/Components-mips64el.yml
+ d575657fc06a52ea38d33f075a8a02af770173bdb39bf2a8989c71f0bebe3efe 9512 non-free/dep11/Components-mips64el.yml.gz
+ 178a70ad062598a2be3622a190d4bb613a60a10f50a3502d6465ed796e4cf58c 7840 non-free/dep11/Components-mips64el.yml.xz
+ 49065b7fc4112ab4bb0f4873631d769f480dc8338df3754ae4c7eda53412c57e 83062 non-free/dep11/Components-ppc64el.yml
+ cca424a4f4e9880a98ec8d677854c9a902872486aed6b4d828d48d441f7bb4de 9548 non-free/dep11/Components-ppc64el.yml.gz
+ 46cf30069bf24a57f65b52e25bb8ed0efb8ca4b7f3a8a5db432d50a29e448655 7840 non-free/dep11/Components-ppc64el.yml.xz
+ fdebfdd34cd2cc87cf298d569e3a2129cbf08201119e291a433871a6854c908c 83062 non-free/dep11/Components-s390x.yml
+ 06d09f07179592bc8c1b6f270f1f2a00dced70165b2c82f7d955dcf3ac42eadd 9542 non-free/dep11/Components-s390x.yml.gz
+ e89fd21ec3e35b5839586bab3f99722051b7dc3f5fd2e96959ca4648921bd236 7884 non-free/dep11/Components-s390x.yml.xz
+ 05d537a143f0d9fd4d72e272d398495a58d6409864095de72ed75eb266467577 15360 non-free/dep11/icons-128x128.tar
+ 3339065d3db0062b2aef74f44609952634060d5af68165d0e0f6525cec1de3ca 6725 non-free/dep11/icons-128x128.tar.gz
+ 06415602c4fd9a005f5950fe0e4be55f9148d27693e38de3265b05362ea02f46 9216 non-free/dep11/icons-48x48.tar
+ c35a2c02ac126e9b0af0c51a7440a035b69a35f41fa71f1d509c27f3a00504c0 3491 non-free/dep11/icons-48x48.tar.gz
+ 44afd97a213e3692d8fbf26feefa892915b6a1feeb45afaf0bb8debaf5027547 49664 non-free/dep11/icons-64x64.tar
+ 6968c97d148c7aed97e1a449300ff7d24a2c413dbc6a9ca6a2045ce613accc92 38343 non-free/dep11/icons-64x64.tar.gz
+ afe0424f1d8ca583bfc4a4b9846696fb797b234ef697528d70d027808723aa83 512965 non-free/i18n/Translation-en
+ 86615513048891ae7ef29c7f9addfc00298caae99e1a4f3f53486f99eee6c241 88834 non-free/i18n/Translation-en.bz2
+ af79835a2df647dc2421ae2ff5a21b7602470f60161345c2f16dca5132bdb615 121 non-free/source/Release
+ ad417556e5247489c332fd51e0b71b859ec291817045aa99b8600b21b44e3077 371347 non-free/source/Sources
+ ca2017043b96ae7399b10cb5d9e0cee4e9ad5939efb2d8730456249f997e11d0 103716 non-free/source/Sources.gz
+ 3c5eb439b193bc2281b88cdf178ceb943cd4b6097afee6ce2b51ff1550656ee0 85628 non-free/source/Sources.xz
-----BEGIN PGP SIGNATURE-----
-Version: GnuPG v1
-iQIcBAEBCAAGBQJZMXlSAAoJEItIrWJGklVTg1QP/R2kG43pm3wauYql97AH4Mt3
-Say7L1xhrCcr23c7cNuxjAiLWl3HCOo3mmHGVtb/KcOe1NmpBc7GMbyi9YdTQBBa
-CEJf9n5AEVlc/8hR3pc8jCY99Ewob5+2gkp02SgltkI0FgkY0zhv+IDNF6gHUR5P
-Q0DzWaiRsjxqE4AugsholVb7Ca/h+FPJIYfO/gae6oXcSKcs8UnDau8Co2dFhPo0
-9QqbJsOVxvOWoAF4ZL9pUZoJhxfGx4Lq6yEilbc6PdC4AJetL37N4ckYYqP+EKCz
-4LD2pL7GRxZHJw8yjIN4sU7STShz1TWHrfVQOmpUXbVj/zr9szg7IpHvnKq17K1H
-NY2UYOxxU5FNwYTkrNAtxQuZNvkw05t5xhBG7De0yOXBQQc6tbi5E1JQJ136M5Fl
-cyTcDlLA4dd850onlLEPuf/RNWcoqM2bPTVYfth/XrkQ7yvDY9Gc9jVxHbus6lec
-xAEii3LrMYoLlaawsX2I7DXtkCH7l3nBkHVZIOgqCD9oLnJW97r+C9DajOkkEhg3
-JjAWQLOOMseJisGlIH2BuPNcNLLOKxkLwXAzaR2MqwgAALTI/nJwbAZISzoO3jBf
-9qJ6lDP5k9tf8ym7BGsCB0f4c2gsevZVET/OO1ghwWBBiNbxkrcjdViWC14QPzPN
-D/awb6HuCofk4oE/G4naiQIcBAEBCAAGBQJZMXlSAAoJEHY40EQrkNAQg1QP+waG
-mnOKCzR6cTYUPznCKDxgePfpfiCaWw+b9J/nLlaRkirczbjm61npVU5hGWDloek+
-QejxCalIRz897ZXk3ii6wxWvZ8dv1xVOLX4etcYmzXKY9TCZs8XPHkFp3WjpPpIr
-5lEvfQqPWuVnO4VOPVaI01vy1H+3KjYKIKGZoe99oy4L7118ZyqxCFTKqxUr3Sh3
-Apwn5VVPTKTViR/I9zY5xHJ4YIPHNosEj2FRFppNC8pgg0aS/Cmia/FEkDvgiXTe
-XJAGShUFxqUIUVf13tERXHQajcm0z7oIrVbnujBUXLr4q6q4TS1BG5bsPth1dW4+
-Hj5Fx5yZbuzOpR0CL31mGj/t28RR2gfCocxeTtNhb6L2em2G0c0x9FVvfzsAEHEy
-AW4tzevHZTswqocAEG2hKfvgl0kS0j8VTffGzJSVxE/IwLXCCW2sC/wYht9gWR3N
-RGkgNrJtU3Cl1vq6n4ie40mo7sDsL6eOvhOz2+i07ZZORTtadzEnADsuIqWLEpgU
-s4O227oUnXbXMvzMwSvNDPqljCuSK081JcfQnTerdEDfR0WMRRwtdAlrmr4qKKSd
-X+mAj5GktYLlfz5YKM7SbiRfbdB129WnSPOlpx3CU99fcDnZkaJgQF+m8qGQoNSi
-XPexaT05aZ5Wa5fHydTsZ8e64eN3KjCaaEhq6mzP
-=gkkk
+iQIzBAEBCAAdFiEEFukLP99l7eOqfzI8BO5yN7fUU+wFAl/LYuwACgkQBO5yN7fU
+U+xysg/+LPDalc/gFgUUFE6sIDED43sHqj8/fNVv79Rsyj+A8AdGfg8WBkhG5Y4O
+uNyIiz23hTeOeLykZ3SOhJAyMhKehjeqfl9oN6jSKC5TTJnKFjEc93qL1VvtWnAz
+WHJcsUBXQaHtIgRxMjpyIEZRTNpGuV4n4pbCd6jAF2/Zw8/vd6mElxRy2/nTmVOH
+eUjg1uozK25mXg1naszUVlUTXoaQlGIYA9UWx/1L9gYOf7DgFSauG9Lb5jLb0t4R
+033AHYz76mGD9hhrQsJe3ReYmS0Tns0vRdYwRhkBQYgwqQ2H8KfL4q9gtzMwLCaM
+ozrRAxDJ67d6s9P8OzOwJqCLLwCTNAxq29Sq6BAsGGwKK1Z19n00ZvdgEyruoFBP
+qaIeerLpmBlqToLkMTa8RPfcnqoLZHCmkWQiNUJEqYG4nt6r8g5GHOjRw8YFgSmo
+cfbZycFChYiuOAChbNyQinjZkZdoiQUr71zgmIL99X05EDWwt336pC1MSEPKWq32
+E/uLnIJBfdr4Qdseg2szAjucVWHB8tmnLteT8f3HyABgpCtgDgwdxjoBIiY0bVjl
+6T2U0rW+yB1a1dOSO6FkiS4y2byAeQChyiNrwAwjFLXLdcEOMQHNOk5ieljZzEdK
+GrPYoFf1xJrjfpxhV7bFvd9mauQJmcjaausiixomCkepT5tnNv2JAjMEAQEIAB0W
+IQQBRtxtSgspFL3tNNtkis/WIvPROAUCX8ti7QAKCRBkis/WIvPROFc/D/9xj8X0
+tZRgwrwUnlo7UaLiy2D/Ps9G5ekfr67NSu83hVd+CX/marl08zPwim0xdZclxxBt
+JSqrDGDguZ/oagjcMLuPOMyDShvMo942fEVDkDo+0O7XyBW1LBnzuQBJluT0WDRU
+dfhak/sc/3NhkVad6Yf/5Q5aa/pYixTWC4oGQmgSgBpZNnkKC5hiBbB+jV1HZWsn
+Oomx3cU6eGOL7NnJRekl++RSfThmhvFFQjNByfPnpzlZni1h4tzrkszZN/RpJvF6
+N1q21lYEo8MsPbE3XYkMw68pPPm+VOhsHgMY3/DLPUYLu9lSIYk6nYPovySi+Q2L
+SYm248HnTWZBN8Q+9kGiS0t6DkAMtUHaghVL2tlTk91ocEIhhBu1eahw5j6+8dCI
+L7rKqx99BdbArmEJnIHbqI8+qePVAqX/Wwz+YcqCdOtJ69OpwYdOzOvp5N2cdU/h
+vuxuuU1i3GJIhYnTeMEb03nIZe0mUz3ueea0rlUx/GVyVT9kzVJnPc7/QAK2uq8+
+vGX46wB91rbhEveHrwE7OhD0WGfVqgEzIRdkTLQSR1h+ZlIEWV88Fp0LpzE0gYfA
+nKVLKGz8pjGT8g6/cGiPl2W+jmVtENiRfpDZh4a0uuyl7urBXko86QOwe03Tk9XA
+eoE7J6zjisyrkyeVfty4W/Pz02fFwKbRJS+M1YkCMwQBAQgAHRYhBG0zhm7dj/pB
+wBQ67dzJ77934RUXBQJfy2PFAAoJENzJ77934RUXktMP/R0AY09ri6GjgezSFaAZ
+taRMeqdLoyRQy8xspCt8yMR1r3ozTdIlusg7KClI740jjO/P80Y6Q76DNxlHvlDx
+LNT9CRVni4Q4fUG1m90KnLmJg43uy4ok67AW+r8u8sFKlx+ocUTleDCGUsFXbedR
+XBmA6KGtPDS5v6JiFD5dHkpIztf6+vsFoHdnca9OUIdFwZedq67XCoCZPQ+0ixlI
+9GOG1ePDf4yA1d8y48nRXkgE/IKNKi9iHvwofOWLG5CPZpneRNsTPKBmZ3BjnNmf
+f9YK+oFUOvtaFJRvetrZrFPGM5sOU/Woi0Y+hw+22Y4vr5trYOYbvPdkGd+TAAyT
+wqffJeIcLpSpfPsn8FGI0aNs5TYSOjCdczZJHlfFFCCMfCLmKdSmoiJ7dRWadyPn
+AyhjH53lSVOp3jz1uFohQVMsw76X7BwqcrTsmR863CzOjkZ9yNj0rePJVNL8Y4qE
+elheieJQJPCUkk/dryb+9ocJ184ZkmbGaO9nmhyqtOQm9CerL64DZPqpaxHlk0bx
+fFxTp5xzT0tl9X7Qqm46kraacHfEjhiDwd6vPXFFNDjwm1Q7yhTUlXfdHQKHKtmy
+FeYwWnq1uWP87HylnC8w8vABh/PRDNnuNFOPO6o/7QFWOa6Q+G58eMVdH8ZXG+og
+XLLpme5UxskL5fd4P/rk8Bos
+=S7Z3
-----END PGP SIGNATURE-----
diff --git a/pgp/1.cleartext b/pgp/1.cleartext
index 0f942f2d..285d27cd 100644
--- a/pgp/1.cleartext
+++ b/pgp/1.cleartext
@@ -1,1791 +1,1269 @@
-Origin: Debian Backports
-Label: Debian Backports
-Suite: wheezy-backports
-Version:
-Codename: wheezy-backports
-Date: Fri, 02 Jun 2017 14:42:12 UTC
-Valid-Until: Fri, 09 Jun 2017 14:42:12 UTC
-NotAutomatic: yes
-ButAutomaticUpgrades: yes
-Architectures: amd64 armel armhf i386 ia64 kfreebsd-amd64 kfreebsd-i386 mips mipsel powerpc s390 s390x sparc
-Components: main contrib non-free
-Description: Backports for the Wheezy Distribution
-MD5Sum:
- 21206181d8c101b785f51c82820acef7 118763 contrib/Contents-amd64
- 85c8255dffc0437f45d71e2e0d27401b 2704 contrib/Contents-amd64.diff/Index
- 01c60695e6465dc1a3f2035d7060de57 10211 contrib/Contents-amd64.gz
- 01d265b9bcabbad6969c560a69550890 72100 contrib/Contents-armel
- e03cee735398401fedf5b505fdc0cdbc 1720 contrib/Contents-armel.diff/Index
- 72d7c7425cd9f63839a435b39bb24e06 5965 contrib/Contents-armel.gz
- 4167ca89eeb054f691120044056826fc 79842 contrib/Contents-armhf
- f45e888e54ded9592481bafff7205d06 1720 contrib/Contents-armhf.diff/Index
- 1ea96a00a7a076e87a34bb79a832f82a 6899 contrib/Contents-armhf.gz
- f95b4601d08c3caf94381584885104e3 119085 contrib/Contents-i386
- f1dc4e7fc716744158c005ce42b42cc4 2704 contrib/Contents-i386.diff/Index
- 5855fb5e3001431569c1907c201242ef 10231 contrib/Contents-i386.gz
- 83d17f4a4b2cdb6a8ba5e91914039eaa 72100 contrib/Contents-ia64
- b2a399aa60fee08d4425bd528950dda9 1720 contrib/Contents-ia64.diff/Index
- 68c7d76f5dc7e4b29f0b789ae4724349 5937 contrib/Contents-ia64.gz
- 307195d9ac2b4d0b7cbefa3dcc638be0 72100 contrib/Contents-kfreebsd-amd64
- 685fb0b3f0922d9721358d52c8457641 1720 contrib/Contents-kfreebsd-amd64.diff/Index
- acc9830a3ee369949b4c3ab1d048dbbe 5938 contrib/Contents-kfreebsd-amd64.gz
- aac7310720ec1facdc9d2b36c776e155 72100 contrib/Contents-kfreebsd-i386
- a68afa49897820e0aac0e6d132a95394 1720 contrib/Contents-kfreebsd-i386.diff/Index
- 968c837d24af1013d29f3fcd98736dac 5961 contrib/Contents-kfreebsd-i386.gz
- 384900ef54f1434a179d7909f0e85a9f 72100 contrib/Contents-mips
- f993a554f0e0396c3fb8e18e94b69b38 1720 contrib/Contents-mips.diff/Index
- 29e50d04f0a1a71416c53eb994626420 5938 contrib/Contents-mips.gz
- 3d04b6fe8a213e1b6c9ec4aa6a4f8941 72100 contrib/Contents-mipsel
- ed39d4f7b1c5c54acf0724eda2f9f25f 1720 contrib/Contents-mipsel.diff/Index
- a229ecea20a8917d47c4089045213212 5936 contrib/Contents-mipsel.gz
- bf1ca5e429376aae7d39e0e110feb257 72100 contrib/Contents-powerpc
- 389c41d49f26b9d1d4c607c78c3f1f2c 1720 contrib/Contents-powerpc.diff/Index
- ba4ad04ef38b60878b2c752dd91a7692 5938 contrib/Contents-powerpc.gz
- eb0e770d0af5d589be28cdf84916f546 72100 contrib/Contents-s390
- 21c3e26b8ae24185a9a0bc75bc481f15 1720 contrib/Contents-s390.diff/Index
- c1057ea97080d6948594e49ca57dc483 5940 contrib/Contents-s390.gz
- 56267a6863aceedc62c5a61fd77403ba 72100 contrib/Contents-s390x
- 41ee31ddbdbf8445dd7592d7fb0da1d8 1720 contrib/Contents-s390x.diff/Index
- eef7ac6c7bb791dc7d1728bd725ce3f0 5932 contrib/Contents-s390x.gz
- 2fff5fc20450e2e52c7ae64e2c5b94c9 1174098 contrib/Contents-source
- c62c2cc191786bc40a45c71401393f00 3204 contrib/Contents-source.diff/Index
- dc37b268cb927bd1f15b708213fbd6b7 102051 contrib/Contents-source.gz
- 5b581575f7b79e911344b7e3b9c2977c 72100 contrib/Contents-sparc
- e7fe628625382aa61d8715cba997f087 1720 contrib/Contents-sparc.diff/Index
- b3a10372cd0690c21c0730638f293c35 5940 contrib/Contents-sparc.gz
- d41d8cd98f00b204e9800998ecf8427e 0 contrib/Contents-udeb-amd64
- 4a4dd3598707603b3f76a2378a4504aa 20 contrib/Contents-udeb-amd64.gz
- d41d8cd98f00b204e9800998ecf8427e 0 contrib/Contents-udeb-armel
- 4a4dd3598707603b3f76a2378a4504aa 20 contrib/Contents-udeb-armel.gz
- d41d8cd98f00b204e9800998ecf8427e 0 contrib/Contents-udeb-armhf
- 4a4dd3598707603b3f76a2378a4504aa 20 contrib/Contents-udeb-armhf.gz
- d41d8cd98f00b204e9800998ecf8427e 0 contrib/Contents-udeb-i386
- 4a4dd3598707603b3f76a2378a4504aa 20 contrib/Contents-udeb-i386.gz
- d41d8cd98f00b204e9800998ecf8427e 0 contrib/Contents-udeb-ia64
- 4a4dd3598707603b3f76a2378a4504aa 20 contrib/Contents-udeb-ia64.gz
- d41d8cd98f00b204e9800998ecf8427e 0 contrib/Contents-udeb-kfreebsd-amd64
- 4a4dd3598707603b3f76a2378a4504aa 20 contrib/Contents-udeb-kfreebsd-amd64.gz
- d41d8cd98f00b204e9800998ecf8427e 0 contrib/Contents-udeb-kfreebsd-i386
- 4a4dd3598707603b3f76a2378a4504aa 20 contrib/Contents-udeb-kfreebsd-i386.gz
- d41d8cd98f00b204e9800998ecf8427e 0 contrib/Contents-udeb-mips
- 4a4dd3598707603b3f76a2378a4504aa 20 contrib/Contents-udeb-mips.gz
- d41d8cd98f00b204e9800998ecf8427e 0 contrib/Contents-udeb-mipsel
- 4a4dd3598707603b3f76a2378a4504aa 20 contrib/Contents-udeb-mipsel.gz
- d41d8cd98f00b204e9800998ecf8427e 0 contrib/Contents-udeb-powerpc
- 4a4dd3598707603b3f76a2378a4504aa 20 contrib/Contents-udeb-powerpc.gz
- d41d8cd98f00b204e9800998ecf8427e 0 contrib/Contents-udeb-s390
- 4a4dd3598707603b3f76a2378a4504aa 20 contrib/Contents-udeb-s390.gz
- d41d8cd98f00b204e9800998ecf8427e 0 contrib/Contents-udeb-s390x
- 4a4dd3598707603b3f76a2378a4504aa 20 contrib/Contents-udeb-s390x.gz
- d41d8cd98f00b204e9800998ecf8427e 0 contrib/Contents-udeb-sparc
- 4a4dd3598707603b3f76a2378a4504aa 20 contrib/Contents-udeb-sparc.gz
- 180a225f83f76f8f7649a62b6bee54d9 5197 contrib/binary-all/Packages
- 6c39e46c3ee5f114abda1529ca70a171 2004 contrib/binary-all/Packages.bz2
- 408865f80df05f52e1fbc89b7b5fe066 1824 contrib/binary-all/Packages.gz
- 10ec089531400f643303eb8b2c9ffd2f 166 contrib/binary-all/Release
- 64950d690f6c6ea4477e904e63786b58 34074 contrib/binary-amd64/Packages
- 0a06d6a87beada84759f82c741c186b2 8725 contrib/binary-amd64/Packages.bz2
- b8d5734d394d59e06166bc6441d6c869 2212 contrib/binary-amd64/Packages.diff/Index
- 2392309d48c42ca7f7555a08c2a37642 9229 contrib/binary-amd64/Packages.gz
- f2d2da667edf02444b2b0c8a3019a7b3 168 contrib/binary-amd64/Release
- acd673898519a8b386ac373fa3eafe8b 9111 contrib/binary-armel/Packages
- 6aad51ada8f190601d9e7ed3d1b9ce92 3160 contrib/binary-armel/Packages.bz2
- 32dc61275183b6dd25a4a7c8c237e436 2212 contrib/binary-armel/Packages.diff/Index
- 6a824b41bb0e025839f3d9a57cfd974f 3027 contrib/binary-armel/Packages.gz
- 4abf28324fff6541410f05163ebf43b9 168 contrib/binary-armel/Release
- 1e18ff1073fd269017f3f233b6c2dcef 19971 contrib/binary-armhf/Packages
- 420c8bcf5b925cf9db6f7a95094026e7 5661 contrib/binary-armhf/Packages.bz2
- 57675dd933fa04cabaa3fab06c0b3b11 2212 contrib/binary-armhf/Packages.diff/Index
- 3ca4bc00fbaeefc9ab771dee6b4a772f 5755 contrib/binary-armhf/Packages.gz
- 7b2590a94c932a4bfceba8c63a7fd96f 168 contrib/binary-armhf/Release
- 17cdb828d6aa455125ccc90b4b089a0b 34024 contrib/binary-i386/Packages
- 313182b47fd78782fa630bda02d7719e 8744 contrib/binary-i386/Packages.bz2
- eb758210d8bb5ca8a00c3571f9bca250 2212 contrib/binary-i386/Packages.diff/Index
- d0969cbfd0d0c1248e87295e643c42b6 9375 contrib/binary-i386/Packages.gz
- ee7c07f328ec75e82ee876e5092da5c7 167 contrib/binary-i386/Release
- 68b01dc9020b4e080e04aa37864964db 9149 contrib/binary-ia64/Packages
- bea10196ca9a0441ba81b42190f8787a 3188 contrib/binary-ia64/Packages.bz2
- bbbeba3f35c3b46fb56c8ec6f3d82364 2212 contrib/binary-ia64/Packages.diff/Index
- c6f0cb2e66622756634d07c9b1ebc82e 3029 contrib/binary-ia64/Packages.gz
- b706fdcbc8d0783146ad9251a1a1ef02 167 contrib/binary-ia64/Release
- def06686d1edb7a6f25244f364c87736 9208 contrib/binary-kfreebsd-amd64/Packages
- 6070e37002a52f26e38ef2892a152c29 3171 contrib/binary-kfreebsd-amd64/Packages.bz2
- e60ac309e79e8c8690096b4f85c7bdf3 2212 contrib/binary-kfreebsd-amd64/Packages.diff/Index
- 3f37edd8d005a3b1b638dd746812844c 3031 contrib/binary-kfreebsd-amd64/Packages.gz
- dade35d2b96a40c96112ee21333f0050 177 contrib/binary-kfreebsd-amd64/Release
- fd27bfc6f853290c51600a9a463e38b4 9198 contrib/binary-kfreebsd-i386/Packages
- 27e71ff9195af8bb09280e7fb39f93e1 3183 contrib/binary-kfreebsd-i386/Packages.bz2
- 436e3356e08e3dee4094a38550ac1fec 2212 contrib/binary-kfreebsd-i386/Packages.diff/Index
- 659373a8d73cefd67f7cbe58b1f8073c 3034 contrib/binary-kfreebsd-i386/Packages.gz
- 66e7a191e7c2cb7325f6421e4ef4c53f 176 contrib/binary-kfreebsd-i386/Release
- 4518f5122a89a2376d75844723766809 9105 contrib/binary-mips/Packages
- dc8cef1231cac4b7952aa92b13cc99d2 3157 contrib/binary-mips/Packages.bz2
- 961ef5bab71a5d2b68b2db5bf7b8edb2 2212 contrib/binary-mips/Packages.diff/Index
- 7130d3d277bae1f171443a8955ee7039 3016 contrib/binary-mips/Packages.gz
- 3cea3a9ce042468957699ec51d3ec7fe 167 contrib/binary-mips/Release
- 18235b8a1c849336ee6ff5be6c3f9eb5 9125 contrib/binary-mipsel/Packages
- ef835080704a422b436d56d2996076bb 3167 contrib/binary-mipsel/Packages.bz2
- cf53166a4ef7945d5c1f350dcdd50188 2212 contrib/binary-mipsel/Packages.diff/Index
- e4966def40b4f3efe2fcfe5f4693c3d5 3016 contrib/binary-mipsel/Packages.gz
- bbf396e9ec12920c0b207be2b00f9c79 169 contrib/binary-mipsel/Release
- aedf392fca6641b3c28ca90b440b1d9b 9132 contrib/binary-powerpc/Packages
- 011926ec364f4687b59028002bd08b0e 3169 contrib/binary-powerpc/Packages.bz2
- 3f7346e01410da53eed798cea079e199 2212 contrib/binary-powerpc/Packages.diff/Index
- 72145def16fc64b68174931728775def 3019 contrib/binary-powerpc/Packages.gz
- ebc648a84fcf7f88cad58f2826a79c56 170 contrib/binary-powerpc/Release
- 6e3ba38d638b539e7f100e306858837c 9102 contrib/binary-s390/Packages
- 6fafb4999a9f1b2bd5762db8a3ee1a49 3162 contrib/binary-s390/Packages.bz2
- fb655de23142b1a2e931a00d9e90298a 2212 contrib/binary-s390/Packages.diff/Index
- c9206c823e50e7959de938971a186f7a 3023 contrib/binary-s390/Packages.gz
- 719241f1c3257f7dd8f4d816037e4147 167 contrib/binary-s390/Release
- 7c6f6a9405bb883c117e1ae77d53358c 9116 contrib/binary-s390x/Packages
- 2d080cf802826d2d9b0c5c939b39efb0 3168 contrib/binary-s390x/Packages.bz2
- af4d702d35fd21858dd4a954efab43fa 2212 contrib/binary-s390x/Packages.diff/Index
- 08dba5532cff5a631863e1a37821c86a 3013 contrib/binary-s390x/Packages.gz
- 5f8fde0830b63afa7397b99ee375cc31 168 contrib/binary-s390x/Release
- 3b9a3e4cf04acc7992788176ddcdf974 9112 contrib/binary-sparc/Packages
- fac005a267230b2dd37ea0e7487b6a92 3149 contrib/binary-sparc/Packages.bz2
- 7640946c3968cacde18d1555dfcbdc1c 2212 contrib/binary-sparc/Packages.diff/Index
- 51e844a8b3be662c40cc2a2e14cd25c3 3028 contrib/binary-sparc/Packages.gz
- 6369b075d6a420172fbf4ba3dbdee12e 168 contrib/binary-sparc/Release
- d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-all/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 contrib/debian-installer/binary-all/Packages.bz2
- 4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-all/Packages.gz
- 10ec089531400f643303eb8b2c9ffd2f 166 contrib/debian-installer/binary-all/Release
- d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-amd64/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 contrib/debian-installer/binary-amd64/Packages.bz2
- 4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-amd64/Packages.gz
- f2d2da667edf02444b2b0c8a3019a7b3 168 contrib/debian-installer/binary-amd64/Release
- d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-armel/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 contrib/debian-installer/binary-armel/Packages.bz2
- 4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-armel/Packages.gz
- 4abf28324fff6541410f05163ebf43b9 168 contrib/debian-installer/binary-armel/Release
- d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-armhf/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 contrib/debian-installer/binary-armhf/Packages.bz2
- 4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-armhf/Packages.gz
- 7b2590a94c932a4bfceba8c63a7fd96f 168 contrib/debian-installer/binary-armhf/Release
- d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-i386/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 contrib/debian-installer/binary-i386/Packages.bz2
- 4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-i386/Packages.gz
- ee7c07f328ec75e82ee876e5092da5c7 167 contrib/debian-installer/binary-i386/Release
- d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-ia64/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 contrib/debian-installer/binary-ia64/Packages.bz2
- 4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-ia64/Packages.gz
- b706fdcbc8d0783146ad9251a1a1ef02 167 contrib/debian-installer/binary-ia64/Release
- d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-kfreebsd-amd64/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 contrib/debian-installer/binary-kfreebsd-amd64/Packages.bz2
- 4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-kfreebsd-amd64/Packages.gz
- dade35d2b96a40c96112ee21333f0050 177 contrib/debian-installer/binary-kfreebsd-amd64/Release
- d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-kfreebsd-i386/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 contrib/debian-installer/binary-kfreebsd-i386/Packages.bz2
- 4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-kfreebsd-i386/Packages.gz
- 66e7a191e7c2cb7325f6421e4ef4c53f 176 contrib/debian-installer/binary-kfreebsd-i386/Release
- d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-mips/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 contrib/debian-installer/binary-mips/Packages.bz2
- 4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-mips/Packages.gz
- 3cea3a9ce042468957699ec51d3ec7fe 167 contrib/debian-installer/binary-mips/Release
- d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-mipsel/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 contrib/debian-installer/binary-mipsel/Packages.bz2
- 4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-mipsel/Packages.gz
- bbf396e9ec12920c0b207be2b00f9c79 169 contrib/debian-installer/binary-mipsel/Release
- d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-powerpc/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 contrib/debian-installer/binary-powerpc/Packages.bz2
- 4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-powerpc/Packages.gz
- ebc648a84fcf7f88cad58f2826a79c56 170 contrib/debian-installer/binary-powerpc/Release
- d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-s390/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 contrib/debian-installer/binary-s390/Packages.bz2
- 4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-s390/Packages.gz
- 719241f1c3257f7dd8f4d816037e4147 167 contrib/debian-installer/binary-s390/Release
- d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-s390x/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 contrib/debian-installer/binary-s390x/Packages.bz2
- 4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-s390x/Packages.gz
- 5f8fde0830b63afa7397b99ee375cc31 168 contrib/debian-installer/binary-s390x/Release
- d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-sparc/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 contrib/debian-installer/binary-sparc/Packages.bz2
- 4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-sparc/Packages.gz
- 6369b075d6a420172fbf4ba3dbdee12e 168 contrib/debian-installer/binary-sparc/Release
- d86ec3b4ef4918669eaec15b93113db2 21108 contrib/i18n/Translation-en
- c13c78365715efcbbb8e090710bd6ee3 6350 contrib/i18n/Translation-en.bz2
- 6a203d860cc9f1bd6994dca6f938b6d2 1228 contrib/i18n/Translation-en.diff/Index
- 96724da09b4e1570206a8746c33ae818 169 contrib/source/Release
- 8d98b94ed7990ac8c77601bef8dcf023 29845 contrib/source/Sources
- 47a1f7c66f32d5dea14e5788e5ad2540 7880 contrib/source/Sources.bz2
- 53c044b02e578e6aa2708624bcb9589b 4180 contrib/source/Sources.diff/Index
- 3bb7a2ee91a77a8ab7a38c7f4c170c79 8150 contrib/source/Sources.gz
- 7c361a01fb7ec7693b9c187233861e12 55983554 main/Contents-amd64
- ebbaf2d76f453e9e8fb1b633c41d2850 21550 main/Contents-amd64.diff/Index
- 1bf68b885976ad7281ef74346573b66f 3864160 main/Contents-amd64.gz
- 261d8ba7a16221a215775edd01b32204 55728755 main/Contents-armel
- c93d2441019fb6c3a51110e7bd0fd8b2 22168 main/Contents-armel.diff/Index
- acca77d7238fbfb7b72aede001487971 3786638 main/Contents-armel.gz
- ba83106c478fdaf638a0caa033cda5e6 55205131 main/Contents-armhf
- 79ef92985af39c7db3b8684787e2ecce 24360 main/Contents-armhf.diff/Index
- 4055c5caaef6ba71c3ddb958f1501869 3775056 main/Contents-armhf.gz
- b8f098a94e2ec40c5c671f2a0d88236b 57405299 main/Contents-i386
- 33b0c567855f9d0959f41f64027cfbc1 25070 main/Contents-i386.diff/Index
- 59733d3bbf4db625c3d289ddb9cc6c91 3936378 main/Contents-i386.gz
- e9c389315070ba909867915531e77866 58007915 main/Contents-ia64
- f807a4e0968528b1e0bf2a4f336bdb7b 18293 main/Contents-ia64.diff/Index
- 5357ca7f7ae4adde4add4bf93378822d 3901535 main/Contents-ia64.gz
- 3e472e155c7967a5e76e94965a467a27 50310305 main/Contents-kfreebsd-amd64
- 17c5d44b0d5ca586e49eca0057f07421 17583 main/Contents-kfreebsd-amd64.diff/Index
- 60daee82820b3e910dd99797cac63c72 3450398 main/Contents-kfreebsd-amd64.gz
- c399d1a48cda8265a1147ea1fcd15471 50378896 main/Contents-kfreebsd-i386
- 1cc949dbffb70dbee00063d1380dfbea 17583 main/Contents-kfreebsd-i386.diff/Index
- fe40b2802ab0b38c761ff856944b3f1d 3459123 main/Contents-kfreebsd-i386.gz
- ac3fdc4c8d5b218f8bc1ef07bb0bc9f5 55948774 main/Contents-mips
- 4c118fea67706610dac0cb0b86bb6e13 20068 main/Contents-mips.diff/Index
- 443a7588f0586fc498fc684f52fe6bc0 3801345 main/Contents-mips.gz
- 5a4465f3f1e8c6a3b7f9f62d67e3eaaf 56551959 main/Contents-mipsel
- b38bd4b16504ece2a3e0496e1f39cbb0 19065 main/Contents-mipsel.diff/Index
- b4ef28b4eb8465f5f15ed9a6b4b37483 3833328 main/Contents-mipsel.gz
- 11107038b5e2bc0b292bd7f09eead60d 55924659 main/Contents-powerpc
- 4b956c415cc5f1b9de8b695c4d402959 18710 main/Contents-powerpc.diff/Index
- 207d459dcf2308c2ab5ceb14e08083a5 3821616 main/Contents-powerpc.gz
- 0ad28325f17975281948d823fddcf252 52562968 main/Contents-s390
- 235de07f48da4ec5179bee0358fa4cdc 17228 main/Contents-s390.diff/Index
- 78dba09265860b31787e73e68a313a0c 3617572 main/Contents-s390.gz
- e229d217353665790a3092ea98cd308c 53483632 main/Contents-s390x
- 566c5169c727b0fd9f6ffb46bc6d1982 17722 main/Contents-s390x.diff/Index
- 35402c3ff36ce214f552086814715b83 3697504 main/Contents-s390x.gz
- 3df6440ebae51e19146e11d3393b0fef 54200433 main/Contents-source
- 4cba1a9f9d10fb989448283ec1703577 17052 main/Contents-source.diff/Index
- a1a061f394839ad12a265e3d6ceda7e0 5742422 main/Contents-source.gz
- c33f3ee46ffcd1ca327b3d9b1b67882f 54439714 main/Contents-sparc
- 81aeaaaffa87b3f55ce275f1dd0a104f 18710 main/Contents-sparc.diff/Index
- 27e302fe6e2382575b2362b5dfae6183 3732736 main/Contents-sparc.gz
- c80baf801312f7ac23e3fc997b4d343f 97265 main/Contents-udeb-amd64
- 4cb7afe7e52ca6452f3a1763ddb37490 6729 main/Contents-udeb-amd64.gz
- d32ae1214fea4175916f25bed0a88f68 82315 main/Contents-udeb-armel
- defb39d8262e55f00c473a5d176309d6 4995 main/Contents-udeb-armel.gz
- ca6ca65da4fa12cb3e33403ce6f62055 84492 main/Contents-udeb-armhf
- 5966c80964e07c990ac5e03f5b3c5c52 5965 main/Contents-udeb-armhf.gz
- 35c09d0cbd2c8360c9cbeb3eaee690d4 206559 main/Contents-udeb-i386
- a6994c6f4c40132b962d058529545f88 13256 main/Contents-udeb-i386.gz
- 351ff56062da41558e245210453cf43a 201741 main/Contents-udeb-ia64
- 22c8608236aee22cd5aa517e4f2c7e8a 12924 main/Contents-udeb-ia64.gz
- f820368898781dffb60ea2672ff38571 3612 main/Contents-udeb-kfreebsd-amd64
- 659264454ab22fcd0e3f9b890287e07c 433 main/Contents-udeb-kfreebsd-amd64.gz
- 08616a648938715b15fa2b8c7c2a6071 3612 main/Contents-udeb-kfreebsd-i386
- bcf22d0881a5cc81e572d7651910dc0a 428 main/Contents-udeb-kfreebsd-i386.gz
- 39b77d73e322e9ef98cdf3cb8c48af9d 219854 main/Contents-udeb-mips
- 47e9f7539d7c5cb479f6e7adc27c9959 13373 main/Contents-udeb-mips.gz
- e171ff0a5ce1975659fa8e184226323b 347698 main/Contents-udeb-mipsel
- d63fc762bd9c81d74dad4d9b488c8573 20139 main/Contents-udeb-mipsel.gz
- a5d6794d232b5e2d7f7646eff2bb1155 167963 main/Contents-udeb-powerpc
- 34060a5c3db922bd669cec60a3a90b8b 9936 main/Contents-udeb-powerpc.gz
- 9b4b8575459d7739c0794a98fdd41eb4 17745 main/Contents-udeb-s390
- 49072caf5bbd1aafcf40d8c6d9773ba6 1678 main/Contents-udeb-s390.gz
- 2727507c07bb79bde2dbc69d2fe361fe 17655 main/Contents-udeb-s390x
- 653a350f0a58e9cbea15e7ed71843cc0 1666 main/Contents-udeb-s390x.gz
- a770a4bea65ce8c2e0c57aabd909ded9 41956 main/Contents-udeb-sparc
- b786e38ff31ca14f3249737e0582e92c 3108 main/Contents-udeb-sparc.gz
- 7ca1fdf726560c51a45c7528e016bfd1 1752561 main/binary-all/Packages
- 3d130d603acf07bc32357931f91f6252 298614 main/binary-all/Packages.bz2
- ff3fdae05a916ce98e77d9e907e879d7 363124 main/binary-all/Packages.gz
- 0648470b3749580b15a54b99c79efac2 163 main/binary-all/Release
- 24bbca6569fa9c4a5c227c4c251c028f 3101317 main/binary-amd64/Packages
- 87626490df204e31ff4f8b094cec62d2 611011 main/binary-amd64/Packages.bz2
- 16d776ae81133eaec1bf14e0cb392192 27088 main/binary-amd64/Packages.diff/Index
- 1ea9bc78896a4e8b4411fcdadee7be27 776104 main/binary-amd64/Packages.gz
- 1d25d6fa6edb6e6465efc85711b0ed24 165 main/binary-amd64/Release
- cd15e4e8718c1e631641d221b639bd5e 2946046 main/binary-armel/Packages
- 29e0c4642b2c4be7124ccc30139c3589 581488 main/binary-armel/Packages.bz2
- 007c19a2d55c524fed473140dcf86f6b 27796 main/binary-armel/Packages.diff/Index
- e5ddbf6b03aa18c509ca58bb0eded628 738067 main/binary-armel/Packages.gz
- 20a0ba802ec84a346684e905e17ffd67 165 main/binary-armel/Release
- 4249dec69f4e3d4b7b00e2d43418d9b7 2977442 main/binary-armhf/Packages
- 3ffdafb9c3ef2a9d44b81bf0988eb3c3 586282 main/binary-armhf/Packages.bz2
- da0549870ac49583af21e2c9645d14ab 27796 main/binary-armhf/Packages.diff/Index
- 8b558f72e214b99571995bd2cb36bfe3 745128 main/binary-armhf/Packages.gz
- c0715be16e413f97086cb4652fdf1f4b 165 main/binary-armhf/Release
- 1dfab6e9cf6a54d486fb93443dc97829 3097673 main/binary-i386/Packages
- 82857ebc08c071985035d14a462e430b 610952 main/binary-i386/Packages.bz2
- 86357fa1a52bc5cd50061074221abbaf 27796 main/binary-i386/Packages.diff/Index
- f592530b1e85ca47bc68e72de6d7f7e8 775752 main/binary-i386/Packages.gz
- 256efda78dc1ee6ac4684298bdc0bd08 164 main/binary-i386/Release
- c82528433f09ec198b113348e6f0178e 2807416 main/binary-ia64/Packages
- 5b93a989a48d012610419936ea08b3ce 557449 main/binary-ia64/Packages.bz2
- 5cc1a72002e3cf76b7c8b5af1df878ff 18214 main/binary-ia64/Packages.diff/Index
- db75326bbd53c5f23c42c7a1a2b80e25 707233 main/binary-ia64/Packages.gz
- 8bf955a1803254edc8ab50bd4deb69da 164 main/binary-ia64/Release
- 488d8087d7dcfa64f0c3a8ba4dc7fd82 2641182 main/binary-kfreebsd-amd64/Packages
- b963ab5c151c3699c44b7426a4b957c9 517444 main/binary-kfreebsd-amd64/Packages.bz2
- 4768870b596144c89161d8e204128d40 24256 main/binary-kfreebsd-amd64/Packages.diff/Index
- 0e227262acc6a9f6cbdca0faaa8f1816 660341 main/binary-kfreebsd-amd64/Packages.gz
- c307c2e353e97c4ba16a073741c6a50f 174 main/binary-kfreebsd-amd64/Release
- 51175703ff6f27e468fc346fbce99a50 2666534 main/binary-kfreebsd-i386/Packages
- f816db1a22f681ce4801d23f02142204 521809 main/binary-kfreebsd-i386/Packages.bz2
- 1e6b4c7f9ec264eec0c3abbed4694c19 24610 main/binary-kfreebsd-i386/Packages.diff/Index
- dc41d1ebee7cc6be47070461c4bea3b4 665460 main/binary-kfreebsd-i386/Packages.gz
- 827398cb5c8ae42b63e765474d148a7c 173 main/binary-kfreebsd-i386/Release
- 673e1aff449fa6bf49cd633b7d94c80f 2907660 main/binary-mips/Packages
- 348d8c62b40cc128c16e22065a35cee4 575633 main/binary-mips/Packages.bz2
- 74d9d22cd7f328071b80c305257343a6 21382 main/binary-mips/Packages.diff/Index
- 600efcb416dbfa35b3e8393af188b3e0 729884 main/binary-mips/Packages.gz
- e4ceb469304796b04b532a08a6a9a106 164 main/binary-mips/Release
- 6f34c6d9bab265eaf804e367314c861b 2942003 main/binary-mipsel/Packages
- cd5e5326e2ba8c9570457992c502a52c 579576 main/binary-mipsel/Packages.bz2
- 0448aab227641230beec73207719b7dd 21010 main/binary-mipsel/Packages.diff/Index
- cc9659fc25a1d39267ae0f7bbd5d6abf 735563 main/binary-mipsel/Packages.gz
- a35812c7a528f08d2f7d4a6ad685d9b4 166 main/binary-mipsel/Release
- b66577e1ae5c5afc86c5211c8b6b5770 3158047 main/binary-powerpc/Packages
- 3976a4834ce6f8bb20c13155cf3eda0e 609147 main/binary-powerpc/Packages.bz2
- ababeea1b89a7367f2c0ff7b7b8464a6 19888 main/binary-powerpc/Packages.diff/Index
- 41818e8cf326f2f85da8fd18be835153 769669 main/binary-powerpc/Packages.gz
- b1abb3bd37811bb0fd2fdb8fd6fd76f8 167 main/binary-powerpc/Release
- f4ffafc3ff575ef63b19081a14122dd7 2921850 main/binary-s390/Packages
- 838a88af3931f66b096b2b3fa685de1d 574234 main/binary-s390/Packages.bz2
- 0b966d561bf1c32bbb7df48315dca7de 19396 main/binary-s390/Packages.diff/Index
- d56a9730247feadc7b8f2daef75432f5 721451 main/binary-s390/Packages.gz
- 802eeb13ab8a90afb7e3e92ed2015e09 164 main/binary-s390/Release
- aef68b5f492a02ff90a579e092d6a797 3092767 main/binary-s390x/Packages
- ac8ce66051576a7752fc0a7cdbdf6cd2 598557 main/binary-s390x/Packages.bz2
- 0948e17d74b2edf5c845ac72900a78f3 19396 main/binary-s390x/Packages.diff/Index
- 54417ee0bf8656cdbba93f0818addd79 754961 main/binary-s390x/Packages.gz
- 0440d3a9164f72eadd90924f4f64cad1 165 main/binary-s390x/Release
- 71baf1455080e05f9fe6beea58d56bd3 2909809 main/binary-sparc/Packages
- 7d2e6096e8436c0c8612255bde334c88 572645 main/binary-sparc/Packages.bz2
- 2e824308bedc54d466867dc388b66e8a 20380 main/binary-sparc/Packages.diff/Index
- 181f467d4f14b7c7b82e5dd4471c8d8c 727797 main/binary-sparc/Packages.gz
- 590f0831be4e901a085c0ef6332d1e96 165 main/binary-sparc/Release
- 567567cb6a803350afe744cb29219553 1201 main/debian-installer/binary-all/Packages
- fb79f10d2d76c0b895357f5270129180 720 main/debian-installer/binary-all/Packages.bz2
- b57af6ddd5a86fdfe93111305e9bfa6f 648 main/debian-installer/binary-all/Packages.gz
- 0648470b3749580b15a54b99c79efac2 163 main/debian-installer/binary-all/Release
- db16c6b4aef3a6b3727caec006b6810b 52673 main/debian-installer/binary-amd64/Packages
- 245c1e5fb33cb0cc15597217de82c087 10640 main/debian-installer/binary-amd64/Packages.bz2
- 2c3dddc5ab9836af3c331c75d59b65f8 12316 main/debian-installer/binary-amd64/Packages.gz
- 1d25d6fa6edb6e6465efc85711b0ed24 165 main/debian-installer/binary-amd64/Release
- 5701bd882591ad1112dfdaccdacd050d 85058 main/debian-installer/binary-armel/Packages
- dc8f461be23a2be6d1ce51f3c151671e 15131 main/debian-installer/binary-armel/Packages.bz2
- 81d56436922b008bf52b50df4ad98697 17272 main/debian-installer/binary-armel/Packages.gz
- 20a0ba802ec84a346684e905e17ffd67 165 main/debian-installer/binary-armel/Release
- 5fad949665e01ed6e7fe2e37902ed0ea 40455 main/debian-installer/binary-armhf/Packages
- 97a83f9466cf2740dae079538b993f75 9030 main/debian-installer/binary-armhf/Packages.bz2
- 9fca0237195ca594b6435b97b9086ee3 10230 main/debian-installer/binary-armhf/Packages.gz
- c0715be16e413f97086cb4652fdf1f4b 165 main/debian-installer/binary-armhf/Release
- f2b9adf1a74d6ae4f7d2b8e9c0778b06 93685 main/debian-installer/binary-i386/Packages
- 8d68dc391c6b0447fa0ebb2e460ad3f8 16533 main/debian-installer/binary-i386/Packages.bz2
- bfa474579328a427a6c4842b6cfd73b0 19236 main/debian-installer/binary-i386/Packages.gz
- 256efda78dc1ee6ac4684298bdc0bd08 164 main/debian-installer/binary-i386/Release
- 5a3f9192f21aa692fd4add1564d353c5 134527 main/debian-installer/binary-ia64/Packages
- 976dc2162b315aca04bea33d7bd17a59 22052 main/debian-installer/binary-ia64/Packages.bz2
- 2f2d59559618f5cf5fac86f0a851e161 25474 main/debian-installer/binary-ia64/Packages.gz
- 8bf955a1803254edc8ab50bd4deb69da 164 main/debian-installer/binary-ia64/Release
- 2ddd4a06721e5c42328806d446d26223 5111 main/debian-installer/binary-kfreebsd-amd64/Packages
- a8ff7889d778221dfd3d8c571a1a30f4 2073 main/debian-installer/binary-kfreebsd-amd64/Packages.bz2
- e0c38db1f36659322b725dc2bb03ca48 1944 main/debian-installer/binary-kfreebsd-amd64/Packages.gz
- c307c2e353e97c4ba16a073741c6a50f 174 main/debian-installer/binary-kfreebsd-amd64/Release
- e886293d08443cbc577a7353f6f330f3 5099 main/debian-installer/binary-kfreebsd-i386/Packages
- f7468f07b15a874f299b74ada766776f 2061 main/debian-installer/binary-kfreebsd-i386/Packages.bz2
- 4dc6ba72486080afcf97624a58440fcc 1942 main/debian-installer/binary-kfreebsd-i386/Packages.gz
- 827398cb5c8ae42b63e765474d148a7c 173 main/debian-installer/binary-kfreebsd-i386/Release
- 31998840b7f7fec45047047a51713cd6 133337 main/debian-installer/binary-mips/Packages
- 9aefed4276afc82ba689688bca87c16f 21486 main/debian-installer/binary-mips/Packages.bz2
- d098c76cabb047587ace7423923460ba 25104 main/debian-installer/binary-mips/Packages.gz
- e4ceb469304796b04b532a08a6a9a106 164 main/debian-installer/binary-mips/Release
- 22da5033a66d97aa14f338df17e28b0c 180613 main/debian-installer/binary-mipsel/Packages
- f093c1d3e4903c42b24c019ddb6b8822 27088 main/debian-installer/binary-mipsel/Packages.bz2
- 67502c5031dc607d9598da5e3f27f5ba 32425 main/debian-installer/binary-mipsel/Packages.gz
- a35812c7a528f08d2f7d4a6ad685d9b4 166 main/debian-installer/binary-mipsel/Release
- 61e500b72399112fda837db8d22ea351 81646 main/debian-installer/binary-powerpc/Packages
- a105bd2fd9658390e216a4cc90b0f5c1 14561 main/debian-installer/binary-powerpc/Packages.bz2
- 2c1761c0004dc28c73d8981e1fcd427c 16569 main/debian-installer/binary-powerpc/Packages.gz
- b1abb3bd37811bb0fd2fdb8fd6fd76f8 167 main/debian-installer/binary-powerpc/Release
- ed7d1fcd4fe92f36f49e879b664d1b50 23156 main/debian-installer/binary-s390/Packages
- db2f4c5e3ac586b83b7de3e31199105f 6029 main/debian-installer/binary-s390/Packages.bz2
- e5b93dc1906cde592a498a596fec7f68 6480 main/debian-installer/binary-s390/Packages.gz
- 802eeb13ab8a90afb7e3e92ed2015e09 164 main/debian-installer/binary-s390/Release
- 22020f13358dda276d84eae5ccece986 22632 main/debian-installer/binary-s390x/Packages
- 0aadc1ab1732436cb5b9ed4b8e570c3d 5845 main/debian-installer/binary-s390x/Packages.bz2
- df8cee6809241ecfce2d00f3f861c038 6312 main/debian-installer/binary-s390x/Packages.gz
- 0440d3a9164f72eadd90924f4f64cad1 165 main/debian-installer/binary-s390x/Release
- dd8ed91a5490e609ed33d67ebb931a80 33653 main/debian-installer/binary-sparc/Packages
- 04c7d0804e33354bcb014cfb5b1ebc15 7535 main/debian-installer/binary-sparc/Packages.bz2
- d6b0ad8ae13ea294209f403f6a6d5e67 8369 main/debian-installer/binary-sparc/Packages.gz
- 590f0831be4e901a085c0ef6332d1e96 165 main/debian-installer/binary-sparc/Release
- c6a58456bcb1193c52837a6efbeb4a35 2215515 main/i18n/Translation-en
- 7bf0c494f82a92ddccda216d828b3f06 379130 main/i18n/Translation-en.bz2
- fa6390a5aadeeec810a461f0005dca34 10360 main/i18n/Translation-en.diff/Index
- 231ea9fe8283afe71a5d631808d594a1 166 main/source/Release
- 767a3c512c25dfc77b2739ae07bd1cad 2698141 main/source/Sources
- f782069d0e7e84b9ae70f00af757b9bd 459978 main/source/Sources.bz2
- 48edd6b5194a68794ffe29f630ba6d16 27796 main/source/Sources.diff/Index
- 9d1b11eb546b38401daae8419dabfffa 594683 main/source/Sources.gz
- 1c1637cd6de2f0741473288863feeadc 980964 non-free/Contents-amd64
- 1cb9e5a2fd231ac870ef6af71ce51a36 4948 non-free/Contents-amd64.diff/Index
- 43a0c073fb132b52dda6b448d852787e 59410 non-free/Contents-amd64.gz
- 4b562a063521bcf8ec001e649b1402b1 489792 non-free/Contents-armel
- 3bf6227a4d7157f64d4691acfb2b5d65 736 non-free/Contents-armel.diff/Index
- 022e49114e4faac64baffde3c12b58d2 27750 non-free/Contents-armel.gz
- 4b562a063521bcf8ec001e649b1402b1 489792 non-free/Contents-armhf
- b3e57dde8edb3c5f25d066cac229d8a9 736 non-free/Contents-armhf.diff/Index
- 022e49114e4faac64baffde3c12b58d2 27750 non-free/Contents-armhf.gz
- cc7f8337d582fd46f5a9349fbd302abd 991147 non-free/Contents-i386
- ce633bde0d0628611287e98ac6f4e75c 4948 non-free/Contents-i386.diff/Index
- 09cc63c7ae3278432a722df985a22989 59944 non-free/Contents-i386.gz
- 4b562a063521bcf8ec001e649b1402b1 489792 non-free/Contents-ia64
- 54abdac8488b349bc0f1e4b917acf3f6 736 non-free/Contents-ia64.diff/Index
- 022e49114e4faac64baffde3c12b58d2 27750 non-free/Contents-ia64.gz
- 4b562a063521bcf8ec001e649b1402b1 489792 non-free/Contents-kfreebsd-amd64
- 3ed577fe2af24f5e0d51bcee6c63c9f7 736 non-free/Contents-kfreebsd-amd64.diff/Index
- 022e49114e4faac64baffde3c12b58d2 27750 non-free/Contents-kfreebsd-amd64.gz
- 4b562a063521bcf8ec001e649b1402b1 489792 non-free/Contents-kfreebsd-i386
- 5ab5348fcb1d362c6a6a8a23a70794a9 736 non-free/Contents-kfreebsd-i386.diff/Index
- 022e49114e4faac64baffde3c12b58d2 27750 non-free/Contents-kfreebsd-i386.gz
- 4b562a063521bcf8ec001e649b1402b1 489792 non-free/Contents-mips
- 74e1406428909f94652eb9bf307649ae 736 non-free/Contents-mips.diff/Index
- 022e49114e4faac64baffde3c12b58d2 27750 non-free/Contents-mips.gz
- 4b562a063521bcf8ec001e649b1402b1 489792 non-free/Contents-mipsel
- 16a6293d5aaa2609ec082dc26b9d4009 736 non-free/Contents-mipsel.diff/Index
- 022e49114e4faac64baffde3c12b58d2 27750 non-free/Contents-mipsel.gz
- 4b562a063521bcf8ec001e649b1402b1 489792 non-free/Contents-powerpc
- b7e11d6e76f7f52ccf6d361dddd292f9 736 non-free/Contents-powerpc.diff/Index
- 022e49114e4faac64baffde3c12b58d2 27750 non-free/Contents-powerpc.gz
- 4b562a063521bcf8ec001e649b1402b1 489792 non-free/Contents-s390
- 4fa4b270afdd4f67c698686cc39b16b6 736 non-free/Contents-s390.diff/Index
- 022e49114e4faac64baffde3c12b58d2 27750 non-free/Contents-s390.gz
- 4b562a063521bcf8ec001e649b1402b1 489792 non-free/Contents-s390x
- af6921da00841f9c927b6723e6fc5982 736 non-free/Contents-s390x.diff/Index
- 022e49114e4faac64baffde3c12b58d2 27750 non-free/Contents-s390x.gz
- 34bbbfbb60b933774466cdf5b836ec75 310077 non-free/Contents-source
- 2cafeaa3b68b2f7d8e0dde7ff0c2ac3b 4188 non-free/Contents-source.diff/Index
- a1b049b25abda43a80db9d2d5b58a8a1 30075 non-free/Contents-source.gz
- 4b562a063521bcf8ec001e649b1402b1 489792 non-free/Contents-sparc
- 0e285596e58b5871996001c592c52046 736 non-free/Contents-sparc.diff/Index
- 022e49114e4faac64baffde3c12b58d2 27750 non-free/Contents-sparc.gz
- d41d8cd98f00b204e9800998ecf8427e 0 non-free/Contents-udeb-amd64
- 4a4dd3598707603b3f76a2378a4504aa 20 non-free/Contents-udeb-amd64.gz
- d41d8cd98f00b204e9800998ecf8427e 0 non-free/Contents-udeb-armel
- 4a4dd3598707603b3f76a2378a4504aa 20 non-free/Contents-udeb-armel.gz
- d41d8cd98f00b204e9800998ecf8427e 0 non-free/Contents-udeb-armhf
- 4a4dd3598707603b3f76a2378a4504aa 20 non-free/Contents-udeb-armhf.gz
- d41d8cd98f00b204e9800998ecf8427e 0 non-free/Contents-udeb-i386
- 4a4dd3598707603b3f76a2378a4504aa 20 non-free/Contents-udeb-i386.gz
- d41d8cd98f00b204e9800998ecf8427e 0 non-free/Contents-udeb-ia64
- 4a4dd3598707603b3f76a2378a4504aa 20 non-free/Contents-udeb-ia64.gz
- d41d8cd98f00b204e9800998ecf8427e 0 non-free/Contents-udeb-kfreebsd-amd64
- 4a4dd3598707603b3f76a2378a4504aa 20 non-free/Contents-udeb-kfreebsd-amd64.gz
- d41d8cd98f00b204e9800998ecf8427e 0 non-free/Contents-udeb-kfreebsd-i386
- 4a4dd3598707603b3f76a2378a4504aa 20 non-free/Contents-udeb-kfreebsd-i386.gz
- d41d8cd98f00b204e9800998ecf8427e 0 non-free/Contents-udeb-mips
- 4a4dd3598707603b3f76a2378a4504aa 20 non-free/Contents-udeb-mips.gz
- d41d8cd98f00b204e9800998ecf8427e 0 non-free/Contents-udeb-mipsel
- 4a4dd3598707603b3f76a2378a4504aa 20 non-free/Contents-udeb-mipsel.gz
- d41d8cd98f00b204e9800998ecf8427e 0 non-free/Contents-udeb-powerpc
- 4a4dd3598707603b3f76a2378a4504aa 20 non-free/Contents-udeb-powerpc.gz
- d41d8cd98f00b204e9800998ecf8427e 0 non-free/Contents-udeb-s390
- 4a4dd3598707603b3f76a2378a4504aa 20 non-free/Contents-udeb-s390.gz
- d41d8cd98f00b204e9800998ecf8427e 0 non-free/Contents-udeb-s390x
- 4a4dd3598707603b3f76a2378a4504aa 20 non-free/Contents-udeb-s390x.gz
- d41d8cd98f00b204e9800998ecf8427e 0 non-free/Contents-udeb-sparc
- 4a4dd3598707603b3f76a2378a4504aa 20 non-free/Contents-udeb-sparc.gz
- 8eb9ba9862dde2537fb0018ed61ddbeb 20438 non-free/binary-all/Packages
- be622b92c1a0dea9ea8ba70854b02804 5570 non-free/binary-all/Packages.bz2
- 562351c676a9077d80bcfb38a1ddc4f5 5805 non-free/binary-all/Packages.gz
- 8a053a952d0cf77ea952db25ac7ccba4 167 non-free/binary-all/Release
- dd95c9ca41e9595bdf8c8ad76e8a0ef3 115902 non-free/binary-amd64/Packages
- 3e56b00749f7747a25a798ecee3af5b7 21633 non-free/binary-amd64/Packages.bz2
- 160af7517babc555f7e500c60a6129fe 4456 non-free/binary-amd64/Packages.diff/Index
- 1ab0dad43dc060877c23bd4dd6450d19 25323 non-free/binary-amd64/Packages.gz
- c61296e8d0af003c52ef9680912c9da6 169 non-free/binary-amd64/Release
- 8eb9ba9862dde2537fb0018ed61ddbeb 20438 non-free/binary-armel/Packages
- be622b92c1a0dea9ea8ba70854b02804 5570 non-free/binary-armel/Packages.bz2
- 562351c676a9077d80bcfb38a1ddc4f5 5805 non-free/binary-armel/Packages.gz
- fe6d4e9f72edbde044d5001a1bb3adb2 169 non-free/binary-armel/Release
- 8eb9ba9862dde2537fb0018ed61ddbeb 20438 non-free/binary-armhf/Packages
- be622b92c1a0dea9ea8ba70854b02804 5570 non-free/binary-armhf/Packages.bz2
- 562351c676a9077d80bcfb38a1ddc4f5 5805 non-free/binary-armhf/Packages.gz
- 4d0c6feeab7eb8a414cff2d0bdbb511d 169 non-free/binary-armhf/Release
- 1cc37632bfa4049cbc2bb3048b7ca01f 123415 non-free/binary-i386/Packages
- 53161d2efe5bef07e2f161ef078961c4 22755 non-free/binary-i386/Packages.bz2
- e44d5142c8833f9bbe59ea3a34a68140 4456 non-free/binary-i386/Packages.diff/Index
- 527d6ec0554d20069949ba5beb2d746d 26726 non-free/binary-i386/Packages.gz
- 796ee8e87ab70a4e6011a71d86882bbd 168 non-free/binary-i386/Release
- 8eb9ba9862dde2537fb0018ed61ddbeb 20438 non-free/binary-ia64/Packages
- be622b92c1a0dea9ea8ba70854b02804 5570 non-free/binary-ia64/Packages.bz2
- 562351c676a9077d80bcfb38a1ddc4f5 5805 non-free/binary-ia64/Packages.gz
- 9f62666ae15132e08591ffd2c4ee9aa3 168 non-free/binary-ia64/Release
- 8eb9ba9862dde2537fb0018ed61ddbeb 20438 non-free/binary-kfreebsd-amd64/Packages
- be622b92c1a0dea9ea8ba70854b02804 5570 non-free/binary-kfreebsd-amd64/Packages.bz2
- 562351c676a9077d80bcfb38a1ddc4f5 5805 non-free/binary-kfreebsd-amd64/Packages.gz
- 31d49354b5c24e5d06b038c08098f9d2 178 non-free/binary-kfreebsd-amd64/Release
- 8eb9ba9862dde2537fb0018ed61ddbeb 20438 non-free/binary-kfreebsd-i386/Packages
- be622b92c1a0dea9ea8ba70854b02804 5570 non-free/binary-kfreebsd-i386/Packages.bz2
- 562351c676a9077d80bcfb38a1ddc4f5 5805 non-free/binary-kfreebsd-i386/Packages.gz
- 2dc5e7adb20a129fdfb2a4e9b5117fd0 177 non-free/binary-kfreebsd-i386/Release
- 8eb9ba9862dde2537fb0018ed61ddbeb 20438 non-free/binary-mips/Packages
- be622b92c1a0dea9ea8ba70854b02804 5570 non-free/binary-mips/Packages.bz2
- 562351c676a9077d80bcfb38a1ddc4f5 5805 non-free/binary-mips/Packages.gz
- 76895aaaf47189eb842696e1df859788 168 non-free/binary-mips/Release
- 8eb9ba9862dde2537fb0018ed61ddbeb 20438 non-free/binary-mipsel/Packages
- be622b92c1a0dea9ea8ba70854b02804 5570 non-free/binary-mipsel/Packages.bz2
- 562351c676a9077d80bcfb38a1ddc4f5 5805 non-free/binary-mipsel/Packages.gz
- e9c22c78683f205aba569eaf765d9a61 170 non-free/binary-mipsel/Release
- 8eb9ba9862dde2537fb0018ed61ddbeb 20438 non-free/binary-powerpc/Packages
- be622b92c1a0dea9ea8ba70854b02804 5570 non-free/binary-powerpc/Packages.bz2
- 562351c676a9077d80bcfb38a1ddc4f5 5805 non-free/binary-powerpc/Packages.gz
- 3ccfaf3f206f185319481a05aeb66dfd 171 non-free/binary-powerpc/Release
- 8eb9ba9862dde2537fb0018ed61ddbeb 20438 non-free/binary-s390/Packages
- be622b92c1a0dea9ea8ba70854b02804 5570 non-free/binary-s390/Packages.bz2
- 562351c676a9077d80bcfb38a1ddc4f5 5805 non-free/binary-s390/Packages.gz
- d9f6ba9e051b36f235a4b338de5ce6bf 168 non-free/binary-s390/Release
- 8eb9ba9862dde2537fb0018ed61ddbeb 20438 non-free/binary-s390x/Packages
- be622b92c1a0dea9ea8ba70854b02804 5570 non-free/binary-s390x/Packages.bz2
- 562351c676a9077d80bcfb38a1ddc4f5 5805 non-free/binary-s390x/Packages.gz
- 285e0659a707afb5d95b1205ce40c8c6 169 non-free/binary-s390x/Release
- 8eb9ba9862dde2537fb0018ed61ddbeb 20438 non-free/binary-sparc/Packages
- be622b92c1a0dea9ea8ba70854b02804 5570 non-free/binary-sparc/Packages.bz2
- 562351c676a9077d80bcfb38a1ddc4f5 5805 non-free/binary-sparc/Packages.gz
- 8f60e8f7687fb0ca009a517dacbf2b90 169 non-free/binary-sparc/Release
- d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-all/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 non-free/debian-installer/binary-all/Packages.bz2
- 4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-all/Packages.gz
- 8a053a952d0cf77ea952db25ac7ccba4 167 non-free/debian-installer/binary-all/Release
- d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-amd64/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 non-free/debian-installer/binary-amd64/Packages.bz2
- 4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-amd64/Packages.gz
- c61296e8d0af003c52ef9680912c9da6 169 non-free/debian-installer/binary-amd64/Release
- d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-armel/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 non-free/debian-installer/binary-armel/Packages.bz2
- 4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-armel/Packages.gz
- fe6d4e9f72edbde044d5001a1bb3adb2 169 non-free/debian-installer/binary-armel/Release
- d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-armhf/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 non-free/debian-installer/binary-armhf/Packages.bz2
- 4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-armhf/Packages.gz
- 4d0c6feeab7eb8a414cff2d0bdbb511d 169 non-free/debian-installer/binary-armhf/Release
- d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-i386/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 non-free/debian-installer/binary-i386/Packages.bz2
- 4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-i386/Packages.gz
- 796ee8e87ab70a4e6011a71d86882bbd 168 non-free/debian-installer/binary-i386/Release
- d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-ia64/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 non-free/debian-installer/binary-ia64/Packages.bz2
- 4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-ia64/Packages.gz
- 9f62666ae15132e08591ffd2c4ee9aa3 168 non-free/debian-installer/binary-ia64/Release
- d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-kfreebsd-amd64/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 non-free/debian-installer/binary-kfreebsd-amd64/Packages.bz2
- 4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-kfreebsd-amd64/Packages.gz
- 31d49354b5c24e5d06b038c08098f9d2 178 non-free/debian-installer/binary-kfreebsd-amd64/Release
- d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-kfreebsd-i386/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 non-free/debian-installer/binary-kfreebsd-i386/Packages.bz2
- 4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-kfreebsd-i386/Packages.gz
- 2dc5e7adb20a129fdfb2a4e9b5117fd0 177 non-free/debian-installer/binary-kfreebsd-i386/Release
- d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-mips/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 non-free/debian-installer/binary-mips/Packages.bz2
- 4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-mips/Packages.gz
- 76895aaaf47189eb842696e1df859788 168 non-free/debian-installer/binary-mips/Release
- d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-mipsel/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 non-free/debian-installer/binary-mipsel/Packages.bz2
- 4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-mipsel/Packages.gz
- e9c22c78683f205aba569eaf765d9a61 170 non-free/debian-installer/binary-mipsel/Release
- d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-powerpc/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 non-free/debian-installer/binary-powerpc/Packages.bz2
- 4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-powerpc/Packages.gz
- 3ccfaf3f206f185319481a05aeb66dfd 171 non-free/debian-installer/binary-powerpc/Release
- d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-s390/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 non-free/debian-installer/binary-s390/Packages.bz2
- 4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-s390/Packages.gz
- d9f6ba9e051b36f235a4b338de5ce6bf 168 non-free/debian-installer/binary-s390/Release
- d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-s390x/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 non-free/debian-installer/binary-s390x/Packages.bz2
- 4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-s390x/Packages.gz
- 285e0659a707afb5d95b1205ce40c8c6 169 non-free/debian-installer/binary-s390x/Release
- d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-sparc/Packages
- 4059d198768f9f8dc9372dc1c54bc3c3 14 non-free/debian-installer/binary-sparc/Packages.bz2
- 4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-sparc/Packages.gz
- 8f60e8f7687fb0ca009a517dacbf2b90 169 non-free/debian-installer/binary-sparc/Release
- 8a6daafc8470f7a679e0607d878e6b34 131565 non-free/i18n/Translation-en
- 604c67946e2fe854d8e5e80ddfb9a791 21737 non-free/i18n/Translation-en.bz2
- bac2b3442c4b633604314768450aea28 2980 non-free/i18n/Translation-en.diff/Index
- 6e1aef469883722192c7b9c6322f8b51 170 non-free/source/Release
- fbe537860a4e5135424622003a7c147c 43755 non-free/source/Sources
- 1bf945c550193f648fcc1e5f6da3ba3e 10083 non-free/source/Sources.bz2
- 1241272f7a5fb0d87dc7a4da0c5f3622 4456 non-free/source/Sources.diff/Index
- f7bcbda670aea9312fd417887babd5f8 10609 non-free/source/Sources.gz
-SHA1:
- c82b0a105ed1498a11bed3a6d8e4ef6436aecd9d 118763 contrib/Contents-amd64
- baac486584498bc49fb2c4e161c099a5db643245 2704 contrib/Contents-amd64.diff/Index
- e1401905cb967c8d8430baac88f64c012e037fa7 10211 contrib/Contents-amd64.gz
- 78008205377e9a2e5ca54ffb65cb48b190bc5400 72100 contrib/Contents-armel
- b57dc27d89c7ee6109bea6abe4724c2ea2ea26a5 1720 contrib/Contents-armel.diff/Index
- 67b1798fca35684f656349628298830e0f025c4b 5965 contrib/Contents-armel.gz
- f7168eac68ca85fa791ad5001ce7ed7b724cd7d6 79842 contrib/Contents-armhf
- d9417178b60b6f8f82dc0cca44068564504ca279 1720 contrib/Contents-armhf.diff/Index
- 6ca77b6515ad8c0cc86fea12f98f7279ba0f24b1 6899 contrib/Contents-armhf.gz
- 397a1130e0ab4412f4bb9e3752914a27d02e9674 119085 contrib/Contents-i386
- ec3e686d65e0d9f2f4d0862e25b7d67c8a25a6e2 2704 contrib/Contents-i386.diff/Index
- 5a26d6315eae1c9d266e0bdf3e63ec79b25d00ab 10231 contrib/Contents-i386.gz
- 35dfe17f1cafea71da72af99f020347c2ce630b7 72100 contrib/Contents-ia64
- 29534c158d554d78200d36b1cd9b49431f56e6dd 1720 contrib/Contents-ia64.diff/Index
- 2e0c9797c7bb79467ad1bd558fdf11c386234e20 5937 contrib/Contents-ia64.gz
- 63486c8b7ed4c35477d725f997be870aea980895 72100 contrib/Contents-kfreebsd-amd64
- 90aab598e4455df4b0de940bc0409c5a947a281d 1720 contrib/Contents-kfreebsd-amd64.diff/Index
- b75c2ae647e90b4292e2ae927a10d230969c7766 5938 contrib/Contents-kfreebsd-amd64.gz
- a5167f0726eead369d66733fe79969d85ccf2fef 72100 contrib/Contents-kfreebsd-i386
- 96f0389be210d12f4016fbc9d893fc99bd78d8ae 1720 contrib/Contents-kfreebsd-i386.diff/Index
- 88e14a2c2b8749ede73a532a0075ba1e29470314 5961 contrib/Contents-kfreebsd-i386.gz
- 254c167cfba5486e24bc54d952694b96e96eebe4 72100 contrib/Contents-mips
- 38e9da737e0f8c8abf2742fc88200f369d3e7032 1720 contrib/Contents-mips.diff/Index
- 2660e0046b4384f8486da71acf45c872ee3dd05f 5938 contrib/Contents-mips.gz
- e1b77ce053e66d5fbeb55da718e50a0189c291ed 72100 contrib/Contents-mipsel
- 32f4b9004831815d4fa553be35c743e70053223a 1720 contrib/Contents-mipsel.diff/Index
- 9b1beda1c8614a3bba26f798fb73e63bcb457e76 5936 contrib/Contents-mipsel.gz
- 978345291903fd650c11089e6a9b4c66fbf0bf01 72100 contrib/Contents-powerpc
- e24a7cd148bb85018c385db23e2366119c52ff67 1720 contrib/Contents-powerpc.diff/Index
- 9c0f5a4c6fa9468bedd6498ec8c592390940da03 5938 contrib/Contents-powerpc.gz
- 263030552c6ef07844165a921ea1ef86957b4a6e 72100 contrib/Contents-s390
- 1257a8910333b008239bf8c2828b2fbe95949745 1720 contrib/Contents-s390.diff/Index
- a02c6400fa92b328fcd4dd320996233f012fbe0c 5940 contrib/Contents-s390.gz
- 904c6cb79b27d3e5d0798a044030aa7996442b65 72100 contrib/Contents-s390x
- a00056988de29417a0666cb0643b116b54fa7af7 1720 contrib/Contents-s390x.diff/Index
- e648259daf8df9097d0cb26e4ddbe6f2e0275660 5932 contrib/Contents-s390x.gz
- e228182c317c119aef3b2c1ccf9ba65de1ccb9c5 1174098 contrib/Contents-source
- 3067368e7fab638d88072b0370fe164a5a598528 3204 contrib/Contents-source.diff/Index
- f8cfdf1772d58a72cadb4d16fd52af16556c23bc 102051 contrib/Contents-source.gz
- 80affaf053fc6ca4eede5d55ef98ff2a912a3976 72100 contrib/Contents-sparc
- d3ebbb57ab87a0e474a8d1110af9ad5d44097097 1720 contrib/Contents-sparc.diff/Index
- 995554e2eb97b0f25fa9bc45007a0aeee7eb7189 5940 contrib/Contents-sparc.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/Contents-udeb-amd64
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/Contents-udeb-amd64.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/Contents-udeb-armel
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/Contents-udeb-armel.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/Contents-udeb-armhf
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/Contents-udeb-armhf.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/Contents-udeb-i386
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/Contents-udeb-i386.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/Contents-udeb-ia64
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/Contents-udeb-ia64.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/Contents-udeb-kfreebsd-amd64
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/Contents-udeb-kfreebsd-amd64.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/Contents-udeb-kfreebsd-i386
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/Contents-udeb-kfreebsd-i386.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/Contents-udeb-mips
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/Contents-udeb-mips.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/Contents-udeb-mipsel
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/Contents-udeb-mipsel.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/Contents-udeb-powerpc
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/Contents-udeb-powerpc.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/Contents-udeb-s390
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/Contents-udeb-s390.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/Contents-udeb-s390x
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/Contents-udeb-s390x.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/Contents-udeb-sparc
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/Contents-udeb-sparc.gz
- 2afb0d88d05ac2b0684427f732aa4df1dc7b2bde 5197 contrib/binary-all/Packages
- a4aeff6b1da65a84a945a8de87a3f34b9d953897 2004 contrib/binary-all/Packages.bz2
- 0549e717d35e4896c5785f148bcd2960aa08b7b2 1824 contrib/binary-all/Packages.gz
- 687df862bbf0740ba8a7307a46b4208d739d74cb 166 contrib/binary-all/Release
- 86560001fe3baa529560ee74770fc3814976286f 34074 contrib/binary-amd64/Packages
- 7b07c5d6c1bba4110ce17f2f596181f61c8ad599 8725 contrib/binary-amd64/Packages.bz2
- d0c99f44856bc36cdfb0923934efde183b1c54e9 2212 contrib/binary-amd64/Packages.diff/Index
- 707c2f90e2abb139c2c634f6d0b57412e2b05754 9229 contrib/binary-amd64/Packages.gz
- 3f2a9219a5b84f15276eb809fba3a915a41382fe 168 contrib/binary-amd64/Release
- e063a9595d33874002aa09af0998a7ba127dd337 9111 contrib/binary-armel/Packages
- caad09418a3d544be034fcf41d0106520a0de25a 3160 contrib/binary-armel/Packages.bz2
- 1f445c98d0840fbf85fbc01e86ad64e4c49be9f0 2212 contrib/binary-armel/Packages.diff/Index
- 7046e1a3aa4e9e503815c62caf65564b5684c778 3027 contrib/binary-armel/Packages.gz
- 36845a0bf2dfd28fef4a6376b9f50399ad418d92 168 contrib/binary-armel/Release
- 1b61e891e4d1ba68ff324ca2b45f60161e5b0b6b 19971 contrib/binary-armhf/Packages
- 671cd95a53c010852c3b3f46a1bb2faa7affd5bc 5661 contrib/binary-armhf/Packages.bz2
- 0b06636e10e93b74685864a5f6c81b6e33d11c55 2212 contrib/binary-armhf/Packages.diff/Index
- db1aaed2b6c8a91a1f88d1bdc8251601b3a3e6b6 5755 contrib/binary-armhf/Packages.gz
- 170cd54797a72c149157433a5d0429eeaafd9cc0 168 contrib/binary-armhf/Release
- 649b63d89c89afe11acd6f5ba19c4cad0aa42cc9 34024 contrib/binary-i386/Packages
- 5870505b74652b7c2703aa9bda0c1bf8abd4b7af 8744 contrib/binary-i386/Packages.bz2
- 11c14c0f7eed83d2481ba3fc8139c0711babfc0d 2212 contrib/binary-i386/Packages.diff/Index
- e4cafbc903966b66361417dd95a9b992da73cdae 9375 contrib/binary-i386/Packages.gz
- aabb18e230f83f4de2953001f2ded1036829c5ae 167 contrib/binary-i386/Release
- 583851d1337f7eaeef4f698f336cf0a55b24b8e9 9149 contrib/binary-ia64/Packages
- 62a7e6ba4990b9064deb35852aa24df7e5f06a7e 3188 contrib/binary-ia64/Packages.bz2
- 31dbd8ae3b83c293bbd182fee9170bb2b0c4d301 2212 contrib/binary-ia64/Packages.diff/Index
- a40e2868f9dde1a8c3cada4684cb6151e9809857 3029 contrib/binary-ia64/Packages.gz
- d22f6b0a7c0ebc1cb530e23746864dcc4e48d880 167 contrib/binary-ia64/Release
- 6da1701885af80597242e4af60ba40af8442dfcc 9208 contrib/binary-kfreebsd-amd64/Packages
- 9fb59baee9091d42b9c07f1f11ad7fc764ce1f2e 3171 contrib/binary-kfreebsd-amd64/Packages.bz2
- 5cdb24477fb0049791894a71628af40aa65d5566 2212 contrib/binary-kfreebsd-amd64/Packages.diff/Index
- 56e7dc8c39c80c7621b4bd77511f974bb3c324ae 3031 contrib/binary-kfreebsd-amd64/Packages.gz
- 56ad2c48ad4d796c7c0562879a704a2d8282d5ba 177 contrib/binary-kfreebsd-amd64/Release
- 92f154477520c89506f0f7577cdfbaebe41c6e29 9198 contrib/binary-kfreebsd-i386/Packages
- 7781f02437820ebd8342aa25eabc98d1115a484f 3183 contrib/binary-kfreebsd-i386/Packages.bz2
- 971ad540135e191a0a19e5c47672951ff14de822 2212 contrib/binary-kfreebsd-i386/Packages.diff/Index
- 477aca5dc3f1a864631f3b1c56fe04fe0a07609c 3034 contrib/binary-kfreebsd-i386/Packages.gz
- ce2651b2c09ca5bc4e7c5394b48ae41a72b3999c 176 contrib/binary-kfreebsd-i386/Release
- ef9b436774a2e4d17bbeac107a9c2fd20bcf70bf 9105 contrib/binary-mips/Packages
- 47f135ab88ceef2cf863ece353b7d8f80508b4f3 3157 contrib/binary-mips/Packages.bz2
- 308c430a35b2328786fed397c7e58dcc175571a3 2212 contrib/binary-mips/Packages.diff/Index
- 78c7de22ae27df50b5f64d85cabb561caf2ad86e 3016 contrib/binary-mips/Packages.gz
- a44771dbabd944c91bc6076a9818eddcc4cbe7fb 167 contrib/binary-mips/Release
- 1e64d011f922da090bd5a879882cadd68636269e 9125 contrib/binary-mipsel/Packages
- e7f8b44f47029a10821c4e25370beebd229145db 3167 contrib/binary-mipsel/Packages.bz2
- 9f3ed8412857c79e3850d34a5773064a72930344 2212 contrib/binary-mipsel/Packages.diff/Index
- 2f9ff82fe0f943cf7254cb7f9d95e15fab777c5b 3016 contrib/binary-mipsel/Packages.gz
- e3b66918f5ccffe8d5c423f5a80e7a603e1c3465 169 contrib/binary-mipsel/Release
- da663948618824cad53a68e82f529abc2de05f33 9132 contrib/binary-powerpc/Packages
- 6db0ee6985a968f976f374527aafd4efc698302d 3169 contrib/binary-powerpc/Packages.bz2
- bd04b46e5cd04cee6c79edf8b41d18f427cd1a67 2212 contrib/binary-powerpc/Packages.diff/Index
- a75e9a113a8d645880c555ef1624c1acc6b62b88 3019 contrib/binary-powerpc/Packages.gz
- 0520f668e7aae12a6b5a3bb32b31c103fa30cd90 170 contrib/binary-powerpc/Release
- d7b45a94967ec9ca5f1afcec5d579f1f4d22ac7b 9102 contrib/binary-s390/Packages
- 99870ee019954ce43fbf3eaa9c670812a14b2db7 3162 contrib/binary-s390/Packages.bz2
- 7aebb4ee1c72463718477de42f26907766233564 2212 contrib/binary-s390/Packages.diff/Index
- dcd248c54a626fe042cf6f54c5c5d9fac1465943 3023 contrib/binary-s390/Packages.gz
- 9758c00a74bdfb4e98c1f2d5a73e1b972d25c73c 167 contrib/binary-s390/Release
- ed2b6ceec796a4788e5df24137e120fd7d412483 9116 contrib/binary-s390x/Packages
- 986ea44bf1b069c51164b0525a51f4b20c867f82 3168 contrib/binary-s390x/Packages.bz2
- 71b778c299b999d6d695abbd28e19e613ef50596 2212 contrib/binary-s390x/Packages.diff/Index
- 76e356425d34d1729ef833cc15e523c1615ec8d7 3013 contrib/binary-s390x/Packages.gz
- 6300a24e57123ae3c449c8f1249d858fc79fa9b5 168 contrib/binary-s390x/Release
- 8775ca90b0b9e0841e19162f89271164d19c4f0d 9112 contrib/binary-sparc/Packages
- a028f618b9ca5b794b09ec35216bfef0e6665102 3149 contrib/binary-sparc/Packages.bz2
- 2bc0a3be89fb5c8b3865b60d28601920ea46b532 2212 contrib/binary-sparc/Packages.diff/Index
- 43bb192c5aca3be98cb1193936aa52897dd746ab 3028 contrib/binary-sparc/Packages.gz
- f5bf33202f20b53bd6df88fbef136e00a78b1452 168 contrib/binary-sparc/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/debian-installer/binary-all/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 contrib/debian-installer/binary-all/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/debian-installer/binary-all/Packages.gz
- 687df862bbf0740ba8a7307a46b4208d739d74cb 166 contrib/debian-installer/binary-all/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/debian-installer/binary-amd64/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 contrib/debian-installer/binary-amd64/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/debian-installer/binary-amd64/Packages.gz
- 3f2a9219a5b84f15276eb809fba3a915a41382fe 168 contrib/debian-installer/binary-amd64/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/debian-installer/binary-armel/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 contrib/debian-installer/binary-armel/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/debian-installer/binary-armel/Packages.gz
- 36845a0bf2dfd28fef4a6376b9f50399ad418d92 168 contrib/debian-installer/binary-armel/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/debian-installer/binary-armhf/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 contrib/debian-installer/binary-armhf/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/debian-installer/binary-armhf/Packages.gz
- 170cd54797a72c149157433a5d0429eeaafd9cc0 168 contrib/debian-installer/binary-armhf/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/debian-installer/binary-i386/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 contrib/debian-installer/binary-i386/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/debian-installer/binary-i386/Packages.gz
- aabb18e230f83f4de2953001f2ded1036829c5ae 167 contrib/debian-installer/binary-i386/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/debian-installer/binary-ia64/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 contrib/debian-installer/binary-ia64/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/debian-installer/binary-ia64/Packages.gz
- d22f6b0a7c0ebc1cb530e23746864dcc4e48d880 167 contrib/debian-installer/binary-ia64/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/debian-installer/binary-kfreebsd-amd64/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 contrib/debian-installer/binary-kfreebsd-amd64/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/debian-installer/binary-kfreebsd-amd64/Packages.gz
- 56ad2c48ad4d796c7c0562879a704a2d8282d5ba 177 contrib/debian-installer/binary-kfreebsd-amd64/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/debian-installer/binary-kfreebsd-i386/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 contrib/debian-installer/binary-kfreebsd-i386/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/debian-installer/binary-kfreebsd-i386/Packages.gz
- ce2651b2c09ca5bc4e7c5394b48ae41a72b3999c 176 contrib/debian-installer/binary-kfreebsd-i386/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/debian-installer/binary-mips/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 contrib/debian-installer/binary-mips/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/debian-installer/binary-mips/Packages.gz
- a44771dbabd944c91bc6076a9818eddcc4cbe7fb 167 contrib/debian-installer/binary-mips/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/debian-installer/binary-mipsel/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 contrib/debian-installer/binary-mipsel/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/debian-installer/binary-mipsel/Packages.gz
- e3b66918f5ccffe8d5c423f5a80e7a603e1c3465 169 contrib/debian-installer/binary-mipsel/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/debian-installer/binary-powerpc/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 contrib/debian-installer/binary-powerpc/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/debian-installer/binary-powerpc/Packages.gz
- 0520f668e7aae12a6b5a3bb32b31c103fa30cd90 170 contrib/debian-installer/binary-powerpc/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/debian-installer/binary-s390/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 contrib/debian-installer/binary-s390/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/debian-installer/binary-s390/Packages.gz
- 9758c00a74bdfb4e98c1f2d5a73e1b972d25c73c 167 contrib/debian-installer/binary-s390/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/debian-installer/binary-s390x/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 contrib/debian-installer/binary-s390x/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/debian-installer/binary-s390x/Packages.gz
- 6300a24e57123ae3c449c8f1249d858fc79fa9b5 168 contrib/debian-installer/binary-s390x/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 contrib/debian-installer/binary-sparc/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 contrib/debian-installer/binary-sparc/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 contrib/debian-installer/binary-sparc/Packages.gz
- f5bf33202f20b53bd6df88fbef136e00a78b1452 168 contrib/debian-installer/binary-sparc/Release
- ab4fc829fdf3e3755fb22d665067945d95ea22eb 21108 contrib/i18n/Translation-en
- 916e8428c705b0e93271037fc8677764fedf4edb 6350 contrib/i18n/Translation-en.bz2
- 405c3683abcb7a96f3e8bf28d9b565f9c89c990f 1228 contrib/i18n/Translation-en.diff/Index
- b4ffbab9a851ac754374bd2f7875218ee2f1a542 169 contrib/source/Release
- 0244c5075d82f5ccd94afbd41f3ab844819f1a25 29845 contrib/source/Sources
- a8c576cec92862054295ad3b3da4892a819cf5fa 7880 contrib/source/Sources.bz2
- 025179800cb3b804c23878fbe7d49c4cc950687f 4180 contrib/source/Sources.diff/Index
- 0ce58b032347503bd6e42a45814430ac13d8c855 8150 contrib/source/Sources.gz
- 4d0f199e28866236b5b7e15d345ead6ace1a9a6c 55983554 main/Contents-amd64
- d6e1dd810e010858b271065f8bab552d71e8ac1f 21550 main/Contents-amd64.diff/Index
- cd627efb29a70af3def81025dc95ae81848f807e 3864160 main/Contents-amd64.gz
- 217d6d5a7adca36a021fc1150f1795a9a2188ed5 55728755 main/Contents-armel
- 387a3b9344899e6291efd9d42863fbdc2ced731b 22168 main/Contents-armel.diff/Index
- 372a56816811061a35f043c4baf863a2c6360993 3786638 main/Contents-armel.gz
- 4d7ee8b6a00ef3029c042bf3c8f573e61a8aafea 55205131 main/Contents-armhf
- a672781ba1cf0d7145f53f145409f5c6e1cc66ce 24360 main/Contents-armhf.diff/Index
- 50141f59a34eb382fa509a358ac47fd89598df01 3775056 main/Contents-armhf.gz
- 5fc54acf306b8a4f032a5abc43ee233b036c61bb 57405299 main/Contents-i386
- cd3d047ec798a25c6fb402014f22d3983999edde 25070 main/Contents-i386.diff/Index
- cbf28f6d810aefd57b267dd1c9478e2846994047 3936378 main/Contents-i386.gz
- 4770e2d430c9ebb181cc5d53302cc639209cfcee 58007915 main/Contents-ia64
- b44258ec3ed8da9d1f2c9f0f6573682d015cdb32 18293 main/Contents-ia64.diff/Index
- c4b6c9411fa0fb2655b92401f2c2d4cfb6e46b75 3901535 main/Contents-ia64.gz
- 0bd93bfab61c094e193413d01fdbee1ed5602ee0 50310305 main/Contents-kfreebsd-amd64
- 49704e36d433270aba2dca1c8124b0913f61a2b9 17583 main/Contents-kfreebsd-amd64.diff/Index
- da2f7c5e233d0de83632f7422d6b44ca431e4099 3450398 main/Contents-kfreebsd-amd64.gz
- 8b2173647156f9746234dbad2b5d7a76570f6257 50378896 main/Contents-kfreebsd-i386
- 0fae1f5e2381824a70d183bc06a19999b5f021aa 17583 main/Contents-kfreebsd-i386.diff/Index
- 0633e3c8bccdc56b08ec8be23463ca9e5e16c4db 3459123 main/Contents-kfreebsd-i386.gz
- 10df0433f251917ecb3897dadc913cc3f81b1b77 55948774 main/Contents-mips
- 0c80319299124d461791692325193b455955b758 20068 main/Contents-mips.diff/Index
- 539b98ac093d75977d0e7701d8535583ada02b69 3801345 main/Contents-mips.gz
- 8c18a0ed6dda5ab10f2191543b5159a91f9cf846 56551959 main/Contents-mipsel
- f46f76dc474fff4ba4b261c429f015229207f20b 19065 main/Contents-mipsel.diff/Index
- a92fc968165066011d5e7dd3b31a40fbb5df6f33 3833328 main/Contents-mipsel.gz
- 87e9636a7c7d5878d9972bdfc9c55760e2712e90 55924659 main/Contents-powerpc
- ecda034c47fd2986534dc315b4845c106ad8badf 18710 main/Contents-powerpc.diff/Index
- 4cf5deb31dd6d74174e7188c383b25ab0c2d5fb6 3821616 main/Contents-powerpc.gz
- e17b7383369ab8326937e3206d8b61019cd60935 52562968 main/Contents-s390
- c5d2f42b1ed48446c7b2baaf3ac36f3752df7439 17228 main/Contents-s390.diff/Index
- 62cccee196bb7ba6a534aee1955c1c26820661f2 3617572 main/Contents-s390.gz
- 27a9c0ebab1904f8818c5790c82927e7454a4073 53483632 main/Contents-s390x
- c21ce0f07d62bed73a1c1c67f44bf6ff3c02e1b1 17722 main/Contents-s390x.diff/Index
- 1943c7df32cf3808c1c6fdbba8200ac76415955f 3697504 main/Contents-s390x.gz
- 9ae53447a5f7bc6822bbae4ce8edc3b8cd3d0921 54200433 main/Contents-source
- ff366b0376ed239fa25034880dd843ceb2e97531 17052 main/Contents-source.diff/Index
- bc29780060ea9f1f4269c6e75cfeaf92a425798b 5742422 main/Contents-source.gz
- 7d881b20dcf75379f03443cc18cfc17bcfc506d5 54439714 main/Contents-sparc
- 19a0af4b550d38bea085b848cb46aa41307536d5 18710 main/Contents-sparc.diff/Index
- 46751adc32443477d096d6e2bf58898be653865e 3732736 main/Contents-sparc.gz
- 2ff220ef64df83aa085dd0c2cfe545ee4b8b8757 97265 main/Contents-udeb-amd64
- a87785c77270ce649965e9c496ab66b59f97c103 6729 main/Contents-udeb-amd64.gz
- 21a1294972a2fe377ea013461ee7e70d22f6ab1f 82315 main/Contents-udeb-armel
- d0a4147a22703291e2e400199efdf7039a014e01 4995 main/Contents-udeb-armel.gz
- 9c7a34e0325ecb3453fd75198d63bf203f9f477f 84492 main/Contents-udeb-armhf
- f85899764e0a6885c03b0ce1a1063699be05e5ed 5965 main/Contents-udeb-armhf.gz
- be0a4cc9a292df9f8fe5ce6d842c61a9f137f08f 206559 main/Contents-udeb-i386
- 72e1cecb96616e29b7c6463003af7db759da9e5c 13256 main/Contents-udeb-i386.gz
- b86138355c7305ee1fd674a4902f05129b147503 201741 main/Contents-udeb-ia64
- dcce0ed33993fbd136ba5c3cb6ad5e15ca7f1f18 12924 main/Contents-udeb-ia64.gz
- c6d4852a3849d696eb9afc864473493a9d86f50b 3612 main/Contents-udeb-kfreebsd-amd64
- 36589ca28b2e4f6bab552e08295dbc86eeaa3bee 433 main/Contents-udeb-kfreebsd-amd64.gz
- 513daf8260b475e086d07d1cb1ea038f8a61aedd 3612 main/Contents-udeb-kfreebsd-i386
- d8bc492deb853fb8fa50cd07729363a15612ff0b 428 main/Contents-udeb-kfreebsd-i386.gz
- 77d419635732133fc347d933a476674439d8b8ef 219854 main/Contents-udeb-mips
- 3f9564b30bf69b1bf073aced82b7c73b0dcfe250 13373 main/Contents-udeb-mips.gz
- d2ad15e61388b90b9f550677efd3a19c9e3effbe 347698 main/Contents-udeb-mipsel
- 1526a0ebbfc7d087bd40dc2bf0eff17a38bd582f 20139 main/Contents-udeb-mipsel.gz
- ded0033d3158f37312c1e7268331ab50cc710fae 167963 main/Contents-udeb-powerpc
- cb3495a703bbe1fad1e4c94abeb766b1782eb469 9936 main/Contents-udeb-powerpc.gz
- 096ca150eb1c6f7f93024e650c8ff95bc77c9ff0 17745 main/Contents-udeb-s390
- e1faaad806d7a647d1881f5568897d10889fecd3 1678 main/Contents-udeb-s390.gz
- 2fe9f7fe129b93e12cacf4d5d99cc77c070f5afb 17655 main/Contents-udeb-s390x
- ca122c9c900deda9f5ef5f48ce630d0828e35a63 1666 main/Contents-udeb-s390x.gz
- ff95740a3e5c1d4ba5f09e984e5378bca2545a22 41956 main/Contents-udeb-sparc
- f17f4b8a8462386f9914dde28a8a2ef5ea43a787 3108 main/Contents-udeb-sparc.gz
- 6f525cefbd73e3135dd769e94e4c79e3cb1bcfd3 1752561 main/binary-all/Packages
- c82dd228965f2e71e59362da75741f9b3c27997a 298614 main/binary-all/Packages.bz2
- 70932a96872741fb6c68a670246b2334ace0255a 363124 main/binary-all/Packages.gz
- 92ec46b2df938dcbecb58850ef8518df5d481fb0 163 main/binary-all/Release
- a65cf3e4f889ee9d254fe7071dc734d48a3f6133 3101317 main/binary-amd64/Packages
- 6851174452cc79bce8d15ab469d4d0486e15cad2 611011 main/binary-amd64/Packages.bz2
- 53e4a5a6142dfe8dfcd08d74a5465f8affe3c7b4 27088 main/binary-amd64/Packages.diff/Index
- 6c89f5b4c9a6e1d493cfbdba0623b8c2d5554186 776104 main/binary-amd64/Packages.gz
- 64346210e6f9365f0d28bcfee95559507c5a661b 165 main/binary-amd64/Release
- 473a45c81ed85ce386fab5d44f107055c02984d0 2946046 main/binary-armel/Packages
- 952cd18bd5ecc1931f4aa84e917408634ea0cc83 581488 main/binary-armel/Packages.bz2
- c095b7abe14692c2a70d79eba2deca448c21f406 27796 main/binary-armel/Packages.diff/Index
- fc7930ee7d8921961d641e97df17735f77524fcc 738067 main/binary-armel/Packages.gz
- 5f4c2846d626a89d17f9f4b823218b62234c3cdd 165 main/binary-armel/Release
- 3539b746ec24c53a4e3eaf049a25066e6e3df6b9 2977442 main/binary-armhf/Packages
- 5e88d97ca5ea5cfc98f688f565ca72c08d872bda 586282 main/binary-armhf/Packages.bz2
- a6696b2bf29fc7535ac63556c6b3cae6cc19d98c 27796 main/binary-armhf/Packages.diff/Index
- ae40caabf8fb4faa34dccc2eb4dd2029f98b5b02 745128 main/binary-armhf/Packages.gz
- c3ab2525fe58477217fd83727852368ed89037fd 165 main/binary-armhf/Release
- 31e3b3379e41b0b980de2197ad9f2da62ca26822 3097673 main/binary-i386/Packages
- aed63603adfda162726f72993af79ffbbe5512ae 610952 main/binary-i386/Packages.bz2
- 28e172987110a98af68128cf7633218078d43641 27796 main/binary-i386/Packages.diff/Index
- 389fba5cb039e1870495e9bde14c6dbaf9765089 775752 main/binary-i386/Packages.gz
- cca95962e577f85cad70429ac01e0927a8209759 164 main/binary-i386/Release
- 04cac61bd9f8173d35edee73b1a8d8b602b835a6 2807416 main/binary-ia64/Packages
- f7175c28304b3cc0b349a3139fea341e72ab6c1f 557449 main/binary-ia64/Packages.bz2
- 7630dbf31c636d6c98eed676565e793b02a6a90b 18214 main/binary-ia64/Packages.diff/Index
- 4920d48a91d25170530641a4c726610fd7dabf04 707233 main/binary-ia64/Packages.gz
- bcaa36980ebe58562b01ffac2e45ec6c08236bc3 164 main/binary-ia64/Release
- 90c4d3302b42f4a4aa90f94624571039ae922055 2641182 main/binary-kfreebsd-amd64/Packages
- 22b90de5ad8b50fc875e2e26c0cfd8c47057603e 517444 main/binary-kfreebsd-amd64/Packages.bz2
- 527c36d5d5a516c8636060a9a1c99eeaae616f06 24256 main/binary-kfreebsd-amd64/Packages.diff/Index
- 78548ca0f528b8a1a7f0388c2fee2bbd6c75a7f0 660341 main/binary-kfreebsd-amd64/Packages.gz
- 2939811591312465d0d49eaa8ebb198209c016ef 174 main/binary-kfreebsd-amd64/Release
- d97635651697d0ab20ded6a3fbfb36b0f10ed5f3 2666534 main/binary-kfreebsd-i386/Packages
- 2a0faf37a86708bbadc39da6b207932281ec77ff 521809 main/binary-kfreebsd-i386/Packages.bz2
- ffdb50776f0fc557b13285f000f062cd7d104c7b 24610 main/binary-kfreebsd-i386/Packages.diff/Index
- 1f3819f4affbf789d961db7c8a228b576ac62ec9 665460 main/binary-kfreebsd-i386/Packages.gz
- 75a814be20b5db5f15d8d5a0f217c16eb15fd858 173 main/binary-kfreebsd-i386/Release
- c2c9904020f1b83ce2b26f62981eb1d8a3decb53 2907660 main/binary-mips/Packages
- 407acedf55919fa00838669aadd2195aa8a58818 575633 main/binary-mips/Packages.bz2
- 13805e1a1e47970f0c836d01e3a5e7a8216fb8ae 21382 main/binary-mips/Packages.diff/Index
- 7e47dac39239a86ae5a026edb7fe38be1a2b8b27 729884 main/binary-mips/Packages.gz
- e2530a004affe638d225c2cf593c4dba77d32bc9 164 main/binary-mips/Release
- 67767ae8de58a191aebacd53caa39f3125304078 2942003 main/binary-mipsel/Packages
- b4c7f46ce8e31f49d29f5fc03a4d5924dff787fe 579576 main/binary-mipsel/Packages.bz2
- d38786e92a193879a5f5b101cd97965b481fdb4f 21010 main/binary-mipsel/Packages.diff/Index
- 9b89791e95ae14aeac9756866f04f98a22be1a46 735563 main/binary-mipsel/Packages.gz
- a5077fe58287383235af6409b21014132ac41726 166 main/binary-mipsel/Release
- b72a839ca17d30dc5dc1927caadec528971eab74 3158047 main/binary-powerpc/Packages
- ca0ba36e80f10d21e05821a9a63b22e3ae973253 609147 main/binary-powerpc/Packages.bz2
- 9dd9a3282da86b77e51b9206f0b46c22ddf997ca 19888 main/binary-powerpc/Packages.diff/Index
- 3549fc5ae953045649a2e4effae3465775a81688 769669 main/binary-powerpc/Packages.gz
- 9bf63b7c649e00d562ba7dce63a2c390bca13b20 167 main/binary-powerpc/Release
- 7581a92463e606d7c37cb99fd9a453bdca6556f2 2921850 main/binary-s390/Packages
- 15e69cf966d8e899973daadd8709b68cc5168c11 574234 main/binary-s390/Packages.bz2
- 4c0499bab6de2450efc1568549ba117a88157eca 19396 main/binary-s390/Packages.diff/Index
- c7231fc4c7c09518b66a23bfe5b9bbd6972df14a 721451 main/binary-s390/Packages.gz
- 6cc288bb4070256933aa3d43ad2c281edbd17517 164 main/binary-s390/Release
- 48560981d49803335e8b6195f59540e1fad1c715 3092767 main/binary-s390x/Packages
- a66b483582b08577a8b511f2dcdf6de34ad6ea4b 598557 main/binary-s390x/Packages.bz2
- cd00565504da6f374e73f33e56cb76b109275d09 19396 main/binary-s390x/Packages.diff/Index
- 4947484deb2bc78a0459128be6db4b40031c00ce 754961 main/binary-s390x/Packages.gz
- 613c89d6401af813b75b4b3077b4b37109c9b573 165 main/binary-s390x/Release
- 58303c76048271f37b87c01d02e408cf390c4754 2909809 main/binary-sparc/Packages
- 486e666f5d54d7e00367761b8b3150bd6457119b 572645 main/binary-sparc/Packages.bz2
- 0380fb8c3a8d01f5cc8d560def418aa239bf852e 20380 main/binary-sparc/Packages.diff/Index
- d994bc75598168fc8636bf84740a51feb89e75bc 727797 main/binary-sparc/Packages.gz
- bc8445aa9777ee6652cac3ba4cd3b2514cc799ab 165 main/binary-sparc/Release
- 27e359e2b317b2c0c69b809cdf43bf69a4d66f88 1201 main/debian-installer/binary-all/Packages
- f6fc56f5f14a27c5227b66f605a50e67daa6a5a4 720 main/debian-installer/binary-all/Packages.bz2
- 5741514b7abed31fdaddd5e1e177c44effa4bb59 648 main/debian-installer/binary-all/Packages.gz
- 92ec46b2df938dcbecb58850ef8518df5d481fb0 163 main/debian-installer/binary-all/Release
- 3b717fbb6d3dfa50e4dbc5dbdd645be8d06a2b3a 52673 main/debian-installer/binary-amd64/Packages
- 6c8f2173cb269f88c254ee13b4097c2f765e0f7c 10640 main/debian-installer/binary-amd64/Packages.bz2
- 771802d111b1f10ee5bb0c792d2339aea92694f4 12316 main/debian-installer/binary-amd64/Packages.gz
- 64346210e6f9365f0d28bcfee95559507c5a661b 165 main/debian-installer/binary-amd64/Release
- 36c9cdd21b7ceb75000dfe8136762e52599d21d5 85058 main/debian-installer/binary-armel/Packages
- e050836b0434d9e656dce3cd8e0ba7e330312e66 15131 main/debian-installer/binary-armel/Packages.bz2
- 98bdfb7bedb8747179f8a2f9f49ebbb637a69429 17272 main/debian-installer/binary-armel/Packages.gz
- 5f4c2846d626a89d17f9f4b823218b62234c3cdd 165 main/debian-installer/binary-armel/Release
- 45d2e85e87304bd487a8d8122f063037c4590fba 40455 main/debian-installer/binary-armhf/Packages
- 635f91d1008a4b4a4af8cf9bef016916fc5a5b0b 9030 main/debian-installer/binary-armhf/Packages.bz2
- 0afacde2798a2bf5059dbe0a980db3e78dc39b00 10230 main/debian-installer/binary-armhf/Packages.gz
- c3ab2525fe58477217fd83727852368ed89037fd 165 main/debian-installer/binary-armhf/Release
- 1c4ee62be21aeb227e92d96fa1c9482260e5f678 93685 main/debian-installer/binary-i386/Packages
- 9ff563b0cb47bb379059e5a0f40409b267affb81 16533 main/debian-installer/binary-i386/Packages.bz2
- d7308e2538c139b32e44c5153b6d0c6b8a391a87 19236 main/debian-installer/binary-i386/Packages.gz
- cca95962e577f85cad70429ac01e0927a8209759 164 main/debian-installer/binary-i386/Release
- e3ae29953df8792d54d630c91f27c3ecea18264d 134527 main/debian-installer/binary-ia64/Packages
- dfed838f687858297fc7871bd1addafdd0fcf55b 22052 main/debian-installer/binary-ia64/Packages.bz2
- e7906cc70083fb17e526c9e40556989b41a42681 25474 main/debian-installer/binary-ia64/Packages.gz
- bcaa36980ebe58562b01ffac2e45ec6c08236bc3 164 main/debian-installer/binary-ia64/Release
- 91475959e635ec114d2a29a03deebe2ce8393043 5111 main/debian-installer/binary-kfreebsd-amd64/Packages
- 058fa2e69f4f008c989d30fd4eadbee6070bb99c 2073 main/debian-installer/binary-kfreebsd-amd64/Packages.bz2
- dc709a9e6525dab3992d210fea5cd8f816a45431 1944 main/debian-installer/binary-kfreebsd-amd64/Packages.gz
- 2939811591312465d0d49eaa8ebb198209c016ef 174 main/debian-installer/binary-kfreebsd-amd64/Release
- c48885d041ec5ea1cce7795d287ced557addc2ed 5099 main/debian-installer/binary-kfreebsd-i386/Packages
- 39e66296141e79da12423d433eed9242c3c9f367 2061 main/debian-installer/binary-kfreebsd-i386/Packages.bz2
- f50d88691707591f891de4ca4902352a52df9c7e 1942 main/debian-installer/binary-kfreebsd-i386/Packages.gz
- 75a814be20b5db5f15d8d5a0f217c16eb15fd858 173 main/debian-installer/binary-kfreebsd-i386/Release
- 6de1e62fa94c19d1679369f406774adbf88943c2 133337 main/debian-installer/binary-mips/Packages
- ddb359c2c7892abce0897c4c0b37e3cb105d1c8c 21486 main/debian-installer/binary-mips/Packages.bz2
- f634c9a281602619328eff254fc7a274fc108934 25104 main/debian-installer/binary-mips/Packages.gz
- e2530a004affe638d225c2cf593c4dba77d32bc9 164 main/debian-installer/binary-mips/Release
- 744c81c7b29764d4fbf5d511c9ef41b3f6aaf624 180613 main/debian-installer/binary-mipsel/Packages
- bcfbc7f034f7f797ea81bd149569e86c4c4d24fe 27088 main/debian-installer/binary-mipsel/Packages.bz2
- 1c128e427b646c5f2c93297d0177d115961e1910 32425 main/debian-installer/binary-mipsel/Packages.gz
- a5077fe58287383235af6409b21014132ac41726 166 main/debian-installer/binary-mipsel/Release
- 4c996a17fbf7bdd4a8b7d5c817cb92a324c2cbc0 81646 main/debian-installer/binary-powerpc/Packages
- 0c5a2786532f72f8f7070eff9c198be73696144f 14561 main/debian-installer/binary-powerpc/Packages.bz2
- a37ae7931aaa070640f690037c8c442f27c1cc6f 16569 main/debian-installer/binary-powerpc/Packages.gz
- 9bf63b7c649e00d562ba7dce63a2c390bca13b20 167 main/debian-installer/binary-powerpc/Release
- d6b3836b8aff36bbeb74e7c14ad5d00c69656972 23156 main/debian-installer/binary-s390/Packages
- 380a50a639be3ea6edf11df8941dd1ac1d5fe6e9 6029 main/debian-installer/binary-s390/Packages.bz2
- 86c241e13cf53fd2e338194bef6ef42eee0a876a 6480 main/debian-installer/binary-s390/Packages.gz
- 6cc288bb4070256933aa3d43ad2c281edbd17517 164 main/debian-installer/binary-s390/Release
- 9a572381f3205212a48b403b284b6348bdaa6b99 22632 main/debian-installer/binary-s390x/Packages
- 527fba38371c795d2cf9a49cdfaf850d35b48e22 5845 main/debian-installer/binary-s390x/Packages.bz2
- 60db7880a5e1b59f857fc18ef2b51290ffc81fcb 6312 main/debian-installer/binary-s390x/Packages.gz
- 613c89d6401af813b75b4b3077b4b37109c9b573 165 main/debian-installer/binary-s390x/Release
- 9b7233f5d5b9f4a7b3560a446a6e7d4ab57ef664 33653 main/debian-installer/binary-sparc/Packages
- 346d92a39ffe9d681d6e0ed57923982d6a123dc8 7535 main/debian-installer/binary-sparc/Packages.bz2
- 029fd0365160824f3b500d265d4cb134fde031bf 8369 main/debian-installer/binary-sparc/Packages.gz
- bc8445aa9777ee6652cac3ba4cd3b2514cc799ab 165 main/debian-installer/binary-sparc/Release
- 96164a55cd73fc0644d11340c977197fb995eb2d 2215515 main/i18n/Translation-en
- 69c808ae9173576aa8bb4f2b0b5ac98f17cf7781 379130 main/i18n/Translation-en.bz2
- 3a98bc715e5e13c76d6154adc9b08899bee2e2d3 10360 main/i18n/Translation-en.diff/Index
- 2b313b3cd72c616c018605dfb8b1946668f932f8 166 main/source/Release
- b4829f58a119a77ea2022741d5c7aa99cf61c070 2698141 main/source/Sources
- 4b3a7f42a196a4206cda019f5e9bf969ace041ae 459978 main/source/Sources.bz2
- 59bdf99091ba61a1e9cbd0d02a21698b395bfa8c 27796 main/source/Sources.diff/Index
- 82540485d3262ffe9f085a692f4b089564410fcf 594683 main/source/Sources.gz
- f2ed326998abc2da1879876da83192068dd74156 980964 non-free/Contents-amd64
- 93a227c6fc73d4dba42752824d5baf311c66b6ff 4948 non-free/Contents-amd64.diff/Index
- d38fa32b9f1da058276b76422cdfefc746073290 59410 non-free/Contents-amd64.gz
- 9306d43bda62ee13437c1af2a5646d5c53c94638 489792 non-free/Contents-armel
- b978f85fdbcaaaf59ef784e78672f0aa2a6645fd 736 non-free/Contents-armel.diff/Index
- d11840c4a651fd78658ad3e8ff1a85934de41141 27750 non-free/Contents-armel.gz
- 9306d43bda62ee13437c1af2a5646d5c53c94638 489792 non-free/Contents-armhf
- eb97448ca9a90cc653945c93e068f7be9bdd3e5f 736 non-free/Contents-armhf.diff/Index
- d11840c4a651fd78658ad3e8ff1a85934de41141 27750 non-free/Contents-armhf.gz
- 05925099e99e72991de38d9d09127123aa6ebba7 991147 non-free/Contents-i386
- df7e417002818c31eb6c599d28280a376a3576d9 4948 non-free/Contents-i386.diff/Index
- 5a0761a8b184c3689d8eb3ac6afec3a74a050ac7 59944 non-free/Contents-i386.gz
- 9306d43bda62ee13437c1af2a5646d5c53c94638 489792 non-free/Contents-ia64
- 6c0d13531ef544bfe73faf4bb5268e7f3d170c8f 736 non-free/Contents-ia64.diff/Index
- d11840c4a651fd78658ad3e8ff1a85934de41141 27750 non-free/Contents-ia64.gz
- 9306d43bda62ee13437c1af2a5646d5c53c94638 489792 non-free/Contents-kfreebsd-amd64
- 005ac5c573649f7d97b90b0c60ee6e4be06a0b2e 736 non-free/Contents-kfreebsd-amd64.diff/Index
- d11840c4a651fd78658ad3e8ff1a85934de41141 27750 non-free/Contents-kfreebsd-amd64.gz
- 9306d43bda62ee13437c1af2a5646d5c53c94638 489792 non-free/Contents-kfreebsd-i386
- ee319b06b8d6620ddf8146fd8c146c714d798983 736 non-free/Contents-kfreebsd-i386.diff/Index
- d11840c4a651fd78658ad3e8ff1a85934de41141 27750 non-free/Contents-kfreebsd-i386.gz
- 9306d43bda62ee13437c1af2a5646d5c53c94638 489792 non-free/Contents-mips
- 493c670c28f74153e862b145c0b6f5d37b4dfaec 736 non-free/Contents-mips.diff/Index
- d11840c4a651fd78658ad3e8ff1a85934de41141 27750 non-free/Contents-mips.gz
- 9306d43bda62ee13437c1af2a5646d5c53c94638 489792 non-free/Contents-mipsel
- 1080d768ac585a1b53823c5053503aaa45c84138 736 non-free/Contents-mipsel.diff/Index
- d11840c4a651fd78658ad3e8ff1a85934de41141 27750 non-free/Contents-mipsel.gz
- 9306d43bda62ee13437c1af2a5646d5c53c94638 489792 non-free/Contents-powerpc
- b4fd5060d161d488aaa1a5a76f056b09947c89ac 736 non-free/Contents-powerpc.diff/Index
- d11840c4a651fd78658ad3e8ff1a85934de41141 27750 non-free/Contents-powerpc.gz
- 9306d43bda62ee13437c1af2a5646d5c53c94638 489792 non-free/Contents-s390
- d222a6526ee4962c4cf7af27e48f21c3a6429eb5 736 non-free/Contents-s390.diff/Index
- d11840c4a651fd78658ad3e8ff1a85934de41141 27750 non-free/Contents-s390.gz
- 9306d43bda62ee13437c1af2a5646d5c53c94638 489792 non-free/Contents-s390x
- 8e60a8d13336d143bb027dee111536fa7a989ec7 736 non-free/Contents-s390x.diff/Index
- d11840c4a651fd78658ad3e8ff1a85934de41141 27750 non-free/Contents-s390x.gz
- 1b594ef4f47fc39005cb23ef5a9997af0c863490 310077 non-free/Contents-source
- f1e35cd727a978cc62a9649360aba1d1768819d2 4188 non-free/Contents-source.diff/Index
- 284104b4f64fe9b7d3707e7ba7c1c56190b5e88a 30075 non-free/Contents-source.gz
- 9306d43bda62ee13437c1af2a5646d5c53c94638 489792 non-free/Contents-sparc
- 01fc995415f9a26c7e07d27127770fa44e10406a 736 non-free/Contents-sparc.diff/Index
- d11840c4a651fd78658ad3e8ff1a85934de41141 27750 non-free/Contents-sparc.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/Contents-udeb-amd64
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/Contents-udeb-amd64.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/Contents-udeb-armel
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/Contents-udeb-armel.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/Contents-udeb-armhf
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/Contents-udeb-armhf.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/Contents-udeb-i386
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/Contents-udeb-i386.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/Contents-udeb-ia64
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/Contents-udeb-ia64.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/Contents-udeb-kfreebsd-amd64
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/Contents-udeb-kfreebsd-amd64.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/Contents-udeb-kfreebsd-i386
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/Contents-udeb-kfreebsd-i386.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/Contents-udeb-mips
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/Contents-udeb-mips.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/Contents-udeb-mipsel
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/Contents-udeb-mipsel.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/Contents-udeb-powerpc
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/Contents-udeb-powerpc.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/Contents-udeb-s390
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/Contents-udeb-s390.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/Contents-udeb-s390x
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/Contents-udeb-s390x.gz
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/Contents-udeb-sparc
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/Contents-udeb-sparc.gz
- e23adff3346a205ba382e2f35423d073c3ba1658 20438 non-free/binary-all/Packages
- 65a879f7d150b13b9552141a163a67f6aa48b42c 5570 non-free/binary-all/Packages.bz2
- 1ba72ba83c51d224e1933d633630f1a504f6d7b2 5805 non-free/binary-all/Packages.gz
- cdd61cd701bbf9b6384ea8b98780c4da448b25ef 167 non-free/binary-all/Release
- 636b8bdbb959df46cf512dbbc3464271ebc67329 115902 non-free/binary-amd64/Packages
- bdd7b7efc919ad4b8a6d65ec6c0f70f8e0dc4da0 21633 non-free/binary-amd64/Packages.bz2
- 7e9d12f5da82d75577c5b741ad5aa17c4684f78a 4456 non-free/binary-amd64/Packages.diff/Index
- 0f270b965a3433b31e702976613f124a13edb444 25323 non-free/binary-amd64/Packages.gz
- 775e14a1a8f3c4754658ad35473f48c0efa97269 169 non-free/binary-amd64/Release
- e23adff3346a205ba382e2f35423d073c3ba1658 20438 non-free/binary-armel/Packages
- 65a879f7d150b13b9552141a163a67f6aa48b42c 5570 non-free/binary-armel/Packages.bz2
- 1ba72ba83c51d224e1933d633630f1a504f6d7b2 5805 non-free/binary-armel/Packages.gz
- 2ddd2eed259a3af3f7811acd975768c9cce5588b 169 non-free/binary-armel/Release
- e23adff3346a205ba382e2f35423d073c3ba1658 20438 non-free/binary-armhf/Packages
- 65a879f7d150b13b9552141a163a67f6aa48b42c 5570 non-free/binary-armhf/Packages.bz2
- 1ba72ba83c51d224e1933d633630f1a504f6d7b2 5805 non-free/binary-armhf/Packages.gz
- f27138b0a3e48d605d608e59276ceda902001f2d 169 non-free/binary-armhf/Release
- 0256e7d5dfdb364ae7c2e7f35629ee1940f695e3 123415 non-free/binary-i386/Packages
- 821dc47959da0ec2342b62be80bbf622c7c385fd 22755 non-free/binary-i386/Packages.bz2
- 8923c0f302c69b274f1038fd44b8dc3638651b49 4456 non-free/binary-i386/Packages.diff/Index
- 08e473cba7e57771e6ac52b2376ed9991f945d24 26726 non-free/binary-i386/Packages.gz
- b90a64d220f8e9be0ae1bb3f90be2ba3444a4e83 168 non-free/binary-i386/Release
- e23adff3346a205ba382e2f35423d073c3ba1658 20438 non-free/binary-ia64/Packages
- 65a879f7d150b13b9552141a163a67f6aa48b42c 5570 non-free/binary-ia64/Packages.bz2
- 1ba72ba83c51d224e1933d633630f1a504f6d7b2 5805 non-free/binary-ia64/Packages.gz
- eadbc90140bcf8c7e0c163781b2fa362845579c8 168 non-free/binary-ia64/Release
- e23adff3346a205ba382e2f35423d073c3ba1658 20438 non-free/binary-kfreebsd-amd64/Packages
- 65a879f7d150b13b9552141a163a67f6aa48b42c 5570 non-free/binary-kfreebsd-amd64/Packages.bz2
- 1ba72ba83c51d224e1933d633630f1a504f6d7b2 5805 non-free/binary-kfreebsd-amd64/Packages.gz
- 480129760bec0f8d0b3a5786d08dfd1e5d17d96d 178 non-free/binary-kfreebsd-amd64/Release
- e23adff3346a205ba382e2f35423d073c3ba1658 20438 non-free/binary-kfreebsd-i386/Packages
- 65a879f7d150b13b9552141a163a67f6aa48b42c 5570 non-free/binary-kfreebsd-i386/Packages.bz2
- 1ba72ba83c51d224e1933d633630f1a504f6d7b2 5805 non-free/binary-kfreebsd-i386/Packages.gz
- a5895cfd930d3e839f761fab580728c999f33bf2 177 non-free/binary-kfreebsd-i386/Release
- e23adff3346a205ba382e2f35423d073c3ba1658 20438 non-free/binary-mips/Packages
- 65a879f7d150b13b9552141a163a67f6aa48b42c 5570 non-free/binary-mips/Packages.bz2
- 1ba72ba83c51d224e1933d633630f1a504f6d7b2 5805 non-free/binary-mips/Packages.gz
- 7418d9a26f166bbb55a0d3c41d227e280432f479 168 non-free/binary-mips/Release
- e23adff3346a205ba382e2f35423d073c3ba1658 20438 non-free/binary-mipsel/Packages
- 65a879f7d150b13b9552141a163a67f6aa48b42c 5570 non-free/binary-mipsel/Packages.bz2
- 1ba72ba83c51d224e1933d633630f1a504f6d7b2 5805 non-free/binary-mipsel/Packages.gz
- 0feff878ceaf570225e2e38ed11846b86527719d 170 non-free/binary-mipsel/Release
- e23adff3346a205ba382e2f35423d073c3ba1658 20438 non-free/binary-powerpc/Packages
- 65a879f7d150b13b9552141a163a67f6aa48b42c 5570 non-free/binary-powerpc/Packages.bz2
- 1ba72ba83c51d224e1933d633630f1a504f6d7b2 5805 non-free/binary-powerpc/Packages.gz
- 304f85df998fe8c13d47896e08a66d334a4ed002 171 non-free/binary-powerpc/Release
- e23adff3346a205ba382e2f35423d073c3ba1658 20438 non-free/binary-s390/Packages
- 65a879f7d150b13b9552141a163a67f6aa48b42c 5570 non-free/binary-s390/Packages.bz2
- 1ba72ba83c51d224e1933d633630f1a504f6d7b2 5805 non-free/binary-s390/Packages.gz
- d26298f53c39038fd82349fa85214f5cab066117 168 non-free/binary-s390/Release
- e23adff3346a205ba382e2f35423d073c3ba1658 20438 non-free/binary-s390x/Packages
- 65a879f7d150b13b9552141a163a67f6aa48b42c 5570 non-free/binary-s390x/Packages.bz2
- 1ba72ba83c51d224e1933d633630f1a504f6d7b2 5805 non-free/binary-s390x/Packages.gz
- 33f55cf4b0b588654cf39f8035feb8c5a495f10b 169 non-free/binary-s390x/Release
- e23adff3346a205ba382e2f35423d073c3ba1658 20438 non-free/binary-sparc/Packages
- 65a879f7d150b13b9552141a163a67f6aa48b42c 5570 non-free/binary-sparc/Packages.bz2
- 1ba72ba83c51d224e1933d633630f1a504f6d7b2 5805 non-free/binary-sparc/Packages.gz
- 60650c4938afabd6581418f225bffd0ff97fa94b 169 non-free/binary-sparc/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/debian-installer/binary-all/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 non-free/debian-installer/binary-all/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/debian-installer/binary-all/Packages.gz
- cdd61cd701bbf9b6384ea8b98780c4da448b25ef 167 non-free/debian-installer/binary-all/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/debian-installer/binary-amd64/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 non-free/debian-installer/binary-amd64/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/debian-installer/binary-amd64/Packages.gz
- 775e14a1a8f3c4754658ad35473f48c0efa97269 169 non-free/debian-installer/binary-amd64/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/debian-installer/binary-armel/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 non-free/debian-installer/binary-armel/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/debian-installer/binary-armel/Packages.gz
- 2ddd2eed259a3af3f7811acd975768c9cce5588b 169 non-free/debian-installer/binary-armel/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/debian-installer/binary-armhf/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 non-free/debian-installer/binary-armhf/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/debian-installer/binary-armhf/Packages.gz
- f27138b0a3e48d605d608e59276ceda902001f2d 169 non-free/debian-installer/binary-armhf/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/debian-installer/binary-i386/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 non-free/debian-installer/binary-i386/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/debian-installer/binary-i386/Packages.gz
- b90a64d220f8e9be0ae1bb3f90be2ba3444a4e83 168 non-free/debian-installer/binary-i386/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/debian-installer/binary-ia64/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 non-free/debian-installer/binary-ia64/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/debian-installer/binary-ia64/Packages.gz
- eadbc90140bcf8c7e0c163781b2fa362845579c8 168 non-free/debian-installer/binary-ia64/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/debian-installer/binary-kfreebsd-amd64/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 non-free/debian-installer/binary-kfreebsd-amd64/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/debian-installer/binary-kfreebsd-amd64/Packages.gz
- 480129760bec0f8d0b3a5786d08dfd1e5d17d96d 178 non-free/debian-installer/binary-kfreebsd-amd64/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/debian-installer/binary-kfreebsd-i386/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 non-free/debian-installer/binary-kfreebsd-i386/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/debian-installer/binary-kfreebsd-i386/Packages.gz
- a5895cfd930d3e839f761fab580728c999f33bf2 177 non-free/debian-installer/binary-kfreebsd-i386/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/debian-installer/binary-mips/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 non-free/debian-installer/binary-mips/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/debian-installer/binary-mips/Packages.gz
- 7418d9a26f166bbb55a0d3c41d227e280432f479 168 non-free/debian-installer/binary-mips/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/debian-installer/binary-mipsel/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 non-free/debian-installer/binary-mipsel/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/debian-installer/binary-mipsel/Packages.gz
- 0feff878ceaf570225e2e38ed11846b86527719d 170 non-free/debian-installer/binary-mipsel/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/debian-installer/binary-powerpc/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 non-free/debian-installer/binary-powerpc/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/debian-installer/binary-powerpc/Packages.gz
- 304f85df998fe8c13d47896e08a66d334a4ed002 171 non-free/debian-installer/binary-powerpc/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/debian-installer/binary-s390/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 non-free/debian-installer/binary-s390/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/debian-installer/binary-s390/Packages.gz
- d26298f53c39038fd82349fa85214f5cab066117 168 non-free/debian-installer/binary-s390/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/debian-installer/binary-s390x/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 non-free/debian-installer/binary-s390x/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/debian-installer/binary-s390x/Packages.gz
- 33f55cf4b0b588654cf39f8035feb8c5a495f10b 169 non-free/debian-installer/binary-s390x/Release
- da39a3ee5e6b4b0d3255bfef95601890afd80709 0 non-free/debian-installer/binary-sparc/Packages
- 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 non-free/debian-installer/binary-sparc/Packages.bz2
- a0fddd5458378c1bf3c10dd2f5c060d1347741ed 20 non-free/debian-installer/binary-sparc/Packages.gz
- 60650c4938afabd6581418f225bffd0ff97fa94b 169 non-free/debian-installer/binary-sparc/Release
- c074a1ef90f2864e3e6551e40431b69a3cdf7954 131565 non-free/i18n/Translation-en
- d59c1647928c493bfdbba381f43262aa33cbeb6a 21737 non-free/i18n/Translation-en.bz2
- 0a3bc09a38d3a831c1292f507455b7cea0666820 2980 non-free/i18n/Translation-en.diff/Index
- 6843f16d8cf1aaeba0b9ac89fa526234d1235e1f 170 non-free/source/Release
- 8d13abcbae03bbcddc09dc23e236a22912c9ff14 43755 non-free/source/Sources
- a6808e27f77427ca0ed68d284cb0005707c4fe23 10083 non-free/source/Sources.bz2
- 16e0ec80f50e2313cc10a2f03315bf9c72201719 4456 non-free/source/Sources.diff/Index
- d43fd73e2e94a4f9be923464b7549e5a5f0068d8 10609 non-free/source/Sources.gz
-SHA256:
- 322bd6a6966ec834e41f442c3d9dee4333a913b2bd862f8225bbb010af0d9855 118763 contrib/Contents-amd64
- 611b243f66cfb089837d7e4cf3d56e3f3a6cc5e234ecca5b2cffcfb1cefc1900 2704 contrib/Contents-amd64.diff/Index
- bebfaff1d7ce71c0912b9ec9a056e32c03dff36e35238e7e26a4cb77906b7b56 10211 contrib/Contents-amd64.gz
- cf637f331435c9571cd8c371a572e12d0e60af2dd487a5391d51752ab44a4fb5 72100 contrib/Contents-armel
- d1104bd244adedce2f1767272d27b6cc91ba564b26a43d06fdda276282b170c5 1720 contrib/Contents-armel.diff/Index
- c109b740ba4adfd9721f9781e709a3a6103fdef97a6fff46436dd04849073506 5965 contrib/Contents-armel.gz
- 3750f588762760840c4bf9e639dd558d19a92d3d78404c749d2d0cad4e5228fb 79842 contrib/Contents-armhf
- 78889197cb12a2acb5022caa7420f13d816f23f4b0434ca60fb8f7abf56414ff 1720 contrib/Contents-armhf.diff/Index
- 602b416bf5b5042fbe97a8f3f919f42dbef0505d2d1b6bb83e746650f4424fea 6899 contrib/Contents-armhf.gz
- 057a94c8142af25aaca0eb0d347e99490f32263bf5893bfe25e6cbfec1aee88c 119085 contrib/Contents-i386
- 3a3774ff254a8bf36d8a90c6feec2b844312bed187ca309c3ebb95c941725eab 2704 contrib/Contents-i386.diff/Index
- 474b5588e7ad302be517de763ab9e17c92435ef929157cb20da393d3a5a072a1 10231 contrib/Contents-i386.gz
- 1b6bce724b5df838a96983b844634dfdf98443066732dda1d2d37997c5b9961f 72100 contrib/Contents-ia64
- 91d93c0f5604057154e7b2417b9d8a0c18b8e3bad9d92f6c9ba5899799378662 1720 contrib/Contents-ia64.diff/Index
- f8aef456e204f825358bf47ceea736a857cf17f041b3c4b4acde915e5b304d16 5937 contrib/Contents-ia64.gz
- d491e5e92db51a3a9a73f879c685a2b5b52ed9f75b274b8a9e2b63ad0d52146c 72100 contrib/Contents-kfreebsd-amd64
- 4cb549d5c589037fc3e8a01042eccf8a3095e92d7e742cf1b8943728814be69e 1720 contrib/Contents-kfreebsd-amd64.diff/Index
- 032003ce736d27c55686d5cfa9fa1d857709ecbcacd4ac9c58cdaeb0d5011ef2 5938 contrib/Contents-kfreebsd-amd64.gz
- 30b3b24657f49d78d26d7bd1509d6da9280b4a1249cc1afd034aa4f7e7fb6997 72100 contrib/Contents-kfreebsd-i386
- a67113dfc244da82e0a04b28e3897ae13e8a2a4740c7b9459d3d2085ca965880 1720 contrib/Contents-kfreebsd-i386.diff/Index
- b59725cb84e1be1a35c09ad2c266219f124d1b8b5673e370b328a3881ea1d0f7 5961 contrib/Contents-kfreebsd-i386.gz
- c5447b2eed21774b204ecac042ab8e5d8ce046313b8b7c25638c6452b888b031 72100 contrib/Contents-mips
- 7043f96eacca364216ab5c6c4e72d31732b5a425391bc35d14172a0e61e4d8b8 1720 contrib/Contents-mips.diff/Index
- 39f42c4b618c9defa221512eb07e8b8b3ac86c9bb49bb32960fd5534405e4357 5938 contrib/Contents-mips.gz
- 6b7f01b626b48ed444269bce5832563e8d22454bc3df9893e570fabfd0039687 72100 contrib/Contents-mipsel
- ff5c4b6a9a6cda4931947f45de2e15c260915c94eb661bf14b5ddbba294227d4 1720 contrib/Contents-mipsel.diff/Index
- 395dd1af0ea04c95c80055371b30062ba8249bf619c38e9624ac730d3bb5fcc4 5936 contrib/Contents-mipsel.gz
- c2f13bd047e52834d43dc6edb8c61b967336c160ad50325f7dfe58652e8d78cf 72100 contrib/Contents-powerpc
- 38f33dd3475c842a2db1f59e201832593d2af003f428c36b6715a885de0871d2 1720 contrib/Contents-powerpc.diff/Index
- 39ac1dfdf9111142760a3fe12e525ba9c81ad4923c5171a05ca77993935c7cbe 5938 contrib/Contents-powerpc.gz
- 244d14df65e95bfd0941fb4443d402d0a783be9eec7631f5f4ea379a42a9d96e 72100 contrib/Contents-s390
- 13c566957ae3fd6a7077b8f8fd325d52cdd1b52053ce0c7bd0d596e4dfc39f00 1720 contrib/Contents-s390.diff/Index
- 49747a2facafa523d53f09dc6ffff4dfb0b854c302f6e91e4c66c1020e8c5c1e 5940 contrib/Contents-s390.gz
- bc0f6f3a16c4b206fc5b22ae76b99d9cb1d5a5eb93260b2c19e0f001d254e4e0 72100 contrib/Contents-s390x
- b929f8351cff6f2732327ed54f63440ddeb0f977d16617d98fd34a715db14cac 1720 contrib/Contents-s390x.diff/Index
- 2f7ba95c24f21e023952b4578ebc7f90d9d7c99bc66f296fc38d2839e750a0d1 5932 contrib/Contents-s390x.gz
- 0636f87700d03b04f0fa0e1c5fe4af677e49d9e0b38367b3c4b852954dd7799b 1174098 contrib/Contents-source
- eec1da8dc1006310e7d6d926fa972d4d7e24f08b69f3e87fcad0dd43561ea8ba 3204 contrib/Contents-source.diff/Index
- 9025bd78880e2149f538512bc2619b473f0c2f1624f23f63dc655ba72c437b12 102051 contrib/Contents-source.gz
- 9788aad81fd811adbc9021184d912cf88276505dc43ad21fa8b6ea66e40d749f 72100 contrib/Contents-sparc
- 5e4496f12f473b5cefb5989e7819cf8a6cd0daadbd4483e60038d524763df139 1720 contrib/Contents-sparc.diff/Index
- c8df81e6bea29fd2636f7ee59672392a9c94fb73d8dc3d43d365d3fd4f3e8d8f 5940 contrib/Contents-sparc.gz
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/Contents-udeb-amd64
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/Contents-udeb-amd64.gz
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/Contents-udeb-armel
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/Contents-udeb-armel.gz
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/Contents-udeb-armhf
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/Contents-udeb-armhf.gz
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/Contents-udeb-i386
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/Contents-udeb-i386.gz
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/Contents-udeb-ia64
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/Contents-udeb-ia64.gz
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/Contents-udeb-kfreebsd-amd64
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/Contents-udeb-kfreebsd-amd64.gz
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/Contents-udeb-kfreebsd-i386
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/Contents-udeb-kfreebsd-i386.gz
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/Contents-udeb-mips
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/Contents-udeb-mips.gz
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/Contents-udeb-mipsel
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/Contents-udeb-mipsel.gz
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/Contents-udeb-powerpc
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/Contents-udeb-powerpc.gz
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/Contents-udeb-s390
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/Contents-udeb-s390.gz
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/Contents-udeb-s390x
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/Contents-udeb-s390x.gz
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/Contents-udeb-sparc
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/Contents-udeb-sparc.gz
- e2ef8ddb8fbe422e3553b769b90a268fcffe1e1c73ef616b6d081627ce21d915 5197 contrib/binary-all/Packages
- f3f613e8566828fdeac5f350d03c6843ff4083385692ddf229ea8cf6dc86e430 2004 contrib/binary-all/Packages.bz2
- 2104593b1a6353909b26d1071fa873278963ca824041dc6eb5ad0dc773bec542 1824 contrib/binary-all/Packages.gz
- 36f2e59f40ae395ed64ed1eaa681859cd64855f1a02cea7783e78c2932af34a4 166 contrib/binary-all/Release
- d8af16b11093284f7b7b964f12f5c5cfd15708a5dec759cd40d39262a9544365 34074 contrib/binary-amd64/Packages
- 9e4c0c1d9175991a3a980c6432711b12e4f16d9c3806281aa568ef7b8ae987f9 8725 contrib/binary-amd64/Packages.bz2
- c3e93ed28873c82f255a0fda14c9b944445869e342f7043d299238555fc87955 2212 contrib/binary-amd64/Packages.diff/Index
- e95fd1bc67a498e83e48577b3dc0920a20b8a8703b33d7b244e460a54c0b5bd9 9229 contrib/binary-amd64/Packages.gz
- 2dc245a6a705ac8bb26c79b103e14e7beec849e8ec82dda6bd9b5c2bf6711440 168 contrib/binary-amd64/Release
- 908e7195fddc7de3d6b4a4d3da512d5e5e0efebab78c041be80c841f75ee0a29 9111 contrib/binary-armel/Packages
- b19e72543f17b61065de834077ab2890b679d86525851894c281d61c028217ef 3160 contrib/binary-armel/Packages.bz2
- 16c37edc62ad5998e22aad7deb4d8d01c1304bf40c1478cf34a49e1c1f09ea6a 2212 contrib/binary-armel/Packages.diff/Index
- 5b9489fde1ab0743403dffd14b51d93adc0f7e1a532e0fad66727427835fcc17 3027 contrib/binary-armel/Packages.gz
- eb034948d05f90cdc115f9ed0b91b34260ed9f587ea76cff2fd19b044ec0af71 168 contrib/binary-armel/Release
- 018fad6630fab0c6602b7cf5f237557fd16305b3857197b0b5b0e1476b69da49 19971 contrib/binary-armhf/Packages
- 3b2ae208a7b8f00d003615fa308c8f34bd006894a5f3ab23be1cdf73667f5179 5661 contrib/binary-armhf/Packages.bz2
- a3a7dc62045cadb7a1a35553188ee2cafff3712ee883a2f302718145a50fc768 2212 contrib/binary-armhf/Packages.diff/Index
- 2d043526477059471beb373e05ca77d18c0482c41261be0b8edf2b734887a6c6 5755 contrib/binary-armhf/Packages.gz
- 7c546630d30e8343c19c47d8e22350de88535fcdbe696881281e62f90409706e 168 contrib/binary-armhf/Release
- 8eff628d946278b9665d4a1c7c5690120e1b8189fc6056d78a30670769603a75 34024 contrib/binary-i386/Packages
- 1be527fc8dafb18b1cf9f4140ab21c0d6f5d69cc699f58342e596afbd322ae05 8744 contrib/binary-i386/Packages.bz2
- 55d2566716914a7ae8b67eb8b6ec98a84e981bcde977cad9237b42cb17697404 2212 contrib/binary-i386/Packages.diff/Index
- ad12988823b2b3f1a342500f28c1f96ce88358581056645567b73b096e992e28 9375 contrib/binary-i386/Packages.gz
- 076f0931dcffde9a9a4bfa08afc2d3070cf3f301708707073192ff88546027fc 167 contrib/binary-i386/Release
- 5914503fa3666a9ff2ddcb770c0b5a891a489df3168dd5696ef81d3bb62a062f 9149 contrib/binary-ia64/Packages
- 9cf74704161206d25690f361d13a8dfe27533873aac2795c0edcfb52ac3c519d 3188 contrib/binary-ia64/Packages.bz2
- 2c694412f22212525591629e0e69e118af0d579e42ef3c36501048e5bb5f39d3 2212 contrib/binary-ia64/Packages.diff/Index
- edf2b403359f978b01e25ad5ff38dda2f7daf343a852f35ae9cc8ff92f25ad8c 3029 contrib/binary-ia64/Packages.gz
- 537df961889947a91130a263716883c11b63a7ff752db477ae0f4ef636ecb7d7 167 contrib/binary-ia64/Release
- d8084f1ec522c33d8f594634476889e18dc13892573d3356d7cfb9725be758b5 9208 contrib/binary-kfreebsd-amd64/Packages
- f2f1a7a30decab1d720ed55b0fe70922999a8d145392c1d6e7bc80a4625564c0 3171 contrib/binary-kfreebsd-amd64/Packages.bz2
- 60b6e025fc73e41c0be905b612f0341eb936215cab423b20d0a427ce033b659f 2212 contrib/binary-kfreebsd-amd64/Packages.diff/Index
- 1de8d75780242e0fc08e9beeb5bfcc9d83888f4d83b808d911e8e02369564926 3031 contrib/binary-kfreebsd-amd64/Packages.gz
- b166dd74c833882ca534742b2b0ea0e378ad3012bdee0a98fb3794796c7dc736 177 contrib/binary-kfreebsd-amd64/Release
- 0776572560241587f1d20041a897bfa68d954a7fbac162d3079835b9f3645fc7 9198 contrib/binary-kfreebsd-i386/Packages
- 9fab7c624f28e68df3c84b9b7b4dea8e5dadfa07870ddf11a6b856425c9d70b4 3183 contrib/binary-kfreebsd-i386/Packages.bz2
- ec76d176fba8efaac7c0683082c3e7c97eacb1ad4e59b5a6e28279699886c41c 2212 contrib/binary-kfreebsd-i386/Packages.diff/Index
- 8568b53730ea0d0ba279b7097b86d6d134c80f36a9ae552b7df2a83a78f92667 3034 contrib/binary-kfreebsd-i386/Packages.gz
- a15797e2c7bc0ebc571a69a298daea5b00879846cfbe35b0d33a9be977311570 176 contrib/binary-kfreebsd-i386/Release
- d76dbf666401fc104f0b36a88c5e1d8735f7059ef729da116925167cb0a43878 9105 contrib/binary-mips/Packages
- dd1f0046e14d922ce6ef039a957adf849b78eca443e535a7fafaf95c595c2315 3157 contrib/binary-mips/Packages.bz2
- 5c9919abb8778da1f1350621c34503751a54a01d5add12bcf88c542e35eae99a 2212 contrib/binary-mips/Packages.diff/Index
- 18007891ae1a433ed05e3a012360fbba1d4a006e9e5c86611760d39a0053c575 3016 contrib/binary-mips/Packages.gz
- 04d046e29a5c89eb84dc10b99f756b2b13dc0d3e47146b589c26c647f70b92f4 167 contrib/binary-mips/Release
- fbb35d0d20619dff856818ce8e5213be49425d4a13853f7019177bbcd3b5a6d2 9125 contrib/binary-mipsel/Packages
- d6f1229724f6c5efab9e2a3013574711e8e3cad24c314a2dad0209388a742c78 3167 contrib/binary-mipsel/Packages.bz2
- b6746f7ff0200c874999d1539610539d45f1807f404843e70fd7d4626c826e6f 2212 contrib/binary-mipsel/Packages.diff/Index
- 9ad7ebe3e10cc3be52c474eac82eda7a616c6814f87ae889b99e464a02f2b1b5 3016 contrib/binary-mipsel/Packages.gz
- 59a1e4c2e213fefae9338f8ba85508aeab6151052ec1fdfd68a7ff9c50eefff2 169 contrib/binary-mipsel/Release
- 4faccaa6b10df75b721e43d23be022d428ff1047fed14ad001d2fe1d2454a09c 9132 contrib/binary-powerpc/Packages
- 946e62690ee4c9f47b492e0ed6131fa882268d42018e162bcda2f16cf6f8a32b 3169 contrib/binary-powerpc/Packages.bz2
- b85007dc8d92614e0cadc8177bd44c75bce27f6fa04edc216182f3be71e5daaf 2212 contrib/binary-powerpc/Packages.diff/Index
- 5f49131f352e32ef7e7d0fd46ad32c0ec4cab0b9cca35a4b38f980ca7f320bf9 3019 contrib/binary-powerpc/Packages.gz
- dc1a2193eee149c2e922c14ec0eb2ba71378fc1452ccbe8a3b1b2ee289c8ff1a 170 contrib/binary-powerpc/Release
- d7ad9a8412ceae8e5efeefe1f760e1449c5f818f565ad688ebf12a1f17a7c6d5 9102 contrib/binary-s390/Packages
- 3e146eecf233f7d0827e8f4b14d59554655065a9c7092b5c87d084fd2060e5e3 3162 contrib/binary-s390/Packages.bz2
- d7370a14d03518365838486cd48d51ee12d21dba119bf3d43e1511c67e3e5fd4 2212 contrib/binary-s390/Packages.diff/Index
- 21dd28fd1deb32d50be54bae11defd9837fefaefb49ae66c4897e62630e95d43 3023 contrib/binary-s390/Packages.gz
- 2e83cc6bb4cff65560d10c4f59084a931e834849a59a66e5111eac2039cf6583 167 contrib/binary-s390/Release
- ce49a9b82d2f740568bfd7eb1be22d9150b3344b873e50fab163220bc374617c 9116 contrib/binary-s390x/Packages
- 0c47f04d7d81338722724a8859cb6d36e1668fe94fd6cbb25a1f98b88a51ec93 3168 contrib/binary-s390x/Packages.bz2
- 5b83ad03954464ed7e038880be41f7b693b3b24c0510594dbddd33ac40e695dc 2212 contrib/binary-s390x/Packages.diff/Index
- f87e84214a089e7c46dad1331f53cb6091828bd35110cdba6eee6d7e5d3d445d 3013 contrib/binary-s390x/Packages.gz
- 7a0a2c981e4f93731a4daccb516abda97c167a783789c9a7dd4d541bb621e9b0 168 contrib/binary-s390x/Release
- f79faf73f41023da2bec6d52e68358fee35eb3b77056af64fe8790d40c61ef7e 9112 contrib/binary-sparc/Packages
- d1783ea414562dba6c85cad9b4dc8dc150f28159404b1ffd7299ca54d5f3df35 3149 contrib/binary-sparc/Packages.bz2
- 932ac0572803f7e82689dd349007067f1b6093c6b03df033095b9c53e9c2e354 2212 contrib/binary-sparc/Packages.diff/Index
- 09ae755a7a4f80b30c1b3ad3014acfa857795dff3d946886530a94268a76928e 3028 contrib/binary-sparc/Packages.gz
- e7ed8b06fda9a737a002175773ca4f6182dd65163b95eaaa7f453fd88dcb0c52 168 contrib/binary-sparc/Release
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-all/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 contrib/debian-installer/binary-all/Packages.bz2
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-all/Packages.gz
- 36f2e59f40ae395ed64ed1eaa681859cd64855f1a02cea7783e78c2932af34a4 166 contrib/debian-installer/binary-all/Release
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-amd64/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 contrib/debian-installer/binary-amd64/Packages.bz2
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-amd64/Packages.gz
- 2dc245a6a705ac8bb26c79b103e14e7beec849e8ec82dda6bd9b5c2bf6711440 168 contrib/debian-installer/binary-amd64/Release
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-armel/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 contrib/debian-installer/binary-armel/Packages.bz2
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-armel/Packages.gz
- eb034948d05f90cdc115f9ed0b91b34260ed9f587ea76cff2fd19b044ec0af71 168 contrib/debian-installer/binary-armel/Release
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-armhf/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 contrib/debian-installer/binary-armhf/Packages.bz2
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-armhf/Packages.gz
- 7c546630d30e8343c19c47d8e22350de88535fcdbe696881281e62f90409706e 168 contrib/debian-installer/binary-armhf/Release
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-i386/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 contrib/debian-installer/binary-i386/Packages.bz2
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-i386/Packages.gz
- 076f0931dcffde9a9a4bfa08afc2d3070cf3f301708707073192ff88546027fc 167 contrib/debian-installer/binary-i386/Release
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-ia64/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 contrib/debian-installer/binary-ia64/Packages.bz2
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-ia64/Packages.gz
- 537df961889947a91130a263716883c11b63a7ff752db477ae0f4ef636ecb7d7 167 contrib/debian-installer/binary-ia64/Release
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-kfreebsd-amd64/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 contrib/debian-installer/binary-kfreebsd-amd64/Packages.bz2
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-kfreebsd-amd64/Packages.gz
- b166dd74c833882ca534742b2b0ea0e378ad3012bdee0a98fb3794796c7dc736 177 contrib/debian-installer/binary-kfreebsd-amd64/Release
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-kfreebsd-i386/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 contrib/debian-installer/binary-kfreebsd-i386/Packages.bz2
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-kfreebsd-i386/Packages.gz
- a15797e2c7bc0ebc571a69a298daea5b00879846cfbe35b0d33a9be977311570 176 contrib/debian-installer/binary-kfreebsd-i386/Release
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-mips/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 contrib/debian-installer/binary-mips/Packages.bz2
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-mips/Packages.gz
- 04d046e29a5c89eb84dc10b99f756b2b13dc0d3e47146b589c26c647f70b92f4 167 contrib/debian-installer/binary-mips/Release
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-mipsel/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 contrib/debian-installer/binary-mipsel/Packages.bz2
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-mipsel/Packages.gz
- 59a1e4c2e213fefae9338f8ba85508aeab6151052ec1fdfd68a7ff9c50eefff2 169 contrib/debian-installer/binary-mipsel/Release
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-powerpc/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 contrib/debian-installer/binary-powerpc/Packages.bz2
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-powerpc/Packages.gz
- dc1a2193eee149c2e922c14ec0eb2ba71378fc1452ccbe8a3b1b2ee289c8ff1a 170 contrib/debian-installer/binary-powerpc/Release
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-s390/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 contrib/debian-installer/binary-s390/Packages.bz2
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-s390/Packages.gz
- 2e83cc6bb4cff65560d10c4f59084a931e834849a59a66e5111eac2039cf6583 167 contrib/debian-installer/binary-s390/Release
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-s390x/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 contrib/debian-installer/binary-s390x/Packages.bz2
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-s390x/Packages.gz
- 7a0a2c981e4f93731a4daccb516abda97c167a783789c9a7dd4d541bb621e9b0 168 contrib/debian-installer/binary-s390x/Release
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-sparc/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 contrib/debian-installer/binary-sparc/Packages.bz2
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-sparc/Packages.gz
- e7ed8b06fda9a737a002175773ca4f6182dd65163b95eaaa7f453fd88dcb0c52 168 contrib/debian-installer/binary-sparc/Release
- b23996634a3d9c047d674f02020f9ac42433fd9cc00b8d0e5e7dc1ec64e56bb9 21108 contrib/i18n/Translation-en
- 1c45a22ffe14152dab9d4d1ae67b71961c46248d2e737a328577c4361215ee67 6350 contrib/i18n/Translation-en.bz2
- 49550c43cc8a33b0c2c3e61adfe9d236bbfccaf3a4bf34c09f9f0caec02f8d4b 1228 contrib/i18n/Translation-en.diff/Index
- 30d4c7a64ecdc358b2b1a7a2fa1f8e312ada85ff04b6b9aa8b9746d3f26a9cdf 169 contrib/source/Release
- 2cfd2708a3684821becb437c8bfd40f7abff9a0a40ce9881990f9d5416f699e3 29845 contrib/source/Sources
- 314ee058d46aa70635c4c90e8e5811507a736c3dc541164ba3d5ae3df28afa2f 7880 contrib/source/Sources.bz2
- dcc3e19153d4e8b8c1d8d4b4dba0e3ed9dabc5245cf90a704e371239a75008ed 4180 contrib/source/Sources.diff/Index
- 5f2ce488107faa571dc50afc259bd2996d4f37dfbffce1fb467d0670c2858da9 8150 contrib/source/Sources.gz
- 1dd53bc807fc24c2110400d31a78dbd675acd4082934e805466868b29d596e71 55983554 main/Contents-amd64
- 442fe799e2c5b671da1833504b324e056f67b340c8976fac071675a07a71e09c 21550 main/Contents-amd64.diff/Index
- 32c23efaa979da3363afb494b2b0965b6452f347cbc459d718d1830e2e5459f0 3864160 main/Contents-amd64.gz
- 465eca946e23098242edc467ee755c4f3cbb4dda58e8b12bb62f972c732b60b5 55728755 main/Contents-armel
- 2c187abd21d394cf3278fa1c63e4c1af1fcabd88083ba912ac6fa021e9841f5c 22168 main/Contents-armel.diff/Index
- c78bc501904387e014257406d6a0af9a34203b802814790736f30eff6ca48147 3786638 main/Contents-armel.gz
- ced3a5723b45f4e37f195eb82f95407fe4305334b30449a0ea5aed0068fe467f 55205131 main/Contents-armhf
- 65b1ab873ed52e7f5634853cd8b47c990d4c4e0a7fe8a86d77cb58359d642747 24360 main/Contents-armhf.diff/Index
- 153d2ef93ab78a34c1bd42157f24b2870c8e3c2bb4956bb552ca8ac9298a26ec 3775056 main/Contents-armhf.gz
- 1144e56690668e1feee07bfa1b58a8b99a4ad941a8e2bae20eea2de786ff0ce7 57405299 main/Contents-i386
- 878ddc41b55890c0fe3f3a34974b3f141b971cad201b15d2b6a902fa4a5c3982 25070 main/Contents-i386.diff/Index
- b9fe556297a5d6c39d7c932d701a67c31c938714e8840554f94a94a2d93f6f43 3936378 main/Contents-i386.gz
- a46a9be8808fd7a6c7ce6cb8ec832b7f3103147dc1fa57fa85dc54b76a03d2e7 58007915 main/Contents-ia64
- f425d31079800b33314d1bb0e19aba123f3e014d35a47170b43d9b40284d806b 18293 main/Contents-ia64.diff/Index
- c4ab6f14ad18ee6c12eaa7afe67fdd473c68e6bb777580ceebf4a9e1bb2a39fd 3901535 main/Contents-ia64.gz
- 2632f1a663c559f3468f5c308d113107247684e997fd977dd6d388a5075859b2 50310305 main/Contents-kfreebsd-amd64
- a9c7213fe664c9bc86a61958f687f8ac24ca6ccb62ccb8525781ac38dfb59a76 17583 main/Contents-kfreebsd-amd64.diff/Index
- 4805e6d023d45344ab6011fca5ddb0947e33cf7aa373c78b04e74eac83ddbd71 3450398 main/Contents-kfreebsd-amd64.gz
- 68b5d8c737c037d6831b63c74ad5e818a53268a21ee224a97cca9fcea0c2eabb 50378896 main/Contents-kfreebsd-i386
- e6c0b2d977ae24706905313e2b82c2c0310ecb074302582bf55701c2888370e7 17583 main/Contents-kfreebsd-i386.diff/Index
- ba961c6965a38a7a7d3df0eb6a447c4ac0068c1a67e8a939a4850f5c269310e3 3459123 main/Contents-kfreebsd-i386.gz
- 8a696368e377f0ab2a9c7557a98f3017fcd237c9ab8c15f589fb2557edf3576e 55948774 main/Contents-mips
- 417ffb09eb5160c6e59926968e287f403a0acb2516eab74f085cbfb21c169ec8 20068 main/Contents-mips.diff/Index
- 57c55c3441de9773f7ac461bdc5191c8efd131eb2674d3efe56c322b826a813a 3801345 main/Contents-mips.gz
- 69f2223ac63ab39a186a5671b6d14008f3b0e0dbdc692d46b2c8ed9130eaeaf1 56551959 main/Contents-mipsel
- b22d579a8b6907e8832cc26f0ff457697698d2b81eda8cc79c5460aef3455b95 19065 main/Contents-mipsel.diff/Index
- b8461c2517b69da654a773ddfc45fb353ecfb26f5e5c4e1f7b096099fc5762be 3833328 main/Contents-mipsel.gz
- b9ed7e9c29a097bb8fac81cbacac70d117faad7d9e29b8c24a94d2dfdfdfd41b 55924659 main/Contents-powerpc
- fb65f77ad9065e7e99d0ae7149c2ef9a65b0a3a9e5d5c20a398c725af3ec357f 18710 main/Contents-powerpc.diff/Index
- 7babdd47540ee53f09f0877e27b9b23e859ea29e339b4c7a7325d6ce0aa4fb21 3821616 main/Contents-powerpc.gz
- 9ca381a9e9f7d268a0b2238ffeadee53299339f55592f6a1eb5be5323f5a56f7 52562968 main/Contents-s390
- d57912459a11a3d33f88e0a1e05e7266731e3e2a825fce812c1e663b20a40208 17228 main/Contents-s390.diff/Index
- 265c1d3ef08e00c4cee8233bce2e3d3b32560711bc0a87810d67216efda6cf99 3617572 main/Contents-s390.gz
- 0b783185231d2a1c44ea2cc3022a81b4e38fc04aada4de8f186c084f45f97874 53483632 main/Contents-s390x
- d9debbb4fc6023bd54e15ff42cf00dc7c15d37c88a94f2b6af3cc1c5ca9af951 17722 main/Contents-s390x.diff/Index
- 3e0085be305564641adaea73fdeffc17d60b593b2a7d29fee9aa6dac8e111c6e 3697504 main/Contents-s390x.gz
- 85b5e1c4daf4a14028131e5fc78d75a0af78e4b65bce9d1b3fd20fa743957787 54200433 main/Contents-source
- 7feabed48474a7e410428e09354815e88b6abc70d2299780786fb1c64f542dee 17052 main/Contents-source.diff/Index
- 799289de2e0cb0f159c6904ed870e15630ae8f46cf74d482975bc895a13fac7e 5742422 main/Contents-source.gz
- 65fb5166afcfeb347b115789fcc02b3eb8179157f3a89e8eb6afca7b0745027f 54439714 main/Contents-sparc
- 265da7f419562983d6cc22605653f95b0300059ed1eb274d64dbbb790d56a434 18710 main/Contents-sparc.diff/Index
- dba3f5adf64b74492b34ee1152d2403e53f5d0c57273f6671f327257ea144cbe 3732736 main/Contents-sparc.gz
- 7bf66d68a469cfdd558e5f85abf42db42790dc1a21afbe43cbcb34b620b8a5d8 97265 main/Contents-udeb-amd64
- bc7710c34d0de835e037e193762946431f5edd008a47c43619a72a2c3be48122 6729 main/Contents-udeb-amd64.gz
- 367f34bfbedaa8737e138166e4681eea440e71b00b2457784753fa9d2e191448 82315 main/Contents-udeb-armel
- 07d3422b7a95f6c7c13a5ab96d55ae3c6b04683161428e7d43b0e18c1534c65f 4995 main/Contents-udeb-armel.gz
- 7d885a06242d4918776ba40df82df74a22633f5e2b3d5a5495b1f75ebe2c400c 84492 main/Contents-udeb-armhf
- a8aabc9273773d221246827b7aa7bc14bf36f8e0ab70a95a19d8455f001554f3 5965 main/Contents-udeb-armhf.gz
- c0f23b77aab3c28a2ed745ec8ac45f0a38876f6cd288b9d249734a3bc33782f4 206559 main/Contents-udeb-i386
- efc4f25c56dad68a37a6a5795acef73178433237ab767602f95f0e6f0dd691f5 13256 main/Contents-udeb-i386.gz
- bd1fda18c230710b09de4370f5231ed76737ddf8fe042cd817b70815cdbf9f1b 201741 main/Contents-udeb-ia64
- 8f3ddfe0bb3cbc3955c4acac4a1098dc0fb19d0b9c3ec36b66a5928f6ccd3247 12924 main/Contents-udeb-ia64.gz
- 55fb3b40258de379d9a4936e166039dbb9ea84b469656d8ebad2cda58a951211 3612 main/Contents-udeb-kfreebsd-amd64
- 83b49cbbb983cf0de6da1c723427e894bf21d8f0eacb89d4a0433a701d3ef29d 433 main/Contents-udeb-kfreebsd-amd64.gz
- dd412ae0d33833bbccdaf75eced7948f430de4a37a4fb8335aab1977fa3cee46 3612 main/Contents-udeb-kfreebsd-i386
- ad50dedfd1ce89218c1d9bcbd700ea40f56a02bf15766ade1d4297a8aea1cf8e 428 main/Contents-udeb-kfreebsd-i386.gz
- e302a0f01d1de3d784a50ba965e1fc06040bf36780357b9f7fb5c7c850b355b1 219854 main/Contents-udeb-mips
- fa5c24758abf864273083cca022eb60ff5214c85e489964f35ba0b737dd53dee 13373 main/Contents-udeb-mips.gz
- 3577c912cc408e7abe5f33abcff30aae33b65bbe7dce8f0c998f104b8eb06d5f 347698 main/Contents-udeb-mipsel
- 4a770632d46ca4b704bece9bc788816b825ce3dc6ef8d3a47b84c85134390851 20139 main/Contents-udeb-mipsel.gz
- dba0dc3ec48355fb6e25dd0f7f5f25ec1f93ab42244f7849023b1b72f14e4175 167963 main/Contents-udeb-powerpc
- a39684b3d2888280dc1d83b5799f961a63517c559629a0f1b1ac7d84f07f8648 9936 main/Contents-udeb-powerpc.gz
- 9ee001514882e2421a804c0d4825276ce655c8ceed48e1364d843dacebfac879 17745 main/Contents-udeb-s390
- 762d0423796358385d524357a7dacdd23a2169b80be43f916bf5fc800f7d5b0d 1678 main/Contents-udeb-s390.gz
- c9538cd0ddf724218a3278cfe4cce12cf15c39e20d80533c5f7d9b39d4c9b686 17655 main/Contents-udeb-s390x
- 42725abe9d5c0ae097c514850d1913562ad8717501b16f50f0aeffc418e3f1d3 1666 main/Contents-udeb-s390x.gz
- 5d50e03a39c3de7c08c6e3572b038589ad8a0a279c54abf8c73ef66546816d9f 41956 main/Contents-udeb-sparc
- fe0e7d065c7352418c145d55a9ce7d9ace52cc9494804e95d3f4db506a7d1852 3108 main/Contents-udeb-sparc.gz
- 4d6226c1694288e86a80f046c32e4e0a6e81c8a7f3d477ad27122fb0b8a91320 1752561 main/binary-all/Packages
- e2b3a9b56aa3e3dd1f01459d0ddbfbe361e95bc281837c8c0e877c03d0fcde36 298614 main/binary-all/Packages.bz2
- 6c6669151cc4fa9c5ffb15f706effe1a294df37df83260045b2f31b134c4ab0b 363124 main/binary-all/Packages.gz
- d9a1edb484cd5244b1a08dc60412b680ad1780aede975451f453751f3037f855 163 main/binary-all/Release
- a7a4f2bbbc2bbdfbaacf73ddf885ea9ad389a9bb6ad80663b8a7eb4c88056c68 3101317 main/binary-amd64/Packages
- 5ef91566cabcbba8f5ba1a723b7e4c64a3459e2e622ca62fc32d6553e2671acf 611011 main/binary-amd64/Packages.bz2
- 44879fc6a3ea6caaef6da21afea1247f2fd1c8938f103efbcff230f9f662664b 27088 main/binary-amd64/Packages.diff/Index
- e0e9f98d60d23275d5ad25e0a6a76b89e1e8925748f05fc74c22f654cccffd5e 776104 main/binary-amd64/Packages.gz
- dbc0e8638ceceb54f2f06a3d6242cbdff415d17c70d5033ed0f8421f3e1fd874 165 main/binary-amd64/Release
- 3d2451737b41a5970041bf9fadb420f453cf1662eca83d37951699dadd344c3d 2946046 main/binary-armel/Packages
- 3404e26fc6c3bfd88be093ce626e5c8b5e4c223959eaea5b86ec306acefbe390 581488 main/binary-armel/Packages.bz2
- 2790d7c50e36526a1cbbf11e4af968604da6b5003dd5043941b038d00c4f3633 27796 main/binary-armel/Packages.diff/Index
- 377d0cc948eb5b0cfe1eebcf3603146b2d6b5a108a5ec4c21d2ec5700fdbc3ec 738067 main/binary-armel/Packages.gz
- 30f63e300320ae162b398dee548c1be29ec01697c56b79f338b18a539190d486 165 main/binary-armel/Release
- 506e732790b0c2af30c2049ad6dbf2eda937a6aaeba9b74789997662f1c39efe 2977442 main/binary-armhf/Packages
- be5a99d36a423d8e5bdae1fefa38b047c97e956c310b5bba3053fb189cc98dc0 586282 main/binary-armhf/Packages.bz2
- 9ab67201390bfc12f2852bf15e62b08b104bffa4d3cfc57d34f7e68fd3193e06 27796 main/binary-armhf/Packages.diff/Index
- 8c0a674848abbb5cfe51066585200e56ef9012501488070c607dfd3688a827bc 745128 main/binary-armhf/Packages.gz
- a7725b4223240509ffd611c9f3106175bfe410c43f72c40fb6fd7c22481519e4 165 main/binary-armhf/Release
- 53d6df9fd84253cd9e79699126a5f2e941e55069b111ec7e4d14c57f8a32e9f3 3097673 main/binary-i386/Packages
- 3576b3561f496edb5f2400af0450d31910a11ea48d6238854401947ddc23b82b 610952 main/binary-i386/Packages.bz2
- a42b99aca348ab798cf075d7bc7046b2fc1321fb6b78ac40aff85c6d1e49db37 27796 main/binary-i386/Packages.diff/Index
- 5aa6255a3d353d05303a74185eb5b1d8f8e7d576197be0273c9a7a40f1b074c0 775752 main/binary-i386/Packages.gz
- 1d7733a3c35b04b7df2f6cb0ec3b8552da504f817ae9914091f4914f97f09406 164 main/binary-i386/Release
- dd462577073446cbff8bd33e81ecd7da4c9cff902332094a8768c0ee83a4a52b 2807416 main/binary-ia64/Packages
- 14c475f3d755baf93741e2d0f336280e37c21edb9b56d6abcb09b88b403502be 557449 main/binary-ia64/Packages.bz2
- 0d2cb36b443bdf0d67f835bd54240e33954c796485ddc59dc8e73b5065ea4e00 18214 main/binary-ia64/Packages.diff/Index
- 3fa170b163f147f74340aee6f9675b13286f4f66b8443d10c02bc0dcb0456995 707233 main/binary-ia64/Packages.gz
- 32c2cc3ce3cdf65c3798b482e25bf4f880d1598810125a04a32a30c7ef91418d 164 main/binary-ia64/Release
- e5ef09115f7513ddd7b871684f44586a55c5aa57b9b79e8e56663f104e51fe43 2641182 main/binary-kfreebsd-amd64/Packages
- 8fd18eac264f7087bc4bceb555ef38ea7367f74761a08c951ad32bb866b07cd0 517444 main/binary-kfreebsd-amd64/Packages.bz2
- 4731711984a30d5f1008ce08b107085adc0901cde943308180a53b42182104d3 24256 main/binary-kfreebsd-amd64/Packages.diff/Index
- 95de68a11aac06f67b860529a590185849ad2130144e90a5528f8e002cc2fa9b 660341 main/binary-kfreebsd-amd64/Packages.gz
- 65da1dce99093a3c64f6f2cd5f3382d407dfefb44a843fd3a2346923b9a3ccb1 174 main/binary-kfreebsd-amd64/Release
- e6e3602a2e6683d63fdda5e8f2d0b9f8e8b480ea136d8f3cc783a7c837fd71b6 2666534 main/binary-kfreebsd-i386/Packages
- 1420789f19e9369d2adebd63f0ec8191e350329e11658997cca532deddff9ae1 521809 main/binary-kfreebsd-i386/Packages.bz2
- 0fb1b3159ed6605158505be46ccf2fa96640450b7d0e90f3dc52eecb0d38b625 24610 main/binary-kfreebsd-i386/Packages.diff/Index
- 9a44c8e9c97d314a920022ea05bcbcb1ef0712daeb84819ce5e443d906db0d12 665460 main/binary-kfreebsd-i386/Packages.gz
- e11e8f9febeac4ecadfecd86eaa8f5c06f5b2368fd22e2ef65512687cf85dbf3 173 main/binary-kfreebsd-i386/Release
- c392598e8cd789ac3484d92c7325bb0b37ebeb763507eafe722386f980954f4f 2907660 main/binary-mips/Packages
- 166e2d4748463744ba5ce609a9cc352dc1f4fdd818b871d54fe5c085c6bbbe87 575633 main/binary-mips/Packages.bz2
- a8c03942526380bb77d55d66b87a69a011526c18d770f6c8c26ccc4e902e8ecb 21382 main/binary-mips/Packages.diff/Index
- 761ae00368ab40b4399d9293e2dda4252fa7a2986429d0c92cc65553c752a66d 729884 main/binary-mips/Packages.gz
- 09e235fe6d52246b56de4a92c7616f7fb3bad0009530eaed8df7a39f92f3c0a1 164 main/binary-mips/Release
- 4d7269d0892cafa41e6d28aa03e572c94d257d4e34ddb4cf6f03c5d6a4d5d512 2942003 main/binary-mipsel/Packages
- 4a167b20f529697adc3bb0b15e9369475c7fec388fa88f75845bd709fd2d807d 579576 main/binary-mipsel/Packages.bz2
- a0cc715932540da7896c98c58df363807be2f669e069fc5ad039735f58f09cda 21010 main/binary-mipsel/Packages.diff/Index
- b8ac07593e4d7c04a766eb09aa186db9fba6ef22f3bee24f0b3317104bfc1b73 735563 main/binary-mipsel/Packages.gz
- 54922acd9553bcd9c89f54ad0bb4d72ec92ef60bf6fc75842027dcddaf057b5f 166 main/binary-mipsel/Release
- e205878d57fd3ffe1bf345f7227b6043693b0d761046d55ab689a4e433d428c1 3158047 main/binary-powerpc/Packages
- d373e7450ab3cd3c85963f6db1b3e15b7b85f422ed2819b58517da3fe9fbcead 609147 main/binary-powerpc/Packages.bz2
- 0836c4f87471f1f9792c40c130ca8e65b0ea598d3a00a5e40a76027b2ea0ba7c 19888 main/binary-powerpc/Packages.diff/Index
- 7db73940a1d3723f46bfdd1e6832bddb90ea8f5c8977ddc963e559be578a13c6 769669 main/binary-powerpc/Packages.gz
- 0f7df182a0e6728adf61215b598a9a67133bd0e429ac9aa3b40c6a1c90a2e661 167 main/binary-powerpc/Release
- f654374167ad53b10fe7fc114c8fc968663cfe7e0a71b35a04ba55baf773e8fd 2921850 main/binary-s390/Packages
- fb56fb8f2bdc67b1eb4297ef290989e6e2ee8f042b964e7d37eccd1896cadba2 574234 main/binary-s390/Packages.bz2
- d9306f2ff79bda63c8dcb02d3707813876cc785983c21825818f720a4f7abeb8 19396 main/binary-s390/Packages.diff/Index
- f226eee1a1afdbd4ace3b0356f57854452607923e35be46016fb49a5ae9fdbbe 721451 main/binary-s390/Packages.gz
- c5d7fb58493c1bf263ea7ed0801cc0abea81cfa1a3af902c132f213bd7c22853 164 main/binary-s390/Release
- d40dc5b4d0738a17ef5d27258814490752fe9f49280a91dc9db1150ab26b9234 3092767 main/binary-s390x/Packages
- 74fda6122d09875a8b4be6ae69e9ef3c40f079c3ebdb2d8610c6e65ef356a1c5 598557 main/binary-s390x/Packages.bz2
- 88a765ca4696b9ffff19a0a1be20daf90277e0a2f6af16df6ca54a1869f93b2e 19396 main/binary-s390x/Packages.diff/Index
- 6bccd612b8402e1dec87db30edd509540dff013c09e03c5ae806266482d8e18b 754961 main/binary-s390x/Packages.gz
- 0e1e8c9ead5ace3b8e30bc080dd2439b6107dd65f2929804bbb823d764155e1d 165 main/binary-s390x/Release
- 298ea188b7cdf79c6eeeafea2c5640d4c68cbf81457b5110da13a39e2d0860c4 2909809 main/binary-sparc/Packages
- b62cbace7b86df8d1e5f8fccadc57dda5b04f514cd8afd08e02f08b87cd3237c 572645 main/binary-sparc/Packages.bz2
- 95dcb75f3ff7770262f2863916430c6c09a25d015f04901205ad248928a9ab0a 20380 main/binary-sparc/Packages.diff/Index
- 9a6876c403fb7f8160ab86cf2bedbce7ff0a6cc70c9522049cbfe0cf85159b05 727797 main/binary-sparc/Packages.gz
- 0705eaa8964a3db6f050c2d7d932b3fb092c79030d04348a63f66dd62c668dc1 165 main/binary-sparc/Release
- 6d30fc2100a9474713dbf69ecbd10390472c5dfe33253efdcb9ff520616368fb 1201 main/debian-installer/binary-all/Packages
- 9656b69d4d107f08544687996e0d1cc609a2779e0c2a28d7bafd2780f4411d30 720 main/debian-installer/binary-all/Packages.bz2
- 361d8cc62f2d64de5396558132ca5c04f3c76790228d6e22edf0a9e7e87daff6 648 main/debian-installer/binary-all/Packages.gz
- d9a1edb484cd5244b1a08dc60412b680ad1780aede975451f453751f3037f855 163 main/debian-installer/binary-all/Release
- 4360ef11c7b649f76751f940d35bdfe90c80cee84820b0dba70afd2e8f79c53b 52673 main/debian-installer/binary-amd64/Packages
- c8cf8d6f3935f9b28dcf4b2e79120ddc82af1596e55c67233af4b32cdf97229b 10640 main/debian-installer/binary-amd64/Packages.bz2
- 01a99d9dc8920be61faccde2602f1c150f07bfb9d09c765c0b193b3e34ba7e9c 12316 main/debian-installer/binary-amd64/Packages.gz
- dbc0e8638ceceb54f2f06a3d6242cbdff415d17c70d5033ed0f8421f3e1fd874 165 main/debian-installer/binary-amd64/Release
- 1aa099eb91d75e49027218771eb8440eb1d459f90c93824357633257ca39d660 85058 main/debian-installer/binary-armel/Packages
- 38f64d83b19ca9c49f6cd192f75a35aa46ebc7f8beda1aef56c1aedf31860ace 15131 main/debian-installer/binary-armel/Packages.bz2
- 86365a32d6f5c29d7f49ac724fa7a2976944930f42971160163903e43157585a 17272 main/debian-installer/binary-armel/Packages.gz
- 30f63e300320ae162b398dee548c1be29ec01697c56b79f338b18a539190d486 165 main/debian-installer/binary-armel/Release
- bb442212d7dbfb6f2bc8a774d7a926103c25d754b136fad0d4ab432e0f663731 40455 main/debian-installer/binary-armhf/Packages
- 3c7985f074f48285126fd36e19475d99e4f9e1417f999f5c3ae87a4c41a145ab 9030 main/debian-installer/binary-armhf/Packages.bz2
- aa075e6b5042276e0730f36f1736f464ce91c96e258cb5364e2ceda3d60c94ec 10230 main/debian-installer/binary-armhf/Packages.gz
- a7725b4223240509ffd611c9f3106175bfe410c43f72c40fb6fd7c22481519e4 165 main/debian-installer/binary-armhf/Release
- 2758bacbd04f98de0108ff48b513a932071b443cfb3d5a6ba1466c47d7ba77a2 93685 main/debian-installer/binary-i386/Packages
- 2166c219d6bfea16b90b920b0ecd0b59d3078356771dae2ca0ec75d12c2c26a3 16533 main/debian-installer/binary-i386/Packages.bz2
- 2d6f2f630b4d8ee87c6c49e61b6797e42a3267a6164ea2bdf8b3c257dabe5145 19236 main/debian-installer/binary-i386/Packages.gz
- 1d7733a3c35b04b7df2f6cb0ec3b8552da504f817ae9914091f4914f97f09406 164 main/debian-installer/binary-i386/Release
- 40f17a90437cecf1d5f14267e56db92e12cfa218a243f7b472bce26b6e271a63 134527 main/debian-installer/binary-ia64/Packages
- 7f8657efcfaca35a182beec01eaf5915feabb2599e1336fe38cd728061ca404a 22052 main/debian-installer/binary-ia64/Packages.bz2
- 401cd598b141e3a7d206d57b6f959450dba03f1a234e9881f419f6172fd14f10 25474 main/debian-installer/binary-ia64/Packages.gz
- 32c2cc3ce3cdf65c3798b482e25bf4f880d1598810125a04a32a30c7ef91418d 164 main/debian-installer/binary-ia64/Release
- 302d7619eae081899bbd76f9ee8803bf1c0e92319969ad95cca0622f48af9e3a 5111 main/debian-installer/binary-kfreebsd-amd64/Packages
- a5cecd7aea3991b7d54075755e38ff50d0fd39061733b6c38b7d6a14485885d7 2073 main/debian-installer/binary-kfreebsd-amd64/Packages.bz2
- f385b0f50b4fc7306a0a78e195750e4a8dcf3a773652b6ce7817ac5274ed73dd 1944 main/debian-installer/binary-kfreebsd-amd64/Packages.gz
- 65da1dce99093a3c64f6f2cd5f3382d407dfefb44a843fd3a2346923b9a3ccb1 174 main/debian-installer/binary-kfreebsd-amd64/Release
- 95a2f373443eac247fe5f8b3a98edcdf5fc6b93a1d9b0253c375ae3fccf91751 5099 main/debian-installer/binary-kfreebsd-i386/Packages
- 2badd1d5e2a73e8d63904334482e9b339e9963d7b6fb6480ba1986f65e1c7297 2061 main/debian-installer/binary-kfreebsd-i386/Packages.bz2
- f76c304e34b15b79257ea7981102243961c75d19d29b110790343cf689e166f9 1942 main/debian-installer/binary-kfreebsd-i386/Packages.gz
- e11e8f9febeac4ecadfecd86eaa8f5c06f5b2368fd22e2ef65512687cf85dbf3 173 main/debian-installer/binary-kfreebsd-i386/Release
- bb078685b88010eb988c588f361040a0a1012196b37a79bc02a6f96e4d4018c0 133337 main/debian-installer/binary-mips/Packages
- e3179186982a41b2241351dc00ef056739f30dd599a95718384ee427433b3d35 21486 main/debian-installer/binary-mips/Packages.bz2
- ed32cf55a376003ef9a06e9f7fe2a63c272a23171b4a894d13cbc2e5eb459540 25104 main/debian-installer/binary-mips/Packages.gz
- 09e235fe6d52246b56de4a92c7616f7fb3bad0009530eaed8df7a39f92f3c0a1 164 main/debian-installer/binary-mips/Release
- c8d4cf4c725bb5b63644bd538d55835b7f4d491b970f376c5425d26e393339ef 180613 main/debian-installer/binary-mipsel/Packages
- 28f8686775d39670f8bbe2a0596116c2724847b8ef268f056bb194b1ef58c629 27088 main/debian-installer/binary-mipsel/Packages.bz2
- d56f72e3775058c54e38e247bdd36b37af215a0e9526d205c83162b42d1f5a5e 32425 main/debian-installer/binary-mipsel/Packages.gz
- 54922acd9553bcd9c89f54ad0bb4d72ec92ef60bf6fc75842027dcddaf057b5f 166 main/debian-installer/binary-mipsel/Release
- 7e71a05af9de71d6c5dfe078b81a2ea430521b4541aa2eadf898a71e42ebcbc8 81646 main/debian-installer/binary-powerpc/Packages
- 918aee274485b85c37edeff31f5854e3339d9da3edf0997a7ec3b4e93388801a 14561 main/debian-installer/binary-powerpc/Packages.bz2
- e01744a5ab9d30b42271157bb28c66df2b0388c50ec20ae68f0f5381551c9a6f 16569 main/debian-installer/binary-powerpc/Packages.gz
- 0f7df182a0e6728adf61215b598a9a67133bd0e429ac9aa3b40c6a1c90a2e661 167 main/debian-installer/binary-powerpc/Release
- 7842b55581b4efe5408c9ca583c1a833f000bef2640bba19f271e802b1262bf4 23156 main/debian-installer/binary-s390/Packages
- 9f03bf4e0c9f1d751648862ef9c99aea99aacfe38a870f1d3ee2d33bb52c734b 6029 main/debian-installer/binary-s390/Packages.bz2
- 7c55b1aafafe12b8f047fd18a650ffc4343b3bb7c673794d7972fb131db04a6a 6480 main/debian-installer/binary-s390/Packages.gz
- c5d7fb58493c1bf263ea7ed0801cc0abea81cfa1a3af902c132f213bd7c22853 164 main/debian-installer/binary-s390/Release
- 115a4d4d581c84b7d00f458fbb7620a1e13afab06a103b7c4cf57e6e22a5ab58 22632 main/debian-installer/binary-s390x/Packages
- 625d0f59f9076e74c8f6bca3198ff6ed52a7488e660061e81fe7612a5181e1f4 5845 main/debian-installer/binary-s390x/Packages.bz2
- b0d65230dfa5a6f026db8f822933f6c7472f28235c395d32410ba2e6acd11ca2 6312 main/debian-installer/binary-s390x/Packages.gz
- 0e1e8c9ead5ace3b8e30bc080dd2439b6107dd65f2929804bbb823d764155e1d 165 main/debian-installer/binary-s390x/Release
- 0bb0571f97da35e45459aa1267a1a63b30d7d44cde634ec7f2591e17357f4b75 33653 main/debian-installer/binary-sparc/Packages
- bf05047c6ef7f510655bd89279544768332c783f613ecd457dbfac5c85a09b14 7535 main/debian-installer/binary-sparc/Packages.bz2
- e8cfdd9dcf82a0dd8ac54c27713cccc10c245c11f6d65c60e84e995fba8a1f3d 8369 main/debian-installer/binary-sparc/Packages.gz
- 0705eaa8964a3db6f050c2d7d932b3fb092c79030d04348a63f66dd62c668dc1 165 main/debian-installer/binary-sparc/Release
- d0f7ca93704c44282e861887f695decd0d479edf208f23be0152384385be7308 2215515 main/i18n/Translation-en
- 8f421c86f47bd1ebb36133db2cdbf234a10f99bda1d1df323ce82b61a7fd23a0 379130 main/i18n/Translation-en.bz2
- cf9526d0724d3560b33574f8d2a979898ed93830b2f876b68d10ab3b44bb0c40 10360 main/i18n/Translation-en.diff/Index
- b99f4a8c1db622a1fcade3c95c997617a0aef45b4679a259095732e8c5005bfa 166 main/source/Release
- de9c9e7ace5f988d57462b427cea0a1789f7b9f882c8bb2ca5c642db8c8c9853 2698141 main/source/Sources
- f06a222099ad7914826adc34b933b0935acb151548de4f55e35f04ba6078e3f1 459978 main/source/Sources.bz2
- 2ff7187f2fe2c6e873a60ec9a8ec237c766a88f29efe9f6ffac8c2fa3127ccbe 27796 main/source/Sources.diff/Index
- 35f91f9c6d2175e786ae5965cdfd4cb66461ee063923a73a9aeb62d3eaca77a2 594683 main/source/Sources.gz
- 754292b20f72f6d34b72d7a8d3f4638482462bb08de6116defb07516149cb890 980964 non-free/Contents-amd64
- 66c214470d188c9ece1e22c0670f78dfeb40cdae870d3be859b4c4eb0c822416 4948 non-free/Contents-amd64.diff/Index
- 07cf291d52f2c8be5cacafa2fcb7f09c8aef81117c3577a3f6c80b5d54c46e78 59410 non-free/Contents-amd64.gz
- d95d524e2616e2801f54e42af44a88ec34936894f01ad6e8f75899071b3bad14 489792 non-free/Contents-armel
- 1df27ca350ec51d5d898f9f8eee41521275d8ddb07e5014662a154d762798cb4 736 non-free/Contents-armel.diff/Index
- b6d1efc0e9a2c3e6ccef18902fd1a8c0cdeeb3fdf754435cb078e4e1c3552d76 27750 non-free/Contents-armel.gz
- d95d524e2616e2801f54e42af44a88ec34936894f01ad6e8f75899071b3bad14 489792 non-free/Contents-armhf
- 1cc13ce6c325349068cddddebe6f871c2b8f2f1b5cbd7110cbfc74859f47e19b 736 non-free/Contents-armhf.diff/Index
- b6d1efc0e9a2c3e6ccef18902fd1a8c0cdeeb3fdf754435cb078e4e1c3552d76 27750 non-free/Contents-armhf.gz
- a231efe47da01835f72d945469bb19e7df84091fd90a4a8125bbbe87e26231bc 991147 non-free/Contents-i386
- de65f182a17e7422c86397acf73a7e021ced3296ef0f70a140695be1a7dbe30c 4948 non-free/Contents-i386.diff/Index
- 003689f826cdc022f82425a7694b2c72c40b3329394f87b8481b7a78d2c2211b 59944 non-free/Contents-i386.gz
- d95d524e2616e2801f54e42af44a88ec34936894f01ad6e8f75899071b3bad14 489792 non-free/Contents-ia64
- 51527ffe58042d5cc337a62e4582b24e3cf86e7cfc0fe0b06314f42fd920f82c 736 non-free/Contents-ia64.diff/Index
- b6d1efc0e9a2c3e6ccef18902fd1a8c0cdeeb3fdf754435cb078e4e1c3552d76 27750 non-free/Contents-ia64.gz
- d95d524e2616e2801f54e42af44a88ec34936894f01ad6e8f75899071b3bad14 489792 non-free/Contents-kfreebsd-amd64
- 608feaee0f0ff1ff6972d1507a9e4c5c20da76bb8f8d8f67c391c6fb3be0caa9 736 non-free/Contents-kfreebsd-amd64.diff/Index
- b6d1efc0e9a2c3e6ccef18902fd1a8c0cdeeb3fdf754435cb078e4e1c3552d76 27750 non-free/Contents-kfreebsd-amd64.gz
- d95d524e2616e2801f54e42af44a88ec34936894f01ad6e8f75899071b3bad14 489792 non-free/Contents-kfreebsd-i386
- bab102245fc1428fdb3fbba911f666131b5d76ae1358e593c39d5784ddb01f6f 736 non-free/Contents-kfreebsd-i386.diff/Index
- b6d1efc0e9a2c3e6ccef18902fd1a8c0cdeeb3fdf754435cb078e4e1c3552d76 27750 non-free/Contents-kfreebsd-i386.gz
- d95d524e2616e2801f54e42af44a88ec34936894f01ad6e8f75899071b3bad14 489792 non-free/Contents-mips
- 4a6898f70592bbd994ebd5d573f15e4a2b15208e85cd099c4f083300ffe8226e 736 non-free/Contents-mips.diff/Index
- b6d1efc0e9a2c3e6ccef18902fd1a8c0cdeeb3fdf754435cb078e4e1c3552d76 27750 non-free/Contents-mips.gz
- d95d524e2616e2801f54e42af44a88ec34936894f01ad6e8f75899071b3bad14 489792 non-free/Contents-mipsel
- a35bfbbcccd9a8ddf608fde432372556567b71c68fab58eedc6641fc732bf7b9 736 non-free/Contents-mipsel.diff/Index
- b6d1efc0e9a2c3e6ccef18902fd1a8c0cdeeb3fdf754435cb078e4e1c3552d76 27750 non-free/Contents-mipsel.gz
- d95d524e2616e2801f54e42af44a88ec34936894f01ad6e8f75899071b3bad14 489792 non-free/Contents-powerpc
- bd7ef317440199ff5640d24331b5be69c24ff9421d2fa88a98483b1263e7c906 736 non-free/Contents-powerpc.diff/Index
- b6d1efc0e9a2c3e6ccef18902fd1a8c0cdeeb3fdf754435cb078e4e1c3552d76 27750 non-free/Contents-powerpc.gz
- d95d524e2616e2801f54e42af44a88ec34936894f01ad6e8f75899071b3bad14 489792 non-free/Contents-s390
- 9f45565118b581c8b4e1fc317f9a0ade7d5c4db6d908942ce88b31b757c16920 736 non-free/Contents-s390.diff/Index
- b6d1efc0e9a2c3e6ccef18902fd1a8c0cdeeb3fdf754435cb078e4e1c3552d76 27750 non-free/Contents-s390.gz
- d95d524e2616e2801f54e42af44a88ec34936894f01ad6e8f75899071b3bad14 489792 non-free/Contents-s390x
- d13c3279bbfa98c7e1baf9cf2b0a9e8598b283e087a6a9fde56300ae00d68567 736 non-free/Contents-s390x.diff/Index
- b6d1efc0e9a2c3e6ccef18902fd1a8c0cdeeb3fdf754435cb078e4e1c3552d76 27750 non-free/Contents-s390x.gz
- f9e3c329638f22cfb795d09e4b1d64a726fbe224994c3f69a200b09049df550f 310077 non-free/Contents-source
- 3e2876750bf2453fe394e3553f07d38a9640afd980d3f50c17f9242b45f3c603 4188 non-free/Contents-source.diff/Index
- 613d44a2fa8cfee04c27b074671c7730415ebaacce397ecd69921a1616a7c87a 30075 non-free/Contents-source.gz
- d95d524e2616e2801f54e42af44a88ec34936894f01ad6e8f75899071b3bad14 489792 non-free/Contents-sparc
- c5b56d026414facf83037ea2ddee925e15e18f374cece29fe523fbf21b86c2f9 736 non-free/Contents-sparc.diff/Index
- b6d1efc0e9a2c3e6ccef18902fd1a8c0cdeeb3fdf754435cb078e4e1c3552d76 27750 non-free/Contents-sparc.gz
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/Contents-udeb-amd64
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/Contents-udeb-amd64.gz
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/Contents-udeb-armel
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/Contents-udeb-armel.gz
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/Contents-udeb-armhf
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/Contents-udeb-armhf.gz
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/Contents-udeb-i386
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/Contents-udeb-i386.gz
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/Contents-udeb-ia64
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/Contents-udeb-ia64.gz
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/Contents-udeb-kfreebsd-amd64
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/Contents-udeb-kfreebsd-amd64.gz
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/Contents-udeb-kfreebsd-i386
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/Contents-udeb-kfreebsd-i386.gz
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/Contents-udeb-mips
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/Contents-udeb-mips.gz
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/Contents-udeb-mipsel
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/Contents-udeb-mipsel.gz
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/Contents-udeb-powerpc
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/Contents-udeb-powerpc.gz
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/Contents-udeb-s390
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/Contents-udeb-s390.gz
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/Contents-udeb-s390x
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/Contents-udeb-s390x.gz
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/Contents-udeb-sparc
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/Contents-udeb-sparc.gz
- 9418f25377f008cfcff977fb057fcbc636f7eeb57b90680c825c31ea9e70f6b9 20438 non-free/binary-all/Packages
- 764e1a1be89b877a04fc132946becf6220e4210607cc43aa8186d755a15a9caa 5570 non-free/binary-all/Packages.bz2
- f24b7acd306cd258d7ee0f6cd54fb56727a6e211c88c82e06141b11b92c8f109 5805 non-free/binary-all/Packages.gz
- 8918675fadc9eebe2c331d82c95b446c9beceba6e64057e7699f7b017043fca2 167 non-free/binary-all/Release
- 6a1f62ade70fae08b61d4ca4a41746cc3233840363e9456268fc7d3c065bc9eb 115902 non-free/binary-amd64/Packages
- d9479ab166e753a1d214ca2a05bf20a62c6b3501c7efdf6a797dc7412d1ac05b 21633 non-free/binary-amd64/Packages.bz2
- 546b477527295b3ab15a98d76a79117f82ef6bb4f2140a2b9a7f8bc8960e382e 4456 non-free/binary-amd64/Packages.diff/Index
- b6a5cce719f7e79758613213898cf39409517965246efe230517ed6da8f56221 25323 non-free/binary-amd64/Packages.gz
- 0491de1431b49ae3ed04caf3c01d3d894d8123ac913225015fc667c8a2ed01ee 169 non-free/binary-amd64/Release
- 9418f25377f008cfcff977fb057fcbc636f7eeb57b90680c825c31ea9e70f6b9 20438 non-free/binary-armel/Packages
- 764e1a1be89b877a04fc132946becf6220e4210607cc43aa8186d755a15a9caa 5570 non-free/binary-armel/Packages.bz2
- f24b7acd306cd258d7ee0f6cd54fb56727a6e211c88c82e06141b11b92c8f109 5805 non-free/binary-armel/Packages.gz
- cbc0530c91253bb3d264a486e850f8717b5ee7507f71ce2bee7a0579ebf3e696 169 non-free/binary-armel/Release
- 9418f25377f008cfcff977fb057fcbc636f7eeb57b90680c825c31ea9e70f6b9 20438 non-free/binary-armhf/Packages
- 764e1a1be89b877a04fc132946becf6220e4210607cc43aa8186d755a15a9caa 5570 non-free/binary-armhf/Packages.bz2
- f24b7acd306cd258d7ee0f6cd54fb56727a6e211c88c82e06141b11b92c8f109 5805 non-free/binary-armhf/Packages.gz
- 5d28c1733de1e4849a10f260a7b54e32f4f137e69b99aad5ab983fb64608f1df 169 non-free/binary-armhf/Release
- bc8e5b15f34fde94b79ae4bb8fdc88ec6d5c3b8d5f65590997cf8daa413d2eda 123415 non-free/binary-i386/Packages
- bc756d41465d603e8226f8204b0dbce4b099727e943e5fbd41ef0f6f18586716 22755 non-free/binary-i386/Packages.bz2
- d0c8861475331395d35c77e558d1301f377a2425c983962a55cb6f6cdbeda4e0 4456 non-free/binary-i386/Packages.diff/Index
- 2ebc81e9f1164689742d7110a8f97c438e406bd3ba89ff6c0e01f83b20da3e6c 26726 non-free/binary-i386/Packages.gz
- 493bcb093fddbcab3d5ef0f1af40ab9c8bf70b2cc6a43cb44a13c1e6bf3e67a8 168 non-free/binary-i386/Release
- 9418f25377f008cfcff977fb057fcbc636f7eeb57b90680c825c31ea9e70f6b9 20438 non-free/binary-ia64/Packages
- 764e1a1be89b877a04fc132946becf6220e4210607cc43aa8186d755a15a9caa 5570 non-free/binary-ia64/Packages.bz2
- f24b7acd306cd258d7ee0f6cd54fb56727a6e211c88c82e06141b11b92c8f109 5805 non-free/binary-ia64/Packages.gz
- 24f6f1e57776f7539dbeac178e12952a7feb754ed1ea5be719e3af58062de02f 168 non-free/binary-ia64/Release
- 9418f25377f008cfcff977fb057fcbc636f7eeb57b90680c825c31ea9e70f6b9 20438 non-free/binary-kfreebsd-amd64/Packages
- 764e1a1be89b877a04fc132946becf6220e4210607cc43aa8186d755a15a9caa 5570 non-free/binary-kfreebsd-amd64/Packages.bz2
- f24b7acd306cd258d7ee0f6cd54fb56727a6e211c88c82e06141b11b92c8f109 5805 non-free/binary-kfreebsd-amd64/Packages.gz
- 68ba83dce2ab39aedc29dfcc3a8740ce8247fcbad94cc60bfd4bd7d7d059518d 178 non-free/binary-kfreebsd-amd64/Release
- 9418f25377f008cfcff977fb057fcbc636f7eeb57b90680c825c31ea9e70f6b9 20438 non-free/binary-kfreebsd-i386/Packages
- 764e1a1be89b877a04fc132946becf6220e4210607cc43aa8186d755a15a9caa 5570 non-free/binary-kfreebsd-i386/Packages.bz2
- f24b7acd306cd258d7ee0f6cd54fb56727a6e211c88c82e06141b11b92c8f109 5805 non-free/binary-kfreebsd-i386/Packages.gz
- 0955151e699f53cd5c865e64251bcaf409a9b4bb48a414538b33488c021ad442 177 non-free/binary-kfreebsd-i386/Release
- 9418f25377f008cfcff977fb057fcbc636f7eeb57b90680c825c31ea9e70f6b9 20438 non-free/binary-mips/Packages
- 764e1a1be89b877a04fc132946becf6220e4210607cc43aa8186d755a15a9caa 5570 non-free/binary-mips/Packages.bz2
- f24b7acd306cd258d7ee0f6cd54fb56727a6e211c88c82e06141b11b92c8f109 5805 non-free/binary-mips/Packages.gz
- a751f134211e8b37375007883ab323d0f67e78d6d67341e667162c2253834184 168 non-free/binary-mips/Release
- 9418f25377f008cfcff977fb057fcbc636f7eeb57b90680c825c31ea9e70f6b9 20438 non-free/binary-mipsel/Packages
- 764e1a1be89b877a04fc132946becf6220e4210607cc43aa8186d755a15a9caa 5570 non-free/binary-mipsel/Packages.bz2
- f24b7acd306cd258d7ee0f6cd54fb56727a6e211c88c82e06141b11b92c8f109 5805 non-free/binary-mipsel/Packages.gz
- 168dd50fe7b88f1169de213af2bcc15c2f7a39d85edd0cf21fbc744d883d0139 170 non-free/binary-mipsel/Release
- 9418f25377f008cfcff977fb057fcbc636f7eeb57b90680c825c31ea9e70f6b9 20438 non-free/binary-powerpc/Packages
- 764e1a1be89b877a04fc132946becf6220e4210607cc43aa8186d755a15a9caa 5570 non-free/binary-powerpc/Packages.bz2
- f24b7acd306cd258d7ee0f6cd54fb56727a6e211c88c82e06141b11b92c8f109 5805 non-free/binary-powerpc/Packages.gz
- 8bb794b5b0108f8534a00ec0485c3d37059bd52c9092137ecd0ee47a8332d96e 171 non-free/binary-powerpc/Release
- 9418f25377f008cfcff977fb057fcbc636f7eeb57b90680c825c31ea9e70f6b9 20438 non-free/binary-s390/Packages
- 764e1a1be89b877a04fc132946becf6220e4210607cc43aa8186d755a15a9caa 5570 non-free/binary-s390/Packages.bz2
- f24b7acd306cd258d7ee0f6cd54fb56727a6e211c88c82e06141b11b92c8f109 5805 non-free/binary-s390/Packages.gz
- 7beb853133574ab5667b33daf2eb84dfcf6e20d8feec1abf009508934b18470e 168 non-free/binary-s390/Release
- 9418f25377f008cfcff977fb057fcbc636f7eeb57b90680c825c31ea9e70f6b9 20438 non-free/binary-s390x/Packages
- 764e1a1be89b877a04fc132946becf6220e4210607cc43aa8186d755a15a9caa 5570 non-free/binary-s390x/Packages.bz2
- f24b7acd306cd258d7ee0f6cd54fb56727a6e211c88c82e06141b11b92c8f109 5805 non-free/binary-s390x/Packages.gz
- 640cb4aa183bad6baf468fe014842c9ccebc186f2362e0e9684a0f137ae9b083 169 non-free/binary-s390x/Release
- 9418f25377f008cfcff977fb057fcbc636f7eeb57b90680c825c31ea9e70f6b9 20438 non-free/binary-sparc/Packages
- 764e1a1be89b877a04fc132946becf6220e4210607cc43aa8186d755a15a9caa 5570 non-free/binary-sparc/Packages.bz2
- f24b7acd306cd258d7ee0f6cd54fb56727a6e211c88c82e06141b11b92c8f109 5805 non-free/binary-sparc/Packages.gz
- 9557109452703575618cdec2c29d56ae54e4d515897f654878fa33c8f08c11b3 169 non-free/binary-sparc/Release
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-all/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 non-free/debian-installer/binary-all/Packages.bz2
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-all/Packages.gz
- 8918675fadc9eebe2c331d82c95b446c9beceba6e64057e7699f7b017043fca2 167 non-free/debian-installer/binary-all/Release
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-amd64/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 non-free/debian-installer/binary-amd64/Packages.bz2
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-amd64/Packages.gz
- 0491de1431b49ae3ed04caf3c01d3d894d8123ac913225015fc667c8a2ed01ee 169 non-free/debian-installer/binary-amd64/Release
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-armel/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 non-free/debian-installer/binary-armel/Packages.bz2
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-armel/Packages.gz
- cbc0530c91253bb3d264a486e850f8717b5ee7507f71ce2bee7a0579ebf3e696 169 non-free/debian-installer/binary-armel/Release
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-armhf/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 non-free/debian-installer/binary-armhf/Packages.bz2
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-armhf/Packages.gz
- 5d28c1733de1e4849a10f260a7b54e32f4f137e69b99aad5ab983fb64608f1df 169 non-free/debian-installer/binary-armhf/Release
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-i386/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 non-free/debian-installer/binary-i386/Packages.bz2
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-i386/Packages.gz
- 493bcb093fddbcab3d5ef0f1af40ab9c8bf70b2cc6a43cb44a13c1e6bf3e67a8 168 non-free/debian-installer/binary-i386/Release
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-ia64/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 non-free/debian-installer/binary-ia64/Packages.bz2
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-ia64/Packages.gz
- 24f6f1e57776f7539dbeac178e12952a7feb754ed1ea5be719e3af58062de02f 168 non-free/debian-installer/binary-ia64/Release
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-kfreebsd-amd64/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 non-free/debian-installer/binary-kfreebsd-amd64/Packages.bz2
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-kfreebsd-amd64/Packages.gz
- 68ba83dce2ab39aedc29dfcc3a8740ce8247fcbad94cc60bfd4bd7d7d059518d 178 non-free/debian-installer/binary-kfreebsd-amd64/Release
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-kfreebsd-i386/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 non-free/debian-installer/binary-kfreebsd-i386/Packages.bz2
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-kfreebsd-i386/Packages.gz
- 0955151e699f53cd5c865e64251bcaf409a9b4bb48a414538b33488c021ad442 177 non-free/debian-installer/binary-kfreebsd-i386/Release
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-mips/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 non-free/debian-installer/binary-mips/Packages.bz2
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-mips/Packages.gz
- a751f134211e8b37375007883ab323d0f67e78d6d67341e667162c2253834184 168 non-free/debian-installer/binary-mips/Release
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-mipsel/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 non-free/debian-installer/binary-mipsel/Packages.bz2
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-mipsel/Packages.gz
- 168dd50fe7b88f1169de213af2bcc15c2f7a39d85edd0cf21fbc744d883d0139 170 non-free/debian-installer/binary-mipsel/Release
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-powerpc/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 non-free/debian-installer/binary-powerpc/Packages.bz2
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-powerpc/Packages.gz
- 8bb794b5b0108f8534a00ec0485c3d37059bd52c9092137ecd0ee47a8332d96e 171 non-free/debian-installer/binary-powerpc/Release
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-s390/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 non-free/debian-installer/binary-s390/Packages.bz2
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-s390/Packages.gz
- 7beb853133574ab5667b33daf2eb84dfcf6e20d8feec1abf009508934b18470e 168 non-free/debian-installer/binary-s390/Release
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-s390x/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 non-free/debian-installer/binary-s390x/Packages.bz2
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-s390x/Packages.gz
- 640cb4aa183bad6baf468fe014842c9ccebc186f2362e0e9684a0f137ae9b083 169 non-free/debian-installer/binary-s390x/Release
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-sparc/Packages
- d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 non-free/debian-installer/binary-sparc/Packages.bz2
- f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-sparc/Packages.gz
- 9557109452703575618cdec2c29d56ae54e4d515897f654878fa33c8f08c11b3 169 non-free/debian-installer/binary-sparc/Release
- 2789f8442e76ade168110f73d13089da06d335030e2c959f80d9b6933d2bea89 131565 non-free/i18n/Translation-en
- 51a6faa812b2d21c902e9db73de2f82b63b58c55901b5f1282993af6996c9fe3 21737 non-free/i18n/Translation-en.bz2
- e2db93903544885c673f69cf0e99a675c4ae3b4ea7a28b9fee9a7d245a2a62eb 2980 non-free/i18n/Translation-en.diff/Index
- 34c53449e221ce14bcd3d3c06a65ff19814a67e45d204ce4d6179f77fdc99e69 170 non-free/source/Release
- 2d22e8c34a0de862e6ca1debf0433666220799be017c32d1b9e485958dcdf4a9 43755 non-free/source/Sources
- 334db34bd81e3ca9b45a6d8fb227b3b72dee936fa75ec4dd0037d43280e8634a 10083 non-free/source/Sources.bz2
- 7efd7cffbc3df4291295e58c661876ab5cfa44ba9202b1a843be9a696959bcf7 4456 non-free/source/Sources.diff/Index
- 8fc659c10e69e4952e1b641cfe5ab9dcf3189c273b2801190cd2fed7e63dd98a 10609 non-free/source/Sources.gz
\ No newline at end of file
+Origin: Debian
+Label: Debian
+Suite: stable
+Version: 10.7
+Codename: buster
+Changelogs: http://metadata.ftp-master.debian.org/changelogs/@CHANGEPATH@_changelog
+Date: Sat, 05 Dec 2020 10:35:57 UTC
+Acquire-By-Hash: yes
+Architectures: amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64el s390x
+Components: main contrib non-free
+Description: Debian 10.7 Released 05 December 2020
+MD5Sum:
+ 811507576f30ac20cbbf60727a806ec6 1356901 contrib/Contents-amd64
+ 71c6b30a40bc923c803520b2c1b1c22f 102635 contrib/Contents-amd64.gz
+ f15ab65dc63759004ec988abecd65e9e 1075476 contrib/Contents-arm64
+ ecc9200020eb4b13aa4813171eb9118d 84016 contrib/Contents-arm64.gz
+ 676e2e1aba5bac2737acba11457c1b80 1072443 contrib/Contents-armel
+ a797ac094917d1cf47a9225a7a9c3216 83766 contrib/Contents-armel.gz
+ 47bc4a4cd68ebc9481fab48e1f0b9003 1080904 contrib/Contents-armhf
+ 82aa19149bdf972afba35c8e9e77bb17 84798 contrib/Contents-armhf.gz
+ 09ad93c6e7ebeceeeefd1c50a564b346 1143948 contrib/Contents-i386
+ c69566c8c80c2c8a5457be46cd596a78 90478 contrib/Contents-i386.gz
+ 3c268400200bc805cafcc108c5188e44 1075642 contrib/Contents-mips
+ 527e948e4357fbb7bd57ff03a426dc5e 84001 contrib/Contents-mips.gz
+ f3fbd545d9c657455e13228df11d6b50 1074552 contrib/Contents-mips64el
+ 6cc26c41eb6f1c0984c8124c354e3937 83874 contrib/Contents-mips64el.gz
+ f0b81c783d3d131e7bc6e8650028cae6 1075659 contrib/Contents-mipsel
+ 99663ce5790eda2371ff7f7e0b24b588 84014 contrib/Contents-mipsel.gz
+ 39a1024465b566689892a9eb6d0a038e 1075941 contrib/Contents-ppc64el
+ 29c2c4753948b7aeee341635793ef22a 83977 contrib/Contents-ppc64el.gz
+ 1535a8917c15a80e810021ff1e2607c4 1072966 contrib/Contents-s390x
+ 16e48dca693f5f0a7dd57cf5c4eb7251 83555 contrib/Contents-s390x.gz
+ 92a4ddb55c7c33ef2c84a0ab1ac22170 4560575 contrib/Contents-source
+ ae9f65c0c8d8a5f4de6e846e84e73f4b 373646 contrib/Contents-source.gz
+ d41d8cd98f00b204e9800998ecf8427e 0 contrib/Contents-udeb-amd64
+ 4a4dd3598707603b3f76a2378a4504aa 20 contrib/Contents-udeb-amd64.gz
+ d41d8cd98f00b204e9800998ecf8427e 0 contrib/Contents-udeb-arm64
+ 4a4dd3598707603b3f76a2378a4504aa 20 contrib/Contents-udeb-arm64.gz
+ d41d8cd98f00b204e9800998ecf8427e 0 contrib/Contents-udeb-armel
+ 4a4dd3598707603b3f76a2378a4504aa 20 contrib/Contents-udeb-armel.gz
+ d41d8cd98f00b204e9800998ecf8427e 0 contrib/Contents-udeb-armhf
+ 4a4dd3598707603b3f76a2378a4504aa 20 contrib/Contents-udeb-armhf.gz
+ d41d8cd98f00b204e9800998ecf8427e 0 contrib/Contents-udeb-i386
+ 4a4dd3598707603b3f76a2378a4504aa 20 contrib/Contents-udeb-i386.gz
+ d41d8cd98f00b204e9800998ecf8427e 0 contrib/Contents-udeb-mips
+ 4a4dd3598707603b3f76a2378a4504aa 20 contrib/Contents-udeb-mips.gz
+ d41d8cd98f00b204e9800998ecf8427e 0 contrib/Contents-udeb-mips64el
+ 4a4dd3598707603b3f76a2378a4504aa 20 contrib/Contents-udeb-mips64el.gz
+ d41d8cd98f00b204e9800998ecf8427e 0 contrib/Contents-udeb-mipsel
+ 4a4dd3598707603b3f76a2378a4504aa 20 contrib/Contents-udeb-mipsel.gz
+ d41d8cd98f00b204e9800998ecf8427e 0 contrib/Contents-udeb-ppc64el
+ 4a4dd3598707603b3f76a2378a4504aa 20 contrib/Contents-udeb-ppc64el.gz
+ d41d8cd98f00b204e9800998ecf8427e 0 contrib/Contents-udeb-s390x
+ 4a4dd3598707603b3f76a2378a4504aa 20 contrib/Contents-udeb-s390x.gz
+ 442711ec7af297f6e2ddd8bafd2aa5ea 98559 contrib/binary-all/Packages
+ 1feaacc94448fc8905a29272e7527b88 26589 contrib/binary-all/Packages.gz
+ 60c66d44524ac287d367ef9b629ac0b0 22872 contrib/binary-all/Packages.xz
+ e7fbb90665bc579e9751d402641fc3e0 117 contrib/binary-all/Release
+ 41fabc3ab376478e0e76a7a09a796e06 227288 contrib/binary-amd64/Packages
+ 570c9d54ef2f4e7ceb4cd392a1ea11fa 60376 contrib/binary-amd64/Packages.gz
+ ec098b007461aa6c1776072e7bb9c7df 50236 contrib/binary-amd64/Packages.xz
+ 90cb757b24d3ee47c2ce4e392702c670 119 contrib/binary-amd64/Release
+ 667c9853d929fc81bff2417f78a3bacc 167017 contrib/binary-arm64/Packages
+ f48c19d105ae94c9062848bfef20f408 45595 contrib/binary-arm64/Packages.gz
+ 0e177535fdda31191013fdb94826ff8b 38392 contrib/binary-arm64/Packages.xz
+ 89c87b62dd65014146c8e000c0257e7a 119 contrib/binary-arm64/Release
+ 5ca175acac29a7f8bdb3f3a97b99ff36 162625 contrib/binary-armel/Packages
+ f25c56f6aa57cef57dedb5eb7ae165fb 44533 contrib/binary-armel/Packages.gz
+ 966aa9b069ea553c1c5e47ae756c645a 37628 contrib/binary-armel/Packages.xz
+ 0068fc8b67ecf461a42b73e9c6032ba4 119 contrib/binary-armel/Release
+ 27f73aad12b6eb2ee927e186bd9750f5 174724 contrib/binary-armhf/Packages
+ 536e28160527dc2eae93dbc51afafd62 47683 contrib/binary-armhf/Packages.gz
+ f5ce2ed2e4064fd767b729fe2fa416a2 40096 contrib/binary-armhf/Packages.xz
+ 15c942727ed1e465fab28016bd75ac0d 119 contrib/binary-armhf/Release
+ 2616550f776e43cc6032ed07a2a73a44 206737 contrib/binary-i386/Packages
+ 235f3b6c8b6092af51e06dcc91c9010f 55449 contrib/binary-i386/Packages.gz
+ 53141a204404ad25d4d9b38da2b27ed0 46132 contrib/binary-i386/Packages.xz
+ 753defbd14fa63473cfd91c20f66893d 118 contrib/binary-i386/Release
+ 20b800a190455a428e6581351be5eca2 167136 contrib/binary-mips/Packages
+ 2bdc16706a42fbc7075bb6c9ab45500e 45932 contrib/binary-mips/Packages.gz
+ 6992c61321b685daaf42a0483d8ae231 38528 contrib/binary-mips/Packages.xz
+ 1e57761c3b8793adac4e5155b28b91f3 118 contrib/binary-mips/Release
+ 6383dea846ca8e6e09efc0eb969ff035 166369 contrib/binary-mips64el/Packages
+ 3bba1443f877e96f86b24cef754bc798 45086 contrib/binary-mips64el/Packages.gz
+ 81e4988ef5590096034629ede93f65f7 38180 contrib/binary-mips64el/Packages.xz
+ bc4dc5721d9b23b1f3caf569400a6727 122 contrib/binary-mips64el/Release
+ 84bba6436aae87efae86797e6f543940 167464 contrib/binary-mipsel/Packages
+ 91dfa6f6151b67a40e8f030ffe718622 45960 contrib/binary-mipsel/Packages.gz
+ 1c6f9e368cfec4479270f4f03a2250fb 38528 contrib/binary-mipsel/Packages.xz
+ 16b05b7c666c1c28e1424735d3c66ca5 120 contrib/binary-mipsel/Release
+ 303ad3d88546c1eac36e109e5a3d5caf 168194 contrib/binary-ppc64el/Packages
+ 387d4aef431798a19f9928353680742b 45836 contrib/binary-ppc64el/Packages.gz
+ f93be05f66940a74e57e436b9f8a6a71 38604 contrib/binary-ppc64el/Packages.xz
+ aa2bac1df7d66ea953fd3b2818de0f9a 121 contrib/binary-ppc64el/Release
+ 16f8badc92317e2998911b2066958f8a 164846 contrib/binary-s390x/Packages
+ cb996459079cbfd2aacfb5ae2be75c5a 45123 contrib/binary-s390x/Packages.gz
+ dbd01877994b73f76c0119443dbb533d 37960 contrib/binary-s390x/Packages.xz
+ 3845dd4e23aab2172b3651507cd2ef03 119 contrib/binary-s390x/Release
+ d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-all/Packages
+ 4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-all/Packages.gz
+ 8dc5aea5b03dff8595f096f9e368e888 32 contrib/debian-installer/binary-all/Packages.xz
+ e7fbb90665bc579e9751d402641fc3e0 117 contrib/debian-installer/binary-all/Release
+ d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-amd64/Packages
+ 4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-amd64/Packages.gz
+ 8dc5aea5b03dff8595f096f9e368e888 32 contrib/debian-installer/binary-amd64/Packages.xz
+ 90cb757b24d3ee47c2ce4e392702c670 119 contrib/debian-installer/binary-amd64/Release
+ d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-arm64/Packages
+ 4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-arm64/Packages.gz
+ 8dc5aea5b03dff8595f096f9e368e888 32 contrib/debian-installer/binary-arm64/Packages.xz
+ 89c87b62dd65014146c8e000c0257e7a 119 contrib/debian-installer/binary-arm64/Release
+ d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-armel/Packages
+ 4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-armel/Packages.gz
+ 8dc5aea5b03dff8595f096f9e368e888 32 contrib/debian-installer/binary-armel/Packages.xz
+ 0068fc8b67ecf461a42b73e9c6032ba4 119 contrib/debian-installer/binary-armel/Release
+ d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-armhf/Packages
+ 4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-armhf/Packages.gz
+ 8dc5aea5b03dff8595f096f9e368e888 32 contrib/debian-installer/binary-armhf/Packages.xz
+ 15c942727ed1e465fab28016bd75ac0d 119 contrib/debian-installer/binary-armhf/Release
+ d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-i386/Packages
+ 4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-i386/Packages.gz
+ 8dc5aea5b03dff8595f096f9e368e888 32 contrib/debian-installer/binary-i386/Packages.xz
+ 753defbd14fa63473cfd91c20f66893d 118 contrib/debian-installer/binary-i386/Release
+ d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-mips/Packages
+ 4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-mips/Packages.gz
+ 8dc5aea5b03dff8595f096f9e368e888 32 contrib/debian-installer/binary-mips/Packages.xz
+ 1e57761c3b8793adac4e5155b28b91f3 118 contrib/debian-installer/binary-mips/Release
+ d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-mips64el/Packages
+ 4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-mips64el/Packages.gz
+ 8dc5aea5b03dff8595f096f9e368e888 32 contrib/debian-installer/binary-mips64el/Packages.xz
+ bc4dc5721d9b23b1f3caf569400a6727 122 contrib/debian-installer/binary-mips64el/Release
+ d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-mipsel/Packages
+ 4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-mipsel/Packages.gz
+ 8dc5aea5b03dff8595f096f9e368e888 32 contrib/debian-installer/binary-mipsel/Packages.xz
+ 16b05b7c666c1c28e1424735d3c66ca5 120 contrib/debian-installer/binary-mipsel/Release
+ d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-ppc64el/Packages
+ 4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-ppc64el/Packages.gz
+ 8dc5aea5b03dff8595f096f9e368e888 32 contrib/debian-installer/binary-ppc64el/Packages.xz
+ aa2bac1df7d66ea953fd3b2818de0f9a 121 contrib/debian-installer/binary-ppc64el/Release
+ d41d8cd98f00b204e9800998ecf8427e 0 contrib/debian-installer/binary-s390x/Packages
+ 4a4dd3598707603b3f76a2378a4504aa 20 contrib/debian-installer/binary-s390x/Packages.gz
+ 8dc5aea5b03dff8595f096f9e368e888 32 contrib/debian-installer/binary-s390x/Packages.xz
+ 3845dd4e23aab2172b3651507cd2ef03 119 contrib/debian-installer/binary-s390x/Release
+ ec956928e3e97c16ce51dc23850891da 103445 contrib/dep11/Components-amd64.yml
+ b822d803017967b38ed80d71b0dd46f6 12945 contrib/dep11/Components-amd64.yml.gz
+ b291a35c699ef0e97d89cb45e8e6425e 11504 contrib/dep11/Components-amd64.yml.xz
+ 665ed78bc919c6d10b58ee3cd0af7aae 103445 contrib/dep11/Components-arm64.yml
+ 8d50ebb0934fda2248f03e150f98943c 12903 contrib/dep11/Components-arm64.yml.gz
+ 45d5d030de525d849ca7dd45f265c6eb 11516 contrib/dep11/Components-arm64.yml.xz
+ d3d0795a9c89fec6d1256fee7a79989c 99187 contrib/dep11/Components-armel.yml
+ 171a096100ad8d45b1bb2c182d33d038 12210 contrib/dep11/Components-armel.yml.gz
+ 897c0a8a6d777db873a11fd2891819de 10720 contrib/dep11/Components-armel.yml.xz
+ 15116dbc0b352fc234b8fc298eb8fbb7 101441 contrib/dep11/Components-armhf.yml
+ 33e3f201a9ece89b80022de024d80220 12814 contrib/dep11/Components-armhf.yml.gz
+ c184cc177a13455296d300828dcbd946 11180 contrib/dep11/Components-armhf.yml.xz
+ 81feae838a1738fe9f757f294d16e9cf 101191 contrib/dep11/Components-i386.yml
+ 761a218ab2c00de309a3bd0c74b6b24a 12199 contrib/dep11/Components-i386.yml.gz
+ 2ea8f7169a0b30030ec97cacc11b46bf 11068 contrib/dep11/Components-i386.yml.xz
+ 54ffff085d89a17df3cc29920fd9a5af 101191 contrib/dep11/Components-mips64el.yml
+ c64b104c932fe0291ea276fbdcc8a286 12714 contrib/dep11/Components-mips64el.yml.gz
+ f723d21708e668f0b50617abf6a2b95c 11136 contrib/dep11/Components-mips64el.yml.xz
+ 697e672d9c6aba7d352c8b02cb6cf873 101191 contrib/dep11/Components-ppc64el.yml
+ 9cfce9b087ef099d7d7a5c51fc97ae36 12411 contrib/dep11/Components-ppc64el.yml.gz
+ 5cd33df702cad613a5c06d61537a7fb9 11060 contrib/dep11/Components-ppc64el.yml.xz
+ bd198f18cae5d51ef7f4c51260de3487 101191 contrib/dep11/Components-s390x.yml
+ a5df1415281a7ef864aea8b2b00637af 12351 contrib/dep11/Components-s390x.yml.gz
+ b078638ea8750fef2fb9e6dc10b9d40f 11076 contrib/dep11/Components-s390x.yml.xz
+ 437c9335eaaa898f9d0d5924fbe6cdf7 266240 contrib/dep11/icons-128x128.tar
+ 7410281d597da0fbed09db823e7afc44 226447 contrib/dep11/icons-128x128.tar.gz
+ ab362cc15a02c056eb4576a9a07ba7c8 87552 contrib/dep11/icons-48x48.tar
+ 791cd086dff0b50f33c0ab9ed69ec8f2 56361 contrib/dep11/icons-48x48.tar.gz
+ dc1559abf1adf3e202e703dfc43b26f9 152064 contrib/dep11/icons-64x64.tar
+ 88467f294491b80429ac2f2be92e26be 110187 contrib/dep11/icons-64x64.tar.gz
+ be2d4a1b00c65b21689be1be286bfac4 180788 contrib/i18n/Translation-en
+ 260bd29500d2636121b5d8a8653a5f99 44160 contrib/i18n/Translation-en.bz2
+ 9a00d72cbb8a0c3f5f4a7e34a19ebabf 120 contrib/source/Release
+ 6b644bdc3d569c9ea0717bf679ef45e6 171415 contrib/source/Sources
+ d9cad2e9f54a54cf418a368d4fd8c836 50324 contrib/source/Sources.gz
+ af6ebca8d1acd3dc4c6c7c09153fc789 42524 contrib/source/Sources.xz
+ a356cb9c62586e9421ef22efc40160fb 544269024 main/Contents-amd64
+ 07bba89a4cf38da79cb88adc88d8f3d2 37329769 main/Contents-amd64.gz
+ f37ba6046f1f692c65027282b9dd6d58 529782549 main/Contents-arm64
+ 2a1d95eac44bdcf5b29b71b6a642e16e 36507963 main/Contents-arm64.gz
+ 1b2aaa3a7bd19c60743cba8f081018b0 521282981 main/Contents-armel
+ 299acdd9e8ad526181a8f87e89835e10 35956662 main/Contents-armel.gz
+ 3cfe120dbf9ba1491b5b2f9c3088f21e 528756979 main/Contents-armhf
+ 9c7d6900e4b07dc1fcbc0dbb8b7a8912 36456075 main/Contents-armhf.gz
+ c4f1d7a46ee070c0ec1d9e79e2bf87c7 545147025 main/Contents-i386
+ b4253c077d3105830c0c0f214bcc550b 37351315 main/Contents-i386.gz
+ 22422f11306f4ed3be8d20fd1fdfcf28 522760520 main/Contents-mips
+ fcfadc393f1e2946caadd837d73a665b 36036428 main/Contents-mips.gz
+ fdf5f43cd735702d4ea9d4a84fe1d551 524387669 main/Contents-mips64el
+ 1e653405e2bebf8bb17b819a0e56399a 36106653 main/Contents-mips64el.gz
+ d90c1ab4aef974497055761988931e6d 526408849 main/Contents-mipsel
+ 1ba92eb12f2c88d83389b3da7e48de75 36291254 main/Contents-mipsel.gz
+ f7ac1bb8c12c7de2b9b9186d387e2d48 525623049 main/Contents-ppc64el
+ 06e601917909599d1b630c0590c4b5a4 36164749 main/Contents-ppc64el.gz
+ 8e6c9c94892aa3fc9ae7dadf21b9b0af 518948132 main/Contents-s390x
+ b552beb74edd8714c4b06c64cb6a70b7 35843209 main/Contents-s390x.gz
+ 8bd0373ed9c9fccefa0e2051142459cc 562813257 main/Contents-source
+ 9c4f2e1617cf7aef2cda6ffb13b461d8 62910627 main/Contents-source.gz
+ d374c66d0b6a6733dafe05069e6d85fc 612676 main/Contents-udeb-amd64
+ 9cb96f20a7625c0124cc80c89f28c1d9 48325 main/Contents-udeb-amd64.gz
+ 552ae813cd82d3b809670b606ff72bf2 602615 main/Contents-udeb-arm64
+ cb4a58cdc1271834c578ab0080e1f427 47303 main/Contents-udeb-arm64.gz
+ f07d8cb30637b2ab0a8410bfe932f41a 479897 main/Contents-udeb-armel
+ cff2d4f826607070ee22b00e97e78929 38663 main/Contents-udeb-armel.gz
+ d39c4fbb0c01d294d4d261c036536f69 694946 main/Contents-udeb-armhf
+ 664d1f4cdd0482805032d5ffcd6ddc99 53579 main/Contents-udeb-armhf.gz
+ 9fa9ff70518916f7beaaccdcbf991fc3 873048 main/Contents-udeb-i386
+ e55fb627daf06e3a053fcb2460bdfa28 65269 main/Contents-udeb-i386.gz
+ 65cb1e936777fdd0e95bc792415fbb30 722121 main/Contents-udeb-mips
+ a5c3896de85771cef476a3248698b15c 54179 main/Contents-udeb-mips.gz
+ 7749fa5d76b86d0c610e3c96ce5194aa 896156 main/Contents-udeb-mips64el
+ e3d864cc585c280f7bb20c45af26e3a0 65165 main/Contents-udeb-mips64el.gz
+ bdbe953bd99adf5b1c8bd953ebf8f173 896790 main/Contents-udeb-mipsel
+ f22f8ca795be2f8313e8c0e5cea7e80b 65657 main/Contents-udeb-mipsel.gz
+ 9e3632e249151d83388059602b618cf1 549534 main/Contents-udeb-ppc64el
+ e6f63c95cd06c9f9a279856f291539e0 42112 main/Contents-udeb-ppc64el.gz
+ 441173cc864e6cd011d095ad41fa79d2 401986 main/Contents-udeb-s390x
+ 67aae48377ea8edd8b2274b410dd2acf 32973 main/Contents-udeb-s390x.gz
+ f01e30984c7ae13c926a49c66b58cf8b 20390421 main/binary-all/Packages
+ 93ec96c5f99b7711ffa980f46da33e59 5111764 main/binary-all/Packages.gz
+ f45d82d3b8406a9cc83cd79c08c45420 3842444 main/binary-all/Packages.xz
+ 8591eb3bd82bade7901c90592c82e146 114 main/binary-all/Release
+ a7ed5e70875d114cb3407b76ef4a0193 44656195 main/binary-amd64/Packages
+ a1167a2208d00941d4503c2276670317 10739377 main/binary-amd64/Packages.gz
+ 6043a440cb8038062bed716e76b3d7e7 7907472 main/binary-amd64/Packages.xz
+ 88b62a196e01cd813c8b8162980c4a0d 116 main/binary-amd64/Release
+ 42c3512dffdaa0aa196c2eb0a03ea315 43514688 main/binary-arm64/Packages
+ fcd237afb84932ac220f1f7a7baa65af 10513209 main/binary-arm64/Packages.gz
+ 62d03f622aa153be358f9c7016d4ade3 7736792 main/binary-arm64/Packages.xz
+ 322314350e3c6c9b0925ff36223138c7 116 main/binary-arm64/Release
+ c91c335985c1a72c788e01c97d9e1412 42670055 main/binary-armel/Packages
+ 2a61b30970605b648e20176a05e5f8dd 10362991 main/binary-armel/Packages.gz
+ 6639382d8d01f82052b2f273dcb74e5a 7627288 main/binary-armel/Packages.xz
+ cd7a385b4f9ec5b88fd51334b1ecc182 116 main/binary-armel/Release
+ ce6c22b632cf57f95711899535ee8baa 43208104 main/binary-armhf/Packages
+ ed5ddf82b8c0d6b24381425c0ae1690f 10466710 main/binary-armhf/Packages.gz
+ 7838bb1df385f65d3dde36b902fc4c83 7697896 main/binary-armhf/Packages.xz
+ 71dc245cf6acffd9d84dc4e0c6dfefd7 116 main/binary-armhf/Release
+ c1901bc36e2e0af45f9181d89d99bf33 44343034 main/binary-i386/Packages
+ 568f8488b9331ef92986036b6b0e9433 10688157 main/binary-i386/Packages.gz
+ afbccdbb97f95e2fc05fd275b0ef944b 7863200 main/binary-i386/Packages.xz
+ a61c08021d5e3c5cb8342cc89b4a5327 115 main/binary-i386/Release
+ 0f30136ccdeebe351fd76cddec0a36a7 42557231 main/binary-mips/Packages
+ 8041fb6f7ed0b30c3ef4f49b0f0419fc 10346394 main/binary-mips/Packages.gz
+ 5fd6c02578b6e2601b5af388b76ec0c9 7612396 main/binary-mips/Packages.xz
+ 9c0910db326874db3e6184c362dd10b7 115 main/binary-mips/Release
+ 7930f45053524f18b5bc0635c7015174 42846249 main/binary-mips64el/Packages
+ 9d03ab2e18a79590436d5c1e3db30020 10373188 main/binary-mips64el/Packages.gz
+ 5087845b4bd1c3f1f99fd9596eefd1a4 7636864 main/binary-mips64el/Packages.xz
+ 93e21d97b9f854d2c028389799a8cdd4 119 main/binary-mips64el/Release
+ 7301d9b4a2bc9ae31db035006116ead7 43000527 main/binary-mipsel/Packages
+ 22788acdf68c11251fa487542d530310 10412166 main/binary-mipsel/Packages.gz
+ 0fe070a4e4cd5ce9a7662927419e1a36 7659328 main/binary-mipsel/Packages.xz
+ 489ffe3ae830b933e033b4aa92a9e593 117 main/binary-mipsel/Release
+ 3c8882493245813c9417af085567c824 43280940 main/binary-ppc64el/Packages
+ 91ef02584aa623ef1b4f1f4c33437d9a 10455452 main/binary-ppc64el/Packages.gz
+ 45ffbc0a18c7b7b36f4d625ef51d1714 7692576 main/binary-ppc64el/Packages.xz
+ 6791cb55dcbce2c6025f505de0bbe19d 118 main/binary-ppc64el/Release
+ 4b05fdf6bfd32738b7dd61d5a7a67277 42631824 main/binary-s390x/Packages
+ 29de43d4f62e8ce0553e2db8d6630565 10361868 main/binary-s390x/Packages.gz
+ 9f42b63d928857c1ee46fdb64814872e 7623224 main/binary-s390x/Packages.xz
+ 2266e386bba07fde1acaac2a5eacff13 116 main/binary-s390x/Release
+ 3c7838ecfb2a711692e457ac86d64924 63142 main/debian-installer/binary-all/Packages
+ 25349cd6dfc4f1c81701888a2ef14994 17278 main/debian-installer/binary-all/Packages.gz
+ f543df84a8473128d2eda978516544da 15132 main/debian-installer/binary-all/Packages.xz
+ 8591eb3bd82bade7901c90592c82e146 114 main/debian-installer/binary-all/Release
+ 0fad80ac57eb694714875481a8c376d2 271411 main/debian-installer/binary-amd64/Packages
+ f203e2d43cb0cd85ab67d6b604378b99 66996 main/debian-installer/binary-amd64/Packages.gz
+ b0a4c2652c8729d27ec07421ac5abbe6 55500 main/debian-installer/binary-amd64/Packages.xz
+ 88b62a196e01cd813c8b8162980c4a0d 116 main/debian-installer/binary-amd64/Release
+ d5bfb66a68c8a9e92a966a5e0100b6c3 255344 main/debian-installer/binary-arm64/Packages
+ 458325cdd4c467228035622c3256786a 63881 main/debian-installer/binary-arm64/Packages.gz
+ 61615f501e9c3902132e8f106751e7df 53440 main/debian-installer/binary-arm64/Packages.xz
+ 322314350e3c6c9b0925ff36223138c7 116 main/debian-installer/binary-arm64/Release
+ 06da1163d43690b260b5e0ebee608e22 248135 main/debian-installer/binary-armel/Packages
+ 3e0a6e691c2be246843a54d8154e1bee 63564 main/debian-installer/binary-armel/Packages.gz
+ c1183a890893f574330d89133bde453f 52876 main/debian-installer/binary-armel/Packages.xz
+ cd7a385b4f9ec5b88fd51334b1ecc182 116 main/debian-installer/binary-armel/Release
+ bfc524d4617e155f1a5fcf0b5acdfea9 251177 main/debian-installer/binary-armhf/Packages
+ 4d4968b169a5151901ef613ea5fcaa5c 63799 main/debian-installer/binary-armhf/Packages.gz
+ 416cdce4b269142110d05bb20958f0fc 53524 main/debian-installer/binary-armhf/Packages.xz
+ 71dc245cf6acffd9d84dc4e0c6dfefd7 116 main/debian-installer/binary-armhf/Release
+ 21aad5f0edfb71fe916fc4b51523065b 345002 main/debian-installer/binary-i386/Packages
+ c475d3f4c3adccde26ce9d90095771c2 76332 main/debian-installer/binary-i386/Packages.gz
+ c75b2f5fd182162f5b069949f6083241 63380 main/debian-installer/binary-i386/Packages.xz
+ a61c08021d5e3c5cb8342cc89b4a5327 115 main/debian-installer/binary-i386/Release
+ 5b147b519345336240033c5d80b2273f 307351 main/debian-installer/binary-mips/Packages
+ 30f75c24f880d771834c06fa087b6311 71711 main/debian-installer/binary-mips/Packages.gz
+ 02aba1bdc792818f1c84156a709ff97a 59860 main/debian-installer/binary-mips/Packages.xz
+ 9c0910db326874db3e6184c362dd10b7 115 main/debian-installer/binary-mips/Release
+ c0dd5ee95547670d687ecf9f553fcf80 370605 main/debian-installer/binary-mips64el/Packages
+ 7bd6bb429dc4eb9755f4562a9fff24fa 80509 main/debian-installer/binary-mips64el/Packages.gz
+ 33a7b38b849b4de5e6cb9caf89e8333d 66792 main/debian-installer/binary-mips64el/Packages.xz
+ 93e21d97b9f854d2c028389799a8cdd4 119 main/debian-installer/binary-mips64el/Release
+ cca5f3369f5b9db863673efd97f34ce2 370026 main/debian-installer/binary-mipsel/Packages
+ c5a4d2b92f959cc2e69341de92c1aa92 80667 main/debian-installer/binary-mipsel/Packages.gz
+ b2679b0f864321d44f673ad9cb18cbe9 66912 main/debian-installer/binary-mipsel/Packages.xz
+ 489ffe3ae830b933e033b4aa92a9e593 117 main/debian-installer/binary-mipsel/Release
+ 5d929059d701cc70a9d7a9040ef49d48 254867 main/debian-installer/binary-ppc64el/Packages
+ fd7768f30e134817aab9e9d473240084 64252 main/debian-installer/binary-ppc64el/Packages.gz
+ 0aefa3b052e9c19aa9e2db179f9e3a2a 53500 main/debian-installer/binary-ppc64el/Packages.xz
+ 6791cb55dcbce2c6025f505de0bbe19d 118 main/debian-installer/binary-ppc64el/Release
+ b56c5642efcf04e986e8e2bb4dcebe4b 225602 main/debian-installer/binary-s390x/Packages
+ 47c6bc193e00dbfaca0706813adf87e0 59739 main/debian-installer/binary-s390x/Packages.gz
+ 69e66466ff21fbc925455d9f93d9e413 49824 main/debian-installer/binary-s390x/Packages.xz
+ 2266e386bba07fde1acaac2a5eacff13 116 main/debian-installer/binary-s390x/Release
+ b96f87c0a5d7b5963acaf8adb09075ea 17636009 main/dep11/Components-amd64.yml
+ d990e48fd695b2267feccb1ea63acdd6 5882693 main/dep11/Components-amd64.yml.gz
+ 4e9b9a054e5f62e9701a2a30bdf464b0 3807040 main/dep11/Components-amd64.yml.xz
+ 10a265ac5e8364852e0fb7f0bdd2fe90 17503252 main/dep11/Components-arm64.yml
+ fdc60299aa57d047aac6019e2d4b4d0c 5850429 main/dep11/Components-arm64.yml.gz
+ b39cf9a70365ba39f190e5996a1d95c7 3781052 main/dep11/Components-arm64.yml.xz
+ 7a29c827ab47be6214b1ea6950cdabce 17108464 main/dep11/Components-armel.yml
+ 1df880b8342a9a90c297d5a6d8c67b2b 5710419 main/dep11/Components-armel.yml.gz
+ 7ea81e0b33e39311b7492288ab536d22 3694524 main/dep11/Components-armel.yml.xz
+ 588eeca71f4fc4e38d69a28b609a1074 17414118 main/dep11/Components-armhf.yml
+ 79ad6138562c9e2458e6071a566d98e0 5813436 main/dep11/Components-armhf.yml.gz
+ eb357a2ffaeed4fd7269066dd5c06ecd 3761128 main/dep11/Components-armhf.yml.xz
+ f7394bafe6bcad481e532f987cd3332c 17595585 main/dep11/Components-i386.yml
+ bd92af3fd5c952b2d5414967adb2ef4c 5873032 main/dep11/Components-i386.yml.gz
+ 4049f174864f75c554ad1bbba90f39f3 3798312 main/dep11/Components-i386.yml.xz
+ a5bb60f71b930ac854b2a8350ccd53a5 17138095 main/dep11/Components-mips64el.yml
+ 451219859dd3cbe7bbb18fc300eb88dc 5721423 main/dep11/Components-mips64el.yml.gz
+ 5c6f25c2d6efefdd50ddbf3701c1a3f3 3700172 main/dep11/Components-mips64el.yml.xz
+ 706e7d78873ac1b40fbf969f8df21076 17193596 main/dep11/Components-ppc64el.yml
+ a17d1417ee23a62c0bd0f5c38785c3cf 5735595 main/dep11/Components-ppc64el.yml.gz
+ 5eccbad47150c50b67f32e954850f238 3712596 main/dep11/Components-ppc64el.yml.xz
+ 4034ba73954352a1d16dc8956087203b 16895854 main/dep11/Components-s390x.yml
+ 7f81bb7a4ef589b3784a0f891ada1020 5630817 main/dep11/Components-s390x.yml.gz
+ 92973453ea935493359f1ccb54666668 3649696 main/dep11/Components-s390x.yml.xz
+ cef7f6b822b761933cad9e81fc312d65 14067712 main/dep11/icons-128x128.tar
+ af3a6676c322b21db078c1ecb19dd148 12784398 main/dep11/icons-128x128.tar.gz
+ cd6bcfcb05ca143a96afd0dc23a60a0d 5092352 main/dep11/icons-48x48.tar
+ d29d763d0dc55a3fba88f6ac32e7dbec 3769936 main/dep11/icons-48x48.tar.gz
+ aa6fe219908873a01f9a75335cd2e834 9509888 main/dep11/icons-64x64.tar
+ 8c9f7501ca2a85480c6f03eb84eb864c 7595526 main/dep11/icons-64x64.tar.gz
+ fa47006302dbafc5528170cb894e89ee 8583 main/i18n/Translation-ca
+ f9414bf874a93cef66aea7c000e783d2 3510 main/i18n/Translation-ca.bz2
+ 07bd7cac4615a58b744fef7bdc3be27a 1366172 main/i18n/Translation-cs
+ 768f92c13031a48e1932eccc1f95e253 364196 main/i18n/Translation-cs.bz2
+ 592a2601d97924c29d90cb73d1dc5766 19338879 main/i18n/Translation-da
+ 7e827c691840e04a11603253eb7fe918 4250838 main/i18n/Translation-da.bz2
+ 3716384a1cf1221f3492b4622de3c0c7 7372339 main/i18n/Translation-de
+ 59ab9917bbf0b4ab15e63ff73c2ebd87 1654058 main/i18n/Translation-de.bz2
+ a344219bf0eec9139d5270017ecfceee 1347 main/i18n/Translation-de_DE
+ 0fe0725f74bb5249f15f30ce965142d5 830 main/i18n/Translation-de_DE.bz2
+ b496cd1efbf91a6ba429e09a5c98fcbe 6733 main/i18n/Translation-el
+ 42887a67e38f7fd8604921849398765a 1616 main/i18n/Translation-el.bz2
+ 7cafa89f86b953d71eb6f51d35d2ed28 29377800 main/i18n/Translation-en
+ ef5614f6b84398a2d096d551c08ab57b 5970967 main/i18n/Translation-en.bz2
+ a8b606406158411b47570cdb3b266d4c 2704 main/i18n/Translation-eo
+ 371019718dd9f3a97f3c2095d1c989f6 1353 main/i18n/Translation-eo.bz2
+ cd993e966e0f1eacdc856fa568a6f676 1386165 main/i18n/Translation-es
+ aab2ac38999cd83a7ce8e76f2a9cb770 334639 main/i18n/Translation-es.bz2
+ c46ea462e3be8ad325f5cf28f7cd7941 12877 main/i18n/Translation-eu
+ 44a5a9553ab64cee611cfb29eb5fe405 4940 main/i18n/Translation-eu.bz2
+ 2edeb5b568cab2b35bcd9da365a3700a 292391 main/i18n/Translation-fi
+ 3e7a9339ea3232a762e557dd0ecdd9eb 83317 main/i18n/Translation-fi.bz2
+ 998e60f465b03be25eaf2b2430685f67 12076413 main/i18n/Translation-fr
+ 35e89f49cdfaa179e552aee1d67c5cdb 2478327 main/i18n/Translation-fr.bz2
+ f9914db645538b20b96244e34733d47b 19295 main/i18n/Translation-hr
+ 91971a211da20a6f48c1394960fa934a 5467 main/i18n/Translation-hr.bz2
+ 195fb7b7be30472752d494b1726147c5 76824 main/i18n/Translation-hu
+ 414de05380433cb378a222a880a7868d 25899 main/i18n/Translation-hu.bz2
+ 84c49b63d2f806c0bfbab936950f851f 5807 main/i18n/Translation-id
+ 2b1519b50480d327bd6f74c2c81d7391 2493 main/i18n/Translation-id.bz2
+ 512e8b23f1e9feb9d5b8c6b79845479d 24318841 main/i18n/Translation-it
+ c35983d50552f4406e01b59187cb276d 4853002 main/i18n/Translation-it.bz2
+ 567dca02563164ed6abd0d61bd2d599b 4944611 main/i18n/Translation-ja
+ 668439d1aafdda8d00c1419ac67963cd 892190 main/i18n/Translation-ja.bz2
+ dae7e1832c27c8588dfa2998f1827d27 14066 main/i18n/Translation-km
+ a641fcf269b0fc95e02f12a24b470180 2744 main/i18n/Translation-km.bz2
+ 635c3c2728a5c873e46eeb020b73c3ef 2085975 main/i18n/Translation-ko
+ 9ddf2c44356facb76517ce3043f5f2d1 467722 main/i18n/Translation-ko.bz2
+ d41d8cd98f00b204e9800998ecf8427e 0 main/i18n/Translation-ml
+ 4059d198768f9f8dc9372dc1c54bc3c3 14 main/i18n/Translation-ml.bz2
+ 255f4e34b3f284a3c0292d110f30331d 2030 main/i18n/Translation-nb
+ 623c4efc2ad76f7f357e216a5064fa8e 1188 main/i18n/Translation-nb.bz2
+ f0da060304e2f6e0d57ba4be8cf4da7e 191719 main/i18n/Translation-nl
+ ca93be5b1833ed6011c75a841fc3aec0 53879 main/i18n/Translation-nl.bz2
+ 05ad8e22643158048836514265ccc683 2280270 main/i18n/Translation-pl
+ 0b2ffcea3fc954994fffabcd58d96d17 543734 main/i18n/Translation-pl.bz2
+ 7221ef57304e7d1c0b597ebfdf02ff72 1228959 main/i18n/Translation-pt
+ 85262e79582e4f52f3dd14e07e968e91 309452 main/i18n/Translation-pt.bz2
+ 35188d93caf5abc81b6f413a13ec1bba 2848622 main/i18n/Translation-pt_BR
+ 54caf5f17bd856e6e5447af20f72c1a9 683144 main/i18n/Translation-pt_BR.bz2
+ 60f08a8c65af4e8895cf8c53d1e35b98 2710 main/i18n/Translation-ro
+ a998260e0995f073174d9e0d1fb65a9f 1374 main/i18n/Translation-ro.bz2
+ f1498d8198317d17d9f79f1d7b59301a 3167815 main/i18n/Translation-ru
+ a272511716d6272bc732457da7e1347d 515734 main/i18n/Translation-ru.bz2
+ 808aa9b0e2051b46af7f79f71d7bab78 7171062 main/i18n/Translation-sk
+ 52c4c9dc0a44449efb055b09f24d6164 1545666 main/i18n/Translation-sk.bz2
+ bf2c9b66fd77430a04968a9b055da51d 346061 main/i18n/Translation-sr
+ 9a5e4866948f872593aa7e08074d9f74 63630 main/i18n/Translation-sr.bz2
+ fcab095643b3d06345d1079281264fe9 101310 main/i18n/Translation-sv
+ 919912db6b193f78e8ac2ca5922653a6 32083 main/i18n/Translation-sv.bz2
+ 4c2ec68a3497dcebe5c4350a4506f9bd 16580 main/i18n/Translation-tr
+ 9b0229b1a12dc754d31c40f7bc920f50 5960 main/i18n/Translation-tr.bz2
+ e6163e4fb7ad7efbf7c239807cf5dfe4 3992741 main/i18n/Translation-uk
+ a9380d85f807b3d0d5733220dd823cfb 624098 main/i18n/Translation-uk.bz2
+ 38d0995e8cfd8ec40f26dbd1ec52420f 26441 main/i18n/Translation-vi
+ b9ad5f6391f3ef928a084ee742c1560d 7797 main/i18n/Translation-vi.bz2
+ 7717fa25bd691ec385bddacf42419c9f 2799 main/i18n/Translation-zh
+ b5a4e7e47da47ac7596ed5d72fdeef93 1526 main/i18n/Translation-zh.bz2
+ 95432a86e622f1b36c7f317e52885699 479128 main/i18n/Translation-zh_CN
+ 808905780a670fb77e1670dfd71ca515 125740 main/i18n/Translation-zh_CN.bz2
+ d7a5b7c2ede44aa04ccc804f228268e4 44731 main/i18n/Translation-zh_TW
+ ac968f92b5010547d38ff6daa39ec759 16257 main/i18n/Translation-zh_TW.bz2
+ 9b2bb26c7b19bbfce667875176e7cfd8 56179 main/installer-amd64/20190702+deb10u7/images/MD5SUMS
+ 6fa1248aafe23867f9e7855eb4ac2606 75295 main/installer-amd64/20190702+deb10u7/images/SHA256SUMS
+ ad49f52e91138552068010feebb60e77 56179 main/installer-amd64/20190702/images/MD5SUMS
+ 665f4bf4b34662ff86de8fd00fd228d3 75295 main/installer-amd64/20190702/images/SHA256SUMS
+ 9b2bb26c7b19bbfce667875176e7cfd8 56179 main/installer-amd64/current/images/MD5SUMS
+ 6fa1248aafe23867f9e7855eb4ac2606 75295 main/installer-amd64/current/images/SHA256SUMS
+ e5e74cdc8a0927057ae51d23f93dd404 30751 main/installer-arm64/20190702+deb10u7/images/MD5SUMS
+ 6e8819d7cabcd5baf7efaf2f4f0024fd 42187 main/installer-arm64/20190702+deb10u7/images/SHA256SUMS
+ a39c3a53db0c77f14a14ccbea1537665 30588 main/installer-arm64/20190702/images/MD5SUMS
+ e8187453c5dbd3609bd0d049c4f9f741 41960 main/installer-arm64/20190702/images/SHA256SUMS
+ e5e74cdc8a0927057ae51d23f93dd404 30751 main/installer-arm64/current/images/MD5SUMS
+ 6e8819d7cabcd5baf7efaf2f4f0024fd 42187 main/installer-arm64/current/images/SHA256SUMS
+ 2123d8e0b43a3377d19322b3c0253534 21361 main/installer-armel/20190702+deb10u7/images/MD5SUMS
+ 0575d93e2640eb129edf41b9d3a40cf4 29821 main/installer-armel/20190702+deb10u7/images/SHA256SUMS
+ c1880211395f66276ee1ca7f3d2f894a 21360 main/installer-armel/20190702/images/MD5SUMS
+ 6db724bf214851668085c774a465a3b8 29820 main/installer-armel/20190702/images/SHA256SUMS
+ 2123d8e0b43a3377d19322b3c0253534 21361 main/installer-armel/current/images/MD5SUMS
+ 0575d93e2640eb129edf41b9d3a40cf4 29821 main/installer-armel/current/images/SHA256SUMS
+ dfb1d8853a96d6dc95ff56ae5b814274 53105 main/installer-armhf/20190702+deb10u7/images/MD5SUMS
+ d5b29779d6916cae607662045b118314 76541 main/installer-armhf/20190702+deb10u7/images/SHA256SUMS
+ 6d90c2edd459b920698ab1dd54407f73 51125 main/installer-armhf/20190702/images/MD5SUMS
+ 1219d67ba3ff45a1893c5654ffd19432 73665 main/installer-armhf/20190702/images/SHA256SUMS
+ dfb1d8853a96d6dc95ff56ae5b814274 53105 main/installer-armhf/current/images/MD5SUMS
+ d5b29779d6916cae607662045b118314 76541 main/installer-armhf/current/images/SHA256SUMS
+ 2cd5528c59cdca4ebba6c4c4c2a5bcb3 54808 main/installer-i386/20190702+deb10u7/images/MD5SUMS
+ d0002231f0a34a3a727c196d7038c427 73988 main/installer-i386/20190702+deb10u7/images/SHA256SUMS
+ dacea188c1cceadfc32a29bec71f4f0d 54808 main/installer-i386/20190702/images/MD5SUMS
+ 2a5644e4b648e33cc10b00c8c1d5ef9a 73988 main/installer-i386/20190702/images/SHA256SUMS
+ 2cd5528c59cdca4ebba6c4c4c2a5bcb3 54808 main/installer-i386/current/images/MD5SUMS
+ d0002231f0a34a3a727c196d7038c427 73988 main/installer-i386/current/images/SHA256SUMS
+ 93b8443d6d17fbcb520d98952ef0cac9 417 main/installer-mips/20190702+deb10u7/images/MD5SUMS
+ f5b5f310b0b8713c2158a9bf7ac96edd 717 main/installer-mips/20190702+deb10u7/images/SHA256SUMS
+ 3c235875cd79118928fd772b2e7adb03 415 main/installer-mips/20190702/images/MD5SUMS
+ 95cc8a69ba4524d31598f85d5b316923 715 main/installer-mips/20190702/images/SHA256SUMS
+ 93b8443d6d17fbcb520d98952ef0cac9 417 main/installer-mips/current/images/MD5SUMS
+ f5b5f310b0b8713c2158a9bf7ac96edd 717 main/installer-mips/current/images/SHA256SUMS
+ 645f588e9a19321394cc3e20d2cd65bc 630 main/installer-mips64el/20190702+deb10u7/images/MD5SUMS
+ 860868ad110a424a7b89f938d6fe2e14 1026 main/installer-mips64el/20190702+deb10u7/images/SHA256SUMS
+ d0162ed7d22164b8f62ba46e82386251 627 main/installer-mips64el/20190702/images/MD5SUMS
+ 8582972e189ce6fb33bf758600bfac95 1023 main/installer-mips64el/20190702/images/SHA256SUMS
+ 645f588e9a19321394cc3e20d2cd65bc 630 main/installer-mips64el/current/images/MD5SUMS
+ 860868ad110a424a7b89f938d6fe2e14 1026 main/installer-mips64el/current/images/SHA256SUMS
+ a4d1f9461e4c8fa09379671719a3a8f2 630 main/installer-mipsel/20190702+deb10u7/images/MD5SUMS
+ fae6f9fdbf6ab12af8140333f831d1fd 1026 main/installer-mipsel/20190702+deb10u7/images/SHA256SUMS
+ 445d014a79fe490d98b0f38ad42cdc85 627 main/installer-mipsel/20190702/images/MD5SUMS
+ 2b56aa2f2d7dbe41123c5397b963811c 1023 main/installer-mipsel/20190702/images/SHA256SUMS
+ a4d1f9461e4c8fa09379671719a3a8f2 630 main/installer-mipsel/current/images/MD5SUMS
+ fae6f9fdbf6ab12af8140333f831d1fd 1026 main/installer-mipsel/current/images/SHA256SUMS
+ dc3241d484c4d251b79fd22e1da04baa 576 main/installer-ppc64el/20190702+deb10u7/images/MD5SUMS
+ 3f44bb61d930081f40ab60ce364c0553 972 main/installer-ppc64el/20190702+deb10u7/images/SHA256SUMS
+ 70e6905a28fcbec961dbf0c6a67f3d29 576 main/installer-ppc64el/20190702/images/MD5SUMS
+ 30f10e9cdfe4c711ac35c1b82d685848 972 main/installer-ppc64el/20190702/images/SHA256SUMS
+ dc3241d484c4d251b79fd22e1da04baa 576 main/installer-ppc64el/current/images/MD5SUMS
+ 3f44bb61d930081f40ab60ce364c0553 972 main/installer-ppc64el/current/images/SHA256SUMS
+ 0d60e8b92e6ef957dd933ac9e1b00bbb 374 main/installer-s390x/20190702+deb10u7/images/MD5SUMS
+ 1dfe2cd45c5437301bacdeec0e5c7b27 674 main/installer-s390x/20190702+deb10u7/images/SHA256SUMS
+ d7f3cc9a35e19b5f133172e53b5e1c6b 374 main/installer-s390x/20190702/images/MD5SUMS
+ 1888cbe42497ea0655283c32185d8c36 674 main/installer-s390x/20190702/images/SHA256SUMS
+ 0d60e8b92e6ef957dd933ac9e1b00bbb 374 main/installer-s390x/current/images/MD5SUMS
+ 1dfe2cd45c5437301bacdeec0e5c7b27 674 main/installer-s390x/current/images/SHA256SUMS
+ 71a791f193c5f693b43448eee03bee6c 117 main/source/Release
+ 983b067131f254c933abc52ad1745d42 40374106 main/source/Sources
+ 19b4ee1b62ddabd22696da853ac30d87 10410977 main/source/Sources.gz
+ d50e5ad0674a3efce55fa7e94555435f 7841528 main/source/Sources.xz
+ b8f91d3271b9c6bc46bed2bae4239757 15041698 non-free/Contents-amd64
+ 5bfcb75b52642fe9308bfc40813a7681 860518 non-free/Contents-amd64.gz
+ a3331fd5c248b55677aa0388a70ce4a7 13915102 non-free/Contents-arm64
+ 77af7853538fcb331d3821a6e5c6df16 772610 non-free/Contents-arm64.gz
+ f65f61e066c787eae0cf35cbff3907b3 13907158 non-free/Contents-armel
+ 9fe12f9bb1911950e74f8e35c59b83ea 772003 non-free/Contents-armel.gz
+ 5977370fa511bf1788aeb8c14be11d1d 14007145 non-free/Contents-armhf
+ 4eaa14fceb77c785e35cfcb038680aee 779131 non-free/Contents-armhf.gz
+ b322e71b43866b8354011b862a66a0e4 14178942 non-free/Contents-i386
+ 81036b2b13b50b0fc879b7ccb87c709e 794908 non-free/Contents-i386.gz
+ 2983601bda56554bf0a9a95154c05d6c 13903213 non-free/Contents-mips
+ 9b2a8b0f473be6d1d0c55e56410924e4 771624 non-free/Contents-mips.gz
+ 4dd4444215b86bca626419fe6ff0ffd2 13909546 non-free/Contents-mips64el
+ c2ac0c19cbef61dfa447084d524c610f 771712 non-free/Contents-mips64el.gz
+ 59b0b55aa5af13dda5f75e5cca4fb16e 13910453 non-free/Contents-mipsel
+ d1e167d2999198e37e3799dffd301037 771959 non-free/Contents-mipsel.gz
+ 50015067db7d5e5cf48e1ecfa6646b72 14154515 non-free/Contents-ppc64el
+ 0012e7e30031d8e28182d15783fee827 793531 non-free/Contents-ppc64el.gz
+ 38ea6f764cb7555c461d2e2eece3edcc 13903234 non-free/Contents-s390x
+ f0f38accba1c396eb1aa7d24f9be18b2 771491 non-free/Contents-s390x.gz
+ 2e5aaf58d662f9ba14cb6c044350739d 8556010 non-free/Contents-source
+ 0362ff68d659dc8744d617fe21c13433 884017 non-free/Contents-source.gz
+ d41d8cd98f00b204e9800998ecf8427e 0 non-free/Contents-udeb-amd64
+ 4a4dd3598707603b3f76a2378a4504aa 20 non-free/Contents-udeb-amd64.gz
+ d41d8cd98f00b204e9800998ecf8427e 0 non-free/Contents-udeb-arm64
+ 4a4dd3598707603b3f76a2378a4504aa 20 non-free/Contents-udeb-arm64.gz
+ d41d8cd98f00b204e9800998ecf8427e 0 non-free/Contents-udeb-armel
+ 4a4dd3598707603b3f76a2378a4504aa 20 non-free/Contents-udeb-armel.gz
+ d41d8cd98f00b204e9800998ecf8427e 0 non-free/Contents-udeb-armhf
+ 4a4dd3598707603b3f76a2378a4504aa 20 non-free/Contents-udeb-armhf.gz
+ d41d8cd98f00b204e9800998ecf8427e 0 non-free/Contents-udeb-i386
+ 4a4dd3598707603b3f76a2378a4504aa 20 non-free/Contents-udeb-i386.gz
+ d41d8cd98f00b204e9800998ecf8427e 0 non-free/Contents-udeb-mips
+ 4a4dd3598707603b3f76a2378a4504aa 20 non-free/Contents-udeb-mips.gz
+ d41d8cd98f00b204e9800998ecf8427e 0 non-free/Contents-udeb-mips64el
+ 4a4dd3598707603b3f76a2378a4504aa 20 non-free/Contents-udeb-mips64el.gz
+ d41d8cd98f00b204e9800998ecf8427e 0 non-free/Contents-udeb-mipsel
+ 4a4dd3598707603b3f76a2378a4504aa 20 non-free/Contents-udeb-mipsel.gz
+ d41d8cd98f00b204e9800998ecf8427e 0 non-free/Contents-udeb-ppc64el
+ 4a4dd3598707603b3f76a2378a4504aa 20 non-free/Contents-udeb-ppc64el.gz
+ d41d8cd98f00b204e9800998ecf8427e 0 non-free/Contents-udeb-s390x
+ 4a4dd3598707603b3f76a2378a4504aa 20 non-free/Contents-udeb-s390x.gz
+ b5b2645622d140639406cca66fa720e1 197436 non-free/binary-all/Packages
+ c59da68be798ad1ecc32829540bf2902 53089 non-free/binary-all/Packages.gz
+ ac57d0a85d3cf4e8b757f5dfe1e00488 44620 non-free/binary-all/Packages.xz
+ 8d55289349e24a8bdfbfafe3b1a0250e 118 non-free/binary-all/Release
+ b97118b8ca8c4cdd476cc78efb0c3992 447124 non-free/binary-amd64/Packages
+ dd04ef2075209444a00107f39ea3dfb3 106655 non-free/binary-amd64/Packages.gz
+ d4ae25506e8a3c5df30e92fc28b16264 87652 non-free/binary-amd64/Packages.xz
+ cfc520362a18820be3cd7862f6027fee 120 non-free/binary-amd64/Release
+ 18e14e676b624666292af151aa938fa6 238804 non-free/binary-arm64/Packages
+ d12395ffaf8206752d301b41696f8028 64350 non-free/binary-arm64/Packages.gz
+ ba3dd6978604061d023096b3eddf1ca4 53832 non-free/binary-arm64/Packages.xz
+ a6294408159c637f9b38048279fd7d14 120 non-free/binary-arm64/Release
+ 010e44805b42fd032fa2375f5f43d61b 236032 non-free/binary-armel/Packages
+ 4f00fdde79f2cc2a5c7338d0b976c0a4 63889 non-free/binary-armel/Packages.gz
+ e921a211b8560013c303ebb6315c018b 53416 non-free/binary-armel/Packages.xz
+ 2eea6a5059d2ef1ee1046c3091d833b3 120 non-free/binary-armel/Release
+ f7b5e14b165078895634dece2af7b07c 299334 non-free/binary-armhf/Packages
+ 422f92d043cfa73a9fa286111b7e6ab1 74486 non-free/binary-armhf/Packages.gz
+ a9cad2f0a98986cf4c6bae64cc36ec5d 62040 non-free/binary-armhf/Packages.xz
+ 32cf11659508790b337c3468fc9a4f28 120 non-free/binary-armhf/Release
+ ec96c68576a2413fcdbbc3f1a405d5d5 383285 non-free/binary-i386/Packages
+ a0e482c06bfe479eb1366bb29d88a79c 92741 non-free/binary-i386/Packages.gz
+ 39327445fa6e2385c5a20d4a0268c25c 76156 non-free/binary-i386/Packages.xz
+ f5f56c78547ee0aafa74d9466afa52ce 119 non-free/binary-i386/Release
+ 72b0f5996f53c8f73af875f8c4df4b83 233779 non-free/binary-mips/Packages
+ bb9e4bc491866963c9e0a83e015423d4 63210 non-free/binary-mips/Packages.gz
+ d8f84846d85a59ca3646c9bdde7b8f2f 52832 non-free/binary-mips/Packages.xz
+ 9fcd7ad8f36e26a3576613c36027f34f 119 non-free/binary-mips/Release
+ df87cf7f9cd1267381ade89bb48c715c 235974 non-free/binary-mips64el/Packages
+ 246a8ebebf76c613606d76a55fa436a8 63464 non-free/binary-mips64el/Packages.gz
+ 53c61fd14242c25877d8aa072b41303d 53076 non-free/binary-mips64el/Packages.xz
+ 9fdd17f52a2d64af876aaedbb41648d7 123 non-free/binary-mips64el/Release
+ e5769c4e7edc2a378b687a30b7176e7b 236623 non-free/binary-mipsel/Packages
+ 06fe3d5f72705a11a33e8815d2949387 63967 non-free/binary-mipsel/Packages.gz
+ 812f3ea565a7ad841c5d1d36455265ac 53380 non-free/binary-mipsel/Packages.xz
+ 1ec715c5db7cfce83942a050b0a1e676 121 non-free/binary-mipsel/Release
+ 14ce67f1d61959ead426856821806535 258455 non-free/binary-ppc64el/Packages
+ 6687a328ae0daf5ed56f141b81a4bb32 67734 non-free/binary-ppc64el/Packages.gz
+ f8ab4bdeeeb0265955e2a956ba53342a 56708 non-free/binary-ppc64el/Packages.xz
+ 310d2892affa74c2f75a93aafeb55a2c 122 non-free/binary-ppc64el/Release
+ 671b34215da3fe5a3c88dfdcd5e7f790 233878 non-free/binary-s390x/Packages
+ 374177044aac480900f3bdac57919608 62973 non-free/binary-s390x/Packages.gz
+ 3040e2bbe7fa20ab04e374d2518d437d 52796 non-free/binary-s390x/Packages.xz
+ 152733f6083e0b5b59c5b86bfd32133c 120 non-free/binary-s390x/Release
+ d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-all/Packages
+ 4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-all/Packages.gz
+ 8dc5aea5b03dff8595f096f9e368e888 32 non-free/debian-installer/binary-all/Packages.xz
+ 8d55289349e24a8bdfbfafe3b1a0250e 118 non-free/debian-installer/binary-all/Release
+ d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-amd64/Packages
+ 4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-amd64/Packages.gz
+ 8dc5aea5b03dff8595f096f9e368e888 32 non-free/debian-installer/binary-amd64/Packages.xz
+ cfc520362a18820be3cd7862f6027fee 120 non-free/debian-installer/binary-amd64/Release
+ d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-arm64/Packages
+ 4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-arm64/Packages.gz
+ 8dc5aea5b03dff8595f096f9e368e888 32 non-free/debian-installer/binary-arm64/Packages.xz
+ a6294408159c637f9b38048279fd7d14 120 non-free/debian-installer/binary-arm64/Release
+ d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-armel/Packages
+ 4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-armel/Packages.gz
+ 8dc5aea5b03dff8595f096f9e368e888 32 non-free/debian-installer/binary-armel/Packages.xz
+ 2eea6a5059d2ef1ee1046c3091d833b3 120 non-free/debian-installer/binary-armel/Release
+ d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-armhf/Packages
+ 4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-armhf/Packages.gz
+ 8dc5aea5b03dff8595f096f9e368e888 32 non-free/debian-installer/binary-armhf/Packages.xz
+ 32cf11659508790b337c3468fc9a4f28 120 non-free/debian-installer/binary-armhf/Release
+ d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-i386/Packages
+ 4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-i386/Packages.gz
+ 8dc5aea5b03dff8595f096f9e368e888 32 non-free/debian-installer/binary-i386/Packages.xz
+ f5f56c78547ee0aafa74d9466afa52ce 119 non-free/debian-installer/binary-i386/Release
+ d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-mips/Packages
+ 4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-mips/Packages.gz
+ 8dc5aea5b03dff8595f096f9e368e888 32 non-free/debian-installer/binary-mips/Packages.xz
+ 9fcd7ad8f36e26a3576613c36027f34f 119 non-free/debian-installer/binary-mips/Release
+ d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-mips64el/Packages
+ 4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-mips64el/Packages.gz
+ 8dc5aea5b03dff8595f096f9e368e888 32 non-free/debian-installer/binary-mips64el/Packages.xz
+ 9fdd17f52a2d64af876aaedbb41648d7 123 non-free/debian-installer/binary-mips64el/Release
+ d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-mipsel/Packages
+ 4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-mipsel/Packages.gz
+ 8dc5aea5b03dff8595f096f9e368e888 32 non-free/debian-installer/binary-mipsel/Packages.xz
+ 1ec715c5db7cfce83942a050b0a1e676 121 non-free/debian-installer/binary-mipsel/Release
+ d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-ppc64el/Packages
+ 4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-ppc64el/Packages.gz
+ 8dc5aea5b03dff8595f096f9e368e888 32 non-free/debian-installer/binary-ppc64el/Packages.xz
+ 310d2892affa74c2f75a93aafeb55a2c 122 non-free/debian-installer/binary-ppc64el/Release
+ d41d8cd98f00b204e9800998ecf8427e 0 non-free/debian-installer/binary-s390x/Packages
+ 4a4dd3598707603b3f76a2378a4504aa 20 non-free/debian-installer/binary-s390x/Packages.gz
+ 8dc5aea5b03dff8595f096f9e368e888 32 non-free/debian-installer/binary-s390x/Packages.xz
+ 152733f6083e0b5b59c5b86bfd32133c 120 non-free/debian-installer/binary-s390x/Release
+ ea2bdb74c726d091f253a2c6127167d1 88700 non-free/dep11/Components-amd64.yml
+ 93eec39af1979c6864121135d5542a73 10864 non-free/dep11/Components-amd64.yml.gz
+ 29987d3784196aa5301c8811c3ed7e87 9096 non-free/dep11/Components-amd64.yml.xz
+ 7aea6ce6cf4391565a3076eeb9d2b4a9 83062 non-free/dep11/Components-arm64.yml
+ 2f2d6b2fae879a7faf6c624e90e05566 9530 non-free/dep11/Components-arm64.yml.gz
+ d9caa6c976bbd9e2b1ad0f4a1d749aa7 7880 non-free/dep11/Components-arm64.yml.xz
+ 6c5a51ebd9bc172157bc76422e259e70 83062 non-free/dep11/Components-armel.yml
+ 31886c0bc8f9722e6e8a97f2e0c2cdc5 9587 non-free/dep11/Components-armel.yml.gz
+ 9630f1f18858b0ebc5dd62ee5b2754e5 7876 non-free/dep11/Components-armel.yml.xz
+ 79c0384c9c347b0898ddf757e4d433f2 83062 non-free/dep11/Components-armhf.yml
+ 3d662561e7639151594ac3e03b8b5ec7 9811 non-free/dep11/Components-armhf.yml.gz
+ 7d52b715c6f751765fcd800bf0c45170 7880 non-free/dep11/Components-armhf.yml.xz
+ d1935733598feabbf04d8a0e206a24a8 91016 non-free/dep11/Components-i386.yml
+ 28d31441f2e84b3439b123467b999d77 12590 non-free/dep11/Components-i386.yml.gz
+ b36312b245860444cca439264c9db834 10272 non-free/dep11/Components-i386.yml.xz
+ cb9a7e0606dbdae1d8bf34ffcc6f8cc8 83062 non-free/dep11/Components-mips64el.yml
+ 02d653d7c5919505df5b1bd7d2d111a8 9512 non-free/dep11/Components-mips64el.yml.gz
+ ea159dba691eec406a4e6782edba8e60 7840 non-free/dep11/Components-mips64el.yml.xz
+ 6b8564a5e93e142e9199e40a05ce4e90 83062 non-free/dep11/Components-ppc64el.yml
+ ac188ea1210c74a3fe45f0c235c0bf34 9548 non-free/dep11/Components-ppc64el.yml.gz
+ 11c7b62706ac6e897cbf8d01d5fbcb40 7840 non-free/dep11/Components-ppc64el.yml.xz
+ 6ecef201689d225031ad4012f01e7635 83062 non-free/dep11/Components-s390x.yml
+ e09bdaa5a800874a0cc40d279d306ceb 9542 non-free/dep11/Components-s390x.yml.gz
+ 47142810e4d91ae57ffa318b6920ed62 7884 non-free/dep11/Components-s390x.yml.xz
+ 065baa655f9308fcab3f48be45cec371 15360 non-free/dep11/icons-128x128.tar
+ 1167bd0857d5ed3801bdecd6b5aa4934 6725 non-free/dep11/icons-128x128.tar.gz
+ 02119965dc14c896ce81251383224903 9216 non-free/dep11/icons-48x48.tar
+ e07e2bada0ce207aec3c9c571db4a478 3491 non-free/dep11/icons-48x48.tar.gz
+ 98d589d6d143bb0afef63283e0a0b5f6 49664 non-free/dep11/icons-64x64.tar
+ 43b2d99ff5912094ed4991dbe4c1e15c 38343 non-free/dep11/icons-64x64.tar.gz
+ 7b745ad5f0b35076026b3d6cac8cd4cd 512965 non-free/i18n/Translation-en
+ 888fdd3a5c5f0c27eaf7c01dd6951855 88834 non-free/i18n/Translation-en.bz2
+ bc3086f9a876353349550f977457f245 121 non-free/source/Release
+ db9a85186998828daa917a3f78169533 371347 non-free/source/Sources
+ e6e7b02dd46d838f5b15f0a9b9625cdc 103716 non-free/source/Sources.gz
+ 934b3f80ead8a7045d52b5c812fc6b4b 85628 non-free/source/Sources.xz
+SHA256:
+ 9c790f028c5b33697c05246ca543dda29c41d323dfcdab2220dc67e5f28d7b09 1356901 contrib/Contents-amd64
+ 74f0a26875c1f937803fffcb64f9c0acfe7a328bc3889b74f81bd2640f57294d 102635 contrib/Contents-amd64.gz
+ f388b3541940cada4df5489fbc1016440fa9290a23b998674ba41e4aacb20ccd 1075476 contrib/Contents-arm64
+ aaaa209c6f255165a7b9431fe92d02809c25fca3684f7e601887268cdab4a1a5 84016 contrib/Contents-arm64.gz
+ 10b740b16a0d26a88646becbcb8ef8ff06fbe89809cbaac7b6f307c4d8e8881e 1072443 contrib/Contents-armel
+ 6b7a5352ebf79480492b1a8f97eed09ca5ee9ceb420166f08a7b4c134e23511d 83766 contrib/Contents-armel.gz
+ c9f0a57a303faca07100304f2cd667d80b69cf7bf89542775df96d4a9f9afafd 1080904 contrib/Contents-armhf
+ 4166e976622328a8e190eb34a568edc34533b1efa3163f4d92e2666b8dbe938a 84798 contrib/Contents-armhf.gz
+ 140415c888c7dc2693992efb792554abb23c4de7134a471ee3c937735e4a0393 1143948 contrib/Contents-i386
+ 87282daf671c0570604f78b19c3067edc7f8bdbcaa57d6252275639db2638973 90478 contrib/Contents-i386.gz
+ 48f58d320b54e7446afc794229752d8c2c9275f9f6cf1ce52aa389fc66120bae 1075642 contrib/Contents-mips
+ 4b3513ee199736469a136bb9e0a48b2893a750cd9262a38a53329b3802d1072e 84001 contrib/Contents-mips.gz
+ 26ac5083b610d8fb131cd1afd9602ed7de47d537ca0c204ebd916dc139b5ff73 1074552 contrib/Contents-mips64el
+ d3e7387b09f3a790334c18e38aae11e046fc99f76c583191b1e699d6a7aa6efd 83874 contrib/Contents-mips64el.gz
+ 4d051c904d3ea2447434533c58c687308b11faf9153f0936ec9f09215cd86510 1075659 contrib/Contents-mipsel
+ 3555635e5a367b6b44ab57b5de50dfadb29a9fb4c00fe62fc5f9175389223d7d 84014 contrib/Contents-mipsel.gz
+ 06ebbd84e3711891177f2397354844d7e644c0855bf2dc53fbbbb17e637daa9e 1075941 contrib/Contents-ppc64el
+ b352d31f889a0644acb2d45e53f9ce7dd0dc2872164cd6ce1ed760ade2245b42 83977 contrib/Contents-ppc64el.gz
+ de597ec15bbab37a66b986bb10d223bc3796b90d553016055ad618f9ff54606a 1072966 contrib/Contents-s390x
+ b0e8178e08c872a1f58024274960a92e7a634f346ab433eec437713480c980f6 83555 contrib/Contents-s390x.gz
+ 6334c45c6b956f6142ba1534c5b23ba45bd96a79610767edaaff3b8245e191f0 4560575 contrib/Contents-source
+ 1f4b57a7535b47a74ae67012a07e3f7121e8f89957e52f3cce298b7a2167c0a0 373646 contrib/Contents-source.gz
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/Contents-udeb-amd64
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/Contents-udeb-amd64.gz
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/Contents-udeb-arm64
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/Contents-udeb-arm64.gz
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/Contents-udeb-armel
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/Contents-udeb-armel.gz
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/Contents-udeb-armhf
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/Contents-udeb-armhf.gz
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/Contents-udeb-i386
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/Contents-udeb-i386.gz
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/Contents-udeb-mips
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/Contents-udeb-mips.gz
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/Contents-udeb-mips64el
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/Contents-udeb-mips64el.gz
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/Contents-udeb-mipsel
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/Contents-udeb-mipsel.gz
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/Contents-udeb-ppc64el
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/Contents-udeb-ppc64el.gz
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/Contents-udeb-s390x
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/Contents-udeb-s390x.gz
+ b5ee95317eb9d02687d2b5588a6e7987a20c2be4e2e2b126c591744ee0def2ba 98559 contrib/binary-all/Packages
+ 469e7f1a6c7798f07b42cd00db06a4e8e213d0238f01b5ac30751257f1444456 26589 contrib/binary-all/Packages.gz
+ 11da5321c5dae785bd80725c7e12088cf19bd157a97baf02156dca1c8c9a4aeb 22872 contrib/binary-all/Packages.xz
+ fc4f3ccb9b340c09b5acce7d17c2e49c747df06e5360fee8ab8e7c4a3b2fe243 117 contrib/binary-all/Release
+ 85122b023c4bbd0fb4de263b3ad03212735f162897bc3403f10c31a4dbb62255 227288 contrib/binary-amd64/Packages
+ 06a2453b9ec49fbc900b96b1ff806cb5b8e1dca5037d4cbf7e469ff6e2b5583a 60376 contrib/binary-amd64/Packages.gz
+ e7df50561ad9ede5afee7d9fcdd62e08b828aef6ce72dbfaaeac0c679db05d78 50236 contrib/binary-amd64/Packages.xz
+ 2ee75c8b42f9ffb6dfd73d41721927ce163206a229721a4e2c1736eb4287755d 119 contrib/binary-amd64/Release
+ df11cad1806630d3d2438738de2d595239edd4b6f2b5272cc1c19682ffe0bacf 167017 contrib/binary-arm64/Packages
+ 9a3af463bc932429198974079d3a054ef81609deeb7e4e3a4783a93af23fa86f 45595 contrib/binary-arm64/Packages.gz
+ 4ff769644e5c15565c5e6d9d65661744b659d8d4f0fa65b42be9fb3af18b87a4 38392 contrib/binary-arm64/Packages.xz
+ 54ce82fa743fd600d12eba77b7f822626aa6786d6947c94b854dbb9b642847d2 119 contrib/binary-arm64/Release
+ fa42e75b4f2cb66c61fbb1ba6d8ea532e33b4cd2c1db474a162e61842b242528 162625 contrib/binary-armel/Packages
+ 4a4c211c84e44f0e1d46079067ced1b2e324884307d5e632ffb568cc75dc44fa 44533 contrib/binary-armel/Packages.gz
+ 09fcad4e5f463099f6ada67c516af999924b19622abaaccf88237f64a76ee5b1 37628 contrib/binary-armel/Packages.xz
+ d32ee9c01904230410e920fb392e844c9acf27a805f3ce4c57313b5095f7f87a 119 contrib/binary-armel/Release
+ 75035f3252700b256a0713e314b2dda2f3cd1effee7b78b3a754fb28f7aebd6f 174724 contrib/binary-armhf/Packages
+ d42c08c1b6b61348178d8d4d2833b7e24c8e49cb0b1d7b4590d1ef0208fc6485 47683 contrib/binary-armhf/Packages.gz
+ b40cfb24a255dc01b03f6f15ea229c443923fd888842219ee22733d255992a85 40096 contrib/binary-armhf/Packages.xz
+ b82baface03301f8746025632d9c3bec923f5a780e97d9ac13acb719f3610731 119 contrib/binary-armhf/Release
+ ba4e01ea3ef65f033809d1074387e10a4405978d98668338412457cd6c15f514 206737 contrib/binary-i386/Packages
+ 23a014ef9b724c51f2df1f176c0eebd2488b48f207c54692451bfb6f59fa3aaf 55449 contrib/binary-i386/Packages.gz
+ 87c152422c424e7e78c0638c452db84b2cafb22a150176f010ac5e3e92cb870e 46132 contrib/binary-i386/Packages.xz
+ 30290422018963a52263028d24b76604a6785c980a890f925d27dba4ddd882fa 118 contrib/binary-i386/Release
+ 023d762cf6b389b57a59391f74657ec04a93c54765be233d1d8874a3748486b7 167136 contrib/binary-mips/Packages
+ e1a4d3b9070a31bb24463e87228f08030d58c3b91d4efb3fc168be5efa4e7a9a 45932 contrib/binary-mips/Packages.gz
+ e3b7f4795059f48024d541239e9453bc914b97e697c8cd138a59c9e1c83fc5a9 38528 contrib/binary-mips/Packages.xz
+ 51b7ca85724cdee1aa5d0204849b3c5ac92e1a1712f11f7dce18d750621c2fc5 118 contrib/binary-mips/Release
+ c55967e05ff4b1a4477dc082827037f65ed9b39096e954f998b57c1395ea63ff 166369 contrib/binary-mips64el/Packages
+ b2541fdb930b0e8075e0af4c61bafe37914184a93d41a0c594aac1b3beee5b1e 45086 contrib/binary-mips64el/Packages.gz
+ 1217659e1b39a3b23c180f02643b6e66ebd90fe017805e7382b402547ca5cb88 38180 contrib/binary-mips64el/Packages.xz
+ 840c6fbd5330973e80d9755ff83521712589d7f0ea9d4e5473c6f134ad6bf27e 122 contrib/binary-mips64el/Release
+ 748b69328d513c5bcb247342245d78225035d2a1ac0bfd6af170a85d6aea0846 167464 contrib/binary-mipsel/Packages
+ 895668177cac60bab0eab069a67ebbf7fc4357d91b38ac6b094a764d996bdefb 45960 contrib/binary-mipsel/Packages.gz
+ 79a47acdcc228af08d076e1d25fba14f83738df4333eb94af6a8908765df9da1 38528 contrib/binary-mipsel/Packages.xz
+ 03b6d7414bc8381adfa2be290069a7888a944ebbe2043556c826346218f183c4 120 contrib/binary-mipsel/Release
+ da07017a553a9c7eff4fa50ecc5dc136d49a2bf83b48ff6331fed1abde4595fe 168194 contrib/binary-ppc64el/Packages
+ 9f503e9c742d8c62c9ca827d35a848d5ce5381344fff8e29ee72def94f4c54e7 45836 contrib/binary-ppc64el/Packages.gz
+ 407bbe67f1147dea5f3ecf8a38feed269a3a38c7b608782b3ac767f484785bb1 38604 contrib/binary-ppc64el/Packages.xz
+ dc84ab7b831fa491eceaefc97734dcd65f1ab77ea5328f731df117db434c00df 121 contrib/binary-ppc64el/Release
+ 6a1d91b83442f19191a50002810f375edb04dcfc2529dd7f3757710b830f9cdd 164846 contrib/binary-s390x/Packages
+ cc090e2f3cb57547b7c78dceaa0dd8b95012a095bd9513bbb86ac51eda3a411a 45123 contrib/binary-s390x/Packages.gz
+ 19ae425f63772fcf6b5b7c8a826e15b240aa7592a6f0e88f043920ecf6cbc0b1 37960 contrib/binary-s390x/Packages.xz
+ 8e59ec07ff791a520c79650486c51c0f55720a78c397899ef649a8a2608b449f 119 contrib/binary-s390x/Release
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-all/Packages
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-all/Packages.gz
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 contrib/debian-installer/binary-all/Packages.xz
+ fc4f3ccb9b340c09b5acce7d17c2e49c747df06e5360fee8ab8e7c4a3b2fe243 117 contrib/debian-installer/binary-all/Release
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-amd64/Packages
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-amd64/Packages.gz
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 contrib/debian-installer/binary-amd64/Packages.xz
+ 2ee75c8b42f9ffb6dfd73d41721927ce163206a229721a4e2c1736eb4287755d 119 contrib/debian-installer/binary-amd64/Release
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-arm64/Packages
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-arm64/Packages.gz
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 contrib/debian-installer/binary-arm64/Packages.xz
+ 54ce82fa743fd600d12eba77b7f822626aa6786d6947c94b854dbb9b642847d2 119 contrib/debian-installer/binary-arm64/Release
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-armel/Packages
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-armel/Packages.gz
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 contrib/debian-installer/binary-armel/Packages.xz
+ d32ee9c01904230410e920fb392e844c9acf27a805f3ce4c57313b5095f7f87a 119 contrib/debian-installer/binary-armel/Release
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-armhf/Packages
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-armhf/Packages.gz
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 contrib/debian-installer/binary-armhf/Packages.xz
+ b82baface03301f8746025632d9c3bec923f5a780e97d9ac13acb719f3610731 119 contrib/debian-installer/binary-armhf/Release
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-i386/Packages
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-i386/Packages.gz
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 contrib/debian-installer/binary-i386/Packages.xz
+ 30290422018963a52263028d24b76604a6785c980a890f925d27dba4ddd882fa 118 contrib/debian-installer/binary-i386/Release
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-mips/Packages
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-mips/Packages.gz
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 contrib/debian-installer/binary-mips/Packages.xz
+ 51b7ca85724cdee1aa5d0204849b3c5ac92e1a1712f11f7dce18d750621c2fc5 118 contrib/debian-installer/binary-mips/Release
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-mips64el/Packages
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-mips64el/Packages.gz
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 contrib/debian-installer/binary-mips64el/Packages.xz
+ 840c6fbd5330973e80d9755ff83521712589d7f0ea9d4e5473c6f134ad6bf27e 122 contrib/debian-installer/binary-mips64el/Release
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-mipsel/Packages
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-mipsel/Packages.gz
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 contrib/debian-installer/binary-mipsel/Packages.xz
+ 03b6d7414bc8381adfa2be290069a7888a944ebbe2043556c826346218f183c4 120 contrib/debian-installer/binary-mipsel/Release
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-ppc64el/Packages
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-ppc64el/Packages.gz
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 contrib/debian-installer/binary-ppc64el/Packages.xz
+ dc84ab7b831fa491eceaefc97734dcd65f1ab77ea5328f731df117db434c00df 121 contrib/debian-installer/binary-ppc64el/Release
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 contrib/debian-installer/binary-s390x/Packages
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 contrib/debian-installer/binary-s390x/Packages.gz
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 contrib/debian-installer/binary-s390x/Packages.xz
+ 8e59ec07ff791a520c79650486c51c0f55720a78c397899ef649a8a2608b449f 119 contrib/debian-installer/binary-s390x/Release
+ b70f521acc48449b13a9a673cf73d721448ea160b38424fbf42c8933f3e2ff74 103445 contrib/dep11/Components-amd64.yml
+ ca98fc212a6484cb7311913faca93a05fbabdd228e9f2d1b56ebe14f4e5156fa 12945 contrib/dep11/Components-amd64.yml.gz
+ 58f0a9eb19c41780bf096d83c05b432810184b5d1369a8a534936a72205d3c0c 11504 contrib/dep11/Components-amd64.yml.xz
+ e39b26337892086f0888962f9343b4f0fd1aa2d6ebe8bb8115097e6a4f917b47 103445 contrib/dep11/Components-arm64.yml
+ 545f78c666d64c55f15beb3880a4573055d66229c912c6fd3a4d7a84dab65795 12903 contrib/dep11/Components-arm64.yml.gz
+ 0e5634ded56c93eea86a656b908b8c846d24d5ff06a74b928e26a7417da1604b 11516 contrib/dep11/Components-arm64.yml.xz
+ e36423353fd694500a74817fa2bebb21d58c38395dad2bf2add5073a2644724f 99187 contrib/dep11/Components-armel.yml
+ 2cb6f6927697c4b1649a91f2e2f72a3d1c7c43615906fe1c4af404ee80f0e248 12210 contrib/dep11/Components-armel.yml.gz
+ 3b94c4d8027521b7be3bec371f52aeebf7159a6a3296e1fde3f11f11456ea980 10720 contrib/dep11/Components-armel.yml.xz
+ 00b78864ff64d82944a5f2d300a62812fa196763e625316d3db58738544dc2a2 101441 contrib/dep11/Components-armhf.yml
+ 0044bb3bfdfc8da84c3d5e3c81860694cac68261a84218e5a92061c1c60a6986 12814 contrib/dep11/Components-armhf.yml.gz
+ 13ec5d2e265c26a3fc19618af7c32fabe670d52da46f18c79f3ef9c7cd4715b5 11180 contrib/dep11/Components-armhf.yml.xz
+ 5013757a04854d8aabf05ae96612928deac471b7c9e30e58e2a98ac08985b912 101191 contrib/dep11/Components-i386.yml
+ 7c1a7c73f99a30852d723184c546f75b8389c1c63e3f73598035d405d6ad483f 12199 contrib/dep11/Components-i386.yml.gz
+ aa69ed88b70c92ca45baadf44bbfefd6335b5020742c1792e351ca3fef36a798 11068 contrib/dep11/Components-i386.yml.xz
+ 71f5222035e7d659cf15c07cf1dfe94d7fb726e5b5da25177d5b297b88c0557a 101191 contrib/dep11/Components-mips64el.yml
+ 6381199b774b417034501cc0d5c392529ce398b7b2719fea5697b9e666be1af0 12714 contrib/dep11/Components-mips64el.yml.gz
+ c1e0dd5fc17ae25a58a5156971f62dd375bedd1217364105ab0abde22040e580 11136 contrib/dep11/Components-mips64el.yml.xz
+ 3354ec23c7d17492e38149db5f6287409b184f5dbe0c60af524d7ebb80514db3 101191 contrib/dep11/Components-ppc64el.yml
+ bb2cacf37cde6a92362f82fe54ced0bf13d3f65c0bc7c6c15b6abcb4e8c15b63 12411 contrib/dep11/Components-ppc64el.yml.gz
+ eac61754b1b69ecfe567667cd8a6e18739eb977f2e5c7445b21971db8656277a 11060 contrib/dep11/Components-ppc64el.yml.xz
+ db7a586ea016be0048909ec388471930825762ed4e430f7c2f70a8ee63a153d9 101191 contrib/dep11/Components-s390x.yml
+ f4be93bf26afcfd003840d518dbea491340054277d26a46017e1519968910d94 12351 contrib/dep11/Components-s390x.yml.gz
+ e5b4acbad29eb21e6a40386cb8bfea26da92955f7a5e7d9706410e3bb5a2b9a3 11076 contrib/dep11/Components-s390x.yml.xz
+ 2c81593070959b32532e1f13c648932e9279301d7fdb94a9914ba1ae418b55be 266240 contrib/dep11/icons-128x128.tar
+ 33ca052001bb1bd14a302b0f11a4481f3745404e535400599b86fec031a3dd7c 226447 contrib/dep11/icons-128x128.tar.gz
+ 4d59a6c0f37b735745ad1c92263c3997ae209e1d38173171f887cc571f03b55d 87552 contrib/dep11/icons-48x48.tar
+ 6182cb3cd6db800f1a922360ba7624ec36e6766f48c453b69410829692e31821 56361 contrib/dep11/icons-48x48.tar.gz
+ 757f07da1dadc299a5eea2688b05452f3e64fd2dead54e2936738907cda394a9 152064 contrib/dep11/icons-64x64.tar
+ fbb7de3b2bdf4ea369787510353dd0151798c333479c1222f2db53db1c2c6f69 110187 contrib/dep11/icons-64x64.tar.gz
+ be032b9c35f7184578c1929157828f3a7a5c85f0a942740bdeeb9ae939e97a5d 180788 contrib/i18n/Translation-en
+ 2b645f7b673de99d725d3e45963340d45da744681c3171359372abfb3d020154 44160 contrib/i18n/Translation-en.bz2
+ 77e7d426420d5107c7b096dbaf60660f81b65b772743738fe0c5479af01a8665 120 contrib/source/Release
+ c01b2cc6fcbd8b2a7384062fb0062f8a4affbda3fc0b2f82f6272edf2a8f8f8b 171415 contrib/source/Sources
+ 2f8988e1d77b67c9abcb54d0ac68161b00eb0c524e3c2982c84c43de95b83429 50324 contrib/source/Sources.gz
+ 9d4a1c01ee63c5bdcdd6f7eff94a560e82f9af94bf744edd666c3a8e844e7b5e 42524 contrib/source/Sources.xz
+ 93b394d4c4986e7f633466a7c8af44ff39ddbbc993b461b05d00ed08d6794b7b 544269024 main/Contents-amd64
+ a85d67ea86d5fd4bbac4787809e86d9e97da2f171fb2491057bc9a5164be555f 37329769 main/Contents-amd64.gz
+ c36d79a0253bf87590243cb5f48c089584e829043f8d60ab5d32081e8641929d 529782549 main/Contents-arm64
+ 0fab2f30b128f1b1793e3d81241ec150e6b603abe019ab3ab6dcd439a0551998 36507963 main/Contents-arm64.gz
+ 32fbdc090963b2593adf15d2ae548f3ce7a8c226fe7d82172be78a0724590e11 521282981 main/Contents-armel
+ 21c357893e943d6140d32fb0761a07987c126ca974c6e2a6350d3144539763e8 35956662 main/Contents-armel.gz
+ 19a636cc67382e7c6b472f4215495e0e9d35d163d6f5adc8fd14d4e3737aa16c 528756979 main/Contents-armhf
+ 4969c66f08a108f14e2916068fdf297951be31a0d0ab177f3230c4f90d25b794 36456075 main/Contents-armhf.gz
+ 3bf3f9bfd8a92aceb746c54435c6246eeb50e86a2081736b3dd4baf6cf5cb0d5 545147025 main/Contents-i386
+ 3b95eac92307c45ff53bd90b194281fc700d031ffbee8bc66e6f2da8240d96ba 37351315 main/Contents-i386.gz
+ 4966944c1f9a1c5deb988377eb491467b7735518adb62aa049ef6274f7c3e6c2 522760520 main/Contents-mips
+ 26dff52eebbccd2f4f1f324938d644ff41939466b81a977c18a5a0c1d7a690bc 36036428 main/Contents-mips.gz
+ dcd5c09137248da64553321d149bda3012283f943bc692b6a888ab2b36451d1c 524387669 main/Contents-mips64el
+ b30b1d72315d7b4001e0c8d2f587f5e69422c0fcec7656bad45e31540595334a 36106653 main/Contents-mips64el.gz
+ 3664a5579456f932dff527d5ea7d1522f646578eceaf9d9399e39663c042753f 526408849 main/Contents-mipsel
+ 0f9f3e1e05b1e480bde3805684672b9140fa68f03c794b39036c2e5995d9f245 36291254 main/Contents-mipsel.gz
+ 213a13d6e2afc94a847702ff0231ea88a30d3396d3d1e0c8309919a108557897 525623049 main/Contents-ppc64el
+ 73745252dc22291efce580854203e825e361defcf08fbd41e9e92928ec81a929 36164749 main/Contents-ppc64el.gz
+ bcac825125df97de22beed24e112c67771916c35253de375cebaea85be27e1ec 518948132 main/Contents-s390x
+ 667883032ece76f00fd8ac0e0198bbf189389085194b5d09061ee56fd9b7d89c 35843209 main/Contents-s390x.gz
+ a7c43dfc8d1f454ecee9467beb13c53e8ed556bb14fbe4c602a00dedfc5ab033 562813257 main/Contents-source
+ 25d68078879d11c20ad2c4569d64310bf426b9c8c45848276328d14f2a752a5a 62910627 main/Contents-source.gz
+ 0e204f0aff355ab22a63095f1ab0ef2e2096322b4f6e6d048436f320fed30ca9 612676 main/Contents-udeb-amd64
+ 50a5e5f5c1a7653920acdc37e6078cc4dcbf38fc6d3f593ced6dfe66bcd652c7 48325 main/Contents-udeb-amd64.gz
+ 95b6f113aa59c2b9ce7c3e63493bcd9bc2f2437b6fae15885e988896ebe110a1 602615 main/Contents-udeb-arm64
+ 37425f5b05af47eb016488ee8f2c15dd9d768c21994e6af3c687e990b296bb73 47303 main/Contents-udeb-arm64.gz
+ c1ad39c0ef4d6b50f6a53f9c742b152f10e70b62dc93a01e5074584ccc827af3 479897 main/Contents-udeb-armel
+ 305625671fc76a3e1020dbec0aa54efb95ba1bd183c5a79f48f70e143c5b6bac 38663 main/Contents-udeb-armel.gz
+ 047608d47cc09177796aaf0e2bbf8d224c08f57751248db4ccae287590a79b01 694946 main/Contents-udeb-armhf
+ 3e23306aff76208af5f089cf68a67359edacb4ab2fb9194ec54285bdeeb5dc49 53579 main/Contents-udeb-armhf.gz
+ e2bc095196c65f0c8a20d2dfb11f606acf24286de91dc38eccb0bfbf72acc04f 873048 main/Contents-udeb-i386
+ d35411804187bb7c470ef9992046f573db22023ba7cdd25bc952272caab6247b 65269 main/Contents-udeb-i386.gz
+ b44b3a93f4c39dcdbc22448343eac37e5e5ed302f0b409582d3a4ea344375993 722121 main/Contents-udeb-mips
+ 0024b9ab97a8c95a0dc20c5013100278d17e63daf504e7764acd060bf924d8f1 54179 main/Contents-udeb-mips.gz
+ fa243bb06b8267642bbe4e70170573035860b2bd5c59049a834125a09813ab1a 896156 main/Contents-udeb-mips64el
+ dff3b39faf034987dfa43f319cea12473817cfb6dbcb22362e61100b33b9f58e 65165 main/Contents-udeb-mips64el.gz
+ 46f2db52244b2609c34473062c9854a533789489d09196ca1246bd9ccd55cca9 896790 main/Contents-udeb-mipsel
+ 587f631d4bfc127d4d281d5fb3232f87468f1f6033e440218bc642d7c61fe511 65657 main/Contents-udeb-mipsel.gz
+ 89d63f7d823d995c284f4eddea02c354706f287aab2e007acf6ea93f87fa15ad 549534 main/Contents-udeb-ppc64el
+ ec1d12ff9d02168f060c04d2cde7cc8c8ff38c97fc2354ef29be03af2c9399c3 42112 main/Contents-udeb-ppc64el.gz
+ ecabbdec37f527e0e441511e78e04d61a151886d56d30cd452b2e7f32346058e 401986 main/Contents-udeb-s390x
+ 615e1de55f3529edf1353fc2b23550065dc91e684f3af4e3626253809231c34e 32973 main/Contents-udeb-s390x.gz
+ ed6aafe37ec8243adb763641ed0f7dd4e194dd274d30b754532a3abb1d5fc885 20390421 main/binary-all/Packages
+ 2fc6ae91509bb70ea7c2fc615d96b9325407d171b7ab86d6c8ede1c9680664e7 5111764 main/binary-all/Packages.gz
+ 6738c75ccbae7abb36804279031dbf010125c9ccaec5bf2b833c5ebebfb32a81 3842444 main/binary-all/Packages.xz
+ 7d2d2372f48f812985476de4ede122b880a17294f5bf25e8d5d3ba549bf7ab83 114 main/binary-all/Release
+ 168008b9f930d1f62b1de5f2f4f9997ce1c2b1383cc8a9fad0c2a6782899f714 44656195 main/binary-amd64/Packages
+ 15d6bbf761c95c4795d50d41a0385fd643c32b670c58d7abaa17f9736f17e578 10739377 main/binary-amd64/Packages.gz
+ c88216232d353afbc95e57a5ad04fc515335fb75659dbcae6967cd1109b7e4fb 7907472 main/binary-amd64/Packages.xz
+ 516f03cde021edeb63193e9397acdb0da7272abef0f3c05fb45b777928192112 116 main/binary-amd64/Release
+ 3889a49551b7ac28486dd1049b10a98e9614ba87bad30f4fd417f17c6435d455 43514688 main/binary-arm64/Packages
+ 28d478abdb9f5163e11870becfd3caae37bea73d4d6a95e9e45cc9c2f9e1c965 10513209 main/binary-arm64/Packages.gz
+ 67493607c9ebc82ec41751a9dd9955cbccead057cc0fadc5cdf3e3f5dc311777 7736792 main/binary-arm64/Packages.xz
+ a01b55245eb702536933aa450eb0893be41af4af8f010bb7ffc0e7a07d5fd92d 116 main/binary-arm64/Release
+ 67d18a269961d68e66c611a00d61b21aeb0dad7d6fed00a8b5da9410ae70600b 42670055 main/binary-armel/Packages
+ 2570256ccf958c325bb3ae5eed2f9d6ee810ba712e575263bac85feee3e4258c 10362991 main/binary-armel/Packages.gz
+ 9a3069845b72861739c83fe6a7cd6ec15dffe9659c726818cd8a312ff739af81 7627288 main/binary-armel/Packages.xz
+ 7ac9ddebee3ef14b4990f5e5a4fb03079a569bddaed4e1712b753335e4fb867f 116 main/binary-armel/Release
+ 5e0b99b0eea37d10fc21b1c046bc1583f8ed62cf3d945a1a30ecc75c3315c819 43208104 main/binary-armhf/Packages
+ b3627288b064de7ca2d98ad008ddfad94d9de2624c24def331b77650a0e4966d 10466710 main/binary-armhf/Packages.gz
+ d423d0b72277a978dad96605f2f2bc53b23288d88b914ba340b8d487051b6ca4 7697896 main/binary-armhf/Packages.xz
+ 86b95a33fcc279d16d8c8ecd12e4c33e3cb37e7671dc3f9db952687a4d2a1f9f 116 main/binary-armhf/Release
+ 6ffca283feda13c44283ccd52b71c6a9b726fa15e911f3c3ea124478589edc07 44343034 main/binary-i386/Packages
+ 2ded4d266f75d83f5964351168efc8a269e45d124f6cda8c030834e02f778aa1 10688157 main/binary-i386/Packages.gz
+ ec749fc77721c83b3b50cc6077ff247aaa0201dfb6afc4d4b37c2cddc3cf62ae 7863200 main/binary-i386/Packages.xz
+ 266e1164865ac60cb51ffe1d1039f5d5238f78e07b02df1def778037d32d71e6 115 main/binary-i386/Release
+ 2baa9d880f1857aad7a3e7d2226910076e0d47250480471e93571c965e3b1e14 42557231 main/binary-mips/Packages
+ d49ff9656a5058f25eb7df7ebc46b25afb523bc4c9306c6a19f78968d737d01b 10346394 main/binary-mips/Packages.gz
+ bb07d6a6c68b603a24bdc30d49c0c714e308e8ac11491cb2584fce4f71330521 7612396 main/binary-mips/Packages.xz
+ c589e6dae630bfb7de89ed7e85f683dc83ea937ad06bd58fa00254cd40702bd6 115 main/binary-mips/Release
+ 89cf1f4e4f76ef7e4effeefa47313552bfa42fef233f8bade91fd612cf5a5ce7 42846249 main/binary-mips64el/Packages
+ e4eff470b9b6394f644f6f0244cc4e965898393f9f9b2a851f32dac5df17703e 10373188 main/binary-mips64el/Packages.gz
+ 4f022997aacaef7737538dd60306f80619e8fd2b17260a25a016c610a22cdd2e 7636864 main/binary-mips64el/Packages.xz
+ 2fd57acc73e008d369888477760efe6ace31845451005165fc817f55825d46f5 119 main/binary-mips64el/Release
+ e9cb73ece59be04c5dac0e5ace2877a2c88427b6ffa466a70eaa48aa5af3a228 43000527 main/binary-mipsel/Packages
+ 9f9ba0200162f39bc3b48dd0208a92fc097c26d04ba5b0deeb4228d916f53c76 10412166 main/binary-mipsel/Packages.gz
+ 92dd18bc44dd74d0eae0810a2a38042d7de3b15e850f46d2709930bbf5286a5e 7659328 main/binary-mipsel/Packages.xz
+ 32c4bc3ae791366ccd7471b092c1fe6f8dfc119a6b00eb225363321ec0c93280 117 main/binary-mipsel/Release
+ 252fa922933a8ad176dbd48ef58f48356efbaa02c99a35c1f25112b51843c0f1 43280940 main/binary-ppc64el/Packages
+ 8b5054a0268cac706a034797dfd0513226322ea652889d3e47e85d97df463838 10455452 main/binary-ppc64el/Packages.gz
+ 432138d2541192d1b0fa8efd12f474c462c30f57be116b2dc20ecc2cbe45b33a 7692576 main/binary-ppc64el/Packages.xz
+ 13fe606809a74125f2fbba74f36d5392bcdcc7449355beea25af0e9b4ec568ae 118 main/binary-ppc64el/Release
+ be96e87755a4df2b3509f11e37313d0caf4bc8d0919b6fb8fbfcae1aa6cc3e84 42631824 main/binary-s390x/Packages
+ 8acfdb66322fc278e491882e433c7a73755156bc1df93ddfef2886112ffedbe3 10361868 main/binary-s390x/Packages.gz
+ 6b851bc1b40e44d33447daae396db1d6e756c49b5aa7324dca34c446931804ce 7623224 main/binary-s390x/Packages.xz
+ c10370d6c719ff21025669e2ea71d1b80f50577c118fb39fe9e02a051311dba2 116 main/binary-s390x/Release
+ decc049958f6bfd978a2e6700f8edfd284c501c53c3ba9f53212bb72e4821d02 63142 main/debian-installer/binary-all/Packages
+ 98565f932bbeeef14e87df564c9ee020db53bab092e985810171e8fff36db9a2 17278 main/debian-installer/binary-all/Packages.gz
+ 20e2572a449ebd8c97bdc377247ca1eab210500fbe2c59876332a3f08cfd5af6 15132 main/debian-installer/binary-all/Packages.xz
+ 7d2d2372f48f812985476de4ede122b880a17294f5bf25e8d5d3ba549bf7ab83 114 main/debian-installer/binary-all/Release
+ 5b963a67aee583026122382a2a163cf7b3374dc670a209c7bb2e8626fa4ca714 271411 main/debian-installer/binary-amd64/Packages
+ 057a072795234cd9b1cd750c081276ac0570ada1f6f9f3a36065271e757aedcf 66996 main/debian-installer/binary-amd64/Packages.gz
+ 9e65d94a6691d52a378b2c2619e84f246fcf763a1545d8a0a57d0aa2467bf727 55500 main/debian-installer/binary-amd64/Packages.xz
+ 516f03cde021edeb63193e9397acdb0da7272abef0f3c05fb45b777928192112 116 main/debian-installer/binary-amd64/Release
+ 086cef844e0af82fb66381137706786913784993c51dd1113126e178e8760e00 255344 main/debian-installer/binary-arm64/Packages
+ 64b196a3bb8f72f8756c87192e2f5bc987ee2706f7fdaf758b8aa877702cc251 63881 main/debian-installer/binary-arm64/Packages.gz
+ c0bdae2b1d3cb53f64a1e6380f22cd528a17f5155729f6b8dcdc32b0b6c8e5aa 53440 main/debian-installer/binary-arm64/Packages.xz
+ a01b55245eb702536933aa450eb0893be41af4af8f010bb7ffc0e7a07d5fd92d 116 main/debian-installer/binary-arm64/Release
+ bac6f7b2d82ffdc08f4f67eac41c309bba59440405c3d9fc9fc531f4b1645da1 248135 main/debian-installer/binary-armel/Packages
+ 5544c26f909747c44e9978284f5500fe5d33dde6d57cc4bc4ad936ba0978eee0 63564 main/debian-installer/binary-armel/Packages.gz
+ 3ca8372890b17b51c11f12a2ac7df310699266fe346e09f4ce2e1ecbc5d3ce6a 52876 main/debian-installer/binary-armel/Packages.xz
+ 7ac9ddebee3ef14b4990f5e5a4fb03079a569bddaed4e1712b753335e4fb867f 116 main/debian-installer/binary-armel/Release
+ 7697562c72661fbb992f466b27ec55fe37af598d08c25dc37072453a4c6190d0 251177 main/debian-installer/binary-armhf/Packages
+ ab9c143ccd59536908ce360bb095017021129147c92869e9815928cd73cef1e8 63799 main/debian-installer/binary-armhf/Packages.gz
+ 38e376fa81eeceea908892c45a1ee0288dc6e8fe188c2752de26e0759e7f2694 53524 main/debian-installer/binary-armhf/Packages.xz
+ 86b95a33fcc279d16d8c8ecd12e4c33e3cb37e7671dc3f9db952687a4d2a1f9f 116 main/debian-installer/binary-armhf/Release
+ 2912b5fd81980fc0a0a17c676200eb41fbf6d2c570c1430060909bec958fde93 345002 main/debian-installer/binary-i386/Packages
+ e4df5943c1e42054f034fdb46e179d3928d5f8be8fc6022958af042f59bd3e62 76332 main/debian-installer/binary-i386/Packages.gz
+ 6ff7b91661b1e161c261d05f1c5f30a856f5649507e6c2035c126c4db33a067f 63380 main/debian-installer/binary-i386/Packages.xz
+ 266e1164865ac60cb51ffe1d1039f5d5238f78e07b02df1def778037d32d71e6 115 main/debian-installer/binary-i386/Release
+ d915fc3757d2236b72dc081ef49da351e143ced930cea845e06c2284129b90b9 307351 main/debian-installer/binary-mips/Packages
+ d0390f7138af0e0b7044a6d290ad2efcf83f8e31ee82ff095ee7b5d2e5396280 71711 main/debian-installer/binary-mips/Packages.gz
+ 68ce07514f62e01656987141b1fc43181af0449abc5dac88da533facccf8a8d1 59860 main/debian-installer/binary-mips/Packages.xz
+ c589e6dae630bfb7de89ed7e85f683dc83ea937ad06bd58fa00254cd40702bd6 115 main/debian-installer/binary-mips/Release
+ 63e75105ab43a65e8799ea0c27fa0edb27bc5cf508b05fc870743df7995fa478 370605 main/debian-installer/binary-mips64el/Packages
+ 619062ed9b33f83533a0efe1c07c8111e0d553e08ce7929066308d8491cef881 80509 main/debian-installer/binary-mips64el/Packages.gz
+ 463eaff5c7cbb551b21997a09e7788e6b209eb3e3bcbcf8c61b687a245d31276 66792 main/debian-installer/binary-mips64el/Packages.xz
+ 2fd57acc73e008d369888477760efe6ace31845451005165fc817f55825d46f5 119 main/debian-installer/binary-mips64el/Release
+ a4fcd153c9dc20fa36687df593eb6bd1194e4029a1a6417dff0fb1013b197501 370026 main/debian-installer/binary-mipsel/Packages
+ d0894a703ed03e9c8fc97a7854d61f3d1163a970326cd334516874bc0ab9a61e 80667 main/debian-installer/binary-mipsel/Packages.gz
+ 37e3700ace33291afa7210fd9b85e6914ae4d3c5ad3b574fa4be4de20f54c2dc 66912 main/debian-installer/binary-mipsel/Packages.xz
+ 32c4bc3ae791366ccd7471b092c1fe6f8dfc119a6b00eb225363321ec0c93280 117 main/debian-installer/binary-mipsel/Release
+ 2a294ade50ef758ccba05d6fca245d8980e8ece243dc53d0812b3262a958cff3 254867 main/debian-installer/binary-ppc64el/Packages
+ ea68f0b6c92517d148f56f79dda306a8e9b92810af4ab8e1d63c3f1d7638ac46 64252 main/debian-installer/binary-ppc64el/Packages.gz
+ 47a0e578122d488bfe8e21b507a1485c63d156054c211bdfdc461fbdbd5cdbe5 53500 main/debian-installer/binary-ppc64el/Packages.xz
+ 13fe606809a74125f2fbba74f36d5392bcdcc7449355beea25af0e9b4ec568ae 118 main/debian-installer/binary-ppc64el/Release
+ 8d67dcfbd34d044fa0776143cf5fccc06b4dbbc56b138384c2a58822dc3c558a 225602 main/debian-installer/binary-s390x/Packages
+ 15b77b3b1b9fef3b862f1cc484dc8bbb175974f4c1577cf51b2bd650daedf93b 59739 main/debian-installer/binary-s390x/Packages.gz
+ 0a638be2a93286db3dffb9de0928427c4d3dfe21e2ff4800c2d5b25cf6ef7b2e 49824 main/debian-installer/binary-s390x/Packages.xz
+ c10370d6c719ff21025669e2ea71d1b80f50577c118fb39fe9e02a051311dba2 116 main/debian-installer/binary-s390x/Release
+ ae1ada6294fcf57e0d7f45401fabe4e2b92baa877c47abfc48848de02c252ccf 17636009 main/dep11/Components-amd64.yml
+ 0d4993820c68feb474ff3808458fda3fea60bae7fe009e6e7ae3354eb0d4fc74 5882693 main/dep11/Components-amd64.yml.gz
+ d1bb17b0962bb3605f9cc019e504fb0e040b090b1014808a479ee84b086ad7d1 3807040 main/dep11/Components-amd64.yml.xz
+ 3e629d67397f40f0605bc25a485831feea70fc56406b789e71994f9363a8dbd8 17503252 main/dep11/Components-arm64.yml
+ 049d13a803cc7a7055320a29e65785bceb740afcec373f2e48aa2053c116e6df 5850429 main/dep11/Components-arm64.yml.gz
+ b93caf9e36bdc3ff365f930550cef5594be9ae0cb1d71cdfa059241179e40454 3781052 main/dep11/Components-arm64.yml.xz
+ 4d732e0d18e8132a1126ae93a3ab6ce5803ca491fb0bbb07c782dd3686d43174 17108464 main/dep11/Components-armel.yml
+ 26e6ff4fe3c9c04e731a10fe5054d739ed61f7d45dabd7ff733f153e59407eb9 5710419 main/dep11/Components-armel.yml.gz
+ 3152dde22102995553d6eef4b5f8a52504b4ca27a785ed45090a73818ce5bc68 3694524 main/dep11/Components-armel.yml.xz
+ aacd27825688f9d9d73c00544556bb6ebe18577648cac4e48f998afd443f4236 17414118 main/dep11/Components-armhf.yml
+ d5495763b7941ed74e9ae989c87e4a3b1fafa32b2e5584ce3b7c39096aa48613 5813436 main/dep11/Components-armhf.yml.gz
+ e7ab179def4d3d56814ff8ed5f33254768d713ad03be35243aa1a4c2115996e7 3761128 main/dep11/Components-armhf.yml.xz
+ 382c0b11e601db949a18cd2b04ad1f8bf71a8475f3a4081e8567f62915663c00 17595585 main/dep11/Components-i386.yml
+ 4e774f47086ac2b44c394affc065e8ec5a5e6c6062bfc2b2b485541b0b813ce6 5873032 main/dep11/Components-i386.yml.gz
+ 244dbdddee0ccb6dc1320c9f98f9aefe8b309ea289bd0b25845dc1546cb4e930 3798312 main/dep11/Components-i386.yml.xz
+ 8bff5da2bb4af0741b123a168bbf2fc0af3f39ac8e6aa1948adeaadf89e93212 17138095 main/dep11/Components-mips64el.yml
+ 1d3eeb2a29b242d1b6c6411b515215fdf2ace8bbf68953b30534fad2a079463f 5721423 main/dep11/Components-mips64el.yml.gz
+ ea637df6cf6b5f34b9c40d706013c58477ab5bc3ad98ab5c1b53e687b69d9bfe 3700172 main/dep11/Components-mips64el.yml.xz
+ 4b24ee95b31cf5918acdce685ce719e65c9ee76093f529b9a636fbd7cc3989a4 17193596 main/dep11/Components-ppc64el.yml
+ f8e8c84cf0f01085ffeae75609c2a64a854a0da1b6cc1963caf18dcb4da0a3b6 5735595 main/dep11/Components-ppc64el.yml.gz
+ 0da8ec5de7c7c8377b37f9274759e298d6ccddba5ca8e6a4b791971ca6e70da8 3712596 main/dep11/Components-ppc64el.yml.xz
+ 5e68cdda91847e0fe330dcd94c8c86938a3c094c61228399fa6aad1b0415d9ff 16895854 main/dep11/Components-s390x.yml
+ 458144638a3d52161c2e636691e914ffa47783369210f2752394eab6c3aed4bb 5630817 main/dep11/Components-s390x.yml.gz
+ 0faca5b3c2977b2829202cbeb0393170d9192a9a79805eb7db3cfe64471a5921 3649696 main/dep11/Components-s390x.yml.xz
+ dc999a4ea17aa5f797a43009d797c7ec3a8c2da54e784beb2ea27a127e7ce449 14067712 main/dep11/icons-128x128.tar
+ 3a95a1a11e4deed8dc1b502c4f023b8d0f090d1267e3f5e36352b47aed6cdbb0 12784398 main/dep11/icons-128x128.tar.gz
+ 3e29369d6670db38322d3fea9fbdfd781a0f84427611ac1a5b62eee2d372bc5d 5092352 main/dep11/icons-48x48.tar
+ bdb819f9f320271aa81400179c292a45031c013f921229735babf7ae3c13371f 3769936 main/dep11/icons-48x48.tar.gz
+ 6aa2a19cb4b7f9ef4bdf63fe851f93ea4dd343e9655de82dfa934a8f4ccb9b54 9509888 main/dep11/icons-64x64.tar
+ 8f6622eccd2370e8aa20ef188b480c47847b3e8c9ff41bbb9ddf674ef766d6df 7595526 main/dep11/icons-64x64.tar.gz
+ 0a19019ef516d847ccf29119d4b00e195208034e7e743e9d9f520c487e6a8ce1 8583 main/i18n/Translation-ca
+ 261a7d13ba8d1bfab5ba67c2cf68aa9ef8da9380e418fa5606f5cee7530a4fd7 3510 main/i18n/Translation-ca.bz2
+ ad6c1279f07ece247a5002f3b1755cfc350a2c3181f4a5572cb22661afd32891 1366172 main/i18n/Translation-cs
+ 0c5cd9fa962bb72a406987715aaa801c25b27de0a2d971a7911c25dd5fecc581 364196 main/i18n/Translation-cs.bz2
+ 6812c7220e5c5bdc3ccc2c4274da2d3665b14ea9760ae6fc12a401208cd06737 19338879 main/i18n/Translation-da
+ 797e90fa21e67261fc5e1436b7c862a395915bbbc93091016fdf63250bebe507 4250838 main/i18n/Translation-da.bz2
+ 064f3858b4fddbd96c12e18a59c14a0488b3e9b5dd7777807a069a74cafcc3d3 7372339 main/i18n/Translation-de
+ 62aaf172d1b2bbdd35cfaf1270087bc568b7f2670d9534f150035b8bff1dde21 1654058 main/i18n/Translation-de.bz2
+ 284169348b8bd4e0de4cc5641eeb05577e80d2bd736452e454976c052cf3cbe2 1347 main/i18n/Translation-de_DE
+ 481a435ad350105b74c4972859c44f447b7a8b5edea0d42f6dd635792e00a461 830 main/i18n/Translation-de_DE.bz2
+ f287f63af0023e297789985164d37d7e308f8fbcd8919dafbd2cfa2cdc0dac3c 6733 main/i18n/Translation-el
+ 845d38e74d1a929b368e55d1f1096bb99405662bbb5b81f1db9b1588e0d3eaed 1616 main/i18n/Translation-el.bz2
+ c2135968c5d848fa876e5a1ed01a7c94a21b28e6b75898fabbd9fcc2145c8aaf 29377800 main/i18n/Translation-en
+ 81c2ee543d7e1855f8cf18ab39c1e8a4bcb034d2affb9b06094e59113c8f92fd 5970967 main/i18n/Translation-en.bz2
+ d9276fce589c3a2e3d7649c9876f6f463c4bb537a851a2a6e92567d88cf5b912 2704 main/i18n/Translation-eo
+ 000b462c41e5e5761e9d904ce5c14f557b48975ca39bc740982b50345dc2c74c 1353 main/i18n/Translation-eo.bz2
+ 4d80ab4e6d43f37ccdbbadfc60ea7dcca5378f86ff7792b6b826cdfcd868153f 1386165 main/i18n/Translation-es
+ 1abae05bde29468308f7ebf0085b8c149c8ae80637a6bb28c0168c08b59ee7d0 334639 main/i18n/Translation-es.bz2
+ eb73e0e15f6f54f617fc4e0c65f711356513e8fa3a1824755fda0f7675ab1554 12877 main/i18n/Translation-eu
+ 59bb11c7366d6f18fc230a5a7246a9d8bc333f07a0a2717cf807a3eb749e27cb 4940 main/i18n/Translation-eu.bz2
+ fb7d993dd981b31d6883afd6462d8781face77b6ed56abf425c8f1b2a58bd3f3 292391 main/i18n/Translation-fi
+ 7fd58d2f04c10c4caad28f9f03d3348aeeb6065f0e2097c19049df0d766788da 83317 main/i18n/Translation-fi.bz2
+ 6d96783320da61a4c6a48564017c3162e6a18ae6c4c66b5341f1a33f02c738e8 12076413 main/i18n/Translation-fr
+ ec33dfa0a51ff60b51c685e878f6c5cf3f6aba4d9e108a2ee777a962791c52aa 2478327 main/i18n/Translation-fr.bz2
+ cd557c96e9949763e7d30a53a608188c20bef4475011985bd8bd22ff3002b734 19295 main/i18n/Translation-hr
+ ef508176ff5b8513f93299ff4075fd034784233b10aa274859d47c2a8e7104b4 5467 main/i18n/Translation-hr.bz2
+ 5418e1c65d1bc8c977330c3ad745a4cef5915f537cd9135e8b611ea993b71714 76824 main/i18n/Translation-hu
+ 7c6ae2a7078d734f64a6ba45f9547222f11f056d14822e21355bd326a03f1577 25899 main/i18n/Translation-hu.bz2
+ cc4a606c914c16f3fd620e2d49594e695a7b249f8faa627606f6db0baeeb67a8 5807 main/i18n/Translation-id
+ e271bb80b23dd2e2e739c6a32a6bd2fb9d666cd30d52c8299707f6a4703429af 2493 main/i18n/Translation-id.bz2
+ ce367f2aa25d865702fffc9c6c02eb678bdb8fd880c73b139ff527b40ba6521e 24318841 main/i18n/Translation-it
+ 3316040e84824e7a691255d9bae9c778a308cf31aaf8f759fa8c030e43d545f4 4853002 main/i18n/Translation-it.bz2
+ 440ceff1b06a70ff9d67d7378bfdd50bcafcb22ca8bdcdfa7bbed6e30595d288 4944611 main/i18n/Translation-ja
+ d4c46b0da64640a2e883ee9e27c2e656178a46f3aab96228037ce94813f061c9 892190 main/i18n/Translation-ja.bz2
+ 2c55c8d68bb607be575330f6997dbb4e47e10c2c7ad7158fc328ba56c88a1127 14066 main/i18n/Translation-km
+ 70d886e0ccc3955ec5b39c2a4b2aef7313aaeaae41200e06f2dfacccc9289310 2744 main/i18n/Translation-km.bz2
+ 0d3cf3232797cef6e7cb69d8723c51c29b028d92b672a2f258a2e588934321c0 2085975 main/i18n/Translation-ko
+ 1477a4a675a138c5545968a955f00b9f1845b6bbed257cba78f32cff96ed3cc3 467722 main/i18n/Translation-ko.bz2
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 main/i18n/Translation-ml
+ d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 main/i18n/Translation-ml.bz2
+ 32f29702ce1043f88b5bc518c42170b70f453420517cc419590ddb85b9bdc396 2030 main/i18n/Translation-nb
+ 57a199a512a810fbdc135ede04597528788a00959c32bb13a37bf20d0010cd6b 1188 main/i18n/Translation-nb.bz2
+ 1b50179109c9e99a96d692944ab1e5fc9f2ca9aed459081479ac8efd87da5e17 191719 main/i18n/Translation-nl
+ 98a900a15209956a0c4984ce6404c7eecc8dcb98ce12a88ba27685864e5668e0 53879 main/i18n/Translation-nl.bz2
+ 6b67b4de476a264e541859b0018067fc76e2c8811e27c84fe470f1942b6a117e 2280270 main/i18n/Translation-pl
+ a3eb01f2c453821244040b22fc48068cd5de6fa8a14d24026e2005022fdae703 543734 main/i18n/Translation-pl.bz2
+ 3fb89751961fc21b61e4e1236778a19e73a8c7c96eb8be6b7e3115102fa25ebf 1228959 main/i18n/Translation-pt
+ 64d7194afeadf3b43c7f68ec010c667f70f1d650649daec424c62a0e5c02cd75 309452 main/i18n/Translation-pt.bz2
+ 054d02cd6cf572898fa6d2d23ad2ae4d65bb15dd743c614d35e6b714cf52f508 2848622 main/i18n/Translation-pt_BR
+ e95285617d04dde90266d27ef57823c38d91be6203706c0b350dc7c4d4c576e0 683144 main/i18n/Translation-pt_BR.bz2
+ e7ab43bbc80d3424f08ec3e14ec6219b7bbf86a201b3bf719393a578ab064ea9 2710 main/i18n/Translation-ro
+ cbc7eed8d01c12cb9bb5b551548780739136155c80f26a09b26ec2ced71a387f 1374 main/i18n/Translation-ro.bz2
+ 4a8974efd1bad48edc29e00a264d563f47caac70f97944ea8805d5e62540fc95 3167815 main/i18n/Translation-ru
+ 5c2db1497e78c196838d95dc7032047ac440b55a5571366c00f5275e8d347bb8 515734 main/i18n/Translation-ru.bz2
+ 858c2e8f7a1cbc095af8cb896cb858206609f4ed396a30063d48de9d332675c8 7171062 main/i18n/Translation-sk
+ da3a9fa0241cc3ce78351096ca718e417dd4ebbc6dfec8ec27476585470cac21 1545666 main/i18n/Translation-sk.bz2
+ 31c1cf587eb9d500b34c35c6c754c72df5173cf7c16f6ff181c626f39ede8494 346061 main/i18n/Translation-sr
+ 93ac28a724e1a0a3d74f756f94ff90038ba75addda5a3f105752bd1b06396b72 63630 main/i18n/Translation-sr.bz2
+ 1b7ff19980f5be694cc97e2fcc0867d75187f9fb7495afba87023ac23021d78b 101310 main/i18n/Translation-sv
+ 33a3e5355274f2dfcb7013f2692f5e8a6423471377c211e48b9e91f98fa1a2a8 32083 main/i18n/Translation-sv.bz2
+ f2046174615fb12f150c0c7b187874485299073efbdcd2463b86cfcf36e497ab 16580 main/i18n/Translation-tr
+ c4e499ef14f38119d052f1ae8c99321338e1ad9c5fb3e3f6bb562601a1d8feaa 5960 main/i18n/Translation-tr.bz2
+ 0b008e71f5b09f659b76a5c2a01fddfd950f916adc937c4f6dd6063f85490f79 3992741 main/i18n/Translation-uk
+ cb160b0b7f77ccce994a4c202443e80b709bec66043d5b2873fb61ab41786eed 624098 main/i18n/Translation-uk.bz2
+ 76cd56ee66ffbd8efe1c5271f5b489e1be5a37ad6810fa53b4f8317ddbd63663 26441 main/i18n/Translation-vi
+ d71a6fb0515d8c2f6949f4401e70beb8a77d8702eb09b64c6105ce2d4593ce76 7797 main/i18n/Translation-vi.bz2
+ ba5bf385ecf4799de85e8ab873c233fe0478bbdd30611baf528aea51ae2b97d2 2799 main/i18n/Translation-zh
+ ebb2e1910c3096f393f46f4fb6b1316e571d805d654c2d97d0ea92ddb2229424 1526 main/i18n/Translation-zh.bz2
+ 92fbeb098ff3256eb921db661422ae92a9b72e82d01d2ee677d2fdb8413e195a 479128 main/i18n/Translation-zh_CN
+ ddf3c24b3468c575fc03734fdc25e7a1a914421d3194c43864ea4fac8378d13a 125740 main/i18n/Translation-zh_CN.bz2
+ bebb6004c777b95938ecd905d78c970aa3895fd4a65b10227b2fb627c959f124 44731 main/i18n/Translation-zh_TW
+ 1a164f8b284b53e6d3b3e0a9815e02cb7ffa19acc07a599e8f9ef384e10612c2 16257 main/i18n/Translation-zh_TW.bz2
+ 88799c27dd5a8e80e3ea60bcdd76b3fc079cf2a732707a25b6c48644832a8550 56179 main/installer-amd64/20190702+deb10u7/images/MD5SUMS
+ 8cb7a51e8669ac59c7a73c406dc32ec3570604c271f62b0d86d4a4b5262108ba 75295 main/installer-amd64/20190702+deb10u7/images/SHA256SUMS
+ b930348c06b644bd294ae98c1e21ed14aa42e3e9368f4c60bbee4047ae2216a4 56179 main/installer-amd64/20190702/images/MD5SUMS
+ 17cfa6a677e4253e82ee6b9ccffc9143277b1911ec472438889b7373ba509ba2 75295 main/installer-amd64/20190702/images/SHA256SUMS
+ 88799c27dd5a8e80e3ea60bcdd76b3fc079cf2a732707a25b6c48644832a8550 56179 main/installer-amd64/current/images/MD5SUMS
+ 8cb7a51e8669ac59c7a73c406dc32ec3570604c271f62b0d86d4a4b5262108ba 75295 main/installer-amd64/current/images/SHA256SUMS
+ 4ad2ee646f96f909cd901219fe9d234117b2dad29327d0f157f054d052558f9a 30751 main/installer-arm64/20190702+deb10u7/images/MD5SUMS
+ c50144aefb760f25ca6dc5d466eefbf498c3b88ad1c514d8e064ee77046dccf2 42187 main/installer-arm64/20190702+deb10u7/images/SHA256SUMS
+ d9cfc8206347ee0c5cd548b0d5e925a8c209f48d1b24cc41f3faaf486c5de1bb 30588 main/installer-arm64/20190702/images/MD5SUMS
+ 2acbcd56fadc22705ed93273c090ca4b96526c297f8c1d6112b9bee85e0dfbbc 41960 main/installer-arm64/20190702/images/SHA256SUMS
+ 4ad2ee646f96f909cd901219fe9d234117b2dad29327d0f157f054d052558f9a 30751 main/installer-arm64/current/images/MD5SUMS
+ c50144aefb760f25ca6dc5d466eefbf498c3b88ad1c514d8e064ee77046dccf2 42187 main/installer-arm64/current/images/SHA256SUMS
+ f4ee988e44564c8e1f8fb31d1184a31d1c406b215e76821589dc8d935b32cbfd 21361 main/installer-armel/20190702+deb10u7/images/MD5SUMS
+ 4471bb107a0a9e5610e07f62353528fe3f2abf0372b685b803b65d3797b24b34 29821 main/installer-armel/20190702+deb10u7/images/SHA256SUMS
+ 947b239487ff0648e70a61f8ce7c8444db53034268d64afe48f4c3233489bdae 21360 main/installer-armel/20190702/images/MD5SUMS
+ 07108ca1bef26e8a8f4fbc0f8a32cbf381b96ce7aeb56f9dff3f62643e171adb 29820 main/installer-armel/20190702/images/SHA256SUMS
+ f4ee988e44564c8e1f8fb31d1184a31d1c406b215e76821589dc8d935b32cbfd 21361 main/installer-armel/current/images/MD5SUMS
+ 4471bb107a0a9e5610e07f62353528fe3f2abf0372b685b803b65d3797b24b34 29821 main/installer-armel/current/images/SHA256SUMS
+ fccc98b997b8efae0b8f23e17534a504929dda9bddf26e2ca51e77860a6ccbca 53105 main/installer-armhf/20190702+deb10u7/images/MD5SUMS
+ d4723ea295267cf2f3e646484823884e4f65dbefef3348c8a27d832d4ed2fa37 76541 main/installer-armhf/20190702+deb10u7/images/SHA256SUMS
+ 0910063c0cef763aa7db7dd84f60ad9f8c214417642927b21d2fcc73445a8bd3 51125 main/installer-armhf/20190702/images/MD5SUMS
+ fcbe6bc7fbda9f8d3332d11c949e77901cf4b81c368561ea6dde731ffd529e04 73665 main/installer-armhf/20190702/images/SHA256SUMS
+ fccc98b997b8efae0b8f23e17534a504929dda9bddf26e2ca51e77860a6ccbca 53105 main/installer-armhf/current/images/MD5SUMS
+ d4723ea295267cf2f3e646484823884e4f65dbefef3348c8a27d832d4ed2fa37 76541 main/installer-armhf/current/images/SHA256SUMS
+ 7bb302c04fd9b4291b2ba9017ea13e1b4dd9e4174601c9435156d30e16bcfd49 54808 main/installer-i386/20190702+deb10u7/images/MD5SUMS
+ 341121c45e4ca89b9267aec6336490d85ad29e7e9ef067d0d1c2552eac043eae 73988 main/installer-i386/20190702+deb10u7/images/SHA256SUMS
+ a37766de66137447adf0dade279c6aa206448d310a9ff64dbccee3b4b14e70a8 54808 main/installer-i386/20190702/images/MD5SUMS
+ db753e6c3ff520459cf018e8562be164f5a88beab1f37e65cd39d91ee1d4fc38 73988 main/installer-i386/20190702/images/SHA256SUMS
+ 7bb302c04fd9b4291b2ba9017ea13e1b4dd9e4174601c9435156d30e16bcfd49 54808 main/installer-i386/current/images/MD5SUMS
+ 341121c45e4ca89b9267aec6336490d85ad29e7e9ef067d0d1c2552eac043eae 73988 main/installer-i386/current/images/SHA256SUMS
+ ed85ff13779ea2d5ca6f9e724840a475b8c78130e784249c6723895f93e48f6a 417 main/installer-mips/20190702+deb10u7/images/MD5SUMS
+ a7fe4d483366f8187b37c544b8506042203cfb3762ef9250d7623633b30c55e6 717 main/installer-mips/20190702+deb10u7/images/SHA256SUMS
+ e549e00f75f6c63cdf22a207c8537167e4e54cb8b17f87ecfe9ce54ac40fc472 415 main/installer-mips/20190702/images/MD5SUMS
+ ce424bd500e3289e0a9f9082eb33bfd97fc58c9f5081dd5b9d0ef44029cd56d4 715 main/installer-mips/20190702/images/SHA256SUMS
+ ed85ff13779ea2d5ca6f9e724840a475b8c78130e784249c6723895f93e48f6a 417 main/installer-mips/current/images/MD5SUMS
+ a7fe4d483366f8187b37c544b8506042203cfb3762ef9250d7623633b30c55e6 717 main/installer-mips/current/images/SHA256SUMS
+ bb4dfd6a913ab04e4554ff95a42dc7078f760c58759d63800bfdbda377dc8dcb 630 main/installer-mips64el/20190702+deb10u7/images/MD5SUMS
+ 852cfb080efdab9a4c557f8a29df3225125e5f4dac90560d70844625a21f71b6 1026 main/installer-mips64el/20190702+deb10u7/images/SHA256SUMS
+ 9eaf96172f5d0eacecdecbd3a137fce2408653ee03ca457b42583f1c78fa2987 627 main/installer-mips64el/20190702/images/MD5SUMS
+ f696a0bb84fd77125e0552dcc514620c7f793a139d0342eae6f1b0771f60521f 1023 main/installer-mips64el/20190702/images/SHA256SUMS
+ bb4dfd6a913ab04e4554ff95a42dc7078f760c58759d63800bfdbda377dc8dcb 630 main/installer-mips64el/current/images/MD5SUMS
+ 852cfb080efdab9a4c557f8a29df3225125e5f4dac90560d70844625a21f71b6 1026 main/installer-mips64el/current/images/SHA256SUMS
+ c4352e120d73d397a73d866f48fe3ba3c7bf1ab1fd8a0866dc6fb7149261b4fd 630 main/installer-mipsel/20190702+deb10u7/images/MD5SUMS
+ 4fbf0781229f6ec8b044fa3ead972186db969fa6a8868839cee3eee6a5fc8098 1026 main/installer-mipsel/20190702+deb10u7/images/SHA256SUMS
+ e1d65034c8fb4c3121392c92c50dd9c2f7dc0334e3b90b308edcdf84779b0b78 627 main/installer-mipsel/20190702/images/MD5SUMS
+ be9b533b7fab891b5a70059f0a7778da48d61c2395b91e067b094d8165e265f1 1023 main/installer-mipsel/20190702/images/SHA256SUMS
+ c4352e120d73d397a73d866f48fe3ba3c7bf1ab1fd8a0866dc6fb7149261b4fd 630 main/installer-mipsel/current/images/MD5SUMS
+ 4fbf0781229f6ec8b044fa3ead972186db969fa6a8868839cee3eee6a5fc8098 1026 main/installer-mipsel/current/images/SHA256SUMS
+ 14d1a3a459998205ca98ae34c9162e65e3a2ce116dded7fc337a88d7e43c01e4 576 main/installer-ppc64el/20190702+deb10u7/images/MD5SUMS
+ fcfb6e8c8813db572db92575ba92a055af5348aed2b1a68fc1bfa3ed0339ad29 972 main/installer-ppc64el/20190702+deb10u7/images/SHA256SUMS
+ ec4cc0688449d392c9c99448a130901477da2c0049449d755d56a81c7cc28fa1 576 main/installer-ppc64el/20190702/images/MD5SUMS
+ 7d064bb87434ebec491fe828f105f2fad403de798a41f2911f17bb489025587c 972 main/installer-ppc64el/20190702/images/SHA256SUMS
+ 14d1a3a459998205ca98ae34c9162e65e3a2ce116dded7fc337a88d7e43c01e4 576 main/installer-ppc64el/current/images/MD5SUMS
+ fcfb6e8c8813db572db92575ba92a055af5348aed2b1a68fc1bfa3ed0339ad29 972 main/installer-ppc64el/current/images/SHA256SUMS
+ d6822aea9c37008277f5c58b7cf9c1c91fe9656946eced0244d828a7c44120ab 374 main/installer-s390x/20190702+deb10u7/images/MD5SUMS
+ 485a6912fa653025c76067b547b6b325631244901cffb249b3f570fd180d54e2 674 main/installer-s390x/20190702+deb10u7/images/SHA256SUMS
+ a18a237d1f6e6864732b731e9ccd4d616497d1d87ddee2de9820c5b8729ae4d0 374 main/installer-s390x/20190702/images/MD5SUMS
+ 8a1bf4ab6a36a05f88c11fc48d44896517fba6a495f15f81205dedc7c96a91f7 674 main/installer-s390x/20190702/images/SHA256SUMS
+ d6822aea9c37008277f5c58b7cf9c1c91fe9656946eced0244d828a7c44120ab 374 main/installer-s390x/current/images/MD5SUMS
+ 485a6912fa653025c76067b547b6b325631244901cffb249b3f570fd180d54e2 674 main/installer-s390x/current/images/SHA256SUMS
+ a6265ee5e2ca37241ebeb346b196ed3302cb35e0bb2e388774521ac5c2e70ca4 117 main/source/Release
+ e9958030da1c3ea690ba210e4116bb46b8e53e2d8790e2ba44f9b5882ba18fac 40374106 main/source/Sources
+ 78094a3a1b9118f5625cd42f4559fe6733f057077b08fba4abb1e8073729a9df 10410977 main/source/Sources.gz
+ 60d9a8bfc6cafd440c2996528f6b2cadc225c9fc85b5e6246f63d96d62e183e5 7841528 main/source/Sources.xz
+ 14532ad2c7f87b363d52dd16172d368998b5f6914ccf987d4ea89c4c070709e7 15041698 non-free/Contents-amd64
+ 69d40670f577f1dec2c9f36ae9a7f26b9fddfa8bf8c705ead40bea8558b7d38d 860518 non-free/Contents-amd64.gz
+ f083b85927065a4b886c5135e0b437ba9206377f8fc1ab2bc2db5c46554ce8fa 13915102 non-free/Contents-arm64
+ da3d3bda9b6dc35eb40d625b85fe4eb3216757dd4499730516ae77180eceeb1a 772610 non-free/Contents-arm64.gz
+ e59789bf28679e8dc68c8e2bcc15cf99d259e8f2cad9ce1301b710d5922cc372 13907158 non-free/Contents-armel
+ dae7f0f40f9462bf73273cfddf27679835c65673b472cdc82810902a0ac33d8c 772003 non-free/Contents-armel.gz
+ e4ddc688ec7e311842dcfe3f558bddabd8dbf3c6d7826cfde3b47882cd9f0388 14007145 non-free/Contents-armhf
+ fd1d6a515269a55b9ddb115e91ef36368c3a508edffd8e4942de8431d8d0b54b 779131 non-free/Contents-armhf.gz
+ 7f2cf56c0fb66e0ba991a818677a9b72764374ae4bbfe94262ea84853f69f890 14178942 non-free/Contents-i386
+ 3ee986f785499fa9d477492382b445dd88ab48a008668f639b75b2c41eb7b6f3 794908 non-free/Contents-i386.gz
+ 8903c9bbb1108c603d118001f2ad118b1e27d66da9606e684bdb6732a8432a9a 13903213 non-free/Contents-mips
+ e31a2e82535d9924ffd4e6be3c74f3f254503c30de844a4c407a3c2b7004c235 771624 non-free/Contents-mips.gz
+ 9bb02dbbf37c38a8023de72770636af5d83b08ba7a92d719672232a54da209fa 13909546 non-free/Contents-mips64el
+ 91a8f5857e6e552105a737b7a283be769fd94d1de7e212e5d8dd178e48f32ddd 771712 non-free/Contents-mips64el.gz
+ 72360de7386fe6b4a331015395eeb48f01bc178c3afb0fb395b7abe649da766f 13910453 non-free/Contents-mipsel
+ 31de69ca77b7da084a7b3641030283872be479b37d4f2cb0fb48a3b009c35264 771959 non-free/Contents-mipsel.gz
+ 33ef0441ae76dc27b85c6aa581ba94fcfe888a849abdf16daa6761b6651035bb 14154515 non-free/Contents-ppc64el
+ 4dcf7c005daa9ff0876156aa32748fb980f7afb6b0dee620bd35c81533786aca 793531 non-free/Contents-ppc64el.gz
+ 0442e4cb0abc93d922a6c0d97bd032ac4834b728e6fc4506aadc10438a2bcc01 13903234 non-free/Contents-s390x
+ bdff8fd835b617719ae6c8275295de2c0175dffb97e1c7e1181b44688592f6f3 771491 non-free/Contents-s390x.gz
+ 7a3049a870b2a270f928bb17de2a8f73254959fb02721f12a0261cbefe21b1c0 8556010 non-free/Contents-source
+ cd95eb973b5d087ae33defd935f34d7b99214c5c8130071a18eb56aeb7b6f317 884017 non-free/Contents-source.gz
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/Contents-udeb-amd64
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/Contents-udeb-amd64.gz
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/Contents-udeb-arm64
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/Contents-udeb-arm64.gz
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/Contents-udeb-armel
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/Contents-udeb-armel.gz
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/Contents-udeb-armhf
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/Contents-udeb-armhf.gz
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/Contents-udeb-i386
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/Contents-udeb-i386.gz
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/Contents-udeb-mips
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/Contents-udeb-mips.gz
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/Contents-udeb-mips64el
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/Contents-udeb-mips64el.gz
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/Contents-udeb-mipsel
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/Contents-udeb-mipsel.gz
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/Contents-udeb-ppc64el
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/Contents-udeb-ppc64el.gz
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/Contents-udeb-s390x
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/Contents-udeb-s390x.gz
+ b7c5eeb06f7da854555da8ff770067487d2ce570f470186e68f66509a77c39ff 197436 non-free/binary-all/Packages
+ 14b9e9f5e3e975a57cca55b37de720402db95887075f30053b05dc9b3f9a6e97 53089 non-free/binary-all/Packages.gz
+ 156cedcfa43cdca8d0e3af673d3d3334047ee2de3aff631bcd71fc2f9995d7bd 44620 non-free/binary-all/Packages.xz
+ f5547175ebe37c05bd1ef58300e5bd693eebe41b015bc69cf252e701e311767f 118 non-free/binary-all/Release
+ a9f16feb9e1b936f64db42f1a6de039308e7653e0e080b6304473fc64fac06de 447124 non-free/binary-amd64/Packages
+ 8a793bc944d6b8e4affbdf3341840967a833f26b9631ca1ed597320d83ae1a26 106655 non-free/binary-amd64/Packages.gz
+ 9d1d5ef202ed32622a8cafeac394ee5bc99cf8ac27c7fbc823c4e3e3d10cf32c 87652 non-free/binary-amd64/Packages.xz
+ 5585db7a83f8c9c09853f11b7e485d98157f21be42eaf31fd363dc6f50e13208 120 non-free/binary-amd64/Release
+ 5228e0e9414181484ce18bf56e05dfc10a7d8e8f9b32ed1a15b3aeb47d4c4e16 238804 non-free/binary-arm64/Packages
+ c70bdcdff163092a3e23d78adc63e3318857a00aa852b34345897c6e6112167e 64350 non-free/binary-arm64/Packages.gz
+ 3c9aa861de381554ee2f458f911a586fd77bb0e5da76eb485d9b0788b8d7d5a8 53832 non-free/binary-arm64/Packages.xz
+ 13d0a32c3988291e09c9df4c514e4c38b0849fae130d21901dd06b89c722b8d9 120 non-free/binary-arm64/Release
+ 11667b51beb164905947bb05e0c8f11f7f2965fdfddf81b8586b753abeefbbae 236032 non-free/binary-armel/Packages
+ 1bce85e2256d089c1e7a1bc631ab79ea4c01bd5129b5e21620504fb68b5836b2 63889 non-free/binary-armel/Packages.gz
+ d4ce4dd793fea3fee474703e75148bde9cf4371071ec54498f92386b8816e921 53416 non-free/binary-armel/Packages.xz
+ c25af00a67560a12a086853d505485276c2ff0a69265bbf88a3d02908678f9d1 120 non-free/binary-armel/Release
+ 40685e8b1d2ce79aace5cb54e3cca5f3dd4c25d998125ab2c1e7b4c3ee56c5af 299334 non-free/binary-armhf/Packages
+ 2de6b677ad244d66572aae8bad0401f78d92cd72d3b35eb3d775cbfc46d33b64 74486 non-free/binary-armhf/Packages.gz
+ 6aebe691f11fa662572c99b4862198014a948ef5deccc20c142b3fb5ca1e5c30 62040 non-free/binary-armhf/Packages.xz
+ c44a59218b7d684e19dab049557018a5173c94c0bab8b145d7285b2b69741c1c 120 non-free/binary-armhf/Release
+ d48fd0b56ef3d3325b99ff5d6c91314d70c23bb779d2c32b59ea41eb153eb6e4 383285 non-free/binary-i386/Packages
+ 7b1d7d18a3130b028e3c75e3067aae700b691726b267480040228b19fc208315 92741 non-free/binary-i386/Packages.gz
+ 07b6f0e89a17cd72989b08c67f005c9696583aafe90d9337d2aa60441189ee2e 76156 non-free/binary-i386/Packages.xz
+ f89a8e17c7d5ab6493301ca251a6e8738a6b151bd1d720fb2afc99bda6e6ca8f 119 non-free/binary-i386/Release
+ 2bd229841bf68e5d5b9f35304f8cd3109d26ca2ff0738a8a55b598ef62fb4690 233779 non-free/binary-mips/Packages
+ 30878aa51c7b70045f57c1f4b012eb7ce343a030dd18af79391a0e996824695d 63210 non-free/binary-mips/Packages.gz
+ 00b6e7f425f0774e635672f91e5aa695e25b8a53b1dffb9cbbde4847d81e99ae 52832 non-free/binary-mips/Packages.xz
+ 43ddc2d6ba579aae67f5ea64ce2b4c20a04aa41b1fb4958ef3c970c018ec90a1 119 non-free/binary-mips/Release
+ 408665fbedcbe3fde32df922eeb11cf30731a54edc43b9fe304fa57c2c17c81e 235974 non-free/binary-mips64el/Packages
+ 6e3161b720ebf8450206ff4a9b1ed5df3089c6614f669abc76a9aebb46768545 63464 non-free/binary-mips64el/Packages.gz
+ 97ec5be7af21b38e2f4d0012f84ca692dc68ed3c63818dd87b63b711de850bea 53076 non-free/binary-mips64el/Packages.xz
+ e9393c8a3a36b187e14d5e316e60a1b2aa2efa46b1aa8558c41769889ddee82d 123 non-free/binary-mips64el/Release
+ 5e8fc0c084a824117bea9b552e377c0b115ece59e98a7c6fecb542c11073dcd7 236623 non-free/binary-mipsel/Packages
+ bd76f3600b5e14b534f869ba8df82a30d890aa6aba74c1e0d9cbe3dc44356b40 63967 non-free/binary-mipsel/Packages.gz
+ ea9470b47ba94f738ffa60510964dc033e2b752cf62c2ac0fb8bfb8f3a8f86b0 53380 non-free/binary-mipsel/Packages.xz
+ 85fc40a8f928fb700acf0850348773b71636144545f5126a0e9de943d60da602 121 non-free/binary-mipsel/Release
+ ef67287a65f88083d1c7d84e09ad652117fbf52c139c9972b6b32c76ff20de23 258455 non-free/binary-ppc64el/Packages
+ 7206983569b87eac4d7ee03343598b968a4b8fb7fb26c0e5a1954521b80806f9 67734 non-free/binary-ppc64el/Packages.gz
+ 1604ffc5189b54330972a6a3a8fa300136329c8c7a7b58f22eefe042627de514 56708 non-free/binary-ppc64el/Packages.xz
+ 981ae1cb8813a1deb38f94bb9d6ac503a8a781c7a1b15f097cb3ec7011093306 122 non-free/binary-ppc64el/Release
+ 50bb151cafb0d9accc328ba7f9c074b84d65404d25b50aac27519f38420e750e 233878 non-free/binary-s390x/Packages
+ 73e3f0942b4c48060522e1c2d100b527e8538aca7a7734f5c69133f34be19398 62973 non-free/binary-s390x/Packages.gz
+ fc8284c25d95e4d2573dd8ea2c2fa749916e2d5b4bff251002d29359c279dfb7 52796 non-free/binary-s390x/Packages.xz
+ ee63a32d4bc1848ef2289fdab633e047470a06462c6f5b45ab9730b859df0141 120 non-free/binary-s390x/Release
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-all/Packages
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-all/Packages.gz
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 non-free/debian-installer/binary-all/Packages.xz
+ f5547175ebe37c05bd1ef58300e5bd693eebe41b015bc69cf252e701e311767f 118 non-free/debian-installer/binary-all/Release
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-amd64/Packages
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-amd64/Packages.gz
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 non-free/debian-installer/binary-amd64/Packages.xz
+ 5585db7a83f8c9c09853f11b7e485d98157f21be42eaf31fd363dc6f50e13208 120 non-free/debian-installer/binary-amd64/Release
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-arm64/Packages
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-arm64/Packages.gz
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 non-free/debian-installer/binary-arm64/Packages.xz
+ 13d0a32c3988291e09c9df4c514e4c38b0849fae130d21901dd06b89c722b8d9 120 non-free/debian-installer/binary-arm64/Release
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-armel/Packages
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-armel/Packages.gz
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 non-free/debian-installer/binary-armel/Packages.xz
+ c25af00a67560a12a086853d505485276c2ff0a69265bbf88a3d02908678f9d1 120 non-free/debian-installer/binary-armel/Release
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-armhf/Packages
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-armhf/Packages.gz
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 non-free/debian-installer/binary-armhf/Packages.xz
+ c44a59218b7d684e19dab049557018a5173c94c0bab8b145d7285b2b69741c1c 120 non-free/debian-installer/binary-armhf/Release
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-i386/Packages
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-i386/Packages.gz
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 non-free/debian-installer/binary-i386/Packages.xz
+ f89a8e17c7d5ab6493301ca251a6e8738a6b151bd1d720fb2afc99bda6e6ca8f 119 non-free/debian-installer/binary-i386/Release
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-mips/Packages
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-mips/Packages.gz
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 non-free/debian-installer/binary-mips/Packages.xz
+ 43ddc2d6ba579aae67f5ea64ce2b4c20a04aa41b1fb4958ef3c970c018ec90a1 119 non-free/debian-installer/binary-mips/Release
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-mips64el/Packages
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-mips64el/Packages.gz
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 non-free/debian-installer/binary-mips64el/Packages.xz
+ e9393c8a3a36b187e14d5e316e60a1b2aa2efa46b1aa8558c41769889ddee82d 123 non-free/debian-installer/binary-mips64el/Release
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-mipsel/Packages
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-mipsel/Packages.gz
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 non-free/debian-installer/binary-mipsel/Packages.xz
+ 85fc40a8f928fb700acf0850348773b71636144545f5126a0e9de943d60da602 121 non-free/debian-installer/binary-mipsel/Release
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-ppc64el/Packages
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-ppc64el/Packages.gz
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 non-free/debian-installer/binary-ppc64el/Packages.xz
+ 981ae1cb8813a1deb38f94bb9d6ac503a8a781c7a1b15f097cb3ec7011093306 122 non-free/debian-installer/binary-ppc64el/Release
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 non-free/debian-installer/binary-s390x/Packages
+ f61f27bd17de546264aa58f40f3aafaac7021e0ef69c17f6b1b4cd7664a037ec 20 non-free/debian-installer/binary-s390x/Packages.gz
+ 0040f94d11d0039505328a90b2ff48968db873e9e7967307631bf40ef5679275 32 non-free/debian-installer/binary-s390x/Packages.xz
+ ee63a32d4bc1848ef2289fdab633e047470a06462c6f5b45ab9730b859df0141 120 non-free/debian-installer/binary-s390x/Release
+ 3da098d6f5fc6ed570d3d341e24695dd72d7f3083b4d9aff2d2322f428d3d7eb 88700 non-free/dep11/Components-amd64.yml
+ 67b3bfccb4ed98bbdac2ae1df1ea3354161e74aa99ae7f704f0a94e48acc22c0 10864 non-free/dep11/Components-amd64.yml.gz
+ 4285b90a01fcf948a092814381a82d4fc717710cdb1e11c5521952403b4d70c4 9096 non-free/dep11/Components-amd64.yml.xz
+ 09da7a80769f3722693caa0e184ca444dd83bc1608e2cff2839c7203402e8300 83062 non-free/dep11/Components-arm64.yml
+ 4e38879b90bc4c173f09513db9ccd123eb1b50f498bbd72c1c3849ce53cff980 9530 non-free/dep11/Components-arm64.yml.gz
+ 368733a2718c329fef5d7a07a5bc833fa7c3d90fd02909f6849b6daccbbbd751 7880 non-free/dep11/Components-arm64.yml.xz
+ cb8051d38c808dce32203503546be3a182fb478d03a19f2ffdc4c4590efb449f 83062 non-free/dep11/Components-armel.yml
+ 5e6a85b27ffe8baab12554a4f31428089525e52213ccf12125fd07aef95460fc 9587 non-free/dep11/Components-armel.yml.gz
+ 3e1a2467d0b1f487269fa42c88818e305d4deb7f322ae902ca925cb9201fc06a 7876 non-free/dep11/Components-armel.yml.xz
+ 84b2d27a44feb474b743631ab4abc33fa4e7c7a48b2dc7e3f38ce7eec250d0ce 83062 non-free/dep11/Components-armhf.yml
+ 6e5a306a988f1b4a8b86ebf55fa217c88527fead488e0ff7450650373641c162 9811 non-free/dep11/Components-armhf.yml.gz
+ eeb5327e0aea2cd08ba590765db8dcb79a2bcb810eacee7ed9ca9520eda28837 7880 non-free/dep11/Components-armhf.yml.xz
+ 4131d969807862660bc18a091f1d47f87ac765117f557288a788bc88ffbb3fd0 91016 non-free/dep11/Components-i386.yml
+ dfb263dfcf78f6fafdb35d3b8a2d61ced8567b447d1673f1d8656db62475411f 12590 non-free/dep11/Components-i386.yml.gz
+ e5eeef57ecb49c0582242241bc0489a4f84d0c9748dd342532fed0cad9945d1b 10272 non-free/dep11/Components-i386.yml.xz
+ 1b6947dd4bed99974dec715dae4b8a33dc40c961d93f3ef905855c9981eabfaf 83062 non-free/dep11/Components-mips64el.yml
+ d575657fc06a52ea38d33f075a8a02af770173bdb39bf2a8989c71f0bebe3efe 9512 non-free/dep11/Components-mips64el.yml.gz
+ 178a70ad062598a2be3622a190d4bb613a60a10f50a3502d6465ed796e4cf58c 7840 non-free/dep11/Components-mips64el.yml.xz
+ 49065b7fc4112ab4bb0f4873631d769f480dc8338df3754ae4c7eda53412c57e 83062 non-free/dep11/Components-ppc64el.yml
+ cca424a4f4e9880a98ec8d677854c9a902872486aed6b4d828d48d441f7bb4de 9548 non-free/dep11/Components-ppc64el.yml.gz
+ 46cf30069bf24a57f65b52e25bb8ed0efb8ca4b7f3a8a5db432d50a29e448655 7840 non-free/dep11/Components-ppc64el.yml.xz
+ fdebfdd34cd2cc87cf298d569e3a2129cbf08201119e291a433871a6854c908c 83062 non-free/dep11/Components-s390x.yml
+ 06d09f07179592bc8c1b6f270f1f2a00dced70165b2c82f7d955dcf3ac42eadd 9542 non-free/dep11/Components-s390x.yml.gz
+ e89fd21ec3e35b5839586bab3f99722051b7dc3f5fd2e96959ca4648921bd236 7884 non-free/dep11/Components-s390x.yml.xz
+ 05d537a143f0d9fd4d72e272d398495a58d6409864095de72ed75eb266467577 15360 non-free/dep11/icons-128x128.tar
+ 3339065d3db0062b2aef74f44609952634060d5af68165d0e0f6525cec1de3ca 6725 non-free/dep11/icons-128x128.tar.gz
+ 06415602c4fd9a005f5950fe0e4be55f9148d27693e38de3265b05362ea02f46 9216 non-free/dep11/icons-48x48.tar
+ c35a2c02ac126e9b0af0c51a7440a035b69a35f41fa71f1d509c27f3a00504c0 3491 non-free/dep11/icons-48x48.tar.gz
+ 44afd97a213e3692d8fbf26feefa892915b6a1feeb45afaf0bb8debaf5027547 49664 non-free/dep11/icons-64x64.tar
+ 6968c97d148c7aed97e1a449300ff7d24a2c413dbc6a9ca6a2045ce613accc92 38343 non-free/dep11/icons-64x64.tar.gz
+ afe0424f1d8ca583bfc4a4b9846696fb797b234ef697528d70d027808723aa83 512965 non-free/i18n/Translation-en
+ 86615513048891ae7ef29c7f9addfc00298caae99e1a4f3f53486f99eee6c241 88834 non-free/i18n/Translation-en.bz2
+ af79835a2df647dc2421ae2ff5a21b7602470f60161345c2f16dca5132bdb615 121 non-free/source/Release
+ ad417556e5247489c332fd51e0b71b859ec291817045aa99b8600b21b44e3077 371347 non-free/source/Sources
+ ca2017043b96ae7399b10cb5d9e0cee4e9ad5939efb2d8730456249f997e11d0 103716 non-free/source/Sources.gz
+ 3c5eb439b193bc2281b88cdf178ceb943cd4b6097afee6ce2b51ff1550656ee0 85628 non-free/source/Sources.xz
\ No newline at end of file
diff --git a/pgp/gnupg.go b/pgp/gnupg.go
index 82be859e..99d06621 100644
--- a/pgp/gnupg.go
+++ b/pgp/gnupg.go
@@ -44,7 +44,7 @@ func (g *GpgSigner) SetKeyRing(keyring, secretKeyring string) {
g.keyring, g.secretKeyring = keyring, secretKeyring
}
-// SetPassphrase sets passhprase params
+// SetPassphrase sets passphrase params
func (g *GpgSigner) SetPassphrase(passphrase, passphraseFile string) {
g.passphrase, g.passphraseFile = passphrase, passphraseFile
}
@@ -78,7 +78,7 @@ func (g *GpgSigner) gpgArgs() []string {
if g.batch {
args = append(args, "--no-tty", "--batch")
- if g.version == GPG21xPlus {
+ if g.version >= GPG21x {
args = append(args, "--pinentry-mode", "loopback")
}
}
@@ -263,7 +263,7 @@ func (g *GpgVerifier) runGpgv(args []string, context string, showKeyTip bool) (*
keys[i] = string(result.MissingKeys[i])
}
- fmt.Printf("gpg --no-default-keyring --keyring trustedkeys.gpg --keyserver pool.sks-keyservers.net --recv-keys %s\n\n",
+ fmt.Printf("gpg --no-default-keyring --keyring trustedkeys.gpg --keyserver keyserver.ubuntu.com --recv-keys %s\n\n",
strings.Join(keys, " "))
fmt.Printf("Sometimes keys are stored in repository root in file named Release.key, to import such key:\n\n")
diff --git a/pgp/gnupg_finder.go b/pgp/gnupg_finder.go
index 683bba82..4f39a5da 100644
--- a/pgp/gnupg_finder.go
+++ b/pgp/gnupg_finder.go
@@ -4,7 +4,6 @@ import (
"errors"
"os/exec"
"regexp"
- "strings"
)
// GPGVersion stores discovered GPG version
@@ -14,11 +13,10 @@ type GPGVersion int
const (
GPG1x GPGVersion = 1
GPG20x GPGVersion = 2
- GPG21xPlus GPGVersion = 3
+ GPG21x GPGVersion = 3
+ GPG22xPlus GPGVersion = 4
)
-var gpgVersionRegex = regexp.MustCompile(`\(GnuPG\) (\d)\.(\d)`)
-
// GPGFinder implement search for gpg executables and returns version of discovered executables
type GPGFinder interface {
FindGPG() (gpg string, version GPGVersion, err error)
@@ -51,7 +49,7 @@ func GPG1Finder() GPGFinder {
return &pathGPGFinder{
gpgNames: []string{"gpg", "gpg1"},
gpgvNames: []string{"gpgv", "gpgv1"},
- expectedVersionSubstring: "(GnuPG) 1.",
+ expectedVersionSubstring: `\(GnuPG.*\) (1).(\d)`,
errorMessage: "Couldn't find a suitable gpg executable. Make sure gnupg1 is available as either gpg(v) or gpg(v)1 in $PATH",
}
}
@@ -61,7 +59,7 @@ func GPG2Finder() GPGFinder {
return &pathGPGFinder{
gpgNames: []string{"gpg", "gpg2"},
gpgvNames: []string{"gpgv", "gpgv2"},
- expectedVersionSubstring: "(GnuPG) 2.",
+ expectedVersionSubstring: `\(GnuPG.*\) (2).(\d)`,
errorMessage: "Couldn't find a suitable gpg executable. Make sure gnupg2 is available as either gpg(v) or gpg(v)2 in $PATH",
}
}
@@ -133,15 +131,18 @@ func cliVersionCheck(cmd string, marker string) (result bool, version GPGVersion
}
strOutput := string(output)
- result = strings.Contains(strOutput, marker)
+ regex := regexp.MustCompile(marker)
- version = GPG21xPlus
- matches := gpgVersionRegex.FindStringSubmatch(strOutput)
+ version = GPG22xPlus
+ matches := regex.FindStringSubmatch(strOutput)
+ result = (matches != nil)
if matches != nil {
if matches[1] == "1" {
version = GPG1x
} else if matches[1] == "2" && matches[2] == "0" {
version = GPG20x
+ } else if matches[1] == "2" && matches[2] == "1" {
+ version = GPG21x
}
}
diff --git a/pgp/gnupg_test.go b/pgp/gnupg_test.go
index 9ee8dfa4..e1a30a0b 100644
--- a/pgp/gnupg_test.go
+++ b/pgp/gnupg_test.go
@@ -158,6 +158,9 @@ func (s *Gnupg2SignerSuite) SetUpTest(c *C) {
if err != nil {
c.Skip(err.Error())
}
+ if ver == GPG21x {
+ c.Skip("skipping sign test on GnuPG 2.1.x, due to loopback pinentry mode troubles")
+ }
// import private keys into gpg2, they're stored outside of keyring files
for _, item := range []struct {
@@ -172,11 +175,11 @@ func (s *Gnupg2SignerSuite) SetUpTest(c *C) {
continue
}
- args := []string{"--import", "--no-default-keyring"}
+ args := []string{"--import", "--no-default-keyring", "--batch"}
if item.suffix == "_passprhase" {
- args = append(args, "--passphrase", "verysecret", "--no-tty", "--batch")
- if ver == GPG21xPlus {
+ args = append(args, "--passphrase", "verysecret", "--no-tty")
+ if ver >= GPG21x {
args = append(args, "--pinentry-mode", "loopback")
}
}
@@ -190,7 +193,7 @@ func (s *Gnupg2SignerSuite) SetUpTest(c *C) {
// import public keys into gpg2
// we can't use pre-built keyrings as gpg 2.0.x and 2.1+ have different keyring formats
for _, suffix := range []string{"", "_passphrase"} {
- output, err := exec.Command(gpg, "--no-default-keyring", "--keyring", "./keyrings/aptly2"+suffix+".gpg",
+ output, err := exec.Command(gpg, "--no-default-keyring", "--batch", "--keyring", "./keyrings/aptly2"+suffix+".gpg",
"--import", "keyrings/aptly2"+suffix+".pub.armor").CombinedOutput()
c.Log(string(output))
c.Check(err, IsNil)
diff --git a/pgp/internal.go b/pgp/internal.go
index 62a8dc24..add64267 100644
--- a/pgp/internal.go
+++ b/pgp/internal.go
@@ -7,17 +7,20 @@ import (
"io/ioutil"
"os"
"path/filepath"
+ "sort"
"strings"
"syscall"
"time"
"github.com/pkg/errors"
- "golang.org/x/crypto/openpgp"
- "golang.org/x/crypto/openpgp/clearsign"
- openpgp_errors "golang.org/x/crypto/openpgp/errors"
- "golang.org/x/crypto/openpgp/packet"
- "golang.org/x/crypto/ssh/terminal"
+ // TODO: replace crypto/openpgp since it is deprecated
+ // https://github.com/golang/go/issues/44226
+ "golang.org/x/crypto/openpgp" //nolint:staticcheck
+ "golang.org/x/crypto/openpgp/clearsign" //nolint:staticcheck
+ openpgp_errors "golang.org/x/crypto/openpgp/errors" //nolint:staticcheck
+ "golang.org/x/crypto/openpgp/packet" //nolint:staticcheck
+ "golang.org/x/term"
)
// Test interface
@@ -28,7 +31,7 @@ var (
// Internal errors
var (
- errWrongPasshprase = errors.New("unable to decrypt the key, passphrase is wrong")
+ errWrongPassphrase = errors.New("unable to decrypt the key, passphrase is wrong")
)
// GoSigner is implementation of Signer interface using Go internal OpenPGP library
@@ -59,7 +62,7 @@ func (g *GoSigner) SetKeyRing(keyring, secretKeyring string) {
g.keyringFile, g.secretKeyringFile = keyring, secretKeyring
}
-// SetPassphrase sets passhprase params
+// SetPassphrase sets passphrase params
func (g *GoSigner) SetPassphrase(passphrase, passphraseFile string) {
g.passphrase, g.passphraseFile = passphrase, passphraseFile
}
@@ -173,7 +176,7 @@ func (g *GoSigner) Init() error {
for attempt := 0; attempt < 3; attempt++ {
fmt.Print("\nEnter passphrase: ")
var bytePassphrase []byte
- bytePassphrase, err = terminal.ReadPassword(int(syscall.Stdin))
+ bytePassphrase, err = term.ReadPassword(int(syscall.Stdin))
if err != nil {
return errors.Wrap(err, "error reading passphare")
}
@@ -181,7 +184,7 @@ func (g *GoSigner) Init() error {
g.passphrase = string(bytePassphrase)
err = g.decryptKey()
- if err == nil || err != errWrongPasshprase {
+ if err == nil || err != errWrongPassphrase {
break
}
@@ -208,7 +211,7 @@ func (g *GoSigner) decryptKey() error {
if e, ok := err.(openpgp_errors.StructuralError); ok {
if string(e) == "private key checksum failure" {
- return errWrongPasshprase
+ return errWrongPassphrase
}
}
@@ -334,7 +337,7 @@ func (g *GoVerifier) showImportKeyTip(signers []signatureResult) {
keys = append(keys, string(KeyFromUint64(signer.IssuerKeyID)))
}
- fmt.Printf("gpg --no-default-keyring --keyring trustedkeys.gpg --keyserver pool.sks-keyservers.net --recv-keys %s\n\n",
+ fmt.Printf("gpg --no-default-keyring --keyring trustedkeys.gpg --keyserver keyserver.ubuntu.com --recv-keys %s\n\n",
strings.Join(keys, " "))
fmt.Printf("Sometimes keys are stored in repository root in file named Release.key, to import such key:\n\n")
@@ -351,7 +354,13 @@ func (g *GoVerifier) printLog(signers []signatureResult) {
if signer.Entity != nil {
i := 0
+ names := make([]string, 0, len(signer.Entity.Identities))
for name := range signer.Entity.Identities {
+ names = append(names, name)
+ }
+ sort.Strings(names)
+
+ for _, name := range names {
if i == 0 {
fmt.Printf("openpgp: Good signature from \"%s\"\n", name)
} else {
diff --git a/pgp/openpgp.go b/pgp/openpgp.go
index 046feb48..8577fc00 100644
--- a/pgp/openpgp.go
+++ b/pgp/openpgp.go
@@ -3,7 +3,7 @@ package pgp
import (
"bytes"
"crypto"
- "crypto/dsa"
+ "crypto/dsa" //nolint:staticcheck
"crypto/ecdsa"
"crypto/rsa"
"hash"
@@ -11,10 +11,12 @@ import (
"strconv"
"time"
- "golang.org/x/crypto/openpgp"
- "golang.org/x/crypto/openpgp/armor"
- "golang.org/x/crypto/openpgp/errors"
- "golang.org/x/crypto/openpgp/packet"
+ // TODO: replace crypto/openpgp since it is deprecated
+ // https://github.com/golang/go/issues/44226
+ "golang.org/x/crypto/openpgp" //nolint:staticcheck
+ "golang.org/x/crypto/openpgp/armor" //nolint:staticcheck
+ "golang.org/x/crypto/openpgp/errors" //nolint:staticcheck
+ "golang.org/x/crypto/openpgp/packet" //nolint:staticcheck
)
// hashForSignature returns a pair of hashes that can be used to verify a
diff --git a/pgp/trusted.gpg b/pgp/trusted.gpg
index db8f3b6b..87ad2377 100644
Binary files a/pgp/trusted.gpg and b/pgp/trusted.gpg differ
diff --git a/pgp/verify_test.go b/pgp/verify_test.go
index fe91cb37..2da77252 100644
--- a/pgp/verify_test.go
+++ b/pgp/verify_test.go
@@ -47,7 +47,7 @@ func (s *VerifierSuite) TestVerifyClearsigned(c *C) {
keyInfo, err := s.verifier.VerifyClearsigned(clearsigned, false)
c.Assert(err, IsNil)
- c.Check(keyInfo.GoodKeys, DeepEquals, []Key{"8B48AD6246925553", "7638D0442B90D010"})
+ c.Check(keyInfo.GoodKeys, DeepEquals, []Key{"04EE7237B7D453EC", "648ACFD622F3D138", "DCC9EFBF77E11517"})
c.Check(keyInfo.MissingKeys, DeepEquals, []Key(nil))
clearsigned.Close()
diff --git a/s3/public.go b/s3/public.go
index a3e85a99..b44c7fe6 100644
--- a/s3/public.go
+++ b/s3/public.go
@@ -49,6 +49,8 @@ func NewPublishedStorageRaw(
) (*PublishedStorage, error) {
if defaultACL == "" {
defaultACL = "private"
+ } else if defaultACL == "none" {
+ defaultACL = ""
}
if storageClass == "STANDARD" {
@@ -142,7 +144,7 @@ func (storage *PublishedStorage) PutFile(path string, sourceFilename string) err
}
defer source.Close()
- err = storage.putFile(path, source)
+ err = storage.putFile(path, source, "")
if err != nil {
err = errors.Wrap(err, fmt.Sprintf("error uploading %s to %s", sourceFilename, storage))
}
@@ -150,8 +152,22 @@ func (storage *PublishedStorage) PutFile(path string, sourceFilename string) err
return err
}
+// getMD5 retrieves MD5 stored in the metadata, if any
+func (storage *PublishedStorage) getMD5(path string) (string, error) {
+ params := &s3.HeadObjectInput{
+ Bucket: aws.String(storage.bucket),
+ Key: aws.String(filepath.Join(storage.prefix, path)),
+ }
+ output, err := storage.s3.HeadObject(params)
+ if err != nil {
+ return "", err
+ }
+
+ return aws.StringValue(output.Metadata["Md5"]), nil
+}
+
// putFile uploads file-like object to
-func (storage *PublishedStorage) putFile(path string, source io.ReadSeeker) error {
+func (storage *PublishedStorage) putFile(path string, source io.ReadSeeker, sourceMD5 string) error {
params := &s3.PutObjectInput{
Bucket: aws.String(storage.bucket),
@@ -165,6 +181,11 @@ func (storage *PublishedStorage) putFile(path string, source io.ReadSeeker) erro
if storage.encryptionMethod != "" {
params.ServerSideEncryption = aws.String(storage.encryptionMethod)
}
+ if sourceMD5 != "" {
+ params.Metadata = map[string]*string{
+ "Md5": aws.String(sourceMD5),
+ }
+ }
_, err := storage.s3.PutObject(params)
if err != nil {
@@ -177,7 +198,7 @@ func (storage *PublishedStorage) putFile(path string, source io.ReadSeeker) erro
return err
}
- return storage.putFile(strings.Replace(path, "+", " ", -1), source)
+ return storage.putFile(strings.Replace(path, "+", " ", -1), source, sourceMD5)
}
return nil
}
@@ -298,6 +319,17 @@ func (storage *PublishedStorage) LinkFromPool(publishedDirectory, fileName strin
sourceMD5 := sourceChecksums.MD5
if exists {
+ if len(destinationMD5) != 32 {
+ // doesn’t look like a valid MD5,
+ // attempt to fetch one from the metadata
+ var err error
+ destinationMD5, err = storage.getMD5(relPath)
+ if err != nil {
+ err = errors.Wrap(err, fmt.Sprintf("error verifying MD5 for %s: %s", storage, poolPath))
+ return err
+ }
+ storage.pathCache[relPath] = destinationMD5
+ }
if sourceMD5 == "" {
return fmt.Errorf("unable to compare object, MD5 checksum missing")
}
@@ -318,7 +350,7 @@ func (storage *PublishedStorage) LinkFromPool(publishedDirectory, fileName strin
}
defer source.Close()
- err = storage.putFile(relPath, source)
+ err = storage.putFile(relPath, source, sourceMD5)
if err == nil {
storage.pathCache[relPath] = sourceMD5
} else {
diff --git a/system/api_lib.py b/system/api_lib.py
index bb54ef0f..d6aaf97c 100644
--- a/system/api_lib.py
+++ b/system/api_lib.py
@@ -47,6 +47,24 @@ class APITest(BaseTest):
kwargs["headers"]["Content-Type"] = "application/json"
return requests.post("http://%s%s" % (self.base_url, uri), *args, **kwargs)
+ def _ensure_async(self, kwargs):
+ # Make sure we run this as an async task
+ params = kwargs.get('params', {})
+ params.setdefault('_async', True)
+ kwargs['params'] = params
+
+ def post_task(self, uri, *args, **kwargs):
+ self._ensure_async(kwargs)
+ resp = self.post(uri, *args, **kwargs)
+ if resp.status_code != 202:
+ return resp
+
+ _id = resp.json()['ID']
+ resp = self.get("/api/tasks/" + str(_id) + "/wait")
+ self.check_equal(resp.status_code, 200)
+
+ return self.get("/api/tasks/" + str(_id))
+
def put(self, uri, *args, **kwargs):
if "json" in kwargs:
kwargs["data"] = json.dumps(kwargs.pop("json"))
@@ -55,6 +73,18 @@ class APITest(BaseTest):
kwargs["headers"]["Content-Type"] = "application/json"
return requests.put("http://%s%s" % (self.base_url, uri), *args, **kwargs)
+ def put_task(self, uri, *args, **kwargs):
+ self._ensure_async(kwargs)
+ resp = self.put(uri, *args, **kwargs)
+ if resp.status_code != 202:
+ return resp
+
+ _id = resp.json()['ID']
+ resp = self.get("/api/tasks/" + str(_id) + "/wait")
+ self.check_equal(resp.status_code, 200)
+
+ return self.get("/api/tasks/" + str(_id))
+
def delete(self, uri, *args, **kwargs):
if "json" in kwargs:
kwargs["data"] = json.dumps(kwargs.pop("json"))
@@ -63,6 +93,18 @@ class APITest(BaseTest):
kwargs["headers"]["Content-Type"] = "application/json"
return requests.delete("http://%s%s" % (self.base_url, uri), *args, **kwargs)
+ def delete_task(self, uri, *args, **kwargs):
+ self._ensure_async(kwargs)
+ resp = self.delete(uri, *args, **kwargs)
+ if resp.status_code != 202:
+ return resp
+
+ _id = resp.json()['ID']
+ resp = self.get("/api/tasks/" + str(_id) + "/wait")
+ self.check_equal(resp.status_code, 200)
+
+ return self.get("/api/tasks/" + str(_id))
+
def upload(self, uri, *filenames, **kwargs):
upload_name = kwargs.pop("upload_name", None)
directory = kwargs.pop("directory", "files")
diff --git a/system/changes/libqt5concurrent5-dbgsym_5.15.2+dfsg-12_amd64.ddeb b/system/changes/libqt5concurrent5-dbgsym_5.15.2+dfsg-12_amd64.ddeb
new file mode 100644
index 00000000..1f040f54
Binary files /dev/null and b/system/changes/libqt5concurrent5-dbgsym_5.15.2+dfsg-12_amd64.ddeb differ
diff --git a/system/files/debian-archive-keyring.gpg b/system/files/debian-archive-keyring.gpg
index 8def5950..8328e113 100644
Binary files a/system/files/debian-archive-keyring.gpg and b/system/files/debian-archive-keyring.gpg differ
diff --git a/system/files/jenkins.key b/system/files/jenkins.key
index 7a6e8128..cd0eef50 100644
--- a/system/files/jenkins.key
+++ b/system/files/jenkins.key
@@ -1,112 +1,52 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1.4.9 (GNU/Linux)
-mQGiBEmFQG0RBACXScOxb6BTV6rQE/tcJopAEWsdvmE0jNIRWjDDzB7HovX6Anrq
-n7+Vq4spAReSFbBVaYiiOx2cGDymj2dyx2i9NAI/9/cQXJOU+RPdDzHVlO1Edksp
-5rKn0cGPWY5sLxRf8s/tO5oyKgwCVgTaB5a8gBHaoGms3nNC4YYf+lqlpwCgjbti
-3u1iMIx6Rs+dG0+xw1oi5FUD/2tLJMx7vCUQHhPRupeYFPoD8vWpcbGb5nHfHi4U
-8/x4qZspAIwvXtGw0UBHildGpqe9onp22Syadn/7JgMWhHoFw5Ke/rTMlxREL7pa
-TiXuagD2G84tjJ66oJP1FigslJzrnG61y85V7THL61OFqDg6IOP4onbsdqHby4VD
-zZj9A/9uQxIn5250AGLNpARStAcNPJNJbHOQuv0iF3vnG8uO7/oscB0TYb8/juxr
-hs9GdSN0U0BxENR+8KWy5lttpqLMKlKRknQYy34UstQiyFgAQ9Epncu9uIbVDgWt
-y7utnqXN033EyYkcWx5EhLAgHkC7wSzeSWABV3JSXN7CeeOif7QiS29oc3VrZSBL
-YXdhZ3VjaGkgPGtrQGtvaHN1a2Uub3JnPohjBBMRAgAjAhsDBgsJCAcDAgQVAggD
-BBYCAwECHgECF4AFAko/7vYCGQEACgkQm30y8tUFguabhgCgi54IQR4rpJZ/uUHe
-ZB879zUWTQwAniQDBO+Zly7Fsvm0Mcvqvl02UzxCtC1Lb2hzdWtlIEthd2FndWNo
-aSA8a29oc3VrZS5rYXdhZ3VjaGlAc3VuLmNvbT6IYAQTEQIAIAUCSj/qbQIbAwYL
-CQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJEJt9MvLVBYLm38gAoIGR2+TQeJaCeEa8
-CQhZYzDoiJkQAJ0cpmD+0VA+leOAr5LEccNVd70Z/dHNy83JARAAAQEAAAAAAAAA
-AAAAAAD/2P/gABBKRklGAAEBAQBgAGAAAP/hAGBFeGlmAABJSSoACAAAAAQAMQEC
-ABkAAAA+AAAAEFEBAAEAAAABQ5AAEVEEAAEAAAASCwAAElEEAAEAAAASCwAAAAAA
-AE1hY3JvbWVkaWEgRmlyZXdvcmtzIDQuMAAA/9sAQwAIBgYHBgUIBwcHCQkICgwU
-DQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy
-/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy
-MjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgArgCWAwEiAAIRAQMRAf/EAB8AAAEF
-AQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQEC
-AwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
-NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqS
-k5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk
-5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkK
-C//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGx
-wQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFla
-Y2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2
-t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQAC
-EQMRAD8A9wEj/wB9vzpfMf8Avt+dRinCpGSeY398/nS72/vH86YKBQBJvb+8fzpd
-7f3j+dMFLQA/e394/nS7j6n86ZSimA7cfU07cfU1HnFOFADtx9aXJ9TTKUUxD8n1
-pc+9Mp1AC5ozSUtAC0maKKADNFJ2ooAoCnCmilzWZQ6lFJSimAopaQUtAC54rOvN
-dsLCTZPPGrdwXAry/wCKHxXfRppND0Mq16Bie5PIi9lHdv5V8/X+rXt/O8tzcyyy
-MclnYkk0avYdl1PqPxT8VtH8NwqwzdXEuSkaHoB61wjftCXhlzHosBjHZpSCa8PW
-O7uhuAkcDueaaYbhOqMMe1L5lcvWx9U+FPjJ4f8AEU0dpdhtLvXOFWdgY3PoH6fg
-cV6MrZGa+EklIOJOPqK9i+G3xem0TytI8QSSXGnHCQXJO57f2Pqn6indrclq+x9G
-5pwNVoLiO4hSaGRZIpFDKynIYHuKmBqyB+aWmg0uaAFopKKAFoozRQBQFLSUorMo
-UUtJSigB1ZHijWovD/hu+1KZlUQxErnu3YfnWsK8k+Pt60PhaxtAxAnuOQO4UE0P
-YaWp8/Xd1LeTz3Mzl5pnLuxPJJNa+i+HDclZZ1yp5C1Q0axa+1BEx8i8mvS7S3WG
-NQo6elcWLxDprljuelgsOp+/IgtdCiVFVYx07CnXHhyNgflA/Ct+1BwOKmkVq8xS
-m9bnr2S0sec6n4UVo2KKNw6Vx9xby2U3lSAj617NcR5J4zmua1/Q4r+1JVQJU5Ui
-uzD4qUXyz2OHFYWM1zR3Ol+CHj0xXX/CKajMTHKd1g7H7r94/oeo9wR3r3tWr4ht
-pZtNv4bmElZ7eVZUIOPmU5/pX2dpOpR6tpFnqMQxHdQpMoz03DOK9ePY8OaszUDU
-+oFNSg0yUOopKWgAoo6mikBRpwptLWZY4UoptLTELXin7QbD7PoiFv45Gx+Ar2uv
-FP2g7dfsejXOfm8x48evGf6UmNbnm3hCBls57sJuYnYg9TXSyW2uIgNpJbs5GWDj
-gewrP8EJu0XIHKyNV2+j1txM0MzIQV8oIQN3POSenHTg15VSV6z2+Z7dGNqKt26G
-hpeo6rC3lajZxKOgdG6/hW5NcoIC4HOOhrmbJb1IokuZWkfbmUsQQGz2xW5OAbAE
-Y3d/es5TtJo6oRbjcx7uXVryXbblIIv723JqN9PuUdLhJ2aQf6xW6OP6VBqS6jcQ
-sLS4aOQHCqH2qVx64znP8verWn2d/DKrPOzxbFBWQ5O7HJyOxParv7t7oxcfeasz
-z3xBaC01uZV4RxvAr6X+F0rv8NdCMj7iICAfQBjgV87+NYzHr6jHHlA/rX0H8LFa
-P4baLu3DMTHDDtvOPwr1sM7xR4mK0m/U7lTUyniqyGp1NbtHOmSUuaaDS1JQuaKS
-ikBTpaQUVmUOpabS0xC15f8AF7wxc+IEsJI3VI4Nyrkfxtjn6YH616hWL4ptDd6B
-cBTh0+cH0xUVL8j5dzSk0prm2PD/AAnYvp+ltazDbNHM6yD3BrpEiWToOKzPLktr
-mRiSwlO7J9atQ3bFsCvGnJSlzM+gpLlXKJcpDAegGT+ZqYgPYAgVnz3DpKW8pJW6
-AM2MUranci38vy4gBz/9alGF3dG0ppKzZYs0ilB4BwauOixggVlW9w8sivsWJuhC
-nOanmun83bimtNCZPS5g6/osOta3Zq8giRImMjeoyMAe5Oa940SxTStFsbCM/JbQ
-JGv0AryTTLRLzXIwwDOWVAvfGecCvZx19q9fAttPyPBzCyatuyyhqZTxVdDU612M
-4ESg04GowacDUFjqKQc0UDKlLSUtZFC0UUCmAtMmiSeF4pBlHBVh7U6imI878Y+G
-rbTbGC7tFf5WKyFmz1rimZoy2wZJGQBXter2C6lpc9qw++vy/XtXiMoe3upLeTiS
-Nipry8XSUJJpaHq4Os5JpvUoC4uJr1rYIkJC7vMuGCgj2rZ/4Ry/aHzvtdltO4Ei
-TPTH+NUrhFlUB1yQODVB8RjyRboR6hiAfqM4rCLTPR6aSt8rktzJc2l7HZgRXLOu
-4SQPkKPU1fUtu3SHJUc/WqlvGIULKo3kdhgCr+lwfb9ZtLItxLIAx9upp25pKKMq
-klFN3PTfDenR2mjWbtEvnsm8sVG4buevXpit1aiUAcAYHapVr6GMVGKij5iUnKTk
-ydKnU1ClSikwRIKcD60wU4GpLQ7PpRSUUhlaikpc1kWLRSUUxC5ozSZozTA5Txn8
-QtF8DxRDUDLPeTDdFaQAFyucbiTwo+vXsK8huNZHiVJddtbY2/mysfJL7iAD0JwM
-1h/F+X7V8RtUKybzEUj5PTCjj8KseD2S304WbzxPJ9/CsDjcM4/DvXLjF+6TXc7M
-F/EafY1YNThkVcttccMpqY3trtx8ufeoJbK3acrLECPcUsmj2EUYfyw27kcmvOjY
-9NuS6kc+pxp8seWc8Koq7pWox+HLiHWdQSR0gO90jALYxjAzjnmsxbnTbCXMssMK
-r6nk/h1rH17xLY3lpJa25dw4wWxgfrW9KnOU04owqziotSZ7r4S8daT4xFwunpcR
-S24DPHOoBweMjBOa6pDXzn8JNej0nxdFbSKqwX6/ZtzHG1s5U59yMfjX0SpwcGvc
-Wp4MlZltDUoNV42qYGpYIlFOzUYNOBqSx4opBzRSArUtNqrqWqWOj2D32pXcVrap
-96WVsDPoO5PsOayNC5TXkWKJpZHVI0GWd2AVR7k9K8Z8R/HTazweHNPBHQXd4Ovu
-sY/9mP4V5Trvi7XPETltW1S4uVzkRM2I1+iDCj8qtRYWPfvEXxh8L6GJIrWZ9Vu1
-48u1/wBWD7yHj8s15Jr/AMYfFGtyOlvdDS7c5xFZnace7n5j+n0rz1n3Hmmk4zzV
-KKFcdNPI7s0jM7sxZmY5LE9ST61CsrI25SQR3BwacWzwRUZX0qiblgaheq25bucH
-18w086tqDrta9uCvp5hqng56UDmp5I9iueXcmDsxyzEn1JqROvNQKD7VKCqDJOas
-kuRuMgjp711+n/FHxVpyIsWqNPHEAojukWQEe5PP61wvnEj0B4ApykZJJ7UDPfvD
-Hxp0+/dLfXbYWMp4E8RLxH6jqv616laXtve26XFrPFPC/KyRsGU/iK+MBICcDitn
-QPFWseHbvztMv5YM/eTOUb6qeDRcXKj7CV8ing1434V+NtpezR2niC3W0Y8fa4cm
-PP8AtL1H1Ga9atrqG6gSe3mjmhcZSSNgysPYikTZouCiow4xRRYLmRr+tW/h7Qrv
-Vbkbo7dCwQHBdugUfU4r5Y8TeKtV8Tak15qlwztk+XEDiOFf7qL2H6nvXr3x01n7
-Po2n6SjfNcymaQf7K8D9T+leBzPuT3H8qiC0NHoNeYnvURc4phPNITmrJuLu5pSa
-Z3pRyKYhM80oOaaetAoAkzwKTd6Cm5pBQA8EnqTijOSeOKaT2oHSgY7cTTg1Rilp
-AS7/AGpc4UA96iHJApXbk0wJ0kOeDXTeGPGer+GbtZNOunWMnLwscxv9V/ya5T7q
-D1NOEhQYHU9/Siw0z7A8KeJ7XxToceo2ymNs7JoicmNx1HuOcg0V5j8A9RQnWNKl
-lVARHcruOOfut/7LRTViJaPQ5b42agbrx29uGytrAiAehPJ/nXmrNu2H14NdD481
-A6j401S6zkPMQPoOP6VzQOcj0OaiGxctxpNA5obqfrQKokSlWkzQDzQAMOaSnN1F
-JQAtFFFAAKKKO9AC0UlGaBj0HemjlvrTkOEY03vQIe7YJP4CkTBfn6mkbkA/Wkzg
-YHU9aYGtpl7Pau8kEzxMwwShwcUVUtWIU4oqbXLTFv3M0jSkksWJP481SU/Pk1Ym
-b7/1FViMY96diWKwy5+tITTm+7mo6BC0DrR2oHWgB7dBTac3SmUALS0lKOtACUua
-KKACm0vSk70ASLxF9TSYzznrQf8AVqKTPH40wHHHQfjTM55pTwp9+KQdKALEL7Is
-+poph4Cr6Cigdz//2YhgBBMRAgAgBQJKP/cgAhsDBgsJCAcDAgQVAggDBBYCAwEC
-HgECF4AACgkQm30y8tUFgua3awCdFQlChLgn/n4tb4jLe1RgxOxHxosAn2Cn2oNh
-sZ91wUb4d5JuH88TCupsuQINBEmFQG0QCADqAXWgiis4yi96os3QZmK5809ojjTT
-nlICgbztrT55cMVTDBc9SneyRQlC0cS+M1z4Do6lj81sNJdJiBPqTYYA1+exTFvs
-5zCxPInDP3hvqXxHTP142XN1hdzt53R7smn8O0wyO+RCBUb44e9NkusvBd5UP3Je
-449hnpXJ4WO3cVMFm4ghxs7ERlpAi5NTEsVVdM8dqHbZJtk8gbzdAHH0ybiAXmWy
-LFGZDuuKiFAkqm/Wled7id6N+cPx107dwBclwPxzfEYKEqJ1YDDHoDlyfx4012y1
-53e5sGyah/IPBYrrLMfG+Wmiwr5nCX0tmwOcyukuE94hbzJCX2wBdbWLAAMGCACz
-l3cuM4lGt/wr5liM4gotXpZAopY+EnbLIBuOHFXXR7HnyAgST1jH/AUbafvPjyDh
-EkFDyUP14XtHNIAqsN1UpuyYbM90bMPAWXJxrazMsSF+Tv5yIxHiy4cc1pjoqHA2
-kwqIGHmTxYzOPOS19ZWQAtevoTE6pCARphY0dzpscCWaXGs/ZqNAhjL96WLYV1Oo
-Ut+9mTnOcs6Vuxaxp2wN2S5DK1S9gdIxWEc8wMUPiQe8CYk0OySdORIblMs3bGqD
-FoM5HcBAZP1YlXitPH2nIRv0DtOQGMQOCkqUWmQuQAUgKV+YO86lO4S7EhTET/GP
-sQb6P7efm/Cs8wbq/wyIiEkEGBECAAkFAkmFQG0CGwwACgkQm30y8tUFgua2mACe
-JNBW4snDC4OzjKU6QT386/GA9ssAn3vLzSwn8N1xv5MihWGr5kVzvaE2
-=cjdq
+mQINBF6B77kBEACZoUU41uYVDbagtNQrNQsnbx7UkRdu2rdUZLHryTOKv4InT33Z
+mR73lTKT/8UlRYUp1kCLFebMTY73/x7Gk7tSQlURthLEGWpP7hpHZ4Co7slExvg4
+U1ULJfte30EqzwzM4vd6RGYSo6oeReP0Zffd8OYXz6mzcMvcTaKoUfsFbUVJS2ps
+rmy2Xzu6arXivSVun8srE121bYf3DfM99G4vRf8VameamMRlSUxOThl+0pLULCwq
+iAZR6hNbUbU4IOk6ZkaAUAEYzlwbrn0UjTO3iEkACgkOlcd9juB9+o/Vucbymdto
+YioOAB6TcAJ/KM2snChmbkcV2at2CP5d+LVa/waYnd36C+TGCNRPZBNGlUrEeiMA
+WGw14vUYMtZG3+04Holwhd/iZ3iqvMLjI5Z6SYueGvqzg8lCfeCTXFHmitWllZr6
+NTvcZeBMVnR/SlTI2IdwaO4ODArtsaC26bLesdfLEL3MnrztUQaJ14Vyv9hOb+bQ
+VwxzpWrjXq03zmyeMyta6hvsTDgHCiZQivZjBjSHPbHEM10mKVu+oeVcwuSGFp8Z
+zxLiHucwjeQDJ006/dJQH//3BO7P//LH4K11a87Ewj/aG2AIxvV4mMzS3YGSni8a
+pCH+GA4GHfybTC6ztFAU8tjKS9u2MSpbo/1gKdmvdLFoYSgGLvjD/+ls8QARAQAB
+tDJKZW5raW5zIFByb2plY3QgPGplbmtpbnNjaS1ib2FyZEBnb29nbGVncm91cHMu
+Y29tPokCVAQTAQoAPhYhBGKpdWv9eAw3fPJLqPzvMudF8sPVBQJege+5AhsDBQkF
+o5qABQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJEPzvMudF8sPVD9YQAI6jJSP2
+kzwUI4aGYU2SFYel5Uk3ps7mbAcMHcxJMsq/WhjSVWYzTTL4RSgNRI1J6fC8C97k
+ONYqE0H1SeIPRQ0h8YiAXCoGhzH6IUMKZv2QlSb+GtZOD0c2oBwVdPC1jIjrUZ7N
+BEhsnE20teqCyBy+ReognfTeZRjYkWGDoF0PrCqwybYU1DYoe0NsmKVcwrzNOu1s
+6vDIkjyZ6eUPoRLdjNUXoMcgnS8fAxyNksfabJtqo3XoCxy38NqoCH9Bft/nyQgE
+Tq7D96PcrnjdqLuqndb09TzhEbYMA1OJ/m8rE5eDxXn0hVef5ZTdSbAGDZ3vak4R
+6NtkyYsaDgONWDZGNwfZrQiPDm+ziGdcQ61oRp6dldF6PiG/E++yQbrNLmFoLvqg
+UCzEkyuh5ws+QeX5CnrFqxGb1KAVjKWo4bWZuG7Aro6aouCBTzqW60rnYWzlUGzd
+eWGMmvIJYLpdiN0hOpdr995jDXLCJzds8Qle+Zpv3SCtnXTD9vFyHQhV9y1UycPJ
+gQ3FFT0SSXIlnD7aoqDku/jq/pFCeccUqUjEFWeKa6shiXPXcqo3PCwYOhE1WFAn
+MrxKcKzKUyabzI1i9Din5udUtWAEuqH7g2yX6kAr3RBBVjrCe7iALBDzXUTNOj0J
+w9eTf917JDRcCeYOhDmUM70Cl0gfQUqzhYzzuQINBF6B77kBEAC8sdb/x+CSQWqX
+KLEvIAo1qIusCGWICJqPO/3nG6Y2FUEA9HjZU+/i/Q3mbDk4QN/1qoqUiwg27iOa
+Q3GwjWn887U7ZK4QqDPaMZL62Vf5OAC0hA2iXnncvAcRCAo/FUhXkhI+p2w76a3U
+LffCOUdevTF/eE8c85GeCxUH/h4tmbDmCsWmYakEs8HpZ+CmOWm3Z/oWmrXYOBbO
+UuzGVTOo3oUR0f+CjzsrnPW0oFIFAzBmPLfZSFCcuIeR4gosvtvFurTsQ4tuoVpB
+Tgu5Dzyc0iJgFjviSA+lVcBEyye/c0pkXaZss0ZbCEtIgTyWptfSUcxDJISYO5ov
+em1DgtM7U8jCO3R4D/nRhjFBx5Wup6F2r1mPz+xGvWCry0ryivGTcIaHZHT8QICJ
+aFJ6VfDXJzToxEnlrrXK2Y5qM5HmJa7R/uA9mdYHuhbJJ1m8aB6o8EYR9QtIMJ8h
+XGX/Bhdxu+8O4EYDO5bpA/A9zcIsIvT77yJTfaDI9FUL3BWefTS1uswake8xqowF
+O+YrTyPUkMlH5tbQFXQ6vzWrkt69nSEBW629ronXm3E6R+1i5uEnN/SHsWoTU2v4
+xcP+K/HT7a6AYq3bEp/vUMASSmaI51U3BA2XyxANtWTzDeseHNIMF6tuZuewwcjN
+5F8jFI7iFtvrfUPZFPPQ2/vX2SwOlQARAQABiQI8BBgBCgAmFiEEYql1a/14DDd8
+8kuo/O8y50Xyw9UFAl6B77kCGwwFCQWjmoAACgkQ/O8y50Xyw9XGGxAAhcLj80iM
+M26mZA+hPxriP27eLI3yLOsuEKjZftcfOV5WC3iaklkZAmMkmIfhwg/QEkLqL4f4
+MdnVj5/aVyygG2czW3Lvg4otjySTjBv+rf55GVK7KomAjJBU6m+IJdCHJbKKuixP
+CEy5GXqdnXkaNbU+DAba0dP8lfQXHgpeeAYUushJrEOEVriCyrxyQan2HomJ2zs7
+IoB1fCLI2FGV5MItyCmVOjJJ6ViJoQz6FRL9kvmT/xwMSwmrQMhMgU6zTZcYzdBL
+KYkxahUr7ltETFy3LaPnDezX3zT8mNQ9bqfxaMLn/+Ku/AdriMhfzoC9NXvzhZYY
+kWVGYwWzFAVOyn3o1A+MRjhT7FikWXQxKlGuGgcXDhbPWR4gUSWlEga1aFVRzYHO
+Ty60f6SWcuTgL0tBNcdXqEkhSpoV/9wxhTox6lfaH3vajganr9gPyew1oiOrvIzw
+PNbzJTe+Yj1WEUheSdWuI5jPQl5Mr5YYxf9j0T2xqb2k01/FW+aR5Xte5Bj9OGz2
+Ou4QDK481XaUKovplz3jj2PtK8d/12OJT11ukFb8py6u1ezxRjOm3Nk6kzySG8vP
+hjqccnUDI8Eg8yo0s02+SVt9lNkVe7ggF99TRp/rMBCxb+e27OPjqdRKEArB8JyI
+Z77i4FhdLio04srxWsN+FkRwkBJdkJ8VKEE=
+=0xpA
-----END PGP PUBLIC KEY BLOCK-----
diff --git a/system/files/nvidia.key b/system/files/nvidia.key
index eded66cf..f581f523 100644
--- a/system/files/nvidia.key
+++ b/system/files/nvidia.key
@@ -47,6 +47,29 @@ ivAE7EqreB+wj/V8ObN4vqzhaU0zl4ElgdyN0GYPR2mbIr4dgAgfQP66yoQvDTxK
DPFzSNC7x4ehDnowy4CrK9LKBdHISR8vorSL10MD4ehdFR3308hyUgTo8/0IUkxa
X5k2Oq99CGhIbuCFttnr1DCKNremMJVzkado7hx/C3Z1liaExG2dvnMrZBiN/S6V
Ct7CJcRi+BjUy+um8P7hJNkN7uqvfax9MgF/pvdvCGmygsQAxUoenbAY/WP1Xz44
-Os8DlMDE6fGy/6l+pHuHpT52NxE=
-=cDVy
+Os8DlMDE6fGy/6l+pHuHpT52NxG5AQ0EXYKQkAEIAMdaMV/bRZb9wiL2tAidHbGc
+jRe5oBz4DbM3HFGC7tHIclmL8IlVPzpQs4r8rTV+esIHgYCFVdUM3gbk5KyUoMyf
+nUoH65soOUcCA4bx/g3LrdPvuvnYtS8h/YF0HGD6zd6X+MkfJ5UW5uitFbKdGePm
+69fEHpVEXq3wJEaK3WoNumgfjM1S75aBx7t2ev799tbkxjHRXfAlQo6L3nOfhHXC
+AGpt1PzJmXtpq9jP8ehd7Ld9HBO7pqvQW+lAqnOi/G0HKJaMUd68Bcy9bvcFAVM0
+JWjDZsW3tAX3s5JkkHgvCTeBZLvg7RxKUvbj+SRGDRBEOuiuJiQ0zK9MIQb9XykA
+EQEAAYkDRAQYAQoADwUCXYKQkAIbAgUJAeEzgAEpCRDdyuBE95bssMBdIAQZAQoA
+BgUCXYKQkAAKCRBu2RyjrBFgzZ/WB/9TuD2qzaBO7HlPDWRUTpFlvFgyDc3XyfTA
+C/ISeYbIcPcq5kmVHgpsMdbN9Vvmot5GuT7VWzhHc9sJCmHgL330glBtNtSRflKz
+lBYnbiSWxLFYZtu2BtNOk8Ylbw8qw1E6W/iFBrqAwgeZvs2VOcPU3203Mqfi1JbS
++YHC/bgs6cNq0zs/WJraYxiuleclKYExxLt9tRd0058n58GAph+Ki7mRInO6kxuK
+psQannSn1Ku/DiaQcSF2L2TMSo0N9zwvYEZR+hgsKVqyRKT+DkZhusHJHYGv96YH
+STwo016ZhwYS9t0MLXY9/PgJysuO41Ya4Ii43D3UK1wOHTmyHZHTCrMP/jHFGaOq
+t5WhuHFhc8eDIT5DX3za/y+M4uHhpQN98ySNOjRIjAbXMvD4gHCGZD2OhKHxe6y2
+KApmjxliTHJGJQ5gOfHFaM667duFWOHJfA4dKwVHnz7EveOikMnZ/9G+Saqq0HgZ
+Lxm8oOk5VSeBVZMw2HGADK09TP5Z1RFtgQI1YgONlfWaj7RDNc4a8rqVIntaUAgU
+pa1sdQIgco8asTYELObaUF8txTV6BfCUSkqU+bNLNmvHZis74iZXLkk3rRU4lSQb
++aSmVudfSOxj3piZj2dl39H4ZY3KEI1cD+boAqMRY96W7NjUIp9Od7hqCfVICt+y
+pM+TaL8/ELPDbA9AqxnyDQbyRfyoPgPvwMmXOmtrD0LLElnqHXzzWIhXtKW+6sah
+KugQoQ/daA73xczQoCSz+cVgGRoppe+YZAHhb0uHqouXvK2kmffD9TImQuleSv//
+Ph+9MInkqYVnMfjna4EWzUyqnx4rDoxChkS1XmWdhWODtAojh1JaYRQCejgKUE4R
+HebSLFGTKDeuZoPUGWDeZlzHn1eTd1kGsXCL42ECGhZCG8dkCzdXsDTHreOEE9QF
+rfpK1e8dm0Thr/sp3kiq7Voz7tYmR389JSELR0YCaMptstIZz37ypLcHYvDu8M6E
+NmQBdHaOYeEzEdtUx6zvL3fbnduwibQLz1kQ
+=6ovY
-----END PGP PUBLIC KEY BLOCK-----
diff --git a/system/fs_endpoint_lib.py b/system/fs_endpoint_lib.py
index dcb4e803..87a191be 100644
--- a/system/fs_endpoint_lib.py
+++ b/system/fs_endpoint_lib.py
@@ -38,11 +38,14 @@ class FileSystemEndpointTest(BaseTest):
if not os.path.islink(os.path.join(os.environ["HOME"], ".aptly", path)):
raise Exception("path %s is not a symlink" % (path, ))
+ def is_hardlink(self, path):
+ return os.stat(os.path.join(os.environ["HOME"], ".aptly", path)).st_nlink >= 2
+
def check_is_hardlink(self, path):
- if os.stat(os.path.join(os.environ["HOME"], ".aptly", path)) <= 1:
+ if not self.is_hardlink(path):
raise Exception("path %s is not a hardlink" % (path, ))
def check_is_copy(self, path):
fullpath = os.path.join(os.environ["HOME"], ".aptly", path)
- if not (os.path.isfile(fullpath) and not self.check_is_hardlink(path)):
+ if not (os.path.isfile(fullpath) and not self.is_hardlink(path)):
raise Exception("path %s is not a copy" % (path, ))
diff --git a/system/lib.py b/system/lib.py
index cbebe1cb..013cfc3a 100644
--- a/system/lib.py
+++ b/system/lib.py
@@ -8,21 +8,32 @@ import json
import subprocess
import os
import posixpath
+import re
import shlex
import shutil
import string
import threading
-import urllib
+import urllib.error
+import urllib.parse
+import urllib.request
import pprint
-import SocketServer
-import SimpleHTTPServer
+import socketserver
+import http.server
+import zlib
-class ThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
+def ungzip_if_required(output):
+ if isinstance(output, bytes) and output.startswith(b"\x1f\x8b"):
+ return zlib.decompress(output, 16 + zlib.MAX_WBITS).decode('utf-8')
+
+ return output
+
+
+class ThreadedTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
pass
-class FileHTTPServerRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
+class FileHTTPServerRequestHandler(http.server.SimpleHTTPRequestHandler):
def translate_path(self, path):
"""Translate a /-separated PATH to the local filename syntax.
@@ -34,13 +45,13 @@ class FileHTTPServerRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
# abandon query parameters
path = path.split('?', 1)[0]
path = path.split('#', 1)[0]
- path = posixpath.normpath(urllib.unquote(path))
+ path = posixpath.normpath(urllib.parse.unquote(path))
words = path.split('/')
- words = filter(None, words)
+ words = [_f for _f in words if _f]
path = self.rootPath
for word in words:
- drive, word = os.path.splitdrive(word)
- head, word = os.path.split(word)
+ _, word = os.path.splitdrive(word)
+ _, word = os.path.split(word)
if word in (os.curdir, os.pardir):
continue
path = os.path.join(path, word)
@@ -69,7 +80,7 @@ class GPGFinder(object):
def find_gpg(self, executables, expected_version):
for executable in executables:
try:
- output = subprocess.check_output([executable, "--version"])
+ output = subprocess.check_output([executable, "--version"], text=True)
if expected_version in output:
return executable
except Exception:
@@ -78,11 +89,31 @@ class GPGFinder(object):
return None
+class DotFinder(object):
+ """
+ dot binary discovery.
+ """
+
+ def __init__(self):
+ self.dot = self.find_dot(["dot"])
+
+ def find_dot(self, executables):
+ for executable in executables:
+ try:
+ subprocess.check_output([executable, "-V"], text=True)
+ return executable
+ except Exception:
+ pass
+
+ return None
+
+
class BaseTest(object):
"""
Base class for all tests.
"""
+ skipTest = False
longTest = False
fixturePool = False
fixturePoolCopy = False
@@ -92,12 +123,16 @@ class BaseTest(object):
requiresFTP = False
requiresGPG1 = False
requiresGPG2 = False
+ requiresDot = False
+ sortOutput = False
expectedCode = 0
configFile = {
"rootDir": "%s/.aptly" % os.environ["HOME"],
"downloadConcurrency": 4,
"downloadSpeedLimit": 0,
+ "downloadRetries": 5,
+ "databaseOpenAttempts": 10,
"architectures": [],
"dependencyFollowSuggests": False,
"dependencyFollowRecommends": False,
@@ -107,6 +142,7 @@ class BaseTest(object):
"gpgDisableSign": False,
"ppaDistributorID": "ubuntu",
"ppaCodename": "",
+ "enableMetricsEndpoint": True,
}
configOverride = {}
environmentOverride = {}
@@ -126,11 +162,15 @@ class BaseTest(object):
captureResults = False
gpgFinder = GPGFinder()
+ dotFinder = DotFinder()
def test(self):
self.prepare()
- self.run()
- self.check()
+ try:
+ self.run()
+ self.check()
+ finally:
+ self.teardown()
def prepare_remove_all(self):
if os.path.exists(os.path.join(os.environ["HOME"], ".aptly")):
@@ -138,7 +178,8 @@ class BaseTest(object):
if os.path.exists(os.path.join(os.environ["HOME"], ".aptly.conf")):
os.remove(os.path.join(os.environ["HOME"], ".aptly.conf"))
if os.path.exists(os.path.join(os.environ["HOME"], ".gnupg", "aptlytest.gpg")):
- os.remove(os.path.join(os.environ["HOME"], ".gnupg", "aptlytest.gpg"))
+ os.remove(os.path.join(
+ os.environ["HOME"], ".gnupg", "aptlytest.gpg"))
def prepare_default_config(self):
cfg = self.configFile.copy()
@@ -162,24 +203,29 @@ class BaseTest(object):
return False
if self.requiresGPG2 and self.gpgFinder.gpg2 is None:
return False
+ if self.requiresDot and self.dotFinder.dot is None:
+ return False
return True
def prepare_fixture(self):
if self.fixturePool:
- os.makedirs(os.path.join(os.environ["HOME"], ".aptly"), 0755)
- os.symlink(self.fixturePoolDir, os.path.join(os.environ["HOME"], ".aptly", "pool"))
+ os.makedirs(os.path.join(os.environ["HOME"], ".aptly"), 0o755)
+ os.symlink(self.fixturePoolDir, os.path.join(
+ os.environ["HOME"], ".aptly", "pool"))
if self.fixturePoolCopy:
- os.makedirs(os.path.join(os.environ["HOME"], ".aptly"), 0755)
- shutil.copytree(self.fixturePoolDir, os.path.join(os.environ["HOME"], ".aptly", "pool"), ignore=shutil.ignore_patterns(".git"))
+ os.makedirs(os.path.join(os.environ["HOME"], ".aptly"), 0o755)
+ shutil.copytree(self.fixturePoolDir, os.path.join(
+ os.environ["HOME"], ".aptly", "pool"), ignore=shutil.ignore_patterns(".git"))
if self.fixtureDB:
- shutil.copytree(self.fixtureDBDir, os.path.join(os.environ["HOME"], ".aptly", "db"))
+ shutil.copytree(self.fixtureDBDir, os.path.join(
+ os.environ["HOME"], ".aptly", "db"))
if self.fixtureWebServer:
self.webServerUrl = self.start_webserver(os.path.join(os.path.dirname(inspect.getsourcefile(self.__class__)),
- self.fixtureWebServer))
+ self.fixtureWebServer))
if self.requiresGPG2:
self.run_cmd([
@@ -194,11 +240,17 @@ class BaseTest(object):
for cmd in self.fixtureCmds:
self.run_cmd(cmd)
+ def sort_lines(self, output):
+ return "\n".join(sorted(self.ensure_utf8(output).split("\n")))
+
def run(self):
- self.output = self.output_processor(self.run_cmd(self.runCmd, self.expectedCode))
+ 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):
- if not hasattr(command, "__iter__"):
+ if isinstance(command, str):
params = {
'files': os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files"),
'changes': os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "changes"),
@@ -210,8 +262,8 @@ class BaseTest(object):
params['url'] = self.webServerUrl
command = string.Template(command).substitute(params)
-
command = shlex.split(command)
+
environ = os.environ.copy()
environ["LC_ALL"] = "C"
environ.update(self.environmentOverride)
@@ -223,10 +275,12 @@ class BaseTest(object):
output, _ = proc.communicate()
if expected_code is not None:
if proc.returncode != expected_code:
- raise Exception("exit code %d != %d (output: %s)" % (proc.returncode, expected_code, output))
+ raise Exception("exit code %d != %d (output: %s)" % (
+ proc.returncode, expected_code, output))
return output
- except Exception, e:
- raise Exception("Running command %s failed: %s" % (command, str(e)))
+ except Exception as e:
+ raise Exception("Running command %s failed: %s" %
+ (command, str(e)))
def gold_processor(self, gold):
return gold
@@ -243,9 +297,19 @@ class BaseTest(object):
def get_gold(self, gold_name="gold"):
return self.gold_processor(open(self.get_gold_filename(gold_name), "r").read())
+ def strip_retry_lines(self, s):
+ for prefix in (
+ 'Following redirect',
+ 'Error downloading',
+ 'Retrying',
+ ):
+ s = re.sub(r'{}.*\n'.format(prefix), '', s)
+ return s
+
def check_output(self):
try:
- self.verify_match(self.get_gold(), self.output, match_prepare=self.outputMatchPrepare)
+ self.verify_match(self.get_gold(), self.output,
+ match_prepare=self.outputMatchPrepare)
except: # noqa: E722
if self.captureResults:
if self.outputMatchPrepare is not None:
@@ -268,18 +332,20 @@ class BaseTest(object):
else:
raise
- def read_file(self, path):
- with open(os.path.join(os.environ["HOME"], ".aptly", path), "r") as f:
+ def read_file(self, path, mode=''):
+ with open(os.path.join(os.environ["HOME"], ".aptly", path), "r" + mode) as f:
return f.read()
def delete_file(self, path):
os.unlink(os.path.join(os.environ["HOME"], ".aptly", path))
- def check_file_contents(self, path, gold_name, match_prepare=None):
- contents = self.read_file(path)
+ def check_file_contents(self, path, gold_name, match_prepare=None, mode='', ensure_utf8=True):
+ contents = self.read_file(path, mode=mode)
try:
- self.verify_match(self.get_gold(gold_name), contents, match_prepare=match_prepare)
+ self.verify_match(self.get_gold(gold_name),
+ contents, match_prepare=match_prepare,
+ ensure_utf8=ensure_utf8)
except: # noqa: E722
if self.captureResults:
if match_prepare is not None:
@@ -328,23 +394,38 @@ class BaseTest(object):
if item not in l:
raise Exception("item %r not in %r", item, l)
+ def check_not_in(self, item, l):
+ if item in l:
+ raise Exception("item %r in %r", item, l)
+
def check_subset(self, a, b):
diff = ''
- for k, v in a.items():
+ for k, v in list(a.items()):
if k not in b:
diff += "unexpected key '%s'\n" % (k,)
elif b[k] != v:
- diff += "wrong value '%s' for key '%s', expected '%s'\n" % (v, k, b[k])
+ diff += "wrong value '%s' for key '%s', expected '%s'\n" % (
+ v, k, b[k])
if diff:
raise Exception("content doesn't match:\n" + diff)
- def verify_match(self, a, b, match_prepare=None):
+ def ensure_utf8(self, a):
+ if isinstance(a, bytes):
+ return a.decode('utf-8')
+ return a
+
+ def verify_match(self, a, b, match_prepare=None, ensure_utf8=True):
+ if ensure_utf8:
+ a = self.ensure_utf8(a)
+ b = self.ensure_utf8(b)
+
if match_prepare is not None:
a = match_prepare(a)
b = match_prepare(b)
if a != b:
- diff = "".join(difflib.unified_diff([l + "\n" for l in a.split("\n")], [l + "\n" for l in b.split("\n")]))
+ 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")
@@ -355,9 +436,13 @@ class BaseTest(object):
self.prepare_default_config()
self.prepare_fixture()
+ def teardown(self):
+ pass
+
def start_webserver(self, directory):
FileHTTPServerRequestHandler.rootPath = directory
- self.webserver = ThreadedTCPServer(("localhost", 0), FileHTTPServerRequestHandler)
+ self.webserver = ThreadedTCPServer(
+ ("localhost", 0), FileHTTPServerRequestHandler)
server_thread = threading.Thread(target=self.webserver.serve_forever)
server_thread.daemon = True
diff --git a/system/requirements.txt b/system/requirements.txt
index b9847875..3d4be24f 100644
--- a/system/requirements.txt
+++ b/system/requirements.txt
@@ -3,3 +3,4 @@ requests
requests-unixsocket
python-swiftclient
flake8
+termcolor
diff --git a/system/run.py b/system/run.py
index 8c670177..e27377d0 100755
--- a/system/run.py
+++ b/system/run.py
@@ -5,9 +5,11 @@ import importlib
import os
import inspect
import fnmatch
+import re
import sys
import traceback
import random
+import subprocess
from lib import BaseTest
from s3_lib import S3Test
@@ -22,9 +24,17 @@ except ImportError:
return s
+PYTHON_MINIMUM_VERSION = (3, 9)
+
+
+def natural_key(string_):
+ """See https://blog.codinghorror.com/sorting-for-humans-natural-sort-order/"""
+ return [int(s) if s.isdigit() else s for s in re.split(r'(\d+)', string_)]
+
+
def walk_modules(package):
yield importlib.import_module(package)
- for name in glob.glob(package + "/*.py"):
+ for name in sorted(glob.glob(package + "/*.py"), key=natural_key):
name = os.path.splitext(os.path.basename(name))[0]
if name == "__init__":
continue
@@ -37,14 +47,14 @@ def run(include_long_tests=False, capture_results=False, tests=None, filters=Non
Run system test.
"""
if not tests:
- tests = glob.glob("t*_*")
+ tests = sorted(glob.glob("t*_*"), key=natural_key)
fails = []
numTests = numFailed = numSkipped = 0
lastBase = None
for test in tests:
for testModule in walk_modules(test):
- for name in dir(testModule):
+ for name in sorted(dir(testModule), key=natural_key):
o = getattr(testModule, name)
if not (inspect.isclass(o) and issubclass(o, BaseTest) and o is not BaseTest and
@@ -68,22 +78,29 @@ def run(include_long_tests=False, capture_results=False, tests=None, filters=Non
if not matches:
continue
+ sys.stdout.write("%s:%s... " % (test, o.__name__))
+ sys.stdout.flush()
+
t = o()
- if t.longTest and not include_long_tests or not t.fixture_available():
+ if t.longTest and not include_long_tests or not t.fixture_available() or t.skipTest:
numSkipped += 1
+ msg = 'SKIP'
+ if t.skipTest and t.skipTest is not True:
+ # If we have a reason to skip, print it
+ msg += ': ' + t.skipTest
+ sys.stdout.write(colored(msg + "\n", color="yellow"))
continue
numTests += 1
- sys.stdout.write("%s:%s... " % (test, o.__name__))
-
try:
t.captureResults = capture_results
t.test()
- except BaseException:
+ except Exception:
numFailed += 1
typ, val, tb = sys.exc_info()
fails.append((test, t, typ, val, tb, testModule))
+ traceback.print_exception(typ, val, tb)
sys.stdout.write(colored("FAIL\n", color="red"))
else:
sys.stdout.write(colored("OK\n", color="green"))
@@ -93,16 +110,18 @@ def run(include_long_tests=False, capture_results=False, tests=None, filters=Non
if lastBase is not None:
lastBase.shutdown_class()
- print "TESTS: %d SUCCESS: %d FAIL: %d SKIP: %d" % (numTests, numTests - numFailed, numFailed, numSkipped)
+ print("TESTS: %d SUCCESS: %d FAIL: %d SKIP: %d" % (
+ numTests, numTests - numFailed, numFailed, numSkipped))
if len(fails) > 0:
- print "\nFAILURES (%d):" % (len(fails), )
+ print("\nFAILURES (%d):" % (len(fails), ))
for (test, t, typ, val, tb, testModule) in fails:
doc = t.__doc__ or ''
- print "%s:%s %s" % (test, t.__class__.__name__, testModule.__name__ + ": " + doc.strip())
+ print("%s:%s %s" % (test, t.__class__.__name__,
+ testModule.__name__ + ": " + doc.strip()))
traceback.print_exception(typ, val, tb)
- print "=" * 60
+ print("=" * 60)
sys.exit(1)
@@ -110,9 +129,21 @@ def run(include_long_tests=False, capture_results=False, tests=None, filters=Non
if __name__ == "__main__":
if 'APTLY_VERSION' not in os.environ:
try:
- os.environ['APTLY_VERSION'] = os.popen("make version").read().strip()
- except BaseException, e:
- print "Failed to capture current version: ", e
+ os.environ['APTLY_VERSION'] = os.popen(
+ "make version").read().strip()
+ except BaseException as e:
+ print("Failed to capture current version: ", e)
+
+ if sys.version_info < PYTHON_MINIMUM_VERSION:
+ raise RuntimeError(f'Tests require Python {PYTHON_MINIMUM_VERSION} or higher.')
+
+ output = subprocess.check_output(['gpg1', '--version'], text=True)
+ if not output.startswith('gpg (GnuPG) 1'):
+ raise RuntimeError('Tests require gpg v1')
+
+ output = subprocess.check_output(['gpgv1', '--version'], text=True)
+ if not output.startswith('gpgv (GnuPG) 1'):
+ raise RuntimeError('Tests require gpgv v1')
os.chdir(os.path.realpath(os.path.dirname(sys.argv[0])))
random.seed()
diff --git a/system/s3_lib.py b/system/s3_lib.py
index bf74a93b..9940fe13 100644
--- a/system/s3_lib.py
+++ b/system/s3_lib.py
@@ -8,10 +8,10 @@ try:
if 'AWS_SECRET_ACCESS_KEY' in os.environ and 'AWS_ACCESS_KEY_ID' in os.environ:
s3_conn = boto.connect_s3()
else:
- print "S3 tests disabled: AWS creds not found in the environment"
+ print("S3 tests disabled: AWS creds not found in the environment")
s3_conn = None
-except ImportError, e:
- print "S3 tests disabled: can't import boto", e
+except ImportError as e:
+ print("S3 tests disabled: can't import boto", e)
s3_conn = None
diff --git a/system/swift_lib.py b/system/swift_lib.py
index 2ddb0e15..691611be 100644
--- a/system/swift_lib.py
+++ b/system/swift_lib.py
@@ -1,7 +1,9 @@
from lib import BaseTest
+import logging
import uuid
import os
+
try:
import swiftclient
@@ -23,10 +25,10 @@ try:
swift_conn = swiftclient.Connection(auth_url, auth_username,
auth_password, auth_version=1)
else:
- print "Swift tests disabled: OpenStack creds not found in the environment"
+ print("Swift tests disabled: OpenStack creds not found in the environment")
swift_conn = None
-except ImportError, e:
- print "Swift tests disabled: unable to import swiftclient", e
+except ImportError as e:
+ print("Swift tests disabled: unable to import swiftclient", e)
swift_conn = None
@@ -50,13 +52,21 @@ class SwiftTest(BaseTest):
super(SwiftTest, self).prepare()
- def shutdown(self):
- if hasattr(self, "container_name"):
+ def _try_delete_container(self):
+ if not hasattr(self, "container_name"):
+ return
+
+ try:
for obj in swift_conn.get_container(self.container_name,
full_listing=True)[1]:
swift_conn.delete_object(self.container_name, obj.get("name"))
swift_conn.delete_container(self.container_name)
+ except swiftclient.ClientException:
+ logging.exception("Error shutting down Swift container")
+
+ def shutdown(self):
+ self._try_delete_container()
super(SwiftTest, self).shutdown()
def check_path(self, path):
diff --git a/system/t02_config/ConfigShowTest_gold b/system/t02_config/ConfigShowTest_gold
index b1625b84..57b42b6a 100644
--- a/system/t02_config/ConfigShowTest_gold
+++ b/system/t02_config/ConfigShowTest_gold
@@ -2,6 +2,9 @@
"rootDir": "${HOME}/.aptly",
"downloadConcurrency": 4,
"downloadSpeedLimit": 0,
+ "downloadRetries": 5,
+ "downloader": "default",
+ "databaseOpenAttempts": 10,
"architectures": [],
"dependencyFollowSuggests": false,
"dependencyFollowRecommends": false,
@@ -16,7 +19,11 @@
"ppaDistributorID": "ubuntu",
"ppaCodename": "",
"skipContentsPublishing": false,
+ "skipBz2Publishing": false,
"FileSystemPublishEndpoints": {},
"S3PublishEndpoints": {},
- "SwiftPublishEndpoints": {}
+ "SwiftPublishEndpoints": {},
+ "AzurePublishEndpoints": {},
+ "AsyncAPI": false,
+ "enableMetricsEndpoint": true
}
diff --git a/system/t02_config/CreateConfigTest_gold b/system/t02_config/CreateConfigTest_gold
index 47425e87..7d1a23e1 100644
--- a/system/t02_config/CreateConfigTest_gold
+++ b/system/t02_config/CreateConfigTest_gold
@@ -2,6 +2,9 @@
"rootDir": "${HOME}/.aptly",
"downloadConcurrency": 4,
"downloadSpeedLimit": 0,
+ "downloadRetries": 0,
+ "downloader": "default",
+ "databaseOpenAttempts": -1,
"architectures": [],
"dependencyFollowSuggests": false,
"dependencyFollowRecommends": false,
@@ -16,7 +19,11 @@
"ppaDistributorID": "ubuntu",
"ppaCodename": "",
"skipContentsPublishing": false,
+ "skipBz2Publishing": false,
"FileSystemPublishEndpoints": {},
"S3PublishEndpoints": {},
- "SwiftPublishEndpoints": {}
+ "SwiftPublishEndpoints": {},
+ "AzurePublishEndpoints": {},
+ "AsyncAPI": false,
+ "enableMetricsEndpoint": false
}
\ No newline at end of file
diff --git a/system/t02_config/aptly.conf b/system/t02_config/aptly.conf
index ee8ca35a..a8a1d9b4 100644
--- a/system/t02_config/aptly.conf
+++ b/system/t02_config/aptly.conf
@@ -1,6 +1,7 @@
{
"rootDir": "/tmp/aptly",
"downloadConcurrency": 4,
+ "databaseOpenAttempts": 10,
"architectures": [],
"dependencyFollowSuggests": false,
"dependencyFollowRecommends": false,
diff --git a/system/t03_help/MirrorCreateHelpTest_gold b/system/t03_help/MirrorCreateHelpTest_gold
index debf7621..b266c7e0 100644
--- a/system/t03_help/MirrorCreateHelpTest_gold
+++ b/system/t03_help/MirrorCreateHelpTest_gold
@@ -28,6 +28,7 @@ Options:
-gpg-provider="": PGP implementation ("gpg", "gpg1", "gpg2" for external gpg or "internal" for Go internal implementation)
-ignore-signatures: disable verification of Release file signatures
-keyring=: gpg keyring to use when verifying Release file (could be specified multiple times)
+ -max-tries=1: max download tries till process fails with download error
-with-installer: download additional not packaged installer files
-with-sources: download source packages in addition to binary packages
-with-udebs: download .udeb packages (Debian installer support)
diff --git a/system/t03_help/MirrorCreateTest_gold b/system/t03_help/MirrorCreateTest_gold
index 8aea92e8..8783fa5e 100644
--- a/system/t03_help/MirrorCreateTest_gold
+++ b/system/t03_help/MirrorCreateTest_gold
@@ -19,6 +19,7 @@ Options:
-gpg-provider="": PGP implementation ("gpg", "gpg1", "gpg2" for external gpg or "internal" for Go internal implementation)
-ignore-signatures: disable verification of Release file signatures
-keyring=: gpg keyring to use when verifying Release file (could be specified multiple times)
+ -max-tries=1: max download tries till process fails with download error
-with-installer: download additional not packaged installer files
-with-sources: download source packages in addition to binary packages
-with-udebs: download .udeb packages (Debian installer support)
diff --git a/system/t03_help/WrongFlagTest_gold b/system/t03_help/WrongFlagTest_gold
index 7876cbd0..3b293aaf 100644
--- a/system/t03_help/WrongFlagTest_gold
+++ b/system/t03_help/WrongFlagTest_gold
@@ -20,6 +20,7 @@ Options:
-gpg-provider="": PGP implementation ("gpg", "gpg1", "gpg2" for external gpg or "internal" for Go internal implementation)
-ignore-signatures: disable verification of Release file signatures
-keyring=: gpg keyring to use when verifying Release file (could be specified multiple times)
+ -max-tries=1: max download tries till process fails with download error
-with-installer: download additional not packaged installer files
-with-sources: download source packages in addition to binary packages
-with-udebs: download .udeb packages (Debian installer support)
diff --git a/system/t04_mirror/CreateMirror10Test_gold b/system/t04_mirror/CreateMirror10Test_gold
index d92c7baa..454968b1 100644
--- a/system/t04_mirror/CreateMirror10Test_gold
+++ b/system/t04_mirror/CreateMirror10Test_gold
@@ -1,10 +1,17 @@
-Downloading http://mirror.yandex.ru/debian/dists/stretch-backports/InRelease...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch-backports/InRelease...
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch-backports/InRelease
-gpgv: RSA key ID 2B90D010
+gpgv: RSA key ID 22F3D138
-Downloading http://mirror.yandex.ru/debian/dists/stretch-backports/Release...
-Downloading http://mirror.yandex.ru/debian/dists/stretch-backports/Release.gpg...
+gpgv: RSA key ID 386FA1D9
-gpgv: RSA key ID 2B90D010
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch-backports/Release...
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch-backports/Release
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch-backports/Release.gpg...
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch-backports/Release.gpg
+
+gpgv: RSA key ID 22F3D138
+
+gpgv: RSA key ID 386FA1D9
ERROR: unable to fetch mirror: verification of detached signature failed: exit status 2
diff --git a/system/t04_mirror/CreateMirror11Test_gold b/system/t04_mirror/CreateMirror11Test_gold
index 536c40ef..f225f436 100644
--- a/system/t04_mirror/CreateMirror11Test_gold
+++ b/system/t04_mirror/CreateMirror11Test_gold
@@ -1,12 +1,19 @@
-Downloading http://mirror.yandex.ru/debian/dists/stretch/InRelease...
-Downloading http://mirror.yandex.ru/debian/dists/stretch/Release...
-Downloading http://mirror.yandex.ru/debian/dists/stretch/Release.gpg...
-gpgv: RSA key ID 46925553
-gpgv: Good signature from "Debian Archive Automatic Signing Key (7.0/wheezy) "
-gpgv: RSA key ID 2B90D010
-gpgv: Good signature from "Debian Archive Automatic Signing Key (8/jessie) "
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/InRelease...
+Error downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/InRelease: HTTP code 404 while fetching http://cdn-fastly.deb.debian.org/debian/dists/stretch/InRelease retrying...
+Retrying 0 http://cdn-fastly.deb.debian.org/debian/dists/stretch/InRelease...
+Giving up on http://cdn-fastly.deb.debian.org/debian/dists/stretch/InRelease...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release...
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release.gpg...
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release.gpg
+gpgv: RSA key ID B7D453EC
+gpgv: Good signature from "Debian Archive Automatic Signing Key (9/stretch) "
+gpgv: RSA key ID 22F3D138
+gpgv: Good signature from "Debian Archive Automatic Signing Key (10/buster) "
+gpgv: RSA key ID 386FA1D9
+gpgv: Good signature from "Debian Archive Automatic Signing Key (11/bullseye) "
gpgv: RSA key ID 1A7B6500
gpgv: Good signature from "Debian Stable Release Key (9/stretch) "
-Mirror [mirror11]: http://mirror.yandex.ru/debian/ stretch successfully added.
+Mirror [mirror11]: http://cdn-fastly.deb.debian.org/debian/ stretch successfully added.
You can run 'aptly mirror update mirror11' to download repository contents.
diff --git a/system/t04_mirror/CreateMirror11Test_mirror_show b/system/t04_mirror/CreateMirror11Test_mirror_show
index 8dd99164..2d3d2dce 100644
--- a/system/t04_mirror/CreateMirror11Test_mirror_show
+++ b/system/t04_mirror/CreateMirror11Test_mirror_show
@@ -1,5 +1,5 @@
Name: mirror11
-Archive Root URL: http://mirror.yandex.ru/debian/
+Archive Root URL: http://cdn-fastly.deb.debian.org/debian/
Distribution: stretch
Components: main, contrib, non-free
Architectures: amd64, arm64, armel, armhf, i386, mips, mips64el, mipsel, ppc64el, s390x
@@ -13,10 +13,10 @@ Architectures: amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64el s390x
Changelogs: http://metadata.ftp-master.debian.org/changelogs/@CHANGEPATH@_changelog
Codename: stretch
Components: main contrib non-free
-Date: Sat, 27 Apr 2019 09:29:22 UTC
-Description: Debian 9.9 Released 27 April 2019
+Date: Sat, 14 Aug 2021 07:42:00 UTC
+Description: Debian 9.13 Released 18 July 2020
Label: Debian
Origin: Debian
-Suite: stable
-Version: 9.9
+Suite: oldoldstable
+Version: 9.13
diff --git a/system/t04_mirror/CreateMirror12Test_gold b/system/t04_mirror/CreateMirror12Test_gold
index 8c1a328c..b6f86cb4 100644
--- a/system/t04_mirror/CreateMirror12Test_gold
+++ b/system/t04_mirror/CreateMirror12Test_gold
@@ -1,10 +1,17 @@
-Downloading http://mirror.yandex.ru/debian/dists/stretch/InRelease...
-Downloading http://mirror.yandex.ru/debian/dists/stretch/Release...
-Downloading http://mirror.yandex.ru/debian/dists/stretch/Release.gpg...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/InRelease...
+Error downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/InRelease: HTTP code 404 while fetching http://cdn-fastly.deb.debian.org/debian/dists/stretch/InRelease retrying...
+Retrying 0 http://cdn-fastly.deb.debian.org/debian/dists/stretch/InRelease...
+Giving up on http://cdn-fastly.deb.debian.org/debian/dists/stretch/InRelease...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release...
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release.gpg...
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release.gpg
-gpgv: RSA key ID 46925553
+gpgv: RSA key ID B7D453EC
-gpgv: RSA key ID 2B90D010
+gpgv: RSA key ID 22F3D138
+
+gpgv: RSA key ID 386FA1D9
gpgv: RSA key ID 1A7B6500
diff --git a/system/t04_mirror/CreateMirror13Test_gold b/system/t04_mirror/CreateMirror13Test_gold
index 794f6001..e3af17b0 100644
--- a/system/t04_mirror/CreateMirror13Test_gold
+++ b/system/t04_mirror/CreateMirror13Test_gold
@@ -1,4 +1,5 @@
-Downloading http://mirror.yandex.ru/debian/dists/stretch/Release...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release...
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release
-Mirror [mirror13]: http://mirror.yandex.ru/debian/ stretch successfully added.
+Mirror [mirror13]: http://cdn-fastly.deb.debian.org/debian/ stretch successfully added.
You can run 'aptly mirror update mirror13' to download repository contents.
diff --git a/system/t04_mirror/CreateMirror13Test_mirror_show b/system/t04_mirror/CreateMirror13Test_mirror_show
index 73209894..fb0116a4 100644
--- a/system/t04_mirror/CreateMirror13Test_mirror_show
+++ b/system/t04_mirror/CreateMirror13Test_mirror_show
@@ -1,5 +1,5 @@
Name: mirror13
-Archive Root URL: http://mirror.yandex.ru/debian/
+Archive Root URL: http://cdn-fastly.deb.debian.org/debian/
Distribution: stretch
Components: main, contrib, non-free
Architectures: amd64, arm64, armel, armhf, i386, mips, mips64el, mipsel, ppc64el, s390x
@@ -13,10 +13,10 @@ Architectures: amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64el s390x
Changelogs: http://metadata.ftp-master.debian.org/changelogs/@CHANGEPATH@_changelog
Codename: stretch
Components: main contrib non-free
-Date: Sat, 27 Apr 2019 09:29:22 UTC
-Description: Debian 9.9 Released 27 April 2019
+Date: Sat, 14 Aug 2021 07:42:00 UTC
+Description: Debian 9.13 Released 18 July 2020
Label: Debian
Origin: Debian
-Suite: stable
-Version: 9.9
+Suite: oldoldstable
+Version: 9.13
diff --git a/system/t04_mirror/CreateMirror14Test_gold b/system/t04_mirror/CreateMirror14Test_gold
index 5d2cf0d4..2ca76b61 100644
--- a/system/t04_mirror/CreateMirror14Test_gold
+++ b/system/t04_mirror/CreateMirror14Test_gold
@@ -1,4 +1,5 @@
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/InRelease...
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/InRelease
gpgv: RSA key ID 115C3D8A
gpgv: Good signature from "Johannes Ranke (Wissenschaftlicher Berater) "
gpgv: aka "Johannes Ranke "
diff --git a/system/t04_mirror/CreateMirror16Test_gold b/system/t04_mirror/CreateMirror16Test_gold
index f5aeae3e..8badf778 100644
--- a/system/t04_mirror/CreateMirror16Test_gold
+++ b/system/t04_mirror/CreateMirror16Test_gold
@@ -1,2 +1,3 @@
-Downloading http://mirror.yandex.ru/debian/dists/stretch/Release...
-ERROR: unable to fetch mirror: architecture source not available in repo [mirror16]: http://mirror.yandex.ru/debian/ stretch, use -force-architectures to override
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release...
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release
+ERROR: unable to fetch mirror: architecture source not available in repo [mirror16]: http://cdn-fastly.deb.debian.org/debian/ stretch, use -force-architectures to override
diff --git a/system/t04_mirror/CreateMirror17Test_gold b/system/t04_mirror/CreateMirror17Test_gold
index c192043e..d552ada6 100644
--- a/system/t04_mirror/CreateMirror17Test_gold
+++ b/system/t04_mirror/CreateMirror17Test_gold
@@ -1,4 +1,5 @@
-Downloading http://mirror.yandex.ru/debian/dists/stretch/Release...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release...
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release
-Mirror [mirror17]: http://mirror.yandex.ru/debian/ stretch [src] successfully added.
+Mirror [mirror17]: http://cdn-fastly.deb.debian.org/debian/ stretch [src] successfully added.
You can run 'aptly mirror update mirror17' to download repository contents.
diff --git a/system/t04_mirror/CreateMirror17Test_mirror_show b/system/t04_mirror/CreateMirror17Test_mirror_show
index 627c53b9..cd9eec87 100644
--- a/system/t04_mirror/CreateMirror17Test_mirror_show
+++ b/system/t04_mirror/CreateMirror17Test_mirror_show
@@ -1,5 +1,5 @@
Name: mirror17
-Archive Root URL: http://mirror.yandex.ru/debian/
+Archive Root URL: http://cdn-fastly.deb.debian.org/debian/
Distribution: stretch
Components: main, contrib, non-free
Architectures: i386
@@ -13,10 +13,10 @@ Architectures: amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64el s390x
Changelogs: http://metadata.ftp-master.debian.org/changelogs/@CHANGEPATH@_changelog
Codename: stretch
Components: main contrib non-free
-Date: Sat, 27 Apr 2019 09:29:22 UTC
-Description: Debian 9.9 Released 27 April 2019
+Date: Sat, 14 Aug 2021 07:42:00 UTC
+Description: Debian 9.13 Released 18 July 2020
Label: Debian
Origin: Debian
-Suite: stable
-Version: 9.9
+Suite: oldoldstable
+Version: 9.13
diff --git a/system/t04_mirror/CreateMirror18Test_gold b/system/t04_mirror/CreateMirror18Test_gold
index ed8365b7..7367a3fc 100644
--- a/system/t04_mirror/CreateMirror18Test_gold
+++ b/system/t04_mirror/CreateMirror18Test_gold
@@ -1,6 +1,11 @@
Downloading http://ppa.launchpad.net/gladky-anton/gnuplot/ubuntu/dists/maverick/InRelease...
+Error downloading http://ppa.launchpad.net/gladky-anton/gnuplot/ubuntu/dists/maverick/InRelease: HTTP code 404 while fetching http://ppa.launchpad.net/gladky-anton/gnuplot/ubuntu/dists/maverick/InRelease retrying...
+Retrying 0 http://ppa.launchpad.net/gladky-anton/gnuplot/ubuntu/dists/maverick/InRelease...
+Giving up on http://ppa.launchpad.net/gladky-anton/gnuplot/ubuntu/dists/maverick/InRelease...
Downloading http://ppa.launchpad.net/gladky-anton/gnuplot/ubuntu/dists/maverick/Release...
+Success downloading http://ppa.launchpad.net/gladky-anton/gnuplot/ubuntu/dists/maverick/Release
Downloading http://ppa.launchpad.net/gladky-anton/gnuplot/ubuntu/dists/maverick/Release.gpg...
+Success downloading http://ppa.launchpad.net/gladky-anton/gnuplot/ubuntu/dists/maverick/Release.gpg
gpgv: RSA key ID 3B1F56C0
gpgv: Good signature from "Launchpad sim"
diff --git a/system/t04_mirror/CreateMirror19Test_gold b/system/t04_mirror/CreateMirror19Test_gold
index 6e0454fe..97eae908 100644
--- a/system/t04_mirror/CreateMirror19Test_gold
+++ b/system/t04_mirror/CreateMirror19Test_gold
@@ -1,6 +1,9 @@
Downloading http://security.debian.org/dists/stretch/updates/InRelease...
-gpgv: RSA key ID C857C906
-gpgv: Good signature from "Debian Security Archive Automatic Signing Key (8/jessie) "
+Success downloading http://security.debian.org/dists/stretch/updates/InRelease
+gpgv: RSA key ID 331F7F50
+gpgv: Good signature from "Debian Security Archive Automatic Signing Key (9/stretch) "
+gpgv: RSA key ID E562B32A
+gpgv: Good signature from "Debian Security Archive Automatic Signing Key (10/buster) "
Mirror [mirror19]: http://security.debian.org/ stretch/updates [src] successfully added.
You can run 'aptly mirror update mirror19' to download repository contents.
diff --git a/system/t04_mirror/CreateMirror19Test_mirror_show b/system/t04_mirror/CreateMirror19Test_mirror_show
index 6498b71b..4a1f27e9 100644
--- a/system/t04_mirror/CreateMirror19Test_mirror_show
+++ b/system/t04_mirror/CreateMirror19Test_mirror_show
@@ -9,12 +9,12 @@ Last update: never
Information from release file:
Acquire-By-Hash: yes
-Architectures: amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64el s390x
+Architectures: amd64 arm64 armel armhf i386
Codename: stretch
Components: updates/main updates/contrib updates/non-free
Description: Debian 9 Security Updates
Label: Debian-Security
Origin: Debian
-Suite: stable
+Suite: oldoldstable
Version: 9
diff --git a/system/t04_mirror/CreateMirror1Test_gold b/system/t04_mirror/CreateMirror1Test_gold
index a512163b..a14855d8 100644
--- a/system/t04_mirror/CreateMirror1Test_gold
+++ b/system/t04_mirror/CreateMirror1Test_gold
@@ -1,4 +1,5 @@
-Downloading http://mirror.yandex.ru/debian/dists/stretch/Release...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release...
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release
-Mirror [mirror1]: http://mirror.yandex.ru/debian/ stretch successfully added.
+Mirror [mirror1]: http://cdn-fastly.deb.debian.org/debian/ stretch successfully added.
You can run 'aptly mirror update mirror1' to download repository contents.
diff --git a/system/t04_mirror/CreateMirror1Test_mirror_show b/system/t04_mirror/CreateMirror1Test_mirror_show
index 5b382194..44e12aec 100644
--- a/system/t04_mirror/CreateMirror1Test_mirror_show
+++ b/system/t04_mirror/CreateMirror1Test_mirror_show
@@ -1,5 +1,5 @@
Name: mirror1
-Archive Root URL: http://mirror.yandex.ru/debian/
+Archive Root URL: http://cdn-fastly.deb.debian.org/debian/
Distribution: stretch
Components: main, contrib, non-free
Architectures: amd64, arm64, armel, armhf, i386, mips, mips64el, mipsel, ppc64el, s390x
@@ -13,10 +13,10 @@ Architectures: amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64el s390x
Changelogs: http://metadata.ftp-master.debian.org/changelogs/@CHANGEPATH@_changelog
Codename: stretch
Components: main contrib non-free
-Date: Sat, 27 Apr 2019 09:29:22 UTC
-Description: Debian 9.9 Released 27 April 2019
+Date: Sat, 14 Aug 2021 07:42:00 UTC
+Description: Debian 9.13 Released 18 July 2020
Label: Debian
Origin: Debian
-Suite: stable
-Version: 9.9
+Suite: oldoldstable
+Version: 9.13
diff --git a/system/t04_mirror/CreateMirror20Test_gold b/system/t04_mirror/CreateMirror20Test_gold
index 8db3c3de..0099d586 100644
--- a/system/t04_mirror/CreateMirror20Test_gold
+++ b/system/t04_mirror/CreateMirror20Test_gold
@@ -1,3 +1,9 @@
Downloading http://security.debian.org/dists/stretch/updates/InRelease...
+Error downloading http://security.debian.org/dists/stretch/updates/InRelease: http://security.debian.org/dists/stretch/updates/InRelease: Get "http://security.debian.org/dists/stretch/updates/InRelease": http: error connecting to proxy http://127.0.0.1:3137: dial tcp 127.0.0.1:3137: connection refused retrying...
+Retrying 0 http://security.debian.org/dists/stretch/updates/InRelease...
+Giving up on http://security.debian.org/dists/stretch/updates/InRelease...
Downloading http://security.debian.org/dists/stretch/updates/Release...
+Error downloading http://security.debian.org/dists/stretch/updates/Release: http://security.debian.org/dists/stretch/updates/Release: Get "http://security.debian.org/dists/stretch/updates/Release": http: error connecting to proxy http://127.0.0.1:3137: dial tcp 127.0.0.1:3137: connection refused retrying...
+Retrying 0 http://security.debian.org/dists/stretch/updates/Release...
+Giving up on http://security.debian.org/dists/stretch/updates/Release...
ERROR: unable to fetch mirror: http://security.debian.org/dists/stretch/updates/Release: Get http://security.debian.org/dists/stretch/updates/Release: http: error connecting to proxy http://127.0.0.1:3137: dial tcp 127.0.0.1:3137: connection refused
diff --git a/system/t04_mirror/CreateMirror21Test_gold b/system/t04_mirror/CreateMirror21Test_gold
index 1b6949ec..de4be269 100644
--- a/system/t04_mirror/CreateMirror21Test_gold
+++ b/system/t04_mirror/CreateMirror21Test_gold
@@ -1,10 +1,13 @@
Downloading http://pkg.jenkins-ci.org/debian-stable/binary/InRelease...
+Error downloading http://pkg.jenkins-ci.org/debian-stable/binary/InRelease: HTTP code 404 while fetching http://pkg.jenkins-ci.org/debian-stable/binary/InRelease retrying...
+Retrying 0 http://pkg.jenkins-ci.org/debian-stable/binary/InRelease...
+Giving up on http://pkg.jenkins-ci.org/debian-stable/binary/InRelease...
Downloading http://pkg.jenkins-ci.org/debian-stable/binary/Release...
+Success downloading http://pkg.jenkins-ci.org/debian-stable/binary/Release
Downloading http://pkg.jenkins-ci.org/debian-stable/binary/Release.gpg...
-gpgv: DSA key ID D50582E6
-gpgv: Good signature from "Kohsuke Kawaguchi "
-gpgv: aka "Kohsuke Kawaguchi "
-gpgv: aka "[invalid image]"
+Success downloading http://pkg.jenkins-ci.org/debian-stable/binary/Release.gpg
+gpgv: RSA key ID 45F2C3D5
+gpgv: Good signature from "Jenkins Project "
Mirror [mirror21]: http://pkg.jenkins-ci.org/debian-stable/ ./binary/ successfully added.
You can run 'aptly mirror update mirror21' to download repository contents.
diff --git a/system/t04_mirror/CreateMirror22Test_gold b/system/t04_mirror/CreateMirror22Test_gold
index 1bbe150d..dc74de6a 100644
--- a/system/t04_mirror/CreateMirror22Test_gold
+++ b/system/t04_mirror/CreateMirror22Test_gold
@@ -1,4 +1,5 @@
Downloading http://security.debian.org/dists/stretch/updates/Release...
+Success downloading http://security.debian.org/dists/stretch/updates/Release
Mirror [mirror22]: http://security.debian.org/ stretch/updates successfully added.
You can run 'aptly mirror update mirror22' to download repository contents.
diff --git a/system/t04_mirror/CreateMirror22Test_mirror_show b/system/t04_mirror/CreateMirror22Test_mirror_show
index f202c915..54e7268b 100644
--- a/system/t04_mirror/CreateMirror22Test_mirror_show
+++ b/system/t04_mirror/CreateMirror22Test_mirror_show
@@ -2,7 +2,7 @@ Name: mirror22
Archive Root URL: http://security.debian.org/
Distribution: stretch/updates
Components: main
-Architectures: amd64, arm64, armel, armhf, i386, mips, mips64el, mipsel, ppc64el, s390x
+Architectures: amd64, arm64, armel, armhf, i386
Download Sources: no
Download .udebs: no
Filter: nginx | Priority (required)
@@ -11,12 +11,12 @@ Last update: never
Information from release file:
Acquire-By-Hash: yes
-Architectures: amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64el s390x
+Architectures: amd64 arm64 armel armhf i386
Codename: stretch
Components: updates/main updates/contrib updates/non-free
Description: Debian 9 Security Updates
Label: Debian-Security
Origin: Debian
-Suite: stable
+Suite: oldoldstable
Version: 9
diff --git a/system/t04_mirror/CreateMirror24Test_gold b/system/t04_mirror/CreateMirror24Test_gold
index b4e99b86..4ca1af86 100644
--- a/system/t04_mirror/CreateMirror24Test_gold
+++ b/system/t04_mirror/CreateMirror24Test_gold
@@ -1,6 +1,9 @@
Downloading http://security.debian.org/dists/stretch/updates/InRelease...
-gpgv: RSA key ID C857C906
-gpgv: Good signature from "Debian Security Archive Automatic Signing Key (8/jessie) "
+Success downloading http://security.debian.org/dists/stretch/updates/InRelease
+gpgv: RSA key ID 331F7F50
+gpgv: Good signature from "Debian Security Archive Automatic Signing Key (9/stretch) "
+gpgv: RSA key ID E562B32A
+gpgv: Good signature from "Debian Security Archive Automatic Signing Key (10/buster) "
Mirror [mirror24]: http://security.debian.org/ stretch/updates successfully added.
You can run 'aptly mirror update mirror24' to download repository contents.
diff --git a/system/t04_mirror/CreateMirror25Test_gold b/system/t04_mirror/CreateMirror25Test_gold
index 4909b5e4..511269d4 100644
--- a/system/t04_mirror/CreateMirror25Test_gold
+++ b/system/t04_mirror/CreateMirror25Test_gold
@@ -1,4 +1,5 @@
-Downloading http://mirror.yandex.ru/debian/dists/stretch/Release...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release...
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release
-Mirror [mirror25]: http://mirror.yandex.ru/debian/ stretch [udeb] successfully added.
+Mirror [mirror25]: http://cdn-fastly.deb.debian.org/debian/ stretch [udeb] successfully added.
You can run 'aptly mirror update mirror25' to download repository contents.
diff --git a/system/t04_mirror/CreateMirror25Test_mirror_show b/system/t04_mirror/CreateMirror25Test_mirror_show
index 5b9c6e3b..bf0723ff 100644
--- a/system/t04_mirror/CreateMirror25Test_mirror_show
+++ b/system/t04_mirror/CreateMirror25Test_mirror_show
@@ -1,5 +1,5 @@
Name: mirror25
-Archive Root URL: http://mirror.yandex.ru/debian/
+Archive Root URL: http://cdn-fastly.deb.debian.org/debian/
Distribution: stretch
Components: main, contrib, non-free
Architectures: i386
@@ -13,10 +13,10 @@ Architectures: amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64el s390x
Changelogs: http://metadata.ftp-master.debian.org/changelogs/@CHANGEPATH@_changelog
Codename: stretch
Components: main contrib non-free
-Date: Sat, 27 Apr 2019 09:29:22 UTC
-Description: Debian 9.9 Released 27 April 2019
+Date: Sat, 14 Aug 2021 07:42:00 UTC
+Description: Debian 9.13 Released 18 July 2020
Label: Debian
Origin: Debian
-Suite: stable
-Version: 9.9
+Suite: oldoldstable
+Version: 9.13
diff --git a/system/t04_mirror/CreateMirror27Test_gold b/system/t04_mirror/CreateMirror27Test_gold
index 2fe4f9ac..7f76508f 100644
--- a/system/t04_mirror/CreateMirror27Test_gold
+++ b/system/t04_mirror/CreateMirror27Test_gold
@@ -1,4 +1,6 @@
-Downloading http://linux.dell.com/repo/community/ubuntu/dists/wheezy/Release...
+Downloading https://mirror.chpc.utah.edu/pub/linux.dell.com/repo/community/ubuntu/dists/wheezy/Release...
+Following redirect to https://linux.dell.com/repo/community/ubuntu/dists/wheezy/Release...
+Success downloading https://mirror.chpc.utah.edu/pub/linux.dell.com/repo/community/ubuntu/dists/wheezy/Release
-Mirror [mirror27]: http://linux.dell.com/repo/community/ubuntu/ wheezy successfully added.
+Mirror [mirror27]: https://mirror.chpc.utah.edu/pub/linux.dell.com/repo/community/ubuntu/ wheezy successfully added.
You can run 'aptly mirror update mirror27' to download repository contents.
diff --git a/system/t04_mirror/CreateMirror27Test_mirror_show b/system/t04_mirror/CreateMirror27Test_mirror_show
index 36821d5b..fd272187 100644
--- a/system/t04_mirror/CreateMirror27Test_mirror_show
+++ b/system/t04_mirror/CreateMirror27Test_mirror_show
@@ -1,5 +1,5 @@
Name: mirror27
-Archive Root URL: http://linux.dell.com/repo/community/ubuntu/
+Archive Root URL: https://mirror.chpc.utah.edu/pub/linux.dell.com/repo/community/ubuntu/
Distribution: wheezy
Components: openmanage/740
Architectures: amd64, i386
diff --git a/system/t04_mirror/CreateMirror28Test_gold b/system/t04_mirror/CreateMirror28Test_gold
deleted file mode 100644
index 34c7909d..00000000
--- a/system/t04_mirror/CreateMirror28Test_gold
+++ /dev/null
@@ -1,4 +0,0 @@
-Downloading http://downloads-distro.mongodb.org/repo/ubuntu-upstart/dists/dist/Release...
-
-Mirror [mirror28]: http://downloads-distro.mongodb.org/repo/ubuntu-upstart/ dist successfully added.
-You can run 'aptly mirror update mirror28' to download repository contents.
diff --git a/system/t04_mirror/CreateMirror28Test_mirror_show b/system/t04_mirror/CreateMirror28Test_mirror_show
deleted file mode 100644
index 09e9cfed..00000000
--- a/system/t04_mirror/CreateMirror28Test_mirror_show
+++ /dev/null
@@ -1,19 +0,0 @@
-Name: mirror28
-Archive Root URL: http://downloads-distro.mongodb.org/repo/ubuntu-upstart/
-Distribution: dist
-Components: 10gen
-Architectures: amd64, i386
-Download Sources: no
-Download .udebs: no
-Last update: never
-
-Information from release file:
-Architectures: i386 amd64
-Codename: dist
-Components: 10gen
-Description: mongodb packages
-
-Label: mongodb
-Origin: mongodb
-Suite: mongodb
-Version: dist
diff --git a/system/t04_mirror/CreateMirror29Test_gold b/system/t04_mirror/CreateMirror29Test_gold
index 43146c3a..be15443b 100644
--- a/system/t04_mirror/CreateMirror29Test_gold
+++ b/system/t04_mirror/CreateMirror29Test_gold
@@ -1,6 +1,9 @@
-Downloading http://mirror.yandex.ru/debian/dists/stretch-backports/InRelease...
-openpgp: RSA key ID 7638D0442B90D010
-openpgp: Good signature from "Debian Archive Automatic Signing Key (8/jessie) "
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch-backports/InRelease...
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch-backports/InRelease
+openpgp: RSA key ID 648ACFD622F3D138
+openpgp: Good signature from "Debian Archive Automatic Signing Key (10/buster) "
+openpgp: RSA key ID 0E98404D386FA1D9
+openpgp: Good signature from "Debian Archive Automatic Signing Key (11/bullseye) "
-Mirror [mirror9]: http://mirror.yandex.ru/debian/ stretch-backports successfully added.
+Mirror [mirror9]: http://cdn-fastly.deb.debian.org/debian/ stretch-backports successfully added.
You can run 'aptly mirror update mirror9' to download repository contents.
diff --git a/system/t04_mirror/CreateMirror2Test_gold b/system/t04_mirror/CreateMirror2Test_gold
index c2ed4446..2f74f102 100644
--- a/system/t04_mirror/CreateMirror2Test_gold
+++ b/system/t04_mirror/CreateMirror2Test_gold
@@ -1,4 +1,5 @@
-Downloading http://mirror.yandex.ru/debian/dists/stretch/Release...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release...
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release
-Mirror [mirror2]: http://mirror.yandex.ru/debian/ stretch successfully added.
+Mirror [mirror2]: http://cdn-fastly.deb.debian.org/debian/ stretch successfully added.
You can run 'aptly mirror update mirror2' to download repository contents.
diff --git a/system/t04_mirror/CreateMirror2Test_mirror_show b/system/t04_mirror/CreateMirror2Test_mirror_show
index bf954ffa..8e898fc4 100644
--- a/system/t04_mirror/CreateMirror2Test_mirror_show
+++ b/system/t04_mirror/CreateMirror2Test_mirror_show
@@ -1,5 +1,5 @@
Name: mirror2
-Archive Root URL: http://mirror.yandex.ru/debian/
+Archive Root URL: http://cdn-fastly.deb.debian.org/debian/
Distribution: stretch
Components: main
Architectures: amd64, arm64, armel, armhf, i386, mips, mips64el, mipsel, ppc64el, s390x
@@ -13,10 +13,10 @@ Architectures: amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64el s390x
Changelogs: http://metadata.ftp-master.debian.org/changelogs/@CHANGEPATH@_changelog
Codename: stretch
Components: main contrib non-free
-Date: Sat, 27 Apr 2019 09:29:22 UTC
-Description: Debian 9.9 Released 27 April 2019
+Date: Sat, 14 Aug 2021 07:42:00 UTC
+Description: Debian 9.13 Released 18 July 2020
Label: Debian
Origin: Debian
-Suite: stable
-Version: 9.9
+Suite: oldoldstable
+Version: 9.13
diff --git a/system/t04_mirror/CreateMirror30Test_gold b/system/t04_mirror/CreateMirror30Test_gold
index 94ee222b..7da5ef71 100644
--- a/system/t04_mirror/CreateMirror30Test_gold
+++ b/system/t04_mirror/CreateMirror30Test_gold
@@ -1,11 +1,20 @@
opengpg: failure opening keyring '${HOME}/.gnupg/aptlytest.gpg': open ${HOME}/.gnupg/aptlytest.gpg: no such file or directory
Looks like your keyring with trusted keys is empty. You might consider importing some keys.
-Downloading http://mirror.yandex.ru/debian-backports/dists/squeeze-backports/InRelease...
-openpgp: RSA key ID 8B48AD6246925553
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/InRelease...
+Error downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/InRelease: HTTP code 404 while fetching http://cdn-fastly.deb.debian.org/debian/dists/stretch/InRelease retrying...
+Retrying 0 http://cdn-fastly.deb.debian.org/debian/dists/stretch/InRelease...
+Giving up on http://cdn-fastly.deb.debian.org/debian/dists/stretch/InRelease...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release...
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release.gpg...
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release.gpg
+openpgp: RSA key ID 04EE7237B7D453EC
openpgp: Can't check signature: public key not found
-Downloading http://mirror.yandex.ru/debian-backports/dists/squeeze-backports/Release...
-Downloading http://mirror.yandex.ru/debian-backports/dists/squeeze-backports/Release.gpg...
-openpgp: RSA key ID 8B48AD6246925553
+openpgp: RSA key ID 648ACFD622F3D138
+openpgp: Can't check signature: public key not found
+openpgp: RSA key ID 0E98404D386FA1D9
+openpgp: Can't check signature: public key not found
+openpgp: RSA key ID EF0F382A1A7B6500
openpgp: Can't check signature: public key not found
ERROR: unable to fetch mirror: failed to verify detached signature: openpgp: signature made by unknown entity
diff --git a/system/t04_mirror/CreateMirror31Test_gold b/system/t04_mirror/CreateMirror31Test_gold
index 9beabb9f..8dc0bb89 100644
--- a/system/t04_mirror/CreateMirror31Test_gold
+++ b/system/t04_mirror/CreateMirror31Test_gold
@@ -1,10 +1,19 @@
-Downloading http://mirror.yandex.ru/debian/dists/stretch/InRelease...
-Downloading http://mirror.yandex.ru/debian/dists/stretch/Release...
-Downloading http://mirror.yandex.ru/debian/dists/stretch/Release.gpg...
-openpgp: RSA key ID 8B48AD6246925553
-openpgp: Good signature from "Debian Archive Automatic Signing Key (7.0/wheezy) "
-openpgp: RSA key ID 7638D0442B90D010
-openpgp: Good signature from "Debian Archive Automatic Signing Key (8/jessie) "
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/InRelease...
+Error downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/InRelease: HTTP code 404 while fetching http://cdn-fastly.deb.debian.org/debian/dists/stretch/InRelease retrying...
+Retrying 0 http://cdn-fastly.deb.debian.org/debian/dists/stretch/InRelease...
+Giving up on http://cdn-fastly.deb.debian.org/debian/dists/stretch/InRelease...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release...
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release.gpg...
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release.gpg
+openpgp: RSA key ID 04EE7237B7D453EC
+openpgp: Good signature from "Debian Archive Automatic Signing Key (9/stretch) "
+openpgp: RSA key ID 648ACFD622F3D138
+openpgp: Good signature from "Debian Archive Automatic Signing Key (10/buster) "
+openpgp: RSA key ID 0E98404D386FA1D9
+openpgp: Good signature from "Debian Archive Automatic Signing Key (11/bullseye) "
+openpgp: RSA key ID EF0F382A1A7B6500
+openpgp: Good signature from "Debian Stable Release Key (9/stretch) "
-Mirror [mirror11]: http://mirror.yandex.ru/debian/ stretch successfully added.
+Mirror [mirror11]: http://cdn-fastly.deb.debian.org/debian/ stretch successfully added.
You can run 'aptly mirror update mirror11' to download repository contents.
diff --git a/system/t04_mirror/CreateMirror32Test_gold b/system/t04_mirror/CreateMirror32Test_gold
index feab0146..95ca9062 100644
--- a/system/t04_mirror/CreateMirror32Test_gold
+++ b/system/t04_mirror/CreateMirror32Test_gold
@@ -1,9 +1,16 @@
-Downloading http://mirror.yandex.ru/debian/dists/stretch/InRelease...
-Downloading http://mirror.yandex.ru/debian/dists/stretch/Release...
-Downloading http://mirror.yandex.ru/debian/dists/stretch/Release.gpg...
-gpgv: Good signature from "Debian Archive Automatic Signing Key (7.0/wheezy) "
-gpgv: Good signature from "Debian Archive Automatic Signing Key (8/jessie) "
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/InRelease...
+Error downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/InRelease: HTTP code 404 while fetching http://cdn-fastly.deb.debian.org/debian/dists/stretch/InRelease retrying...
+Retrying 0 http://cdn-fastly.deb.debian.org/debian/dists/stretch/InRelease...
+Giving up on http://cdn-fastly.deb.debian.org/debian/dists/stretch/InRelease...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release...
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release.gpg...
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release.gpg
+gpgv: Good signature from "Debian Archive Automatic Signing Key (9/stretch) "
+gpgv: Good signature from "Debian Archive Automatic Signing Key (10/buster) "
+gpgv: Good signature from "Debian Archive Automatic Signing Key (11/bullseye) "
+gpgv: issuer "debian-release@lists.debian.org"
gpgv: Good signature from "Debian Stable Release Key (9/stretch) "
-Mirror [mirror32]: http://mirror.yandex.ru/debian/ stretch successfully added.
+Mirror [mirror32]: http://cdn-fastly.deb.debian.org/debian/ stretch successfully added.
You can run 'aptly mirror update mirror32' to download repository contents.
diff --git a/system/t04_mirror/CreateMirror32Test_mirror_show b/system/t04_mirror/CreateMirror32Test_mirror_show
index bd028d8f..63fb46fd 100644
--- a/system/t04_mirror/CreateMirror32Test_mirror_show
+++ b/system/t04_mirror/CreateMirror32Test_mirror_show
@@ -1,5 +1,5 @@
Name: mirror32
-Archive Root URL: http://mirror.yandex.ru/debian/
+Archive Root URL: http://cdn-fastly.deb.debian.org/debian/
Distribution: stretch
Components: main, contrib, non-free
Architectures: amd64, arm64, armel, armhf, i386, mips, mips64el, mipsel, ppc64el, s390x
@@ -13,10 +13,10 @@ Architectures: amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64el s390x
Changelogs: http://metadata.ftp-master.debian.org/changelogs/@CHANGEPATH@_changelog
Codename: stretch
Components: main contrib non-free
-Date: Sat, 27 Apr 2019 09:29:22 UTC
-Description: Debian 9.9 Released 27 April 2019
+Date: Sat, 14 Aug 2021 07:42:00 UTC
+Description: Debian 9.13 Released 18 July 2020
Label: Debian
Origin: Debian
-Suite: stable
-Version: 9.9
+Suite: oldoldstable
+Version: 9.13
diff --git a/system/t04_mirror/CreateMirror3Test_gold b/system/t04_mirror/CreateMirror3Test_gold
index 68d303e1..5fabc64f 100644
--- a/system/t04_mirror/CreateMirror3Test_gold
+++ b/system/t04_mirror/CreateMirror3Test_gold
@@ -1,4 +1,5 @@
-Downloading http://mirror.yandex.ru/debian/dists/stretch/Release...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release...
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release
-Mirror [mirror3]: http://mirror.yandex.ru/debian/ stretch successfully added.
+Mirror [mirror3]: http://cdn-fastly.deb.debian.org/debian/ stretch successfully added.
You can run 'aptly mirror update mirror3' to download repository contents.
diff --git a/system/t04_mirror/CreateMirror3Test_mirror_show b/system/t04_mirror/CreateMirror3Test_mirror_show
index c31328dd..520c6ea3 100644
--- a/system/t04_mirror/CreateMirror3Test_mirror_show
+++ b/system/t04_mirror/CreateMirror3Test_mirror_show
@@ -1,5 +1,5 @@
Name: mirror3
-Archive Root URL: http://mirror.yandex.ru/debian/
+Archive Root URL: http://cdn-fastly.deb.debian.org/debian/
Distribution: stretch
Components: main, contrib
Architectures: i386, amd64
@@ -13,10 +13,10 @@ Architectures: amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64el s390x
Changelogs: http://metadata.ftp-master.debian.org/changelogs/@CHANGEPATH@_changelog
Codename: stretch
Components: main contrib non-free
-Date: Sat, 27 Apr 2019 09:29:22 UTC
-Description: Debian 9.9 Released 27 April 2019
+Date: Sat, 14 Aug 2021 07:42:00 UTC
+Description: Debian 9.13 Released 18 July 2020
Label: Debian
Origin: Debian
-Suite: stable
-Version: 9.9
+Suite: oldoldstable
+Version: 9.13
diff --git a/system/t04_mirror/CreateMirror4Test_gold b/system/t04_mirror/CreateMirror4Test_gold
index fb504f5f..0824a5ea 100644
--- a/system/t04_mirror/CreateMirror4Test_gold
+++ b/system/t04_mirror/CreateMirror4Test_gold
@@ -1,2 +1,3 @@
-Downloading http://mirror.yandex.ru/debian/dists/stretch/Release...
-ERROR: unable to fetch mirror: component life not available in repo [mirror4]: http://mirror.yandex.ru/debian/ stretch, use -force-components to override
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release...
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release
+ERROR: unable to fetch mirror: component life not available in repo [mirror4]: http://cdn-fastly.deb.debian.org/debian/ stretch, use -force-components to override
diff --git a/system/t04_mirror/CreateMirror5Test_gold b/system/t04_mirror/CreateMirror5Test_gold
index 8cf78c21..3bbe6335 100644
--- a/system/t04_mirror/CreateMirror5Test_gold
+++ b/system/t04_mirror/CreateMirror5Test_gold
@@ -1,2 +1,3 @@
-Downloading http://mirror.yandex.ru/debian/dists/stretch/Release...
-ERROR: unable to fetch mirror: architecture nano68 not available in repo [mirror5]: http://mirror.yandex.ru/debian/ stretch, use -force-architectures to override
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release...
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release
+ERROR: unable to fetch mirror: architecture nano68 not available in repo [mirror5]: http://cdn-fastly.deb.debian.org/debian/ stretch, use -force-architectures to override
diff --git a/system/t04_mirror/CreateMirror6Test_gold b/system/t04_mirror/CreateMirror6Test_gold
index 166dcc13..748dd862 100644
--- a/system/t04_mirror/CreateMirror6Test_gold
+++ b/system/t04_mirror/CreateMirror6Test_gold
@@ -1,3 +1,9 @@
-Downloading http://mirror.yandex.ru/debian/dists/suslik/InRelease...
-Downloading http://mirror.yandex.ru/debian/dists/suslik/Release...
-ERROR: unable to fetch mirror: HTTP code 404 while fetching http://mirror.yandex.ru/debian/dists/suslik/Release
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/suslik/InRelease...
+Error downloading http://cdn-fastly.deb.debian.org/debian/dists/suslik/InRelease: HTTP code 404 while fetching http://cdn-fastly.deb.debian.org/debian/dists/suslik/InRelease retrying...
+Retrying 0 http://cdn-fastly.deb.debian.org/debian/dists/suslik/InRelease...
+Giving up on http://cdn-fastly.deb.debian.org/debian/dists/suslik/InRelease...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/suslik/Release...
+Error downloading http://cdn-fastly.deb.debian.org/debian/dists/suslik/Release: HTTP code 404 while fetching http://cdn-fastly.deb.debian.org/debian/dists/suslik/Release retrying...
+Retrying 0 http://cdn-fastly.deb.debian.org/debian/dists/suslik/Release...
+Giving up on http://cdn-fastly.deb.debian.org/debian/dists/suslik/Release...
+ERROR: unable to fetch mirror: HTTP code 404 while fetching http://cdn-fastly.deb.debian.org/debian/dists/suslik/Release
diff --git a/system/t04_mirror/CreateMirror7Test_gold b/system/t04_mirror/CreateMirror7Test_gold
index b92d5dc0..e527f84e 100644
--- a/system/t04_mirror/CreateMirror7Test_gold
+++ b/system/t04_mirror/CreateMirror7Test_gold
@@ -1,4 +1,5 @@
-Downloading http://mirror.yandex.ru/debian/dists/stretch/Release...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release...
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release
-Mirror [mirror7]: http://mirror.yandex.ru/debian/ stretch successfully added.
+Mirror [mirror7]: http://cdn-fastly.deb.debian.org/debian/ stretch successfully added.
You can run 'aptly mirror update mirror7' to download repository contents.
diff --git a/system/t04_mirror/CreateMirror7Test_mirror_show b/system/t04_mirror/CreateMirror7Test_mirror_show
index 74d2c7fa..4465c015 100644
--- a/system/t04_mirror/CreateMirror7Test_mirror_show
+++ b/system/t04_mirror/CreateMirror7Test_mirror_show
@@ -1,5 +1,5 @@
Name: mirror7
-Archive Root URL: http://mirror.yandex.ru/debian/
+Archive Root URL: http://cdn-fastly.deb.debian.org/debian/
Distribution: stretch
Components: main, contrib
Architectures: i386, amd64
@@ -13,10 +13,10 @@ Architectures: amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64el s390x
Changelogs: http://metadata.ftp-master.debian.org/changelogs/@CHANGEPATH@_changelog
Codename: stretch
Components: main contrib non-free
-Date: Sat, 27 Apr 2019 09:29:22 UTC
-Description: Debian 9.9 Released 27 April 2019
+Date: Sat, 14 Aug 2021 07:42:00 UTC
+Description: Debian 9.13 Released 18 July 2020
Label: Debian
Origin: Debian
-Suite: stable
-Version: 9.9
+Suite: oldoldstable
+Version: 9.13
diff --git a/system/t04_mirror/CreateMirror8Test_gold b/system/t04_mirror/CreateMirror8Test_gold
index 4232e0f8..69138eca 100644
--- a/system/t04_mirror/CreateMirror8Test_gold
+++ b/system/t04_mirror/CreateMirror8Test_gold
@@ -1,2 +1,3 @@
-Downloading http://mirror.yandex.ru/debian/dists/stretch/Release...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release...
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release
ERROR: unable to add mirror: mirror with name mirror8 already exists
diff --git a/system/t04_mirror/CreateMirror9Test_gold b/system/t04_mirror/CreateMirror9Test_gold
index b6e4569d..d3be9e6a 100644
--- a/system/t04_mirror/CreateMirror9Test_gold
+++ b/system/t04_mirror/CreateMirror9Test_gold
@@ -1,6 +1,9 @@
-Downloading http://mirror.yandex.ru/debian/dists/stretch-backports/InRelease...
-gpgv: RSA key ID 2B90D010
-gpgv: Good signature from "Debian Archive Automatic Signing Key (8/jessie) "
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch-backports/InRelease...
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch-backports/InRelease
+gpgv: RSA key ID 22F3D138
+gpgv: Good signature from "Debian Archive Automatic Signing Key (10/buster) "
+gpgv: RSA key ID 386FA1D9
+gpgv: Good signature from "Debian Archive Automatic Signing Key (11/bullseye) "
-Mirror [mirror9]: http://mirror.yandex.ru/debian/ stretch-backports successfully added.
+Mirror [mirror9]: http://cdn-fastly.deb.debian.org/debian/ stretch-backports successfully added.
You can run 'aptly mirror update mirror9' to download repository contents.
diff --git a/system/t04_mirror/CreateMirror9Test_mirror_show b/system/t04_mirror/CreateMirror9Test_mirror_show
index ea2d520c..37039266 100644
--- a/system/t04_mirror/CreateMirror9Test_mirror_show
+++ b/system/t04_mirror/CreateMirror9Test_mirror_show
@@ -1,5 +1,5 @@
Name: mirror9
-Archive Root URL: http://mirror.yandex.ru/debian/
+Archive Root URL: http://cdn-fastly.deb.debian.org/debian/
Distribution: stretch-backports
Components: main, contrib, non-free
Architectures: amd64, arm64, armel, armhf, i386, mips, mips64el, mipsel, ppc64el, s390x
diff --git a/system/t04_mirror/EditMirror10Test_gold b/system/t04_mirror/EditMirror10Test_gold
index 32091131..563cdde8 100644
--- a/system/t04_mirror/EditMirror10Test_gold
+++ b/system/t04_mirror/EditMirror10Test_gold
@@ -1,2 +1,3 @@
Downloading ftp://ftp.ch.debian.org/debian/dists/stretch/Release...
+Success downloading ftp://ftp.ch.debian.org/debian/dists/stretch/Release
Mirror [mirror10]: ftp://ftp.ch.debian.org/debian/ stretch successfully updated.
diff --git a/system/t04_mirror/EditMirror5Test_mirror_show b/system/t04_mirror/EditMirror5Test_mirror_show
index 7daad990..685e8fff 100644
--- a/system/t04_mirror/EditMirror5Test_mirror_show
+++ b/system/t04_mirror/EditMirror5Test_mirror_show
@@ -2,19 +2,19 @@ Name: mirror5
Archive Root URL: http://security.debian.org/
Distribution: stretch/updates
Components: main
-Architectures: amd64, arm64, armel, armhf, i386, mips, mips64el, mipsel, ppc64el, s390x
+Architectures: amd64, arm64, armel, armhf, i386
Download Sources: no
Download .udebs: no
Last update: never
Information from release file:
Acquire-By-Hash: yes
-Architectures: amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64el s390x
+Architectures: amd64 arm64 armel armhf i386
Codename: stretch
Components: updates/main updates/contrib updates/non-free
Description: Debian 9 Security Updates
Label: Debian-Security
Origin: Debian
-Suite: stable
+Suite: oldoldstable
Version: 9
diff --git a/system/t04_mirror/EditMirror6Test_gold b/system/t04_mirror/EditMirror6Test_gold
index 4bd26ea3..bc37c97b 100644
--- a/system/t04_mirror/EditMirror6Test_gold
+++ b/system/t04_mirror/EditMirror6Test_gold
@@ -1,2 +1,3 @@
-Downloading http://mirror.yandex.ru/debian/dists/stretch/Release...
-Mirror [mirror6]: http://mirror.yandex.ru/debian/ stretch successfully updated.
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release...
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release
+Mirror [mirror6]: http://cdn-fastly.deb.debian.org/debian/ stretch successfully updated.
diff --git a/system/t04_mirror/EditMirror6Test_mirror_show b/system/t04_mirror/EditMirror6Test_mirror_show
index a6f9d533..2ff6c423 100644
--- a/system/t04_mirror/EditMirror6Test_mirror_show
+++ b/system/t04_mirror/EditMirror6Test_mirror_show
@@ -1,5 +1,5 @@
Name: mirror6
-Archive Root URL: http://mirror.yandex.ru/debian/
+Archive Root URL: http://cdn-fastly.deb.debian.org/debian/
Distribution: stretch
Components: main
Architectures: amd64, i386
@@ -12,10 +12,10 @@ Architectures: amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64el s390x
Changelogs: http://metadata.ftp-master.debian.org/changelogs/@CHANGEPATH@_changelog
Codename: stretch
Components: main contrib non-free
-Date: Sat, 27 Apr 2019 09:29:22 UTC
-Description: Debian 9.9 Released 27 April 2019
+Date: Sat, 14 Aug 2021 07:42:00 UTC
+Description: Debian 9.13 Released 18 July 2020
Label: Debian
Origin: Debian
-Suite: stable
-Version: 9.9
+Suite: oldoldstable
+Version: 9.13
diff --git a/system/t04_mirror/EditMirror7Test_gold b/system/t04_mirror/EditMirror7Test_gold
index 6d7c88b1..2c57a1b6 100644
--- a/system/t04_mirror/EditMirror7Test_gold
+++ b/system/t04_mirror/EditMirror7Test_gold
@@ -1,2 +1,3 @@
-Downloading http://mirror.yandex.ru/debian/dists/stretch/Release...
-ERROR: unable to edit: architecture x56 not available in repo [stretch]: http://mirror.yandex.ru/debian/ stretch, use -force-architectures to override
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release...
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release
+ERROR: unable to edit: architecture x56 not available in repo [stretch]: http://cdn-fastly.deb.debian.org/debian/ stretch, use -force-architectures to override
diff --git a/system/t04_mirror/ListMirror1Test_gold b/system/t04_mirror/ListMirror1Test_gold
index 6eaa6dd3..f618902f 100644
--- a/system/t04_mirror/ListMirror1Test_gold
+++ b/system/t04_mirror/ListMirror1Test_gold
@@ -1,7 +1,7 @@
List of mirrors:
- * [mirror1]: http://mirror.yandex.ru/debian/ stretch
- * [mirror2]: http://mirror.yandex.ru/debian/ stretch [src]
- * [mirror3]: http://mirror.yandex.ru/debian/ stretch
+ * [mirror1]: http://cdn-fastly.deb.debian.org/debian/ stretch
+ * [mirror2]: http://cdn-fastly.deb.debian.org/debian/ stretch [src]
+ * [mirror3]: http://cdn-fastly.deb.debian.org/debian/ stretch
* [mirror4]: http://download.opensuse.org/repositories/Apache:/MirrorBrain/Debian_9.0/ ./
To get more information about mirror, run `aptly mirror show `.
diff --git a/system/t04_mirror/ListMirror5Test_gold b/system/t04_mirror/ListMirror5Test_gold
new file mode 100644
index 00000000..fe51488c
--- /dev/null
+++ b/system/t04_mirror/ListMirror5Test_gold
@@ -0,0 +1 @@
+[]
diff --git a/system/t04_mirror/ListMirror6Test_gold b/system/t04_mirror/ListMirror6Test_gold
new file mode 100644
index 00000000..cf8b565e
--- /dev/null
+++ b/system/t04_mirror/ListMirror6Test_gold
@@ -0,0 +1,150 @@
+[
+ {
+ "Name": "mirror1",
+ "ArchiveRoot": "http://cdn-fastly.deb.debian.org/debian/",
+ "Distribution": "stretch",
+ "Components": [
+ "main",
+ "contrib",
+ "non-free"
+ ],
+ "Architectures": [
+ "amd64",
+ "arm64",
+ "armel",
+ "armhf",
+ "i386",
+ "mips",
+ "mips64el",
+ "mipsel",
+ "ppc64el",
+ "s390x"
+ ],
+ "Meta": {
+ "Acquire-By-Hash": "yes",
+ "Architectures": "amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64el s390x",
+ "Changelogs": "http://metadata.ftp-master.debian.org/changelogs/@CHANGEPATH@_changelog",
+ "Codename": "stretch",
+ "Components": "main contrib non-free",
+ "Date": "Sat, 14 Aug 2021 07:42:00 UTC",
+ "Description": " Debian 9.13 Released 18 July 2020\n",
+ "Label": "Debian",
+ "Origin": "Debian",
+ "Suite": "oldoldstable",
+ "Version": "9.13"
+ },
+ "LastDownloadDate": "0001-01-01T00:00:00Z",
+ "Filter": "",
+ "Status": 0,
+ "WorkerPID": 0,
+ "FilterWithDeps": false,
+ "SkipComponentCheck": false,
+ "SkipArchitectureCheck": false,
+ "DownloadSources": false,
+ "DownloadUdebs": false,
+ "DownloadInstaller": false
+ },
+ {
+ "Name": "mirror2",
+ "ArchiveRoot": "http://cdn-fastly.deb.debian.org/debian/",
+ "Distribution": "stretch",
+ "Components": [
+ "contrib"
+ ],
+ "Architectures": [
+ "amd64",
+ "arm64",
+ "armel",
+ "armhf",
+ "i386",
+ "mips",
+ "mips64el",
+ "mipsel",
+ "ppc64el",
+ "s390x"
+ ],
+ "Meta": {
+ "Acquire-By-Hash": "yes",
+ "Architectures": "amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64el s390x",
+ "Changelogs": "http://metadata.ftp-master.debian.org/changelogs/@CHANGEPATH@_changelog",
+ "Codename": "stretch",
+ "Components": "main contrib non-free",
+ "Date": "Sat, 14 Aug 2021 07:42:00 UTC",
+ "Description": " Debian 9.13 Released 18 July 2020\n",
+ "Label": "Debian",
+ "Origin": "Debian",
+ "Suite": "oldoldstable",
+ "Version": "9.13"
+ },
+ "LastDownloadDate": "0001-01-01T00:00:00Z",
+ "Filter": "",
+ "Status": 0,
+ "WorkerPID": 0,
+ "FilterWithDeps": false,
+ "SkipComponentCheck": false,
+ "SkipArchitectureCheck": false,
+ "DownloadSources": true,
+ "DownloadUdebs": false,
+ "DownloadInstaller": false
+ },
+ {
+ "Name": "mirror3",
+ "ArchiveRoot": "http://cdn-fastly.deb.debian.org/debian/",
+ "Distribution": "stretch",
+ "Components": [
+ "non-free"
+ ],
+ "Architectures": [
+ "i386"
+ ],
+ "Meta": {
+ "Acquire-By-Hash": "yes",
+ "Architectures": "amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64el s390x",
+ "Changelogs": "http://metadata.ftp-master.debian.org/changelogs/@CHANGEPATH@_changelog",
+ "Codename": "stretch",
+ "Components": "main contrib non-free",
+ "Date": "Sat, 14 Aug 2021 07:42:00 UTC",
+ "Description": " Debian 9.13 Released 18 July 2020\n",
+ "Label": "Debian",
+ "Origin": "Debian",
+ "Suite": "oldoldstable",
+ "Version": "9.13"
+ },
+ "LastDownloadDate": "0001-01-01T00:00:00Z",
+ "Filter": "",
+ "Status": 0,
+ "WorkerPID": 0,
+ "FilterWithDeps": false,
+ "SkipComponentCheck": false,
+ "SkipArchitectureCheck": false,
+ "DownloadSources": false,
+ "DownloadUdebs": false,
+ "DownloadInstaller": false
+ },
+ {
+ "Name": "mirror4",
+ "ArchiveRoot": "http://download.opensuse.org/repositories/Apache:/MirrorBrain/Debian_9.0/",
+ "Distribution": "./",
+ "Components": null,
+ "Architectures": null,
+ "Meta": {
+ "Architectures": "i386 amd64",
+ "Archive": "Debian_9.0",
+ "Codename": "Debian_9.0",
+ "Date": "Thu Jan 14 15:16:28 2021",
+ "Description": " MirrorBrain (Debian_9.0)\n",
+ "Label": "Apache:MirrorBrain",
+ "Origin": "obs://build.opensuse.org/Apache:MirrorBrain/Debian_9.0"
+ },
+ "LastDownloadDate": "0001-01-01T00:00:00Z",
+ "Filter": "",
+ "Status": 0,
+ "WorkerPID": 0,
+ "FilterWithDeps": false,
+ "SkipComponentCheck": false,
+ "SkipArchitectureCheck": false,
+ "DownloadSources": false,
+ "DownloadUdebs": false,
+ "DownloadInstaller": false
+ }
+]
diff --git a/system/t04_mirror/ShowMirror1Test_gold b/system/t04_mirror/ShowMirror1Test_gold
index 5b382194..44e12aec 100644
--- a/system/t04_mirror/ShowMirror1Test_gold
+++ b/system/t04_mirror/ShowMirror1Test_gold
@@ -1,5 +1,5 @@
Name: mirror1
-Archive Root URL: http://mirror.yandex.ru/debian/
+Archive Root URL: http://cdn-fastly.deb.debian.org/debian/
Distribution: stretch
Components: main, contrib, non-free
Architectures: amd64, arm64, armel, armhf, i386, mips, mips64el, mipsel, ppc64el, s390x
@@ -13,10 +13,10 @@ Architectures: amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64el s390x
Changelogs: http://metadata.ftp-master.debian.org/changelogs/@CHANGEPATH@_changelog
Codename: stretch
Components: main contrib non-free
-Date: Sat, 27 Apr 2019 09:29:22 UTC
-Description: Debian 9.9 Released 27 April 2019
+Date: Sat, 14 Aug 2021 07:42:00 UTC
+Description: Debian 9.13 Released 18 July 2020
Label: Debian
Origin: Debian
-Suite: stable
-Version: 9.9
+Suite: oldoldstable
+Version: 9.13
diff --git a/system/t04_mirror/ShowMirror4Test_gold b/system/t04_mirror/ShowMirror4Test_gold
index 695252b6..c531b649 100644
--- a/system/t04_mirror/ShowMirror4Test_gold
+++ b/system/t04_mirror/ShowMirror4Test_gold
@@ -2,7 +2,7 @@ Name: mirror4
Archive Root URL: http://security.debian.org/
Distribution: stretch/updates
Components: main
-Architectures: amd64, arm64, armel, armhf, i386, mips, mips64el, mipsel, ppc64el, s390x
+Architectures: amd64, arm64, armel, armhf, i386
Download Sources: no
Download .udebs: no
Filter: nginx | Priority (required)
@@ -11,12 +11,12 @@ Last update: never
Information from release file:
Acquire-By-Hash: yes
-Architectures: amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64el s390x
+Architectures: amd64 arm64 armel armhf i386
Codename: stretch
Components: updates/main updates/contrib updates/non-free
Description: Debian 9 Security Updates
Label: Debian-Security
Origin: Debian
-Suite: stable
+Suite: oldoldstable
Version: 9
diff --git a/system/t04_mirror/ShowMirror5Test_gold b/system/t04_mirror/ShowMirror5Test_gold
new file mode 100644
index 00000000..5e5aaa63
--- /dev/null
+++ b/system/t04_mirror/ShowMirror5Test_gold
@@ -0,0 +1,46 @@
+{
+ "UUID": "82ca6517-ab0b-4be9-81bd-e884a07167f2",
+ "Name": "mirror1",
+ "ArchiveRoot": "http://cdn-fastly.deb.debian.org/debian/",
+ "Distribution": "stretch",
+ "Components": [
+ "main",
+ "contrib",
+ "non-free"
+ ],
+ "Architectures": [
+ "amd64",
+ "arm64",
+ "armel",
+ "armhf",
+ "i386",
+ "mips",
+ "mips64el",
+ "mipsel",
+ "ppc64el",
+ "s390x"
+ ],
+ "Meta": {
+ "Acquire-By-Hash": "yes",
+ "Architectures": "amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64el s390x",
+ "Changelogs": "http://metadata.ftp-master.debian.org/changelogs/@CHANGEPATH@_changelog",
+ "Codename": "stretch",
+ "Components": "main contrib non-free",
+ "Date": "Sat, 14 Aug 2021 07:42:00 UTC",
+ "Description": " Debian 9.13 Released 18 July 2020\n",
+ "Label": "Debian",
+ "Origin": "Debian",
+ "Suite": "oldoldstable",
+ "Version": "9.13"
+ },
+ "LastDownloadDate": "0001-01-01T00:00:00Z",
+ "Filter": "",
+ "Status": 0,
+ "WorkerPID": 0,
+ "FilterWithDeps": false,
+ "SkipComponentCheck": false,
+ "SkipArchitectureCheck": false,
+ "DownloadSources": false,
+ "DownloadUdebs": false,
+ "DownloadInstaller": false
+}
diff --git a/system/t04_mirror/ShowMirror6Test_gold b/system/t04_mirror/ShowMirror6Test_gold
new file mode 100644
index 00000000..5b1f2811
--- /dev/null
+++ b/system/t04_mirror/ShowMirror6Test_gold
@@ -0,0 +1 @@
+ERROR: unable to show: mirror with name mirror-xx not found
diff --git a/system/t04_mirror/ShowMirror7Test_gold b/system/t04_mirror/ShowMirror7Test_gold
new file mode 100644
index 00000000..d454a959
--- /dev/null
+++ b/system/t04_mirror/ShowMirror7Test_gold
@@ -0,0 +1,361 @@
+{
+ "UUID": "2ee0f8e4-5884-4eba-8987-cfe02c01630d",
+ "Name": "wheezy-contrib",
+ "ArchiveRoot": "http://mirror.yandex.ru/debian/",
+ "Distribution": "wheezy",
+ "Components": [
+ "contrib"
+ ],
+ "Architectures": [
+ "i386",
+ "amd64"
+ ],
+ "Meta": {
+ "Architectures": "amd64 armel armhf i386 ia64 kfreebsd-amd64 kfreebsd-i386 mips mipsel powerpc s390 s390x sparc",
+ "Codename": "wheezy",
+ "Components": "main contrib non-free",
+ "Date": "Sat, 26 Apr 2014 09:27:11 UTC",
+ "Description": " Debian 7.5 Released 26 April 2014\n",
+ "Label": "Debian",
+ "Origin": "Debian",
+ "Suite": "stable",
+ "Version": "7.5"
+ },
+ "LastDownloadDate": "2014-06-28T01:23:26.097358548+04:00",
+ "Filter": "",
+ "Status": 0,
+ "WorkerPID": 0,
+ "FilterWithDeps": false,
+ "SkipComponentCheck": false,
+ "SkipArchitectureCheck": false,
+ "DownloadSources": false,
+ "DownloadUdebs": false,
+ "DownloadInstaller": false,
+ "Packages": [
+ "alien-arena-server_7.53+dfsg-3_amd64",
+ "alien-arena-server_7.53+dfsg-3_i386",
+ "alien-arena_7.53+dfsg-3_amd64",
+ "alien-arena_7.53+dfsg-3_i386",
+ "alsa-firmware-loaders_1.0.25-2_amd64",
+ "alsa-firmware-loaders_1.0.25-2_i386",
+ "amoeba_1.1-26_amd64",
+ "amoeba_1.1-26_i386",
+ "assaultcube_1.1.0.4+dfsg2-1_amd64",
+ "assaultcube_1.1.0.4+dfsg2-1_i386",
+ "atari800_2.2.1-2_amd64",
+ "atari800_2.2.1-2_i386",
+ "b43-fwcutter_1:015-14.1_amd64",
+ "b43-fwcutter_1:015-14.1_i386",
+ "basilisk2_0.9.20120331-2_amd64",
+ "basilisk2_0.9.20120331-2_i386",
+ "bgoffice-dict-downloader_0.09_all",
+ "biomaj-watcher_1.2.1-1_all",
+ "boinc-nvidia-cuda_7.0.27+dfsg-5_amd64",
+ "boinc-nvidia-cuda_7.0.27+dfsg-5_i386",
+ "cbedic_4.0-3_amd64",
+ "cbedic_4.0-3_i386",
+ "chocolate-doom_1.7.0-3+b1_amd64",
+ "chocolate-doom_1.7.0-3_i386",
+ "cicero_0.7.2-2_all",
+ "cl-sql-oracle_6.2.0-1_all",
+ "cl-umlisp-orf_3.3.2-3_all",
+ "cl-umlisp_1:2007ac.2-6_all",
+ "cltl_1.0.26_all",
+ "conky-all_1.9.0-2_amd64",
+ "conky-all_1.9.0-2_i386",
+ "cpp-doc_5:4_amd64",
+ "cpp-doc_5:4_i386",
+ "crafty-bitmaps_1.0-1_all",
+ "crafty-books-medium_1.0.debian1-2_all",
+ "crafty-books-medtosmall_1.0.debian1-2_all",
+ "crafty-books-small_1.0.debian1-2_all",
+ "cytadela-data_1.0.1-2_all",
+ "cytadela-dbg_1.0.1-2_amd64",
+ "cytadela-dbg_1.0.1-2_i386",
+ "cytadela_1.0.1-2_amd64",
+ "cytadela_1.0.1-2_i386",
+ "dosemu_1.4.0+svn.2080-1_amd64",
+ "dosemu_1.4.0+svn.2080-1_i386",
+ "dynagen_0.11.0-6_all",
+ "dynare-matlab_4.3.0-2_all",
+ "e-uae-dbg_0.8.29-WIP4-10_amd64",
+ "e-uae-dbg_0.8.29-WIP4-10_i386",
+ "e-uae_0.8.29-WIP4-10_amd64",
+ "e-uae_0.8.29-WIP4-10_i386",
+ "easyspice_0.6.8-2_amd64",
+ "easyspice_0.6.8-2_i386",
+ "esix_1-2_all",
+ "exult-studio_1.2-15.2_amd64",
+ "exult-studio_1.2-15.2_i386",
+ "exult_1.2-15.2_amd64",
+ "exult_1.2-15.2_i386",
+ "festvox-don_1.4.0-4_all",
+ "festvox-en1_1.95-1_all",
+ "festvox-rablpc16k_1.4.0-2_all",
+ "festvox-rablpc8k_1.4.0-2_all",
+ "festvox-us1_1.95-1_all",
+ "festvox-us2_1.95-1_all",
+ "festvox-us3_1.95-1_all",
+ "firmware-b43-installer_1:015-14.1_all",
+ "firmware-b43-lpphy-installer_1:015-14.1_all",
+ "firmware-b43legacy-installer_1:015-14.1_all",
+ "flashplugin-nonfree-extrasound_0.0.svn2431-3_i386",
+ "flashplugin-nonfree_1:3.2_amd64",
+ "flashplugin-nonfree_1:3.2_i386",
+ "frogatto_1.2+dfsg-1+b1_amd64",
+ "frogatto_1.2+dfsg-1_i386",
+ "game-data-packager_30_all",
+ "gcc-doc_5:4_amd64",
+ "gcc-doc_5:4_i386",
+ "gcj-doc_5:4_amd64",
+ "gcj-doc_5:4_i386",
+ "geoip-database-contrib_1.8_all",
+ "gfortran-doc_5:4_amd64",
+ "gfortran-doc_5:4_i386",
+ "glx-alternative-fglrx_0.2.2_amd64",
+ "glx-alternative-fglrx_0.2.2_i386",
+ "glx-alternative-mesa_0.2.2_amd64",
+ "glx-alternative-mesa_0.2.2_i386",
+ "glx-alternative-nvidia_0.2.2_amd64",
+ "glx-alternative-nvidia_0.2.2_i386",
+ "glx-diversions_0.2.2_amd64",
+ "glx-diversions_0.2.2_i386",
+ "gnat-doc_5:4_amd64",
+ "gnat-doc_5:4_i386",
+ "gnome-speech-dectalk_1:0.4.25-5_i386",
+ "gnome-speech-ibmtts_1:0.4.25-5_i386",
+ "gnome-speech-swift_1:0.4.25-5_amd64",
+ "gnome-speech-swift_1:0.4.25-5_i386",
+ "gnome-video-arcade_0.8.3-1_amd64",
+ "gnome-video-arcade_0.8.3-1_i386",
+ "gns3_0.7.4-1_all",
+ "gnuboy-sdl_1.0.3-6.1_amd64",
+ "gnuboy-sdl_1.0.3-6.1_i386",
+ "gnuboy-svga_1.0.3-6.1_amd64",
+ "gnuboy-svga_1.0.3-6.1_i386",
+ "gnuboy-x_1.0.3-6.1_amd64",
+ "gnuboy-x_1.0.3-6.1_i386",
+ "gnuvd-gnome_1.0.11-1_all",
+ "gnuvd_1.0.11-1_amd64",
+ "gnuvd_1.0.11-1_i386",
+ "gobi-loader_0.6-1_amd64",
+ "gobi-loader_0.6-1_i386",
+ "googleearth-package_0.7.0_all",
+ "gtktrain_0.9b-13_amd64",
+ "gtktrain_0.9b-13_i386",
+ "hannah-foo2zjs_1:1_amd64",
+ "hannah-foo2zjs_1:1_i386",
+ "horae_071~svn536-1_all",
+ "hts-voice-nitech-jp-atr503-m001_1.04-1_all",
+ "hyperspec_1.30+nmu2_all",
+ "ifeffit-doc_2:1.2.11d-8_all",
+ "ifeffit_2:1.2.11d-8_amd64",
+ "ifeffit_2:1.2.11d-8_i386",
+ "imgtex_0.20050123-8_all",
+ "isdnactivecards_1:3.9.20060704-11_amd64",
+ "isdnactivecards_1:3.9.20060704-11_i386",
+ "isight-firmware-tools_1.6-1_amd64",
+ "isight-firmware-tools_1.6-1_i386",
+ "iucode-tool_0.8.3-1_amd64",
+ "iucode-tool_0.8.3-1_i386",
+ "ivtv-utils_1.4.1-2_amd64",
+ "ivtv-utils_1.4.1-2_i386",
+ "java-package_0.50+nmu2_all",
+ "kcemu-common_0.5.1+dfsg-5_all",
+ "kcemu_0.5.1+dfsg-5_amd64",
+ "kcemu_0.5.1+dfsg-5_i386",
+ "libcplgasgano20_6.1.1-2_amd64",
+ "libcplgasgano20_6.1.1-2_i386",
+ "libdbd-oracle-perl_1.44-1_amd64",
+ "libdbd-oracle-perl_1.44-1_i386",
+ "libgooglecharts-ruby1.8_1.6.8-2_all",
+ "libgooglecharts-ruby_1.6.8-2_all",
+ "libifeffit-perl_2:1.2.11d-8_amd64",
+ "libifeffit-perl_2:1.2.11d-8_i386",
+ "libjlapack-java_0.8~dfsg-1_all",
+ "libmtj-java-doc_0.9.14~dfsg-2_all",
+ "libmtj-java_0.9.14~dfsg-2_all",
+ "libnetlib-java_0.9.3-1_all",
+ "libpgplot-perl_1:2.21-3_amd64",
+ "libpgplot-perl_1:2.21-3_i386",
+ "libsocl-contrib-1.0_1.0.1+dfsg-1_amd64",
+ "libsocl-contrib-1.0_1.0.1+dfsg-1_i386",
+ "libstarpu-contrib-1.0_1.0.1+dfsg-1_amd64",
+ "libstarpu-contrib-1.0_1.0.1+dfsg-1_i386",
+ "libstarpu-contrib-dev_1.0.1+dfsg-1_amd64",
+ "libstarpu-contrib-dev_1.0.1+dfsg-1_i386",
+ "libstarpu-contribfft-1.0_1.0.1+dfsg-1_amd64",
+ "libstarpu-contribfft-1.0_1.0.1+dfsg-1_i386",
+ "libstarpu-contribmpi-1.0_1.0.1+dfsg-1_amd64",
+ "libstarpu-contribmpi-1.0_1.0.1+dfsg-1_i386",
+ "libsuitesparse-metis-3.1.0_3.1.0-2_amd64",
+ "libsuitesparse-metis-3.1.0_3.1.0-2_i386",
+ "libsuitesparse-metis-dbg_3.1.0-2_amd64",
+ "libsuitesparse-metis-dbg_3.1.0-2_i386",
+ "libsuitesparse-metis-dev_3.1.0-2_amd64",
+ "libsuitesparse-metis-dev_3.1.0-2_i386",
+ "libtrain-bin_0.9b-11_amd64",
+ "libtrain-bin_0.9b-11_i386",
+ "libtrain-dev_0.9b-11_amd64",
+ "libtrain-dev_0.9b-11_i386",
+ "libtrain1_0.9b-11_amd64",
+ "libtrain1_0.9b-11_i386",
+ "libviennacl-dev_1.2.0-2_all",
+ "libviennacl-doc_1.2.0-2_all",
+ "libxnvctrl-dev_304.88-1_amd64",
+ "libxnvctrl-dev_304.88-1_i386",
+ "libxnvctrl0_304.88-1_amd64",
+ "libxnvctrl0_304.88-1_i386",
+ "libydpdict2-dev_1.0.2-1_amd64",
+ "libydpdict2-dev_1.0.2-1_i386",
+ "libydpdict2_1.0.2-1_amd64",
+ "libydpdict2_1.0.2-1_i386",
+ "linux-wlan-ng-firmware_0.2.9+dfsg-5_all",
+ "lugaru_0~20110520.1+hge4354+dfsg-3_amd64",
+ "lugaru_0~20110520.1+hge4354+dfsg-3_i386",
+ "mathematica-fonts_16_all",
+ "matlab-gdf_0.1.2-2_all",
+ "matlab-support_0.0.18_all",
+ "mess-desktop-entries_0.2-2_all",
+ "microcode.ctl_1.18~0+nmu2_amd64",
+ "microcode.ctl_1.18~0+nmu2_i386",
+ "netdisco-mibs-installer_1.7.1_all",
+ "nvidia-installer-cleanup_20120630+3_amd64",
+ "nvidia-installer-cleanup_20120630+3_i386",
+ "nvidia-kernel-common_20120630+3_amd64",
+ "nvidia-kernel-common_20120630+3_i386",
+ "nvidia-settings-legacy-173xx_173.14.35-2_amd64",
+ "nvidia-settings-legacy-173xx_173.14.35-2_i386",
+ "nvidia-settings_304.88-1_amd64",
+ "nvidia-settings_304.88-1_i386",
+ "nvidia-support_20120630+3_amd64",
+ "nvidia-support_20120630+3_i386",
+ "nvidia-xconfig_304.48-1_amd64",
+ "nvidia-xconfig_304.48-1_i386",
+ "opendict-plugins-lingvosoft_0.8-2_all",
+ "ora2pg_8.11-1_all",
+ "phoronix-test-suite_3.8.0-1_all",
+ "pidgin-skype-dbg_20110407+svn628+dfsg-1_amd64",
+ "pidgin-skype-dbg_20110407+svn628+dfsg-1_i386",
+ "pidgin-skype_20110407+svn628+dfsg-1_amd64",
+ "pidgin-skype_20110407+svn628+dfsg-1_i386",
+ "playonlinux_4.1.1-1_all",
+ "premail_0.46-9_all",
+ "prism2-usb-firmware-installer_0.2.9+dfsg-5_amd64",
+ "prism2-usb-firmware-installer_0.2.9+dfsg-5_i386",
+ "pvpgn_1.8.1-2.1+b1_amd64",
+ "pvpgn_1.8.1-2.1+b1_i386",
+ "python-ifeffit_2:1.2.11d-8_amd64",
+ "python-ifeffit_2:1.2.11d-8_i386",
+ "python-ldap-doc_2.3-2.2_all",
+ "python-pycuda-doc_2012.1-1_all",
+ "python-pycuda-headers_2012.1-1_all",
+ "python-pycuda_2012.1-1_amd64",
+ "python-pycuda_2012.1-1_i386",
+ "python-pyopencl-doc_2012.1.dfsg-1_all",
+ "python-pyopencl-headers_2012.1.dfsg-1_all",
+ "python-pyopencl_2012.1.dfsg-1_amd64",
+ "python-pyopencl_2012.1.dfsg-1_i386",
+ "python3-pyopencl_2012.1.dfsg-1_amd64",
+ "python3-pyopencl_2012.1.dfsg-1_i386",
+ "q-tools_0.4-1_i386",
+ "qmhandle_1.3.2-1_all",
+ "quake-server_2_all",
+ "quake3-server_1.4_all",
+ "quake3_1.4_all",
+ "quake_2_all",
+ "r-cran-surveillance_1.2-1-3_amd64",
+ "r-cran-surveillance_1.2-1-3_i386",
+ "raccoon_1.0-1_all",
+ "redeclipse-dbg_1.2-3_amd64",
+ "redeclipse-dbg_1.2-3_i386",
+ "redeclipse-server-dbg_1.2-3_amd64",
+ "redeclipse-server-dbg_1.2-3_i386",
+ "redeclipse-server_1.2-3_amd64",
+ "redeclipse-server_1.2-3_i386",
+ "redeclipse_1.2-3_amd64",
+ "redeclipse_1.2-3_i386",
+ "reminiscence_0.2.1-1_amd64",
+ "reminiscence_0.2.1-1_i386",
+ "rocksndiamonds_3.3.0.1+dfsg1-2.2_amd64",
+ "rocksndiamonds_3.3.0.1+dfsg1-2.2_i386",
+ "rott_1.1.2-1_amd64",
+ "rott_1.1.2-1_i386",
+ "ruby-googlecharts_1.6.8-2_all",
+ "ruby-pgplot-dbg_0.1.3-6_amd64",
+ "ruby-pgplot_0.1.3-6_amd64",
+ "sabnzbdplus-theme-classic_0.6.15-1_all",
+ "sabnzbdplus-theme-iphone_0.6.15-1_all",
+ "sabnzbdplus-theme-mobile_0.6.15-1_all",
+ "sabnzbdplus-theme-plush_0.6.15-1_all",
+ "sabnzbdplus-theme-smpl_0.6.15-1_all",
+ "sabnzbdplus_0.6.15-1_all",
+ "sandboxgamemaker_2.7.1+dfsg-2_amd64",
+ "sandboxgamemaker_2.7.1+dfsg-2_i386",
+ "sapgui-package_0.0.10_all",
+ "sauerbraten-dbg_0.0.20100728.dfsg+repack-3_amd64",
+ "sauerbraten-dbg_0.0.20100728.dfsg+repack-3_i386",
+ "sauerbraten-server_0.0.20100728.dfsg+repack-3_amd64",
+ "sauerbraten-server_0.0.20100728.dfsg+repack-3_i386",
+ "sauerbraten-wake6_1.0-1.1_all",
+ "sauerbraten_0.0.20100728.dfsg+repack-3_amd64",
+ "sauerbraten_0.0.20100728.dfsg+repack-3_i386",
+ "sdic-edict_2.1.3-22_all",
+ "sdic-eijiro_2.1.3-22_all",
+ "sdic-gene95_2.1.3-22_all",
+ "sdic_2.1.3-22_all",
+ "series60-remote_0.4.0+dfsg.1-1_all",
+ "sixpack_1:0.68-1_all",
+ "spectemu-common_0.94a-15_amd64",
+ "spectemu-common_0.94a-15_i386",
+ "spectemu-svga_0.94a-15_amd64",
+ "spectemu-svga_0.94a-15_i386",
+ "spectemu-x11_0.94a-15_amd64",
+ "spectemu-x11_0.94a-15_i386",
+ "sqldeveloper-package_0.2.4_all",
+ "starpu-contrib-examples_1.0.1+dfsg-1_amd64",
+ "starpu-contrib-examples_1.0.1+dfsg-1_i386",
+ "starpu-contrib-tools_1.0.1+dfsg-1_amd64",
+ "starpu-contrib-tools_1.0.1+dfsg-1_i386",
+ "sugar-etoys-activity_116-3_all",
+ "susv2_1.1_all",
+ "susv3_6.1_all",
+ "tightvnc-java_1.2.7-8_all",
+ "ttf-mathematica4.1_16_all",
+ "ttf-mscorefonts-installer_3.4+nmu1_all",
+ "ttf-root-installer_5.34.00-2_all",
+ "uae-dbg_0.8.29-7_amd64",
+ "uae-dbg_0.8.29-7_i386",
+ "uae_0.8.29-7_amd64",
+ "uae_0.8.29-7_i386",
+ "uqm-russian_1.0.2-5_all",
+ "uqm_0.6.2.dfsg-9_amd64",
+ "uqm_0.6.2.dfsg-9_i386",
+ "vice_2.3.dfsg-4_amd64",
+ "vice_2.3.dfsg-4_i386",
+ "vmware-manager_0.2.0-3_all",
+ "vmware-view-open-client_4.5.0-297975+dfsg-4+b1_amd64",
+ "vmware-view-open-client_4.5.0-297975+dfsg-4+b1_i386",
+ "vnc-java_3.3.3r2-8_all",
+ "vor_0.5.5-2_amd64",
+ "vor_0.5.5-2_i386",
+ "vusb-analyzer_1.1-3_all",
+ "wdq2wav_0.8.3-2_amd64",
+ "wdq2wav_0.8.3-2_i386",
+ "winetricks_0.0+20121030+svn918-1_all",
+ "wnn7egg_1.02-8_all",
+ "wolf4sdl_1.7+svn262+dfsg1-1_amd64",
+ "wolf4sdl_1.7+svn262+dfsg1-1_i386",
+ "x-pgp-sig-el_1.3.5.1-4.1_all",
+ "xserver-xorg-video-ivtv-dbg_1.1.2-1+b3_amd64",
+ "xserver-xorg-video-ivtv-dbg_1.1.2-1+b3_i386",
+ "xserver-xorg-video-ivtv_1.1.2-1+b3_amd64",
+ "xserver-xorg-video-ivtv_1.1.2-1+b3_i386",
+ "xtrs_4.9c-3.4_amd64",
+ "xtrs_4.9c-3.4_i386",
+ "xvba-va-driver_0.8.0-5_amd64",
+ "xvba-va-driver_0.8.0-5_i386",
+ "ydpdict_1.0.0-2_amd64",
+ "ydpdict_1.0.0-2_i386"
+ ]
+}
diff --git a/system/t04_mirror/ShowMirror8Test_gold b/system/t04_mirror/ShowMirror8Test_gold
new file mode 100644
index 00000000..2b8ae8fe
--- /dev/null
+++ b/system/t04_mirror/ShowMirror8Test_gold
@@ -0,0 +1,39 @@
+{
+ "UUID": "548dbdb6-75d6-42ac-80de-d6aff8012f83",
+ "Name": "mirror4",
+ "ArchiveRoot": "http://security.debian.org/",
+ "Distribution": "stretch/updates",
+ "Components": [
+ "main"
+ ],
+ "Architectures": [
+ "amd64",
+ "arm64",
+ "armel",
+ "armhf",
+ "i386"
+ ],
+ "Meta": {
+ "Acquire-By-Hash": "yes",
+ "Architectures": "amd64 arm64 armel armhf i386",
+ "Codename": "stretch",
+ "Components": "updates/main updates/contrib updates/non-free",
+ "Date": "Wed, 26 Jan 2022 10:02:07 UTC",
+ "Description": " Debian 9 Security Updates\n",
+ "Label": "Debian-Security",
+ "Origin": "Debian",
+ "Suite": "oldoldstable",
+ "Valid-Until": "Sat, 05 Feb 2022 10:02:07 UTC",
+ "Version": "9"
+ },
+ "LastDownloadDate": "0001-01-01T00:00:00Z",
+ "Filter": "nginx | Priority (required)",
+ "Status": 0,
+ "WorkerPID": 0,
+ "FilterWithDeps": true,
+ "SkipComponentCheck": false,
+ "SkipArchitectureCheck": false,
+ "DownloadSources": false,
+ "DownloadUdebs": false,
+ "DownloadInstaller": false
+}
diff --git a/system/t04_mirror/UpdateMirror10Test_gold b/system/t04_mirror/UpdateMirror10Test_gold
index d1c488fd..e1e94596 100644
--- a/system/t04_mirror/UpdateMirror10Test_gold
+++ b/system/t04_mirror/UpdateMirror10Test_gold
@@ -18,6 +18,18 @@ Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/rkward_0.
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/rkward_0.6.5-1~jessiecran.0_i386.deb...
Mirror `flat-src` has been successfully updated.
Packages filtered: 107 -> 9.
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/InRelease
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/Packages.bz2
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/Sources.bz2
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/dh-r_20180403~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/littler_0.3.5-1~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/littler_0.3.6-1~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/pkg-r-autopkgtest_20180403~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/python3-rpy2_2.9.5-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/python3-rpy2_2.9.5-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/rkward-data_0.6.5-1~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/rkward_0.6.5-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/rkward_0.6.5-1~jessiecran.0_i386.deb
gpgv: aka "Johannes Ranke "
gpgv: Good signature from "Johannes Ranke (Wissenschaftlicher Berater) "
gpgv: RSA key ID 115C3D8A
\ No newline at end of file
diff --git a/system/t04_mirror/UpdateMirror11Test_gold b/system/t04_mirror/UpdateMirror11Test_gold
index 677f0bd5..735d7085 100644
--- a/system/t04_mirror/UpdateMirror11Test_gold
+++ b/system/t04_mirror/UpdateMirror11Test_gold
@@ -4,18 +4,29 @@ Applying filter...
Building download queue...
Download queue: 3 items (354.29 KiB)
Downloading & parsing package files...
-Downloading ftp://ftp.ru.debian.org/debian/dists/stretch/InRelease...
-Downloading ftp://ftp.ru.debian.org/debian/dists/stretch/Release...
-Downloading ftp://ftp.ru.debian.org/debian/dists/stretch/Release.gpg...
-Downloading ftp://ftp.ru.debian.org/debian/dists/stretch/main/binary-i386/Packages.gz...
-Downloading ftp://ftp.ru.debian.org/debian/pool/main/s/sed/sed_4.4-1_i386.deb...
-Downloading ftp://ftp.ru.debian.org/debian/pool/main/s/sensible-utils/sensible-utils_0.0.9+deb9u1_all.deb...
-Downloading ftp://ftp.ru.debian.org/debian/pool/main/s/sysvinit/sysvinit-utils_2.88dsf-59.9_i386.deb...
+Downloading https://snapshot.debian.org/archive/debian/20220201T025006Z/dists/stretch/InRelease...
+Downloading https://snapshot.debian.org/archive/debian/20220201T025006Z/dists/stretch/Release...
+Downloading https://snapshot.debian.org/archive/debian/20220201T025006Z/dists/stretch/Release.gpg...
+Downloading https://snapshot.debian.org/archive/debian/20220201T025006Z/dists/stretch/main/binary-i386/Packages.gz...
+Downloading https://snapshot.debian.org/archive/debian/20220201T025006Z/pool/main/s/sed/sed_4.4-1_i386.deb...
+Downloading https://snapshot.debian.org/archive/debian/20220201T025006Z/pool/main/s/sensible-utils/sensible-utils_0.0.9+deb9u1_all.deb...
+Downloading https://snapshot.debian.org/archive/debian/20220201T025006Z/pool/main/s/sysvinit/sysvinit-utils_2.88dsf-59.9_i386.deb...
+Error downloading https://snapshot.debian.org/archive/debian/20220201T025006Z/dists/stretch/InRelease: HTTP code 404 while fetching https://snapshot.debian.org/archive/debian/20220201T025006Z/dists/stretch/InRelease retrying...
+Giving up on https://snapshot.debian.org/archive/debian/20220201T025006Z/dists/stretch/InRelease...
Mirror `stretch-main` has been successfully updated.
-Packages filtered: 50621 -> 3.
-gpgv: Good signature from "Debian Archive Automatic Signing Key (7.0/wheezy) "
-gpgv: Good signature from "Debian Archive Automatic Signing Key (8/jessie) "
+Packages filtered: 50604 -> 3.
+Retrying 0 https://snapshot.debian.org/archive/debian/20220201T025006Z/dists/stretch/InRelease...
+Success downloading https://snapshot.debian.org/archive/debian/20220201T025006Z/dists/stretch/Release
+Success downloading https://snapshot.debian.org/archive/debian/20220201T025006Z/dists/stretch/Release.gpg
+Success downloading https://snapshot.debian.org/archive/debian/20220201T025006Z/dists/stretch/main/binary-i386/Packages.gz
+Success downloading https://snapshot.debian.org/archive/debian/20220201T025006Z/pool/main/s/sed/sed_4.4-1_i386.deb
+Success downloading https://snapshot.debian.org/archive/debian/20220201T025006Z/pool/main/s/sensible-utils/sensible-utils_0.0.9+deb9u1_all.deb
+Success downloading https://snapshot.debian.org/archive/debian/20220201T025006Z/pool/main/s/sysvinit/sysvinit-utils_2.88dsf-59.9_i386.deb
+gpgv: Good signature from "Debian Archive Automatic Signing Key (10/buster) "
+gpgv: Good signature from "Debian Archive Automatic Signing Key (11/bullseye) "
+gpgv: Good signature from "Debian Archive Automatic Signing Key (9/stretch) "
gpgv: Good signature from "Debian Stable Release Key (9/stretch) "
-gpgv: RSA key ID 2B90D010
-gpgv: RSA key ID 46925553
-gpgv: RSA key ID 1A7B6500
\ No newline at end of file
+gpgv: RSA key ID B7D453EC
+gpgv: RSA key ID 22F3D138
+gpgv: RSA key ID 1A7B6500
+gpgv: RSA key ID 386FA1D9
\ No newline at end of file
diff --git a/system/t04_mirror/UpdateMirror12Test_gold b/system/t04_mirror/UpdateMirror12Test_gold
index 94a0e2ee..34071495 100644
--- a/system/t04_mirror/UpdateMirror12Test_gold
+++ b/system/t04_mirror/UpdateMirror12Test_gold
@@ -4,42 +4,77 @@ Applying filter...
Building download queue...
Download queue: 20 items (11.93 MiB)
Downloading & parsing package files...
-Downloading http://mirror.yandex.ru/debian/dists/stretch/InRelease...
-Downloading http://mirror.yandex.ru/debian/dists/stretch/Release...
-Downloading http://mirror.yandex.ru/debian/dists/stretch/Release.gpg...
-Downloading http://mirror.yandex.ru/debian/dists/stretch/main/binary-amd64/Packages.gz...
-Downloading http://mirror.yandex.ru/debian/dists/stretch/main/binary-i386/Packages.gz...
-Downloading http://mirror.yandex.ru/debian/dists/stretch/main/debian-installer/binary-amd64/Packages.gz...
-Downloading http://mirror.yandex.ru/debian/dists/stretch/main/debian-installer/binary-i386/Packages.gz...
-Downloading http://mirror.yandex.ru/debian/dists/stretch/non-free/binary-amd64/Packages.gz...
-Downloading http://mirror.yandex.ru/debian/dists/stretch/non-free/binary-i386/Packages.gz...
-Downloading http://mirror.yandex.ru/debian/dists/stretch/non-free/debian-installer/binary-amd64/Packages.gz...
-Downloading http://mirror.yandex.ru/debian/dists/stretch/non-free/debian-installer/binary-i386/Packages.gz...
-Downloading http://mirror.yandex.ru/debian/pool/main/g/gnupg2/dirmngr_2.1.18-8~deb9u4_amd64.deb...
-Downloading http://mirror.yandex.ru/debian/pool/main/g/gnupg2/dirmngr_2.1.18-8~deb9u4_i386.deb...
-Downloading http://mirror.yandex.ru/debian/pool/main/g/gnupg2/gnupg-agent_2.1.18-8~deb9u4_amd64.deb...
-Downloading http://mirror.yandex.ru/debian/pool/main/g/gnupg2/gnupg-agent_2.1.18-8~deb9u4_i386.deb...
-Downloading http://mirror.yandex.ru/debian/pool/main/g/gnupg2/gnupg-l10n_2.1.18-8~deb9u4_all.deb...
-Downloading http://mirror.yandex.ru/debian/pool/main/g/gnupg2/gnupg2_2.1.18-8~deb9u4_all.deb...
-Downloading http://mirror.yandex.ru/debian/pool/main/g/gnupg2/gnupg_2.1.18-8~deb9u4_amd64.deb...
-Downloading http://mirror.yandex.ru/debian/pool/main/g/gnupg2/gnupg_2.1.18-8~deb9u4_i386.deb...
-Downloading http://mirror.yandex.ru/debian/pool/main/g/gnupg2/gpgsm_2.1.18-8~deb9u4_amd64.deb...
-Downloading http://mirror.yandex.ru/debian/pool/main/g/gnupg2/gpgsm_2.1.18-8~deb9u4_i386.deb...
-Downloading http://mirror.yandex.ru/debian/pool/main/g/gnupg2/gpgv-static_2.1.18-8~deb9u4_amd64.deb...
-Downloading http://mirror.yandex.ru/debian/pool/main/g/gnupg2/gpgv-static_2.1.18-8~deb9u4_i386.deb...
-Downloading http://mirror.yandex.ru/debian/pool/main/g/gnupg2/gpgv-udeb_2.1.18-8~deb9u4_amd64.udeb...
-Downloading http://mirror.yandex.ru/debian/pool/main/g/gnupg2/gpgv-udeb_2.1.18-8~deb9u4_i386.udeb...
-Downloading http://mirror.yandex.ru/debian/pool/main/g/gnupg2/gpgv-win32_2.1.18-8~deb9u4_all.deb...
-Downloading http://mirror.yandex.ru/debian/pool/main/g/gnupg2/gpgv2_2.1.18-8~deb9u4_all.deb...
-Downloading http://mirror.yandex.ru/debian/pool/main/g/gnupg2/gpgv_2.1.18-8~deb9u4_amd64.deb...
-Downloading http://mirror.yandex.ru/debian/pool/main/g/gnupg2/gpgv_2.1.18-8~deb9u4_i386.deb...
-Downloading http://mirror.yandex.ru/debian/pool/main/g/gnupg2/scdaemon_2.1.18-8~deb9u4_amd64.deb...
-Downloading http://mirror.yandex.ru/debian/pool/main/g/gnupg2/scdaemon_2.1.18-8~deb9u4_i386.deb...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/InRelease...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release.gpg...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/main/binary-amd64/Packages.gz...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/main/binary-i386/Packages.gz...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/main/debian-installer/binary-amd64/Packages.gz...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/main/debian-installer/binary-i386/Packages.gz...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/non-free/binary-amd64/Packages.gz...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/non-free/binary-i386/Packages.gz...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/non-free/debian-installer/binary-amd64/Packages.gz...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/non-free/debian-installer/binary-i386/Packages.gz...
+Downloading http://cdn-fastly.deb.debian.org/debian/pool/main/g/gnupg2/dirmngr_2.1.18-8~deb9u4_amd64.deb...
+Downloading http://cdn-fastly.deb.debian.org/debian/pool/main/g/gnupg2/dirmngr_2.1.18-8~deb9u4_i386.deb...
+Downloading http://cdn-fastly.deb.debian.org/debian/pool/main/g/gnupg2/gnupg-agent_2.1.18-8~deb9u4_amd64.deb...
+Downloading http://cdn-fastly.deb.debian.org/debian/pool/main/g/gnupg2/gnupg-agent_2.1.18-8~deb9u4_i386.deb...
+Downloading http://cdn-fastly.deb.debian.org/debian/pool/main/g/gnupg2/gnupg-l10n_2.1.18-8~deb9u4_all.deb...
+Downloading http://cdn-fastly.deb.debian.org/debian/pool/main/g/gnupg2/gnupg2_2.1.18-8~deb9u4_all.deb...
+Downloading http://cdn-fastly.deb.debian.org/debian/pool/main/g/gnupg2/gnupg_2.1.18-8~deb9u4_amd64.deb...
+Downloading http://cdn-fastly.deb.debian.org/debian/pool/main/g/gnupg2/gnupg_2.1.18-8~deb9u4_i386.deb...
+Downloading http://cdn-fastly.deb.debian.org/debian/pool/main/g/gnupg2/gpgsm_2.1.18-8~deb9u4_amd64.deb...
+Downloading http://cdn-fastly.deb.debian.org/debian/pool/main/g/gnupg2/gpgsm_2.1.18-8~deb9u4_i386.deb...
+Downloading http://cdn-fastly.deb.debian.org/debian/pool/main/g/gnupg2/gpgv-static_2.1.18-8~deb9u4_amd64.deb...
+Downloading http://cdn-fastly.deb.debian.org/debian/pool/main/g/gnupg2/gpgv-static_2.1.18-8~deb9u4_i386.deb...
+Downloading http://cdn-fastly.deb.debian.org/debian/pool/main/g/gnupg2/gpgv-udeb_2.1.18-8~deb9u4_amd64.udeb...
+Downloading http://cdn-fastly.deb.debian.org/debian/pool/main/g/gnupg2/gpgv-udeb_2.1.18-8~deb9u4_i386.udeb...
+Downloading http://cdn-fastly.deb.debian.org/debian/pool/main/g/gnupg2/gpgv-win32_2.1.18-8~deb9u4_all.deb...
+Downloading http://cdn-fastly.deb.debian.org/debian/pool/main/g/gnupg2/gpgv2_2.1.18-8~deb9u4_all.deb...
+Downloading http://cdn-fastly.deb.debian.org/debian/pool/main/g/gnupg2/gpgv_2.1.18-8~deb9u4_amd64.deb...
+Downloading http://cdn-fastly.deb.debian.org/debian/pool/main/g/gnupg2/gpgv_2.1.18-8~deb9u4_i386.deb...
+Downloading http://cdn-fastly.deb.debian.org/debian/pool/main/g/gnupg2/scdaemon_2.1.18-8~deb9u4_amd64.deb...
+Downloading http://cdn-fastly.deb.debian.org/debian/pool/main/g/gnupg2/scdaemon_2.1.18-8~deb9u4_i386.deb...
+Error downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/InRelease: HTTP code 404 while fetching http://cdn-fastly.deb.debian.org/debian/dists/stretch/InRelease retrying...
+Giving up on http://cdn-fastly.deb.debian.org/debian/dists/stretch/InRelease...
Mirror `stretch` has been successfully updated.
-Packages filtered: 78253 -> 20.
-gpgv: Good signature from "Debian Archive Automatic Signing Key (7.0/wheezy) "
-gpgv: Good signature from "Debian Archive Automatic Signing Key (8/jessie) "
+Packages filtered: 78248 -> 20.
+Retrying 0 http://cdn-fastly.deb.debian.org/debian/dists/stretch/InRelease...
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release.gpg
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/main/binary-amd64/Packages.gz
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/main/binary-i386/Packages.gz
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/main/debian-installer/binary-amd64/Packages.gz
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/main/debian-installer/binary-i386/Packages.gz
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/non-free/binary-amd64/Packages.gz
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/non-free/binary-i386/Packages.gz
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/non-free/debian-installer/binary-amd64/Packages.gz
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/non-free/debian-installer/binary-i386/Packages.gz
+Success downloading http://cdn-fastly.deb.debian.org/debian/pool/main/g/gnupg2/dirmngr_2.1.18-8~deb9u4_amd64.deb
+Success downloading http://cdn-fastly.deb.debian.org/debian/pool/main/g/gnupg2/dirmngr_2.1.18-8~deb9u4_i386.deb
+Success downloading http://cdn-fastly.deb.debian.org/debian/pool/main/g/gnupg2/gnupg-agent_2.1.18-8~deb9u4_amd64.deb
+Success downloading http://cdn-fastly.deb.debian.org/debian/pool/main/g/gnupg2/gnupg-agent_2.1.18-8~deb9u4_i386.deb
+Success downloading http://cdn-fastly.deb.debian.org/debian/pool/main/g/gnupg2/gnupg-l10n_2.1.18-8~deb9u4_all.deb
+Success downloading http://cdn-fastly.deb.debian.org/debian/pool/main/g/gnupg2/gnupg2_2.1.18-8~deb9u4_all.deb
+Success downloading http://cdn-fastly.deb.debian.org/debian/pool/main/g/gnupg2/gnupg_2.1.18-8~deb9u4_amd64.deb
+Success downloading http://cdn-fastly.deb.debian.org/debian/pool/main/g/gnupg2/gnupg_2.1.18-8~deb9u4_i386.deb
+Success downloading http://cdn-fastly.deb.debian.org/debian/pool/main/g/gnupg2/gpgsm_2.1.18-8~deb9u4_amd64.deb
+Success downloading http://cdn-fastly.deb.debian.org/debian/pool/main/g/gnupg2/gpgsm_2.1.18-8~deb9u4_i386.deb
+Success downloading http://cdn-fastly.deb.debian.org/debian/pool/main/g/gnupg2/gpgv-static_2.1.18-8~deb9u4_amd64.deb
+Success downloading http://cdn-fastly.deb.debian.org/debian/pool/main/g/gnupg2/gpgv-static_2.1.18-8~deb9u4_i386.deb
+Success downloading http://cdn-fastly.deb.debian.org/debian/pool/main/g/gnupg2/gpgv-udeb_2.1.18-8~deb9u4_amd64.udeb
+Success downloading http://cdn-fastly.deb.debian.org/debian/pool/main/g/gnupg2/gpgv-udeb_2.1.18-8~deb9u4_i386.udeb
+Success downloading http://cdn-fastly.deb.debian.org/debian/pool/main/g/gnupg2/gpgv-win32_2.1.18-8~deb9u4_all.deb
+Success downloading http://cdn-fastly.deb.debian.org/debian/pool/main/g/gnupg2/gpgv2_2.1.18-8~deb9u4_all.deb
+Success downloading http://cdn-fastly.deb.debian.org/debian/pool/main/g/gnupg2/gpgv_2.1.18-8~deb9u4_amd64.deb
+Success downloading http://cdn-fastly.deb.debian.org/debian/pool/main/g/gnupg2/gpgv_2.1.18-8~deb9u4_i386.deb
+Success downloading http://cdn-fastly.deb.debian.org/debian/pool/main/g/gnupg2/scdaemon_2.1.18-8~deb9u4_amd64.deb
+Success downloading http://cdn-fastly.deb.debian.org/debian/pool/main/g/gnupg2/scdaemon_2.1.18-8~deb9u4_i386.deb
+gpgv: Good signature from "Debian Archive Automatic Signing Key (10/buster) "
+gpgv: Good signature from "Debian Archive Automatic Signing Key (11/bullseye) "
+gpgv: Good signature from "Debian Archive Automatic Signing Key (9/stretch) "
gpgv: Good signature from "Debian Stable Release Key (9/stretch) "
-gpgv: RSA key ID 2B90D010
-gpgv: RSA key ID 46925553
-gpgv: RSA key ID 1A7B6500
\ No newline at end of file
+gpgv: RSA key ID B7D453EC
+gpgv: RSA key ID 22F3D138
+gpgv: RSA key ID 1A7B6500
+gpgv: RSA key ID 386FA1D9
\ No newline at end of file
diff --git a/system/t04_mirror/UpdateMirror13Test_gold b/system/t04_mirror/UpdateMirror13Test_gold
index f4902704..4f6c6a66 100644
--- a/system/t04_mirror/UpdateMirror13Test_gold
+++ b/system/t04_mirror/UpdateMirror13Test_gold
@@ -58,4 +58,59 @@ Downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/ma
Downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish/varnish-dbg_3.0.3-1~wheezy_i386.deb...
Downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish/varnish_3.0.3-1~wheezy_amd64.deb...
Downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish/varnish_3.0.3-1~wheezy_i386.deb...
-Mirror `varnish` has been successfully updated.
\ No newline at end of file
+Mirror `varnish` has been successfully updated.
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/dists/wheezy/Release
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/dists/wheezy/main/binary-amd64/Packages.bz2
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/dists/wheezy/main/binary-i386/Packages.bz2
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/libv/varnish%20%283.0.4-1%29/libvarnishapi-dev_3.0.4-1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/libv/varnish%20%283.0.4-1%29/libvarnishapi-dev_3.0.4-1~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/libv/varnish%20%283.0.4-1%29/libvarnishapi1_3.0.4-1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/libv/varnish%20%283.0.4-1%29/libvarnishapi1_3.0.4-1~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/libv/varnish%20%283.0.5-1%29/libvarnishapi-dev_3.0.5-1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/libv/varnish%20%283.0.5-1%29/libvarnishapi-dev_3.0.5-1~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/libv/varnish%20%283.0.5-1%29/libvarnishapi1_3.0.5-1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/libv/varnish%20%283.0.5-1%29/libvarnishapi1_3.0.5-1~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/libv/varnish%20%283.0.6-1%29/libvarnishapi-dev_3.0.6-1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/libv/varnish%20%283.0.6-1%29/libvarnishapi-dev_3.0.6-1~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/libv/varnish%20%283.0.6-1%29/libvarnishapi1_3.0.6-1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/libv/varnish%20%283.0.6-1%29/libvarnishapi1_3.0.6-1~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/libv/varnish%20%283.0.7-1%29/libvarnishapi-dev_3.0.7-1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/libv/varnish%20%283.0.7-1%29/libvarnishapi-dev_3.0.7-1~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/libv/varnish%20%283.0.7-1%29/libvarnishapi1_3.0.7-1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/libv/varnish%20%283.0.7-1%29/libvarnishapi1_3.0.7-1~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/libv/varnish/libvarnishapi-dev_3.0.3-1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/libv/varnish/libvarnishapi-dev_3.0.3-1~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/libv/varnish/libvarnishapi1_3.0.3-1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/libv/varnish/libvarnishapi1_3.0.3-1~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish%20%283.0.4-1%29/varnish-dbg_3.0.4-1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish%20%283.0.4-1%29/varnish-dbg_3.0.4-1~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish%20%283.0.4-1%29/varnish-doc_3.0.4-1~wheezy_all.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish%20%283.0.4-1%29/varnish_3.0.4-1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish%20%283.0.4-1%29/varnish_3.0.4-1~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish%20%283.0.5-1%29/varnish-dbg_3.0.5-1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish%20%283.0.5-1%29/varnish-dbg_3.0.5-1~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish%20%283.0.5-1%29/varnish-doc_3.0.5-1~wheezy_all.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish%20%283.0.5-1%29/varnish_3.0.5-1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish%20%283.0.5-1%29/varnish_3.0.5-1~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish%20%283.0.6-1%29/varnish-dbg_3.0.6-1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish%20%283.0.6-1%29/varnish-dbg_3.0.6-1~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish%20%283.0.6-1%29/varnish-doc_3.0.6-1~wheezy_all.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish%20%283.0.6-1%29/varnish_3.0.6-1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish%20%283.0.6-1%29/varnish_3.0.6-1~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish%20%283.0.7-1%29/varnish-dbg_3.0.7-1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish%20%283.0.7-1%29/varnish-dbg_3.0.7-1~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish%20%283.0.7-1%29/varnish-doc_3.0.7-1~wheezy_all.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish%20%283.0.7-1%29/varnish_3.0.7-1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish%20%283.0.7-1%29/varnish_3.0.7-1~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish-agent%20%281.16.0%29/varnish-agent_1.16.0~wheezy_all.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish-agent%20%282.2.0%29/varnish-agent_2.2.0~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish-agent%20%282.2.0%29/varnish-agent_2.2.0~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish-agent%20%282.2.1%29/varnish-agent_2.2.1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish-agent%20%282.2.1%29/varnish-agent_2.2.1~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish-agent%20%282.2.1+nmu1%29/varnish-agent_2.2.1+nmu1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish-agent%20%283.0.0%29/varnish-agent_3.0.0~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish-agent%20%283.0.1%29/varnish-agent_3.0.1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish/varnish-dbg_3.0.3-1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish/varnish-dbg_3.0.3-1~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish/varnish_3.0.3-1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish/varnish_3.0.3-1~wheezy_i386.deb
\ No newline at end of file
diff --git a/system/t04_mirror/UpdateMirror14Test_gold b/system/t04_mirror/UpdateMirror14Test_gold
index 4c192bc1..2c66db83 100644
--- a/system/t04_mirror/UpdateMirror14Test_gold
+++ b/system/t04_mirror/UpdateMirror14Test_gold
@@ -6,4 +6,7 @@ Downloading & parsing package files...
Downloading https://packagecloud.io/varnishcache/varnish30/debian/dists/wheezy/Release...
Downloading https://packagecloud.io/varnishcache/varnish30/debian/dists/wheezy/main/binary-amd64/Packages.bz2...
Downloading https://packagecloud.io/varnishcache/varnish30/debian/dists/wheezy/main/binary-i386/Packages.bz2...
-Mirror `varnish` has been successfully updated.
\ No newline at end of file
+Mirror `varnish` has been successfully updated.
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/dists/wheezy/Release
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/dists/wheezy/main/binary-amd64/Packages.bz2
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/dists/wheezy/main/binary-i386/Packages.bz2
\ No newline at end of file
diff --git a/system/t04_mirror/UpdateMirror17Test_gold b/system/t04_mirror/UpdateMirror17Test_gold
index 680de5bf..b99be85c 100644
--- a/system/t04_mirror/UpdateMirror17Test_gold
+++ b/system/t04_mirror/UpdateMirror17Test_gold
@@ -4,7 +4,9 @@ Applying filter...
Building download queue...
Download queue: 0 items (0 B)
Downloading & parsing package files...
-Downloading http://mirror.yandex.ru/debian/dists/stretch/Release...
-Downloading http://mirror.yandex.ru/debian/dists/stretch/main/binary-i386/Packages.gz...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/main/binary-i386/Packages.gz...
Mirror `stretch` has been successfully updated.
-Packages filtered: 50621 -> 1.
\ No newline at end of file
+Packages filtered: 50604 -> 1.
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/main/binary-i386/Packages.gz
\ No newline at end of file
diff --git a/system/t04_mirror/UpdateMirror18Test_gold b/system/t04_mirror/UpdateMirror18Test_gold
index f95782c4..33e2dd98 100644
--- a/system/t04_mirror/UpdateMirror18Test_gold
+++ b/system/t04_mirror/UpdateMirror18Test_gold
@@ -4,8 +4,11 @@ Applying filter...
Building download queue...
Download queue: 1 items (3.35 KiB)
Downloading & parsing package files...
-Downloading http://mirror.yandex.ru/debian/dists/stretch/Release...
-Downloading http://mirror.yandex.ru/debian/dists/stretch/main/binary-i386/Packages.gz...
-Downloading http://mirror.yandex.ru/debian/pool/main/b/boost-defaults/libboost-program-options-dev_1.62.0.1_i386.deb...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/main/binary-i386/Packages.gz...
+Downloading http://cdn-fastly.deb.debian.org/debian/pool/main/b/boost-defaults/libboost-program-options-dev_1.62.0.1_i386.deb...
Mirror `stretch` has been successfully updated.
-Packages filtered: 50621 -> 1.
\ No newline at end of file
+Packages filtered: 50604 -> 1.
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/main/binary-i386/Packages.gz
+Success downloading http://cdn-fastly.deb.debian.org/debian/pool/main/b/boost-defaults/libboost-program-options-dev_1.62.0.1_i386.deb
\ No newline at end of file
diff --git a/system/t04_mirror/UpdateMirror19Test_gold b/system/t04_mirror/UpdateMirror19Test_gold
index ac3ee71b..b4c1abc7 100644
--- a/system/t04_mirror/UpdateMirror19Test_gold
+++ b/system/t04_mirror/UpdateMirror19Test_gold
@@ -1,11 +1,17 @@
-Downloading http://packages.pagerduty.com/pdagent/deb/InRelease...
-Downloading http://packages.pagerduty.com/pdagent/deb/Release...
-Downloading http://packages.pagerduty.com/pdagent/deb/Release.gpg...
+Downloading https://packages.pagerduty.com/pdagent/deb/InRelease...
+Error downloading https://packages.pagerduty.com/pdagent/deb/InRelease: HTTP code 404 while fetching https://packages.pagerduty.com/pdagent/deb/InRelease retrying...
+Retrying 0 https://packages.pagerduty.com/pdagent/deb/InRelease...
+Giving up on https://packages.pagerduty.com/pdagent/deb/InRelease...
+Downloading https://packages.pagerduty.com/pdagent/deb/Release...
+Success downloading https://packages.pagerduty.com/pdagent/deb/Release
+Downloading https://packages.pagerduty.com/pdagent/deb/Release.gpg...
+Success downloading https://packages.pagerduty.com/pdagent/deb/Release.gpg
gpgv: RSA key ID F8253540
gpgv: Good signature from "Package Maintainer (PagerDuty, Inc.) "
Downloading & parsing package files...
-Downloading http://packages.pagerduty.com/pdagent/deb/Packages.gz...
+Downloading https://packages.pagerduty.com/pdagent/deb/Packages.gz...
+Success downloading https://packages.pagerduty.com/pdagent/deb/Packages.gz
Building download queue...
-Download queue: 15 items (1.87 MiB)
+Download queue: 23 items (3.46 MiB)
Mirror `pagerduty` has been successfully updated.
diff --git a/system/t04_mirror/UpdateMirror1Test_gold b/system/t04_mirror/UpdateMirror1Test_gold
index f4902704..4f6c6a66 100644
--- a/system/t04_mirror/UpdateMirror1Test_gold
+++ b/system/t04_mirror/UpdateMirror1Test_gold
@@ -58,4 +58,59 @@ Downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/ma
Downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish/varnish-dbg_3.0.3-1~wheezy_i386.deb...
Downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish/varnish_3.0.3-1~wheezy_amd64.deb...
Downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish/varnish_3.0.3-1~wheezy_i386.deb...
-Mirror `varnish` has been successfully updated.
\ No newline at end of file
+Mirror `varnish` has been successfully updated.
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/dists/wheezy/Release
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/dists/wheezy/main/binary-amd64/Packages.bz2
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/dists/wheezy/main/binary-i386/Packages.bz2
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/libv/varnish%20%283.0.4-1%29/libvarnishapi-dev_3.0.4-1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/libv/varnish%20%283.0.4-1%29/libvarnishapi-dev_3.0.4-1~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/libv/varnish%20%283.0.4-1%29/libvarnishapi1_3.0.4-1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/libv/varnish%20%283.0.4-1%29/libvarnishapi1_3.0.4-1~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/libv/varnish%20%283.0.5-1%29/libvarnishapi-dev_3.0.5-1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/libv/varnish%20%283.0.5-1%29/libvarnishapi-dev_3.0.5-1~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/libv/varnish%20%283.0.5-1%29/libvarnishapi1_3.0.5-1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/libv/varnish%20%283.0.5-1%29/libvarnishapi1_3.0.5-1~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/libv/varnish%20%283.0.6-1%29/libvarnishapi-dev_3.0.6-1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/libv/varnish%20%283.0.6-1%29/libvarnishapi-dev_3.0.6-1~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/libv/varnish%20%283.0.6-1%29/libvarnishapi1_3.0.6-1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/libv/varnish%20%283.0.6-1%29/libvarnishapi1_3.0.6-1~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/libv/varnish%20%283.0.7-1%29/libvarnishapi-dev_3.0.7-1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/libv/varnish%20%283.0.7-1%29/libvarnishapi-dev_3.0.7-1~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/libv/varnish%20%283.0.7-1%29/libvarnishapi1_3.0.7-1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/libv/varnish%20%283.0.7-1%29/libvarnishapi1_3.0.7-1~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/libv/varnish/libvarnishapi-dev_3.0.3-1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/libv/varnish/libvarnishapi-dev_3.0.3-1~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/libv/varnish/libvarnishapi1_3.0.3-1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/libv/varnish/libvarnishapi1_3.0.3-1~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish%20%283.0.4-1%29/varnish-dbg_3.0.4-1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish%20%283.0.4-1%29/varnish-dbg_3.0.4-1~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish%20%283.0.4-1%29/varnish-doc_3.0.4-1~wheezy_all.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish%20%283.0.4-1%29/varnish_3.0.4-1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish%20%283.0.4-1%29/varnish_3.0.4-1~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish%20%283.0.5-1%29/varnish-dbg_3.0.5-1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish%20%283.0.5-1%29/varnish-dbg_3.0.5-1~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish%20%283.0.5-1%29/varnish-doc_3.0.5-1~wheezy_all.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish%20%283.0.5-1%29/varnish_3.0.5-1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish%20%283.0.5-1%29/varnish_3.0.5-1~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish%20%283.0.6-1%29/varnish-dbg_3.0.6-1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish%20%283.0.6-1%29/varnish-dbg_3.0.6-1~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish%20%283.0.6-1%29/varnish-doc_3.0.6-1~wheezy_all.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish%20%283.0.6-1%29/varnish_3.0.6-1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish%20%283.0.6-1%29/varnish_3.0.6-1~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish%20%283.0.7-1%29/varnish-dbg_3.0.7-1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish%20%283.0.7-1%29/varnish-dbg_3.0.7-1~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish%20%283.0.7-1%29/varnish-doc_3.0.7-1~wheezy_all.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish%20%283.0.7-1%29/varnish_3.0.7-1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish%20%283.0.7-1%29/varnish_3.0.7-1~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish-agent%20%281.16.0%29/varnish-agent_1.16.0~wheezy_all.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish-agent%20%282.2.0%29/varnish-agent_2.2.0~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish-agent%20%282.2.0%29/varnish-agent_2.2.0~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish-agent%20%282.2.1%29/varnish-agent_2.2.1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish-agent%20%282.2.1%29/varnish-agent_2.2.1~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish-agent%20%282.2.1+nmu1%29/varnish-agent_2.2.1+nmu1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish-agent%20%283.0.0%29/varnish-agent_3.0.0~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish-agent%20%283.0.1%29/varnish-agent_3.0.1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish/varnish-dbg_3.0.3-1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish/varnish-dbg_3.0.3-1~wheezy_i386.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish/varnish_3.0.3-1~wheezy_amd64.deb
+Success downloading https://packagecloud.io/varnishcache/varnish30/debian/pool/wheezy/main/v/varnish/varnish_3.0.3-1~wheezy_i386.deb
\ No newline at end of file
diff --git a/system/t04_mirror/UpdateMirror20Test_gold b/system/t04_mirror/UpdateMirror20Test_gold
index ff129bc0..ef7ecd29 100644
--- a/system/t04_mirror/UpdateMirror20Test_gold
+++ b/system/t04_mirror/UpdateMirror20Test_gold
@@ -1,89 +1,23 @@
- aka "Johannes Ranke (Wissenschaftlicher Berater) "
+ aka "Johannes Ranke "
+Applying filter...
Building download queue...
-Download queue: 78 items (200.63 MiB)
+Download queue: 4 items (338.12 KiB)
Downloading & parsing package files...
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/InRelease...
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/Packages.bz2...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/dh-r_20180403~jessiecran.0_all.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/littler_0.3.5-1~jessiecran.0_all.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/littler_0.3.6-1~jessiecran.0_all.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/pkg-r-autopkgtest_20180403~jessiecran.0_all.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/python3-rpy2_2.9.5-1~jessiecran.0_amd64.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/python3-rpy2_2.9.5-1~jessiecran.0_i386.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base-core-dbg_3.5.2-1~jessiecran.0_amd64.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base-core-dbg_3.5.2-1~jessiecran.0_i386.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base-core-dbg_3.5.3-1~jessiecran.0_amd64.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base-core-dbg_3.5.3-1~jessiecran.0_i386.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base-core_3.5.2-1~jessiecran.0_amd64.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base-core_3.5.2-1~jessiecran.0_i386.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base-core_3.5.3-1~jessiecran.0_amd64.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base-core_3.5.3-1~jessiecran.0_i386.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base-dev_3.5.2-1~jessiecran.0_all.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base-dev_3.5.3-1~jessiecran.0_all.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base-html_3.5.2-1~jessiecran.0_all.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base-html_3.5.3-1~jessiecran.0_all.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base_3.5.2-1~jessiecran.0_all.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base_3.5.3-1~jessiecran.0_all.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-boot_1.3-20-2~jessiecran.0_all.deb...
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-class_7.3-14-2~jessiecran.0_amd64.deb...
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-class_7.3-14-2~jessiecran.0_i386.deb...
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-class_7.3-15-1~jessiecran.0_amd64.deb...
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-class_7.3-15-1~jessiecran.0_i386.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-cluster_2.0.7-1-1~jessiecran.0_amd64.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-cluster_2.0.7-1-1~jessiecran.0_i386.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-coda_0.19-1-2~jessiecran.0_all.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-codetools_0.2-15-2~jessiecran.0_all.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-codetools_0.2-16-1~jessiecran.0_all.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-foreign_0.8.71-1~jessiecran.0_amd64.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-foreign_0.8.71-1~jessiecran.0_i386.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-kernsmooth_2.23-15-3~jessiecran.0_amd64.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-kernsmooth_2.23-15-3~jessiecran.0_i386.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-lattice_0.20-35-1~jessiecran.0_amd64.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-lattice_0.20-35-1~jessiecran.0_i386.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-lattice_0.20-38-1~jessiecran.0_amd64.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-lattice_0.20-38-1~jessiecran.0_i386.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-littler_0.3.5-1~jessiecran.0_amd64.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-littler_0.3.5-1~jessiecran.0_i386.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-littler_0.3.6-1~jessiecran.0_i386.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-mass_7.3-51.1-1~jessiecran.0_amd64.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-mass_7.3-51.1-1~jessiecran.0_i386.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-matrix_1.2-15-1~jessiecran.0_amd64.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-matrix_1.2-15-1~jessiecran.0_i386.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-matrix_1.2-16-1~jessiecran.0_amd64.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-matrix_1.2-16-1~jessiecran.0_i386.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-mgcv_1.8-26-1~jessiecran.0_amd64.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-mgcv_1.8-26-1~jessiecran.0_i386.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-mgcv_1.8-27-1~jessiecran.0_amd64.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-mgcv_1.8-27-1~jessiecran.0_i386.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-nlme_3.1.137-1~jessiecran.0_amd64.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-nlme_3.1.137-1~jessiecran.0_i386.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-nnet_7.3-12-2~jessiecran.0_amd64.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-nnet_7.3-12-2~jessiecran.0_i386.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-rodbc_1.3-15-1~jessiecran.0_amd64.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-rodbc_1.3-15-1~jessiecran.0_i386.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-rpart_4.1-13-1~jessiecran.0_amd64.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-rpart_4.1-13-1~jessiecran.0_i386.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-spatial_7.3-11-2~jessiecran.0_amd64.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-spatial_7.3-11-2~jessiecran.0_i386.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-survival_2.43-3-1~jessiecran.0_amd64.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-survival_2.43-3-1~jessiecran.0_i386.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-doc-html_3.5.2-1~jessiecran.0_all.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-doc-html_3.5.3-1~jessiecran.0_all.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-doc-info_3.5.2-1~jessiecran.0_all.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-doc-info_3.5.3-1~jessiecran.0_all.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-doc-pdf_3.5.2-1~jessiecran.0_all.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-doc-pdf_3.5.3-1~jessiecran.0_all.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-mathlib_3.5.2-1~jessiecran.0_amd64.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-mathlib_3.5.2-1~jessiecran.0_i386.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-mathlib_3.5.3-1~jessiecran.0_amd64.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-mathlib_3.5.3-1~jessiecran.0_i386.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-recommended_3.5.2-1~jessiecran.0_all.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-recommended_3.5.3-1~jessiecran.0_all.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/rkward-data_0.6.5-1~jessiecran.0_all.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/rkward_0.6.5-1~jessiecran.0_amd64.deb...
-Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/rkward_0.6.5-1~jessiecran.0_i386.deb...
Mirror `flat` has been successfully updated.
-openpgp: Good signature from "Johannes Ranke "
+Packages filtered: 78 -> 4.
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/InRelease
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/Packages.bz2
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-class_7.3-14-2~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-class_7.3-14-2~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-class_7.3-15-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-class_7.3-15-1~jessiecran.0_i386.deb
+openpgp: Good signature from "Johannes Ranke (Wissenschaftlicher Berater) "
openpgp: RSA key ID FCAE2A0E115C3D8A
\ No newline at end of file
diff --git a/system/t04_mirror/UpdateMirror21Test_gold b/system/t04_mirror/UpdateMirror21Test_gold
index a3dba0dd..f74816a9 100644
--- a/system/t04_mirror/UpdateMirror21Test_gold
+++ b/system/t04_mirror/UpdateMirror21Test_gold
@@ -1,11 +1,17 @@
-Downloading http://packages.pagerduty.com/pdagent/deb/InRelease...
-Downloading http://packages.pagerduty.com/pdagent/deb/Release...
-Downloading http://packages.pagerduty.com/pdagent/deb/Release.gpg...
+Downloading https://packages.pagerduty.com/pdagent/deb/InRelease...
+Error downloading https://packages.pagerduty.com/pdagent/deb/InRelease: HTTP code 404 while fetching https://packages.pagerduty.com/pdagent/deb/InRelease retrying...
+Retrying 0 https://packages.pagerduty.com/pdagent/deb/InRelease...
+Giving up on https://packages.pagerduty.com/pdagent/deb/InRelease...
+Downloading https://packages.pagerduty.com/pdagent/deb/Release...
+Success downloading https://packages.pagerduty.com/pdagent/deb/Release
+Downloading https://packages.pagerduty.com/pdagent/deb/Release.gpg...
+Success downloading https://packages.pagerduty.com/pdagent/deb/Release.gpg
openpgp: RSA key ID AE0396CFF8253540
openpgp: Good signature from "Package Maintainer (PagerDuty, Inc.) "
Downloading & parsing package files...
-Downloading http://packages.pagerduty.com/pdagent/deb/Packages.gz...
+Downloading https://packages.pagerduty.com/pdagent/deb/Packages.gz...
+Success downloading https://packages.pagerduty.com/pdagent/deb/Packages.gz
Building download queue...
-Download queue: 15 items (1.87 MiB)
+Download queue: 23 items (3.46 MiB)
Mirror `pagerduty` has been successfully updated.
diff --git a/system/t04_mirror/UpdateMirror22Test_gold b/system/t04_mirror/UpdateMirror22Test_gold
index 296cc0bd..34edb82c 100644
--- a/system/t04_mirror/UpdateMirror22Test_gold
+++ b/system/t04_mirror/UpdateMirror22Test_gold
@@ -1,8 +1,10 @@
Downloading https://nvidia.github.io/libnvidia-container/ubuntu16.04/amd64/InRelease...
-openpgp: RSA key ID C45B1676A04EA552
+Success downloading https://nvidia.github.io/libnvidia-container/ubuntu16.04/amd64/InRelease
+openpgp: RSA key ID DDCAE044F796ECB0
openpgp: Good signature from "NVIDIA CORPORATION (Open Source Projects) "
Downloading & parsing package files...
Downloading https://nvidia.github.io/libnvidia-container/ubuntu16.04/amd64/Packages.xz...
+Success downloading https://nvidia.github.io/libnvidia-container/ubuntu16.04/amd64/Packages.xz
Applying filter...
Building download queue...
diff --git a/system/t04_mirror/UpdateMirror23Test_gold b/system/t04_mirror/UpdateMirror23Test_gold
index 743624af..2f7f9fd7 100644
--- a/system/t04_mirror/UpdateMirror23Test_gold
+++ b/system/t04_mirror/UpdateMirror23Test_gold
@@ -2,28 +2,49 @@
Applying filter...
Building download queue...
-Download queue: 8 items (20.92 MiB)
+Download queue: 8 items (20.93 MiB)
Downloading & parsing package files...
-Downloading http://mirror.yandex.ru/debian/dists/stretch/InRelease...
-Downloading http://mirror.yandex.ru/debian/dists/stretch/Release...
-Downloading http://mirror.yandex.ru/debian/dists/stretch/Release.gpg...
-Downloading http://mirror.yandex.ru/debian/dists/stretch/main/binary-s390x/Packages.gz...
-Downloading http://mirror.yandex.ru/debian/dists/stretch/main/installer-s390x/current/images/MANIFEST...
-Downloading http://mirror.yandex.ru/debian/dists/stretch/main/installer-s390x/current/images/MANIFEST.udebs...
-Downloading http://mirror.yandex.ru/debian/dists/stretch/main/installer-s390x/current/images/MD5SUMS...
-Downloading http://mirror.yandex.ru/debian/dists/stretch/main/installer-s390x/current/images/SHA256SUMS...
-Downloading http://mirror.yandex.ru/debian/dists/stretch/main/installer-s390x/current/images/generic/debian.exec...
-Downloading http://mirror.yandex.ru/debian/dists/stretch/main/installer-s390x/current/images/generic/initrd.debian...
-Downloading http://mirror.yandex.ru/debian/dists/stretch/main/installer-s390x/current/images/generic/kernel.debian...
-Downloading http://mirror.yandex.ru/debian/dists/stretch/main/installer-s390x/current/images/generic/parmfile.debian...
-Downloading http://mirror.yandex.ru/debian/dists/stretch/main/installer-s390x/current/images/udeb.list...
-Downloading http://mirror.yandex.ru/debian/dists/stretch/non-free/binary-s390x/Packages.gz...
-Downloading http://mirror.yandex.ru/debian/dists/stretch/non-free/installer-s390x/current/images/SHA256SUMS...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/InRelease...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release.gpg...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/main/binary-s390x/Packages.gz...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/main/installer-s390x/current/images/MANIFEST...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/main/installer-s390x/current/images/MANIFEST.udebs...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/main/installer-s390x/current/images/MD5SUMS...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/main/installer-s390x/current/images/SHA256SUMS...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/main/installer-s390x/current/images/generic/debian.exec...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/main/installer-s390x/current/images/generic/initrd.debian...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/main/installer-s390x/current/images/generic/kernel.debian...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/main/installer-s390x/current/images/generic/parmfile.debian...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/main/installer-s390x/current/images/udeb.list...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/non-free/binary-s390x/Packages.gz...
+Downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/non-free/installer-s390x/current/images/SHA256SUMS...
+Error downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/InRelease: HTTP code 404 while fetching http://cdn-fastly.deb.debian.org/debian/dists/stretch/InRelease retrying...
+Error downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/non-free/installer-s390x/current/images/SHA256SUMS: HTTP code 404 while fetching http://cdn-fastly.deb.debian.org/debian/dists/stretch/non-free/installer-s390x/current/images/SHA256SUMS retrying...
+Giving up on http://cdn-fastly.deb.debian.org/debian/dists/stretch/InRelease...
+Giving up on http://cdn-fastly.deb.debian.org/debian/dists/stretch/non-free/installer-s390x/current/images/SHA256SUMS...
Mirror `stretch` has been successfully updated.
-Packages filtered: 49279 -> 1.
-gpgv: Good signature from "Debian Archive Automatic Signing Key (7.0/wheezy) "
-gpgv: Good signature from "Debian Archive Automatic Signing Key (8/jessie) "
+Packages filtered: 49256 -> 1.
+Retrying 0 http://cdn-fastly.deb.debian.org/debian/dists/stretch/InRelease...
+Retrying 0 http://cdn-fastly.deb.debian.org/debian/dists/stretch/non-free/installer-s390x/current/images/SHA256SUMS...
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/Release.gpg
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/main/binary-s390x/Packages.gz
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/main/installer-s390x/current/images/MANIFEST
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/main/installer-s390x/current/images/MANIFEST.udebs
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/main/installer-s390x/current/images/MD5SUMS
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/main/installer-s390x/current/images/SHA256SUMS
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/main/installer-s390x/current/images/generic/debian.exec
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/main/installer-s390x/current/images/generic/initrd.debian
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/main/installer-s390x/current/images/generic/kernel.debian
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/main/installer-s390x/current/images/generic/parmfile.debian
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/main/installer-s390x/current/images/udeb.list
+Success downloading http://cdn-fastly.deb.debian.org/debian/dists/stretch/non-free/binary-s390x/Packages.gz
+gpgv: Good signature from "Debian Archive Automatic Signing Key (10/buster) "
+gpgv: Good signature from "Debian Archive Automatic Signing Key (11/bullseye) "
+gpgv: Good signature from "Debian Archive Automatic Signing Key (9/stretch) "
gpgv: Good signature from "Debian Stable Release Key (9/stretch) "
-gpgv: RSA key ID 2B90D010
-gpgv: RSA key ID 46925553
-gpgv: RSA key ID 1A7B6500
\ No newline at end of file
+gpgv: RSA key ID B7D453EC
+gpgv: RSA key ID 22F3D138
+gpgv: RSA key ID 1A7B6500
+gpgv: RSA key ID 386FA1D9
\ No newline at end of file
diff --git a/system/t04_mirror/UpdateMirror24Test_gold b/system/t04_mirror/UpdateMirror24Test_gold
index ff280c29..34c99295 100644
--- a/system/t04_mirror/UpdateMirror24Test_gold
+++ b/system/t04_mirror/UpdateMirror24Test_gold
@@ -4,53 +4,102 @@ Applying filter...
Building download queue...
Download queue: 37 items (166.14 MiB)
Downloading & parsing package files...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/InRelease...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/Release...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/Release.gpg...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/main/binary-amd64/Packages.bz2...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/main/installer-amd64/current/images/MANIFEST...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/main/installer-amd64/current/images/MANIFEST.udebs...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/main/installer-amd64/current/images/SHA256SUMS...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/main/installer-amd64/current/images/SHA256SUMS.gpg...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/main/installer-amd64/current/images/cdrom/debian-cd_info.tar.gz...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/main/installer-amd64/current/images/cdrom/initrd.gz...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/main/installer-amd64/current/images/cdrom/vmlinuz...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/main/installer-amd64/current/images/cdrom/xen/xm-debian.cfg...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/main/installer-amd64/current/images/hd-media/boot.img.gz...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/main/installer-amd64/current/images/hd-media/initrd.gz...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/main/installer-amd64/current/images/hd-media/vmlinuz...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/boot.img.gz...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/mini.iso...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/netboot.tar.gz...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/adtxt.cfg...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/exithelp.cfg...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/f1.txt...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/f10.txt...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/f2.txt...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/f3.txt...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/f4.txt...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/f5.txt...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/f6.txt...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/f7.txt...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/f8.txt...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/f9.txt...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/menu.cfg...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/prompt.cfg...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/rqtxt.cfg...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/splash.png...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/stdmenu.cfg...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/syslinux.cfg...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/txt.cfg...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/vesamenu.c32...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/pxelinux.0...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/xen/xm-debian.cfg...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/main/installer-amd64/current/images/udeb.list...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/restricted/binary-amd64/Packages.bz2...
-Downloading http://mirror.yandex.ru/ubuntu/dists/trusty/restricted/installer-amd64/current/images/SHA256SUMS...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/InRelease...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/Release...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/Release.gpg...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/binary-amd64/Packages.bz2...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/MANIFEST...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/MANIFEST.udebs...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/SHA256SUMS...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/SHA256SUMS.gpg...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/cdrom/debian-cd_info.tar.gz...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/cdrom/initrd.gz...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/cdrom/vmlinuz...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/cdrom/xen/xm-debian.cfg...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/hd-media/boot.img.gz...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/hd-media/initrd.gz...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/hd-media/vmlinuz...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/boot.img.gz...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/mini.iso...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/netboot.tar.gz...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/adtxt.cfg...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/exithelp.cfg...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/f1.txt...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/f10.txt...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/f2.txt...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/f3.txt...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/f4.txt...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/f5.txt...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/f6.txt...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/f7.txt...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/f8.txt...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/f9.txt...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/menu.cfg...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/prompt.cfg...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/rqtxt.cfg...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/splash.png...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/stdmenu.cfg...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/syslinux.cfg...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/txt.cfg...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/vesamenu.c32...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/pxelinux.0...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/xen/xm-debian.cfg...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/udeb.list...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/restricted/binary-amd64/Packages.bz2...
+Downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/restricted/installer-amd64/current/images/SHA256SUMS...
+Error downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/InRelease: HTTP code 404 while fetching http://us.archive.ubuntu.com/ubuntu/dists/trusty/InRelease retrying...
+Error downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/restricted/installer-amd64/current/images/SHA256SUMS: HTTP code 404 while fetching http://us.archive.ubuntu.com/ubuntu/dists/trusty/restricted/installer-amd64/current/images/SHA256SUMS retrying...
+Giving up on http://us.archive.ubuntu.com/ubuntu/dists/trusty/InRelease...
+Giving up on http://us.archive.ubuntu.com/ubuntu/dists/trusty/restricted/installer-amd64/current/images/SHA256SUMS...
Mirror `trusty` has been successfully updated.
Packages filtered: 8616 -> 1.
+Retrying 0 http://us.archive.ubuntu.com/ubuntu/dists/trusty/InRelease...
+Retrying 0 http://us.archive.ubuntu.com/ubuntu/dists/trusty/restricted/installer-amd64/current/images/SHA256SUMS...
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/Release
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/Release.gpg
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/binary-amd64/Packages.bz2
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/MANIFEST
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/MANIFEST.udebs
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/SHA256SUMS
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/SHA256SUMS.gpg
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/cdrom/debian-cd_info.tar.gz
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/cdrom/initrd.gz
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/cdrom/vmlinuz
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/cdrom/xen/xm-debian.cfg
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/hd-media/boot.img.gz
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/hd-media/initrd.gz
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/hd-media/vmlinuz
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/boot.img.gz
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/mini.iso
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/netboot.tar.gz
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/adtxt.cfg
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/exithelp.cfg
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/f1.txt
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/f10.txt
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/f2.txt
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/f3.txt
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/f4.txt
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/f5.txt
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/f6.txt
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/f7.txt
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/f8.txt
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/f9.txt
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/menu.cfg
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/prompt.cfg
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/rqtxt.cfg
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/splash.png
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/stdmenu.cfg
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/syslinux.cfg
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/txt.cfg
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/vesamenu.c32
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/pxelinux.0
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/xen/xm-debian.cfg
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/udeb.list
+Success downloading http://us.archive.ubuntu.com/ubuntu/dists/trusty/restricted/binary-amd64/Packages.bz2
gpgv: Good signature from "Ubuntu Archive Automatic Signing Key (2012) "
gpgv: Good signature from "Ubuntu Archive Automatic Signing Key (2012) "
gpgv: Good signature from "Ubuntu Archive Automatic Signing Key "
diff --git a/system/t04_mirror/UpdateMirror3Test_gold b/system/t04_mirror/UpdateMirror3Test_gold
index 4934fde1..cc9a36e1 100644
--- a/system/t04_mirror/UpdateMirror3Test_gold
+++ b/system/t04_mirror/UpdateMirror3Test_gold
@@ -1,4 +1,8 @@
Downloading ${url}dists/hardy/Release...
+Success downloading ${url}dists/hardy/Release
Downloading & parsing package files...
Downloading ${url}dists/hardy/main/binary-amd64/Packages...
+Error downloading ${url}dists/hardy/main/binary-amd64/Packages: ${url}dists/hardy/main/binary-amd64/Packages: sha256 hash mismatch "494414ded24da13c451b13b424928821351c78fce49f93d9e1b55f102790c206" != "8a21688ae769f2b4ffcaa366409f679d" retrying...
+Retrying 0 ${url}dists/hardy/main/binary-amd64/Packages...
+Giving up on ${url}dists/hardy/main/binary-amd64/Packages...
ERROR: unable to update: ${url}dists/hardy/main/binary-amd64/Packages: sha256 hash mismatch "494414ded24da13c451b13b424928821351c78fce49f93d9e1b55f102790c206" != "8a21688ae769f2b4ffcaa366409f679d"
diff --git a/system/t04_mirror/UpdateMirror4Test_gold b/system/t04_mirror/UpdateMirror4Test_gold
index dc022217..d8ba9728 100644
--- a/system/t04_mirror/UpdateMirror4Test_gold
+++ b/system/t04_mirror/UpdateMirror4Test_gold
@@ -1,8 +1,19 @@
Downloading ${url}dists/hardy/Release...
+Success downloading ${url}dists/hardy/Release
Downloading & parsing package files...
Downloading ${url}dists/hardy/main/binary-amd64/Packages.bz2...
+Error downloading ${url}dists/hardy/main/binary-amd64/Packages.bz2: HTTP code 404 while fetching ${url}dists/hardy/main/binary-amd64/Packages.bz2 retrying...
+Retrying 0 ${url}dists/hardy/main/binary-amd64/Packages.bz2...
+Giving up on ${url}dists/hardy/main/binary-amd64/Packages.bz2...
Downloading ${url}dists/hardy/main/binary-amd64/Packages.gz...
+Error downloading ${url}dists/hardy/main/binary-amd64/Packages.gz: HTTP code 404 while fetching ${url}dists/hardy/main/binary-amd64/Packages.gz retrying...
+Retrying 0 ${url}dists/hardy/main/binary-amd64/Packages.gz...
+Giving up on ${url}dists/hardy/main/binary-amd64/Packages.gz...
Downloading ${url}dists/hardy/main/binary-amd64/Packages.xz...
+Error downloading ${url}dists/hardy/main/binary-amd64/Packages.xz: HTTP code 404 while fetching ${url}dists/hardy/main/binary-amd64/Packages.xz retrying...
+Retrying 0 ${url}dists/hardy/main/binary-amd64/Packages.xz...
+Giving up on ${url}dists/hardy/main/binary-amd64/Packages.xz...
Downloading ${url}dists/hardy/main/binary-amd64/Packages...
WARNING: ${url}dists/hardy/main/binary-amd64/Packages: sha256 hash mismatch "494414ded24da13c451b13b424928821351c78fce49f93d9e1b55f102790c206" != "8a21688ae769f2b4ffcaa366409f679d"
+Success downloading ${url}dists/hardy/main/binary-amd64/Packages
ERROR: unable to update: malformed stanza syntax
diff --git a/system/t04_mirror/UpdateMirror5Test_gold b/system/t04_mirror/UpdateMirror5Test_gold
index 60878f00..61d8087c 100644
--- a/system/t04_mirror/UpdateMirror5Test_gold
+++ b/system/t04_mirror/UpdateMirror5Test_gold
@@ -1,8 +1,13 @@
Downloading ${url}dists/hardy/Release...
+Success downloading ${url}dists/hardy/Release
Downloading & parsing package files...
Downloading ${url}dists/hardy/main/binary-amd64/Packages...
+Success downloading ${url}dists/hardy/main/binary-amd64/Packages
Building download queue...
Download queue: 1 items (30 B)
Downloading ${url}pool/main/a/amanda/amanda-client_3.3.1-3~bpo60+1_amd64.deb...
+Error downloading ${url}pool/main/a/amanda/amanda-client_3.3.1-3~bpo60+1_amd64.deb: ${url}pool/main/a/amanda/amanda-client_3.3.1-3~bpo60+1_amd64.deb: sha1 hash mismatch "8d3a014000038725d6daf8771b42a0784253688f" != "66b27417d37e024c46526c2f6d358a754fc552f3" retrying...
+Retrying 0 ${url}pool/main/a/amanda/amanda-client_3.3.1-3~bpo60+1_amd64.deb...
+Giving up on ${url}pool/main/a/amanda/amanda-client_3.3.1-3~bpo60+1_amd64.deb...
ERROR: unable to update: download errors:
${url}pool/main/a/amanda/amanda-client_3.3.1-3~bpo60+1_amd64.deb: sha1 hash mismatch "8d3a014000038725d6daf8771b42a0784253688f" != "66b27417d37e024c46526c2f6d358a754fc552f3"
diff --git a/system/t04_mirror/UpdateMirror6Test_gold b/system/t04_mirror/UpdateMirror6Test_gold
index de1c5aa5..cd5b73c4 100644
--- a/system/t04_mirror/UpdateMirror6Test_gold
+++ b/system/t04_mirror/UpdateMirror6Test_gold
@@ -1,12 +1,24 @@
Downloading ${url}dists/hardy/Release...
+Success downloading ${url}dists/hardy/Release
Downloading & parsing package files...
Downloading ${url}dists/hardy/main/binary-amd64/Packages.bz2...
+Error downloading ${url}dists/hardy/main/binary-amd64/Packages.bz2: HTTP code 404 while fetching ${url}dists/hardy/main/binary-amd64/Packages.bz2 retrying...
+Retrying 0 ${url}dists/hardy/main/binary-amd64/Packages.bz2...
+Giving up on ${url}dists/hardy/main/binary-amd64/Packages.bz2...
Downloading ${url}dists/hardy/main/binary-amd64/Packages.gz...
+Error downloading ${url}dists/hardy/main/binary-amd64/Packages.gz: HTTP code 404 while fetching ${url}dists/hardy/main/binary-amd64/Packages.gz retrying...
+Retrying 0 ${url}dists/hardy/main/binary-amd64/Packages.gz...
+Giving up on ${url}dists/hardy/main/binary-amd64/Packages.gz...
Downloading ${url}dists/hardy/main/binary-amd64/Packages.xz...
+Error downloading ${url}dists/hardy/main/binary-amd64/Packages.xz: HTTP code 404 while fetching ${url}dists/hardy/main/binary-amd64/Packages.xz retrying...
+Retrying 0 ${url}dists/hardy/main/binary-amd64/Packages.xz...
+Giving up on ${url}dists/hardy/main/binary-amd64/Packages.xz...
Downloading ${url}dists/hardy/main/binary-amd64/Packages...
+Success downloading ${url}dists/hardy/main/binary-amd64/Packages
Building download queue...
Download queue: 1 items (30 B)
Downloading ${url}pool/main/a/amanda/amanda-client_3.3.1-3~bpo60+1_amd64.deb...
WARNING: ${url}pool/main/a/amanda/amanda-client_3.3.1-3~bpo60+1_amd64.deb: sha1 hash mismatch "8d3a014000038725d6daf8771b42a0784253688f" != "66b27417d37e024c46526c2f6d358a754fc552f3"
+Success downloading ${url}pool/main/a/amanda/amanda-client_3.3.1-3~bpo60+1_amd64.deb
Mirror `failure` has been successfully updated.
diff --git a/system/t04_mirror/UpdateMirror7Test_gold b/system/t04_mirror/UpdateMirror7Test_gold
index 5688e905..1f2a4b27 100644
--- a/system/t04_mirror/UpdateMirror7Test_gold
+++ b/system/t04_mirror/UpdateMirror7Test_gold
@@ -84,6 +84,86 @@ Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/rkward-da
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/rkward_0.6.5-1~jessiecran.0_amd64.deb...
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/rkward_0.6.5-1~jessiecran.0_i386.deb...
Mirror `flat` has been successfully updated.
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/InRelease
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/Packages.bz2
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/dh-r_20180403~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/littler_0.3.5-1~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/littler_0.3.6-1~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/pkg-r-autopkgtest_20180403~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/python3-rpy2_2.9.5-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/python3-rpy2_2.9.5-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base-core-dbg_3.5.2-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base-core-dbg_3.5.2-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base-core-dbg_3.5.3-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base-core-dbg_3.5.3-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base-core_3.5.2-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base-core_3.5.2-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base-core_3.5.3-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base-core_3.5.3-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base-dev_3.5.2-1~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base-dev_3.5.3-1~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base-html_3.5.2-1~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base-html_3.5.3-1~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base_3.5.2-1~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base_3.5.3-1~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-boot_1.3-20-2~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-class_7.3-14-2~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-class_7.3-14-2~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-class_7.3-15-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-class_7.3-15-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-cluster_2.0.7-1-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-cluster_2.0.7-1-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-coda_0.19-1-2~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-codetools_0.2-15-2~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-codetools_0.2-16-1~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-foreign_0.8.71-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-foreign_0.8.71-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-kernsmooth_2.23-15-3~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-kernsmooth_2.23-15-3~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-lattice_0.20-35-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-lattice_0.20-35-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-lattice_0.20-38-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-lattice_0.20-38-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-littler_0.3.5-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-littler_0.3.5-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-littler_0.3.6-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-mass_7.3-51.1-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-mass_7.3-51.1-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-matrix_1.2-15-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-matrix_1.2-15-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-matrix_1.2-16-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-matrix_1.2-16-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-mgcv_1.8-26-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-mgcv_1.8-26-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-mgcv_1.8-27-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-mgcv_1.8-27-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-nlme_3.1.137-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-nlme_3.1.137-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-nnet_7.3-12-2~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-nnet_7.3-12-2~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-rodbc_1.3-15-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-rodbc_1.3-15-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-rpart_4.1-13-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-rpart_4.1-13-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-spatial_7.3-11-2~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-spatial_7.3-11-2~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-survival_2.43-3-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-survival_2.43-3-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-doc-html_3.5.2-1~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-doc-html_3.5.3-1~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-doc-info_3.5.2-1~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-doc-info_3.5.3-1~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-doc-pdf_3.5.2-1~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-doc-pdf_3.5.3-1~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-mathlib_3.5.2-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-mathlib_3.5.2-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-mathlib_3.5.3-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-mathlib_3.5.3-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-recommended_3.5.2-1~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-recommended_3.5.3-1~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/rkward-data_0.6.5-1~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/rkward_0.6.5-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/rkward_0.6.5-1~jessiecran.0_i386.deb
gpgv: aka "Johannes Ranke "
gpgv: Good signature from "Johannes Ranke (Wissenschaftlicher Berater) "
gpgv: RSA key ID 115C3D8A
\ No newline at end of file
diff --git a/system/t04_mirror/UpdateMirror8Test_gold b/system/t04_mirror/UpdateMirror8Test_gold
index b315ed78..a299fe9d 100644
--- a/system/t04_mirror/UpdateMirror8Test_gold
+++ b/system/t04_mirror/UpdateMirror8Test_gold
@@ -1,13 +1,22 @@
Downloading http://ppa.launchpad.net/gladky-anton/gnuplot/ubuntu/dists/maverick/InRelease...
+Error downloading http://ppa.launchpad.net/gladky-anton/gnuplot/ubuntu/dists/maverick/InRelease: HTTP code 404 while fetching http://ppa.launchpad.net/gladky-anton/gnuplot/ubuntu/dists/maverick/InRelease retrying...
+Retrying 0 http://ppa.launchpad.net/gladky-anton/gnuplot/ubuntu/dists/maverick/InRelease...
+Giving up on http://ppa.launchpad.net/gladky-anton/gnuplot/ubuntu/dists/maverick/InRelease...
Downloading http://ppa.launchpad.net/gladky-anton/gnuplot/ubuntu/dists/maverick/Release...
+Success downloading http://ppa.launchpad.net/gladky-anton/gnuplot/ubuntu/dists/maverick/Release
Downloading http://ppa.launchpad.net/gladky-anton/gnuplot/ubuntu/dists/maverick/Release.gpg...
+Success downloading http://ppa.launchpad.net/gladky-anton/gnuplot/ubuntu/dists/maverick/Release.gpg
gpgv: RSA key ID 3B1F56C0
gpgv: Good signature from "Launchpad sim"
Downloading & parsing package files...
Downloading http://ppa.launchpad.net/gladky-anton/gnuplot/ubuntu/dists/maverick/main/binary-amd64/Packages.bz2...
+Success downloading http://ppa.launchpad.net/gladky-anton/gnuplot/ubuntu/dists/maverick/main/binary-amd64/Packages.bz2
Downloading http://ppa.launchpad.net/gladky-anton/gnuplot/ubuntu/dists/maverick/main/binary-armel/Packages.bz2...
+Success downloading http://ppa.launchpad.net/gladky-anton/gnuplot/ubuntu/dists/maverick/main/binary-armel/Packages.bz2
Downloading http://ppa.launchpad.net/gladky-anton/gnuplot/ubuntu/dists/maverick/main/binary-i386/Packages.bz2...
+Success downloading http://ppa.launchpad.net/gladky-anton/gnuplot/ubuntu/dists/maverick/main/binary-i386/Packages.bz2
Downloading http://ppa.launchpad.net/gladky-anton/gnuplot/ubuntu/dists/maverick/main/binary-powerpc/Packages.bz2...
+Success downloading http://ppa.launchpad.net/gladky-anton/gnuplot/ubuntu/dists/maverick/main/binary-powerpc/Packages.bz2
Building download queue...
Download queue: 0 items (0 B)
diff --git a/system/t04_mirror/UpdateMirror9Test_gold b/system/t04_mirror/UpdateMirror9Test_gold
index 81f9d49b..84d8e129 100644
--- a/system/t04_mirror/UpdateMirror9Test_gold
+++ b/system/t04_mirror/UpdateMirror9Test_gold
@@ -171,6 +171,173 @@ Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/survival_
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/survival_2.43-3-1~jessiecran.0.dsc...
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/survival_2.43-3.orig.tar.gz...
Mirror `flat-src` has been successfully updated.
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/InRelease
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/Packages.bz2
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/Sources.bz2
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/boot_1.3-20-2~jessiecran.0.debian.tar.xz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/boot_1.3-20-2~jessiecran.0.dsc
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/boot_1.3-20.orig.tar.gz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/cluster_2.0.7-1-1~jessiecran.0.debian.tar.xz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/cluster_2.0.7-1-1~jessiecran.0.dsc
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/cluster_2.0.7-1.orig.tar.gz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/codetools_0.2-15-2~jessiecran.0.debian.tar.xz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/codetools_0.2-15-2~jessiecran.0.dsc
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/codetools_0.2-15.orig.tar.gz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/codetools_0.2-16-1~jessiecran.0.debian.tar.xz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/codetools_0.2-16-1~jessiecran.0.dsc
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/codetools_0.2-16.orig.tar.gz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/dh-r_20180403~jessiecran.0.dsc
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/dh-r_20180403~jessiecran.0.tar.xz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/dh-r_20180403~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/foreign_0.8.71-1~jessiecran.0.debian.tar.xz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/foreign_0.8.71-1~jessiecran.0.dsc
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/foreign_0.8.71.orig.tar.gz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/kernsmooth_2.23-15-3~jessiecran.0.diff.gz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/kernsmooth_2.23-15-3~jessiecran.0.dsc
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/kernsmooth_2.23-15.orig.tar.gz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/lattice_0.20-35-1~jessiecran.0.diff.gz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/lattice_0.20-35-1~jessiecran.0.dsc
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/lattice_0.20-35.orig.tar.gz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/lattice_0.20-38-1~jessiecran.0.debian.tar.xz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/lattice_0.20-38-1~jessiecran.0.dsc
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/lattice_0.20-38.orig.tar.gz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/littler_0.3.5-1~jessiecran.0.debian.tar.xz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/littler_0.3.5-1~jessiecran.0.dsc
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/littler_0.3.5-1~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/littler_0.3.5.orig.tar.gz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/littler_0.3.6-1~jessiecran.0.debian.tar.xz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/littler_0.3.6-1~jessiecran.0.dsc
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/littler_0.3.6-1~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/littler_0.3.6.orig.tar.gz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/mgcv_1.8-26-1~jessiecran.0.debian.tar.xz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/mgcv_1.8-26-1~jessiecran.0.dsc
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/mgcv_1.8-26.orig.tar.gz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/mgcv_1.8-27-1~jessiecran.0.debian.tar.xz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/mgcv_1.8-27-1~jessiecran.0.dsc
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/mgcv_1.8-27.orig.tar.gz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/nlme_3.1.137-1~jessiecran.0.debian.tar.xz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/nlme_3.1.137-1~jessiecran.0.dsc
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/nlme_3.1.137.orig.tar.gz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/pkg-r-autopkgtest_20180403~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/python3-rpy2_2.9.5-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/python3-rpy2_2.9.5-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base-core-dbg_3.5.2-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base-core-dbg_3.5.2-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base-core-dbg_3.5.3-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base-core-dbg_3.5.3-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base-core_3.5.2-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base-core_3.5.2-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base-core_3.5.3-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base-core_3.5.3-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base-dev_3.5.2-1~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base-dev_3.5.3-1~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base-html_3.5.2-1~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base-html_3.5.3-1~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base_3.5.2-1~jessiecran.0.debian.tar.xz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base_3.5.2-1~jessiecran.0.dsc
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base_3.5.2-1~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base_3.5.2.orig.tar.gz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base_3.5.3-1~jessiecran.0.debian.tar.xz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base_3.5.3-1~jessiecran.0.dsc
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base_3.5.3-1~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-base_3.5.3.orig.tar.gz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-boot_1.3-20-2~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-class_7.3-14-2~jessiecran.0.diff.gz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-class_7.3-14-2~jessiecran.0.dsc
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-class_7.3-14-2~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-class_7.3-14-2~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-class_7.3-14.orig.tar.gz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-class_7.3-15-1~jessiecran.0.debian.tar.xz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-class_7.3-15-1~jessiecran.0.dsc
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-class_7.3-15-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-class_7.3-15-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-class_7.3-15.orig.tar.gz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-cluster_2.0.7-1-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-cluster_2.0.7-1-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-coda_0.19-1-2~jessiecran.0.debian.tar.xz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-coda_0.19-1-2~jessiecran.0.dsc
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-coda_0.19-1-2~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-coda_0.19-1.orig.tar.gz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-codetools_0.2-15-2~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-codetools_0.2-16-1~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-foreign_0.8.71-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-foreign_0.8.71-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-kernsmooth_2.23-15-3~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-kernsmooth_2.23-15-3~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-lattice_0.20-35-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-lattice_0.20-35-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-lattice_0.20-38-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-lattice_0.20-38-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-littler_0.3.5-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-littler_0.3.5-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-littler_0.3.6-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-mass_7.3-51.1-1~jessiecran.0.debian.tar.xz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-mass_7.3-51.1-1~jessiecran.0.dsc
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-mass_7.3-51.1-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-mass_7.3-51.1-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-mass_7.3-51.1.orig.tar.gz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-matrix_1.2-15-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-matrix_1.2-15-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-matrix_1.2-16-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-matrix_1.2-16-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-mgcv_1.8-26-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-mgcv_1.8-26-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-mgcv_1.8-27-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-mgcv_1.8-27-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-nlme_3.1.137-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-nlme_3.1.137-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-nnet_7.3-12-2~jessiecran.0.diff.gz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-nnet_7.3-12-2~jessiecran.0.dsc
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-nnet_7.3-12-2~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-nnet_7.3-12-2~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-nnet_7.3-12.orig.tar.gz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-rodbc_1.3-15-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-rodbc_1.3-15-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-rpart_4.1-13-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-rpart_4.1-13-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-spatial_7.3-11-2~jessiecran.0.diff.gz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-spatial_7.3-11-2~jessiecran.0.dsc
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-spatial_7.3-11-2~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-spatial_7.3-11-2~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-spatial_7.3-11.orig.tar.gz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-survival_2.43-3-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-cran-survival_2.43-3-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-doc-html_3.5.2-1~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-doc-html_3.5.3-1~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-doc-info_3.5.2-1~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-doc-info_3.5.3-1~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-doc-pdf_3.5.2-1~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-doc-pdf_3.5.3-1~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-mathlib_3.5.2-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-mathlib_3.5.2-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-mathlib_3.5.3-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-mathlib_3.5.3-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-recommended_3.5.2-1~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/r-recommended_3.5.3-1~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/rkward-data_0.6.5-1~jessiecran.0_all.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/rkward_0.6.5-1~jessiecran.0.debian.tar.xz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/rkward_0.6.5-1~jessiecran.0.dsc
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/rkward_0.6.5-1~jessiecran.0_amd64.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/rkward_0.6.5-1~jessiecran.0_i386.deb
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/rkward_0.6.5.orig.tar.gz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/rmatrix_1.2-15-1~jessiecran.0.debian.tar.xz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/rmatrix_1.2-15-1~jessiecran.0.dsc
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/rmatrix_1.2-15.orig.tar.gz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/rmatrix_1.2-16-1~jessiecran.0.debian.tar.xz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/rmatrix_1.2-16-1~jessiecran.0.dsc
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/rmatrix_1.2-16.orig.tar.gz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/rodbc_1.3-15-1~jessiecran.0.diff.gz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/rodbc_1.3-15-1~jessiecran.0.dsc
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/rodbc_1.3-15.orig.tar.gz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/rpart_4.1-13-1~jessiecran.0.diff.gz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/rpart_4.1-13-1~jessiecran.0.dsc
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/rpart_4.1-13.orig.tar.gz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/rpy2_2.9.5-1~jessiecran.0.debian.tar.xz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/rpy2_2.9.5-1~jessiecran.0.dsc
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/rpy2_2.9.5.orig.tar.gz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/survival_2.43-3-1~jessiecran.0.debian.tar.xz
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/survival_2.43-3-1~jessiecran.0.dsc
+Success downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran35/survival_2.43-3.orig.tar.gz
gpgv: aka "Johannes Ranke "
gpgv: Good signature from "Johannes Ranke (Wissenschaftlicher Berater) "
gpgv: RSA key ID 115C3D8A
\ No newline at end of file
diff --git a/system/t04_mirror/create.py b/system/t04_mirror/create.py
index 4fb60768..111af25e 100644
--- a/system/t04_mirror/create.py
+++ b/system/t04_mirror/create.py
@@ -7,7 +7,7 @@ class CreateMirror1Test(BaseTest):
"""
create mirror: all architectures + all components
"""
- runCmd = "aptly mirror create --ignore-signatures mirror1 http://mirror.yandex.ru/debian/ stretch"
+ runCmd = "aptly mirror create --ignore-signatures mirror1 http://cdn-fastly.deb.debian.org/debian/ stretch"
def check(self):
self.check_output()
@@ -18,7 +18,7 @@ class CreateMirror2Test(BaseTest):
"""
create mirror: all architectures and 1 component
"""
- runCmd = "aptly mirror create --ignore-signatures mirror2 http://mirror.yandex.ru/debian/ stretch main"
+ runCmd = "aptly mirror create --ignore-signatures mirror2 http://cdn-fastly.deb.debian.org/debian/ stretch main"
def check(self):
self.check_output()
@@ -29,7 +29,7 @@ class CreateMirror3Test(BaseTest):
"""
create mirror: some architectures and 2 components
"""
- runCmd = "aptly -architectures=i386,amd64 mirror create --ignore-signatures mirror3 http://mirror.yandex.ru/debian/ stretch main contrib"
+ runCmd = "aptly -architectures=i386,amd64 mirror create --ignore-signatures mirror3 http://cdn-fastly.deb.debian.org/debian/ stretch main contrib"
def check(self):
self.check_output()
@@ -42,7 +42,7 @@ class CreateMirror4Test(BaseTest):
"""
expectedCode = 1
- runCmd = "aptly -architectures=i386,amd64 mirror create --ignore-signatures mirror4 http://mirror.yandex.ru/debian/ stretch life"
+ runCmd = "aptly -architectures=i386,amd64 mirror create --ignore-signatures mirror4 http://cdn-fastly.deb.debian.org/debian/ stretch life"
class CreateMirror5Test(BaseTest):
@@ -51,7 +51,7 @@ class CreateMirror5Test(BaseTest):
"""
expectedCode = 1
- runCmd = "aptly -architectures=i386,nano68 mirror create --ignore-signatures mirror5 http://mirror.yandex.ru/debian/ stretch"
+ runCmd = "aptly -architectures=i386,nano68 mirror create --ignore-signatures mirror5 http://cdn-fastly.deb.debian.org/debian/ stretch"
class CreateMirror6Test(BaseTest):
@@ -61,14 +61,15 @@ class CreateMirror6Test(BaseTest):
expectedCode = 1
requiresGPG1 = True
- runCmd = "aptly mirror create --keyring=aptlytest.gpg mirror6 http://mirror.yandex.ru/debian/ suslik"
+ configOverride = {"max-tries": 1}
+ runCmd = "aptly mirror create --keyring=aptlytest.gpg mirror6 http://cdn-fastly.deb.debian.org/debian/ suslik"
class CreateMirror7Test(BaseTest):
"""
create mirror: architectures fixed via config file
"""
- runCmd = "aptly mirror create --ignore-signatures mirror7 http://mirror.yandex.ru/debian/ stretch main contrib"
+ runCmd = "aptly mirror create --ignore-signatures mirror7 http://cdn-fastly.deb.debian.org/debian/ stretch main contrib"
configOverride = {"architectures": ["i386", "amd64"]}
def check(self):
@@ -81,9 +82,9 @@ class CreateMirror8Test(BaseTest):
create mirror: already exists
"""
fixtureCmds = [
- "aptly mirror create --ignore-signatures mirror8 http://mirror.yandex.ru/debian/ stretch main contrib"
+ "aptly mirror create --ignore-signatures mirror8 http://cdn-fastly.deb.debian.org/debian/ stretch main contrib"
]
- runCmd = "aptly mirror create --ignore-signatures mirror8 http://mirror.yandex.ru/debian/ stretch main contrib"
+ runCmd = "aptly mirror create --ignore-signatures mirror8 http://cdn-fastly.deb.debian.org/debian/ stretch main contrib"
expectedCode = 1
@@ -91,7 +92,7 @@ class CreateMirror9Test(BaseTest):
"""
create mirror: repo with InRelease verification
"""
- runCmd = "aptly mirror create --keyring=aptlytest.gpg mirror9 http://mirror.yandex.ru/debian/ stretch-backports"
+ runCmd = "aptly mirror create --keyring=aptlytest.gpg mirror9 http://cdn-fastly.deb.debian.org/debian/ stretch-backports"
fixtureGpg = True
requiresGPG1 = True
@@ -103,14 +104,15 @@ class CreateMirror9Test(BaseTest):
return re.sub(r"(Date|Valid-Until): [,0-9:+A-Za-z -]+\n", "", s)
self.check_output()
- self.check_cmd_output("aptly mirror show mirror9", "mirror_show", match_prepare=removeDates)
+ self.check_cmd_output("aptly mirror show mirror9",
+ "mirror_show", match_prepare=removeDates)
class CreateMirror10Test(BaseTest):
"""
create mirror: repo with InRelease verification, failure
"""
- runCmd = "aptly mirror create --keyring=aptlytest.gpg mirror10 http://mirror.yandex.ru/debian/ stretch-backports"
+ runCmd = "aptly mirror create --keyring=aptlytest.gpg mirror10 http://cdn-fastly.deb.debian.org/debian/ stretch-backports"
fixtureGpg = False
gold_processor = BaseTest.expand_environ
expectedCode = 1
@@ -123,7 +125,8 @@ class CreateMirror11Test(BaseTest):
"""
create mirror: repo with Release + Release.gpg verification
"""
- runCmd = "aptly mirror create --keyring=aptlytest.gpg mirror11 http://mirror.yandex.ru/debian/ stretch"
+ configOverride = {"max-tries": 1}
+ runCmd = "aptly mirror create --keyring=aptlytest.gpg mirror11 http://cdn-fastly.deb.debian.org/debian/ stretch"
fixtureGpg = True
def outputMatchPrepare(self, s):
@@ -138,7 +141,8 @@ class CreateMirror12Test(BaseTest):
"""
create mirror: repo with Release+Release.gpg verification, failure
"""
- runCmd = "aptly mirror create --keyring=aptlytest.gpg mirror12 http://mirror.yandex.ru/debian/ stretch"
+ configOverride = {"max-tries": 1}
+ runCmd = "aptly mirror create --keyring=aptlytest.gpg mirror12 http://cdn-fastly.deb.debian.org/debian/ stretch"
fixtureGpg = False
gold_processor = BaseTest.expand_environ
expectedCode = 1
@@ -151,7 +155,7 @@ class CreateMirror13Test(BaseTest):
"""
create mirror: skip verification using config file
"""
- runCmd = "aptly mirror create mirror13 http://mirror.yandex.ru/debian/ stretch"
+ runCmd = "aptly mirror create mirror13 http://cdn-fastly.deb.debian.org/debian/ stretch"
configOverride = {"gpgDisableVerify": True}
def check(self):
@@ -174,7 +178,8 @@ class CreateMirror14Test(BaseTest):
return re.sub(r"(Date|Valid-Until): [,0-9:+A-Za-z -]+\n", "", s)
self.check_output()
- self.check_cmd_output("aptly mirror show mirror14", "mirror_show", match_prepare=removeDates)
+ self.check_cmd_output("aptly mirror show mirror14",
+ "mirror_show", match_prepare=removeDates)
class CreateMirror15Test(BaseTest):
@@ -191,14 +196,14 @@ class CreateMirror16Test(BaseTest):
"""
expectedCode = 1
- runCmd = "aptly -architectures=source mirror create -ignore-signatures mirror16 http://mirror.yandex.ru/debian/ stretch"
+ runCmd = "aptly -architectures=source mirror create -ignore-signatures mirror16 http://cdn-fastly.deb.debian.org/debian/ stretch"
class CreateMirror17Test(BaseTest):
"""
create mirror: mirror with sources enabled
"""
- runCmd = "aptly -architectures=i386 mirror create -ignore-signatures -with-sources mirror17 http://mirror.yandex.ru/debian/ stretch"
+ runCmd = "aptly -architectures=i386 mirror create -ignore-signatures -with-sources mirror17 http://cdn-fastly.deb.debian.org/debian/ stretch"
def check(self):
self.check_output()
@@ -211,6 +216,7 @@ class CreateMirror18Test(BaseTest):
"""
fixtureGpg = True
configOverride = {
+ "max-tries": 1,
"ppaDistributorID": "ubuntu",
"ppaCodename": "maverick",
}
@@ -241,7 +247,8 @@ class CreateMirror19Test(BaseTest):
return re.sub(r"(Date|Valid-Until): [,0-9:+A-Za-z -]+\n", "", s)
self.check_output()
- self.check_cmd_output("aptly mirror show mirror19", "mirror_show", match_prepare=removeDates)
+ self.check_cmd_output("aptly mirror show mirror19",
+ "mirror_show", match_prepare=removeDates)
class CreateMirror20Test(BaseTest):
@@ -249,20 +256,30 @@ class CreateMirror20Test(BaseTest):
create mirror: using failing HTTP_PROXY
"""
fixtureGpg = True
+ configOverride = {"max-tries": 1}
runCmd = "aptly -architectures='i386' mirror create -keyring=aptlytest.gpg -with-sources mirror20 http://security.debian.org/ stretch/updates main"
environmentOverride = {"HTTP_PROXY": "127.0.0.1:3137"}
expectedCode = 1
def outputMatchPrepare(self, s):
- return s.replace('getsockopt: ', '').replace('connect: ', ''). \
- replace('proxyconnect tcp', 'http: error connecting to proxy http://127.0.0.1:3137')
+ return s.replace(
+ 'getsockopt: ', ''
+ ).replace(
+ 'connect: ', ''
+ ).replace(
+ 'proxyconnect tcp', 'http: error connecting to proxy http://127.0.0.1:3137'
+ ).replace(
+ 'Get http://security.debian.org/dists/stretch/updates/Release:',
+ 'Get "http://security.debian.org/dists/stretch/updates/Release":'
+ )
class CreateMirror21Test(BaseTest):
"""
create mirror: flat repository in subdir
"""
+ configOverride = {"max-tries": 1}
runCmd = "aptly mirror create -keyring=aptlytest.gpg mirror21 http://pkg.jenkins-ci.org/debian-stable binary/"
fixtureGpg = True
@@ -277,7 +294,8 @@ class CreateMirror21Test(BaseTest):
return re.sub(r"(Date|Valid-Until): [,0-9:+A-Za-z -]+\n", "", s)
self.check_output()
- self.check_cmd_output("aptly mirror show mirror21", "mirror_show", match_prepare=lambda s: removeSHA512(removeDates(s)))
+ self.check_cmd_output("aptly mirror show mirror21", "mirror_show",
+ match_prepare=lambda s: removeSHA512(removeDates(s)))
class CreateMirror22Test(BaseTest):
@@ -291,7 +309,8 @@ class CreateMirror22Test(BaseTest):
return re.sub(r"(Date|Valid-Until): [,0-9:+A-Za-z -]+\n", "", s)
self.check_output()
- self.check_cmd_output("aptly mirror show mirror22", "mirror_show", match_prepare=removeDates)
+ self.check_cmd_output("aptly mirror show mirror22",
+ "mirror_show", match_prepare=removeDates)
class CreateMirror23Test(BaseTest):
@@ -321,7 +340,7 @@ class CreateMirror25Test(BaseTest):
"""
create mirror: mirror with udebs enabled
"""
- runCmd = "aptly -architectures=i386 mirror create -ignore-signatures -with-udebs mirror25 http://mirror.yandex.ru/debian/ stretch"
+ runCmd = "aptly -architectures=i386 mirror create -ignore-signatures -with-udebs mirror25 http://cdn-fastly.deb.debian.org/debian/ stretch"
def check(self):
self.check_output()
@@ -337,37 +356,25 @@ class CreateMirror26Test(BaseTest):
expectedCode = 1
-# TODO: disabled as linux.dell.com doesn't resolve
-# class CreateMirror27Test(BaseTest):
-# """
-# create mirror: component with slashes, no stripping
-# """
-# runCmd = "aptly mirror create --ignore-signatures mirror27 http://linux.dell.com/repo/community/ubuntu wheezy openmanage/740"
-
-# def check(self):
-# self.check_output()
-# self.check_cmd_output("aptly mirror show mirror27", "mirror_show")
-
-
-class CreateMirror28Test(BaseTest):
+class CreateMirror27Test(BaseTest):
"""
- create mirror: -force-components
+ create mirror: component with slashes, no stripping
"""
- runCmd = "aptly mirror create -ignore-signatures -force-components mirror28 http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen"
+ runCmd = "aptly mirror create --ignore-signatures mirror27 https://mirror.chpc.utah.edu/pub/linux.dell.com/repo/community/ubuntu wheezy openmanage/740"
+
+ def outputMatchPrepare(self, s):
+ return self.strip_retry_lines(s)
def check(self):
- def removeDates(s):
- return re.sub(r"(Date|Valid-Until): [,0-9:+A-Za-z -]+\n", "", s)
-
self.check_output()
- self.check_cmd_output("aptly mirror show mirror28", "mirror_show", match_prepare=removeDates)
+ self.check_cmd_output("aptly mirror show mirror27", "mirror_show")
class CreateMirror29Test(BaseTest):
"""
create mirror: repo with InRelease verification (internal GPG implementation)
"""
- runCmd = "aptly mirror create --keyring=aptlytest.gpg mirror9 http://mirror.yandex.ru/debian/ stretch-backports"
+ runCmd = "aptly mirror create --keyring=aptlytest.gpg mirror9 http://cdn-fastly.deb.debian.org/debian/ stretch-backports"
configOverride = {"gpgProvider": "internal"}
fixtureGpg = True
@@ -379,8 +386,8 @@ class CreateMirror30Test(BaseTest):
"""
create mirror: repo with InRelease verification, failure (internal GPG implementation)
"""
- runCmd = "aptly mirror create --keyring=aptlytest.gpg mirror10 http://mirror.yandex.ru/debian-backports/ squeeze-backports"
- configOverride = {"gpgProvider": "internal"}
+ runCmd = "aptly mirror create --keyring=aptlytest.gpg mirror10 http://cdn-fastly.deb.debian.org/debian/ stretch"
+ configOverride = {"gpgProvider": "internal", "max-tries": 1}
gold_processor = BaseTest.expand_environ
fixtureGpg = False
expectedCode = 1
@@ -393,8 +400,8 @@ class CreateMirror31Test(BaseTest):
"""
create mirror: repo with Release + Release.gpg verification (internal GPG implementation)
"""
- runCmd = "aptly mirror create --keyring=aptlytest.gpg mirror11 http://mirror.yandex.ru/debian/ stretch"
- configOverride = {"gpgProvider": "internal"}
+ runCmd = "aptly mirror create --keyring=aptlytest.gpg mirror11 http://cdn-fastly.deb.debian.org/debian/ stretch"
+ configOverride = {"gpgProvider": "internal", "max-tries": 1}
fixtureGpg = True
def outputMatchPrepare(self, s):
@@ -405,7 +412,8 @@ class CreateMirror32Test(BaseTest):
"""
create mirror: repo with Release + Release.gpg verification (gpg2)
"""
- runCmd = "aptly mirror create --keyring=aptlytest.gpg mirror32 http://mirror.yandex.ru/debian/ stretch"
+ configOverride = {"max-tries": 1}
+ runCmd = "aptly mirror create --keyring=aptlytest.gpg mirror32 http://cdn-fastly.deb.debian.org/debian/ stretch"
fixtureGpg = True
requiresGPG2 = True
diff --git a/system/t04_mirror/drop.py b/system/t04_mirror/drop.py
index 953059d0..36a16f6d 100644
--- a/system/t04_mirror/drop.py
+++ b/system/t04_mirror/drop.py
@@ -6,7 +6,7 @@ class DropMirror1Test(BaseTest):
drop mirror: regular list
"""
fixtureCmds = [
- "aptly mirror create --ignore-signatures mirror1 http://mirror.yandex.ru/debian/ stretch",
+ "aptly mirror create --ignore-signatures mirror1 http://cdn-fastly.deb.debian.org/debian/ stretch",
]
runCmd = "aptly mirror drop mirror1"
diff --git a/system/t04_mirror/edit.py b/system/t04_mirror/edit.py
index 4a27506c..ad274a68 100644
--- a/system/t04_mirror/edit.py
+++ b/system/t04_mirror/edit.py
@@ -65,7 +65,7 @@ class EditMirror6Test(BaseTest):
edit mirror: change architectures
"""
fixtureCmds = [
- "aptly mirror create -ignore-signatures -architectures=amd64 mirror6 http://mirror.yandex.ru/debian stretch main"
+ "aptly mirror create -ignore-signatures -architectures=amd64 mirror6 http://cdn-fastly.deb.debian.org/debian stretch main"
]
runCmd = "aptly mirror edit -ignore-signatures -architectures=amd64,i386 mirror6"
@@ -79,7 +79,7 @@ class EditMirror7Test(BaseTest):
edit mirror: change architectures to missing archs
"""
fixtureCmds = [
- "aptly mirror create -ignore-signatures -architectures=amd64 stretch http://mirror.yandex.ru/debian stretch main"
+ "aptly mirror create -ignore-signatures -architectures=amd64 stretch http://cdn-fastly.deb.debian.org/debian stretch main"
]
runCmd = "aptly mirror edit -ignore-signatures -architectures=amd64,x56 stretch"
expectedCode = 1
diff --git a/system/t04_mirror/list.py b/system/t04_mirror/list.py
index 0e8e529f..7b02e288 100644
--- a/system/t04_mirror/list.py
+++ b/system/t04_mirror/list.py
@@ -1,4 +1,5 @@
from lib import BaseTest
+import re
class ListMirror1Test(BaseTest):
@@ -6,9 +7,9 @@ class ListMirror1Test(BaseTest):
list mirrors: regular list
"""
fixtureCmds = [
- "aptly mirror create --ignore-signatures mirror1 http://mirror.yandex.ru/debian/ stretch",
- "aptly mirror create -with-sources --ignore-signatures mirror2 http://mirror.yandex.ru/debian/ stretch contrib",
- "aptly -architectures=i386 mirror create --ignore-signatures mirror3 http://mirror.yandex.ru/debian/ stretch non-free",
+ "aptly mirror create --ignore-signatures mirror1 http://cdn-fastly.deb.debian.org/debian/ stretch",
+ "aptly mirror create -with-sources --ignore-signatures mirror2 http://cdn-fastly.deb.debian.org/debian/ stretch contrib",
+ "aptly -architectures=i386 mirror create --ignore-signatures mirror3 http://cdn-fastly.deb.debian.org/debian/ stretch non-free",
"aptly mirror create -ignore-signatures mirror4 http://download.opensuse.org/repositories/Apache:/MirrorBrain/Debian_9.0/ ./",
]
runCmd = "aptly mirror list"
@@ -34,3 +35,26 @@ class ListMirror4Test(BaseTest):
list mirrors: raw empty list
"""
runCmd = "aptly -raw mirror list"
+
+
+class ListMirror5Test(BaseTest):
+ """
+ list mirrors: json empty list
+ """
+ runCmd = "aptly mirror list -json"
+
+
+class ListMirror6Test(BaseTest):
+ """
+ list mirrors: regular list
+ """
+ fixtureCmds = [
+ "aptly mirror create --ignore-signatures mirror1 http://cdn-fastly.deb.debian.org/debian/ stretch",
+ "aptly mirror create -with-sources --ignore-signatures mirror2 http://cdn-fastly.deb.debian.org/debian/ stretch contrib",
+ "aptly -architectures=i386 mirror create --ignore-signatures mirror3 http://cdn-fastly.deb.debian.org/debian/ stretch non-free",
+ "aptly mirror create -ignore-signatures mirror4 http://download.opensuse.org/repositories/Apache:/MirrorBrain/Debian_9.0/ ./",
+ ]
+ runCmd = "aptly mirror list -json"
+
+ def outputMatchPrepare(_, s):
+ return re.sub(r'[ ]*"UUID": "[\w-]+",?\n', '', s)
diff --git a/system/t04_mirror/show.py b/system/t04_mirror/show.py
index e6407ea6..ce1d25d4 100644
--- a/system/t04_mirror/show.py
+++ b/system/t04_mirror/show.py
@@ -6,7 +6,7 @@ class ShowMirror1Test(BaseTest):
"""
show mirror: regular mirror
"""
- fixtureCmds = ["aptly mirror create --ignore-signatures mirror1 http://mirror.yandex.ru/debian/ stretch"]
+ fixtureCmds = ["aptly mirror create --ignore-signatures mirror1 http://cdn-fastly.deb.debian.org/debian/ stretch"]
runCmd = "aptly mirror show mirror1"
@@ -40,3 +40,46 @@ class ShowMirror4Test(BaseTest):
def outputMatchPrepare(self, s):
return re.sub(r"(Date|Valid-Until): [,0-9:+A-Za-z -]+\n", "", s)
+
+
+class ShowMirror5Test(BaseTest):
+ """
+ show mirror: regular mirror
+ """
+ fixtureCmds = ["aptly mirror create --ignore-signatures mirror1 http://cdn-fastly.deb.debian.org/debian/ stretch"]
+ runCmd = "aptly mirror show -json mirror1"
+
+ def outputMatchPrepare(_, s):
+ return re.sub(r'[ ]*"UUID": "[\w-]+",?\n', '', s)
+
+
+class ShowMirror6Test(BaseTest):
+ """
+ show mirror: missing mirror
+ """
+ runCmd = "aptly mirror show -json mirror-xx"
+ expectedCode = 1
+
+
+class ShowMirror7Test(BaseTest):
+ """
+ show mirror: regular mirror with packages
+ """
+ fixtureDB = True
+ runCmd = "aptly mirror show -json --with-packages wheezy-contrib"
+
+
+class ShowMirror8Test(BaseTest):
+ """
+ show mirror: mirror with filter
+ """
+ fixtureCmds = [
+ "aptly mirror create -ignore-signatures -filter='nginx | Priority (required)' -filter-with-deps=true mirror4 http://security.debian.org/ stretch/updates main"
+ ]
+ runCmd = "aptly mirror show -json mirror4"
+
+ def outputMatchPrepare(self, s):
+ s = re.sub(r'[ ]*"UUID": "[\w-]+",?\n', '', s)
+ s = re.sub('"Date": .*', '"Date": "anytime",', s)
+ s = re.sub('"Valid-Until": .*', '"Valid-Until": "anytime",', s)
+ return s
diff --git a/system/t04_mirror/update.py b/system/t04_mirror/update.py
index ef4c2669..1e99d4b7 100644
--- a/system/t04_mirror/update.py
+++ b/system/t04_mirror/update.py
@@ -10,18 +10,21 @@ def filterOutSignature(_, s):
return re.sub(r'Signature made .* using', '', s)
+def filterOutRedirects(_, s):
+ return re.sub(r'Following redirect to .+?\n', '', s)
+
+
class UpdateMirror1Test(BaseTest):
"""
update mirrors: regular update
"""
+ sortOutput = True
longTest = False
fixtureCmds = [
"aptly -architectures=i386,amd64 mirror create --ignore-signatures varnish https://packagecloud.io/varnishcache/varnish30/debian/ wheezy main",
]
runCmd = "aptly mirror update --ignore-signatures varnish"
-
- def output_processor(self, output):
- return "\n".join(sorted(output.split("\n")))
+ outputMatchPrepare = filterOutRedirects
class UpdateMirror2Test(BaseTest):
@@ -40,6 +43,9 @@ class UpdateMirror3Test(BaseTest):
"aptly mirror create --ignore-signatures failure ${url} hardy main",
]
fixtureWebServer = "test_release"
+ configOverride = {
+ "downloadRetries": 0,
+ }
runCmd = "aptly mirror update --ignore-signatures failure"
expectedCode = 1
@@ -55,6 +61,9 @@ class UpdateMirror4Test(BaseTest):
"aptly mirror create --ignore-signatures failure ${url} hardy main",
]
fixtureWebServer = "test_release"
+ configOverride = {
+ "downloadRetries": 0,
+ }
runCmd = "aptly mirror update -ignore-checksums --ignore-signatures failure"
expectedCode = 1
@@ -70,6 +79,9 @@ class UpdateMirror5Test(BaseTest):
"aptly mirror create --ignore-signatures failure ${url} hardy main",
]
fixtureWebServer = "test_release2"
+ configOverride = {
+ "downloadRetries": 0,
+ }
runCmd = "aptly mirror update --ignore-signatures failure"
expectedCode = 1
@@ -85,6 +97,10 @@ class UpdateMirror6Test(BaseTest):
"aptly mirror create --ignore-signatures failure ${url} hardy main",
]
fixtureWebServer = "test_release2"
+ configOverride = {
+ "downloadRetries": 0,
+ }
+
runCmd = "aptly mirror update -ignore-checksums --ignore-signatures failure"
def gold_processor(self, gold):
@@ -95,6 +111,7 @@ class UpdateMirror7Test(BaseTest):
"""
update mirrors: flat repository
"""
+ sortOutput = True
fixtureGpg = True
fixtureCmds = [
"aptly mirror create --keyring=aptlytest.gpg -architectures=amd64 flat https://cloud.r-project.org/bin/linux/debian jessie-cran35/",
@@ -102,14 +119,13 @@ class UpdateMirror7Test(BaseTest):
runCmd = "aptly mirror update --keyring=aptlytest.gpg flat"
outputMatchPrepare = filterOutSignature
- def output_processor(self, output):
- return "\n".join(sorted(output.split("\n")))
-
class UpdateMirror8Test(BaseTest):
"""
update mirrors: with sources (already in pool)
"""
+ configOverride = {"max-tries": 1}
+
fixtureGpg = True
fixturePool = True
fixtureCmds = [
@@ -123,6 +139,7 @@ class UpdateMirror9Test(BaseTest):
"""
update mirrors: flat repository + sources
"""
+ sortOutput = True
fixtureGpg = True
fixtureCmds = [
"aptly mirror create --keyring=aptlytest.gpg -with-sources flat-src https://cloud.r-project.org/bin/linux/debian jessie-cran35/",
@@ -130,14 +147,12 @@ class UpdateMirror9Test(BaseTest):
runCmd = "aptly mirror update --keyring=aptlytest.gpg flat-src"
outputMatchPrepare = filterOutSignature
- def output_processor(self, output):
- return "\n".join(sorted(output.split("\n")))
-
class UpdateMirror10Test(BaseTest):
"""
update mirrors: filtered
"""
+ sortOutput = True
fixtureGpg = True
fixtureCmds = [
"aptly mirror create -keyring=aptlytest.gpg -with-sources -filter='!(Name (% r-*)), !($$PackageType (source))' flat-src https://cloud.r-project.org/bin/linux/debian jessie-cran35/",
@@ -145,89 +160,88 @@ class UpdateMirror10Test(BaseTest):
runCmd = "aptly mirror update --keyring=aptlytest.gpg flat-src"
outputMatchPrepare = filterOutSignature
- def output_processor(self, output):
- return "\n".join(sorted(output.split("\n")))
-
class UpdateMirror11Test(BaseTest):
"""
update mirrors: update over FTP
"""
+ configOverride = {"max-tries": 1}
+ sortOutput = True
longTest = False
fixtureGpg = True
requiresFTP = True
fixtureCmds = [
- "aptly mirror create -keyring=aptlytest.gpg -filter='Priority (required), Name (% s*)' -architectures=i386 stretch-main ftp://ftp.ru.debian.org/debian/ stretch main",
+ "aptly mirror create -keyring=aptlytest.gpg -filter='Priority (required), Name (% s*)' "
+ "-architectures=i386 stretch-main https://snapshot.debian.org/archive/debian/20220201T025006Z/ stretch main",
]
outputMatchPrepare = filterOutSignature
runCmd = "aptly mirror update -keyring=aptlytest.gpg stretch-main"
- def output_processor(self, output):
- return "\n".join(sorted(output.split("\n")))
-
class UpdateMirror12Test(BaseTest):
"""
update mirrors: update with udebs
"""
+ configOverride = {"max-tries": 1}
+ sortOutput = True
longTest = False
fixtureGpg = True
fixtureCmds = [
- "aptly -architectures=i386,amd64 mirror create -keyring=aptlytest.gpg -filter='$$Source (gnupg2)' -with-udebs stretch http://mirror.yandex.ru/debian/ stretch main non-free",
+ "aptly -architectures=i386,amd64 mirror create -keyring=aptlytest.gpg -filter='$$Source (gnupg2)' -with-udebs stretch http://cdn-fastly.deb.debian.org/debian/ stretch main non-free",
]
runCmd = "aptly mirror update -keyring=aptlytest.gpg stretch"
outputMatchPrepare = filterOutSignature
- def output_processor(self, output):
- return "\n".join(sorted(output.split("\n")))
-
class UpdateMirror13Test(BaseTest):
"""
update mirrors: regular update with --skip-existing-packages option
"""
+ sortOutput = True
longTest = False
fixtureCmds = [
"aptly -architectures=i386,amd64 mirror create --ignore-signatures varnish https://packagecloud.io/varnishcache/varnish30/debian/ wheezy main",
]
runCmd = "aptly mirror update --ignore-signatures --skip-existing-packages varnish"
-
- def output_processor(self, output):
- return "\n".join(sorted(output.split("\n")))
+ outputMatchPrepare = filterOutRedirects
class UpdateMirror14Test(BaseTest):
"""
update mirrors: regular update with --skip-existing-packages option
"""
+ sortOutput = True
longTest = False
fixtureCmds = [
"aptly -architectures=i386,amd64 mirror create --ignore-signatures varnish https://packagecloud.io/varnishcache/varnish30/debian/ wheezy main",
"aptly mirror update --ignore-signatures --skip-existing-packages varnish"
]
runCmd = "aptly mirror update --ignore-signatures --skip-existing-packages varnish"
-
- def output_processor(self, output):
- return "\n".join(sorted(output.split("\n")))
+ outputMatchPrepare = filterOutRedirects
class UpdateMirror15Test(BaseTest):
"""
update mirrors: update for mirror without MD5 checksums
"""
+ # TODO spin up a Python server to serve that data from fixtures directory, instead of using bintray
+ # e.g. python3 -m http.server --directory src/aptly/system/t04_mirror/test_release/
+ # but that fixture seems to have the wrong hashes...
+ skipTest = "Using deprecated service - bintray"
+ sortOutput = True
longTest = False
fixtureCmds = [
"aptly mirror create --ignore-signatures bintray https://dl.bintray.com/smira/deb/ ./",
+ # TODO note the ./ is "flat" whereas putting "hardy" looks into dists/hardy
+ # "aptly mirror create --ignore-signatures bintray http://localhost:8000/ hardy",
]
runCmd = "aptly mirror update --ignore-signatures bintray"
- def output_processor(self, output):
- return "\n".join(sorted(output.split("\n")))
-
def check(self):
super(UpdateMirror15Test, self).check()
# check pool
- self.check_exists('pool/c7/6b/4bd12fd92e4dfe1b55b18a67a669_libboost-program-options-dev_1.49.0.1_i386.deb')
+ self.check_exists(
+ 'pool/c7/6b/4bd12fd92e4dfe1b55b18a67a669_libboost-program-options-dev_1.49.0.1_i386.deb')
class UpdateMirror16Test(BaseTest):
@@ -236,19 +250,19 @@ class UpdateMirror16Test(BaseTest):
as mirror lacks MD5 checksum, file would be downloaded but not re-imported
"""
+ skipTest = "Using deprecated service - bintray"
+ sortOutput = True
longTest = False
fixtureCmds = [
"aptly mirror create --ignore-signatures bintray https://dl.bintray.com/smira/deb/ ./",
]
runCmd = "aptly mirror update --ignore-signatures bintray"
- def output_processor(self, output):
- return "\n".join(sorted(output.split("\n")))
-
def prepare(self):
super(UpdateMirror16Test, self).prepare()
- os.makedirs(os.path.join(os.environ["HOME"], ".aptly", "pool", "00", "35"))
+ os.makedirs(os.path.join(
+ os.environ["HOME"], ".aptly", "pool", "00", "35"))
shutil.copy(os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "libboost-program-options-dev_1.49.0.1_i386.deb"),
os.path.join(os.environ["HOME"], ".aptly", "pool", "00", "35"))
@@ -256,26 +270,26 @@ class UpdateMirror16Test(BaseTest):
def check(self):
super(UpdateMirror16Test, self).check()
# check pool
- self.check_not_exists('pool/c7/6b/4bd12fd92e4dfe1b55b18a67a669_libboost-program-options-dev_1.49.0.1_i386.deb')
+ self.check_not_exists(
+ 'pool/c7/6b/4bd12fd92e4dfe1b55b18a67a669_libboost-program-options-dev_1.49.0.1_i386.deb')
class UpdateMirror17Test(BaseTest):
"""
update mirrors: update for mirror but with file in pool on legacy MD5 location
"""
+ sortOutput = True
longTest = False
fixtureCmds = [
- "aptly mirror create -ignore-signatures -architectures=i386 -filter=libboost-program-options-dev stretch http://mirror.yandex.ru/debian stretch main",
+ "aptly mirror create -ignore-signatures -architectures=i386 -filter=libboost-program-options-dev stretch http://cdn-fastly.deb.debian.org/debian stretch main",
]
runCmd = "aptly mirror update -ignore-signatures stretch"
- def output_processor(self, output):
- return "\n".join(sorted(output.split("\n")))
-
def prepare(self):
super(UpdateMirror17Test, self).prepare()
- os.makedirs(os.path.join(os.environ["HOME"], ".aptly", "pool", "e0", "bb"))
+ os.makedirs(os.path.join(
+ os.environ["HOME"], ".aptly", "pool", "e0", "bb"))
shutil.copy(os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "libboost-program-options-dev_1.62.0.1_i386.deb"),
os.path.join(os.environ["HOME"], ".aptly", "pool", "e0", "bb"))
@@ -283,27 +297,27 @@ class UpdateMirror17Test(BaseTest):
def check(self):
super(UpdateMirror17Test, self).check()
# check pool
- self.check_not_exists('pool/db/a2/f225645a2a8bd8378e2f64bd1faa_libboost-program-options-dev_1.62.0.1_i386.deb')
+ self.check_not_exists(
+ 'pool/db/a2/f225645a2a8bd8378e2f64bd1faa_libboost-program-options-dev_1.62.0.1_i386.deb')
class UpdateMirror18Test(BaseTest):
"""
update mirrors: update for mirror but with file in pool on legacy MD5 location and disabled legacy path support
"""
+ sortOutput = True
longTest = False
fixtureCmds = [
- "aptly mirror create -ignore-signatures -architectures=i386 -filter=libboost-program-options-dev stretch http://mirror.yandex.ru/debian stretch main",
+ "aptly mirror create -ignore-signatures -architectures=i386 -filter=libboost-program-options-dev stretch http://cdn-fastly.deb.debian.org/debian stretch main",
]
runCmd = "aptly mirror update -ignore-signatures stretch"
configOverride = {'skipLegacyPool': True}
- def output_processor(self, output):
- return "\n".join(sorted(output.split("\n")))
-
def prepare(self):
super(UpdateMirror18Test, self).prepare()
- os.makedirs(os.path.join(os.environ["HOME"], ".aptly", "pool", "e0", "bb"))
+ os.makedirs(os.path.join(
+ os.environ["HOME"], ".aptly", "pool", "e0", "bb"))
shutil.copy(os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "libboost-program-options-dev_1.62.0.1_i386.deb"),
os.path.join(os.environ["HOME"], ".aptly", "pool", "e0", "bb"))
@@ -311,56 +325,56 @@ class UpdateMirror18Test(BaseTest):
def check(self):
super(UpdateMirror18Test, self).check()
# check pool
- self.check_exists('pool/db/a2/f225645a2a8bd8378e2f64bd1faa_libboost-program-options-dev_1.62.0.1_i386.deb')
+ self.check_exists(
+ 'pool/db/a2/f225645a2a8bd8378e2f64bd1faa_libboost-program-options-dev_1.62.0.1_i386.deb')
class UpdateMirror19Test(BaseTest):
"""
update mirrors: correct matching of Release checksums
"""
+ configOverride = {"max-tries": 1}
longTest = False
fixtureGpg = True
fixtureCmds = [
- "aptly mirror create --keyring=aptlytest.gpg pagerduty http://packages.pagerduty.com/pdagent deb/"
+ "aptly mirror create --keyring=aptlytest.gpg pagerduty https://packages.pagerduty.com/pdagent deb/"
]
runCmd = "aptly mirror update --keyring=aptlytest.gpg pagerduty"
outputMatchPrepare = filterOutSignature
def output_processor(self, output):
- return "\n".join(line for line in output.split("\n") if ".deb" not in line)
+ return "\n".join(line for line in self.ensure_utf8(output).split("\n") if ".deb" not in line)
class UpdateMirror20Test(BaseTest):
"""
update mirrors: flat repository (internal GPG implementation)
"""
+ sortOutput = True
fixtureGpg = True
fixtureCmds = [
- "aptly mirror create --keyring=aptlytest.gpg -architectures=amd64 flat https://cloud.r-project.org/bin/linux/debian jessie-cran35/",
+ "aptly mirror create --keyring=aptlytest.gpg -architectures=amd64 --filter='r-cran-class' flat https://cloud.r-project.org/bin/linux/debian jessie-cran35/",
]
configOverride = {"gpgProvider": "internal"}
runCmd = "aptly mirror update --keyring=aptlytest.gpg flat"
outputMatchPrepare = filterOutSignature
- def output_processor(self, output):
- return "\n".join(sorted(output.split("\n")))
-
class UpdateMirror21Test(BaseTest):
"""
update mirrors: correct matching of Release checksums (internal pgp implementation)
"""
longTest = False
- configOverride = {"gpgProvider": "internal"}
+ configOverride = {"gpgProvider": "internal", "max-tries": 1}
fixtureGpg = True
fixtureCmds = [
- "aptly mirror create --keyring=aptlytest.gpg pagerduty http://packages.pagerduty.com/pdagent deb/"
+ "aptly mirror create --keyring=aptlytest.gpg pagerduty https://packages.pagerduty.com/pdagent deb/"
]
runCmd = "aptly mirror update --keyring=aptlytest.gpg pagerduty"
outputMatchPrepare = filterOutSignature
def output_processor(self, output):
- return "\n".join(line for line in output.split("\n") if ".deb" not in line)
+ return "\n".join(line for line in self.ensure_utf8(output).split("\n") if ".deb" not in line)
class UpdateMirror22Test(BaseTest):
@@ -382,29 +396,27 @@ class UpdateMirror23Test(BaseTest):
"""
update mirrors: update with installer
"""
+ configOverride = {"max-tries": 1}
+ sortOutput = True
longTest = False
fixtureGpg = True
fixtureCmds = [
- "aptly -architectures=s390x mirror create -keyring=aptlytest.gpg -filter='installer' -with-installer stretch http://mirror.yandex.ru/debian/ stretch main non-free",
+ "aptly -architectures=s390x mirror create -keyring=aptlytest.gpg -filter='installer' -with-installer stretch http://cdn-fastly.deb.debian.org/debian/ stretch main non-free",
]
runCmd = "aptly mirror update -keyring=aptlytest.gpg stretch"
outputMatchPrepare = filterOutSignature
- def output_processor(self, output):
- return "\n".join(sorted(output.split("\n")))
-
class UpdateMirror24Test(BaseTest):
"""
update mirrors: update with installer with separate gpg file
"""
+ configOverride = {"max-tries": 1}
+ sortOutput = True
longTest = False
fixtureGpg = True
fixtureCmds = [
- "aptly -architectures=amd64 mirror create -keyring=aptlytest.gpg -filter='installer' -with-installer trusty http://mirror.yandex.ru/ubuntu/ trusty main restricted",
+ "aptly -architectures=amd64 mirror create -keyring=aptlytest.gpg -filter='installer' -with-installer trusty http://us.archive.ubuntu.com/ubuntu/ trusty main restricted",
]
runCmd = "aptly mirror update -keyring=aptlytest.gpg trusty"
outputMatchPrepare = filterOutSignature
-
- def output_processor(self, output):
- return "\n".join(sorted(output.split("\n")))
diff --git a/system/t05_snapshot/ListSnapshot10Test_gold b/system/t05_snapshot/ListSnapshot10Test_gold
new file mode 100644
index 00000000..fe949c9b
--- /dev/null
+++ b/system/t05_snapshot/ListSnapshot10Test_gold
@@ -0,0 +1,42 @@
+[
+ {
+ "Name": "snap2",
+ "SourceKind": "repo",
+ "Description": "Snapshot from mirror [wheezy-main]: http://mirror.yandex.ru/debian/ wheezy",
+ "Origin": "Debian",
+ "NotAutomatic": "",
+ "ButAutomaticUpgrades": ""
+ },
+ {
+ "Name": "snap1",
+ "SourceKind": "repo",
+ "Description": "Snapshot from mirror [wheezy-contrib]: http://mirror.yandex.ru/debian/ wheezy",
+ "Origin": "Debian",
+ "NotAutomatic": "",
+ "ButAutomaticUpgrades": ""
+ },
+ {
+ "Name": "snap3",
+ "SourceKind": "snapshot",
+ "Description": "Merged from sources: 'snap1', 'snap2'",
+ "Origin": "",
+ "NotAutomatic": "",
+ "ButAutomaticUpgrades": ""
+ },
+ {
+ "Name": "snap4",
+ "SourceKind": "snapshot",
+ "Description": "Pulled into 'snap1' with 'snap2' as source, pull request was: 'mame unrar'",
+ "Origin": "",
+ "NotAutomatic": "",
+ "ButAutomaticUpgrades": ""
+ },
+ {
+ "Name": "snap5",
+ "SourceKind": "local",
+ "Description": "Snapshot from local repo [local-repo]",
+ "Origin": "",
+ "NotAutomatic": "",
+ "ButAutomaticUpgrades": ""
+ }
+]
diff --git a/system/t05_snapshot/ListSnapshot8Test_gold b/system/t05_snapshot/ListSnapshot8Test_gold
new file mode 100644
index 00000000..c6f69366
--- /dev/null
+++ b/system/t05_snapshot/ListSnapshot8Test_gold
@@ -0,0 +1,42 @@
+[
+ {
+ "Name": "snap1",
+ "SourceKind": "repo",
+ "Description": "Snapshot from mirror [wheezy-main]: http://mirror.yandex.ru/debian/ wheezy",
+ "Origin": "Debian",
+ "NotAutomatic": "",
+ "ButAutomaticUpgrades": ""
+ },
+ {
+ "Name": "snap2",
+ "SourceKind": "repo",
+ "Description": "Snapshot from mirror [wheezy-contrib]: http://mirror.yandex.ru/debian/ wheezy",
+ "Origin": "Debian",
+ "NotAutomatic": "",
+ "ButAutomaticUpgrades": ""
+ },
+ {
+ "Name": "snap3",
+ "SourceKind": "snapshot",
+ "Description": "Merged from sources: 'snap1', 'snap2'",
+ "Origin": "",
+ "NotAutomatic": "",
+ "ButAutomaticUpgrades": ""
+ },
+ {
+ "Name": "snap4",
+ "SourceKind": "snapshot",
+ "Description": "Pulled into 'snap1' with 'snap2' as source, pull request was: 'mame unrar'",
+ "Origin": "",
+ "NotAutomatic": "",
+ "ButAutomaticUpgrades": ""
+ },
+ {
+ "Name": "snap5",
+ "SourceKind": "local",
+ "Description": "Snapshot from local repo [local-repo]",
+ "Origin": "",
+ "NotAutomatic": "",
+ "ButAutomaticUpgrades": ""
+ }
+]
diff --git a/system/t05_snapshot/ListSnapshot9Test_gold b/system/t05_snapshot/ListSnapshot9Test_gold
new file mode 100644
index 00000000..fe51488c
--- /dev/null
+++ b/system/t05_snapshot/ListSnapshot9Test_gold
@@ -0,0 +1 @@
+[]
diff --git a/system/t05_snapshot/ShowSnapshot4Test_gold b/system/t05_snapshot/ShowSnapshot4Test_gold
new file mode 100644
index 00000000..11ea4f87
--- /dev/null
+++ b/system/t05_snapshot/ShowSnapshot4Test_gold
@@ -0,0 +1,44 @@
+{
+ "Name": "snap1",
+ "SourceKind": "repo",
+ "RemoteRepos": [
+ {
+ "UUID": "d49dfdff-88a2-40d5-a682-ef37e76bdc3f",
+ "Name": "wheezy-non-free",
+ "ArchiveRoot": "http://mirror.yandex.ru/debian/",
+ "Distribution": "wheezy",
+ "Components": [
+ "non-free"
+ ],
+ "Architectures": [
+ "i386",
+ "amd64"
+ ],
+ "Meta": {
+ "Architectures": "amd64 armel armhf i386 ia64 kfreebsd-amd64 kfreebsd-i386 mips mipsel powerpc s390 s390x sparc",
+ "Codename": "wheezy",
+ "Components": "main contrib non-free",
+ "Date": "Sat, 26 Apr 2014 09:27:11 UTC",
+ "Description": " Debian 7.5 Released 26 April 2014\n",
+ "Label": "Debian",
+ "Origin": "Debian",
+ "Suite": "stable",
+ "Version": "7.5"
+ },
+ "LastDownloadDate": "2014-06-28T01:23:26.597799094+04:00",
+ "Filter": "",
+ "Status": 0,
+ "WorkerPID": 0,
+ "FilterWithDeps": false,
+ "SkipComponentCheck": false,
+ "SkipArchitectureCheck": false,
+ "DownloadSources": false,
+ "DownloadUdebs": false,
+ "DownloadInstaller": false
+ }
+ ],
+ "Description": "Snapshot from mirror [wheezy-non-free]: http://mirror.yandex.ru/debian/ wheezy",
+ "Origin": "Debian",
+ "NotAutomatic": "",
+ "ButAutomaticUpgrades": ""
+}
diff --git a/system/t05_snapshot/ShowSnapshot5Test_gold b/system/t05_snapshot/ShowSnapshot5Test_gold
new file mode 100644
index 00000000..6d6a42c4
--- /dev/null
+++ b/system/t05_snapshot/ShowSnapshot5Test_gold
@@ -0,0 +1,54 @@
+{
+ "Name": "snap1",
+ "SourceKind": "repo",
+ "RemoteRepos": [
+ {
+ "UUID": "c2e70bbb-0640-45d8-b066-58b598c93b43",
+ "Name": "gnuplot-maverick",
+ "ArchiveRoot": "http://ppa.launchpad.net/gladky-anton/gnuplot/ubuntu/",
+ "Distribution": "maverick",
+ "Components": [
+ "main"
+ ],
+ "Architectures": [
+ "amd64",
+ "armel",
+ "i386",
+ "powerpc"
+ ],
+ "Meta": {
+ "Architectures": "amd64 armel i386 powerpc",
+ "Codename": "maverick",
+ "Components": "main",
+ "Date": "Mon, 22 Oct 2012 13:19:50 UTC",
+ "Description": " Ubuntu Maverick 10.10\n",
+ "Label": "gnuplot",
+ "Origin": "LP-PPA-gladky-anton-gnuplot",
+ "Suite": "maverick",
+ "Version": "10.10"
+ },
+ "LastDownloadDate": "2014-06-28T01:24:09.760026156+04:00",
+ "Filter": "",
+ "Status": 0,
+ "WorkerPID": 0,
+ "FilterWithDeps": false,
+ "SkipComponentCheck": false,
+ "SkipArchitectureCheck": false,
+ "DownloadSources": false,
+ "DownloadUdebs": false,
+ "DownloadInstaller": false
+ }
+ ],
+ "Packages": [
+ "gnuplot-doc_4.6.1-1~maverick2_all",
+ "gnuplot-nox_4.6.1-1~maverick2_amd64",
+ "gnuplot-nox_4.6.1-1~maverick2_i386",
+ "gnuplot-x11_4.6.1-1~maverick2_amd64",
+ "gnuplot-x11_4.6.1-1~maverick2_i386",
+ "gnuplot_4.6.1-1~maverick2_all"
+ ],
+ "Description": "Snapshot from mirror [gnuplot-maverick]: http://ppa.launchpad.net/gladky-anton/gnuplot/ubuntu/ maverick",
+ "Origin": "LP-PPA-gladky-anton-gnuplot",
+ "NotAutomatic": "",
+ "ButAutomaticUpgrades": ""
+}
diff --git a/system/t05_snapshot/ShowSnapshot6Test_gold b/system/t05_snapshot/ShowSnapshot6Test_gold
new file mode 100644
index 00000000..22f75bf9
--- /dev/null
+++ b/system/t05_snapshot/ShowSnapshot6Test_gold
@@ -0,0 +1,16 @@
+{
+ "Name": "snap1",
+ "SourceKind": "local",
+ "LocalRepos": [
+ {
+ "Name": "repo1",
+ "Comment": "Cool",
+ "DefaultDistribution": "wheezy",
+ "DefaultComponent": "contrib"
+ }
+ ],
+ "Description": "Snapshot from local repo [repo1]: Cool",
+ "Origin": "",
+ "NotAutomatic": "",
+ "ButAutomaticUpgrades": ""
+}
diff --git a/system/t05_snapshot/ShowSnapshot7Test_gold b/system/t05_snapshot/ShowSnapshot7Test_gold
new file mode 100644
index 00000000..e8966dd2
--- /dev/null
+++ b/system/t05_snapshot/ShowSnapshot7Test_gold
@@ -0,0 +1,22 @@
+{
+ "Name": "snap1",
+ "SourceKind": "local",
+ "LocalRepos": [
+ {
+ "Name": "repo1",
+ "Comment": "Cool",
+ "DefaultDistribution": "wheezy",
+ "DefaultComponent": "contrib"
+ }
+ ],
+ "Packages": [
+ "libboost-program-options-dev_1.49.0.1_i386",
+ "libboost-program-options-dev_1.62.0.1_i386",
+ "pyspi_0.6.1-1.3_source",
+ "pyspi_0.6.1-1.4_source"
+ ],
+ "Description": "Snapshot from local repo [repo1]: Cool",
+ "Origin": "",
+ "NotAutomatic": "",
+ "ButAutomaticUpgrades": ""
+}
diff --git a/system/t05_snapshot/ShowSnapshot8Test_gold b/system/t05_snapshot/ShowSnapshot8Test_gold
new file mode 100644
index 00000000..29f894dc
--- /dev/null
+++ b/system/t05_snapshot/ShowSnapshot8Test_gold
@@ -0,0 +1,26 @@
+{
+ "Name": "snap3",
+ "SourceKind": "snapshot",
+ "Snapshots": [
+ {
+ "Name": "snap1",
+ "SourceKind": "repo",
+ "Description": "Snapshot from mirror [gnuplot-maverick]: http://ppa.launchpad.net/gladky-anton/gnuplot/ubuntu/ maverick",
+ "Origin": "LP-PPA-gladky-anton-gnuplot",
+ "NotAutomatic": "",
+ "ButAutomaticUpgrades": ""
+ },
+ {
+ "Name": "snap2",
+ "SourceKind": "repo",
+ "Description": "Snapshot from mirror [sensu]: http://repos.sensuapp.org/apt/ sensu",
+ "Origin": "Sensu",
+ "NotAutomatic": "",
+ "ButAutomaticUpgrades": ""
+ }
+ ],
+ "Description": "Pulled into 'snap1' with 'snap2' as source, pull request was: 'sensu'",
+ "Origin": "",
+ "NotAutomatic": "",
+ "ButAutomaticUpgrades": ""
+}
diff --git a/system/t05_snapshot/ShowSnapshot9Test_gold b/system/t05_snapshot/ShowSnapshot9Test_gold
new file mode 100644
index 00000000..dbe7e8a9
--- /dev/null
+++ b/system/t05_snapshot/ShowSnapshot9Test_gold
@@ -0,0 +1,36 @@
+{
+ "Name": "snap3",
+ "SourceKind": "snapshot",
+ "Snapshots": [
+ {
+ "Name": "snap1",
+ "SourceKind": "repo",
+ "Description": "Snapshot from mirror [gnuplot-maverick]: http://ppa.launchpad.net/gladky-anton/gnuplot/ubuntu/ maverick",
+ "Origin": "LP-PPA-gladky-anton-gnuplot",
+ "NotAutomatic": "",
+ "ButAutomaticUpgrades": ""
+ },
+ {
+ "Name": "snap2",
+ "SourceKind": "repo",
+ "Description": "Snapshot from mirror [sensu]: http://repos.sensuapp.org/apt/ sensu",
+ "Origin": "Sensu",
+ "NotAutomatic": "",
+ "ButAutomaticUpgrades": ""
+ }
+ ],
+ "Packages": [
+ "gnuplot-doc_4.6.1-1~maverick2_all",
+ "gnuplot-nox_4.6.1-1~maverick2_amd64",
+ "gnuplot-nox_4.6.1-1~maverick2_i386",
+ "gnuplot-x11_4.6.1-1~maverick2_amd64",
+ "gnuplot-x11_4.6.1-1~maverick2_i386",
+ "gnuplot_4.6.1-1~maverick2_all",
+ "sensu_0.12.6-5_amd64",
+ "sensu_0.12.6-5_i386"
+ ],
+ "Description": "Pulled into 'snap1' with 'snap2' as source, pull request was: 'sensu'",
+ "Origin": "",
+ "NotAutomatic": "",
+ "ButAutomaticUpgrades": ""
+}
diff --git a/system/t05_snapshot/list.py b/system/t05_snapshot/list.py
index 49bd1f6a..06bc73b1 100644
--- a/system/t05_snapshot/list.py
+++ b/system/t05_snapshot/list.py
@@ -1,3 +1,5 @@
+import re
+
from lib import BaseTest
@@ -92,3 +94,50 @@ class ListSnapshot7Test(BaseTest):
]
runCmd = "aptly -sort=planet snapshot list"
expectedCode = 1
+
+
+class ListSnapshot8Test(BaseTest):
+ """
+ list snapshots: json regular list
+ """
+ fixtureDB = True
+ fixtureCmds = [
+ "aptly snapshot create snap1 from mirror wheezy-main",
+ "aptly snapshot create snap2 from mirror wheezy-contrib",
+ "aptly snapshot merge snap3 snap1 snap2",
+ "aptly snapshot pull snap1 snap2 snap4 mame unrar",
+ "aptly repo create local-repo",
+ "aptly repo add local-repo ${files}",
+ "aptly snapshot create snap5 from repo local-repo",
+ ]
+ runCmd = "aptly -json snapshot list"
+
+ def outputMatchPrepare(self, s):
+ return re.sub(r'[ ]*"CreatedAt": "[^"]+",?\n', '', s)
+
+
+class ListSnapshot9Test(BaseTest):
+ """
+ list snapshots: json empty list
+ """
+ runCmd = "aptly snapshot -json list"
+
+
+class ListSnapshot10Test(BaseTest):
+ """
+ list snapshots: json regular list sorted by time
+ """
+ fixtureDB = True
+ fixtureCmds = [
+ "aptly snapshot create snap2 from mirror wheezy-main",
+ "aptly snapshot create snap1 from mirror wheezy-contrib",
+ "aptly snapshot merge snap3 snap1 snap2",
+ "aptly snapshot pull snap1 snap2 snap4 mame unrar",
+ "aptly repo create local-repo",
+ "aptly repo add local-repo ${files}",
+ "aptly snapshot create snap5 from repo local-repo",
+ ]
+ runCmd = "aptly -json -sort=time snapshot list"
+
+ def outputMatchPrepare(self, s):
+ return re.sub(r'[ ]*"CreatedAt": "[^"]+",?\n', '', s)
diff --git a/system/t05_snapshot/show.py b/system/t05_snapshot/show.py
index f1d84862..1deb7c7b 100644
--- a/system/t05_snapshot/show.py
+++ b/system/t05_snapshot/show.py
@@ -33,3 +33,91 @@ class ShowSnapshot3Test(BaseTest):
def outputMatchPrepare(_, s):
return re.sub(r"Created At: [0-9:A-Za-z -]+\n", "", s)
+
+
+class ShowSnapshot4Test(BaseTest):
+ """
+ show snapshot json: from mirror w/o packages
+ """
+ fixtureDB = True
+ fixtureCmds = ["aptly snapshot create snap1 from mirror wheezy-non-free"]
+ runCmd = "aptly snapshot show -json snap1"
+
+ def outputMatchPrepare(_, s):
+ return re.sub(r'[ ]*"CreatedAt": "[^"]+",?\n', '', s)
+
+
+class ShowSnapshot5Test(BaseTest):
+ """
+ show snapshot json: from mirror with packages
+ """
+ fixtureDB = True
+ fixtureCmds = ["aptly snapshot create snap1 from mirror gnuplot-maverick"]
+ runCmd = "aptly snapshot show -json -with-packages snap1"
+
+ def outputMatchPrepare(_, s):
+ return re.sub(r'[ ]*"CreatedAt": "[^"]+",?\n', '', s)
+
+
+class ShowSnapshot6Test(BaseTest):
+ """
+ show snapshot json: from local repo w/o packages
+ """
+ fixtureDB = True
+ fixtureCmds = [
+ "aptly repo create -comment=Cool -distribution=wheezy -component=contrib repo1",
+ "aptly repo add repo1 ${files}",
+ "aptly snapshot create snap1 from repo repo1"
+ ]
+ runCmd = "aptly snapshot show -json snap1"
+
+ def outputMatchPrepare(_, s):
+ return re.sub(r'[ ]*"CreatedAt": "[^"]+",?\n', '', s)
+
+
+class ShowSnapshot7Test(BaseTest):
+ """
+ show snapshot json: from local repo with packages
+ """
+ fixtureDB = True
+ fixtureCmds = [
+ "aptly repo create -comment=Cool -distribution=wheezy -component=contrib repo1",
+ "aptly repo add repo1 ${files}",
+ "aptly snapshot create snap1 from repo repo1"
+ ]
+ runCmd = "aptly snapshot show -json -with-packages snap1"
+
+ def outputMatchPrepare(_, s):
+ return re.sub(r'[ ]*"CreatedAt": "[^"]+",?\n', '', s)
+
+
+class ShowSnapshot8Test(BaseTest):
+ """
+ show snapshot json: from local repo w/o packages
+ """
+ fixtureDB = True
+ fixtureCmds = [
+ "aptly snapshot create snap1 from mirror gnuplot-maverick",
+ "aptly snapshot create snap2 from mirror sensu",
+ "aptly snapshot pull snap1 snap2 snap3 sensu"
+ ]
+ runCmd = "aptly snapshot show -json snap3"
+
+ def outputMatchPrepare(_, s):
+ return re.sub(r'[ ]*"CreatedAt": "[^"]+",?\n', '', s)
+
+
+class ShowSnapshot9Test(BaseTest):
+ """
+ show snapshot json: from local repo with packages
+ """
+ fixtureDB = True
+ fixtureCmds = [
+ "aptly snapshot create snap1 from mirror gnuplot-maverick",
+ "aptly snapshot create snap2 from mirror sensu",
+ "aptly snapshot pull snap1 snap2 snap3 sensu"
+ ]
+ runCmd = "aptly snapshot show -json -with-packages snap3"
+
+ def outputMatchPrepare(_, s):
+ return re.sub(r'[ ]*"CreatedAt": "[^"]+",?\n', '', s)
diff --git a/system/t06_publish/PublishList4Test_gold b/system/t06_publish/PublishList4Test_gold
new file mode 100644
index 00000000..fe51488c
--- /dev/null
+++ b/system/t06_publish/PublishList4Test_gold
@@ -0,0 +1 @@
+[]
diff --git a/system/t06_publish/PublishList5Test_gold b/system/t06_publish/PublishList5Test_gold
new file mode 100644
index 00000000..61f468b9
--- /dev/null
+++ b/system/t06_publish/PublishList5Test_gold
@@ -0,0 +1,97 @@
+[
+ {
+ "AcquireByHash": false,
+ "Architectures": [
+ "amd64",
+ "i386"
+ ],
+ "ButAutomaticUpgrades": "",
+ "Distribution": "maverick",
+ "Label": "",
+ "NotAutomatic": "",
+ "Origin": "LP-PPA-gladky-anton-gnuplot",
+ "Path": "./maverick",
+ "Prefix": ".",
+ "SkipContents": false,
+ "SourceKind": "snapshot",
+ "Sources": [
+ {
+ "Component": "main",
+ "Name": "snap1"
+ }
+ ],
+ "Storage": "",
+ "Suite": ""
+ },
+ {
+ "AcquireByHash": false,
+ "Architectures": [
+ "amd64"
+ ],
+ "ButAutomaticUpgrades": "",
+ "Distribution": "wheezy",
+ "Label": "",
+ "NotAutomatic": "",
+ "Origin": "",
+ "Path": "ppa/smira/wheezy",
+ "Prefix": "ppa/smira",
+ "SkipContents": false,
+ "SourceKind": "snapshot",
+ "Sources": [
+ {
+ "Component": "contrib",
+ "Name": "snap2"
+ }
+ ],
+ "Storage": "",
+ "Suite": ""
+ },
+ {
+ "AcquireByHash": false,
+ "Architectures": [
+ "amd64",
+ "i386"
+ ],
+ "ButAutomaticUpgrades": "",
+ "Distribution": "maverick",
+ "Label": "",
+ "NotAutomatic": "",
+ "Origin": "origin1",
+ "Path": "ppa/tr1/maverick",
+ "Prefix": "ppa/tr1",
+ "SkipContents": false,
+ "SourceKind": "snapshot",
+ "Sources": [
+ {
+ "Component": "main",
+ "Name": "snap2"
+ }
+ ],
+ "Storage": "",
+ "Suite": ""
+ },
+ {
+ "AcquireByHash": false,
+ "Architectures": [
+ "amd64",
+ "i386"
+ ],
+ "ButAutomaticUpgrades": "",
+ "Distribution": "maverick",
+ "Label": "label1",
+ "NotAutomatic": "",
+ "Origin": "",
+ "Path": "ppa/tr2/maverick",
+ "Prefix": "ppa/tr2",
+ "SkipContents": false,
+ "SourceKind": "snapshot",
+ "Sources": [
+ {
+ "Component": "main",
+ "Name": "snap2"
+ }
+ ],
+ "Storage": "",
+ "Suite": ""
+ }
+]
diff --git a/system/t06_publish/PublishRepo33Test_gold b/system/t06_publish/PublishRepo33Test_gold
new file mode 100644
index 00000000..365295fa
--- /dev/null
+++ b/system/t06_publish/PublishRepo33Test_gold
@@ -0,0 +1,14 @@
+Loading packages...
+Generating metadata files and linking package files...
+Finalizing metadata files...
+Signing file 'Release' with gpg, please enter your passphrase when prompted:
+Clearsigning file 'Release' with gpg, please enter your passphrase when prompted:
+
+Local repo local-repo has been successfully published.
+Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing.
+Now you can add following line to apt sources:
+ deb http://your-server/ maverick main
+ deb-src http://your-server/ maverick main
+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/PublishShow3Test_gold b/system/t06_publish/PublishShow3Test_gold
new file mode 100644
index 00000000..b68fbef1
--- /dev/null
+++ b/system/t06_publish/PublishShow3Test_gold
@@ -0,0 +1,24 @@
+{
+ "AcquireByHash": false,
+ "Architectures": [
+ "amd64",
+ "i386"
+ ],
+ "ButAutomaticUpgrades": "",
+ "Distribution": "maverick",
+ "Label": "",
+ "NotAutomatic": "",
+ "Origin": "LP-PPA-gladky-anton-gnuplot",
+ "Path": "./maverick",
+ "Prefix": ".",
+ "SkipContents": false,
+ "SourceKind": "snapshot",
+ "Sources": [
+ {
+ "Component": "main",
+ "Name": "snap1"
+ }
+ ],
+ "Storage": "",
+ "Suite": ""
+}
diff --git a/system/t06_publish/PublishShow4Test_gold b/system/t06_publish/PublishShow4Test_gold
new file mode 100644
index 00000000..24fe5949
--- /dev/null
+++ b/system/t06_publish/PublishShow4Test_gold
@@ -0,0 +1,24 @@
+{
+ "AcquireByHash": false,
+ "Architectures": [
+ "amd64",
+ "i386"
+ ],
+ "ButAutomaticUpgrades": "",
+ "Distribution": "maverick",
+ "Label": "",
+ "NotAutomatic": "",
+ "Origin": "LP-PPA-gladky-anton-gnuplot",
+ "Path": "ppa/smira/maverick",
+ "Prefix": "ppa/smira",
+ "SkipContents": false,
+ "SourceKind": "snapshot",
+ "Sources": [
+ {
+ "Component": "main",
+ "Name": "snap1"
+ }
+ ],
+ "Storage": "",
+ "Suite": ""
+}
diff --git a/system/t06_publish/PublishSnapshot1Test_release_amd64 b/system/t06_publish/PublishSnapshot1Test_release_amd64
index 3e49f1f6..b69b5727 100644
--- a/system/t06_publish/PublishSnapshot1Test_release_amd64
+++ b/system/t06_publish/PublishSnapshot1Test_release_amd64
@@ -1,5 +1,6 @@
Origin: LP-PPA-gladky-anton-gnuplot
Label: . maverick
Archive: maverick
+Suite: maverick
Architecture: amd64
Component: main
diff --git a/system/t06_publish/PublishSnapshot1Test_release_i386 b/system/t06_publish/PublishSnapshot1Test_release_i386
index c7d483df..484aabc6 100644
--- a/system/t06_publish/PublishSnapshot1Test_release_i386
+++ b/system/t06_publish/PublishSnapshot1Test_release_i386
@@ -1,5 +1,6 @@
Origin: LP-PPA-gladky-anton-gnuplot
Label: . maverick
Archive: maverick
+Suite: maverick
Architecture: i386
Component: main
diff --git a/system/t06_publish/PublishSnapshot35Test_release_udeb_i386 b/system/t06_publish/PublishSnapshot35Test_release_udeb_i386
index c77df26e..e93dcfe6 100644
--- a/system/t06_publish/PublishSnapshot35Test_release_udeb_i386
+++ b/system/t06_publish/PublishSnapshot35Test_release_udeb_i386
@@ -1,5 +1,6 @@
Origin: Debian
Label: . stretch
Archive: stretch
+Suite: stretch
Architecture: i386
Component: main
diff --git a/system/t06_publish/PublishSnapshot38Test_installer_s390x b/system/t06_publish/PublishSnapshot38Test_installer_s390x
index 16aed685..f54d0b59 100644
--- a/system/t06_publish/PublishSnapshot38Test_installer_s390x
+++ b/system/t06_publish/PublishSnapshot38Test_installer_s390x
@@ -1,9 +1,9 @@
48d2cbebbc8582f546232c1acf68b1b73125731441fda528f8d71795a60e14a4 ./generic/debian.exec
-52617d903dad13420a083c0e10c09025069b5cadb2abb7c3490d4d9e4b8f3f99 ./MD5SUMS
5b0d469b830fd2b2a8d05750a4a86eb7fd94557b9ad543380787c77de3b4e556 ./MANIFEST
-6b3cd6ca38df33883dbfdc84a8b7717ecf22ba8706d001c9aa64fee3e7b8d7f1 ./generic/kernel.debian
-7c342435dcac0b57b369090f1b75f7924acdb2085e16fc42b8a8d354a6e61906 ./generic/initrd.debian
-8e1180a974db09a6ee25274c4a04a5c10f7b17f802d02389f40cf4e38696c2ef ./MANIFEST.udebs
-d592bca155b709066bcd48070358e6a2dd4f401c09f594b37b15caaf9fc45d80 ./generic/parmfile.debian
-fadd64f1559848f869f83fbc088506ec4405f9a7f2c3bc05a72f730e0afa615d ./udeb.list
\ No newline at end of file
+79dc5831dde77711206eb2c6a0053dba24df694436fe773918706426da9b99d7 ./MD5SUMS
+867360c11a7c863e1770ba9c0ceb9d2b5c38fa0fddfc4645a84764287270bfc2 ./udeb.list
+8afce28c167e986af61162a1adf7487b06237679fb3cf5605bb161e2b12fc1f2 ./generic/initrd.debian
+d1e5caa566b732bd3925b8b88b7083fd10066ebc33a684781a3fbfc8f1d81020 ./MANIFEST.udebs
+d5828d0b715cfc7977f7eb09ec22a1cac3f7de09e9a07fcd8945b26f4b5b8a5b ./generic/kernel.debian
+d592bca155b709066bcd48070358e6a2dd4f401c09f594b37b15caaf9fc45d80 ./generic/parmfile.debian
\ No newline at end of file
diff --git a/system/t06_publish/PublishSnapshot39Test_contents_amd64 b/system/t06_publish/PublishSnapshot39Test_contents_amd64
new file mode 100644
index 00000000..922b5c05
--- /dev/null
+++ b/system/t06_publish/PublishSnapshot39Test_contents_amd64
@@ -0,0 +1,751 @@
+FILE LOCATION
+usr/bin/gnuplot math/gnuplot-nox,math/gnuplot-x11
+usr/lib/gnuplot/gnuplot_x11 math/gnuplot-x11
+usr/share/doc-base/gnuplot doc/gnuplot-doc
+usr/share/doc/gnuplot math/gnuplot
+usr/share/doc/gnuplot-doc/changelog.Debian.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/changelog.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/copyright doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/1.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/2.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/3.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/GM1_bonds.r3d.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/GM1_sugar.pdb.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/Makefile.am.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/Makefile.am.in doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/Makefile.in.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/airfoil.dem.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/all.dem.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/animate.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/animate2.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/approximate.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/arrowstyle.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/arrowstyle.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/asciimat.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/autoscale.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/barchart_art.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/battery.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/big_peak.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/binary.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/bivariat.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/bldg.png doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/blutux.rgb.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/borders.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/boxplot.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/candlesticks.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/candlesticks.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/charset.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/circles.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/cities.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/cities.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/clip14in.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/colorscheme.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/colorwheel.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/contours.dem.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/controls.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/ctg-y2.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/dashcolor.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/datastrings.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/delaunay-edges.dat.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/demo.edf.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/density.fnc doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/dgrid3d.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/discrete.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/electron.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/ellipse.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/ellipses.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/ellipses_style.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/empty-circles.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/energy_circles.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/enhanced_utf8.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/enhancedtext.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/epslatex.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/fillbetween.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/fillcrvs.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/fillstyle.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/finance.dat.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/finance.dem.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/fit.dem.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/fit3.dat.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/fontfile.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/fontfile_latex.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/glass.dat.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/gnu-valley doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/gnuplot.cfg doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/gnuplot.rot doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/gpdemos.tcl.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/heatmaps.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/hemisphr.dat.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/hexa.fnc doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/hidden.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/hidden2.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/histerror.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/histograms.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/histograms2.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/histopt.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/html/Makefile doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/html/Makefile.canvas doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/html/Makefile.svg doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/html/canvas_utf8.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/html/gnuplot_demo.css doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/html/index.canvas.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/html/index.save.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/html/index.svg doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/html/mouseable.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/html/mousebox.template doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/html/webify.pl doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/html/webify_canvas.pl.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/html/webify_svg.pl.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/image.dem.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/image2.dem.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/imageNaN.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/immigration.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/iterate.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/kdensity2d.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/key.dem.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/klein.dat.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/labelplot.pdb doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/layout.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/lcdemo.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/lena-keypoints.bin doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/lena.rgb.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/line.fnc doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/macros.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/margins.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/mgr.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/molecule.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/moli3.dat.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/mouselab_1.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/mouselab_2.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/mouselabels.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/mousevariables.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/multiaxis.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/multimsh.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/multipalette.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/multiplt.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/nearmap.csv.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/optimize.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/orbital_elements.dat.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/orbits.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/param.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/pm3d.dem.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/pm3dcolors.dem.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/pm3dgamma.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/pointsize.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/polar.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/poldat.dem.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/prob.dem.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/prob2.dem.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/rainbow.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/random-points.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/random.dem.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/rectangle.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/reflect.fnc doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/rgb_variable.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/rgb_variable.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/rgbalpha.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/running_avg.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/scatter.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/scatter2.bin doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/scatter2.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/silver.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/simple.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/sine.bin doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/singulr.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/smooth.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/sound.par doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/sound2.par doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/soundvel.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/spline.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/srl.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/starmap.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/start.par doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/stat.inc.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/stats.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/steps.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/steps.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/stringvar.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/surface1.dem.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/surface2.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/table.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/textcolor.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/textrotate.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/tics.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/timedat.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/timedat.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/transparent.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/transparent_solids.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/triangle.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/using.bin doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/using.dat.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/using.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/utf8.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/varcolor.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/vector.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/whale.dat.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/world.cor doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/world.dat.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/world.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/world2.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/gnuplot.ps.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/gpcard.ps.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/2D_005fprojection_005f_0028set_005fview_005fmap_0029.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/3D_005f_0028surface_0029_005fplots.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Backwards_005fcompatibility.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Batch_002fInteractive_005fOperation.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Binary.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Bugs.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Canvas_005fsize.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Command_002dline_002dediting.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Command_005fIndex.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Commands.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Comments.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Concept_005fIndex.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Coordinates.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Copyright.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Datastrings.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Do.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/EllipticE.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/EllipticK.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/EllipticPi.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Enhanced_005ftext_005fmode.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Environment.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Expressions.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/External_005flibraries.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Fonts.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Function_005fIndex.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Functions.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Glossary.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Gnuplot_002ddefined_005fvariables.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Introduction.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Local_005fcustomization_005fof_005flinetypes.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Mouse_005fvariables.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/New_005ffeatures.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/New_005for_005frevised_005fterminal_005fdrivers.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/New_005fplot_005fstyles.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/New_005fsmoothing_005falgorithms.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/New_005fsyntax.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/New_005ftime_002fdate_005fhandling.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Openstep_005f_0028next_0029.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Operators.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Options_005fIndex.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Plotting.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Quote_005fMarks.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Random_005fnumber_005fgenerator.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Revised_005fpolar_005faxes.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Seeking_002dassistance.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Start_002dup_005f_0028initialization_0029.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Statistical_005fsummary_005fof_005fdata.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/String_005fconstants_005fand_005fstring_005fvariables.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/String_005fvariables.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Substitution_005fand_005fCommand_005fline_005fmacros.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Substitution_005fof_005fstring_005fvariables_005fas_005fmacros.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Substitution_005fof_005fsystem_005fcommands_005fin_005fbackquotes.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Summation.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Syntax.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Terminal_005fIndex.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Terminal_005ftypes.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Ternary.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Time_002fDate_005fdata.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Unary.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/User_002ddefined_005fvariables_005fand_005ffunctions.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/VWS.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/While.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/X11_005fmouse.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/abs.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/acos.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/acosh.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/adjustable_005fparameters.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/aed767.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/aifm.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/airy.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/algorithm.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/angles.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/aqua.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/arg.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/array.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/arrow.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/asin.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/asinh.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/atan.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/atan2.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/atanh.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/automated_005fiteration_005fover_005fmultiple_005fcolumns.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/autoscale.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/axes.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/background_005fcolor.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/bars.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/be.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/besj0.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/besj1.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/besy0.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/besy1.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/binary.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/bind.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/bind_005f.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/bind_005fspace.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/bmargin.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/border.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/boxerrorbars.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/boxes.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/boxplot.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/boxplot_005f.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/boxwidth.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/boxxyerrorbars.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/cairo_005f_0028pdfcairo.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/call.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/candlesticks.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/canvas.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/cbdata.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/cbdtics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/cblabel.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/cbmtics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/cbrange.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/cbtics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/cd.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/ceil.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/cgi.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/cgm.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/circle.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/circles.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/clabel.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/clear.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/clip.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/clipping.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/cntrparam.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/color_005fassignment.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/color_005fbox.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/colornames.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/colorspec.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/column.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/columnhead.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/complete_005flist_005fof_005fterminals.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/context.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/contour.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/control.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/control_005fvariables.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/corel.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/cos.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/cosh.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/cubehelix.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/data.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/data_002dfile.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/data_005fstyle.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/datafile.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/debug.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/decimalsign.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/defined.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/defined_005f.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/deprecated_005foptions.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/dgrid3d.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/dospc.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/dots.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/doubleclick.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/dumb.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/dummy.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/dxf.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/dxy800a.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/eepic.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/ellipse.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/ellipses.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/elliptic_005fintegrals.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/emf.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/emxvga.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/encoding.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/endian.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/environment_005fvariables.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/epscairo.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/epson_005f180dpi.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/equal_005faxes.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/erf.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/erfc.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/error_005festimates.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/errorbars.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/errorlines.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/evaluate.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/every.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/example_005fdatafile.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/example_005fdatafile_005f.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/excl.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/exists.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/exit.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/exp.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/expint.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/fig.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/file.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/filetype.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/filledcurves.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/fillsteps.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/financebars.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/fit.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/fit_005f.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/floor.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/fontpath.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/format.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/format_005f.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/format_005fspecifiers.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/fsteps.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/function_005fstyle.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/functions.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/functions_005f.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/functions_005f_005f.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/gamma.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/gamma_005fcorrection.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/gd_005f_0028png.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/general.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/ggi.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/gnuplot.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/gpic.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/gprintf.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/gprintf_005f.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/grass.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/grid.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/grid_005fdata.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/help.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/hidden3d.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/hidden3d_005f.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/histeps.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/histograms.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/history.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/historysize.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/hp2623a.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/hp2648.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/hp500c.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/hpgl.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/hpljii.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/hppj.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/ibeta.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/if.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/if_002dold.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/igamma.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/imag.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/image.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/image_005ffailsafe.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/imagen.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/impulses.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/index.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/int.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/interpolate.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/inverf.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/invnorm.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/isosamples.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/iteration.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/iteration_005f.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/key.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/key_005fplacement.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/key_005fsamples.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/keywords.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/known_005flimitations.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/kyo.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/label.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/labels.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/lambertw.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/latex.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/lgamma.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/linecolor_005fvariable.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/lines.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/linespoints.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/linestyles_005fvs_005flinetypes.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/linetype.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/linetypes.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/linux.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/lmargin.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/load.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/loadpath.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/locale.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/log.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/log10.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/logscale.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/lower.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/lua.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/macintosh.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/macros.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/mapping.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/margin.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/matrix.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/mf.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/mif.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/mouse.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/mouse_005finput.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/mouseformat.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/mp.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/multi_002dbranch.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/multiplot.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/mx2tics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/mxtics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/my2tics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/mytics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/mztics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/newhistogram.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/next.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/norm.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/object.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/offsets.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/origin.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/output.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/palette.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/parametric.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/parametric_005f.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/parametric_005fmode.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/pause.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/pbm.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/pdf.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/plot.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/plot_005f.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/plotting_005fstyles.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/pm3d.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/png_005f.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/pointintervalbox.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/points.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/pointsize.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/polar.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/polar_005f.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/polar_005fmode.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/polygon.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/position.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/postscript.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/postscript_005f_005f_0028also_005fencapsulated_005fpostscript_005f_002a_002eeps_0029.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/practical_005fguidelines.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/print.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/print_005f.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/psdir.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/pstricks.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/pwd.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/qms.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/quit.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/raise.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/rand.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/ranges.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/raxis.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/real.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/record.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/rectangle.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/refresh.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/regis.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/replot.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/reread.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/reset.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/rgbalpha.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/rgbcolor_005fvariable.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/rgbformulae.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/rgbimage.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/rmargin.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/rrange.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/rtics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/samples.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/save.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/scanorder.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/scrolling.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/set_002dshow.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/set_005fdatafile_005fbinary.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/set_005fdatafile_005fcommentschars.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/set_005fdatafile_005ffortran.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/set_005fdatafile_005fmissing.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/set_005fdatafile_005fnofpe_005ftrap.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/set_005fdatafile_005fseparator.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/set_005fstyle_005farrow.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/set_005fstyle_005fcircle.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/set_005fstyle_005fdata.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/set_005fstyle_005fellipse.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/set_005fstyle_005ffill.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/set_005fstyle_005ffunction.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/set_005fstyle_005fincrement.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/set_005fstyle_005fline.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/set_005fstyle_005frectangle.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/sgn.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/shell.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/short_005fintroduction.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/sin.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/sinh.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/size.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/skip.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/smooth.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/special_002dfilenames.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/splot.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/splot_005fsurfaces.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/sprintf.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/sqrt.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/starting_005fvalues.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/statistical_005foverview.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/stats_005f_0028Statistical_005fSummary_0029.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/steps.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/strftime.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/stringcolumn.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/strlen.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/strptime.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/strstrt.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/style.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/substr.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/sun.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/surface.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/svg.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/svga.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/system.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/system_005f.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/table.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/tan.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/tanh.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/tek40.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/tek410x.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/terminal.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/termoption.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/test.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/texdraw.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/tgif.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/thru.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/tics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/ticscale.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/ticslevel.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/time.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/time_002fdate_005fspecifiers.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/timecolumn.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/timefmt.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/timestamp.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/tips.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/title.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/title_005f.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/tkcanvas.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/tm_005fhour.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/tm_005fmday.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/tm_005fmin.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/tm_005fmon.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/tm_005fsec.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/tm_005fwday.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/tm_005fyday.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/tm_005fyear.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/tmargin.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/tpic.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/trange.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/transparency.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/undefine.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/unixpc.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/unset.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/update.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/urange.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/using.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/valid.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/value.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/variables.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/vectors.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/version.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/vgagl.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/view.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/voigt.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/volatile.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/vrange.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/vx384.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/windows.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/with.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/word.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/words.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/wxt.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/x11.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/x2data.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/x2dtics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/x2label.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/x2mtics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/x2range.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/x2tics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/x2zeroaxis.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/xdata.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/xdtics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/xerrorbars.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/xerrorlines.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/xlabel.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/xlib.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/xmtics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/xrange.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/xtics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/xtics_005frangelimited.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/xtics_005ftime_005fdata.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/xyerrorbars.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/xyerrorlines.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/xyplane.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/xzeroaxis.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/y2data.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/y2dtics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/y2label.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/y2mtics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/y2range.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/y2tics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/y2zeroaxis.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/ydata.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/ydtics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/yerrorbars.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/yerrorlines.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/ylabel.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/ymtics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/yrange.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/ytics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/yzeroaxis.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/zdata.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/zdtics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/zero.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/zeroaxis.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/zlabel.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/zmtics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/zoom.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/zrange.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/ztics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/zzeroaxis.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/ps_file.doc.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/ps_fontfile_doc.ps.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/ps_guide.ps.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/ps_symbols.gpi.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/tutorial.dvi.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/tutorial.ps.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-nox/BUGS math/gnuplot-nox
+usr/share/doc/gnuplot-nox/FAQ.pdf.gz math/gnuplot-nox
+usr/share/doc/gnuplot-nox/NEWS.gz math/gnuplot-nox
+usr/share/doc/gnuplot-nox/README.1ST math/gnuplot-nox
+usr/share/doc/gnuplot-nox/README.Debian math/gnuplot-nox
+usr/share/doc/gnuplot-nox/README.gz math/gnuplot-nox
+usr/share/doc/gnuplot-nox/changelog.Debian.gz math/gnuplot-nox
+usr/share/doc/gnuplot-nox/changelog.gz math/gnuplot-nox
+usr/share/doc/gnuplot-nox/copyright math/gnuplot-nox
+usr/share/doc/gnuplot-x11/changelog.Debian.gz math/gnuplot-x11
+usr/share/doc/gnuplot-x11/changelog.gz math/gnuplot-x11
+usr/share/doc/gnuplot-x11/copyright math/gnuplot-x11
+usr/share/gnuplot/gnuplot.gih math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/PostScript/8859-1.ps math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/PostScript/8859-15.ps math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/PostScript/8859-2.ps math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/PostScript/8859-9.ps math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/PostScript/aglfn.txt math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/PostScript/cp1250.ps math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/PostScript/cp1251.ps math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/PostScript/cp437.ps math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/PostScript/cp850.ps math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/PostScript/cp852.ps math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/PostScript/koi8r.ps math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/PostScript/koi8u.ps math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/PostScript/prologue.ps math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/PostScript/utf-8.ps math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/app-defaults/Gnuplot math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/colors_default.gp math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/colors_mono.gp math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/colors_podo.gp math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/gnuplotrc math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/js/README math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/js/canvasmath.js math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/js/canvastext.js math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/js/gnuplot_common.js math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/js/gnuplot_dashedlines.js math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/js/gnuplot_mouse.css math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/js/gnuplot_mouse.js math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/js/gnuplot_svg.js math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/js/grid.png math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/js/help.png math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/js/nextzoom.png math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/js/previouszoom.png math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/js/textzoom.png math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/lua/gnuplot-tikz.lua math/gnuplot-nox
+usr/share/gnuplot/pm3d/README math/gnuplot-nox
+usr/share/gnuplot/pm3d/colorpts-demo.gp math/gnuplot-nox
+usr/share/gnuplot/pm3d/colorpts.awk math/gnuplot-nox
+usr/share/gnuplot/pm3d/pm3dCompress.awk math/gnuplot-nox
+usr/share/gnuplot/pm3d/pm3dConvertToImage.awk math/gnuplot-nox
+usr/share/gnuplot/pm3d/pts.dat math/gnuplot-nox
+usr/share/info/gnuplot.info.gz doc/gnuplot-doc
+usr/share/man/man1/gnuplot.1.gz math/gnuplot-nox,math/gnuplot-x11
+usr/share/menu/gnuplot-nox math/gnuplot-nox
diff --git a/system/t06_publish/PublishSnapshot39Test_contents_i386 b/system/t06_publish/PublishSnapshot39Test_contents_i386
new file mode 100644
index 00000000..922b5c05
--- /dev/null
+++ b/system/t06_publish/PublishSnapshot39Test_contents_i386
@@ -0,0 +1,751 @@
+FILE LOCATION
+usr/bin/gnuplot math/gnuplot-nox,math/gnuplot-x11
+usr/lib/gnuplot/gnuplot_x11 math/gnuplot-x11
+usr/share/doc-base/gnuplot doc/gnuplot-doc
+usr/share/doc/gnuplot math/gnuplot
+usr/share/doc/gnuplot-doc/changelog.Debian.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/changelog.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/copyright doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/1.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/2.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/3.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/GM1_bonds.r3d.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/GM1_sugar.pdb.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/Makefile.am.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/Makefile.am.in doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/Makefile.in.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/airfoil.dem.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/all.dem.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/animate.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/animate2.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/approximate.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/arrowstyle.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/arrowstyle.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/asciimat.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/autoscale.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/barchart_art.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/battery.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/big_peak.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/binary.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/bivariat.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/bldg.png doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/blutux.rgb.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/borders.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/boxplot.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/candlesticks.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/candlesticks.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/charset.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/circles.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/cities.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/cities.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/clip14in.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/colorscheme.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/colorwheel.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/contours.dem.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/controls.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/ctg-y2.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/dashcolor.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/datastrings.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/delaunay-edges.dat.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/demo.edf.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/density.fnc doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/dgrid3d.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/discrete.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/electron.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/ellipse.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/ellipses.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/ellipses_style.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/empty-circles.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/energy_circles.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/enhanced_utf8.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/enhancedtext.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/epslatex.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/fillbetween.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/fillcrvs.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/fillstyle.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/finance.dat.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/finance.dem.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/fit.dem.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/fit3.dat.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/fontfile.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/fontfile_latex.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/glass.dat.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/gnu-valley doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/gnuplot.cfg doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/gnuplot.rot doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/gpdemos.tcl.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/heatmaps.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/hemisphr.dat.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/hexa.fnc doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/hidden.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/hidden2.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/histerror.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/histograms.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/histograms2.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/histopt.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/html/Makefile doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/html/Makefile.canvas doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/html/Makefile.svg doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/html/canvas_utf8.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/html/gnuplot_demo.css doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/html/index.canvas.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/html/index.save.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/html/index.svg doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/html/mouseable.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/html/mousebox.template doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/html/webify.pl doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/html/webify_canvas.pl.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/html/webify_svg.pl.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/image.dem.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/image2.dem.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/imageNaN.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/immigration.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/iterate.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/kdensity2d.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/key.dem.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/klein.dat.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/labelplot.pdb doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/layout.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/lcdemo.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/lena-keypoints.bin doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/lena.rgb.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/line.fnc doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/macros.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/margins.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/mgr.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/molecule.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/moli3.dat.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/mouselab_1.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/mouselab_2.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/mouselabels.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/mousevariables.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/multiaxis.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/multimsh.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/multipalette.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/multiplt.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/nearmap.csv.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/optimize.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/orbital_elements.dat.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/orbits.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/param.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/pm3d.dem.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/pm3dcolors.dem.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/pm3dgamma.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/pointsize.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/polar.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/poldat.dem.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/prob.dem.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/prob2.dem.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/rainbow.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/random-points.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/random.dem.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/rectangle.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/reflect.fnc doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/rgb_variable.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/rgb_variable.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/rgbalpha.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/running_avg.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/scatter.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/scatter2.bin doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/scatter2.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/silver.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/simple.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/sine.bin doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/singulr.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/smooth.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/sound.par doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/sound2.par doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/soundvel.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/spline.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/srl.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/starmap.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/start.par doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/stat.inc.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/stats.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/steps.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/steps.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/stringvar.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/surface1.dem.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/surface2.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/table.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/textcolor.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/textrotate.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/tics.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/timedat.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/timedat.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/transparent.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/transparent_solids.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/triangle.dat doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/using.bin doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/using.dat.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/using.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/utf8.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/varcolor.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/vector.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/whale.dat.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/world.cor doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/world.dat.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/world.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/examples/world2.dem doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/gnuplot.ps.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/gpcard.ps.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/2D_005fprojection_005f_0028set_005fview_005fmap_0029.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/3D_005f_0028surface_0029_005fplots.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Backwards_005fcompatibility.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Batch_002fInteractive_005fOperation.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Binary.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Bugs.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Canvas_005fsize.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Command_002dline_002dediting.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Command_005fIndex.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Commands.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Comments.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Concept_005fIndex.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Coordinates.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Copyright.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Datastrings.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Do.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/EllipticE.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/EllipticK.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/EllipticPi.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Enhanced_005ftext_005fmode.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Environment.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Expressions.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/External_005flibraries.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Fonts.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Function_005fIndex.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Functions.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Glossary.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Gnuplot_002ddefined_005fvariables.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Introduction.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Local_005fcustomization_005fof_005flinetypes.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Mouse_005fvariables.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/New_005ffeatures.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/New_005for_005frevised_005fterminal_005fdrivers.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/New_005fplot_005fstyles.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/New_005fsmoothing_005falgorithms.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/New_005fsyntax.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/New_005ftime_002fdate_005fhandling.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Openstep_005f_0028next_0029.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Operators.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Options_005fIndex.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Plotting.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Quote_005fMarks.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Random_005fnumber_005fgenerator.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Revised_005fpolar_005faxes.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Seeking_002dassistance.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Start_002dup_005f_0028initialization_0029.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Statistical_005fsummary_005fof_005fdata.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/String_005fconstants_005fand_005fstring_005fvariables.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/String_005fvariables.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Substitution_005fand_005fCommand_005fline_005fmacros.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Substitution_005fof_005fstring_005fvariables_005fas_005fmacros.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Substitution_005fof_005fsystem_005fcommands_005fin_005fbackquotes.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Summation.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Syntax.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Terminal_005fIndex.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Terminal_005ftypes.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Ternary.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Time_002fDate_005fdata.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/Unary.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/User_002ddefined_005fvariables_005fand_005ffunctions.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/VWS.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/While.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/X11_005fmouse.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/abs.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/acos.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/acosh.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/adjustable_005fparameters.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/aed767.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/aifm.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/airy.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/algorithm.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/angles.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/aqua.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/arg.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/array.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/arrow.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/asin.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/asinh.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/atan.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/atan2.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/atanh.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/automated_005fiteration_005fover_005fmultiple_005fcolumns.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/autoscale.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/axes.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/background_005fcolor.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/bars.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/be.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/besj0.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/besj1.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/besy0.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/besy1.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/binary.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/bind.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/bind_005f.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/bind_005fspace.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/bmargin.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/border.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/boxerrorbars.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/boxes.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/boxplot.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/boxplot_005f.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/boxwidth.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/boxxyerrorbars.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/cairo_005f_0028pdfcairo.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/call.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/candlesticks.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/canvas.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/cbdata.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/cbdtics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/cblabel.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/cbmtics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/cbrange.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/cbtics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/cd.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/ceil.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/cgi.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/cgm.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/circle.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/circles.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/clabel.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/clear.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/clip.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/clipping.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/cntrparam.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/color_005fassignment.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/color_005fbox.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/colornames.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/colorspec.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/column.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/columnhead.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/complete_005flist_005fof_005fterminals.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/context.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/contour.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/control.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/control_005fvariables.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/corel.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/cos.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/cosh.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/cubehelix.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/data.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/data_002dfile.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/data_005fstyle.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/datafile.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/debug.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/decimalsign.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/defined.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/defined_005f.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/deprecated_005foptions.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/dgrid3d.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/dospc.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/dots.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/doubleclick.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/dumb.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/dummy.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/dxf.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/dxy800a.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/eepic.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/ellipse.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/ellipses.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/elliptic_005fintegrals.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/emf.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/emxvga.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/encoding.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/endian.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/environment_005fvariables.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/epscairo.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/epson_005f180dpi.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/equal_005faxes.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/erf.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/erfc.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/error_005festimates.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/errorbars.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/errorlines.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/evaluate.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/every.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/example_005fdatafile.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/example_005fdatafile_005f.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/excl.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/exists.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/exit.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/exp.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/expint.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/fig.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/file.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/filetype.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/filledcurves.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/fillsteps.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/financebars.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/fit.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/fit_005f.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/floor.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/fontpath.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/format.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/format_005f.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/format_005fspecifiers.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/fsteps.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/function_005fstyle.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/functions.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/functions_005f.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/functions_005f_005f.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/gamma.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/gamma_005fcorrection.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/gd_005f_0028png.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/general.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/ggi.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/gnuplot.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/gpic.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/gprintf.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/gprintf_005f.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/grass.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/grid.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/grid_005fdata.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/help.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/hidden3d.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/hidden3d_005f.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/histeps.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/histograms.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/history.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/historysize.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/hp2623a.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/hp2648.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/hp500c.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/hpgl.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/hpljii.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/hppj.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/ibeta.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/if.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/if_002dold.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/igamma.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/imag.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/image.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/image_005ffailsafe.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/imagen.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/impulses.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/index.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/int.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/interpolate.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/inverf.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/invnorm.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/isosamples.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/iteration.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/iteration_005f.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/key.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/key_005fplacement.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/key_005fsamples.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/keywords.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/known_005flimitations.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/kyo.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/label.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/labels.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/lambertw.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/latex.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/lgamma.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/linecolor_005fvariable.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/lines.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/linespoints.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/linestyles_005fvs_005flinetypes.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/linetype.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/linetypes.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/linux.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/lmargin.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/load.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/loadpath.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/locale.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/log.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/log10.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/logscale.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/lower.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/lua.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/macintosh.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/macros.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/mapping.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/margin.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/matrix.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/mf.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/mif.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/mouse.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/mouse_005finput.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/mouseformat.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/mp.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/multi_002dbranch.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/multiplot.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/mx2tics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/mxtics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/my2tics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/mytics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/mztics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/newhistogram.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/next.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/norm.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/object.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/offsets.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/origin.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/output.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/palette.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/parametric.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/parametric_005f.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/parametric_005fmode.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/pause.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/pbm.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/pdf.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/plot.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/plot_005f.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/plotting_005fstyles.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/pm3d.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/png_005f.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/pointintervalbox.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/points.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/pointsize.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/polar.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/polar_005f.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/polar_005fmode.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/polygon.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/position.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/postscript.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/postscript_005f_005f_0028also_005fencapsulated_005fpostscript_005f_002a_002eeps_0029.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/practical_005fguidelines.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/print.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/print_005f.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/psdir.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/pstricks.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/pwd.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/qms.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/quit.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/raise.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/rand.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/ranges.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/raxis.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/real.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/record.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/rectangle.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/refresh.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/regis.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/replot.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/reread.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/reset.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/rgbalpha.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/rgbcolor_005fvariable.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/rgbformulae.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/rgbimage.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/rmargin.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/rrange.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/rtics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/samples.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/save.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/scanorder.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/scrolling.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/set_002dshow.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/set_005fdatafile_005fbinary.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/set_005fdatafile_005fcommentschars.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/set_005fdatafile_005ffortran.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/set_005fdatafile_005fmissing.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/set_005fdatafile_005fnofpe_005ftrap.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/set_005fdatafile_005fseparator.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/set_005fstyle_005farrow.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/set_005fstyle_005fcircle.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/set_005fstyle_005fdata.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/set_005fstyle_005fellipse.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/set_005fstyle_005ffill.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/set_005fstyle_005ffunction.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/set_005fstyle_005fincrement.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/set_005fstyle_005fline.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/set_005fstyle_005frectangle.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/sgn.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/shell.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/short_005fintroduction.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/sin.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/sinh.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/size.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/skip.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/smooth.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/special_002dfilenames.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/splot.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/splot_005fsurfaces.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/sprintf.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/sqrt.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/starting_005fvalues.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/statistical_005foverview.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/stats_005f_0028Statistical_005fSummary_0029.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/steps.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/strftime.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/stringcolumn.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/strlen.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/strptime.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/strstrt.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/style.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/substr.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/sun.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/surface.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/svg.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/svga.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/system.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/system_005f.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/table.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/tan.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/tanh.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/tek40.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/tek410x.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/terminal.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/termoption.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/test.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/texdraw.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/tgif.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/thru.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/tics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/ticscale.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/ticslevel.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/time.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/time_002fdate_005fspecifiers.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/timecolumn.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/timefmt.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/timestamp.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/tips.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/title.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/title_005f.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/tkcanvas.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/tm_005fhour.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/tm_005fmday.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/tm_005fmin.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/tm_005fmon.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/tm_005fsec.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/tm_005fwday.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/tm_005fyday.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/tm_005fyear.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/tmargin.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/tpic.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/trange.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/transparency.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/undefine.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/unixpc.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/unset.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/update.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/urange.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/using.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/valid.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/value.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/variables.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/vectors.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/version.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/vgagl.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/view.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/voigt.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/volatile.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/vrange.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/vx384.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/windows.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/with.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/word.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/words.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/wxt.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/x11.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/x2data.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/x2dtics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/x2label.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/x2mtics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/x2range.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/x2tics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/x2zeroaxis.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/xdata.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/xdtics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/xerrorbars.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/xerrorlines.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/xlabel.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/xlib.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/xmtics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/xrange.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/xtics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/xtics_005frangelimited.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/xtics_005ftime_005fdata.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/xyerrorbars.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/xyerrorlines.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/xyplane.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/xzeroaxis.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/y2data.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/y2dtics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/y2label.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/y2mtics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/y2range.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/y2tics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/y2zeroaxis.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/ydata.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/ydtics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/yerrorbars.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/yerrorlines.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/ylabel.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/ymtics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/yrange.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/ytics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/yzeroaxis.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/zdata.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/zdtics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/zero.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/zeroaxis.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/zlabel.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/zmtics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/zoom.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/zrange.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/ztics.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/html/zzeroaxis.html doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/ps_file.doc.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/ps_fontfile_doc.ps.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/ps_guide.ps.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/ps_symbols.gpi.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/tutorial.dvi.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-doc/tutorial.ps.gz doc/gnuplot-doc
+usr/share/doc/gnuplot-nox/BUGS math/gnuplot-nox
+usr/share/doc/gnuplot-nox/FAQ.pdf.gz math/gnuplot-nox
+usr/share/doc/gnuplot-nox/NEWS.gz math/gnuplot-nox
+usr/share/doc/gnuplot-nox/README.1ST math/gnuplot-nox
+usr/share/doc/gnuplot-nox/README.Debian math/gnuplot-nox
+usr/share/doc/gnuplot-nox/README.gz math/gnuplot-nox
+usr/share/doc/gnuplot-nox/changelog.Debian.gz math/gnuplot-nox
+usr/share/doc/gnuplot-nox/changelog.gz math/gnuplot-nox
+usr/share/doc/gnuplot-nox/copyright math/gnuplot-nox
+usr/share/doc/gnuplot-x11/changelog.Debian.gz math/gnuplot-x11
+usr/share/doc/gnuplot-x11/changelog.gz math/gnuplot-x11
+usr/share/doc/gnuplot-x11/copyright math/gnuplot-x11
+usr/share/gnuplot/gnuplot.gih math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/PostScript/8859-1.ps math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/PostScript/8859-15.ps math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/PostScript/8859-2.ps math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/PostScript/8859-9.ps math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/PostScript/aglfn.txt math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/PostScript/cp1250.ps math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/PostScript/cp1251.ps math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/PostScript/cp437.ps math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/PostScript/cp850.ps math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/PostScript/cp852.ps math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/PostScript/koi8r.ps math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/PostScript/koi8u.ps math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/PostScript/prologue.ps math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/PostScript/utf-8.ps math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/app-defaults/Gnuplot math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/colors_default.gp math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/colors_mono.gp math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/colors_podo.gp math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/gnuplotrc math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/js/README math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/js/canvasmath.js math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/js/canvastext.js math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/js/gnuplot_common.js math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/js/gnuplot_dashedlines.js math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/js/gnuplot_mouse.css math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/js/gnuplot_mouse.js math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/js/gnuplot_svg.js math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/js/grid.png math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/js/help.png math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/js/nextzoom.png math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/js/previouszoom.png math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/js/textzoom.png math/gnuplot-nox
+usr/share/gnuplot/gnuplot/4.6/lua/gnuplot-tikz.lua math/gnuplot-nox
+usr/share/gnuplot/pm3d/README math/gnuplot-nox
+usr/share/gnuplot/pm3d/colorpts-demo.gp math/gnuplot-nox
+usr/share/gnuplot/pm3d/colorpts.awk math/gnuplot-nox
+usr/share/gnuplot/pm3d/pm3dCompress.awk math/gnuplot-nox
+usr/share/gnuplot/pm3d/pm3dConvertToImage.awk math/gnuplot-nox
+usr/share/gnuplot/pm3d/pts.dat math/gnuplot-nox
+usr/share/info/gnuplot.info.gz doc/gnuplot-doc
+usr/share/man/man1/gnuplot.1.gz math/gnuplot-nox,math/gnuplot-x11
+usr/share/menu/gnuplot-nox math/gnuplot-nox
diff --git a/system/t06_publish/PublishSnapshot39Test_gold b/system/t06_publish/PublishSnapshot39Test_gold
new file mode 100644
index 00000000..8cf10f19
--- /dev/null
+++ b/system/t06_publish/PublishSnapshot39Test_gold
@@ -0,0 +1,13 @@
+Loading packages...
+Generating metadata files and linking package files...
+Finalizing metadata files...
+Signing file 'Release' with gpg, please enter your passphrase when prompted:
+Clearsigning file 'Release' with gpg, please enter your passphrase when prompted:
+
+Snapshot snap1 has been successfully published.
+Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing.
+Now you can add following line to apt sources:
+ deb http://your-server/ maverick main
+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/PublishSnapshot39Test_packages_amd64 b/system/t06_publish/PublishSnapshot39Test_packages_amd64
new file mode 100644
index 00000000..32d16dda
--- /dev/null
+++ b/system/t06_publish/PublishSnapshot39Test_packages_amd64
@@ -0,0 +1,109 @@
+
+
+
+
+
+ .
+ .
+ .
+ .
+ .
+ .
+ .
+ .
+ C-like language. Can perform smoothing, spline-fitting, or nonlinear fits,
+ C-like language. Can perform smoothing, spline-fitting, or nonlinear fits,
+ C-like language. Can perform smoothing, spline-fitting, or nonlinear fits,
+ C-like language. Can perform smoothing, spline-fitting, or nonlinear fits,
+ Data files and self-defined functions can be manipulated by the internal
+ Data files and self-defined functions can be manipulated by the internal
+ Data files and self-defined functions can be manipulated by the internal
+ Data files and self-defined functions can be manipulated by the internal
+ Gnuplot is a portable command-line driven interactive data and function
+ Gnuplot is a portable command-line driven interactive data and function
+ Gnuplot is a portable command-line driven interactive data and function
+ Gnuplot is a portable command-line driven interactive data and function
+ This package contains the additional documentation.
+ This package contains the terminal driver that enables gnuplot to plot
+ This package is for transition and to install a full-featured gnuplot
+ This package is for working without an X server.
+ and can work with complex numbers.
+ and can work with complex numbers.
+ and can work with complex numbers.
+ and can work with complex numbers.
+ for many printers, (La)TeX, (x)fig, Postscript, and so on. The X11-output
+ for many printers, (La)TeX, (x)fig, Postscript, and so on. The X11-output
+ for many printers, (La)TeX, (x)fig, Postscript, and so on. The X11-output
+ for many printers, (La)TeX, (x)fig, Postscript, and so on. The X11-output
+ gnuplot.
+ images interactively under X11. Most users will want this, it is however
+ is packaged in gnuplot-x11.
+ is packaged in gnuplot-x11.
+ is packaged in gnuplot-x11.
+ is packaged in gnuplot-x11.
+ packaged separately so that low-end systems don't need X installed to use
+ plotting utility that supports lots of output formats, including drivers
+ plotting utility that supports lots of output formats, including drivers
+ plotting utility that supports lots of output formats, including drivers
+ plotting utility that supports lots of output formats, including drivers
+ supporting the X11-output.
+Architecture: all
+Architecture: all
+Architecture: amd64
+Architecture: amd64
+Depends: dpkg (>= 1.15.4) | install-info
+Depends: gnuplot-nox (>= 4.6.1-1~maverick2), gnuplot-x11 (>= 4.6.1-1~maverick2)
+Depends: gnuplot-nox (>= 4.6.1-1~maverick2), libc6 (>= 2.11), libcairo2 (>= 1.6.0), libedit2 (>= 2.5.cvs.20010821-1), libgcc1 (>= 1:4.1.1), libgd2-noxpm (>= 2.0.36~rc1~dfsg) | libgd2-xpm (>= 2.0.36~rc1~dfsg), libglib2.0-0 (>= 2.12.0), liblua5.1-0, libpango1.0-0 (>= 1.14.0), libstdc++6 (>= 4.1.1), libwxbase2.8-0 (>= 2.8.11.0), libwxgtk2.8-0 (>= 2.8.11.0), libx11-6
+Depends: libc6 (>= 2.11), libcairo2 (>= 1.6.0), libedit2 (>= 2.5.cvs.20010821-1), libgd2-noxpm (>= 2.0.36~rc1~dfsg) | libgd2-xpm (>= 2.0.36~rc1~dfsg), libglib2.0-0 (>= 2.12.0), liblua5.1-0, libpango1.0-0 (>= 1.14.0)
+Description: Command-line driven interactive plotting program
+Description: Command-line driven interactive plotting program
+Description: Command-line driven interactive plotting program
+Description: Command-line driven interactive plotting program
+Filename: pool/main/g/gnuplot/gnuplot-doc_4.6.1-1~maverick2_all.deb
+Filename: pool/main/g/gnuplot/gnuplot-nox_4.6.1-1~maverick2_amd64.deb
+Filename: pool/main/g/gnuplot/gnuplot-x11_4.6.1-1~maverick2_amd64.deb
+Filename: pool/main/g/gnuplot/gnuplot_4.6.1-1~maverick2_all.deb
+Installed-Size: 1716
+Installed-Size: 20
+Installed-Size: 2624
+Installed-Size: 5572
+MD5sum: 17ab6787992b979e3a4851a90dfaf0a8
+MD5sum: 25a5028811171f2f1fa157a2f6953e82
+MD5sum: 4912a4464d5588f685c4aa6cfc6be46c
+MD5sum: db55daca818697b23024255e536399da
+Maintainer: Debian Science Team
+Maintainer: Debian Science Team
+Maintainer: Debian Science Team
+Maintainer: Debian Science Team
+Package: gnuplot
+Package: gnuplot-doc
+Package: gnuplot-nox
+Package: gnuplot-x11
+Priority: optional
+Priority: optional
+Priority: optional
+Priority: optional
+Recommends: groff, ttf-liberation
+Replaces: gnuplot (<< 4.0.0)
+Replaces: gnuplot (<< 4.0.0)
+SHA1: 4a50deb413e05f77b31687405465b1229b3be328
+SHA1: 837dd002143054ca01d3b01cae410cc4b4fe10c4
+SHA1: d5a1b0bbfb562e5cecef3f3fb70ddb4cd6103507
+SHA1: d60b0ee30a885ba0202adddccd7968ab70be7426
+Section: doc
+Section: math
+Section: math
+Section: math
+Size: 1046
+Size: 1129114
+Size: 2675242
+Size: 819248
+Source: gnuplot
+Source: gnuplot
+Source: gnuplot
+Suggests: gnuplot-doc (>= 4.6.1-1~maverick2)
+Suggests: gnuplot-x11 (>= 4.6.1-1~maverick2), gnuplot-doc (>= 4.6.1-1~maverick2)
+Version: 4.6.1-1~maverick2
+Version: 4.6.1-1~maverick2
+Version: 4.6.1-1~maverick2
+Version: 4.6.1-1~maverick2
\ No newline at end of file
diff --git a/system/t06_publish/PublishSnapshot39Test_packages_i386 b/system/t06_publish/PublishSnapshot39Test_packages_i386
new file mode 100644
index 00000000..03967b87
--- /dev/null
+++ b/system/t06_publish/PublishSnapshot39Test_packages_i386
@@ -0,0 +1,109 @@
+
+
+
+
+
+ .
+ .
+ .
+ .
+ .
+ .
+ .
+ .
+ C-like language. Can perform smoothing, spline-fitting, or nonlinear fits,
+ C-like language. Can perform smoothing, spline-fitting, or nonlinear fits,
+ C-like language. Can perform smoothing, spline-fitting, or nonlinear fits,
+ C-like language. Can perform smoothing, spline-fitting, or nonlinear fits,
+ Data files and self-defined functions can be manipulated by the internal
+ Data files and self-defined functions can be manipulated by the internal
+ Data files and self-defined functions can be manipulated by the internal
+ Data files and self-defined functions can be manipulated by the internal
+ Gnuplot is a portable command-line driven interactive data and function
+ Gnuplot is a portable command-line driven interactive data and function
+ Gnuplot is a portable command-line driven interactive data and function
+ Gnuplot is a portable command-line driven interactive data and function
+ This package contains the additional documentation.
+ This package contains the terminal driver that enables gnuplot to plot
+ This package is for transition and to install a full-featured gnuplot
+ This package is for working without an X server.
+ and can work with complex numbers.
+ and can work with complex numbers.
+ and can work with complex numbers.
+ and can work with complex numbers.
+ for many printers, (La)TeX, (x)fig, Postscript, and so on. The X11-output
+ for many printers, (La)TeX, (x)fig, Postscript, and so on. The X11-output
+ for many printers, (La)TeX, (x)fig, Postscript, and so on. The X11-output
+ for many printers, (La)TeX, (x)fig, Postscript, and so on. The X11-output
+ gnuplot.
+ images interactively under X11. Most users will want this, it is however
+ is packaged in gnuplot-x11.
+ is packaged in gnuplot-x11.
+ is packaged in gnuplot-x11.
+ is packaged in gnuplot-x11.
+ packaged separately so that low-end systems don't need X installed to use
+ plotting utility that supports lots of output formats, including drivers
+ plotting utility that supports lots of output formats, including drivers
+ plotting utility that supports lots of output formats, including drivers
+ plotting utility that supports lots of output formats, including drivers
+ supporting the X11-output.
+Architecture: all
+Architecture: all
+Architecture: i386
+Architecture: i386
+Depends: dpkg (>= 1.15.4) | install-info
+Depends: gnuplot-nox (>= 4.6.1-1~maverick2), gnuplot-x11 (>= 4.6.1-1~maverick2)
+Depends: gnuplot-nox (>= 4.6.1-1~maverick2), libc6 (>= 2.11), libcairo2 (>= 1.6.0), libedit2 (>= 2.5.cvs.20010821-1), libgcc1 (>= 1:4.1.1), libgd2-noxpm (>= 2.0.36~rc1~dfsg) | libgd2-xpm (>= 2.0.36~rc1~dfsg), libglib2.0-0 (>= 2.12.0), liblua5.1-0, libpango1.0-0 (>= 1.14.0), libstdc++6 (>= 4.1.1), libwxbase2.8-0 (>= 2.8.11.0), libwxgtk2.8-0 (>= 2.8.11.0), libx11-6
+Depends: libc6 (>= 2.11), libcairo2 (>= 1.6.0), libedit2 (>= 2.5.cvs.20010821-1), libgd2-noxpm (>= 2.0.36~rc1~dfsg) | libgd2-xpm (>= 2.0.36~rc1~dfsg), libglib2.0-0 (>= 2.12.0), liblua5.1-0, libpango1.0-0 (>= 1.14.0)
+Description: Command-line driven interactive plotting program
+Description: Command-line driven interactive plotting program
+Description: Command-line driven interactive plotting program
+Description: Command-line driven interactive plotting program
+Filename: pool/main/g/gnuplot/gnuplot-doc_4.6.1-1~maverick2_all.deb
+Filename: pool/main/g/gnuplot/gnuplot-nox_4.6.1-1~maverick2_i386.deb
+Filename: pool/main/g/gnuplot/gnuplot-x11_4.6.1-1~maverick2_i386.deb
+Filename: pool/main/g/gnuplot/gnuplot_4.6.1-1~maverick2_all.deb
+Installed-Size: 1604
+Installed-Size: 20
+Installed-Size: 2536
+Installed-Size: 5572
+MD5sum: 25a5028811171f2f1fa157a2f6953e82
+MD5sum: 4912a4464d5588f685c4aa6cfc6be46c
+MD5sum: a7ef16004b62fd78acb77edb058ea1c1
+MD5sum: fcad938905d0ace50a6ce0c73b2c6583
+Maintainer: Debian Science Team
+Maintainer: Debian Science Team
+Maintainer: Debian Science Team
+Maintainer: Debian Science Team
+Package: gnuplot
+Package: gnuplot-doc
+Package: gnuplot-nox
+Package: gnuplot-x11
+Priority: optional
+Priority: optional
+Priority: optional
+Priority: optional
+Recommends: groff, ttf-liberation
+Replaces: gnuplot (<< 4.0.0)
+Replaces: gnuplot (<< 4.0.0)
+SHA1: 02f9a93097a8f798a054e26154dbe5789088c069
+SHA1: 4a50deb413e05f77b31687405465b1229b3be328
+SHA1: 629c3e62f787b0af47b184beb0460dd261c9ca4d
+SHA1: 837dd002143054ca01d3b01cae410cc4b4fe10c4
+Section: doc
+Section: math
+Section: math
+Section: math
+Size: 1046
+Size: 1046496
+Size: 2675242
+Size: 724388
+Source: gnuplot
+Source: gnuplot
+Source: gnuplot
+Suggests: gnuplot-doc (>= 4.6.1-1~maverick2)
+Suggests: gnuplot-x11 (>= 4.6.1-1~maverick2), gnuplot-doc (>= 4.6.1-1~maverick2)
+Version: 4.6.1-1~maverick2
+Version: 4.6.1-1~maverick2
+Version: 4.6.1-1~maverick2
+Version: 4.6.1-1~maverick2
\ No newline at end of file
diff --git a/system/t06_publish/PublishSnapshot39Test_release b/system/t06_publish/PublishSnapshot39Test_release
new file mode 100644
index 00000000..e3438616
--- /dev/null
+++ b/system/t06_publish/PublishSnapshot39Test_release
@@ -0,0 +1,11 @@
+Origin: LP-PPA-gladky-anton-gnuplot
+Label: . maverick
+Suite: stable
+Codename: maverick
+Architectures: amd64 i386
+Components: main
+Description: Generated by aptly
+MD5Sum:
+SHA1:
+SHA256:
+SHA512:
diff --git a/system/t06_publish/PublishSnapshot39Test_release_amd64 b/system/t06_publish/PublishSnapshot39Test_release_amd64
new file mode 100644
index 00000000..cfc9b675
--- /dev/null
+++ b/system/t06_publish/PublishSnapshot39Test_release_amd64
@@ -0,0 +1,6 @@
+Origin: LP-PPA-gladky-anton-gnuplot
+Label: . maverick
+Archive: maverick
+Suite: stable
+Architecture: amd64
+Component: main
diff --git a/system/t06_publish/PublishSnapshot39Test_release_i386 b/system/t06_publish/PublishSnapshot39Test_release_i386
new file mode 100644
index 00000000..a509da19
--- /dev/null
+++ b/system/t06_publish/PublishSnapshot39Test_release_i386
@@ -0,0 +1,6 @@
+Origin: LP-PPA-gladky-anton-gnuplot
+Label: . maverick
+Archive: maverick
+Suite: stable
+Architecture: i386
+Component: main
diff --git a/system/t06_publish/PublishSnapshot40Test_gold b/system/t06_publish/PublishSnapshot40Test_gold
new file mode 100644
index 00000000..57150a7d
--- /dev/null
+++ b/system/t06_publish/PublishSnapshot40Test_gold
@@ -0,0 +1,13 @@
+Loading packages...
+Generating metadata files and linking package files...
+Finalizing metadata files...
+Signing file 'Release' with gpg, please enter your passphrase when prompted:
+Clearsigning file 'Release' with gpg, please enter your passphrase when prompted:
+
+Snapshot snap40 has been successfully published.
+Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing.
+Now you can add following line to apt sources:
+ deb http://your-server/ maverick main
+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/PublishSwitch15Test_gold b/system/t06_publish/PublishSwitch15Test_gold
new file mode 100644
index 00000000..3f440f06
--- /dev/null
+++ b/system/t06_publish/PublishSwitch15Test_gold
@@ -0,0 +1,8 @@
+Loading packages...
+Generating metadata files and linking package files...
+Finalizing metadata files...
+Signing file 'Release' with gpg, please enter your passphrase when prompted:
+Clearsigning file 'Release' with gpg, please enter your passphrase when prompted:
+Cleaning up prefix "." components main...
+
+Publish for snapshot ./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 snapshot.
diff --git a/system/t06_publish/PublishUpdate13Test_gold b/system/t06_publish/PublishUpdate13Test_gold
new file mode 100644
index 00000000..72e92234
--- /dev/null
+++ b/system/t06_publish/PublishUpdate13Test_gold
@@ -0,0 +1,8 @@
+Loading packages...
+Generating metadata files and linking package files...
+Finalizing metadata files...
+Signing file 'Release' with gpg, please enter your passphrase when prompted:
+Clearsigning file 'Release' with gpg, please enter your passphrase when prompted:
+Cleaning up prefix "." components main...
+
+Publish for local repo ./maverick [i386, source] publishes {main: [local-repo]} has been successfully updated.
diff --git a/system/t06_publish/list.py b/system/t06_publish/list.py
index c44a8a1d..d5ad7c1f 100644
--- a/system/t06_publish/list.py
+++ b/system/t06_publish/list.py
@@ -41,3 +41,27 @@ class PublishList3Test(BaseTest):
"aptly publish snapshot -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -label=label1 snap2 ppa/tr2",
]
runCmd = "aptly publish list -raw"
+
+
+class PublishList4Test(BaseTest):
+ """
+ publish list json: empty list
+ """
+ runCmd = "aptly publish list -json"
+
+
+class PublishList5Test(BaseTest):
+ """
+ publish list json: several repos list
+ """
+ fixtureDB = True
+ fixturePool = True
+ fixtureCmds = [
+ "aptly snapshot create snap1 from mirror gnuplot-maverick",
+ "aptly snapshot merge snap2 snap1",
+ "aptly publish snapshot -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec snap1",
+ "aptly -architectures=amd64 publish snapshot -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=wheezy -component=contrib snap2 ppa/smira",
+ "aptly publish snapshot -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -origin=origin1 snap2 ppa/tr1",
+ "aptly publish snapshot -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -label=label1 snap2 ppa/tr2",
+ ]
+ runCmd = "aptly publish list -json"
diff --git a/system/t06_publish/repo.py b/system/t06_publish/repo.py
index bb61f9d3..fd3409d6 100644
--- a/system/t06_publish/repo.py
+++ b/system/t06_publish/repo.py
@@ -2,21 +2,13 @@ import os
import hashlib
import inspect
import re
-import zlib
-from lib import BaseTest
+from lib import BaseTest, ungzip_if_required
def strip_processor(output):
return "\n".join([l for l in output.split("\n") if not l.startswith(' ') and not l.startswith('Date:')])
-def ungzip_if_required(output):
- if output.startswith("\x1f\x8b"):
- return zlib.decompress(output, 16+zlib.MAX_WBITS)
-
- return output
-
-
class PublishRepo1Test(BaseTest):
"""
publish repo: default
@@ -46,21 +38,29 @@ class PublishRepo1Test(BaseTest):
self.check_exists('public/pool/main/p/pyspi/pyspi_0.6.1-1.3.dsc')
self.check_exists('public/pool/main/p/pyspi/pyspi_0.6.1-1.3.diff.gz')
self.check_exists('public/pool/main/p/pyspi/pyspi_0.6.1.orig.tar.gz')
- self.check_exists('public/pool/main/p/pyspi/pyspi-0.6.1-1.3.stripped.dsc')
- self.check_exists('public/pool/main/b/boost-defaults/libboost-program-options-dev_1.49.0.1_i386.deb')
+ self.check_exists(
+ 'public/pool/main/p/pyspi/pyspi-0.6.1-1.3.stripped.dsc')
+ self.check_exists(
+ 'public/pool/main/b/boost-defaults/libboost-program-options-dev_1.49.0.1_i386.deb')
# verify contents except of sums
- self.check_file_contents('public/dists/maverick/Release', 'release', match_prepare=strip_processor)
- self.check_file_contents('public/dists/maverick/main/source/Sources', 'sources', match_prepare=lambda s: "\n".join(sorted(s.split("\n"))))
- self.check_file_contents('public/dists/maverick/main/binary-i386/Packages', 'binary', match_prepare=lambda s: "\n".join(sorted(s.split("\n"))))
- self.check_file_contents('public/dists/maverick/main/Contents-i386.gz', 'contents_i386', match_prepare=ungzip_if_required)
- self.check_file_contents('public/dists/maverick/Contents-i386.gz', 'contents_i386_legacy', match_prepare=ungzip_if_required)
+ self.check_file_contents(
+ 'public/dists/maverick/Release', 'release', match_prepare=strip_processor)
+ self.check_file_contents('public/dists/maverick/main/source/Sources',
+ 'sources', match_prepare=lambda s: "\n".join(sorted(s.split("\n"))))
+ self.check_file_contents('public/dists/maverick/main/binary-i386/Packages',
+ 'binary', match_prepare=lambda s: "\n".join(sorted(s.split("\n"))))
+ self.check_file_contents('public/dists/maverick/main/Contents-i386.gz',
+ 'contents_i386', match_prepare=ungzip_if_required, mode='b', ensure_utf8=False)
+ self.check_file_contents('public/dists/maverick/Contents-i386.gz',
+ 'contents_i386_legacy', match_prepare=ungzip_if_required, mode='b', ensure_utf8=False)
# verify signatures
self.run_cmd([self.gpgFinder.gpg, "--no-auto-check-trustdb", "--keyring", os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "aptly.pub"),
"--verify", os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/InRelease')])
self.run_cmd([self.gpgFinder.gpg, "--no-auto-check-trustdb", "--keyring", os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "aptly.pub"),
- "--verify", os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/Release.gpg'),
+ "--verify", os.path.join(
+ os.environ["HOME"], ".aptly", 'public/dists/maverick/Release.gpg'),
os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/Release')])
# verify sums
@@ -77,9 +77,11 @@ class PublishRepo1Test(BaseTest):
fileSize = int(fileSize)
- st = os.stat(os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/', path))
+ st = os.stat(os.path.join(
+ os.environ["HOME"], ".aptly", 'public/dists/maverick/', path))
if fileSize != st.st_size:
- raise Exception("file size doesn't match for %s: %d != %d" % (path, fileSize, st.st_size))
+ raise Exception("file size doesn't match for %s: %d != %d" % (
+ path, fileSize, st.st_size))
if len(fileHash) == 32:
h = hashlib.md5()
@@ -90,10 +92,11 @@ class PublishRepo1Test(BaseTest):
else:
h = hashlib.sha512()
- h.update(self.read_file(os.path.join('public/dists/maverick', path)))
+ h.update(self.read_file(os.path.join('public/dists/maverick', path), mode='b'))
if h.hexdigest() != fileHash:
- raise Exception("file hash doesn't match for %s: %s != %s" % (path, fileHash, h.hexdigest()))
+ raise Exception("file hash doesn't match for %s: %s != %s" % (
+ path, fileHash, h.hexdigest()))
if pathsSeen != set(['main/binary-i386/Packages', 'main/binary-i386/Packages.bz2', 'main/binary-i386/Packages.gz',
'main/source/Sources', 'main/source/Sources.gz', 'main/source/Sources.bz2',
@@ -121,18 +124,24 @@ class PublishRepo2Test(BaseTest):
self.check_exists('public/dists/maverick/Release.gpg')
self.check_exists('public/dists/maverick/contrib/binary-i386/Packages')
- self.check_exists('public/dists/maverick/contrib/binary-i386/Packages.gz')
- self.check_exists('public/dists/maverick/contrib/binary-i386/Packages.bz2')
+ self.check_exists(
+ 'public/dists/maverick/contrib/binary-i386/Packages.gz')
+ self.check_exists(
+ 'public/dists/maverick/contrib/binary-i386/Packages.bz2')
self.check_exists('public/dists/maverick/contrib/Contents-i386.gz')
self.check_exists('public/dists/maverick/contrib/source/Sources')
self.check_exists('public/dists/maverick/contrib/source/Sources.gz')
self.check_exists('public/dists/maverick/contrib/source/Sources.bz2')
self.check_exists('public/pool/contrib/p/pyspi/pyspi_0.6.1-1.3.dsc')
- self.check_exists('public/pool/contrib/p/pyspi/pyspi_0.6.1-1.3.diff.gz')
- self.check_exists('public/pool/contrib/p/pyspi/pyspi_0.6.1.orig.tar.gz')
- self.check_exists('public/pool/contrib/p/pyspi/pyspi-0.6.1-1.3.stripped.dsc')
- self.check_exists('public/pool/contrib/b/boost-defaults/libboost-program-options-dev_1.49.0.1_i386.deb')
+ self.check_exists(
+ 'public/pool/contrib/p/pyspi/pyspi_0.6.1-1.3.diff.gz')
+ self.check_exists(
+ 'public/pool/contrib/p/pyspi/pyspi_0.6.1.orig.tar.gz')
+ self.check_exists(
+ 'public/pool/contrib/p/pyspi/pyspi-0.6.1-1.3.stripped.dsc')
+ self.check_exists(
+ 'public/pool/contrib/b/boost-defaults/libboost-program-options-dev_1.49.0.1_i386.deb')
class PublishRepo3Test(BaseTest):
@@ -154,18 +163,27 @@ class PublishRepo3Test(BaseTest):
self.check_exists('public/dists/maverick/Release.gpg')
self.check_exists('public/dists/maverick/contrib/binary-i386/Packages')
- self.check_exists('public/dists/maverick/contrib/binary-i386/Packages.gz')
- self.check_exists('public/dists/maverick/contrib/binary-i386/Packages.bz2')
+ self.check_exists(
+ 'public/dists/maverick/contrib/binary-i386/Packages.gz')
+ self.check_exists(
+ 'public/dists/maverick/contrib/binary-i386/Packages.bz2')
self.check_exists('public/dists/maverick/contrib/Contents-i386.gz')
self.check_not_exists('public/dists/maverick/contrib/source/Sources')
- self.check_not_exists('public/dists/maverick/contrib/source/Sources.gz')
- self.check_not_exists('public/dists/maverick/contrib/source/Sources.bz2')
+ self.check_not_exists(
+ 'public/dists/maverick/contrib/source/Sources.gz')
+ self.check_not_exists(
+ 'public/dists/maverick/contrib/source/Sources.bz2')
- self.check_not_exists('public/pool/contrib/p/pyspi/pyspi_0.6.1-1.3.dsc')
- self.check_not_exists('public/pool/contrib/p/pyspi/pyspi_0.6.1-1.3.diff.gz')
- self.check_not_exists('public/pool/contrib/p/pyspi/pyspi_0.6.1.orig.tar.gz')
- self.check_not_exists('public/pool/contrib/p/pyspi/pyspi-0.6.1-1.3.stripped.dsc')
- self.check_exists('public/pool/contrib/b/boost-defaults/libboost-program-options-dev_1.49.0.1_i386.deb')
+ self.check_not_exists(
+ 'public/pool/contrib/p/pyspi/pyspi_0.6.1-1.3.dsc')
+ self.check_not_exists(
+ 'public/pool/contrib/p/pyspi/pyspi_0.6.1-1.3.diff.gz')
+ self.check_not_exists(
+ 'public/pool/contrib/p/pyspi/pyspi_0.6.1.orig.tar.gz')
+ self.check_not_exists(
+ 'public/pool/contrib/p/pyspi/pyspi-0.6.1-1.3.stripped.dsc')
+ self.check_exists(
+ 'public/pool/contrib/b/boost-defaults/libboost-program-options-dev_1.49.0.1_i386.deb')
class PublishRepo4Test(BaseTest):
@@ -186,19 +204,26 @@ class PublishRepo4Test(BaseTest):
self.check_exists('public/ppa/dists/maverick/Release')
self.check_exists('public/ppa/dists/maverick/Release.gpg')
- self.check_exists('public/ppa/dists/maverick/main/binary-i386/Packages')
- self.check_exists('public/ppa/dists/maverick/main/binary-i386/Packages.gz')
- self.check_exists('public/ppa/dists/maverick/main/binary-i386/Packages.bz2')
+ self.check_exists(
+ 'public/ppa/dists/maverick/main/binary-i386/Packages')
+ self.check_exists(
+ 'public/ppa/dists/maverick/main/binary-i386/Packages.gz')
+ self.check_exists(
+ 'public/ppa/dists/maverick/main/binary-i386/Packages.bz2')
self.check_exists('public/ppa/dists/maverick/main/Contents-i386.gz')
self.check_exists('public/ppa/dists/maverick/main/source/Sources')
self.check_exists('public/ppa/dists/maverick/main/source/Sources.gz')
self.check_exists('public/ppa/dists/maverick/main/source/Sources.bz2')
self.check_exists('public/ppa/pool/main/p/pyspi/pyspi_0.6.1-1.3.dsc')
- self.check_exists('public/ppa/pool/main/p/pyspi/pyspi_0.6.1-1.3.diff.gz')
- self.check_exists('public/ppa/pool/main/p/pyspi/pyspi_0.6.1.orig.tar.gz')
- self.check_exists('public/ppa/pool/main/p/pyspi/pyspi-0.6.1-1.3.stripped.dsc')
- self.check_exists('public/ppa/pool/main/b/boost-defaults/libboost-program-options-dev_1.49.0.1_i386.deb')
+ self.check_exists(
+ 'public/ppa/pool/main/p/pyspi/pyspi_0.6.1-1.3.diff.gz')
+ self.check_exists(
+ 'public/ppa/pool/main/p/pyspi/pyspi_0.6.1.orig.tar.gz')
+ self.check_exists(
+ 'public/ppa/pool/main/p/pyspi/pyspi-0.6.1-1.3.stripped.dsc')
+ self.check_exists(
+ 'public/ppa/pool/main/b/boost-defaults/libboost-program-options-dev_1.49.0.1_i386.deb')
class PublishRepo5Test(BaseTest):
@@ -310,14 +335,16 @@ class PublishRepo12Test(BaseTest):
self.check_exists('public/dists/maverick/main/binary-i386/Packages')
self.check_exists('public/dists/maverick/main/binary-i386/Packages.gz')
- self.check_exists('public/dists/maverick/main/binary-i386/Packages.bz2')
+ self.check_exists(
+ 'public/dists/maverick/main/binary-i386/Packages.bz2')
self.check_exists('public/dists/maverick/main/Contents-i386.gz')
self.check_exists('public/dists/maverick/main/source/Sources')
self.check_exists('public/dists/maverick/main/source/Sources.gz')
self.check_exists('public/dists/maverick/main/source/Sources.bz2')
# verify contents except of sums
- self.check_file_contents('public/dists/maverick/Release', 'release', match_prepare=strip_processor)
+ self.check_file_contents(
+ 'public/dists/maverick/Release', 'release', match_prepare=strip_processor)
class PublishRepo13Test(BaseTest):
@@ -351,18 +378,24 @@ class PublishRepo14Test(BaseTest):
self.check_exists('public/dists/maverick/Release.gpg')
self.check_exists('public/dists/maverick/contrib/binary-i386/Packages')
- self.check_exists('public/dists/maverick/contrib/binary-i386/Packages.gz')
- self.check_exists('public/dists/maverick/contrib/binary-i386/Packages.bz2')
+ self.check_exists(
+ 'public/dists/maverick/contrib/binary-i386/Packages.gz')
+ self.check_exists(
+ 'public/dists/maverick/contrib/binary-i386/Packages.bz2')
self.check_exists('public/dists/maverick/contrib/Contents-i386.gz')
self.check_exists('public/dists/maverick/contrib/source/Sources')
self.check_exists('public/dists/maverick/contrib/source/Sources.gz')
self.check_exists('public/dists/maverick/contrib/source/Sources.bz2')
self.check_exists('public/pool/contrib/p/pyspi/pyspi_0.6.1-1.3.dsc')
- self.check_exists('public/pool/contrib/p/pyspi/pyspi_0.6.1-1.3.diff.gz')
- self.check_exists('public/pool/contrib/p/pyspi/pyspi_0.6.1.orig.tar.gz')
- self.check_exists('public/pool/contrib/p/pyspi/pyspi-0.6.1-1.3.stripped.dsc')
- self.check_exists('public/pool/contrib/b/boost-defaults/libboost-program-options-dev_1.49.0.1_i386.deb')
+ self.check_exists(
+ 'public/pool/contrib/p/pyspi/pyspi_0.6.1-1.3.diff.gz')
+ self.check_exists(
+ 'public/pool/contrib/p/pyspi/pyspi_0.6.1.orig.tar.gz')
+ self.check_exists(
+ 'public/pool/contrib/p/pyspi/pyspi-0.6.1-1.3.stripped.dsc')
+ self.check_exists(
+ 'public/pool/contrib/b/boost-defaults/libboost-program-options-dev_1.49.0.1_i386.deb')
class PublishRepo15Test(BaseTest):
@@ -380,7 +413,8 @@ class PublishRepo15Test(BaseTest):
super(PublishRepo15Test, self).check()
# verify contents except of sums
- self.check_file_contents('public/dists/maverick/Release', 'release', match_prepare=strip_processor)
+ self.check_file_contents(
+ 'public/dists/maverick/Release', 'release', match_prepare=strip_processor)
class PublishRepo16Test(BaseTest):
@@ -403,7 +437,8 @@ class PublishRepo16Test(BaseTest):
self.check_exists('public/dists/maverick/main/binary-i386/Packages')
self.check_exists('public/dists/maverick/main/binary-i386/Packages.gz')
- self.check_exists('public/dists/maverick/main/binary-i386/Packages.bz2')
+ self.check_exists(
+ 'public/dists/maverick/main/binary-i386/Packages.bz2')
self.check_exists('public/dists/maverick/main/source/Sources')
self.check_exists('public/dists/maverick/main/source/Sources.gz')
self.check_exists('public/dists/maverick/main/source/Sources.bz2')
@@ -431,14 +466,17 @@ class PublishRepo17Test(BaseTest):
self.check_exists('public/dists/maverick/main/binary-i386/Packages')
self.check_exists('public/dists/maverick/main/binary-i386/Packages.gz')
- self.check_exists('public/dists/maverick/main/binary-i386/Packages.bz2')
+ self.check_exists(
+ 'public/dists/maverick/main/binary-i386/Packages.bz2')
self.check_exists('public/dists/maverick/main/source/Sources')
self.check_exists('public/dists/maverick/main/source/Sources.gz')
self.check_exists('public/dists/maverick/main/source/Sources.bz2')
self.check_exists('public/dists/maverick/contrib/binary-i386/Packages')
- self.check_exists('public/dists/maverick/contrib/binary-i386/Packages.gz')
- self.check_exists('public/dists/maverick/contrib/binary-i386/Packages.bz2')
+ self.check_exists(
+ 'public/dists/maverick/contrib/binary-i386/Packages.gz')
+ self.check_exists(
+ 'public/dists/maverick/contrib/binary-i386/Packages.bz2')
self.check_exists('public/dists/maverick/contrib/source/Sources')
self.check_exists('public/dists/maverick/contrib/source/Sources.gz')
self.check_exists('public/dists/maverick/contrib/source/Sources.bz2')
@@ -446,20 +484,26 @@ class PublishRepo17Test(BaseTest):
self.check_exists('public/pool/main/p/pyspi/pyspi_0.6.1-1.3.dsc')
self.check_exists('public/pool/main/p/pyspi/pyspi_0.6.1-1.3.diff.gz')
self.check_exists('public/pool/main/p/pyspi/pyspi_0.6.1.orig.tar.gz')
- self.check_exists('public/pool/main/b/boost-defaults/libboost-program-options-dev_1.49.0.1_i386.deb')
+ self.check_exists(
+ 'public/pool/main/b/boost-defaults/libboost-program-options-dev_1.49.0.1_i386.deb')
- self.check_exists('public/pool/contrib/p/pyspi/pyspi_0.6.1-1.3.diff.gz')
- self.check_exists('public/pool/contrib/p/pyspi/pyspi_0.6.1.orig.tar.gz')
- self.check_exists('public/pool/contrib/p/pyspi/pyspi-0.6.1-1.3.stripped.dsc')
+ self.check_exists(
+ 'public/pool/contrib/p/pyspi/pyspi_0.6.1-1.3.diff.gz')
+ self.check_exists(
+ 'public/pool/contrib/p/pyspi/pyspi_0.6.1.orig.tar.gz')
+ self.check_exists(
+ 'public/pool/contrib/p/pyspi/pyspi-0.6.1-1.3.stripped.dsc')
# verify contents except of sums
- self.check_file_contents('public/dists/maverick/Release', 'release', match_prepare=strip_processor)
+ self.check_file_contents(
+ 'public/dists/maverick/Release', 'release', match_prepare=strip_processor)
# verify signatures
self.run_cmd([self.gpgFinder.gpg, "--no-auto-check-trustdb", "--keyring", os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "aptly.pub"),
"--verify", os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/InRelease')])
self.run_cmd([self.gpgFinder.gpg, "--no-auto-check-trustdb", "--keyring", os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "aptly.pub"),
- "--verify", os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/Release.gpg'),
+ "--verify", os.path.join(
+ os.environ["HOME"], ".aptly", 'public/dists/maverick/Release.gpg'),
os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/Release')])
# verify sums
@@ -476,9 +520,11 @@ class PublishRepo17Test(BaseTest):
fileSize = int(fileSize)
- st = os.stat(os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/', path))
+ st = os.stat(os.path.join(
+ os.environ["HOME"], ".aptly", 'public/dists/maverick/', path))
if fileSize != st.st_size:
- raise Exception("file size doesn't match for %s: %d != %d" % (path, fileSize, st.st_size))
+ raise Exception("file size doesn't match for %s: %d != %d" % (
+ path, fileSize, st.st_size))
if len(fileHash) == 32:
h = hashlib.md5()
@@ -489,10 +535,11 @@ class PublishRepo17Test(BaseTest):
else:
h = hashlib.sha512()
- h.update(self.read_file(os.path.join('public/dists/maverick', path)))
+ h.update(self.read_file(os.path.join('public/dists/maverick', path), mode='b'))
if h.hexdigest() != fileHash:
- raise Exception("file hash doesn't match for %s: %s != %s" % (path, fileHash, h.hexdigest()))
+ raise Exception("file hash doesn't match for %s: %s != %s" % (
+ path, fileHash, h.hexdigest()))
if pathsSeen != set(['main/binary-i386/Packages', 'main/binary-i386/Packages.gz',
'main/binary-i386/Packages.bz2',
@@ -579,8 +626,8 @@ class PublishRepo23Test(BaseTest):
runCmd = "aptly publish repo -component=main,contrib repo1"
expectedCode = 2
- def outputMatchPrepare(_, s):
- return "\n".join([l for l in s.split("\n") if l.startswith("ERROR")])
+ def outputMatchPrepare(self, s):
+ return "\n".join([l for l in self.ensure_utf8(s).split("\n") if l.startswith("ERROR")])
class PublishRepo24Test(BaseTest):
@@ -616,13 +663,15 @@ class PublishRepo25Test(BaseTest):
def check(self):
super(PublishRepo25Test, self).check()
- self.check_file_contents("public/pool/main/p/pyspi/pyspi_0.6.1.orig.tar.gz", "file")
+ self.check_file_contents(
+ "public/pool/main/p/pyspi/pyspi_0.6.1.orig.tar.gz", "file")
class PublishRepo26Test(BaseTest):
"""
publish repo: sign with passphrase
"""
+ skipTest = "Failing on CI"
fixtureCmds = [
"aptly repo create local-repo",
"aptly repo add local-repo ${files}",
@@ -640,7 +689,8 @@ class PublishRepo26Test(BaseTest):
self.run_cmd([self.gpgFinder.gpg, "--no-auto-check-trustdb", "--keyring", os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "aptly_passphrase.pub"),
"--verify", os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/InRelease')])
self.run_cmd([self.gpgFinder.gpg, "--no-auto-check-trustdb", "--keyring", os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "aptly_passphrase.pub"),
- "--verify", os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/Release.gpg'),
+ "--verify", os.path.join(
+ os.environ["HOME"], ".aptly", 'public/dists/maverick/Release.gpg'),
os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/Release')])
@@ -665,12 +715,17 @@ class PublishRepo27Test(BaseTest):
self.check_exists('public/dists/maverick/main/binary-i386/Release')
self.check_exists('public/dists/maverick/main/binary-i386/Packages')
self.check_exists('public/dists/maverick/main/binary-i386/Packages.gz')
- self.check_exists('public/dists/maverick/main/binary-i386/Packages.bz2')
+ self.check_exists(
+ 'public/dists/maverick/main/binary-i386/Packages.bz2')
self.check_exists('public/dists/maverick/main/Contents-i386.gz')
- self.check_exists('public/dists/maverick/main/debian-installer/binary-i386/Release')
- self.check_exists('public/dists/maverick/main/debian-installer/binary-i386/Packages')
- self.check_exists('public/dists/maverick/main/debian-installer/binary-i386/Packages.gz')
- self.check_exists('public/dists/maverick/main/debian-installer/binary-i386/Packages.bz2')
+ self.check_exists(
+ 'public/dists/maverick/main/debian-installer/binary-i386/Release')
+ self.check_exists(
+ 'public/dists/maverick/main/debian-installer/binary-i386/Packages')
+ self.check_exists(
+ 'public/dists/maverick/main/debian-installer/binary-i386/Packages.gz')
+ self.check_exists(
+ 'public/dists/maverick/main/debian-installer/binary-i386/Packages.bz2')
self.check_exists('public/dists/maverick/main/Contents-udeb-i386.gz')
self.check_exists('public/dists/maverick/main/source/Release')
self.check_exists('public/dists/maverick/main/source/Sources')
@@ -680,13 +735,18 @@ class PublishRepo27Test(BaseTest):
self.check_exists('public/pool/main/p/pyspi/pyspi_0.6.1-1.3.dsc')
self.check_exists('public/pool/main/p/pyspi/pyspi_0.6.1-1.3.diff.gz')
self.check_exists('public/pool/main/p/pyspi/pyspi_0.6.1.orig.tar.gz')
- self.check_exists('public/pool/main/p/pyspi/pyspi-0.6.1-1.3.stripped.dsc')
- self.check_exists('public/pool/main/b/boost-defaults/libboost-program-options-dev_1.49.0.1_i386.deb')
- self.check_exists('public/pool/main/d/dmraid/dmraid-udeb_1.0.0.rc16-4.1_amd64.udeb')
- self.check_exists('public/pool/main/d/dmraid/dmraid-udeb_1.0.0.rc16-4.1_i386.udeb')
+ self.check_exists(
+ 'public/pool/main/p/pyspi/pyspi-0.6.1-1.3.stripped.dsc')
+ self.check_exists(
+ 'public/pool/main/b/boost-defaults/libboost-program-options-dev_1.49.0.1_i386.deb')
+ self.check_exists(
+ 'public/pool/main/d/dmraid/dmraid-udeb_1.0.0.rc16-4.1_amd64.udeb')
+ self.check_exists(
+ 'public/pool/main/d/dmraid/dmraid-udeb_1.0.0.rc16-4.1_i386.udeb')
# verify contents except of sums
- self.check_file_contents('public/dists/maverick/main/debian-installer/binary-i386/Packages', 'udeb_binary', match_prepare=lambda s: "\n".join(sorted(s.split("\n"))))
+ self.check_file_contents('public/dists/maverick/main/debian-installer/binary-i386/Packages',
+ 'udeb_binary', match_prepare=lambda s: "\n".join(sorted(s.split("\n"))))
class PublishRepo28Test(BaseTest):
@@ -707,8 +767,10 @@ class PublishRepo28Test(BaseTest):
self.check_exists('public/dists/maverick/main/binary-i386/Release')
self.check_not_exists('public/dists/maverick/main/Contents-i386.gz')
- self.check_exists('public/dists/maverick/main/debian-installer/binary-i386/Release')
- self.check_not_exists('public/dists/maverick/main/Contents-udeb-i386.gz')
+ self.check_exists(
+ 'public/dists/maverick/main/debian-installer/binary-i386/Release')
+ self.check_not_exists(
+ 'public/dists/maverick/main/Contents-udeb-i386.gz')
class PublishRepo29Test(BaseTest):
@@ -742,7 +804,8 @@ class PublishRepo30Test(BaseTest):
self.run_cmd([self.gpgFinder.gpg, "--no-auto-check-trustdb", "--keyring", os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "aptly.pub"),
"--verify", os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/InRelease')])
self.run_cmd([self.gpgFinder.gpg, "--no-auto-check-trustdb", "--keyring", os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "aptly.pub"),
- "--verify", os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/Release.gpg'),
+ "--verify", os.path.join(
+ os.environ["HOME"], ".aptly", 'public/dists/maverick/Release.gpg'),
os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/Release')])
@@ -758,8 +821,8 @@ class PublishRepo31Test(BaseTest):
gold_processor = BaseTest.expand_environ
configOverride = {"gpgProvider": "internal"}
- def outputMatchPrepare(_, s):
- return re.sub(r' \d{4}-\d{2}-\d{2}', '', s)
+ def outputMatchPrepare(self, s):
+ return re.sub(r' \d{4}-\d{2}-\d{2}', '', self.ensure_utf8(s))
def check(self):
super(PublishRepo31Test, self).check()
@@ -768,7 +831,8 @@ class PublishRepo31Test(BaseTest):
self.run_cmd([self.gpgFinder.gpg, "--no-auto-check-trustdb", "--keyring", os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "aptly_passphrase.pub"),
"--verify", os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/InRelease')])
self.run_cmd([self.gpgFinder.gpg, "--no-auto-check-trustdb", "--keyring", os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "aptly_passphrase.pub"),
- "--verify", os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/Release.gpg'),
+ "--verify", os.path.join(
+ os.environ["HOME"], ".aptly", 'public/dists/maverick/Release.gpg'),
os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/Release')])
@@ -791,8 +855,36 @@ class PublishRepo32Test(BaseTest):
super(PublishRepo32Test, self).check()
# verify signatures
- self.run_cmd([self.gpgFinder.gpg, "--no-auto-check-trustdb", "--keyring", os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "aptly_passphrase.pub"),
+ self.run_cmd([self.gpgFinder.gpg, "--no-auto-check-trustdb", "--keyring", os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "aptly.pub"),
"--verify", os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/InRelease')])
- self.run_cmd([self.gpgFinder.gpg, "--no-auto-check-trustdb", "--keyring", os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "aptly_passphrase.pub"),
- "--verify", os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/Release.gpg'),
+ self.run_cmd([self.gpgFinder.gpg, "--no-auto-check-trustdb", "--keyring", os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "aptly.pub"),
+ "--verify", os.path.join(
+ os.environ["HOME"], ".aptly", 'public/dists/maverick/Release.gpg'),
os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/Release')])
+
+
+class PublishRepo33Test(BaseTest):
+ """
+ publish repo: -skip-bz2
+ """
+ fixtureCmds = [
+ "aptly repo create local-repo",
+ "aptly repo add local-repo ${files} ${udebs}",
+ ]
+ runCmd = "aptly publish repo -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=maverick -skip-bz2 local-repo"
+ gold_processor = BaseTest.expand_environ
+
+ def check(self):
+ super(PublishRepo33Test, self).check()
+
+ self.check_exists('public/dists/maverick/Release')
+
+ self.check_exists('public/dists/maverick/main/binary-i386/Release')
+ self.check_exists('public/dists/maverick/main/binary-i386/Packages')
+ self.check_exists('public/dists/maverick/main/binary-i386/Packages.gz')
+ self.check_not_exists('public/dists/maverick/main/binary-i386/Packages.bz2')
+
+ self.check_exists('public/dists/maverick/main/binary-amd64/Release')
+ self.check_exists('public/dists/maverick/main/binary-amd64/Packages')
+ self.check_exists('public/dists/maverick/main/binary-amd64/Packages.gz')
+ self.check_not_exists('public/dists/maverick/main/binary-amd64/Packages.bz2')
diff --git a/system/t06_publish/show.py b/system/t06_publish/show.py
index 5149142c..7616b78e 100644
--- a/system/t06_publish/show.py
+++ b/system/t06_publish/show.py
@@ -25,3 +25,29 @@ class PublishShow2Test(BaseTest):
"aptly publish snapshot -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec snap1 ppa/smira",
]
runCmd = "aptly publish show maverick ppa/smira"
+
+
+class PublishShow3Test(BaseTest):
+ """
+ publish show json: existing snapshot
+ """
+ fixtureDB = True
+ fixturePool = True
+ fixtureCmds = [
+ "aptly snapshot create snap1 from mirror gnuplot-maverick",
+ "aptly publish snapshot -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec snap1",
+ ]
+ runCmd = "aptly publish show -json maverick"
+
+
+class PublishShow4Test(BaseTest):
+ """
+ publish show json: under prefix
+ """
+ fixtureDB = True
+ fixturePool = True
+ fixtureCmds = [
+ "aptly snapshot create snap1 from mirror gnuplot-maverick",
+ "aptly publish snapshot -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec snap1 ppa/smira",
+ ]
+ runCmd = "aptly publish show -json maverick ppa/smira"
diff --git a/system/t06_publish/snapshot.py b/system/t06_publish/snapshot.py
index 0e827e85..8f4e3088 100644
--- a/system/t06_publish/snapshot.py
+++ b/system/t06_publish/snapshot.py
@@ -1,8 +1,7 @@
import os
import hashlib
import inspect
-import zlib
-from lib import BaseTest
+from lib import BaseTest, ungzip_if_required
def strip_processor(output):
@@ -13,13 +12,6 @@ def sorted_processor(output):
return "\n".join(sorted(output.split("\n")))
-def ungzip_if_required(output):
- if output.startswith("\x1f\x8b"):
- return zlib.decompress(output, 16+zlib.MAX_WBITS)
-
- return output
-
-
class PublishSnapshot1Test(BaseTest):
"""
publish snapshot: defaults
@@ -42,35 +34,49 @@ class PublishSnapshot1Test(BaseTest):
self.check_exists('public/dists/maverick/main/binary-i386/Release')
self.check_exists('public/dists/maverick/main/binary-i386/Packages')
self.check_exists('public/dists/maverick/main/binary-i386/Packages.gz')
- self.check_exists('public/dists/maverick/main/binary-i386/Packages.bz2')
+ self.check_exists(
+ 'public/dists/maverick/main/binary-i386/Packages.bz2')
self.check_exists('public/dists/maverick/main/Contents-i386.gz')
self.check_exists('public/dists/maverick/main/binary-amd64/Release')
self.check_exists('public/dists/maverick/main/binary-amd64/Packages')
- self.check_exists('public/dists/maverick/main/binary-amd64/Packages.gz')
- self.check_exists('public/dists/maverick/main/binary-amd64/Packages.bz2')
+ self.check_exists(
+ 'public/dists/maverick/main/binary-amd64/Packages.gz')
+ self.check_exists(
+ 'public/dists/maverick/main/binary-amd64/Packages.bz2')
self.check_exists('public/dists/maverick/main/Contents-amd64.gz')
- self.check_not_exists('public/dists/maverick/main/debian-installer/binary-i386/Packages')
- self.check_not_exists('public/dists/maverick/main/debian-installer/binary-amd64/Packages')
+ self.check_not_exists(
+ 'public/dists/maverick/main/debian-installer/binary-i386/Packages')
+ self.check_not_exists(
+ 'public/dists/maverick/main/debian-installer/binary-amd64/Packages')
- self.check_exists('public/pool/main/g/gnuplot/gnuplot-doc_4.6.1-1~maverick2_all.deb')
+ self.check_exists(
+ 'public/pool/main/g/gnuplot/gnuplot-doc_4.6.1-1~maverick2_all.deb')
# verify contents except of sums
- self.check_file_contents('public/dists/maverick/Release', 'release', match_prepare=strip_processor)
+ self.check_file_contents(
+ 'public/dists/maverick/Release', 'release', match_prepare=strip_processor)
- self.check_file_contents('public/dists/maverick/main/binary-i386/Release', 'release_i386')
- self.check_file_contents('public/dists/maverick/main/binary-amd64/Release', 'release_amd64')
+ self.check_file_contents(
+ 'public/dists/maverick/main/binary-i386/Release', 'release_i386')
+ self.check_file_contents(
+ 'public/dists/maverick/main/binary-amd64/Release', 'release_amd64')
- self.check_file_contents('public/dists/maverick/main/binary-i386/Packages', 'packages_i386', match_prepare=sorted_processor)
- self.check_file_contents('public/dists/maverick/main/binary-amd64/Packages', 'packages_amd64', match_prepare=sorted_processor)
+ self.check_file_contents('public/dists/maverick/main/binary-i386/Packages',
+ 'packages_i386', match_prepare=sorted_processor)
+ self.check_file_contents('public/dists/maverick/main/binary-amd64/Packages',
+ 'packages_amd64', match_prepare=sorted_processor)
- self.check_file_contents('public/dists/maverick/main/Contents-i386.gz', 'contents_i386', match_prepare=ungzip_if_required)
- self.check_file_contents('public/dists/maverick/main/Contents-amd64.gz', 'contents_amd64', match_prepare=ungzip_if_required)
+ self.check_file_contents('public/dists/maverick/main/Contents-i386.gz',
+ 'contents_i386', match_prepare=ungzip_if_required, mode='b', ensure_utf8=False)
+ self.check_file_contents('public/dists/maverick/main/Contents-amd64.gz',
+ 'contents_amd64', match_prepare=ungzip_if_required, mode='b', ensure_utf8=False)
# verify signatures
self.run_cmd([self.gpgFinder.gpg, "--no-auto-check-trustdb", "--keyring", os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "aptly.pub"),
"--verify", os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/InRelease')])
self.run_cmd([self.gpgFinder.gpg, "--no-auto-check-trustdb", "--keyring", os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "aptly.pub"),
- "--verify", os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/Release.gpg'),
+ "--verify", os.path.join(
+ os.environ["HOME"], ".aptly", 'public/dists/maverick/Release.gpg'),
os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/Release')])
# verify sums
@@ -87,9 +93,11 @@ class PublishSnapshot1Test(BaseTest):
fileSize = int(fileSize)
- st = os.stat(os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/', path))
+ st = os.stat(os.path.join(
+ os.environ["HOME"], ".aptly", 'public/dists/maverick/', path))
if fileSize != st.st_size:
- raise Exception("file size doesn't match for %s: %d != %d" % (path, fileSize, st.st_size))
+ raise Exception("file size doesn't match for %s: %d != %d" % (
+ path, fileSize, st.st_size))
if len(fileHash) == 32:
h = hashlib.md5()
@@ -100,10 +108,11 @@ class PublishSnapshot1Test(BaseTest):
else:
h = hashlib.sha512()
- h.update(self.read_file(os.path.join('public/dists/maverick', path)))
+ h.update(self.read_file(os.path.join('public/dists/maverick', path), mode='b'))
if h.hexdigest() != fileHash:
- raise Exception("file hash doesn't match for %s: %s != %s" % (path, fileHash, h.hexdigest()))
+ raise Exception("file hash doesn't match for %s: %s != %s" % (
+ path, fileHash, h.hexdigest()))
if pathsSeen != set(['main/binary-amd64/Packages', 'main/binary-i386/Packages', 'main/binary-i386/Packages.gz',
'main/binary-amd64/Packages.gz', 'main/binary-amd64/Packages.bz2', 'main/binary-i386/Packages.bz2',
@@ -137,13 +146,16 @@ class PublishSnapshot2Test(BaseTest):
self.check_exists('public/dists/squeeze/main/Contents-i386.gz')
self.check_exists('public/dists/squeeze/main/binary-amd64/Packages')
self.check_exists('public/dists/squeeze/main/binary-amd64/Packages.gz')
- self.check_exists('public/dists/squeeze/main/binary-amd64/Packages.bz2')
+ self.check_exists(
+ 'public/dists/squeeze/main/binary-amd64/Packages.bz2')
self.check_exists('public/dists/squeeze/main/Contents-amd64.gz')
- self.check_exists('public/pool/main/g/gnuplot/gnuplot-doc_4.6.1-1~maverick2_all.deb')
+ self.check_exists(
+ 'public/pool/main/g/gnuplot/gnuplot-doc_4.6.1-1~maverick2_all.deb')
# verify contents except of sums
- self.check_file_contents('public/dists/squeeze/Release', 'release', match_prepare=strip_processor)
+ self.check_file_contents(
+ 'public/dists/squeeze/Release', 'release', match_prepare=strip_processor)
class PublishSnapshot3Test(BaseTest):
@@ -166,18 +178,24 @@ class PublishSnapshot3Test(BaseTest):
self.check_exists('public/dists/squeeze/Release.gpg')
self.check_exists('public/dists/squeeze/contrib/binary-i386/Packages')
- self.check_exists('public/dists/squeeze/contrib/binary-i386/Packages.gz')
- self.check_exists('public/dists/squeeze/contrib/binary-i386/Packages.bz2')
+ self.check_exists(
+ 'public/dists/squeeze/contrib/binary-i386/Packages.gz')
+ self.check_exists(
+ 'public/dists/squeeze/contrib/binary-i386/Packages.bz2')
self.check_exists('public/dists/squeeze/contrib/Contents-i386.gz')
self.check_exists('public/dists/squeeze/contrib/binary-amd64/Packages')
- self.check_exists('public/dists/squeeze/contrib/binary-amd64/Packages.gz')
- self.check_exists('public/dists/squeeze/contrib/binary-amd64/Packages.bz2')
+ self.check_exists(
+ 'public/dists/squeeze/contrib/binary-amd64/Packages.gz')
+ self.check_exists(
+ 'public/dists/squeeze/contrib/binary-amd64/Packages.bz2')
self.check_exists('public/dists/squeeze/contrib/Contents-amd64.gz')
- self.check_exists('public/pool/contrib/g/gnuplot/gnuplot-doc_4.6.1-1~maverick2_all.deb')
+ self.check_exists(
+ 'public/pool/contrib/g/gnuplot/gnuplot-doc_4.6.1-1~maverick2_all.deb')
# verify contents except of sums
- self.check_file_contents('public/dists/squeeze/Release', 'release', match_prepare=strip_processor)
+ self.check_file_contents(
+ 'public/dists/squeeze/Release', 'release', match_prepare=strip_processor)
class PublishSnapshot4Test(BaseTest):
@@ -203,15 +221,20 @@ class PublishSnapshot4Test(BaseTest):
self.check_exists('public/dists/squeeze/main/binary-i386/Packages.gz')
self.check_exists('public/dists/squeeze/main/binary-i386/Packages.bz2')
self.check_exists('public/dists/squeeze/main/Contents-i386.gz')
- self.check_not_exists('public/dists/squeeze/main/binary-amd64/Packages')
- self.check_not_exists('public/dists/squeeze/main/binary-amd64/Packages.gz')
- self.check_not_exists('public/dists/squeeze/main/binary-amd64/Packages.bz2')
+ self.check_not_exists(
+ 'public/dists/squeeze/main/binary-amd64/Packages')
+ self.check_not_exists(
+ 'public/dists/squeeze/main/binary-amd64/Packages.gz')
+ self.check_not_exists(
+ 'public/dists/squeeze/main/binary-amd64/Packages.bz2')
self.check_not_exists('public/dists/squeeze/main/Contents-amd64.gz')
- self.check_exists('public/pool/main/g/gnuplot/gnuplot-doc_4.6.1-1~maverick2_all.deb')
+ self.check_exists(
+ 'public/pool/main/g/gnuplot/gnuplot-doc_4.6.1-1~maverick2_all.deb')
# verify contents except of sums
- self.check_file_contents('public/dists/squeeze/Release', 'release', match_prepare=strip_processor)
+ self.check_file_contents(
+ 'public/dists/squeeze/Release', 'release', match_prepare=strip_processor)
class PublishSnapshot5Test(BaseTest):
@@ -234,19 +257,30 @@ class PublishSnapshot5Test(BaseTest):
self.check_exists('public/ppa/smira/dists/squeeze/Release')
self.check_exists('public/ppa/smira/dists/squeeze/Release.gpg')
- self.check_exists('public/ppa/smira/dists/squeeze/main/binary-i386/Packages')
- self.check_exists('public/ppa/smira/dists/squeeze/main/binary-i386/by-hash/MD5Sum/e98cd30fc76fbe7fa3ea25717efa1c92')
- self.check_exists('public/ppa/smira/dists/squeeze/main/binary-i386/Packages.gz')
- self.check_exists('public/ppa/smira/dists/squeeze/main/binary-i386/Packages.bz2')
- self.check_exists('public/ppa/smira/dists/squeeze/main/binary-amd64/Packages')
- self.check_exists('public/ppa/smira/dists/squeeze/main/binary-amd64/by-hash/MD5Sum/ab073d1f73bed52e7356c91161e8667e')
- self.check_exists('public/ppa/smira/dists/squeeze/main/binary-amd64/Packages.gz')
- self.check_exists('public/ppa/smira/dists/squeeze/main/binary-amd64/Packages.bz2')
+ self.check_exists(
+ 'public/ppa/smira/dists/squeeze/main/binary-i386/Packages')
+ self.check_exists(
+ 'public/ppa/smira/dists/squeeze/main/binary-i386/by-hash/MD5Sum/e98cd30fc76fbe7fa3ea25717efa1c92')
+ self.check_exists(
+ 'public/ppa/smira/dists/squeeze/main/binary-i386/Packages.gz')
+ self.check_exists(
+ 'public/ppa/smira/dists/squeeze/main/binary-i386/Packages.bz2')
+ self.check_exists(
+ 'public/ppa/smira/dists/squeeze/main/binary-amd64/Packages')
+ self.check_exists(
+ 'public/ppa/smira/dists/squeeze/main/binary-amd64/by-hash/MD5Sum/ab073d1f73bed52e7356c91161e8667e')
+ self.check_exists(
+ 'public/ppa/smira/dists/squeeze/main/binary-amd64/Packages.gz')
+ self.check_exists(
+ 'public/ppa/smira/dists/squeeze/main/binary-amd64/Packages.bz2')
- self.check_exists('public/ppa/smira/dists/squeeze/main/Contents-i386.gz')
- self.check_exists('public/ppa/smira/dists/squeeze/main/Contents-amd64.gz')
+ self.check_exists(
+ 'public/ppa/smira/dists/squeeze/main/Contents-i386.gz')
+ self.check_exists(
+ 'public/ppa/smira/dists/squeeze/main/Contents-amd64.gz')
- self.check_exists('public/ppa/smira/pool/main/g/gnuplot/gnuplot-doc_4.6.1-1~maverick2_all.deb')
+ self.check_exists(
+ 'public/ppa/smira/pool/main/g/gnuplot/gnuplot-doc_4.6.1-1~maverick2_all.deb')
class PublishSnapshot6Test(BaseTest):
@@ -357,15 +391,19 @@ class PublishSnapshot13Test(BaseTest):
self.check_exists('public/dists/maverick/main/binary-i386/Packages')
self.check_exists('public/dists/maverick/main/binary-i386/Packages.gz')
- self.check_exists('public/dists/maverick/main/binary-i386/Packages.bz2')
+ self.check_exists(
+ 'public/dists/maverick/main/binary-i386/Packages.bz2')
self.check_exists('public/dists/maverick/main/Contents-i386.gz')
self.check_exists('public/dists/maverick/main/binary-amd64/Packages')
- self.check_exists('public/dists/maverick/main/binary-amd64/Packages.gz')
- self.check_exists('public/dists/maverick/main/binary-amd64/Packages.bz2')
+ self.check_exists(
+ 'public/dists/maverick/main/binary-amd64/Packages.gz')
+ self.check_exists(
+ 'public/dists/maverick/main/binary-amd64/Packages.bz2')
self.check_exists('public/dists/maverick/main/Contents-amd64.gz')
# verify contents except of sums
- self.check_file_contents('public/dists/maverick/Release', 'release', match_prepare=strip_processor)
+ self.check_file_contents(
+ 'public/dists/maverick/Release', 'release', match_prepare=strip_processor)
class PublishSnapshot14Test(BaseTest):
@@ -402,15 +440,19 @@ class PublishSnapshot15Test(BaseTest):
self.check_exists('public/dists/maverick/main/binary-i386/Packages')
self.check_exists('public/dists/maverick/main/binary-i386/Packages.gz')
- self.check_exists('public/dists/maverick/main/binary-i386/Packages.bz2')
+ self.check_exists(
+ 'public/dists/maverick/main/binary-i386/Packages.bz2')
self.check_exists('public/dists/maverick/main/Contents-i386.gz')
self.check_exists('public/dists/maverick/main/binary-amd64/Packages')
- self.check_exists('public/dists/maverick/main/binary-amd64/Packages.gz')
- self.check_exists('public/dists/maverick/main/binary-amd64/Packages.bz2')
+ self.check_exists(
+ 'public/dists/maverick/main/binary-amd64/Packages.gz')
+ self.check_exists(
+ 'public/dists/maverick/main/binary-amd64/Packages.bz2')
self.check_exists('public/dists/maverick/main/Contents-amd64.gz')
# verify contents except of sums
- self.check_file_contents('public/dists/maverick/Release', 'release', match_prepare=strip_processor)
+ self.check_file_contents(
+ 'public/dists/maverick/Release', 'release', match_prepare=strip_processor)
class PublishSnapshot16Test(BaseTest):
@@ -434,31 +476,41 @@ class PublishSnapshot16Test(BaseTest):
self.check_exists('public/dists/maverick/main/binary-i386/Packages')
self.check_exists('public/dists/maverick/main/binary-i386/Packages.gz')
- self.check_exists('public/dists/maverick/main/binary-i386/Packages.bz2')
+ self.check_exists(
+ 'public/dists/maverick/main/binary-i386/Packages.bz2')
self.check_exists('public/dists/maverick/main/Contents-i386.gz')
self.check_exists('public/dists/maverick/main/binary-amd64/Packages')
- self.check_exists('public/dists/maverick/main/binary-amd64/Packages.gz')
- self.check_exists('public/dists/maverick/main/binary-amd64/Packages.bz2')
+ self.check_exists(
+ 'public/dists/maverick/main/binary-amd64/Packages.gz')
+ self.check_exists(
+ 'public/dists/maverick/main/binary-amd64/Packages.bz2')
self.check_exists('public/dists/maverick/main/Contents-amd64.gz')
self.check_exists('public/dists/maverick/main/source/Sources')
self.check_exists('public/dists/maverick/main/source/Sources.gz')
self.check_exists('public/dists/maverick/main/source/Sources.bz2')
self.check_not_exists('public/dists/maverick/main/Contents-source.gz')
- self.check_exists('public/pool/main/g/gnuplot/gnuplot-doc_4.6.1-1~maverick2_all.deb')
- self.check_exists('public/pool/main/g/gnuplot/gnuplot_4.6.1-1~maverick2.debian.tar.gz')
- self.check_exists('public/pool/main/g/gnuplot/gnuplot_4.6.1-1~maverick2.dsc')
- self.check_exists('public/pool/main/g/gnuplot/gnuplot_4.6.1.orig.tar.gz')
+ self.check_exists(
+ 'public/pool/main/g/gnuplot/gnuplot-doc_4.6.1-1~maverick2_all.deb')
+ self.check_exists(
+ 'public/pool/main/g/gnuplot/gnuplot_4.6.1-1~maverick2.debian.tar.gz')
+ self.check_exists(
+ 'public/pool/main/g/gnuplot/gnuplot_4.6.1-1~maverick2.dsc')
+ self.check_exists(
+ 'public/pool/main/g/gnuplot/gnuplot_4.6.1.orig.tar.gz')
# verify contents except of sums
- self.check_file_contents('public/dists/maverick/Release', 'release', match_prepare=strip_processor)
- self.check_file_contents('public/dists/maverick/main/source/Sources', 'sources', match_prepare=lambda s: "\n".join(sorted(s.split("\n"))))
+ self.check_file_contents(
+ 'public/dists/maverick/Release', 'release', match_prepare=strip_processor)
+ self.check_file_contents('public/dists/maverick/main/source/Sources',
+ 'sources', match_prepare=lambda s: "\n".join(sorted(s.split("\n"))))
# verify signatures
self.run_cmd([self.gpgFinder.gpg, "--no-auto-check-trustdb", "--keyring", os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "aptly.pub"),
"--verify", os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/InRelease')])
self.run_cmd([self.gpgFinder.gpg, "--no-auto-check-trustdb", "--keyring", os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "aptly.pub"),
- "--verify", os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/Release.gpg'),
+ "--verify", os.path.join(
+ os.environ["HOME"], ".aptly", 'public/dists/maverick/Release.gpg'),
os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/Release')])
@@ -483,7 +535,8 @@ class PublishSnapshot17Test(BaseTest):
self.check_exists('public/dists/maverick/main/binary-i386/Packages')
self.check_exists('public/dists/maverick/main/binary-i386/Packages.gz')
- self.check_exists('public/dists/maverick/main/binary-i386/Packages.bz2')
+ self.check_exists(
+ 'public/dists/maverick/main/binary-i386/Packages.bz2')
self.check_exists('public/dists/maverick/main/Contents-i386.gz')
self.check_exists('public/dists/maverick/main/source/Sources')
self.check_exists('public/dists/maverick/main/source/Sources.gz')
@@ -493,19 +546,25 @@ class PublishSnapshot17Test(BaseTest):
self.check_exists('public/pool/main/p/pyspi/pyspi_0.6.1-1.3.dsc')
self.check_exists('public/pool/main/p/pyspi/pyspi_0.6.1-1.3.diff.gz')
self.check_exists('public/pool/main/p/pyspi/pyspi_0.6.1.orig.tar.gz')
- self.check_exists('public/pool/main/p/pyspi/pyspi-0.6.1-1.3.stripped.dsc')
- self.check_exists('public/pool/main/b/boost-defaults/libboost-program-options-dev_1.49.0.1_i386.deb')
+ self.check_exists(
+ 'public/pool/main/p/pyspi/pyspi-0.6.1-1.3.stripped.dsc')
+ self.check_exists(
+ 'public/pool/main/b/boost-defaults/libboost-program-options-dev_1.49.0.1_i386.deb')
# verify contents except of sums
- self.check_file_contents('public/dists/maverick/Release', 'release', match_prepare=strip_processor)
- self.check_file_contents('public/dists/maverick/main/source/Sources', 'sources', match_prepare=lambda s: "\n".join(sorted(s.split("\n"))))
- self.check_file_contents('public/dists/maverick/main/binary-i386/Packages', 'binary', match_prepare=lambda s: "\n".join(sorted(s.split("\n"))))
+ self.check_file_contents(
+ 'public/dists/maverick/Release', 'release', match_prepare=strip_processor)
+ self.check_file_contents('public/dists/maverick/main/source/Sources',
+ 'sources', match_prepare=lambda s: "\n".join(sorted(s.split("\n"))))
+ self.check_file_contents('public/dists/maverick/main/binary-i386/Packages',
+ 'binary', match_prepare=lambda s: "\n".join(sorted(s.split("\n"))))
# verify signatures
self.run_cmd([self.gpgFinder.gpg, "--no-auto-check-trustdb", "--keyring", os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "aptly.pub"),
"--verify", os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/InRelease')])
self.run_cmd([self.gpgFinder.gpg, "--no-auto-check-trustdb", "--keyring", os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "aptly.pub"),
- "--verify", os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/Release.gpg'),
+ "--verify", os.path.join(
+ os.environ["HOME"], ".aptly", 'public/dists/maverick/Release.gpg'),
os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/Release')])
@@ -629,7 +688,8 @@ class PublishSnapshot24Test(BaseTest):
super(PublishSnapshot24Test, self).check()
# verify contents except of sums
- self.check_file_contents('public/dists/squeeze/Release', 'release', match_prepare=strip_processor)
+ self.check_file_contents(
+ 'public/dists/squeeze/Release', 'release', match_prepare=strip_processor)
class PublishSnapshot25Test(BaseTest):
@@ -650,12 +710,17 @@ class PublishSnapshot25Test(BaseTest):
self.check_exists('public/dists/maverick/Release')
self.check_exists('public/dists/maverick/Release.gpg')
- self.check_not_exists('public/dists/maverick/main/binary-i386/Packages')
- self.check_not_exists('public/dists/maverick/main/binary-i386/Packages.gz')
- self.check_not_exists('public/dists/maverick/main/binary-i386/Packages.bz2')
+ self.check_not_exists(
+ 'public/dists/maverick/main/binary-i386/Packages')
+ self.check_not_exists(
+ 'public/dists/maverick/main/binary-i386/Packages.gz')
+ self.check_not_exists(
+ 'public/dists/maverick/main/binary-i386/Packages.bz2')
self.check_exists('public/dists/maverick/main/binary-amd64/Packages')
- self.check_exists('public/dists/maverick/main/binary-amd64/Packages.gz')
- self.check_exists('public/dists/maverick/main/binary-amd64/Packages.bz2')
+ self.check_exists(
+ 'public/dists/maverick/main/binary-amd64/Packages.gz')
+ self.check_exists(
+ 'public/dists/maverick/main/binary-amd64/Packages.bz2')
class PublishSnapshot26Test(BaseTest):
@@ -682,11 +747,14 @@ class PublishSnapshot26Test(BaseTest):
self.check_exists('public/dists/maverick/main/binary-i386/Packages')
self.check_exists('public/dists/maverick/main/binary-i386/Packages.gz')
- self.check_exists('public/dists/maverick/main/binary-i386/Packages.bz2')
+ self.check_exists(
+ 'public/dists/maverick/main/binary-i386/Packages.bz2')
self.check_exists('public/dists/maverick/main/Contents-i386.gz')
self.check_exists('public/dists/maverick/main/binary-amd64/Packages')
- self.check_exists('public/dists/maverick/main/binary-amd64/Packages.gz')
- self.check_exists('public/dists/maverick/main/binary-amd64/Packages.bz2')
+ self.check_exists(
+ 'public/dists/maverick/main/binary-amd64/Packages.gz')
+ self.check_exists(
+ 'public/dists/maverick/main/binary-amd64/Packages.bz2')
self.check_exists('public/dists/maverick/main/Contents-amd64.gz')
self.check_exists('public/dists/maverick/main/source/Sources')
self.check_exists('public/dists/maverick/main/source/Sources.gz')
@@ -694,32 +762,45 @@ class PublishSnapshot26Test(BaseTest):
self.check_not_exists('public/dists/maverick/main/Contents-source.gz')
self.check_exists('public/dists/maverick/contrib/binary-i386/Packages')
- self.check_exists('public/dists/maverick/contrib/binary-i386/Packages.gz')
- self.check_exists('public/dists/maverick/contrib/binary-i386/Packages.bz2')
+ self.check_exists(
+ 'public/dists/maverick/contrib/binary-i386/Packages.gz')
+ self.check_exists(
+ 'public/dists/maverick/contrib/binary-i386/Packages.bz2')
self.check_exists('public/dists/maverick/contrib/Contents-i386.gz')
- self.check_exists('public/dists/maverick/contrib/binary-amd64/Packages')
- self.check_exists('public/dists/maverick/contrib/binary-amd64/Packages.gz')
- self.check_exists('public/dists/maverick/contrib/binary-amd64/Packages.bz2')
- self.check_not_exists('public/dists/maverick/contrib/Contents-amd64.gz')
+ self.check_exists(
+ 'public/dists/maverick/contrib/binary-amd64/Packages')
+ self.check_exists(
+ 'public/dists/maverick/contrib/binary-amd64/Packages.gz')
+ self.check_exists(
+ 'public/dists/maverick/contrib/binary-amd64/Packages.bz2')
+ self.check_not_exists(
+ 'public/dists/maverick/contrib/Contents-amd64.gz')
self.check_exists('public/dists/maverick/contrib/source/Sources')
self.check_exists('public/dists/maverick/contrib/source/Sources.gz')
self.check_exists('public/dists/maverick/contrib/source/Sources.bz2')
- self.check_exists('public/pool/main/g/gnuplot/gnuplot-doc_4.6.1-1~maverick2_all.deb')
+ self.check_exists(
+ 'public/pool/main/g/gnuplot/gnuplot-doc_4.6.1-1~maverick2_all.deb')
self.check_exists('public/pool/contrib/p/pyspi/pyspi_0.6.1-1.3.dsc')
- self.check_exists('public/pool/contrib/p/pyspi/pyspi_0.6.1-1.3.diff.gz')
- self.check_exists('public/pool/contrib/p/pyspi/pyspi_0.6.1.orig.tar.gz')
- self.check_exists('public/pool/contrib/p/pyspi/pyspi-0.6.1-1.3.stripped.dsc')
- self.check_exists('public/pool/contrib/b/boost-defaults/libboost-program-options-dev_1.49.0.1_i386.deb')
+ self.check_exists(
+ 'public/pool/contrib/p/pyspi/pyspi_0.6.1-1.3.diff.gz')
+ self.check_exists(
+ 'public/pool/contrib/p/pyspi/pyspi_0.6.1.orig.tar.gz')
+ self.check_exists(
+ 'public/pool/contrib/p/pyspi/pyspi-0.6.1-1.3.stripped.dsc')
+ self.check_exists(
+ 'public/pool/contrib/b/boost-defaults/libboost-program-options-dev_1.49.0.1_i386.deb')
# verify contents except of sums
- self.check_file_contents('public/dists/maverick/Release', 'release', match_prepare=strip_processor)
+ self.check_file_contents(
+ 'public/dists/maverick/Release', 'release', match_prepare=strip_processor)
# verify signatures
self.run_cmd([self.gpgFinder.gpg, "--no-auto-check-trustdb", "--keyring", os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "aptly.pub"),
"--verify", os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/InRelease')])
self.run_cmd([self.gpgFinder.gpg, "--no-auto-check-trustdb", "--keyring", os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "aptly.pub"),
- "--verify", os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/Release.gpg'),
+ "--verify", os.path.join(
+ os.environ["HOME"], ".aptly", 'public/dists/maverick/Release.gpg'),
os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/Release')])
# verify sums
@@ -736,9 +817,11 @@ class PublishSnapshot26Test(BaseTest):
fileSize = int(fileSize)
- st = os.stat(os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/', path))
+ st = os.stat(os.path.join(
+ os.environ["HOME"], ".aptly", 'public/dists/maverick/', path))
if fileSize != st.st_size:
- raise Exception("file size doesn't match for %s: %d != %d" % (path, fileSize, st.st_size))
+ raise Exception("file size doesn't match for %s: %d != %d" % (
+ path, fileSize, st.st_size))
if len(fileHash) == 32:
h = hashlib.md5()
@@ -749,10 +832,11 @@ class PublishSnapshot26Test(BaseTest):
else:
h = hashlib.sha512()
- h.update(self.read_file(os.path.join('public/dists/maverick', path)))
+ h.update(self.read_file(os.path.join('public/dists/maverick', path), mode='b'))
if h.hexdigest() != fileHash:
- raise Exception("file hash doesn't match for %s: %s != %s" % (path, fileHash, h.hexdigest()))
+ raise Exception("file hash doesn't match for %s: %s != %s" % (
+ path, fileHash, h.hexdigest()))
if pathsSeen != set(['main/binary-amd64/Packages', 'main/binary-i386/Packages', 'main/binary-i386/Packages.gz',
'main/binary-amd64/Packages.gz', 'main/binary-amd64/Packages.bz2', 'main/binary-i386/Packages.bz2',
@@ -846,8 +930,8 @@ class PublishSnapshot32Test(BaseTest):
runCmd = "aptly publish snapshot -component=main,contrib snap32.1"
expectedCode = 2
- def outputMatchPrepare(_, s):
- return "\n".join([l for l in s.split("\n") if l.startswith("ERROR")])
+ def outputMatchPrepare(self, s):
+ return "\n".join([l for l in self.ensure_utf8(s).split("\n") if l.startswith("ERROR")])
class PublishSnapshot33Test(BaseTest):
@@ -887,16 +971,18 @@ class PublishSnapshot34Test(BaseTest):
def check(self):
super(PublishSnapshot34Test, self).check()
- self.check_file_contents("public/pool/main/p/pyspi/pyspi_0.6.1.orig.tar.gz", "file")
+ self.check_file_contents(
+ "public/pool/main/p/pyspi/pyspi_0.6.1.orig.tar.gz", "file")
class PublishSnapshot35Test(BaseTest):
"""
publish snapshot: mirror with udebs
"""
+ configOverride = {"max-tries": 1}
fixtureGpg = True
fixtureCmds = [
- "aptly -architectures=i386,amd64 mirror create -keyring=aptlytest.gpg -filter='$$Source (gnupg2)' -with-udebs stretch http://mirror.yandex.ru/debian/ stretch main non-free",
+ "aptly -architectures=i386,amd64 mirror create -keyring=aptlytest.gpg -filter='$$Source (gnupg2)' -with-udebs stretch http://cdn-fastly.deb.debian.org/debian/ stretch main non-free",
"aptly mirror update -keyring=aptlytest.gpg stretch",
"aptly snapshot create stretch from mirror stretch",
]
@@ -915,39 +1001,58 @@ class PublishSnapshot35Test(BaseTest):
self.check_exists('public/dists/stretch/main/binary-i386/Packages.gz')
self.check_exists('public/dists/stretch/main/binary-i386/Packages.bz2')
self.check_exists('public/dists/stretch/main/Contents-i386.gz')
- self.check_exists('public/dists/stretch/main/debian-installer/binary-i386/Release')
- self.check_exists('public/dists/stretch/main/debian-installer/binary-i386/Packages')
- self.check_exists('public/dists/stretch/main/debian-installer/binary-i386/Packages.gz')
- self.check_exists('public/dists/stretch/main/debian-installer/binary-i386/Packages.bz2')
+ self.check_exists(
+ 'public/dists/stretch/main/debian-installer/binary-i386/Release')
+ self.check_exists(
+ 'public/dists/stretch/main/debian-installer/binary-i386/Packages')
+ self.check_exists(
+ 'public/dists/stretch/main/debian-installer/binary-i386/Packages.gz')
+ self.check_exists(
+ 'public/dists/stretch/main/debian-installer/binary-i386/Packages.bz2')
self.check_exists('public/dists/stretch/main/Contents-udeb-i386.gz')
self.check_exists('public/dists/stretch/main/binary-amd64/Release')
self.check_exists('public/dists/stretch/main/binary-amd64/Packages')
self.check_exists('public/dists/stretch/main/binary-amd64/Packages.gz')
- self.check_exists('public/dists/stretch/main/binary-amd64/Packages.bz2')
+ self.check_exists(
+ 'public/dists/stretch/main/binary-amd64/Packages.bz2')
self.check_exists('public/dists/stretch/main/Contents-amd64.gz')
- self.check_exists('public/dists/stretch/main/debian-installer/binary-amd64/Release')
- self.check_exists('public/dists/stretch/main/debian-installer/binary-amd64/Packages')
- self.check_exists('public/dists/stretch/main/debian-installer/binary-amd64/Packages.gz')
- self.check_exists('public/dists/stretch/main/debian-installer/binary-amd64/Packages.bz2')
+ self.check_exists(
+ 'public/dists/stretch/main/debian-installer/binary-amd64/Release')
+ self.check_exists(
+ 'public/dists/stretch/main/debian-installer/binary-amd64/Packages')
+ self.check_exists(
+ 'public/dists/stretch/main/debian-installer/binary-amd64/Packages.gz')
+ self.check_exists(
+ 'public/dists/stretch/main/debian-installer/binary-amd64/Packages.bz2')
self.check_exists('public/dists/stretch/main/Contents-udeb-amd64.gz')
self.check_not_exists('public/dists/stretch/main/source/Sources')
self.check_not_exists('public/dists/stretch/main/source/Sources.gz')
self.check_not_exists('public/dists/stretch/main/source/Sources.bz2')
- self.check_exists('public/pool/main/g/gnupg2/gpgv-udeb_2.1.18-8~deb9u4_amd64.udeb')
- self.check_exists('public/pool/main/g/gnupg2/gpgv-udeb_2.1.18-8~deb9u4_i386.udeb')
- self.check_exists('public/pool/main/g/gnupg2/gpgv_2.1.18-8~deb9u4_amd64.deb')
- self.check_exists('public/pool/main/g/gnupg2/gpgv_2.1.18-8~deb9u4_i386.deb')
+ self.check_exists(
+ 'public/pool/main/g/gnupg2/gpgv-udeb_2.1.18-8~deb9u4_amd64.udeb')
+ self.check_exists(
+ 'public/pool/main/g/gnupg2/gpgv-udeb_2.1.18-8~deb9u4_i386.udeb')
+ self.check_exists(
+ 'public/pool/main/g/gnupg2/gpgv_2.1.18-8~deb9u4_amd64.deb')
+ self.check_exists(
+ 'public/pool/main/g/gnupg2/gpgv_2.1.18-8~deb9u4_i386.deb')
- self.check_file_contents('public/dists/stretch/main/binary-i386/Packages', 'packages_i386', match_prepare=sorted_processor)
- self.check_file_contents('public/dists/stretch/main/debian-installer/binary-i386/Packages', 'packages_udeb_i386', match_prepare=sorted_processor)
- self.check_file_contents('public/dists/stretch/main/binary-amd64/Packages', 'packages_amd64', match_prepare=sorted_processor)
- self.check_file_contents('public/dists/stretch/main/debian-installer/binary-amd64/Packages', 'packages_udeb_amd64', match_prepare=sorted_processor)
+ self.check_file_contents('public/dists/stretch/main/binary-i386/Packages',
+ 'packages_i386', match_prepare=sorted_processor)
+ self.check_file_contents('public/dists/stretch/main/debian-installer/binary-i386/Packages',
+ 'packages_udeb_i386', match_prepare=sorted_processor)
+ self.check_file_contents('public/dists/stretch/main/binary-amd64/Packages',
+ 'packages_amd64', match_prepare=sorted_processor)
+ self.check_file_contents('public/dists/stretch/main/debian-installer/binary-amd64/Packages',
+ 'packages_udeb_amd64', match_prepare=sorted_processor)
# verify contents except of sums
- self.check_file_contents('public/dists/stretch/Release', 'release', match_prepare=strip_processor)
+ self.check_file_contents(
+ 'public/dists/stretch/Release', 'release', match_prepare=strip_processor)
- self.check_file_contents('public/dists/stretch/main/debian-installer/binary-i386/Release', 'release_udeb_i386', match_prepare=strip_processor)
+ self.check_file_contents('public/dists/stretch/main/debian-installer/binary-i386/Release',
+ 'release_udeb_i386', match_prepare=strip_processor)
# verify sums
release = self.read_file('public/dists/stretch/Release').split("\n")
@@ -963,9 +1068,11 @@ class PublishSnapshot35Test(BaseTest):
fileSize = int(fileSize)
- st = os.stat(os.path.join(os.environ["HOME"], ".aptly", 'public/dists/stretch/', path))
+ st = os.stat(os.path.join(
+ os.environ["HOME"], ".aptly", 'public/dists/stretch/', path))
if fileSize != st.st_size:
- raise Exception("file size doesn't match for %s: %d != %d" % (path, fileSize, st.st_size))
+ raise Exception("file size doesn't match for %s: %d != %d" % (
+ path, fileSize, st.st_size))
if len(fileHash) == 32:
h = hashlib.md5()
@@ -976,24 +1083,29 @@ class PublishSnapshot35Test(BaseTest):
else:
h = hashlib.sha512()
- h.update(self.read_file(os.path.join('public/dists/stretch', path)))
+ h.update(self.read_file(os.path.join('public/dists/stretch', path), mode='b'))
if h.hexdigest() != fileHash:
- raise Exception("file hash doesn't match for %s: %s != %s" % (path, fileHash, h.hexdigest()))
+ raise Exception("file hash doesn't match for %s: %s != %s" % (
+ path, fileHash, h.hexdigest()))
pathsExepcted = set()
for arch in ("i386", "amd64"):
for udeb in ("", "debian-installer/"):
for ext in ("", ".gz", ".bz2"):
- pathsExepcted.add("main/%sbinary-%s/Packages%s" % (udeb, arch, ext))
+ pathsExepcted.add(
+ "main/%sbinary-%s/Packages%s" % (udeb, arch, ext))
- pathsExepcted.add("main/Contents-%s%s.gz" % ("udeb-" if udeb != "" else "", arch))
- pathsExepcted.add("Contents-%s%s.gz" % ("udeb-" if udeb != "" else "", arch))
+ pathsExepcted.add("main/Contents-%s%s.gz" %
+ ("udeb-" if udeb != "" else "", arch))
+ pathsExepcted.add("Contents-%s%s.gz" %
+ ("udeb-" if udeb != "" else "", arch))
pathsExepcted.add("main/%sbinary-%s/Release" % (udeb, arch))
if pathsSeen != pathsExepcted:
- raise Exception("path seen wrong: %r != %r" % (pathsSeen, pathsExepcted))
+ raise Exception("path seen wrong: %r != %r" %
+ (pathsSeen, pathsExepcted))
class PublishSnapshot36Test(BaseTest):
@@ -1024,9 +1136,10 @@ class PublishSnapshot37Test(BaseTest):
"""
publish snapshot: mirror with double mirror update
"""
+ configOverride = {"max-tries": 1}
fixtureGpg = True
fixtureCmds = [
- "aptly -architectures=i386,amd64 mirror create -keyring=aptlytest.gpg -filter='$$Source (gnupg2)' -with-udebs stretch http://mirror.yandex.ru/debian/ stretch main non-free",
+ "aptly -architectures=i386,amd64 mirror create -keyring=aptlytest.gpg -filter='$$Source (gnupg2)' -with-udebs stretch http://cdn-fastly.deb.debian.org/debian/ stretch main non-free",
"aptly mirror update -keyring=aptlytest.gpg stretch",
"aptly mirror update -keyring=aptlytest.gpg stretch",
"aptly snapshot create stretch from mirror stretch",
@@ -1039,9 +1152,10 @@ class PublishSnapshot38Test(BaseTest):
"""
publish snapshot: mirror with installer
"""
+ configOverride = {"max-tries": 1}
fixtureGpg = True
fixtureCmds = [
- "aptly -architectures=s390x mirror create -keyring=aptlytest.gpg -filter='installer' -with-installer stretch http://mirror.yandex.ru/debian/ stretch main",
+ "aptly -architectures=s390x mirror create -keyring=aptlytest.gpg -filter='installer' -with-installer stretch http://cdn-fastly.deb.debian.org/debian/ stretch main",
"aptly mirror update -keyring=aptlytest.gpg stretch",
"aptly snapshot create stretch from mirror stretch",
]
@@ -1050,9 +1164,78 @@ class PublishSnapshot38Test(BaseTest):
def check(self):
super(PublishSnapshot38Test, self).check()
- self.check_exists('public/dists/stretch/main/installer-s390x/current/images/SHA256SUMS')
- self.check_exists('public/dists/stretch/main/installer-s390x/current/images/SHA256SUMS.gpg')
- self.check_exists('public/dists/stretch/main/installer-s390x/current/images/generic/debian.exec')
- self.check_exists('public/dists/stretch/main/installer-s390x/current/images/MANIFEST')
+ self.check_exists(
+ 'public/dists/stretch/main/installer-s390x/current/images/SHA256SUMS')
+ self.check_exists(
+ 'public/dists/stretch/main/installer-s390x/current/images/SHA256SUMS.gpg')
+ self.check_exists(
+ 'public/dists/stretch/main/installer-s390x/current/images/generic/debian.exec')
+ self.check_exists(
+ 'public/dists/stretch/main/installer-s390x/current/images/MANIFEST')
- self.check_file_contents('public/dists/stretch/main/installer-s390x/current/images/SHA256SUMS', "installer_s390x", match_prepare=sorted_processor)
+ self.check_file_contents('public/dists/stretch/main/installer-s390x/current/images/SHA256SUMS',
+ "installer_s390x", match_prepare=sorted_processor)
+
+
+class PublishSnapshot39Test(BaseTest):
+ """
+ publish snapshot: custom suite
+ """
+ fixtureDB = True
+ fixturePool = True
+ fixtureCmds = [
+ "aptly snapshot create snap1 from mirror gnuplot-maverick",
+ ]
+ runCmd = "aptly publish snapshot -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -suite=stable snap1"
+ gold_processor = BaseTest.expand_environ
+
+ def check(self):
+ super(PublishSnapshot39Test, self).check()
+
+ # verify contents except of sums
+ self.check_file_contents(
+ 'public/dists/maverick/Release', 'release', match_prepare=strip_processor)
+
+ self.check_file_contents(
+ 'public/dists/maverick/main/binary-i386/Release', 'release_i386')
+ self.check_file_contents(
+ 'public/dists/maverick/main/binary-amd64/Release', 'release_amd64')
+
+ self.check_file_contents('public/dists/maverick/main/binary-i386/Packages',
+ 'packages_i386', match_prepare=sorted_processor)
+ self.check_file_contents('public/dists/maverick/main/binary-amd64/Packages',
+ 'packages_amd64', match_prepare=sorted_processor)
+
+ self.check_file_contents('public/dists/maverick/main/Contents-i386.gz',
+ 'contents_i386', match_prepare=ungzip_if_required, mode='b', ensure_utf8=False)
+ self.check_file_contents('public/dists/maverick/main/Contents-amd64.gz',
+ 'contents_amd64', match_prepare=ungzip_if_required, mode='b', ensure_utf8=False)
+
+
+class PublishSnapshot40Test(BaseTest):
+ """
+ publish snapshot: -skip-bz2
+ """
+ fixtureDB = True
+ fixturePool = True
+ fixtureCmds = [
+ "aptly snapshot create snap40 from mirror gnuplot-maverick",
+ ]
+ runCmd = "aptly publish snapshot -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -skip-bz2 snap40"
+ gold_processor = BaseTest.expand_environ
+
+ def check(self):
+ super(PublishSnapshot40Test, self).check()
+
+ self.check_exists('public/dists/maverick/Release')
+ self.check_exists('public/dists/maverick/Release.gpg')
+
+ self.check_exists('public/dists/maverick/main/binary-i386/Release')
+ self.check_exists('public/dists/maverick/main/binary-amd64/Release')
+ self.check_exists('public/dists/maverick/main/binary-i386/Packages')
+ self.check_exists('public/dists/maverick/main/binary-i386/Packages.gz')
+ self.check_not_exists('public/dists/maverick/main/binary-i386/Packages.bz2')
+
+ self.check_exists('public/dists/maverick/main/binary-amd64/Packages')
+ self.check_exists('public/dists/maverick/main/binary-amd64/Packages.gz')
+ self.check_not_exists('public/dists/maverick/main/binary-amd64/Packages.bz2')
diff --git a/system/t06_publish/switch.py b/system/t06_publish/switch.py
index d5178c48..6a86a3cc 100644
--- a/system/t06_publish/switch.py
+++ b/system/t06_publish/switch.py
@@ -82,7 +82,7 @@ class PublishSwitch1Test(BaseTest):
else:
h = hashlib.sha512()
- h.update(self.read_file(os.path.join('public/dists/maverick', path)))
+ h.update(self.read_file(os.path.join('public/dists/maverick', path), mode='b'))
if h.hexdigest() != fileHash:
raise Exception("file hash doesn't match for %s: %s != %s" % (path, fileHash, h.hexdigest()))
@@ -346,7 +346,7 @@ class PublishSwitch8Test(BaseTest):
else:
h = hashlib.sha512()
- h.update(self.read_file(os.path.join('public/dists/maverick', path)))
+ h.update(self.read_file(os.path.join('public/dists/maverick', path), mode='b'))
if h.hexdigest() != fileHash:
raise Exception("file hash doesn't match for %s: %s != %s" % (path, fileHash, h.hexdigest()))
@@ -378,8 +378,8 @@ class PublishSwitch9Test(BaseTest):
runCmd = "aptly publish switch -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -component=a,b maverick snap2"
expectedCode = 2
- def outputMatchPrepare(_, s):
- return "\n".join([l for l in s.split("\n") if l.startswith("ERROR")])
+ def outputMatchPrepare(self, s):
+ return "\n".join([l for l in self.ensure_utf8(s).split("\n") if l.startswith("ERROR")])
class PublishSwitch10Test(BaseTest):
@@ -535,7 +535,7 @@ class PublishSwitch14Test(BaseTest):
else:
h = hashlib.sha512()
- h.update(self.read_file(os.path.join('public/dists/maverick', path)))
+ h.update(self.read_file(os.path.join('public/dists/maverick', path), mode='b'))
if h.hexdigest() != fileHash:
raise Exception("file hash doesn't match for %s: %s != %s" % (path, fileHash, h.hexdigest()))
@@ -545,3 +545,32 @@ class PublishSwitch14Test(BaseTest):
'main/binary-amd64/Release', 'main/binary-i386/Release', 'main/Contents-amd64.gz',
'main/Contents-i386.gz', 'Contents-i386.gz', 'Contents-amd64.gz']):
raise Exception("path seen wrong: %r" % (pathsSeen, ))
+
+
+class PublishSwitch15Test(BaseTest):
+ """
+ publish switch: -skip-bz2
+ """
+ fixtureDB = True
+ fixturePool = True
+ fixtureCmds = [
+ "aptly snapshot create snap1 from mirror gnuplot-maverick",
+ "aptly snapshot create snap2 empty",
+ "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 -skip-bz2 snap1",
+ ]
+ runCmd = "aptly publish switch -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec maverick snap3"
+ gold_processor = BaseTest.expand_environ
+
+ def check(self):
+ super(PublishSwitch15Test, self).check()
+
+ self.check_exists('public/dists/maverick/Release')
+
+ self.check_exists('public/dists/maverick/main/binary-i386/Packages')
+ self.check_exists('public/dists/maverick/main/binary-i386/Packages.gz')
+ self.check_not_exists('public/dists/maverick/main/binary-i386/Packages.bz2')
+
+ self.check_exists('public/dists/maverick/main/binary-amd64/Packages')
+ self.check_exists('public/dists/maverick/main/binary-amd64/Packages.gz')
+ self.check_not_exists('public/dists/maverick/main/binary-amd64/Packages.bz2')
diff --git a/system/t06_publish/update.py b/system/t06_publish/update.py
index 752f74bc..d3cb443f 100644
--- a/system/t06_publish/update.py
+++ b/system/t06_publish/update.py
@@ -82,7 +82,7 @@ class PublishUpdate1Test(BaseTest):
else:
h = hashlib.sha512()
- h.update(self.read_file(os.path.join('public/dists/maverick', path)))
+ h.update(self.read_file(os.path.join('public/dists/maverick', path), mode='b'))
if h.hexdigest() != fileHash:
raise Exception("file hash doesn't match for %s: %s != %s" % (path, fileHash, h.hexdigest()))
@@ -427,7 +427,7 @@ class PublishUpdate12Test(BaseTest):
else:
h = hashlib.sha512()
- h.update(self.read_file(os.path.join('public/dists/maverick', path)))
+ h.update(self.read_file(os.path.join('public/dists/maverick', path), mode='b'))
if h.hexdigest() != fileHash:
raise Exception("file hash doesn't match for %s: %s != %s" % (path, fileHash, h.hexdigest()))
@@ -437,3 +437,28 @@ class PublishUpdate12Test(BaseTest):
'main/binary-i386/Release', 'main/source/Release', 'main/Contents-i386.gz',
'Contents-i386.gz']):
raise Exception("path seen wrong: %r" % (pathsSeen, ))
+
+
+class PublishUpdate13Test(BaseTest):
+ """
+ publish update: -skip-bz2
+ """
+ fixtureCmds = [
+ "aptly repo create local-repo",
+ "aptly repo add local-repo ${files}/",
+ "aptly publish repo -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=maverick -skip-bz2 local-repo",
+ "aptly repo remove local-repo pyspi"
+ ]
+ runCmd = "aptly publish update -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -skip-bz2 maverick"
+ gold_processor = BaseTest.expand_environ
+
+ def check(self):
+ super(PublishUpdate13Test, self).check()
+
+ self.check_exists('public/dists/maverick/InRelease')
+ self.check_exists('public/dists/maverick/Release')
+ self.check_exists('public/dists/maverick/Release.gpg')
+
+ self.check_exists('public/dists/maverick/main/binary-i386/Packages')
+ self.check_exists('public/dists/maverick/main/binary-i386/Packages.gz')
+ self.check_not_exists('public/dists/maverick/main/binary-i386/Packages.bz2')
diff --git a/system/t07_serve/__init__.py b/system/t07_serve/__init__.py
index 143fe756..457b9f59 100644
--- a/system/t07_serve/__init__.py
+++ b/system/t07_serve/__init__.py
@@ -2,7 +2,7 @@
Testing serving public repo
"""
-import httplib
+import http.client
import os
import signal
import subprocess
@@ -16,6 +16,7 @@ class RootDirInaccessible(BaseTest):
"""
serve command aborts if rootDir is inaccessible
"""
+ skipTest = 'User is root' if os.environ['USER'] == 'root' else False
fixtureDB = False
fixturePool = False
@@ -49,7 +50,7 @@ class Serve1Test(BaseTest):
try:
time.sleep(1)
- conn = httplib.HTTPConnection("127.0.0.1", 8765)
+ conn = http.client.HTTPConnection("127.0.0.1", 8765)
conn.request("GET", "/")
r = conn.getresponse()
if r.status != 200:
@@ -65,7 +66,7 @@ class Serve1Test(BaseTest):
if proc.returncode != -2 and proc.returncode != 2:
raise Exception("exit code %d != %d (output: %s)" % (proc.returncode, -2, output))
self.output = output
- except Exception, e:
+ except Exception as e:
raise Exception("Running command %s failed: %s" % (self.runCmd, str(e)))
def check(self):
diff --git a/system/t09_repo/ListRepo5Test_gold b/system/t09_repo/ListRepo5Test_gold
new file mode 100644
index 00000000..fe51488c
--- /dev/null
+++ b/system/t09_repo/ListRepo5Test_gold
@@ -0,0 +1 @@
+[]
diff --git a/system/t09_repo/ListRepo6Test_gold b/system/t09_repo/ListRepo6Test_gold
new file mode 100644
index 00000000..e0643ce9
--- /dev/null
+++ b/system/t09_repo/ListRepo6Test_gold
@@ -0,0 +1,20 @@
+[
+ {
+ "Name": "repo1",
+ "Comment": "",
+ "DefaultDistribution": "",
+ "DefaultComponent": "main"
+ },
+ {
+ "Name": "repo2",
+ "Comment": "Cool2",
+ "DefaultDistribution": "",
+ "DefaultComponent": "main"
+ },
+ {
+ "Name": "repo3",
+ "Comment": "Cool3",
+ "DefaultDistribution": "",
+ "DefaultComponent": "main"
+ }
+]
diff --git a/system/t09_repo/ShowRepo4Test_gold b/system/t09_repo/ShowRepo4Test_gold
new file mode 100644
index 00000000..3901d78a
--- /dev/null
+++ b/system/t09_repo/ShowRepo4Test_gold
@@ -0,0 +1,7 @@
+{
+ "Name": "repo1",
+ "Comment": "Cool",
+ "DefaultDistribution": "squeeze",
+ "DefaultComponent": "main",
+ "Packages": []
+}
diff --git a/system/t09_repo/ShowRepo5Test_gold b/system/t09_repo/ShowRepo5Test_gold
new file mode 100644
index 00000000..5d17ded8
--- /dev/null
+++ b/system/t09_repo/ShowRepo5Test_gold
@@ -0,0 +1,12 @@
+{
+ "Name": "repo2",
+ "Comment": "Cool",
+ "DefaultDistribution": "wheezy",
+ "DefaultComponent": "contrib",
+ "Packages": [
+ "libboost-program-options-dev_1.49.0.1_i386",
+ "libboost-program-options-dev_1.62.0.1_i386",
+ "pyspi_0.6.1-1.3_source",
+ "pyspi_0.6.1-1.4_source"
+ ]
+}
diff --git a/system/t09_repo/add.py b/system/t09_repo/add.py
index dea199b9..61c64d1e 100644
--- a/system/t09_repo/add.py
+++ b/system/t09_repo/add.py
@@ -76,8 +76,8 @@ class AddRepo4Test(BaseTest):
super(AddRepo4Test, self).prepare()
self.tempSrcDir = tempfile.mkdtemp()
- os.makedirs(os.path.join(self.tempSrcDir, "01"), 0755)
- os.makedirs(os.path.join(self.tempSrcDir, "02", "03"), 0755)
+ os.makedirs(os.path.join(self.tempSrcDir, "01"), 0o755)
+ os.makedirs(os.path.join(self.tempSrcDir, "02", "03"), 0o755)
shutil.copy(os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "libboost-program-options-dev_1.49.0.1_i386.deb"),
os.path.join(self.tempSrcDir, "01"))
@@ -133,7 +133,7 @@ class AddRepo5Test(BaseTest):
super(AddRepo5Test, self).prepare()
self.tempSrcDir = tempfile.mkdtemp()
- os.makedirs(os.path.join(self.tempSrcDir, "02", "03"), 0755)
+ os.makedirs(os.path.join(self.tempSrcDir, "02", "03"), 0o755)
shutil.copy(os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "pyspi_0.6.1-1.3.dsc"),
os.path.join(self.tempSrcDir, "02", "03"))
@@ -330,7 +330,7 @@ class AddRepo16Test(BaseTest):
super(AddRepo16Test, self).prepare()
self.tempSrcDir = tempfile.mkdtemp()
- os.makedirs(os.path.join(self.tempSrcDir, "02", "03"), 0755)
+ os.makedirs(os.path.join(self.tempSrcDir, "02", "03"), 0o755)
shutil.copy(os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "pyspi_0.6.1-1.3.dsc"),
os.path.join(self.tempSrcDir, "02", "03"))
diff --git a/system/t09_repo/cmdimport.py b/system/t09_repo/cmdimport.py
index b3019dd6..5a4337ba 100644
--- a/system/t09_repo/cmdimport.py
+++ b/system/t09_repo/cmdimport.py
@@ -5,6 +5,7 @@ class ImportRepo1Test(BaseTest):
"""
import to local repo: simple import
"""
+ sortOutput = True
fixtureDB = True
fixtureCmds = [
"aptly repo create -comment=Cool -distribution=squeeze repo1",
@@ -16,14 +17,12 @@ class ImportRepo1Test(BaseTest):
self.check_output()
self.check_cmd_output("aptly repo show -with-packages repo1", "repo_show")
- def output_processor(self, output):
- return "\n".join(sorted(output.split("\n")))
-
class ImportRepo2Test(BaseTest):
"""
import to local repo: import w/deps
"""
+ sortOutput = True
fixtureDB = True
fixtureCmds = [
"aptly repo create -comment=Cool -distribution=squeeze repo1",
@@ -35,14 +34,12 @@ class ImportRepo2Test(BaseTest):
self.check_output()
self.check_cmd_output("aptly repo show -with-packages repo1", "repo_show")
- def output_processor(self, output):
- return "\n".join(sorted(output.split("\n")))
-
class ImportRepo3Test(BaseTest):
"""
import to local repo: simple move w/deps but w/o archs
"""
+ sortOutput = True
fixtureDB = True
fixtureCmds = [
"aptly repo create -comment=Cool -distribution=squeeze repo1",
@@ -50,14 +47,12 @@ class ImportRepo3Test(BaseTest):
runCmd = "aptly repo import -with-deps wheezy-contrib repo1 redeclipse"
expectedCode = 1
- def output_processor(self, output):
- return "\n".join(sorted(output.split("\n")))
-
class ImportRepo4Test(BaseTest):
"""
import to local repo: dry run
"""
+ sortOutput = True
fixtureDB = True
fixtureCmds = [
"aptly repo create -comment=Cool -distribution=squeeze repo1",
@@ -68,14 +63,12 @@ class ImportRepo4Test(BaseTest):
self.check_output()
self.check_cmd_output("aptly repo show -with-packages repo1", "repo_show")
- def output_processor(self, output):
- return "\n".join(sorted(output.split("\n")))
-
class ImportRepo5Test(BaseTest):
"""
import to local repo: wrong dep
"""
+ sortOutput = True
fixtureDB = True
fixtureCmds = [
"aptly repo create -comment=Cool -distribution=squeeze repo1",
@@ -83,9 +76,6 @@ class ImportRepo5Test(BaseTest):
runCmd = "aptly repo import wheezy-contrib repo1 'pyspi >> 0.6.1-1.3)'"
expectedCode = 1
- def output_processor(self, output):
- return "\n".join(sorted(output.split("\n")))
-
class ImportRepo6Test(BaseTest):
"""
@@ -93,7 +83,7 @@ class ImportRepo6Test(BaseTest):
"""
fixtureCmds = [
"aptly repo create -comment=Cool -distribution=squeeze repo1",
- "aptly mirror create --ignore-signatures mirror1 http://mirror.yandex.ru/debian/ stretch",
+ "aptly mirror create --ignore-signatures mirror1 http://cdn-fastly.deb.debian.org/debian/ stretch",
]
runCmd = "aptly repo import mirror1 repo1 nginx"
expectedCode = 1
@@ -125,11 +115,9 @@ class ImportRepo9Test(BaseTest):
"""
import to local repo: import with complex query
"""
+ sortOutput = True
fixtureDB = True
fixtureCmds = [
"aptly repo create -comment=Cool -distribution=squeeze repo1",
]
runCmd = "aptly repo import wheezy-main repo1 '(httpd, $$Source (=nginx)) | exim4'"
-
- def output_processor(self, output):
- return "\n".join(sorted(output.split("\n")))
diff --git a/system/t09_repo/copy.py b/system/t09_repo/copy.py
index 9280f61c..40e5c7dd 100644
--- a/system/t09_repo/copy.py
+++ b/system/t09_repo/copy.py
@@ -5,6 +5,7 @@ class CopyRepo1Test(BaseTest):
"""
copy in local repo: simple copy
"""
+ sortOutput = True
fixtureCmds = [
"aptly repo create -comment=Cool -distribution=squeeze repo1",
"aptly repo create -comment=Cool -distribution=squeeze repo2",
@@ -17,14 +18,12 @@ class CopyRepo1Test(BaseTest):
self.check_cmd_output("aptly repo show -with-packages repo1", "repo1_show")
self.check_cmd_output("aptly repo show -with-packages repo2", "repo2_show")
- def output_processor(self, output):
- return "\n".join(sorted(output.split("\n")))
-
class CopyRepo2Test(BaseTest):
"""
copy in local repo: simple copy w/deps
"""
+ sortOutput = True
fixtureCmds = [
"aptly repo create -comment=Cool -distribution=squeeze repo1",
"aptly repo create -comment=Cool -distribution=squeeze repo2",
@@ -37,14 +36,12 @@ class CopyRepo2Test(BaseTest):
self.check_cmd_output("aptly repo show -with-packages repo1", "repo1_show")
self.check_cmd_output("aptly repo show -with-packages repo2", "repo2_show")
- def output_processor(self, output):
- return "\n".join(sorted(output.split("\n")))
-
class CopyRepo3Test(BaseTest):
"""
copy in local repo: simple copy w/deps but w/o archs
"""
+ sortOutput = True
fixtureCmds = [
"aptly repo create -comment=Cool -distribution=squeeze repo1",
"aptly repo create -comment=Cool -distribution=squeeze repo2",
@@ -53,14 +50,12 @@ class CopyRepo3Test(BaseTest):
runCmd = "aptly repo copy -with-deps repo1 repo2 'pyspi (>> 0.6.1-1.3)' libboost-program-options-dev_1.49.0.1_i386"
expectedCode = 1
- def output_processor(self, output):
- return "\n".join(sorted(output.split("\n")))
-
class CopyRepo4Test(BaseTest):
"""
copy in local repo: dry run
"""
+ sortOutput = True
fixtureCmds = [
"aptly repo create -comment=Cool -distribution=squeeze repo1",
"aptly repo create -comment=Cool -distribution=squeeze repo2",
@@ -73,14 +68,12 @@ class CopyRepo4Test(BaseTest):
self.check_cmd_output("aptly repo show -with-packages repo1", "repo1_show")
self.check_cmd_output("aptly repo show -with-packages repo2", "repo2_show")
- def output_processor(self, output):
- return "\n".join(sorted(output.split("\n")))
-
class CopyRepo5Test(BaseTest):
"""
copy in local repo: wrong dep
"""
+ sortOutput = True
fixtureCmds = [
"aptly repo create -comment=Cool -distribution=squeeze repo1",
"aptly repo create -comment=Cool -distribution=squeeze repo2",
@@ -89,9 +82,6 @@ class CopyRepo5Test(BaseTest):
runCmd = "aptly repo copy repo1 repo2 'pyspi >> 0.6.1-1.3)'"
expectedCode = 1
- def output_processor(self, output):
- return "\n".join(sorted(output.split("\n")))
-
class CopyRepo6Test(BaseTest):
"""
diff --git a/system/t09_repo/include.py b/system/t09_repo/include.py
index 2ae6b99a..0abe383c 100644
--- a/system/t09_repo/include.py
+++ b/system/t09_repo/include.py
@@ -145,7 +145,7 @@ class IncludeRepo6Test(BaseTest):
super(IncludeRepo6Test, self).prepare()
self.tempSrcDir = tempfile.mkdtemp()
- os.makedirs(os.path.join(self.tempSrcDir, "01"), 0755)
+ os.makedirs(os.path.join(self.tempSrcDir, "01"), 0o755)
for path in ["hardlink_0.2.1.dsc", "hardlink_0.2.1_amd64.changes", "hardlink_0.2.1_amd64.deb"]:
shutil.copy(os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "changes", path),
@@ -536,7 +536,7 @@ class IncludeRepo22Test(BaseTest):
super(IncludeRepo22Test, self).prepare()
self.tempSrcDir = tempfile.mkdtemp()
- os.makedirs(os.path.join(self.tempSrcDir, "01"), 0755)
+ os.makedirs(os.path.join(self.tempSrcDir, "01"), 0o755)
for path in ["hardlink_0.2.1.dsc", "hardlink_0.2.1_amd64.deb"]:
shutil.copy(os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "changes", path),
diff --git a/system/t09_repo/list.py b/system/t09_repo/list.py
index 9be862a2..fb12ceee 100644
--- a/system/t09_repo/list.py
+++ b/system/t09_repo/list.py
@@ -37,3 +37,22 @@ class ListRepo4Test(BaseTest):
"aptly repo create repo1",
]
runCmd = "aptly repo list -raw"
+
+
+class ListRepo5Test(BaseTest):
+ """
+ list local repo: json no repos
+ """
+ runCmd = "aptly repo list -json"
+
+
+class ListRepo6Test(BaseTest):
+ """
+ list local repo: json normal
+ """
+ fixtureCmds = [
+ "aptly repo create -comment=Cool3 repo3",
+ "aptly repo create -comment=Cool2 repo2",
+ "aptly repo create repo1",
+ ]
+ runCmd = "aptly repo list -json"
diff --git a/system/t09_repo/move.py b/system/t09_repo/move.py
index 301369dc..9d9957d9 100644
--- a/system/t09_repo/move.py
+++ b/system/t09_repo/move.py
@@ -5,6 +5,7 @@ class MoveRepo1Test(BaseTest):
"""
move in local repo: simple move
"""
+ sortOutput = True
fixtureCmds = [
"aptly repo create -comment=Cool -distribution=squeeze repo1",
"aptly repo create -comment=Cool -distribution=squeeze repo2",
@@ -17,14 +18,12 @@ class MoveRepo1Test(BaseTest):
self.check_cmd_output("aptly repo show -with-packages repo1", "repo1_show")
self.check_cmd_output("aptly repo show -with-packages repo2", "repo2_show")
- def output_processor(self, output):
- return "\n".join(sorted(output.split("\n")))
-
class MoveRepo2Test(BaseTest):
"""
move in local repo: simple move w/deps
"""
+ sortOutput = True
fixtureCmds = [
"aptly repo create -comment=Cool -distribution=squeeze repo1",
"aptly repo create -comment=Cool -distribution=squeeze repo2",
@@ -37,14 +36,12 @@ class MoveRepo2Test(BaseTest):
self.check_cmd_output("aptly repo show -with-packages repo1", "repo1_show")
self.check_cmd_output("aptly repo show -with-packages repo2", "repo2_show")
- def output_processor(self, output):
- return "\n".join(sorted(output.split("\n")))
-
class MoveRepo3Test(BaseTest):
"""
move in local repo: simple move w/deps but w/o archs
"""
+ sortOutput = True
fixtureCmds = [
"aptly repo create -comment=Cool -distribution=squeeze repo1",
"aptly repo create -comment=Cool -distribution=squeeze repo2",
@@ -53,14 +50,12 @@ class MoveRepo3Test(BaseTest):
runCmd = "aptly repo move -with-deps repo1 repo2 'pyspi (>> 0.6.1-1.3)' libboost-program-options-dev_1.49.0.1_i386"
expectedCode = 1
- def output_processor(self, output):
- return "\n".join(sorted(output.split("\n")))
-
class MoveRepo4Test(BaseTest):
"""
move in local repo: dry run
"""
+ sortOutput = True
fixtureCmds = [
"aptly repo create -comment=Cool -distribution=squeeze repo1",
"aptly repo create -comment=Cool -distribution=squeeze repo2",
@@ -73,14 +68,12 @@ class MoveRepo4Test(BaseTest):
self.check_cmd_output("aptly repo show -with-packages repo1", "repo1_show")
self.check_cmd_output("aptly repo show -with-packages repo2", "repo2_show")
- def output_processor(self, output):
- return "\n".join(sorted(output.split("\n")))
-
class MoveRepo5Test(BaseTest):
"""
move in local repo: wrong dep
"""
+ sortOutput = True
fixtureCmds = [
"aptly repo create -comment=Cool -distribution=squeeze repo1",
"aptly repo create -comment=Cool -distribution=squeeze repo2",
@@ -89,9 +82,6 @@ class MoveRepo5Test(BaseTest):
runCmd = "aptly repo move repo1 repo2 'pyspi >> 0.6.1-1.3)'"
expectedCode = 1
- def output_processor(self, output):
- return "\n".join(sorted(output.split("\n")))
-
class MoveRepo6Test(BaseTest):
"""
diff --git a/system/t09_repo/remove.py b/system/t09_repo/remove.py
index 5acb1d79..7bbf570a 100644
--- a/system/t09_repo/remove.py
+++ b/system/t09_repo/remove.py
@@ -5,6 +5,7 @@ class RemoveRepo1Test(BaseTest):
"""
remove from local repo: as dep
"""
+ sortOutput = True
fixtureCmds = [
"aptly repo create -comment=Cool -distribution=squeeze local-repo",
"aptly repo add local-repo ${files}"
@@ -15,14 +16,12 @@ class RemoveRepo1Test(BaseTest):
self.check_output()
self.check_cmd_output("aptly repo show -with-packages local-repo", "repo_show")
- def output_processor(self, output):
- return "\n".join(sorted(output.split("\n")))
-
class RemoveRepo2Test(BaseTest):
"""
remove from local repo: as dep with version, key
"""
+ sortOutput = True
fixtureCmds = [
"aptly repo create -comment=Cool -distribution=squeeze local-repo",
"aptly repo add local-repo ${files}"
@@ -33,9 +32,6 @@ class RemoveRepo2Test(BaseTest):
self.check_output()
self.check_cmd_output("aptly repo show -with-packages local-repo", "repo_show")
- def output_processor(self, output):
- return "\n".join(sorted(output.split("\n")))
-
class RemoveRepo3Test(BaseTest):
"""
@@ -49,6 +45,7 @@ class RemoveRepo4Test(BaseTest):
"""
remove from local repo: dry run
"""
+ sortOutput = True
fixtureCmds = [
"aptly repo create -comment=Cool -distribution=squeeze local-repo",
"aptly repo add local-repo ${files}"
@@ -58,6 +55,3 @@ class RemoveRepo4Test(BaseTest):
def check(self):
self.check_output()
self.check_cmd_output("aptly repo show -with-packages local-repo", "repo_show")
-
- def output_processor(self, output):
- return "\n".join(sorted(output.split("\n")))
diff --git a/system/t09_repo/show.py b/system/t09_repo/show.py
index c275c7fc..fc3d2132 100644
--- a/system/t09_repo/show.py
+++ b/system/t09_repo/show.py
@@ -26,3 +26,22 @@ class ShowRepo3Test(BaseTest):
"""
expectedCode = 1
runCmd = "aptly repo show repo3"
+
+
+class ShowRepo4Test(BaseTest):
+ """
+ show local repo: json regular
+ """
+ fixtureCmds = ["aptly repo create -comment=Cool -distribution=squeeze repo1"]
+ runCmd = "aptly repo show -json repo1"
+
+
+class ShowRepo5Test(BaseTest):
+ """
+ show local repo: json -with-packages
+ """
+ fixtureCmds = [
+ "aptly repo create -comment=Cool -distribution=wheezy -component=contrib repo2",
+ "aptly repo add repo2 ${files}"
+ ]
+ runCmd = "aptly repo show -json -with-packages repo2"
diff --git a/system/t12_api/db.py b/system/t12_api/db.py
new file mode 100644
index 00000000..0542fb33
--- /dev/null
+++ b/system/t12_api/db.py
@@ -0,0 +1,14 @@
+from api_lib import APITest
+
+
+class DbAPITestCleanup(APITest):
+ """
+ POST /db/cleanup
+ """
+
+ def check(self):
+ resp = self.post_task(
+ "/api/db/cleanup"
+ )
+
+ self.check_equal(resp.status_code, 200)
diff --git a/system/t12_api/gpg.py b/system/t12_api/gpg.py
new file mode 100644
index 00000000..8fb9a380
--- /dev/null
+++ b/system/t12_api/gpg.py
@@ -0,0 +1,54 @@
+import inspect
+import os
+import subprocess
+import tempfile
+
+from api_lib import APITest
+
+
+def check_gpgkey_exists(gpg_key, keyring):
+ subprocess.check_call([
+ "gpg", "--no-default-keyring",
+ "--keyring", keyring,
+ "--fingerprint", gpg_key,
+ ])
+
+
+class GPGAPITestAddKey(APITest):
+ """
+ POST /gpg/key
+ """
+
+ def check(self):
+ with tempfile.NamedTemporaryFile(suffix=".pub") as keyring:
+ gpgkeyid = "9E3E53F19C7DE460"
+ resp = self.post("/api/gpg/key", json={
+ "Keyserver": "keyserver.ubuntu.com",
+ "Keyring": keyring.name,
+ "GpgKeyID": gpgkeyid
+ })
+
+ self.check_equal(resp.status_code, 200)
+ check_gpgkey_exists(gpgkeyid, keyring.name)
+
+
+class GPGAPITestAddKeyArmor(APITest):
+ """
+ POST /gpg/key
+ """
+ def check(self):
+ keyfile = os.path.join(os.path.dirname(inspect.getsourcefile(APITest)),
+ "files") + "/launchpad.key"
+ gpgkeyid = "3B1F56C0"
+
+ with open(keyfile, 'r') as keyf:
+ gpgkeyarmor = keyf.read()
+
+ with tempfile.NamedTemporaryFile(suffix=".pub") as keyring:
+ resp = self.post("/api/gpg/key", json={
+ "Keyring": keyring.name,
+ "GpgKeyArmor": gpgkeyarmor
+ })
+
+ self.check_equal(resp.status_code, 200)
+ check_gpgkey_exists(gpgkeyid, keyring.name)
diff --git a/system/t12_api/graph.py b/system/t12_api/graph.py
index 020a8ef2..48ce512a 100644
--- a/system/t12_api/graph.py
+++ b/system/t12_api/graph.py
@@ -7,19 +7,21 @@ class GraphAPITest(APITest):
GET /graph.:ext
"""
+ requiresDot = True
+
def check(self):
resp = self.get("/api/graph.png")
self.check_equal(resp.headers["Content-Type"], "image/png")
- self.check_equal(resp.content[:4], '\x89PNG')
+ self.check_equal(resp.content[:4], b'\x89PNG')
self.check_equal(self.post("/api/repos", json={"Name": "xyz", "Comment": "fun repo"}).status_code, 201)
resp = self.get("/api/graph.svg")
self.check_equal(resp.headers["Content-Type"], "image/svg+xml")
- self.check_equal(resp.content[:4], ' 0.6.1-1.4)"}).json()[0])
# duplicate snapshot name
- resp = self.post("/api/repos/" + repo_name + '/snapshots', json={'Name': snapshot_name})
- self.check_equal(resp.status_code, 400)
+ resp = self.post_task("/api/repos/" + repo_name + '/snapshots', json={'Name': snapshot_name})
+ self.check_equal(resp.json()['State'], 3)
class SnapshotsAPITestCreateUpdate(APITest):
@@ -136,16 +139,16 @@ class SnapshotsAPITestCreateUpdate(APITest):
"""
def check(self):
snapshot_name = self.random_name()
- snapshot_desc = {u'Description': u'fun snapshot',
- u'Name': snapshot_name}
+ snapshot_desc = {'Description': 'fun snapshot',
+ 'Name': snapshot_name}
- resp = self.post("/api/snapshots", json=snapshot_desc)
- self.check_equal(resp.status_code, 201)
+ resp = self.post_task("/api/snapshots", json=snapshot_desc)
+ self.check_equal(resp.json()['State'], 2)
new_snapshot_name = self.random_name()
- resp = self.put("/api/snapshots/" + snapshot_name, json={'Name': new_snapshot_name,
- 'Description': 'New description'})
- self.check_equal(resp.status_code, 200)
+ resp = self.put_task("/api/snapshots/" + snapshot_name, json={'Name': new_snapshot_name,
+ 'Description': 'New description'})
+ self.check_equal(resp.json()['State'], 2)
resp = self.get("/api/snapshots/" + new_snapshot_name)
self.check_equal(resp.status_code, 200)
@@ -153,9 +156,9 @@ class SnapshotsAPITestCreateUpdate(APITest):
"Description": "New description"}, resp.json())
# duplicate name
- resp = self.put("/api/snapshots/" + new_snapshot_name, json={'Name': new_snapshot_name,
- 'Description': 'New description'})
- self.check_equal(resp.status_code, 409)
+ resp = self.put_task("/api/snapshots/" + new_snapshot_name, json={'Name': new_snapshot_name,
+ 'Description': 'New description'})
+ self.check_equal(resp.json()['State'], 3)
# missing snapshot
resp = self.put("/api/snapshots/" + snapshot_name, json={})
@@ -168,40 +171,46 @@ class SnapshotsAPITestCreateDelete(APITest):
"""
def check(self):
snapshot_name = self.random_name()
- snapshot_desc = {u'Description': u'fun snapshot',
- u'Name': snapshot_name}
+ snapshot_desc = {'Description': 'fun snapshot',
+ 'Name': snapshot_name}
# deleting unreferenced snapshot
- resp = self.post("/api/snapshots", json=snapshot_desc)
- self.check_equal(resp.status_code, 201)
+ resp = self.post_task("/api/snapshots", json=snapshot_desc)
+ self.check_equal(resp.json()['State'], 2)
- self.check_equal(self.delete("/api/snapshots/" + snapshot_name).status_code, 200)
+ self.check_equal(self.delete_task("/api/snapshots/" + snapshot_name).json()['State'], 2)
self.check_equal(self.get("/api/snapshots/" + snapshot_name).status_code, 404)
# deleting referenced snapshot
snap1, snap2 = self.random_name(), self.random_name()
- self.check_equal(self.post("/api/snapshots", json={"Name": snap1}).status_code, 201)
- self.check_equal(self.post("/api/snapshots", json={"Name": snap2, "SourceSnapshots": [snap1]}).status_code, 201)
+ self.check_equal(self.post_task("/api/snapshots", json={"Name": snap1}).json()['State'], 2)
+ self.check_equal(
+ self.post_task(
+ "/api/snapshots", json={"Name": snap2, "SourceSnapshots": [snap1]}
+ ).json()['State'], 2
+ )
- self.check_equal(self.delete("/api/snapshots/" + snap1).status_code, 409)
+ self.check_equal(self.delete_task("/api/snapshots/" + snap1).json()['State'], 3)
self.check_equal(self.get("/api/snapshots/" + snap1).status_code, 200)
- self.check_equal(self.delete("/api/snapshots/" + snap1, params={"force": "1"}).status_code, 200)
+ self.check_equal(self.delete_task("/api/snapshots/" + snap1, params={"force": "1"}).json()['State'], 2)
self.check_equal(self.get("/api/snapshots/" + snap1).status_code, 404)
# deleting published snapshot
- resp = self.post("/api/publish",
- json={
- "SourceKind": "snapshot",
- "Distribution": "trusty",
- "Architectures": ["i386"],
- "Sources": [{"Name": snap2}],
- "Signing": DefaultSigningOptions,
- })
- self.check_equal(resp.status_code, 201)
+ resp = self.post_task(
+ "/api/publish",
+ json={
+ "SourceKind": "snapshot",
+ "Distribution": "trusty",
+ "Architectures": ["i386"],
+ "Sources": [{"Name": snap2}],
+ "Signing": DefaultSigningOptions,
+ }
+ )
+ self.check_equal(resp.json()['State'], 2)
- self.check_equal(self.delete("/api/snapshots/" + snap2).status_code, 409)
- self.check_equal(self.delete("/api/snapshots/" + snap2, params={"force": "1"}).status_code, 409)
+ self.check_equal(self.delete_task("/api/snapshots/" + snap2).json()['State'], 3)
+ self.check_equal(self.delete_task("/api/snapshots/" + snap2, params={"force": "1"}).json()['State'], 3)
class SnapshotsAPITestSearch(APITest):
@@ -218,10 +227,10 @@ class SnapshotsAPITestSearch(APITest):
self.check_equal(self.upload("/api/files/" + d,
"libboost-program-options-dev_1.49.0.1_i386.deb").status_code, 200)
- self.check_equal(self.post("/api/repos/" + repo_name + "/file/" + d).status_code, 200)
+ self.check_equal(self.post_task("/api/repos/" + repo_name + "/file/" + d).json()['State'], 2)
- resp = self.post("/api/repos/" + repo_name + '/snapshots', json={'Name': snapshot_name})
- self.check_equal(resp.status_code, 201)
+ resp = self.post_task("/api/repos/" + repo_name + '/snapshots', json={'Name': snapshot_name})
+ self.check_equal(resp.json()['State'], 2)
resp = self.get("/api/snapshots/" + snapshot_name + "/packages",
params={"q": "libboost-program-options-dev", "format": "details"})
@@ -242,8 +251,8 @@ class SnapshotsAPITestDiff(APITest):
GET /api/snapshot/:name/diff/:name2
"""
def check(self):
- repos = [self.random_name() for x in xrange(2)]
- snapshots = [self.random_name() for x in xrange(2)]
+ repos = [self.random_name() for x in range(2)]
+ snapshots = [self.random_name() for x in range(2)]
for repo_name in repos:
self.check_equal(self.post("/api/repos", json={"Name": repo_name}).status_code, 201)
@@ -252,13 +261,13 @@ class SnapshotsAPITestDiff(APITest):
self.check_equal(self.upload("/api/files/" + d,
"libboost-program-options-dev_1.49.0.1_i386.deb").status_code, 200)
- self.check_equal(self.post("/api/repos/" + repo_name + "/file/" + d).status_code, 200)
+ self.check_equal(self.post_task("/api/repos/" + repo_name + "/file/" + d).json()['State'], 2)
- resp = self.post("/api/repos/" + repo_name + '/snapshots', json={'Name': snapshots[0]})
- self.check_equal(resp.status_code, 201)
+ resp = self.post_task("/api/repos/" + repo_name + '/snapshots', json={'Name': snapshots[0]})
+ self.check_equal(resp.json()['State'], 2)
- resp = self.post("/api/snapshots", json={'Name': snapshots[1]})
- self.check_equal(resp.status_code, 201)
+ resp = self.post_task("/api/snapshots", json={'Name': snapshots[1]})
+ self.check_equal(resp.json()['State'], 2)
resp = self.get("/api/snapshots/" + snapshots[0] + "/diff/" + snapshots[1])
self.check_equal(resp.status_code, 200)
diff --git a/system/t12_api/systemd_handover.py b/system/t12_api/systemd_handover.py
index 3d6de693..eb3d0aac 100644
--- a/system/t12_api/systemd_handover.py
+++ b/system/t12_api/systemd_handover.py
@@ -1,5 +1,7 @@
import requests_unixsocket
-import urllib
+import urllib.error
+import urllib.parse
+import urllib.request
import os
import os.path
@@ -42,5 +44,5 @@ class SystemdAPIHandoverTest(BaseTest):
print("Skipping test as we failed to setup a listener.")
return
session = requests_unixsocket.Session()
- r = session.get('http+unix://%s/api/version' % urllib.quote(self.socket_path, safe=''))
+ r = session.get('http+unix://%s/api/version' % urllib.parse.quote(self.socket_path, safe=''))
self.check_equal(r.json(), {'Version': os.environ['APTLY_VERSION']})
diff --git a/system/t12_api/tasks.py b/system/t12_api/tasks.py
new file mode 100644
index 00000000..5f184c07
--- /dev/null
+++ b/system/t12_api/tasks.py
@@ -0,0 +1,106 @@
+from api_lib import APITest
+from .publish import DefaultSigningOptions
+
+
+class TaskAPITestParallelTasks(APITest):
+ """
+ GET /api/tasks, GET /api/tasks/:id/wait, GET /api/tasks-wait
+ """
+ def _create_mirror(self, dist):
+ mirror_name = self.random_name()
+ mirror_desc = {'Name': mirror_name,
+ 'ArchiveURL': 'https://packagecloud.io/varnishcache/varnish30/debian/',
+ 'Distribution': dist,
+ 'Components': ['main']}
+ mirror_desc['IgnoreSignatures'] = True
+ resp = self.post("/api/mirrors", json=mirror_desc)
+ self.check_equal(resp.status_code, 201)
+ resp = self.put("/api/mirrors/" + mirror_name, json=mirror_desc, params={'_async': True})
+ self.check_equal(resp.status_code, 202)
+
+ # check that two mirror updates cannot run at the same time
+ resp2 = self.put("/api/mirrors/" + mirror_name, json=mirror_desc, params={'_async': True})
+ self.check_equal(resp2.status_code, 409)
+
+ return resp.json()['ID'], mirror_name
+
+ def _create_repo(self):
+ repo_name = self.random_name()
+ distribution = self.random_name()
+
+ self.check_equal(self.post("/api/repos",
+ json={
+ "Name": repo_name,
+ "Comment": "fun repo",
+ "DefaultDistribution": distribution
+ }).status_code, 201)
+ d = self.random_name()
+ self.check_equal(
+ self.upload("/api/files/" + d, "pyspi_0.6.1-1.3.dsc",
+ "pyspi_0.6.1-1.3.diff.gz",
+ "pyspi_0.6.1.orig.tar.gz").status_code, 200)
+
+ resp = self.post("/api/repos/" + repo_name + "/file/" + d, params={'_async': True})
+ self.check_equal(resp.status_code, 202)
+
+ return resp.json()['ID'], repo_name
+
+ def _wait_for_task(self, task_id):
+ uri = "/api/tasks/%d/wait" % int(task_id)
+ resp = self.get(uri)
+ self.check_equal(resp.status_code, 200)
+ self.check_equal(resp.json()['State'], 2)
+
+ def _wait_for_all_tasks(self):
+ resp = self.get("/api/tasks-wait")
+ self.check_equal(resp.status_code, 200)
+
+ def _snapshot(self, res_type, name):
+ uri = "/api/%s/%s/snapshots" % (res_type, name)
+ resp = self.post(uri, json={"Name": name}, params={'_async': True})
+ self.check_equal(resp.status_code, 202)
+
+ return resp.json()['ID']
+
+ def _publish(self, source_kind, name):
+ resp = self.post("/api/publish",
+ json={
+ "SourceKind": source_kind,
+ "Sources": [{"Name": name}],
+ "Signing": DefaultSigningOptions,
+ }, params={'_async': True})
+ self.check_equal(resp.status_code, 202)
+ return resp.json()['ID']
+
+ def check(self):
+ publish_task_ids = []
+ mirror_task_list = []
+ for mirror_dist in ['squeeze', 'jessie']:
+ mirror_task_id, mirror_name = self._create_mirror(mirror_dist)
+ mirror_task_list.append((mirror_task_id, mirror_name))
+ repo_task_id, repo_name = self._create_repo()
+
+ self._wait_for_task(repo_task_id)
+
+ resp = self.delete("/api/tasks/%d" % repo_task_id)
+ self.check_equal(resp.status_code, 200)
+ resp = self.get("/api/tasks/%d" % repo_task_id)
+ self.check_equal(resp.status_code, 404)
+
+ repo_snap_task_id = self._snapshot('repos', repo_name)
+ self._wait_for_task(repo_snap_task_id)
+ publish_task_ids.append(self._publish('snapshot', repo_name))
+
+ for mirror_task_id, mirror_name in mirror_task_list:
+ self._wait_for_task(mirror_task_id)
+ mirror_snap_task_id = self._snapshot('mirrors', mirror_name)
+
+ self._wait_for_task(mirror_snap_task_id)
+ publish_task_ids.append(self._publish('snapshot', mirror_name))
+
+ self._wait_for_all_tasks()
+
+ for publish_task_id in publish_task_ids:
+ resp = self.get("/api/tasks/%d" % publish_task_id)
+ self.check_equal(resp.status_code, 200)
+ self.check_equal(resp.json()['State'], 2)
diff --git a/system/t12_api/unix_socket.py b/system/t12_api/unix_socket.py
index 9a3f1372..b14fe946 100644
--- a/system/t12_api/unix_socket.py
+++ b/system/t12_api/unix_socket.py
@@ -1,7 +1,9 @@
import requests_unixsocket
import time
import os
-import urllib
+import urllib.error
+import urllib.parse
+import urllib.request
from lib import BaseTest
@@ -32,7 +34,7 @@ class UnixSocketAPITest(BaseTest):
"""
def check(self):
session = requests_unixsocket.Session()
- r = session.get('http+unix://%s/api/version' % urllib.quote(UnixSocketAPITest.socket_path, safe=''))
+ r = session.get('http+unix://%s/api/version' % urllib.parse.quote(UnixSocketAPITest.socket_path, safe=''))
# Just needs to come back, we actually don't care much about the code.
# Only needs to verify that the socket is actually responding.
self.check_equal(r.json(), {'Version': os.environ['APTLY_VERSION']})
diff --git a/task/list.go b/task/list.go
new file mode 100644
index 00000000..472282b7
--- /dev/null
+++ b/task/list.go
@@ -0,0 +1,209 @@
+package task
+
+import (
+ "fmt"
+ "sync"
+
+ "github.com/aptly-dev/aptly/aptly"
+)
+
+// List is handling list of processes and makes sure
+// only one process is executed at the time
+type List struct {
+ *sync.Mutex
+ tasks []*Task
+ wgTasks map[int]*sync.WaitGroup
+ wg *sync.WaitGroup
+ // resources currently used by running tasks
+ usedResources *ResourcesSet
+ idCounter int
+}
+
+// NewList creates empty task list
+func NewList() *List {
+ list := &List{
+ Mutex: &sync.Mutex{},
+ tasks: make([]*Task, 0),
+ wgTasks: make(map[int]*sync.WaitGroup),
+ wg: &sync.WaitGroup{},
+ usedResources: NewResourcesSet(),
+ }
+ return list
+}
+
+// GetTasks gets complete list of tasks
+func (list *List) GetTasks() []Task {
+ var tasks []Task
+ list.Lock()
+ for _, task := range list.tasks {
+ tasks = append(tasks, *task)
+ }
+
+ list.Unlock()
+ return tasks
+}
+
+// DeleteTaskByID deletes given task from list. Only finished
+// tasks can be deleted.
+func (list *List) DeleteTaskByID(ID int) (Task, error) {
+ list.Lock()
+ defer list.Unlock()
+
+ tasks := list.tasks
+ for i, task := range tasks {
+ if task.ID == ID {
+ if task.State == SUCCEEDED || task.State == FAILED {
+ list.tasks = append(tasks[:i], tasks[i+1:]...)
+ return *task, nil
+ }
+
+ 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)
+}
+
+// GetTaskByID returns task with given id
+func (list *List) GetTaskByID(ID int) (Task, error) {
+ list.Lock()
+ tasks := list.tasks
+ list.Unlock()
+
+ for _, task := range tasks {
+ if task.ID == ID {
+ return *task, nil
+ }
+ }
+
+ return Task{}, fmt.Errorf("Could not find task with id %v", ID)
+}
+
+// GetTaskOutputByID returns standard output of task with given id
+func (list *List) GetTaskOutputByID(ID int) (string, error) {
+ task, err := list.GetTaskByID(ID)
+
+ if err != nil {
+ return "", err
+ }
+
+ return task.output.String(), nil
+}
+
+// GetTaskDetailByID returns detail of task with given id
+func (list *List) GetTaskDetailByID(ID int) (interface{}, error) {
+ task, err := list.GetTaskByID(ID)
+
+ if err != nil {
+ return nil, err
+ }
+
+ detail := task.detail.Load()
+ if detail == nil {
+ return struct{}{}, nil
+ }
+
+ return detail, nil
+}
+
+// GetTaskReturnValueByID returns process return value of task with given id
+func (list *List) GetTaskReturnValueByID(ID int) (*ProcessReturnValue, error) {
+ task, err := list.GetTaskByID(ID)
+
+ if err != nil {
+ return nil, err
+ }
+
+ return task.processReturnValue, nil
+}
+
+// RunTaskInBackground creates task and runs it in background. It won't be run and an error
+// returned if there are running tasks which are using needed resources already.
+func (list *List) RunTaskInBackground(name string, resources []string, process Process) (Task, *ResourceConflictError) {
+ list.Lock()
+ defer list.Unlock()
+
+ tasks := list.usedResources.UsedBy(resources)
+ if len(tasks) > 0 {
+ conflictError := &ResourceConflictError{
+ Tasks: tasks,
+ Message: "Needed resources are used by other tasks.",
+ }
+ return Task{}, conflictError
+ }
+
+ list.idCounter++
+ wgTask := &sync.WaitGroup{}
+ task := NewTask(process, name, list.idCounter)
+
+ list.tasks = append(list.tasks, task)
+ list.wgTasks[task.ID] = wgTask
+ list.usedResources.MarkInUse(resources, task)
+
+ list.wg.Add(1)
+ wgTask.Add(1)
+
+ go func() {
+
+ list.Lock()
+ {
+ task.State = RUNNING
+ }
+ list.Unlock()
+
+ retValue, err := process(aptly.Progress(task.output), task.detail)
+
+ list.Lock()
+ {
+ task.processReturnValue = retValue
+ if err != nil {
+ task.output.Printf("Task failed with error: %v", err)
+ task.State = FAILED
+ } else {
+ task.output.Print("Task succeeded")
+ task.State = SUCCEEDED
+ }
+
+ list.usedResources.Free(resources)
+
+ wgTask.Done()
+ list.wg.Done()
+ }
+ list.Unlock()
+ }()
+
+ return *task, nil
+}
+
+// Clear removes finished tasks from list
+func (list *List) Clear() {
+ list.Lock()
+
+ var tasks []*Task
+ for _, task := range list.tasks {
+ if task.State == IDLE || task.State == RUNNING {
+ tasks = append(tasks, task)
+ }
+ }
+ list.tasks = tasks
+
+ list.Unlock()
+}
+
+// Wait waits till all tasks are processed
+func (list *List) Wait() {
+ list.wg.Wait()
+}
+
+// WaitForTaskByID waits for task with given id to be processed
+func (list *List) WaitForTaskByID(ID int) (Task, error) {
+ list.Lock()
+ wgTask, ok := list.wgTasks[ID]
+ list.Unlock()
+ if !ok {
+ return Task{}, fmt.Errorf("Could not find task with id %v", ID)
+ }
+
+ wgTask.Wait()
+ return list.GetTaskByID(ID)
+}
diff --git a/task/list_test.go b/task/list_test.go
new file mode 100644
index 00000000..297e97e2
--- /dev/null
+++ b/task/list_test.go
@@ -0,0 +1,53 @@
+package task
+
+import (
+ "errors"
+
+ "github.com/aptly-dev/aptly/aptly"
+
+ // need to import as check as otherwise List is redeclared
+ check "gopkg.in/check.v1"
+)
+
+type ListSuite struct{}
+
+var _ = check.Suite(&ListSuite{})
+
+func (s *ListSuite) TestList(c *check.C) {
+ list := NewList()
+ c.Assert(len(list.GetTasks()), check.Equals, 0)
+
+ task, err := list.RunTaskInBackground("Successful task", nil, func(out aptly.Progress, detail *Detail) (*ProcessReturnValue, error) {
+ return nil, nil
+ })
+ c.Assert(err, check.IsNil)
+ list.WaitForTaskByID(task.ID)
+
+ tasks := list.GetTasks()
+ c.Assert(len(tasks), check.Equals, 1)
+ task, _ = list.GetTaskByID(task.ID)
+ c.Check(task.State, check.Equals, SUCCEEDED)
+ output, _ := list.GetTaskOutputByID(task.ID)
+ c.Check(output, check.Equals, "Task succeeded")
+ detail, _ := list.GetTaskDetailByID(task.ID)
+ c.Check(detail, check.Equals, struct{}{})
+
+ task, err = list.RunTaskInBackground("Faulty task", nil, func(out aptly.Progress, detail *Detail) (*ProcessReturnValue, error) {
+ detail.Store("Details")
+ out.Printf("Test Progress\n")
+ return nil, errors.New("Task failed")
+ })
+ c.Assert(err, check.IsNil)
+ list.WaitForTaskByID(task.ID)
+
+ tasks = list.GetTasks()
+ c.Assert(len(tasks), check.Equals, 2)
+ task, _ = list.GetTaskByID(task.ID)
+ c.Check(task.State, check.Equals, FAILED)
+ output, _ = list.GetTaskOutputByID(task.ID)
+ c.Check(output, check.Equals, "Test Progress\nTask failed with error: Task failed")
+ detail, _ = list.GetTaskDetailByID(task.ID)
+ c.Check(detail, check.Equals, "Details")
+ _, deleteErr := list.DeleteTaskByID(task.ID)
+ c.Check(deleteErr, check.IsNil)
+}
diff --git a/task/output.go b/task/output.go
new file mode 100644
index 00000000..cd20ff73
--- /dev/null
+++ b/task/output.go
@@ -0,0 +1,127 @@
+package task
+
+import (
+ "bytes"
+ "fmt"
+ "sync"
+
+ "github.com/aptly-dev/aptly/aptly"
+)
+
+// Output represents a safe standard output of task
+// which is compatbile to AptlyProgress.
+type Output struct {
+ mu *sync.Mutex
+ output *bytes.Buffer
+}
+
+// PublishOutput specific output for publishing api
+type PublishOutput struct {
+ aptly.Progress
+ PublishDetail
+ barType *aptly.BarType
+}
+
+// NewOutput creates new output
+func NewOutput() *Output {
+ return &Output{mu: &sync.Mutex{}, output: &bytes.Buffer{}}
+}
+
+func (t *Output) String() string {
+ t.mu.Lock()
+ defer t.mu.Unlock()
+
+ return t.output.String()
+}
+
+// Write is used to determine how many bytes have been written
+// not needed in our case.
+func (t *Output) Write(p []byte) (n int, err error) {
+ return len(p), err
+}
+
+// WriteString writes string to output
+func (t *Output) WriteString(s string) (n int, err error) {
+ t.mu.Lock()
+ defer t.mu.Unlock()
+ return t.output.WriteString(s)
+}
+
+// Start is needed for progress compatibility
+func (t *Output) Start() {
+ // Not implemented
+}
+
+// Shutdown is needed for progress compatibility
+func (t *Output) Shutdown() {
+ // Not implemented
+}
+
+// Flush is needed for progress compatibility
+func (t *Output) Flush() {
+ // Not implemented
+}
+
+// InitBar is needed for progress compatibility
+func (t *Output) InitBar(count int64, isBytes bool, barType aptly.BarType) {
+ // Not implemented
+}
+
+// InitBar publish output specific
+func (t *PublishOutput) InitBar(count int64, isBytes bool, barType aptly.BarType) {
+ t.barType = &barType
+ if barType == aptly.BarPublishGeneratePackageFiles {
+ t.TotalNumberOfPackages = count
+ t.RemainingNumberOfPackages = count
+ t.Store(t)
+ }
+}
+
+// ShutdownBar is needed for progress compatibility
+func (t *Output) ShutdownBar() {
+ // Not implemented
+}
+
+// ShutdownBar publish output specific
+func (t *PublishOutput) ShutdownBar() {
+ t.barType = nil
+}
+
+// AddBar is needed for progress compatibility
+func (t *Output) AddBar(count int) {
+ // Not implemented
+}
+
+// AddBar publish output specific
+func (t *PublishOutput) AddBar(count int) {
+ if t.barType != nil && *t.barType == aptly.BarPublishGeneratePackageFiles {
+ t.RemainingNumberOfPackages--
+ t.Store(t)
+ }
+}
+
+// SetBar sets current position for progress bar
+func (t *Output) SetBar(count int) {
+ // Not implemented
+}
+
+// Printf does printf in a safe manner
+func (t *Output) Printf(msg string, a ...interface{}) {
+ t.WriteString(fmt.Sprintf(msg, a...))
+}
+
+// Print does printf in a safe manner
+func (t *Output) Print(msg string) {
+ 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...))
+}
+
+// PrintfStdErr does printf but in safe manner to output
+func (t *Output) PrintfStdErr(msg string, a ...interface{}) {
+ t.WriteString(msg)
+}
diff --git a/task/resources.go b/task/resources.go
new file mode 100644
index 00000000..296a7a19
--- /dev/null
+++ b/task/resources.go
@@ -0,0 +1,106 @@
+package task
+
+import (
+ "strings"
+)
+
+// AllLocalReposResourcesKey to be used as resource key when all local repos are needed
+const AllLocalReposResourcesKey = "__alllocalrepos__"
+
+// AllResourcesKey to be used as resource key when all resources are needed
+const AllResourcesKey = "__all__"
+
+// ResourceConflictError represents a list tasks
+// using conflicitng resources
+type ResourceConflictError struct {
+ Tasks []Task
+ Message string
+}
+
+func (e *ResourceConflictError) Error() string {
+ return e.Message
+}
+
+// ResourcesSet represents a set of task resources.
+// A resource is represented by its unique key
+type ResourcesSet struct {
+ set map[string]*Task
+}
+
+// NewResourcesSet creates new instance of resources set
+func NewResourcesSet() *ResourcesSet {
+ return &ResourcesSet{make(map[string]*Task)}
+}
+
+// MarkInUse given resources as used by given task
+func (r *ResourcesSet) MarkInUse(resources []string, task *Task) {
+ for _, resource := range resources {
+ r.set[resource] = task
+ }
+}
+
+// UsedBy checks whether one of given resources
+// is used by a task and if yes returns slice of such task
+func (r *ResourcesSet) UsedBy(resources []string) []Task {
+ var tasks []Task
+ var task *Task
+ var found bool
+
+ for _, resource := range resources {
+
+ if resource == AllLocalReposResourcesKey {
+ for taskResource, task := range r.set {
+ if strings.HasPrefix(taskResource, "L") {
+ tasks = appendTask(tasks, task)
+ }
+ }
+ } else if resource == AllResourcesKey {
+ for _, task := range r.set {
+ tasks = appendTask(tasks, task)
+ }
+
+ break
+ }
+
+ task, found = r.set[resource]
+ if found {
+ tasks = appendTask(tasks, task)
+ }
+ }
+
+ task, found = r.set[AllLocalReposResourcesKey]
+ if found {
+ tasks = appendTask(tasks, task)
+ }
+ task, found = r.set[AllResourcesKey]
+ if found {
+ tasks = appendTask(tasks, task)
+ }
+
+ return tasks
+}
+
+// appendTask only appends task to tasks slice if not already
+// on slice
+func appendTask(tasks []Task, task *Task) []Task {
+ needsAppending := true
+ for _, givenTask := range tasks {
+ if givenTask.ID == task.ID {
+ needsAppending = false
+ break
+ }
+ }
+
+ if needsAppending {
+ return append(tasks, *task)
+ }
+
+ return tasks
+}
+
+// Free removes given resources from dependency set
+func (r *ResourcesSet) Free(resources []string) {
+ for _, resource := range resources {
+ delete(r.set, resource)
+ }
+}
diff --git a/task/task.go b/task/task.go
new file mode 100644
index 00000000..54da0e3c
--- /dev/null
+++ b/task/task.go
@@ -0,0 +1,65 @@
+package task
+
+import (
+ "sync/atomic"
+
+ "github.com/aptly-dev/aptly/aptly"
+)
+
+// State task is in
+type State int
+
+// Detail represents custom task details
+type Detail struct {
+ atomic.Value
+}
+
+// PublishDetail represents publish task details
+type PublishDetail struct {
+ *Detail
+ TotalNumberOfPackages int64
+ RemainingNumberOfPackages int64
+}
+
+type ProcessReturnValue struct {
+ Code int
+ Value interface{}
+}
+
+// Process is a function implementing the actual task logic
+type Process func(out aptly.Progress, detail *Detail) (*ProcessReturnValue, error)
+
+const (
+ // IDLE when task is waiting
+ IDLE State = iota
+ // RUNNING when task is running
+ RUNNING
+ // SUCCEEDED when task is successfully finished
+ SUCCEEDED
+ // FAILED when task failed
+ FAILED
+)
+
+// Task represents as task in a queue encapsulates process code
+type Task struct {
+ output *Output
+ detail *Detail
+ process Process
+ processReturnValue *ProcessReturnValue
+ Name string
+ ID int
+ State State
+}
+
+// NewTask creates new task
+func NewTask(process Process, name string, ID int) *Task {
+ task := &Task{
+ output: NewOutput(),
+ detail: &Detail{},
+ process: process,
+ Name: name,
+ ID: ID,
+ State: IDLE,
+ }
+ return task
+}
diff --git a/task/task_test.go b/task/task_test.go
new file mode 100644
index 00000000..a51aa87e
--- /dev/null
+++ b/task/task_test.go
@@ -0,0 +1,12 @@
+package task
+
+import (
+ "testing"
+
+ check "gopkg.in/check.v1"
+)
+
+// Launch gocheck tests
+func Test(t *testing.T) {
+ check.TestingT(t)
+}
diff --git a/upload-artifacts.sh b/upload-artifacts.sh
old mode 100644
new mode 100755
index 74cbd2fc..3a47db3f
--- a/upload-artifacts.sh
+++ b/upload-artifacts.sh
@@ -7,16 +7,23 @@ packages=${builds}*.deb
folder=`mktemp -u tmp.XXXXXXXXXXXXXXX`
aptly_user="$APTLY_USER"
aptly_password="$APTLY_PASSWORD"
-aptly_api="https://internal.aptly.info"
+aptly_api="https://aptly-ops.aptly.info"
version=`make version`
+echo "Publishing version '$version' to $1..."
+
for file in $packages; do
echo "Uploading $file..."
curl -fsS -X POST -F "file=@$file" -u $aptly_user:$aptly_password ${aptly_api}/api/files/$folder
echo
done
-if [[ "$1" = "nightly" ]]; then
+if [ "$1" = "nightly" ]; then
+ if echo "$version" | grep -vq "+"; then
+ # skip nightly when on release tag
+ exit 0
+ fi
+
aptly_repository=aptly-nightly
aptly_published=s3:repo.aptly.info:./nightly
@@ -32,7 +39,7 @@ if [[ "$1" = "nightly" ]]; then
echo
fi
-if [[ "$1" = "release" ]]; then
+if [ "$1" = "release" ]; then
aptly_repository=aptly-release
aptly_snapshot=aptly-$version
aptly_published=s3:repo.aptly.info:./squeeze
diff --git a/utils/compress.go b/utils/compress.go
index aef8f186..a4521b7e 100644
--- a/utils/compress.go
+++ b/utils/compress.go
@@ -1,10 +1,11 @@
package utils
import (
- "compress/gzip"
"io"
"os"
"os/exec"
+
+ "github.com/klauspost/pgzip"
)
// CompressFile compresses file specified by source to .gz & .bz2
@@ -19,7 +20,7 @@ func CompressFile(source *os.File, onlyGzip bool) error {
}
defer gzFile.Close()
- gzWriter := gzip.NewWriter(gzFile)
+ gzWriter := pgzip.NewWriter(gzFile)
defer gzWriter.Close()
source.Seek(0, 0)
diff --git a/utils/config.go b/utils/config.go
index 01b792ce..2b60d6c6 100644
--- a/utils/config.go
+++ b/utils/config.go
@@ -11,6 +11,9 @@ type ConfigStructure struct { // nolint: maligned
RootDir string `json:"rootDir"`
DownloadConcurrency int `json:"downloadConcurrency"`
DownloadLimit int64 `json:"downloadSpeedLimit"`
+ DownloadRetries int `json:"downloadRetries"`
+ Downloader string `json:"downloader"`
+ DatabaseOpenAttempts int `json:"databaseOpenAttempts"`
Architectures []string `json:"architectures"`
DepFollowSuggests bool `json:"dependencyFollowSuggests"`
DepFollowRecommends bool `json:"dependencyFollowRecommends"`
@@ -25,9 +28,13 @@ type ConfigStructure struct { // nolint: maligned
PpaDistributorID string `json:"ppaDistributorID"`
PpaCodename string `json:"ppaCodename"`
SkipContentsPublishing bool `json:"skipContentsPublishing"`
+ SkipBz2Publishing bool `json:"skipBz2Publishing"`
FileSystemPublishRoots map[string]FileSystemPublishRoot `json:"FileSystemPublishEndpoints"`
S3PublishRoots map[string]S3PublishRoot `json:"S3PublishEndpoints"`
SwiftPublishRoots map[string]SwiftPublishRoot `json:"SwiftPublishEndpoints"`
+ AzurePublishRoots map[string]AzurePublishRoot `json:"AzurePublishEndpoints"`
+ AsyncAPI bool `json:"AsyncAPI"`
+ EnableMetricsEndpoint bool `json:"enableMetricsEndpoint"`
}
// FileSystemPublishRoot describes single filesystem publishing entry point
@@ -70,11 +77,22 @@ type SwiftPublishRoot struct {
Container string `json:"container"`
}
+// AzurePublishRoot describes single Azure publishing entry point
+type AzurePublishRoot struct {
+ AccountName string `json:"accountName"`
+ AccountKey string `json:"accountKey"`
+ Container string `json:"container"`
+ Prefix string `json:"prefix"`
+ Endpoint string `json:"endpoint"`
+}
+
// Config is configuration for aptly, shared by all modules
var Config = ConfigStructure{
RootDir: filepath.Join(os.Getenv("HOME"), ".aptly"),
DownloadConcurrency: 4,
DownloadLimit: 0,
+ Downloader: "default",
+ DatabaseOpenAttempts: -1,
Architectures: []string{},
DepFollowSuggests: false,
DepFollowRecommends: false,
@@ -90,6 +108,9 @@ var Config = ConfigStructure{
FileSystemPublishRoots: map[string]FileSystemPublishRoot{},
S3PublishRoots: map[string]S3PublishRoot{},
SwiftPublishRoots: map[string]SwiftPublishRoot{},
+ AzurePublishRoots: map[string]AzurePublishRoot{},
+ AsyncAPI: false,
+ EnableMetricsEndpoint: false,
}
// LoadConfig loads configuration from json file
diff --git a/utils/config_test.go b/utils/config_test.go
index 1cc4ba8c..3dc523c4 100644
--- a/utils/config_test.go
+++ b/utils/config_test.go
@@ -23,6 +23,7 @@ func (s *ConfigSuite) TestLoadConfig(c *C) {
c.Assert(err, IsNil)
c.Check(s.config.RootDir, Equals, "/opt/aptly/")
c.Check(s.config.DownloadConcurrency, Equals, 33)
+ c.Check(s.config.DatabaseOpenAttempts, Equals, 33)
}
func (s *ConfigSuite) TestSaveConfig(c *C) {
@@ -30,6 +31,7 @@ func (s *ConfigSuite) TestSaveConfig(c *C) {
s.config.RootDir = "/tmp/aptly"
s.config.DownloadConcurrency = 5
+ s.config.DatabaseOpenAttempts = 5
s.config.GpgProvider = "gpg"
s.config.FileSystemPublishRoots = map[string]FileSystemPublishRoot{"test": {
@@ -42,6 +44,9 @@ func (s *ConfigSuite) TestSaveConfig(c *C) {
s.config.SwiftPublishRoots = map[string]SwiftPublishRoot{"test": {
Container: "repo"}}
+ s.config.AzurePublishRoots = map[string]AzurePublishRoot{"test": {
+ Container: "repo"}}
+
err := SaveConfig(configname, &s.config)
c.Assert(err, IsNil)
@@ -57,6 +62,9 @@ func (s *ConfigSuite) TestSaveConfig(c *C) {
" \"rootDir\": \"/tmp/aptly\",\n"+
" \"downloadConcurrency\": 5,\n"+
" \"downloadSpeedLimit\": 0,\n"+
+ " \"downloadRetries\": 0,\n"+
+ " \"downloader\": \"\",\n"+
+ " \"databaseOpenAttempts\": 5,\n"+
" \"architectures\": null,\n"+
" \"dependencyFollowSuggests\": false,\n"+
" \"dependencyFollowRecommends\": false,\n"+
@@ -71,6 +79,7 @@ func (s *ConfigSuite) TestSaveConfig(c *C) {
" \"ppaDistributorID\": \"\",\n"+
" \"ppaCodename\": \"\",\n"+
" \"skipContentsPublishing\": false,\n"+
+ " \"skipBz2Publishing\": false,\n"+
" \"FileSystemPublishEndpoints\": {\n"+
" \"test\": {\n"+
" \"rootDir\": \"/opt/aptly-publish\",\n"+
@@ -110,8 +119,19 @@ func (s *ConfigSuite) TestSaveConfig(c *C) {
" \"prefix\": \"\",\n"+
" \"container\": \"repo\"\n"+
" }\n"+
- " }\n"+
+ " },\n"+
+ " \"AzurePublishEndpoints\": {\n"+
+ " \"test\": {\n"+
+ " \"accountName\": \"\",\n"+
+ " \"accountKey\": \"\",\n"+
+ " \"container\": \"repo\",\n"+
+ " \"prefix\": \"\",\n"+
+ " \"endpoint\": \"\"\n"+
+ " }\n"+
+ " },\n"+
+ " \"AsyncAPI\": false,\n"+
+ " \"enableMetricsEndpoint\": false\n"+
"}")
}
-const configFile = `{"rootDir": "/opt/aptly/", "downloadConcurrency": 33}`
+const configFile = `{"rootDir": "/opt/aptly/", "downloadConcurrency": 33, "databaseOpenAttempts": 33}`