diff options
-rw-r--r-- | CMake/FindZstd.cmake | 25 | ||||
-rw-r--r-- | CMake/config.h.in | 3 | ||||
-rw-r--r-- | CMakeLists.txt | 6 | ||||
-rw-r--r-- | apt-inst/deb/debfile.cc | 8 | ||||
-rw-r--r-- | apt-pkg/CMakeLists.txt | 2 | ||||
-rw-r--r-- | apt-pkg/aptconfiguration.cc | 8 | ||||
-rw-r--r-- | apt-pkg/contrib/fileutl.cc | 220 | ||||
-rw-r--r-- | apt-pkg/contrib/fileutl.h | 16 | ||||
-rw-r--r-- | apt-pkg/pkgsystem.cc | 2 | ||||
-rw-r--r-- | debian/changelog | 9 | ||||
-rw-r--r-- | debian/control | 3 | ||||
-rw-r--r-- | doc/apt-get.8.xml | 2 | ||||
-rw-r--r-- | doc/apt-transport-https.1.xml | 2 | ||||
-rw-r--r-- | doc/apt-verbatim.ent | 6 | ||||
-rw-r--r-- | doc/examples/configure-index | 1 | ||||
-rw-r--r-- | doc/po/apt-doc.pot | 4 | ||||
-rw-r--r-- | doc/po/de.po | 6 | ||||
-rw-r--r-- | doc/po/es.po | 4 | ||||
-rw-r--r-- | doc/po/fr.po | 4 | ||||
-rw-r--r-- | doc/po/it.po | 4 | ||||
-rw-r--r-- | doc/po/ja.po | 4 | ||||
-rw-r--r-- | doc/po/nl.po | 6 | ||||
-rw-r--r-- | doc/po/pl.po | 4 | ||||
-rw-r--r-- | doc/po/pt.po | 4 | ||||
-rw-r--r-- | doc/po/pt_BR.po | 4 | ||||
-rw-r--r-- | doc/sources.list.5.xml | 11 | ||||
-rwxr-xr-x | prepare-release | 6 | ||||
-rw-r--r-- | test/integration/framework | 2 | ||||
-rw-r--r-- | test/libapt/fileutl_test.cc | 4 |
29 files changed, 340 insertions, 40 deletions
diff --git a/CMake/FindZstd.cmake b/CMake/FindZstd.cmake new file mode 100644 index 000000000..68118049b --- /dev/null +++ b/CMake/FindZstd.cmake @@ -0,0 +1,25 @@ +# - Try to find ZSTD +# Once done, this will define +# +# ZSTD_FOUND - system has ZSTD +# ZSTD_INCLUDE_DIRS - the ZSTD include directories +# ZSTD_LIBRARIES - the ZSTD library +find_package(PkgConfig) + +pkg_check_modules(ZSTD_PKGCONF libzstd) + +find_path(ZSTD_INCLUDE_DIRS + NAMES zstd.h + PATHS ${ZSTD_PKGCONF_INCLUDE_DIRS} +) + + +find_library(ZSTD_LIBRARIES + NAMES zstd + PATHS ${ZSTD_PKGCONF_LIBRARY_DIRS} +) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(ZSTD DEFAULT_MSG ZSTD_INCLUDE_DIRS ZSTD_LIBRARIES) + +mark_as_advanced(ZSTD_INCLUDE_DIRS ZSTD_LIBRARIES) diff --git a/CMake/config.h.in b/CMake/config.h.in index cfaa14ed1..bd0da8649 100644 --- a/CMake/config.h.in +++ b/CMake/config.h.in @@ -17,6 +17,9 @@ /* Define if we have the lz4 library for lz4 */ #cmakedefine HAVE_LZ4 +/* Define if we have the zstd library for zst */ +#cmakedefine HAVE_ZSTD + /* Define if we have the udev library */ #cmakedefine HAVE_UDEV diff --git a/CMakeLists.txt b/CMakeLists.txt index b723b0ead..a79ce99d4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -103,6 +103,12 @@ if (LZ4_FOUND) set(HAVE_LZ4 1) endif() +find_package(Zstd REQUIRED) +if (ZSTD_FOUND) + set(HAVE_ZSTD 1) +endif() + + find_package(Udev) if (UDEV_FOUND) set(HAVE_UDEV 1) diff --git a/apt-inst/deb/debfile.cc b/apt-inst/deb/debfile.cc index 8eef446bb..6f7cf5691 100644 --- a/apt-inst/deb/debfile.cc +++ b/apt-inst/deb/debfile.cc @@ -50,7 +50,9 @@ debDebFile::debDebFile(FileFd &File) : File(File), AR(File) if (!CheckMember("control.tar") && !CheckMember("control.tar.gz") && - !CheckMember("control.tar.xz")) { + !CheckMember("control.tar.xz") && + !CheckMember("control.tar.zst")) + { _error->Error(_("This is not a valid DEB archive, missing '%s' member"), "control.tar"); return; } @@ -59,7 +61,9 @@ debDebFile::debDebFile(FileFd &File) : File(File), AR(File) !CheckMember("data.tar.gz") && !CheckMember("data.tar.bz2") && !CheckMember("data.tar.lzma") && - !CheckMember("data.tar.xz")) { + !CheckMember("data.tar.xz") && + !CheckMember("data.tar.zst")) + { _error->Error(_("This is not a valid DEB archive, missing '%s' member"), "data.tar"); return; } diff --git a/apt-pkg/CMakeLists.txt b/apt-pkg/CMakeLists.txt index 2f5ad3200..fdf27f92d 100644 --- a/apt-pkg/CMakeLists.txt +++ b/apt-pkg/CMakeLists.txt @@ -44,6 +44,7 @@ target_include_directories(apt-pkg ${BZIP2_INCLUDE_DIR} ${LZMA_INCLUDE_DIRS} ${LZ4_INCLUDE_DIRS} + ${ZSTD_INCLUDE_DIRS} $<$<BOOL:${UDEV_FOUND}>:${UDEV_INCLUDE_DIRS}> ${ICONV_INCLUDE_DIRS} ) @@ -55,6 +56,7 @@ target_link_libraries(apt-pkg ${BZIP2_LIBRARIES} ${LZMA_LIBRARIES} ${LZ4_LIBRARIES} + ${ZSTD_LIBRARIES} $<$<BOOL:${UDEV_FOUND}>:${UDEV_LIBRARIES}> ${ICONV_LIBRARIES} ) diff --git a/apt-pkg/aptconfiguration.cc b/apt-pkg/aptconfiguration.cc index 0421ea949..61e53ec3a 100644 --- a/apt-pkg/aptconfiguration.cc +++ b/apt-pkg/aptconfiguration.cc @@ -39,6 +39,7 @@ static void setDefaultConfigurationForCompressors() { _config->CndSet("Dir::Bin::bzip2", "/bin/bzip2"); _config->CndSet("Dir::Bin::xz", "/usr/bin/xz"); _config->CndSet("Dir::Bin::lz4", "/usr/bin/lz4"); + _config->CndSet("Dir::Bin::zstd", "/usr/bin/zstd"); if (FileExists(_config->Find("Dir::Bin::xz")) == true) { _config->Set("Dir::Bin::lzma", _config->Find("Dir::Bin::xz")); _config->Set("APT::Compressor::lzma::Binary", "xz"); @@ -67,6 +68,7 @@ static void setDefaultConfigurationForCompressors() { _config->CndSet("Acquire::CompressionTypes::lzma","lzma"); _config->CndSet("Acquire::CompressionTypes::gz","gzip"); _config->CndSet("Acquire::CompressionTypes::lz4","lz4"); + _config->CndSet("Acquire::CompressionTypes::zst", "zstd"); } /*}}}*/ // getCompressionTypes - Return Vector of usable compressiontypes /*{{{*/ @@ -369,6 +371,12 @@ const Configuration::getCompressors(bool const Cached) { # define APT_ADD_COMPRESSOR(NAME, EXT, BINARY, ARG, DEARG, COST) \ { CompressorsDone.push_back(NAME); compressors.emplace_back(NAME, EXT, BINARY, ARG, DEARG, COST); } APT_ADD_COMPRESSOR(".", "", "", nullptr, nullptr, 0) + if (_config->Exists("Dir::Bin::zstd") == false || FileExists(_config->Find("Dir::Bin::zstd")) == true) + APT_ADD_COMPRESSOR("zstd", ".zst", "zstd", "-19", "-d", 60) +#ifdef HAVE_ZSTD + else + APT_ADD_COMPRESSOR("zstd", ".zst", "false", nullptr, nullptr, 60) +#endif if (_config->Exists("Dir::Bin::lz4") == false || FileExists(_config->Find("Dir::Bin::lz4")) == true) APT_ADD_COMPRESSOR("lz4",".lz4","lz4","-1","-d",50) #ifdef HAVE_LZ4 diff --git a/apt-pkg/contrib/fileutl.cc b/apt-pkg/contrib/fileutl.cc index f8f7a478c..85d7b36c7 100644 --- a/apt-pkg/contrib/fileutl.cc +++ b/apt-pkg/contrib/fileutl.cc @@ -67,6 +67,9 @@ #ifdef HAVE_LZ4 #include <lz4frame.h> #endif +#ifdef HAVE_ZSTD +#include <zstd.h> +#endif #include <endian.h> #include <stdint.h> @@ -1716,6 +1719,218 @@ public: #endif }; /*}}}*/ + +class APT_HIDDEN ZstdFileFdPrivate : public FileFdPrivate +{ /*{{{*/ +#ifdef HAVE_ZSTD + ZSTD_DStream *dctx; + ZSTD_CStream *cctx; + size_t res; + FileFd backend; + simple_buffer zstd_buffer; + // Count of bytes that the decompressor expects to read next, or buffer size. + size_t next_to_load = APT_BUFFER_SIZE; + + public: + virtual bool InternalOpen(int const iFd, unsigned int const Mode) APT_OVERRIDE + { + if ((Mode & FileFd::ReadWrite) == FileFd::ReadWrite) + return _error->Error("zstd only supports write or read mode"); + + if ((Mode & FileFd::WriteOnly) == FileFd::WriteOnly) + { + cctx = ZSTD_createCStream(); + res = ZSTD_initCStream(cctx, findLevel(compressor.CompressArgs)); + zstd_buffer.reset(APT_BUFFER_SIZE); + } + else + { + dctx = ZSTD_createDStream(); + res = ZSTD_initDStream(dctx); + zstd_buffer.reset(APT_BUFFER_SIZE); + } + + filefd->Flags |= FileFd::Compressed; + + if (ZSTD_isError(res)) + return false; + + unsigned int flags = (Mode & (FileFd::WriteOnly | FileFd::ReadOnly)); + if (backend.OpenDescriptor(iFd, flags, FileFd::None, true) == false) + return false; + + return true; + } + virtual ssize_t InternalUnbufferedRead(void *const To, unsigned long long const Size) APT_OVERRIDE + { + /* Keep reading as long as the compressor still wants to read */ + while (true) + { + // Fill compressed buffer; + if (zstd_buffer.empty()) + { + unsigned long long read; + /* Reset - if LZ4 decompressor wants to read more, allocate more */ + zstd_buffer.reset(next_to_load); + if (backend.Read(zstd_buffer.getend(), zstd_buffer.free(), &read) == false) + return -1; + zstd_buffer.bufferend += read; + + if (read == 0) + { + /* Expected EOF */ + if (next_to_load == 0) + return 0; + + res = -1; + return filefd->FileFdError("ZSTD: %s %s", + filefd->FileName.c_str(), + _("Unexpected end of file")), + -1; + } + } + // Drain compressed buffer as far as possible. + ZSTD_inBuffer in = { + .src = zstd_buffer.get(), + .size = zstd_buffer.size(), + .pos = 0, + }; + ZSTD_outBuffer out = { + .dst = To, + .size = Size, + .pos = 0, + }; + + next_to_load = res = ZSTD_decompressStream(dctx, &out, &in); + + if (res == 0) + { + res = ZSTD_initDStream(dctx); + } + + if (ZSTD_isError(res)) + return -1; + + zstd_buffer.bufferstart += in.pos; + + if (out.pos != 0) + return out.pos; + } + + return 0; + } + virtual bool InternalReadError() APT_OVERRIDE + { + char const *const errmsg = ZSTD_getErrorName(res); + + return filefd->FileFdError("ZSTD: %s %s (%zu: %s)", filefd->FileName.c_str(), _("Read error"), res, errmsg); + } + virtual ssize_t InternalWrite(void const *const From, unsigned long long const Size) APT_OVERRIDE + { + // Drain compressed buffer as far as possible. + ZSTD_outBuffer out = { + .dst = zstd_buffer.buffer, + .size = zstd_buffer.buffersize_max, + .pos = 0, + }; + ZSTD_inBuffer in = { + .src = From, + .size = Size, + .pos = 0, + }; + + res = ZSTD_compressStream(cctx, &out, &in); + + if (ZSTD_isError(res) || backend.Write(zstd_buffer.buffer, out.pos) == false) + return -1; + + return in.pos; + } + + virtual bool InternalWriteError() APT_OVERRIDE + { + char const *const errmsg = ZSTD_getErrorName(res); + + return filefd->FileFdError("ZSTD: %s %s (%zu: %s)", filefd->FileName.c_str(), _("Write error"), res, errmsg); + } + virtual bool InternalStream() const APT_OVERRIDE { return true; } + + virtual bool InternalFlush() APT_OVERRIDE + { + return backend.Flush(); + } + + virtual bool InternalClose(std::string const &) APT_OVERRIDE + { + /* Reset variables */ + res = 0; + next_to_load = APT_BUFFER_SIZE; + + if (cctx != nullptr) + { + if (filefd->Failed() == false) + { + do + { + ZSTD_outBuffer out = { + .dst = zstd_buffer.buffer, + .size = zstd_buffer.buffersize_max, + .pos = 0, + }; + res = ZSTD_endStream(cctx, &out); + if (ZSTD_isError(res) || backend.Write(zstd_buffer.buffer, out.pos) == false) + return false; + } while (res > 0); + + if (!backend.Flush()) + return false; + } + if (!backend.Close()) + return false; + + res = ZSTD_freeCStream(cctx); + cctx = nullptr; + } + + if (dctx != nullptr) + { + res = ZSTD_freeDStream(dctx); + dctx = nullptr; + } + if (backend.IsOpen()) + { + backend.Close(); + filefd->iFd = -1; + } + + return ZSTD_isError(res) == false; + } + + static uint32_t findLevel(std::vector<std::string> const &Args) + { + for (auto a = Args.rbegin(); a != Args.rend(); ++a) + { + if (a->size() >= 2 && (*a)[0] == '-' && (*a)[1] != '-') + { + auto const level = a->substr(1); + auto const notANumber = level.find_first_not_of("0123456789"); + if (notANumber != std::string::npos) + continue; + + return (uint32_t)stoi(level); + } + } + return 19; + } + + explicit ZstdFileFdPrivate(FileFd *const filefd) : FileFdPrivate(filefd), dctx(nullptr), cctx(nullptr) {} + virtual ~ZstdFileFdPrivate() + { + InternalClose(""); + } +#endif +}; + /*}}}*/ class APT_HIDDEN LzmaFileFdPrivate: public FileFdPrivate { /*{{{*/ #ifdef HAVE_LZMA struct LZMAFILE { @@ -2212,6 +2427,7 @@ bool FileFd::Open(string FileName,unsigned int const Mode,CompressMode Compress, case Lzma: name = "lzma"; break; case Xz: name = "xz"; break; case Lz4: name = "lz4"; break; + case Zstd: name = "zstd"; break; case Auto: case Extension: // Unreachable @@ -2329,6 +2545,7 @@ bool FileFd::OpenDescriptor(int Fd, unsigned int const Mode, CompressMode Compre case Lzma: name = "lzma"; break; case Xz: name = "xz"; break; case Lz4: name = "lz4"; break; + case Zstd: name = "zstd"; break; case Auto: case Extension: if (AutoClose == true && Fd != -1) @@ -2393,6 +2610,9 @@ bool FileFd::OpenInternDescriptor(unsigned int const Mode, APT::Configuration::C #ifdef HAVE_LZ4 APT_COMPRESS_INIT("lz4", Lz4FileFdPrivate); #endif +#ifdef HAVE_ZSTD + APT_COMPRESS_INIT("zstd", ZstdFileFdPrivate); +#endif #undef APT_COMPRESS_INIT else if (compressor.Name == "." || compressor.Binary.empty() == true) d = new DirectFileFdPrivate(this); diff --git a/apt-pkg/contrib/fileutl.h b/apt-pkg/contrib/fileutl.h index 699b8b802..6249b7c16 100644 --- a/apt-pkg/contrib/fileutl.h +++ b/apt-pkg/contrib/fileutl.h @@ -46,6 +46,7 @@ class FileFd friend class Bz2FileFdPrivate; friend class LzmaFileFdPrivate; friend class Lz4FileFdPrivate; + friend class ZstdFileFdPrivate; friend class DirectFileFdPrivate; friend class PipedFileFdPrivate; protected: @@ -76,8 +77,19 @@ class FileFd ReadOnlyGzip, WriteAtomic = ReadWrite | Create | Atomic }; - enum CompressMode { Auto = 'A', None = 'N', Extension = 'E', Gzip = 'G', Bzip2 = 'B', Lzma = 'L', Xz = 'X', Lz4='4' }; - + enum CompressMode + { + Auto = 'A', + None = 'N', + Extension = 'E', + Gzip = 'G', + Bzip2 = 'B', + Lzma = 'L', + Xz = 'X', + Lz4 = '4', + Zstd = 'Z' + }; + inline bool Read(void *To,unsigned long long Size,bool AllowEof) { unsigned long long Jnk; diff --git a/apt-pkg/pkgsystem.cc b/apt-pkg/pkgsystem.cc index aa94418c6..5d74e882b 100644 --- a/apt-pkg/pkgsystem.cc +++ b/apt-pkg/pkgsystem.cc @@ -72,7 +72,7 @@ std::vector<std::string> pkgSystem::ArchitecturesSupported() const /*{{{*/ return {}; } /*}}}*/ -// pkgSystem::Set/GetVersionMapping - for internal/external communcation/*{{{*/ +// pkgSystem::Set/GetVersionMapping - for internal/external communication/*{{{*/ void pkgSystem::SetVersionMapping(map_id_t const in, map_id_t const out) { if (in == out) diff --git a/debian/changelog b/debian/changelog index 28382e2f0..3f0474b55 100644 --- a/debian/changelog +++ b/debian/changelog @@ -5,24 +5,15 @@ apt (1.6~beta1) unstable; urgency=medium * add apt-helper drop-privs command… * restore gcc visibility=hidden for apt-private * ensure correct file permissions for auxfiles - * allow the apt/lists/auxfiles/ directory to be missing (Closes: 887624) - * add apt-helper drop-privs command… - * restore gcc visibility=hidden for apt-private - * ensure correct file permissions for auxfiles [ Julian Andres Klode ] * indexcopy: Copy uncompressed indices from cdrom again (LP: #1746807) * Work around test-method-mirror failure by setting umask at start * Check that Date of Release file is not in the future * apt.conf.autoremove: Add linux-cloud-tools to list (LP: #1698159) - * indexcopy: Copy uncompressed indices from cdrom again (LP: #1746807) - * Work around test-method-mirror failure by setting umask at start - * Check that Date of Release file is not in the future - * apt.conf.autoremove: Add linux-cloud-tools to list (LP: #1698159) [ Chris Leick ] * German manpage translation update - * German manpage translation update -- Julian Andres Klode <jak@debian.org> Mon, 26 Feb 2018 13:14:13 +0100 diff --git a/debian/control b/debian/control index a9063eb13..333150ff8 100644 --- a/debian/control +++ b/debian/control @@ -23,6 +23,7 @@ Build-Depends: cmake (>= 3.4), liblzma-dev, libseccomp-dev [amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64el s390x hppa powerpc powerpcspe ppc64 x32], libudev-dev [linux-any], + libzstd-dev (>= 1.0), pkg-config, po4a (>= 0.34-2), xsltproc, @@ -67,6 +68,7 @@ Description: commandline package manager Package: libapt-pkg5.0 Architecture: any Multi-Arch: same +Priority: optional Pre-Depends: ${misc:Pre-Depends} Depends: ${misc:Depends}, ${shlibs:Depends} Breaks: appstream (<< 0.9.0-3~), apt (<< 1.1~exp14), libapt-inst1.5 (<< 0.9.9~) @@ -92,6 +94,7 @@ Description: package management runtime library Package: libapt-inst2.0 Architecture: any Multi-Arch: same +Priority: optional Pre-Depends: ${misc:Pre-Depends} Depends: ${misc:Depends}, ${shlibs:Depends} Section: libs diff --git a/doc/apt-get.8.xml b/doc/apt-get.8.xml index 520cfc126..3c1e90744 100644 --- a/doc/apt-get.8.xml +++ b/doc/apt-get.8.xml @@ -593,7 +593,7 @@ <literal>label</literal>, <literal>codename</literal>, <literal>suite</literal>, <literal>version</literal> and <literal>defaultpin</literal>. See also &apt-preferences;. - Configuration Item: <literal>Acquire::AllowReleaseInfoChanges</literal>.</para></listitem> + Configuration Item: <literal>Acquire::AllowReleaseInfoChange</literal>.</para></listitem> </varlistentry> <varlistentry><term><option>--show-progress</option></term> diff --git a/doc/apt-transport-https.1.xml b/doc/apt-transport-https.1.xml index 1bad8578b..1327b0a16 100644 --- a/doc/apt-transport-https.1.xml +++ b/doc/apt-transport-https.1.xml @@ -38,7 +38,7 @@ a user but used by APT tools based on user configuration.</para> which, as indicated by the appended S, is wrapped in an encrypted layer known as Transport Layer Security (TLS) to provide end-to-end encryption. A sufficiently capable attacker can still observe the communication partners -and deeper analyse of the encrypted communcation might still reveal important details. +and deeper analyse of the encrypted communication might still reveal important details. An overview over available alternative transport methods is given in &sources-list;.</para> </refsect1> diff --git a/doc/apt-verbatim.ent b/doc/apt-verbatim.ent index d7817cb79..a8aa0bf5e 100644 --- a/doc/apt-verbatim.ent +++ b/doc/apt-verbatim.ent @@ -93,6 +93,12 @@ </citerefentry>" > +<!ENTITY apt-transport-mirror "<citerefentry> + <refentrytitle><command>apt-transport-mirror</command></refentrytitle> + <manvolnum>1</manvolnum> + </citerefentry>" +> + <!ENTITY sources-list "<citerefentry> <refentrytitle><filename>sources.list</filename></refentrytitle> <manvolnum>5</manvolnum> diff --git a/doc/examples/configure-index b/doc/examples/configure-index index 3763aa900..4612f362e 100644 --- a/doc/examples/configure-index +++ b/doc/examples/configure-index @@ -416,6 +416,7 @@ Dir "<DIR>" dpkg-source "<PROGRAM_PATH>"; dpkg-buildpackage "/usr/bin/dpkg-buildpackage"; lz4 "<PROGRAM_PATH>"; + zstd "<PROGRAM_PATH>"; gzip "<PROGRAM_PATH>"; xz "<PROGRAM_PATH>"; bzip2 "<PROGRAM_PATH>"; diff --git a/doc/po/apt-doc.pot b/doc/po/apt-doc.pot index 036766a8c..2a9af09f4 100644 --- a/doc/po/apt-doc.pot +++ b/doc/po/apt-doc.pot @@ -1438,7 +1438,7 @@ msgid "" "<literal>codename</literal>, <literal>suite</literal>, " "<literal>version</literal> and <literal>defaultpin</literal>. See also " "&apt-preferences;. Configuration Item: " -"<literal>Acquire::AllowReleaseInfoChanges</literal>." +"<literal>Acquire::AllowReleaseInfoChange</literal>." msgstr "" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> @@ -7235,7 +7235,7 @@ msgid "" "&apt-transport-http;), which, as indicated by the appended S, is wrapped in " "an encrypted layer known as Transport Layer Security (TLS) to provide " "end-to-end encryption. A sufficiently capable attacker can still observe " -"the communication partners and deeper analyse of the encrypted communcation " +"the communication partners and deeper analyse of the encrypted communication " "might still reveal important details. An overview over available " "alternative transport methods is given in &sources-list;." msgstr "" diff --git a/doc/po/de.po b/doc/po/de.po index 35e1a6de1..ce9664693 100644 --- a/doc/po/de.po +++ b/doc/po/de.po @@ -2010,7 +2010,7 @@ msgid "" "certain fields like <literal>origin</literal>, <literal>label</literal>, " "<literal>codename</literal>, <literal>suite</literal>, <literal>version</" "literal> and <literal>defaultpin</literal>. See also &apt-preferences;. " -"Configuration Item: <literal>Acquire::AllowReleaseInfoChanges</literal>." +"Configuration Item: <literal>Acquire::AllowReleaseInfoChange</literal>." msgstr "" "Es existieren Spezialoptionen (<literal>--allow-releaseinfo-change-</" "literal><replaceable>Feld</replaceable>), um Änderungen nur für bestimmte " @@ -2018,7 +2018,7 @@ msgstr "" "<literal>codename</literal>, <literal>suite</literal>, <literal>version</" "literal> und <literal>defaultpin</literal> zu erlauben. Siehe auch &apt-" "preferences;. Konfigurationselement: <literal>Acquire::" -"AllowReleaseInfoChanges</literal>." +"AllowReleaseInfoChange</literal>." #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt-get.8.xml @@ -10349,7 +10349,7 @@ msgid "" "http;), which, as indicated by the appended S, is wrapped in an encrypted " "layer known as Transport Layer Security (TLS) to provide end-to-end " "encryption. A sufficiently capable attacker can still observe the " -"communication partners and deeper analyse of the encrypted communcation " +"communication partners and deeper analyse of the encrypted communication " "might still reveal important details. An overview over available " "alternative transport methods is given in &sources-list;." msgstr "" diff --git a/doc/po/es.po b/doc/po/es.po index 1ade7d522..73028c8cf 100644 --- a/doc/po/es.po +++ b/doc/po/es.po @@ -2075,7 +2075,7 @@ msgid "" "certain fields like <literal>origin</literal>, <literal>label</literal>, " "<literal>codename</literal>, <literal>suite</literal>, <literal>version</" "literal> and <literal>defaultpin</literal>. See also &apt-preferences;. " -"Configuration Item: <literal>Acquire::AllowReleaseInfoChanges</literal>." +"Configuration Item: <literal>Acquire::AllowReleaseInfoChange</literal>." msgstr "" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> @@ -10082,7 +10082,7 @@ msgid "" "http;), which, as indicated by the appended S, is wrapped in an encrypted " "layer known as Transport Layer Security (TLS) to provide end-to-end " "encryption. A sufficiently capable attacker can still observe the " -"communication partners and deeper analyse of the encrypted communcation " +"communication partners and deeper analyse of the encrypted communication " "might still reveal important details. An overview over available " "alternative transport methods is given in &sources-list;." msgstr "" diff --git a/doc/po/fr.po b/doc/po/fr.po index b7703c807..867391b53 100644 --- a/doc/po/fr.po +++ b/doc/po/fr.po @@ -2006,7 +2006,7 @@ msgid "" "certain fields like <literal>origin</literal>, <literal>label</literal>, " "<literal>codename</literal>, <literal>suite</literal>, <literal>version</" "literal> and <literal>defaultpin</literal>. See also &apt-preferences;. " -"Configuration Item: <literal>Acquire::AllowReleaseInfoChanges</literal>." +"Configuration Item: <literal>Acquire::AllowReleaseInfoChange</literal>." msgstr "" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> @@ -10254,7 +10254,7 @@ msgid "" "http;), which, as indicated by the appended S, is wrapped in an encrypted " "layer known as Transport Layer Security (TLS) to provide end-to-end " "encryption. A sufficiently capable attacker can still observe the " -"communication partners and deeper analyse of the encrypted communcation " +"communication partners and deeper analyse of the encrypted communication " "might still reveal important details. An overview over available " "alternative transport methods is given in &sources-list;." msgstr "" diff --git a/doc/po/it.po b/doc/po/it.po index 42c9ab3f4..3ba6c6756 100644 --- a/doc/po/it.po +++ b/doc/po/it.po @@ -2044,7 +2044,7 @@ msgid "" "certain fields like <literal>origin</literal>, <literal>label</literal>, " "<literal>codename</literal>, <literal>suite</literal>, <literal>version</" "literal> and <literal>defaultpin</literal>. See also &apt-preferences;. " -"Configuration Item: <literal>Acquire::AllowReleaseInfoChanges</literal>." +"Configuration Item: <literal>Acquire::AllowReleaseInfoChange</literal>." msgstr "" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> @@ -10239,7 +10239,7 @@ msgid "" "http;), which, as indicated by the appended S, is wrapped in an encrypted " "layer known as Transport Layer Security (TLS) to provide end-to-end " "encryption. A sufficiently capable attacker can still observe the " -"communication partners and deeper analyse of the encrypted communcation " +"communication partners and deeper analyse of the encrypted communication " "might still reveal important details. An overview over available " "alternative transport methods is given in &sources-list;." msgstr "" diff --git a/doc/po/ja.po b/doc/po/ja.po index 3666e8677..70ab3f40d 100644 --- a/doc/po/ja.po +++ b/doc/po/ja.po @@ -1979,7 +1979,7 @@ msgid "" "certain fields like <literal>origin</literal>, <literal>label</literal>, " "<literal>codename</literal>, <literal>suite</literal>, <literal>version</" "literal> and <literal>defaultpin</literal>. See also &apt-preferences;. " -"Configuration Item: <literal>Acquire::AllowReleaseInfoChanges</literal>." +"Configuration Item: <literal>Acquire::AllowReleaseInfoChange</literal>." msgstr "" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> @@ -9852,7 +9852,7 @@ msgid "" "http;), which, as indicated by the appended S, is wrapped in an encrypted " "layer known as Transport Layer Security (TLS) to provide end-to-end " "encryption. A sufficiently capable attacker can still observe the " -"communication partners and deeper analyse of the encrypted communcation " +"communication partners and deeper analyse of the encrypted communication " "might still reveal important details. An overview over available " "alternative transport methods is given in &sources-list;." msgstr "" diff --git a/doc/po/nl.po b/doc/po/nl.po index 4e869a3d5..cd27f3446 100644 --- a/doc/po/nl.po +++ b/doc/po/nl.po @@ -2077,14 +2077,14 @@ msgid "" "certain fields like <literal>origin</literal>, <literal>label</literal>, " "<literal>codename</literal>, <literal>suite</literal>, <literal>version</" "literal> and <literal>defaultpin</literal>. See also &apt-preferences;. " -"Configuration Item: <literal>Acquire::AllowReleaseInfoChanges</literal>." +"Configuration Item: <literal>Acquire::AllowReleaseInfoChange</literal>." msgstr "" "Er bestaan specialistische opties (<literal>--allow-releaseinfo-change-</" "literal><replaceable>veld</replaceable>) om enkel veranderingen toe te staan " "voor bepaalde velden, zoals <literal>origin</literal>, <literal>label</" "literal>, <literal>codename</literal>, <literal>suite</literal>, " "<literal>version</literal> en <literal>defaultpin</literal>. Zie ook &apt-" -"preferences;. Configuratie-item: <literal>Acquire::AllowReleaseInfoChanges</" +"preferences;. Configuratie-item: <literal>Acquire::AllowReleaseInfoChange</" "literal>." #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> @@ -10475,7 +10475,7 @@ msgid "" "http;), which, as indicated by the appended S, is wrapped in an encrypted " "layer known as Transport Layer Security (TLS) to provide end-to-end " "encryption. A sufficiently capable attacker can still observe the " -"communication partners and deeper analyse of the encrypted communcation " +"communication partners and deeper analyse of the encrypted communication " "might still reveal important details. An overview over available " "alternative transport methods is given in &sources-list;." msgstr "" diff --git a/doc/po/pl.po b/doc/po/pl.po index 46513d19d..2f111b3e2 100644 --- a/doc/po/pl.po +++ b/doc/po/pl.po @@ -2084,7 +2084,7 @@ msgid "" "certain fields like <literal>origin</literal>, <literal>label</literal>, " "<literal>codename</literal>, <literal>suite</literal>, <literal>version</" "literal> and <literal>defaultpin</literal>. See also &apt-preferences;. " -"Configuration Item: <literal>Acquire::AllowReleaseInfoChanges</literal>." +"Configuration Item: <literal>Acquire::AllowReleaseInfoChange</literal>." msgstr "" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> @@ -9239,7 +9239,7 @@ msgid "" "http;), which, as indicated by the appended S, is wrapped in an encrypted " "layer known as Transport Layer Security (TLS) to provide end-to-end " "encryption. A sufficiently capable attacker can still observe the " -"communication partners and deeper analyse of the encrypted communcation " +"communication partners and deeper analyse of the encrypted communication " "might still reveal important details. An overview over available " "alternative transport methods is given in &sources-list;." msgstr "" diff --git a/doc/po/pt.po b/doc/po/pt.po index d8d4c4b7a..af4c0b6f9 100644 --- a/doc/po/pt.po +++ b/doc/po/pt.po @@ -2018,7 +2018,7 @@ msgid "" "certain fields like <literal>origin</literal>, <literal>label</literal>, " "<literal>codename</literal>, <literal>suite</literal>, <literal>version</" "literal> and <literal>defaultpin</literal>. See also &apt-preferences;. " -"Configuration Item: <literal>Acquire::AllowReleaseInfoChanges</literal>." +"Configuration Item: <literal>Acquire::AllowReleaseInfoChange</literal>." msgstr "" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> @@ -10018,7 +10018,7 @@ msgid "" "http;), which, as indicated by the appended S, is wrapped in an encrypted " "layer known as Transport Layer Security (TLS) to provide end-to-end " "encryption. A sufficiently capable attacker can still observe the " -"communication partners and deeper analyse of the encrypted communcation " +"communication partners and deeper analyse of the encrypted communication " "might still reveal important details. An overview over available " "alternative transport methods is given in &sources-list;." msgstr "" diff --git a/doc/po/pt_BR.po b/doc/po/pt_BR.po index 56bab5079..3401ed857 100644 --- a/doc/po/pt_BR.po +++ b/doc/po/pt_BR.po @@ -1410,7 +1410,7 @@ msgid "" "certain fields like <literal>origin</literal>, <literal>label</literal>, " "<literal>codename</literal>, <literal>suite</literal>, <literal>version</" "literal> and <literal>defaultpin</literal>. See also &apt-preferences;. " -"Configuration Item: <literal>Acquire::AllowReleaseInfoChanges</literal>." +"Configuration Item: <literal>Acquire::AllowReleaseInfoChange</literal>." msgstr "" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> @@ -7560,7 +7560,7 @@ msgid "" "http;), which, as indicated by the appended S, is wrapped in an encrypted " "layer known as Transport Layer Security (TLS) to provide end-to-end " "encryption. A sufficiently capable attacker can still observe the " -"communication partners and deeper analyse of the encrypted communcation " +"communication partners and deeper analyse of the encrypted communication " "might still reveal important details. An overview over available " "alternative transport methods is given in &sources-list;." msgstr "" diff --git a/doc/sources.list.5.xml b/doc/sources.list.5.xml index 75b5d94b9..e55c5b31e 100644 --- a/doc/sources.list.5.xml +++ b/doc/sources.list.5.xml @@ -409,6 +409,17 @@ deb-src [ option1=value1 option2=value2 ] uri suite [component1] [component2] [. alternative.</para></listitem> </varlistentry> + <varlistentry><term><command>mirror</command>, <command>mirror+<replaceable>scheme</replaceable></command> (&apt-transport-mirror;)</term> + <listitem><para> + The mirror scheme specifies the location of a mirrorlist. By default the + scheme used for the location is <literal>http</literal>, but any other + scheme can be used via <command>mirror+<replaceable>scheme</replaceable></command>. + The mirrorlist itself can contain many different URIs for mirrors the APT client + can transparently pick, choose and fallback between intended to help both + with distributing the load over the available mirrors and ensuring that + clients can acquire data even if some configured mirrors are not available. + </para></listitem> + </varlistentry> <varlistentry><term><command>file</command></term> <listitem><para> diff --git a/prepare-release b/prepare-release index e9e9362da..a37962cd7 100755 --- a/prepare-release +++ b/prepare-release @@ -105,6 +105,12 @@ elif [ "$1" = 'pre-build' ]; then echo "You probably want to run »./prepare-release pre-export« to fix this." exit 1 fi + NEWSDISTRIBUTION=$(dpkg-parsechangelog -l debian/NEWS | sed -n -e '/^Distribution:/s/^Distribution: //p') + if [ "$NEWSDISTRIBUTION" = 'UNRELEASED' ]; then + echo "changelog (${VERSION}) has a distribution (${DISTRIBUTION}) set, while the NEWS file hasn't!" + echo "You probably want to edit »debian/NEWS« to fix this." + exit 1 + fi fi elif [ "$1" = 'post-build' ]; then if [ "$DISTRIBUTION" != "UNRELEASED" ]; then diff --git a/test/integration/framework b/test/integration/framework index a9c797790..38a084302 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -627,6 +627,7 @@ configcompression() { '.') printf ".\t.\tcat\n";; 'gz') printf "gzip\tgz\t$CMD $1\n";; 'bz2') printf "bzip2\tbz2\t$CMD $1\n";; + 'zst') printf "zstd\tzst\t$CMD $1\n";; *) printf "$1\t$1\t$CMD $1\n";; esac shift @@ -655,6 +656,7 @@ forcecompressor() { case $COMPRESSOR in gzip) COMPRESS='gz';; bzip2) COMPRESS='bz2';; + zstd) COMPRESS='zst';; esac local CONFFILE="${TMPWORKINGDIRECTORY}/rootdir/etc/apt/apt.conf.d/00force-compressor" echo "Acquire::CompressionTypes::Order { \"${COMPRESS}\"; }; diff --git a/test/libapt/fileutl_test.cc b/test/libapt/fileutl_test.cc index a702c16ec..38536f77f 100644 --- a/test/libapt/fileutl_test.cc +++ b/test/libapt/fileutl_test.cc @@ -180,7 +180,7 @@ static void TestFileFd(mode_t const a_umask, mode_t const ExpectedFilePermission static void TestFileFd(unsigned int const filemode) { auto const compressors = APT::Configuration::getCompressors(); - EXPECT_EQ(7, compressors.size()); + EXPECT_EQ(8, compressors.size()); bool atLeastOneWasTested = false; for (auto const &c: compressors) { @@ -204,7 +204,7 @@ TEST(FileUtlTest, FileFD) _config->Set("APT::Compressor::rev::Binary", "rev"); _config->Set("APT::Compressor::rev::Cost", 10); auto const compressors = APT::Configuration::getCompressors(false); - EXPECT_EQ(7, compressors.size()); + EXPECT_EQ(8, compressors.size()); EXPECT_TRUE(std::any_of(compressors.begin(), compressors.end(), [](APT::Configuration::Compressor const &c) { return c.Name == "rev"; })); std::string const startdir = SafeGetCWD(); |