diff options
321 files changed, 6737 insertions, 3047 deletions
diff --git a/.clang-format b/.clang-format new file mode 100644 index 000000000..654100364 --- /dev/null +++ b/.clang-format @@ -0,0 +1,24 @@ +Language: Cpp +# BasedOnStyle + +TabWidth: 8 +UseTab: Always +IndentWidth: 3 +ColumnLimit: 0 +BreakBeforeBraces: Allman +AccessModifierOffset: 0 +IncludeCategories: + - Regex: 'apti18n.h' + Priority: 9999 + - Regex: 'apt-[^/]*/' + Priority: 20 + - Regex: '^"' + Priority: 10 + - Regex: 'config.h' + Priority: 0 + - Regex: '(zlib|bzlib|lzma|lz4frame|gtest/gtest|db|gnutls/.*)\.h' + Priority: 30 + - Regex: '\.h' + Priority: 100 + - Regex: '.*' + Priority: 99 diff --git a/.gitignore b/.gitignore index 630e50839..b27957646 100644 --- a/.gitignore +++ b/.gitignore @@ -51,6 +51,9 @@ docbook-text-style.xsl **/methods/file **/methods/copy +**/methods/curl +**/methods/curl+http +**/methods/curl+https **/methods/store **/methods/gpgv **/methods/cdrom @@ -99,7 +102,9 @@ Makefile /debian/*.log /debian/*.substvars /debian/*.debhelper +/debian/debhelper-build-stamp /debian/files +/debian/tmp/ /debian/apt/ /debian/apt-doc/ /debian/apt-utils/ diff --git a/.travis.yml b/.travis.yml index 023107a68..0685cdb76 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,33 +1,21 @@ language: cpp cache: ccache sudo: required -dist: trusty +services: + - docker env: - - TEST_SUITE=user CMAKE_FLAGS= - - TEST_SUITE=root CMAKE_FLAGS=-DWITH_DOC=OFF -before_install: - - sudo add-apt-repository 'deb http://archive.ubuntu.com/ubuntu/ wily main universe' -y - - sudo add-apt-repository 'deb http://archive.ubuntu.com/ubuntu/ xenial main' -y - - | - sudo sh -c '/bin/echo -e "Package: *\nPin: release n=wily\nPin-Priority: 1" > /etc/apt/preferences.d/wily' - sudo sh -c '/bin/echo -e "Package: *\nPin: release n=xenial\nPin-Priority: 1" > /etc/apt/preferences.d/xenial' - - sudo apt-get update -qq + - USER=travis CMAKE_FLAGS= + - USER=root CMAKE_FLAGS=-DWITH_DOC=OFF + - USER=travis CMAKE_FLAGS="-DWITH_DOC=OFF -DFORCE_CURL=ON" install: - - sudo apt-get -qq -y -t wily install gettext liblz4-dev python3-apt - - sudo apt-get -qq -y -t xenial install cmake ninja-build - - sudo ./prepare-release travis-ci + - sed -i -e "s#1000#$(id -u)#g" Dockerfile + - docker build --tag=apt-ci . before_script: - - ( mkdir build && cd build && cmake -DCMAKE_BUILD_TYPE=Coverage -G Ninja $CMAKE_FLAGS .. ) - - ninja -C build + - docker run --rm -w $PWD -v $HOME/.ccache:$HOME/.ccache -v $PWD:$PWD --user=travis apt-ci sh -e -c "mkdir build && cd build && env PATH=/usr/lib/ccache:\$PATH cmake -DCMAKE_BUILD_TYPE=Coverage -G Ninja $CMAKE_FLAGS .." + - docker run --rm -w $PWD -v $HOME/.ccache:$HOME/.ccache -v $PWD:$PWD --user=travis apt-ci ninja -C build script: - - CTEST_OUTPUT_ON_FAILURE=1 ninja -C build test - - DESTDIR=$PWD/rootdir chronic ninja -C build install - - test "$TEST_SUITE" != "user" || ./test/integration/run-tests -qq - - sudo adduser --force-badname --system --home /nonexistent --no-create-home --quiet _apt || true - - sudo chmod go+x /home/travis - - sudo chmod -R go+rwX /home/travis/build - - test "$TEST_SUITE" != "root" || sudo ./test/integration/run-tests -qq + - docker run --rm -w $PWD -v $PWD:$PWD --user=travis apt-ci env CTEST_OUTPUT_ON_FAILURE=1 ninja -C build test + - docker run --rm -w $PWD -v $PWD:$PWD --user=travis apt-ci env DESTDIR=$PWD/rootdir chronic ninja -C build install + - docker run --rm -w $PWD -v $PWD:$PWD --user=$USER --tmpfs /tmp:suid,exec apt-ci unbuffer ./test/integration/run-tests -qq -j 4 after_script: - - cd build - - gcov -r $(find -name '*.gcno') - - bash <(curl -s https://codecov.io/bash) + - docker run --rm -w $PWD/build -v $PWD:$PWD --user=$USER `bash <(curl -s https://codecov.io/env)` apt-ci bash -c 'bash <(curl -s https://codecov.io/bash)' diff --git a/CMakeLists.txt b/CMakeLists.txt index 83af9bd5a..49650bc0c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -77,9 +77,23 @@ endif() # apt-transport-https dependencies -find_package(CURL REQUIRED) -if (CURL_FOUND) - set(HAVE_CURL 1) +option(WITH_CURL "Build curl-based methods" ON) +option(FORCE_CURL "Use curl-based methods" OFF) +if (FORCE_CURL AND NOT WITH_CURL) + message(FATAL_ERROR "Cannot set FORCE_CURL=ON with WITH_CURL=OFF") +endif() +if (WITH_CURL) + find_package(CURL REQUIRED) + if (CURL_FOUND) + set(HAVE_CURL 1) + endif() +else() + set(HAVE_CURL 0) +endif() + +find_package(GnuTLS REQUIRED) +if (GNUTLS_FOUND) + set(HAVE_GNUTLS 1) endif() # (De)Compressor libraries @@ -172,7 +186,7 @@ endif() # Configure some variables like package, version and architecture. set(PACKAGE ${PROJECT_NAME}) set(PACKAGE_MAIL "APT Development Team <deity@lists.debian.org>") -set(PACKAGE_VERSION "1.4.6") +set(PACKAGE_VERSION "1.5~beta1") if (NOT DEFINED DPKG_DATADIR) execute_process(COMMAND ${PERL_EXECUTABLE} -MDpkg -e "print $Dpkg::DATADIR;" diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..b7af5f629 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,11 @@ +FROM debian:testing +COPY . /tmp +WORKDIR /tmp +RUN sed -i s#://deb.debian.org#://cdn-fastly.deb.debian.org# /etc/apt/sources.list \ + && apt-get update \ + && adduser --home /home/travis travis --quiet --disabled-login --gecos "" --uid 1000 \ + && env DEBIAN_FRONTEND=noninteractive apt-get install build-essential ccache ninja-build expect curl git -q -y \ + && env DEBIAN_FRONTEND=noninteractive ./prepare-release travis-ci \ + && dpkg-reconfigure ccache \ + && rm -r /tmp/* \ + && apt-get clean diff --git a/apt-inst/contrib/arfile.cc b/apt-inst/contrib/arfile.cc index 905110781..26c85d066 100644 --- a/apt-inst/contrib/arfile.cc +++ b/apt-inst/contrib/arfile.cc @@ -14,16 +14,16 @@ ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ -#include<config.h> +#include <config.h> #include <apt-pkg/arfile.h> -#include <apt-pkg/strutl.h> -#include <apt-pkg/fileutl.h> #include <apt-pkg/error.h> +#include <apt-pkg/fileutl.h> +#include <apt-pkg/strutl.h> +#include <string> #include <string.h> #include <sys/types.h> -#include <string> #include <apti18n.h> /*}}}*/ diff --git a/apt-inst/contrib/arfile.h b/apt-inst/contrib/arfile.h index 297303a9d..47624c72a 100644 --- a/apt-inst/contrib/arfile.h +++ b/apt-inst/contrib/arfile.h @@ -15,9 +15,8 @@ #ifndef PKGLIB_ARFILE_H #define PKGLIB_ARFILE_H - -#include <string> #include <apt-pkg/macros.h> +#include <string> #ifndef APT_8_CLEANER_HEADERS #include <apt-pkg/fileutl.h> #endif diff --git a/apt-inst/contrib/extracttar.cc b/apt-inst/contrib/extracttar.cc index 60360053e..69e43d6a1 100644 --- a/apt-inst/contrib/extracttar.cc +++ b/apt-inst/contrib/extracttar.cc @@ -16,22 +16,22 @@ ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ -#include<config.h> +#include <config.h> +#include <apt-pkg/configuration.h> #include <apt-pkg/dirstream.h> -#include <apt-pkg/extracttar.h> #include <apt-pkg/error.h> -#include <apt-pkg/strutl.h> -#include <apt-pkg/configuration.h> +#include <apt-pkg/extracttar.h> #include <apt-pkg/fileutl.h> +#include <apt-pkg/strutl.h> -#include <string.h> #include <algorithm> +#include <iostream> #include <string> -#include <unistd.h> -#include <signal.h> #include <fcntl.h> -#include <iostream> +#include <signal.h> +#include <string.h> +#include <unistd.h> #include <apti18n.h> /*}}}*/ diff --git a/apt-inst/deb/debfile.cc b/apt-inst/deb/debfile.cc index 474fb1cbe..8eef446bb 100644 --- a/apt-inst/deb/debfile.cc +++ b/apt-inst/deb/debfile.cc @@ -16,20 +16,20 @@ ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ -#include<config.h> +#include <config.h> -#include <apt-pkg/debfile.h> -#include <apt-pkg/extracttar.h> -#include <apt-pkg/error.h> #include <apt-pkg/aptconfiguration.h> #include <apt-pkg/arfile.h> +#include <apt-pkg/debfile.h> #include <apt-pkg/dirstream.h> +#include <apt-pkg/error.h> +#include <apt-pkg/extracttar.h> #include <apt-pkg/fileutl.h> #include <apt-pkg/tagfile.h> -#include <string.h> #include <string> #include <vector> +#include <string.h> #include <sys/stat.h> #include <apti18n.h> diff --git a/apt-inst/deb/debfile.h b/apt-inst/deb/debfile.h index 02ebaae2e..0bc3254d6 100644 --- a/apt-inst/deb/debfile.h +++ b/apt-inst/deb/debfile.h @@ -23,11 +23,10 @@ #ifndef PKGLIB_DEBFILE_H #define PKGLIB_DEBFILE_H - #include <apt-pkg/arfile.h> #include <apt-pkg/dirstream.h> -#include <apt-pkg/tagfile.h> #include <apt-pkg/macros.h> +#include <apt-pkg/tagfile.h> #include <string> diff --git a/apt-inst/dirstream.cc b/apt-inst/dirstream.cc index 888020bfb..f43e9953b 100644 --- a/apt-inst/dirstream.cc +++ b/apt-inst/dirstream.cc @@ -11,15 +11,15 @@ ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ -#include<config.h> +#include <config.h> #include <apt-pkg/dirstream.h> #include <apt-pkg/error.h> +#include <errno.h> #include <fcntl.h> #include <sys/stat.h> #include <sys/time.h> -#include <errno.h> #include <unistd.h> #include <apti18n.h> /*}}}*/ diff --git a/apt-inst/extract.cc b/apt-inst/extract.cc index f50c23e46..667524c9e 100644 --- a/apt-inst/extract.cc +++ b/apt-inst/extract.cc @@ -44,25 +44,24 @@ ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ -#include<config.h> +#include <config.h> -#include <apt-pkg/extract.h> -#include <apt-pkg/error.h> #include <apt-pkg/debversion.h> -#include <apt-pkg/fileutl.h> #include <apt-pkg/dirstream.h> +#include <apt-pkg/error.h> +#include <apt-pkg/extract.h> #include <apt-pkg/filelist.h> +#include <apt-pkg/fileutl.h> #include <apt-pkg/mmap.h> #include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheiterators.h> -#include <string.h> +#include <iostream> #include <string> -#include <sys/stat.h> -#include <stdio.h> -#include <errno.h> #include <dirent.h> -#include <iostream> +#include <errno.h> +#include <stdio.h> +#include <string.h> +#include <sys/stat.h> #include <apti18n.h> /*}}}*/ diff --git a/apt-inst/extract.h b/apt-inst/extract.h index a62ff51bd..d2e355474 100644 --- a/apt-inst/extract.h +++ b/apt-inst/extract.h @@ -20,7 +20,6 @@ #include <apt-pkg/dirstream.h> #include <apt-pkg/filelist.h> #include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheiterators.h> #include <string> diff --git a/apt-inst/filelist.cc b/apt-inst/filelist.cc index 6251b79b5..8a16574ea 100644 --- a/apt-inst/filelist.cc +++ b/apt-inst/filelist.cc @@ -32,15 +32,15 @@ ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ -#include<config.h> +#include <config.h> +#include <apt-pkg/error.h> #include <apt-pkg/filelist.h> #include <apt-pkg/mmap.h> -#include <apt-pkg/error.h> #include <apt-pkg/strutl.h> -#include <string.h> #include <iostream> +#include <string.h> #include <apti18n.h> /*}}}*/ diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc index a7386da71..53dc08160 100644 --- a/apt-pkg/acquire-item.cc +++ b/apt-pkg/acquire-item.cc @@ -16,55 +16,42 @@ #include <config.h> #include <apt-pkg/acquire-item.h> -#include <apt-pkg/configuration.h> +#include <apt-pkg/acquire.h> #include <apt-pkg/aptconfiguration.h> -#include <apt-pkg/sourcelist.h> +#include <apt-pkg/configuration.h> #include <apt-pkg/error.h> -#include <apt-pkg/strutl.h> #include <apt-pkg/fileutl.h> -#include <apt-pkg/tagfile.h> -#include <apt-pkg/metaindex.h> -#include <apt-pkg/acquire.h> +#include <apt-pkg/gpgv.h> #include <apt-pkg/hashes.h> #include <apt-pkg/indexfile.h> +#include <apt-pkg/metaindex.h> #include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheiterators.h> #include <apt-pkg/pkgrecords.h> -#include <apt-pkg/gpgv.h> +#include <apt-pkg/sourcelist.h> +#include <apt-pkg/strutl.h> +#include <apt-pkg/tagfile.h> #include <algorithm> +#include <ctime> +#include <iostream> +#include <numeric> +#include <random> +#include <sstream> +#include <string> +#include <vector> +#include <errno.h> #include <stddef.h> +#include <stdio.h> #include <stdlib.h> #include <string.h> -#include <iostream> -#include <vector> #include <sys/stat.h> #include <unistd.h> -#include <errno.h> -#include <string> -#include <stdio.h> -#include <ctime> -#include <sstream> -#include <numeric> -#include <random> #include <apti18n.h> /*}}}*/ using namespace std; -static void printHashSumComparison(std::string const &URI, HashStringList const &Expected, HashStringList const &Actual) /*{{{*/ -{ - if (_config->FindB("Debug::Acquire::HashSumMismatch", false) == false) - return; - std::cerr << std::endl << URI << ":" << std::endl << " Expected Hash: " << std::endl; - for (HashStringList::const_iterator hs = Expected.begin(); hs != Expected.end(); ++hs) - std::cerr << "\t- " << hs->toStr() << std::endl; - std::cerr << " Actual Hash: " << std::endl; - for (HashStringList::const_iterator hs = Actual.begin(); hs != Actual.end(); ++hs) - std::cerr << "\t- " << hs->toStr() << std::endl; -} - /*}}}*/ static std::string GetPartialFileName(std::string const &file) /*{{{*/ { std::string DestFile = _config->FindDir("Dir::State::lists") + "partial/"; @@ -1114,11 +1101,13 @@ void pkgAcqMetaBase::AbortTransaction() case TransactionCommit: _error->Fatal("Transaction %s was already aborted and is now committed", TransactionManager->Target.URI.c_str()); return; } TransactionManager->State = TransactionAbort; + TransactionManager->ExpectedAdditionalItems = 0; // ensure the toplevel is in error state too for (std::vector<pkgAcqTransactionItem*>::iterator I = Transaction.begin(); I != Transaction.end(); ++I) { + (*I)->ExpectedAdditionalItems = 0; if ((*I)->Status != pkgAcquire::Item::StatFetching) Owner->Dequeue(*I); (*I)->TransactionState(TransactionAbort); @@ -1411,6 +1400,16 @@ void pkgAcqMetaClearSig::QueueIndexes(bool const verify) /*{{{*/ { if (TransactionManager->MetaIndexParser->Exists(Target.MetaKey) == false) { + auto const component = Target.Option(IndexTarget::COMPONENT); + if (component.empty() == false && TransactionManager->MetaIndexParser->HasSupportForComponent(component) == false) + { + new CleanupItem(Owner, TransactionManager, Target); + _error->Warning(_("Skipping acquire of configured file '%s' as repository '%s' doesn't have the component '%s' (component misspelt in sources.list?)"), + Target.MetaKey.c_str(), TransactionManager->Target.Description.c_str(), component.c_str()); + continue; + + } + // optional targets that we do not have in the Release file are skipped if (hasHashes == true && Target.IsOptional) { @@ -1440,9 +1439,10 @@ void pkgAcqMetaClearSig::QueueIndexes(bool const verify) /*{{{*/ if (hasHashes == true) { - Status = StatAuthError; - strprintf(ErrorText, _("Unable to find expected entry '%s' in Release file (Wrong sources.list entry or malformed file)"), Target.MetaKey.c_str()); - return; + new CleanupItem(Owner, TransactionManager, Target); + _error->Warning(_("Skipping acquire of configured file '%s' as repository '%s' does not seem to provide it (sources.list entry misspelt?)"), + Target.MetaKey.c_str(), TransactionManager->Target.Description.c_str()); + continue; } else { @@ -1606,13 +1606,79 @@ bool pkgAcqMetaBase::VerifyVendor(string const &) /*{{{*/ if (TransactionManager->MetaIndexParser->CheckDist(ExpectedDist) == false) _error->Warning(_("Conflicting distribution: %s (expected %s but got %s)"), Desc.Description.c_str(), ExpectedDist.c_str(), NowCodename.c_str()); - // might be okay, might be not + + // changed info potentially breaks user config like pinning if (TransactionManager->LastMetaIndexParser != nullptr) { - auto const LastCodename = TransactionManager->LastMetaIndexParser->GetCodename(); - if (LastCodename.empty() == false && NowCodename.empty() == false && LastCodename != NowCodename) - _error->Warning(_("Conflicting distribution: %s (expected %s but got %s)"), - Desc.Description.c_str(), LastCodename.c_str(), NowCodename.c_str()); + std::vector<pkgAcquireStatus::ReleaseInfoChange> Changes; + auto const AllowInfoChange = _config->FindB("Acquire::AllowReleaseInfoChange", false); + auto const quietInfoChange = _config->FindB("quiet::ReleaseInfoChange", false); + struct { + char const * const Type; + bool const Allowed; + decltype(&metaIndex::GetOrigin) const Getter; + } checkers[] = { + { "Origin", AllowInfoChange, &metaIndex::GetOrigin }, + { "Label", AllowInfoChange, &metaIndex::GetLabel }, + { "Version", true, &metaIndex::GetVersion }, // numbers change all the time, that is okay + { "Suite", AllowInfoChange, &metaIndex::GetSuite }, + { "Codename", AllowInfoChange, &metaIndex::GetCodename }, + { nullptr, false, nullptr } + }; + auto const CheckReleaseInfo = [&](char const * const Type, bool const AllowChange, decltype(checkers[0].Getter) const Getter) { + std::string const Last = (TransactionManager->LastMetaIndexParser->*Getter)(); + std::string const Now = (TransactionManager->MetaIndexParser->*Getter)(); + if (Last == Now) + return; + auto const Allow = _config->FindB(std::string("Acquire::AllowReleaseInfoChange::").append(Type), AllowChange); + if (Allow == true && _config->FindB(std::string("quiet::ReleaseInfoChange::").append(Type), quietInfoChange) == true) + return; + std::string msg; + strprintf(msg, _("Repository '%s' changed its '%s' value from '%s' to '%s'"), + Desc.Description.c_str(), Type, Last.c_str(), Now.c_str()); + Changes.push_back({Type, std::move(Last), std::move(Now), std::move(msg), Allow}); + }; + for (short i = 0; checkers[i].Type != nullptr; ++i) + CheckReleaseInfo(checkers[i].Type, checkers[i].Allowed, checkers[i].Getter); + + { + auto const Last = TransactionManager->LastMetaIndexParser->GetDefaultPin(); + auto const Now = TransactionManager->MetaIndexParser->GetDefaultPin(); + if (Last != Now) + { + auto const Allow = _config->FindB("Acquire::AllowReleaseInfoChange::DefaultPin", AllowInfoChange); + if (Allow == false || _config->FindB("quiet::ReleaseInfoChange::DefaultPin", quietInfoChange) == false) + { + std::string msg; + strprintf(msg, _("Repository '%s' changed its default priority for %s from %hi to %hi."), + Desc.Description.c_str(), "apt_preferences(5)", Last, Now); + Changes.push_back({"DefaultPin", std::to_string(Last), std::to_string(Now), std::move(msg), Allow}); + } + } + } + if (Changes.empty() == false) + { + auto const notes = TransactionManager->MetaIndexParser->GetReleaseNotes(); + if (notes.empty() == false) + { + std::string msg; + // TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change + strprintf(msg, _("More information about this can be found online in the Release notes at: %s"), notes.c_str()); + Changes.push_back({"Release-Notes", "", std::move(notes), std::move(msg), true}); + } + if (std::any_of(Changes.begin(),Changes.end(),[](pkgAcquireStatus::ReleaseInfoChange const &c) { return c.DefaultAction == false; })) + { + std::string msg; + // TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) + strprintf(msg, _("This must be accepted explicitly before updates for " + "this repository can be applied. See %s manpage for details."), "apt-secure(8)"); + Changes.push_back({"Confirmation", "", "", std::move(msg), true}); + } + + } + if (Owner->Log == nullptr) + return pkgAcquireStatus::ReleaseInfoChangesAsGlobalErrors(std::move(Changes)); + return Owner->Log->ReleaseInfoChanges(TransactionManager->LastMetaIndexParser, TransactionManager->MetaIndexParser, std::move(Changes)); } return true; } @@ -1664,7 +1730,8 @@ void pkgAcqMetaClearSig::Finished() /*{{{*/ bool pkgAcqMetaClearSig::VerifyDone(std::string const &Message, /*{{{*/ pkgAcquire::MethodConfig const * const Cnf) { - Item::VerifyDone(Message, Cnf); + if (Item::VerifyDone(Message, Cnf) == false) + return false; if (FileExists(DestFile) && !StartsWithGPGClearTextSignature(DestFile)) return RenameOnError(NotClearsigned); @@ -1717,7 +1784,11 @@ void pkgAcqMetaClearSig::Failed(string const &Message,pkgAcquire::MethodConfig c if (AuthPass == false) { - if (Status == StatAuthError || Status == StatTransientNetworkError) + auto const failreason = LookupTag(Message, "FailReason"); + auto const httperror = "HttpError"; + if (Status == StatAuthError || Status == StatTransientNetworkError || + (strncmp(failreason.c_str(), httperror, strlen(httperror)) == 0 && + failreason != "HttpError404")) { // if we expected a ClearTextSignature (InRelease) but got a network // error or got a file, but it wasn't valid, we end up here (see VerifyDone). @@ -2040,13 +2111,11 @@ void pkgAcqDiffIndex::QueueOnIMSHit() const /*{{{*/ new pkgAcqIndexDiffs(Owner, TransactionManager, Target, UsedMirror, Target.URI); } /*}}}*/ -static bool RemoveFileForBootstrapLinking(bool const Debug, std::string const &For, std::string const &Boot)/*{{{*/ +static bool RemoveFileForBootstrapLinking(std::string &ErrorText, std::string const &For, std::string const &Boot)/*{{{*/ { if (FileExists(Boot) && RemoveFile("Bootstrap-linking", Boot) == false) { - if (Debug) - std::clog << "Bootstrap-linking for patching " << For - << " by removing stale " << Boot << " failed!" << std::endl; + strprintf(ErrorText, "Bootstrap for patching %s by removing stale %s failed!", For.c_str(), Boot.c_str()); return false; } return true; @@ -2054,6 +2123,7 @@ static bool RemoveFileForBootstrapLinking(bool const Debug, std::string const &F /*}}}*/ bool pkgAcqDiffIndex::ParseDiffIndex(string const &IndexDiffFile) /*{{{*/ { + available_patches.clear(); ExpectedAdditionalItems = 0; // failing here is fine: our caller will take care of trying to // get the complete file if patching fails @@ -2097,8 +2167,7 @@ bool pkgAcqDiffIndex::ParseDiffIndex(string const &IndexDiffFile) /*{{{*/ if (ServerHashes.usable() == false) { - if (Debug == true) - std::clog << "pkgAcqDiffIndex: " << IndexDiffFile << ": Did not find a good hashsum in the index" << std::endl; + ErrorText = "Did not find a good hashsum in the index"; return false; } @@ -2106,11 +2175,7 @@ bool pkgAcqDiffIndex::ParseDiffIndex(string const &IndexDiffFile) /*{{{*/ HashStringList const TargetFileHashes = GetExpectedHashesFor(Target.MetaKey); if (TargetFileHashes.usable() == false || ServerHashes != TargetFileHashes) { - if (Debug == true) - { - std::clog << "pkgAcqDiffIndex: " << IndexDiffFile << ": Index has different hashes than parser, probably older, so fail pdiffing" << std::endl; - printHashSumComparison(CurrentPackagesFile, ServerHashes, TargetFileHashes); - } + ErrorText = "Index has different hashes than parser (probably older)"; return false; } @@ -2128,10 +2193,7 @@ bool pkgAcqDiffIndex::ParseDiffIndex(string const &IndexDiffFile) /*{{{*/ if (ServerHashes == LocalHashes) { - // we have the same sha1 as the server so we are done here - if(Debug) - std::clog << "pkgAcqDiffIndex: Package file " << CurrentPackagesFile << " is up-to-date" << std::endl; - QueueOnIMSHit(); + available_patches.clear(); return true; } @@ -2148,7 +2210,6 @@ bool pkgAcqDiffIndex::ParseDiffIndex(string const &IndexDiffFile) /*{{{*/ types.push_back(*type); // parse all of (provided) history - vector<DiffInfo> available_patches; bool firstAcceptedHashes = true; for (auto type = types.crbegin(); type != types.crend(); ++type) { @@ -2203,9 +2264,7 @@ bool pkgAcqDiffIndex::ParseDiffIndex(string const &IndexDiffFile) /*{{{*/ if (unlikely(available_patches.empty() == true)) { - if (Debug) - std::clog << "pkgAcqDiffIndex: " << IndexDiffFile << ": " - << "Couldn't find any patches for the patch series." << std::endl; + ErrorText = "Couldn't find any patches for the patch series"; return false; } @@ -2307,9 +2366,7 @@ bool pkgAcqDiffIndex::ParseDiffIndex(string const &IndexDiffFile) /*{{{*/ if (foundStart == false || unlikely(available_patches.empty() == true)) { - if (Debug) - std::clog << "pkgAcqDiffIndex: " << IndexDiffFile << ": " - << "Couldn't find the start of the patch series." << std::endl; + ErrorText = "Couldn't find the start of the patch series"; return false; } @@ -2318,9 +2375,7 @@ bool pkgAcqDiffIndex::ParseDiffIndex(string const &IndexDiffFile) /*{{{*/ patch.patch_hashes.usable() == false || patch.download_hashes.usable() == false) { - if (Debug) - std::clog << "pkgAcqDiffIndex: " << IndexDiffFile << ": provides no usable hashes for " << patch.file - << " so fallback to complete download" << std::endl; + strprintf(ErrorText, "Provides no usable hashes for %s", patch.file.c_str()); return false; } @@ -2328,9 +2383,7 @@ bool pkgAcqDiffIndex::ParseDiffIndex(string const &IndexDiffFile) /*{{{*/ unsigned long const fileLimit = _config->FindI("Acquire::PDiffs::FileLimit", 0); if (fileLimit != 0 && fileLimit < available_patches.size()) { - if (Debug) - std::clog << "Need " << available_patches.size() << " diffs (Limit is " << fileLimit - << ") so fallback to complete download" << std::endl; + strprintf(ErrorText, "Need %lu diffs, but limit is %lu", available_patches.size(), fileLimit); return false; } @@ -2360,25 +2413,18 @@ bool pkgAcqDiffIndex::ParseDiffIndex(string const &IndexDiffFile) /*{{{*/ unsigned long long const sizeLimit = downloadSizeIdx * sizeLimitPercent; if ((sizeLimit/100) < downloadSize) { - if (Debug) - std::clog << "Need " << downloadSize << " compressed bytes (Limit is " << (sizeLimit/100) << ", " - << "original is " << downloadSizeIdx << ") so fallback to complete download" << std::endl; + strprintf(ErrorText, "Need %llu compressed bytes, but limit is %llu and original is %llu", downloadSize, (sizeLimit/100), downloadSizeIdx); return false; } } } - // we have something, queue the diffs - string::size_type const last_space = Description.rfind(" "); - if(last_space != string::npos) - Description.erase(last_space, Description.size()-last_space); - /* decide if we should download patches one by one or in one go: The first is good if the server merges patches, but many don't so client based merging can be attempt in which case the second is better. "bad things" will happen if patches are merged on the server, but client side merging is attempt as well */ - bool pdiff_merge = _config->FindB("Acquire::PDiffs::Merge", true); + pdiff_merge = _config->FindB("Acquire::PDiffs::Merge", true); if (pdiff_merge == true) { // reprepro adds this flag if it has merged patches on the server @@ -2393,53 +2439,24 @@ bool pkgAcqDiffIndex::ParseDiffIndex(string const &IndexDiffFile) /*{{{*/ return false; std::string const PartialFile = GetPartialFileNameFromURI(Target.URI); std::string const PatchedFile = GetKeepCompressedFileName(PartialFile + "-patched", Target); - if (RemoveFileForBootstrapLinking(Debug, CurrentPackagesFile, PartialFile) == false || - RemoveFileForBootstrapLinking(Debug, CurrentPackagesFile, PatchedFile) == false) + if (RemoveFileForBootstrapLinking(ErrorText, CurrentPackagesFile, PartialFile) == false || + RemoveFileForBootstrapLinking(ErrorText, CurrentPackagesFile, PatchedFile) == false) return false; for (auto const &ext : APT::Configuration::getCompressorExtensions()) { - if (RemoveFileForBootstrapLinking(Debug, CurrentPackagesFile, PartialFile + ext) == false || - RemoveFileForBootstrapLinking(Debug, CurrentPackagesFile, PatchedFile + ext) == false) + if (RemoveFileForBootstrapLinking(ErrorText, CurrentPackagesFile, PartialFile + ext) == false || + RemoveFileForBootstrapLinking(ErrorText, CurrentPackagesFile, PatchedFile + ext) == false) return false; } std::string const Ext = Final.substr(CurrentPackagesFile.length()); std::string const Partial = PartialFile + Ext; if (symlink(Final.c_str(), Partial.c_str()) != 0) { - if (Debug) - std::clog << "Bootstrap-linking for patching " << CurrentPackagesFile - << " by linking " << Final << " to " << Partial << " failed!" << std::endl; + strprintf(ErrorText, "Bootstrap for patching by linking %s to %s failed!", Final.c_str(), Partial.c_str()); return false; } } - std::string indexURI = Desc.URI; - auto const byhashidx = indexURI.find("/by-hash/"); - if (byhashidx != std::string::npos) - indexURI = indexURI.substr(0, byhashidx - strlen(".diff")); - else - { - auto end = indexURI.length() - strlen(".diff/Index"); - if (CurrentCompressionExtension != "uncompressed") - end -= (1 + CurrentCompressionExtension.length()); - indexURI = indexURI.substr(0, end); - } - - if (pdiff_merge == false) - new pkgAcqIndexDiffs(Owner, TransactionManager, Target, UsedMirror, indexURI, available_patches); - else - { - diffs = new std::vector<pkgAcqIndexMergeDiffs*>(available_patches.size()); - for(size_t i = 0; i < available_patches.size(); ++i) - (*diffs)[i] = new pkgAcqIndexMergeDiffs(Owner, TransactionManager, - Target, UsedMirror, indexURI, - available_patches[i], - diffs); - } - - Complete = false; - Status = StatDone; - Dequeue(); return true; } /*}}}*/ @@ -2451,6 +2468,10 @@ void pkgAcqDiffIndex::Failed(string const &Message,pkgAcquire::MethodConfig cons Status = StatDone; ExpectedAdditionalItems = 0; + // queue for final move - this should happen even if we fail + // while parsing (e.g. on sizelimit) and download the complete file. + TransactionManager->TransactionStageCopy(this, DestFile, GetFinalFilename()); + if(Debug) std::clog << "pkgAcqDiffIndex failed: " << Desc.URI << " with " << Message << std::endl << "Falling back to normal index file acquire" << std::endl; @@ -2458,6 +2479,21 @@ void pkgAcqDiffIndex::Failed(string const &Message,pkgAcquire::MethodConfig cons new pkgAcqIndex(Owner, TransactionManager, Target); } /*}}}*/ +bool pkgAcqDiffIndex::VerifyDone(std::string const &Message, pkgAcquire::MethodConfig const * const)/*{{{*/ +{ + string const FinalFile = GetFinalFilename(); + if(StringToBool(LookupTag(Message,"IMS-Hit"),false)) + DestFile = FinalFile; + + if (ParseDiffIndex(DestFile)) + return true; + + Status = StatError; + if (ErrorText.empty()) + ErrorText = "Couldn't parse pdiff index"; + return false; +} + /*}}}*/ void pkgAcqDiffIndex::Done(string const &Message,HashStringList const &Hashes, /*{{{*/ pkgAcquire::MethodConfig const * const Cnf) { @@ -2466,20 +2502,46 @@ void pkgAcqDiffIndex::Done(string const &Message,HashStringList const &Hashes, / Item::Done(Message, Hashes, Cnf); - string const FinalFile = GetFinalFilename(); - if(StringToBool(LookupTag(Message,"IMS-Hit"),false)) - DestFile = FinalFile; - - if(ParseDiffIndex(DestFile) == false) + if (available_patches.empty()) { - Failed("Message: Couldn't parse pdiff index", Cnf); - // queue for final move - this should happen even if we fail - // while parsing (e.g. on sizelimit) and download the complete file. - TransactionManager->TransactionStageCopy(this, DestFile, FinalFile); - return; + // we have the same sha1 as the server so we are done here + if(Debug) + std::clog << "pkgAcqDiffIndex: Package file is up-to-date" << std::endl; + QueueOnIMSHit(); + } + else + { + // we have something, queue the diffs + string::size_type const last_space = Description.rfind(" "); + if(last_space != string::npos) + Description.erase(last_space, Description.size()-last_space); + + std::string indexURI = Desc.URI; + auto const byhashidx = indexURI.find("/by-hash/"); + if (byhashidx != std::string::npos) + indexURI = indexURI.substr(0, byhashidx - strlen(".diff")); + else + { + auto end = indexURI.length() - strlen(".diff/Index"); + if (CurrentCompressionExtension != "uncompressed") + end -= (1 + CurrentCompressionExtension.length()); + indexURI = indexURI.substr(0, end); + } + + if (pdiff_merge == false) + new pkgAcqIndexDiffs(Owner, TransactionManager, Target, UsedMirror, indexURI, available_patches); + else + { + diffs = new std::vector<pkgAcqIndexMergeDiffs*>(available_patches.size()); + for(size_t i = 0; i < available_patches.size(); ++i) + (*diffs)[i] = new pkgAcqIndexMergeDiffs(Owner, TransactionManager, + Target, UsedMirror, indexURI, + available_patches[i], + diffs); + } } - TransactionManager->TransactionStageCopy(this, DestFile, FinalFile); + TransactionManager->TransactionStageCopy(this, DestFile, GetFinalFilename()); Complete = true; Status = StatDone; diff --git a/apt-pkg/acquire-item.h b/apt-pkg/acquire-item.h index 7741dbf22..a5c7d848a 100644 --- a/apt-pkg/acquire-item.h +++ b/apt-pkg/acquire-item.h @@ -20,19 +20,18 @@ #define PKGLIB_ACQUIRE_ITEM_H #include <apt-pkg/acquire.h> -#include <apt-pkg/indexfile.h> #include <apt-pkg/hashes.h> -#include <apt-pkg/weakptr.h> +#include <apt-pkg/indexfile.h> #include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheiterators.h> +#include <apt-pkg/weakptr.h> +#include <map> #include <string> #include <vector> -#include <map> #ifndef APT_8_CLEANER_HEADERS -#include <apt-pkg/sourcelist.h> #include <apt-pkg/pkgrecords.h> +#include <apt-pkg/sourcelist.h> #endif /** \addtogroup acquire @@ -686,6 +685,20 @@ class APT_HIDDEN pkgAcqIndex : public pkgAcqBaseIndex std::string const &Message, pkgAcquire::MethodConfig const * const Cnf); }; /*}}}*/ +struct APT_HIDDEN DiffInfo { /*{{{*/ + /** The filename of the diff. */ + std::string file; + + /** The hashes of the file after the diff is applied */ + HashStringList result_hashes; + + /** The hashes of the diff */ + HashStringList patch_hashes; + + /** The hashes of the compressed diff */ + HashStringList download_hashes; +}; + /*}}}*/ /** \brief An item that is responsible for fetching an index file of {{{ * package list diffs and starting the package list's download. * @@ -699,6 +712,8 @@ class APT_HIDDEN pkgAcqDiffIndex : public pkgAcqIndex { void * const d; std::vector<pkgAcqIndexMergeDiffs*> * diffs; + std::vector<DiffInfo> available_patches; + bool pdiff_merge; protected: /** \brief If \b true, debugging information will be written to std::clog. */ @@ -718,6 +733,7 @@ class APT_HIDDEN pkgAcqDiffIndex : public pkgAcqIndex public: // Specialized action members virtual void Failed(std::string const &Message, pkgAcquire::MethodConfig const * const Cnf) APT_OVERRIDE; + virtual bool VerifyDone(std::string const &Message, pkgAcquire::MethodConfig const * const Cnf) APT_OVERRIDE; virtual void Done(std::string const &Message, HashStringList const &Hashes, pkgAcquire::MethodConfig const * const Cnf) APT_OVERRIDE; virtual std::string DescURI() const APT_OVERRIDE {return Target.URI + "Index";}; @@ -752,20 +768,6 @@ class APT_HIDDEN pkgAcqDiffIndex : public pkgAcqIndex APT_HIDDEN void QueueOnIMSHit() const; }; /*}}}*/ -struct APT_HIDDEN DiffInfo { /*{{{*/ - /** The filename of the diff. */ - std::string file; - - /** The hashes of the file after the diff is applied */ - HashStringList result_hashes; - - /** The hashes of the diff */ - HashStringList patch_hashes; - - /** The hashes of the compressed diff */ - HashStringList download_hashes; -}; - /*}}}*/ /** \brief An item that is responsible for fetching client-merge patches {{{ * that need to be applied to a given package index file. * diff --git a/apt-pkg/acquire-method.cc b/apt-pkg/acquire-method.cc index ab0908014..058ec7945 100644 --- a/apt-pkg/acquire-method.cc +++ b/apt-pkg/acquire-method.cc @@ -18,23 +18,23 @@ #include <config.h> #include <apt-pkg/acquire-method.h> -#include <apt-pkg/error.h> #include <apt-pkg/configuration.h> -#include <apt-pkg/strutl.h> +#include <apt-pkg/error.h> #include <apt-pkg/fileutl.h> #include <apt-pkg/hashes.h> #include <apt-pkg/md5.h> #include <apt-pkg/sha1.h> #include <apt-pkg/sha2.h> +#include <apt-pkg/strutl.h> +#include <iostream> +#include <string> +#include <vector> #include <stdarg.h> +#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> -#include <string> -#include <vector> -#include <iostream> -#include <stdio.h> /*}}}*/ using namespace std; diff --git a/apt-pkg/acquire-worker.cc b/apt-pkg/acquire-worker.cc index c15e7ab4c..4aa55a743 100644 --- a/apt-pkg/acquire-worker.cc +++ b/apt-pkg/acquire-worker.cc @@ -14,27 +14,27 @@ // Include Files /*{{{*/ #include <config.h> -#include <apt-pkg/acquire.h> -#include <apt-pkg/acquire-worker.h> #include <apt-pkg/acquire-item.h> +#include <apt-pkg/acquire-worker.h> +#include <apt-pkg/acquire.h> #include <apt-pkg/configuration.h> #include <apt-pkg/error.h> #include <apt-pkg/fileutl.h> -#include <apt-pkg/strutl.h> #include <apt-pkg/hashes.h> +#include <apt-pkg/strutl.h> #include <algorithm> +#include <iostream> #include <string> #include <vector> -#include <iostream> -#include <sys/stat.h> -#include <stdlib.h> -#include <unistd.h> +#include <sstream> +#include <errno.h> #include <signal.h> #include <stdio.h> -#include <errno.h> -#include <sstream> +#include <stdlib.h> +#include <sys/stat.h> +#include <unistd.h> #include <apti18n.h> /*}}}*/ diff --git a/apt-pkg/acquire-worker.h b/apt-pkg/acquire-worker.h index 42762abe0..8fc686880 100644 --- a/apt-pkg/acquire-worker.h +++ b/apt-pkg/acquire-worker.h @@ -21,9 +21,9 @@ #include <apt-pkg/acquire.h> #include <apt-pkg/weakptr.h> -#include <sys/types.h> #include <string> #include <vector> +#include <sys/types.h> /** \brief A fetch subprocess. * diff --git a/apt-pkg/acquire.cc b/apt-pkg/acquire.cc index b62c50c00..05f22f243 100644 --- a/apt-pkg/acquire.cc +++ b/apt-pkg/acquire.cc @@ -15,35 +15,35 @@ // Include Files /*{{{*/ #include <config.h> -#include <apt-pkg/acquire.h> #include <apt-pkg/acquire-item.h> #include <apt-pkg/acquire-worker.h> +#include <apt-pkg/acquire.h> #include <apt-pkg/configuration.h> #include <apt-pkg/error.h> -#include <apt-pkg/strutl.h> #include <apt-pkg/fileutl.h> +#include <apt-pkg/strutl.h> #include <algorithm> +#include <iomanip> +#include <iostream> +#include <memory> #include <numeric> +#include <sstream> #include <string> #include <vector> -#include <iostream> -#include <sstream> -#include <iomanip> -#include <memory> +#include <dirent.h> +#include <errno.h> +#include <fcntl.h> +#include <grp.h> +#include <pwd.h> #include <stdio.h> #include <stdlib.h> #include <string.h> -#include <unistd.h> -#include <fcntl.h> -#include <pwd.h> -#include <grp.h> -#include <dirent.h> -#include <sys/time.h> #include <sys/select.h> -#include <errno.h> #include <sys/stat.h> +#include <sys/time.h> +#include <unistd.h> #include <apti18n.h> /*}}}*/ @@ -770,42 +770,34 @@ bool pkgAcquire::Clean(string Dir) if(Dir == "/") return _error->Error(_("Clean of %s is not supported"), Dir.c_str()); - DIR *D = opendir(Dir.c_str()); - if (D == 0) + int const dirfd = open(Dir.c_str(), O_RDONLY | O_DIRECTORY | O_CLOEXEC); + if (dirfd == -1) + return _error->Errno("open",_("Unable to read %s"),Dir.c_str()); + DIR * const D = fdopendir(dirfd); + if (D == nullptr) return _error->Errno("opendir",_("Unable to read %s"),Dir.c_str()); - - string StartDir = SafeGetCWD(); - if (chdir(Dir.c_str()) != 0) - { - closedir(D); - return _error->Errno("chdir",_("Unable to change to %s"),Dir.c_str()); - } - - for (struct dirent *Dir = readdir(D); Dir != 0; Dir = readdir(D)) + + for (struct dirent *E = readdir(D); E != nullptr; E = readdir(D)) { - // Skip some files.. - if (strcmp(Dir->d_name,"lock") == 0 || - strcmp(Dir->d_name,"partial") == 0 || - strcmp(Dir->d_name,"lost+found") == 0 || - strcmp(Dir->d_name,".") == 0 || - strcmp(Dir->d_name,"..") == 0) + // Skip some entries + if (strcmp(E->d_name,"lock") == 0 || + strcmp(E->d_name,"partial") == 0 || + strcmp(E->d_name,"lost+found") == 0 || + strcmp(E->d_name,".") == 0 || + strcmp(E->d_name,"..") == 0) continue; - - // Look in the get list - ItemCIterator I = Items.begin(); - for (; I != Items.end(); ++I) - if (flNotDir((*I)->DestFile) == Dir->d_name) - break; - - // Nothing found, nuke it - if (I == Items.end()) - RemoveFile("Clean", Dir->d_name); - }; - + + // Look in the get list and if not found nuke + if (std::any_of(Items.cbegin(), Items.cend(), + [&E](pkgAcquire::Item const * const I) { + return flNotDir(I->DestFile) == E->d_name; + }) == false) + { + RemoveFileAt("pkgAcquire::Clean", dirfd, E->d_name); + } + } closedir(D); - if (chdir(StartDir.c_str()) != 0) - return _error->Errno("chdir",_("Unable to change to %s"),StartDir.c_str()); - return true; + return true; } /*}}}*/ // Acquire::TotalNeeded - Number of bytes to fetch /*{{{*/ @@ -1414,10 +1406,39 @@ void pkgAcquireStatus::Stop() // --------------------------------------------------------------------- /* This is used to get accurate final transfer rate reporting. */ void pkgAcquireStatus::Fetched(unsigned long long Size,unsigned long long Resume) -{ +{ FetchedBytes += Size - Resume; } /*}}}*/ +bool pkgAcquireStatus::ReleaseInfoChanges(metaIndex const * const LastRelease, metaIndex const * const CurrentRelease, std::vector<ReleaseInfoChange> &&Changes)/*{{{*/ +{ + auto const virt = dynamic_cast<pkgAcquireStatus2*>(this); + if (virt != nullptr) + return virt->ReleaseInfoChanges(LastRelease, CurrentRelease, std::move(Changes)); + return ReleaseInfoChangesAsGlobalErrors(std::move(Changes)); +} + /*}}}*/ +bool pkgAcquireStatus::ReleaseInfoChangesAsGlobalErrors(std::vector<ReleaseInfoChange> &&Changes)/*{{{*/ +{ + bool AllOkay = true; + for (auto const &c: Changes) + if (c.DefaultAction) + _error->Notice("%s", c.Message.c_str()); + else + { + _error->Error("%s", c.Message.c_str()); + AllOkay = false; + } + return AllOkay; +} + /*}}}*/ +bool pkgAcquireStatus2::ReleaseInfoChanges(metaIndex const * const, metaIndex const * const, std::vector<ReleaseInfoChange> &&Changes) +{ + return ReleaseInfoChangesAsGlobalErrors(std::move(Changes)); +} +pkgAcquireStatus2::pkgAcquireStatus2() : pkgAcquireStatus() {} +pkgAcquireStatus2::~pkgAcquireStatus2() {} + pkgAcquire::UriIterator::UriIterator(pkgAcquire::Queue *Q) : d(NULL), CurQ(Q), CurItem(0) { diff --git a/apt-pkg/acquire.h b/apt-pkg/acquire.h index 5f1212338..e58aeef65 100644 --- a/apt-pkg/acquire.h +++ b/apt-pkg/acquire.h @@ -65,16 +65,16 @@ #ifndef PKGLIB_ACQUIRE_H #define PKGLIB_ACQUIRE_H +#include <apt-pkg/hashes.h> #include <apt-pkg/macros.h> #include <apt-pkg/weakptr.h> -#include <apt-pkg/hashes.h> #include <string> #include <vector> #include <stddef.h> -#include <sys/time.h> #include <sys/select.h> +#include <sys/time.h> #ifndef APT_10_CLEANER_HEADERS #include <unistd.h> @@ -86,6 +86,7 @@ using std::string; #endif class pkgAcquireStatus; +class metaIndex; /** \brief The core download scheduler. {{{ * @@ -794,7 +795,39 @@ class pkgAcquireStatus * with prejudice. */ virtual bool MediaChange(std::string Media,std::string Drive) = 0; - + + struct ReleaseInfoChange + { + std::string Type; /*!< Type of the change like "Origin", "Codename", "Version", … */ + std::string From; /*!< old value */ + std::string To; /*!< new value */ + std::string Message; /*!< translated message describing the change */ + bool DefaultAction; /*!< true if the change is informational, false if it must be explicitly confirmed */ + }; + /** \brief ask the user for confirmation of changes to infos about a repository + * + * This method should present the user with a choice of accepting the change + * or not and indicate the user opinion via the return value. If DefaultAction is true + * it is acceptable to only notify the user about the change, but to accept the change + * automatically on behalf of the user. + * + * The default implementation will fail if any Change has DefaultAction == false. Regardless of + * success it will print for each change the message attached to it via GlobalError either as an + * error (if DefaultAction == false) or as a notice otherwise. + * + * \b Note: To keep ABI compatibility for now this method isn't marked as + * virtual, but you can derive your class from #pkgAcquireStatus2 which has it + * marked as virtual. TODO on next ABI break: merge both classes. + * + * @param LastRelease can be used to extract further information from the previous Release file + * @param CurrentRelease can be used to extract further information from the current Release file + * @param Changes is an array of changes alongside explanatory messages + * which should be presented in some way to the user. + * @return \b true if all changes are accepted by user, otherwise or if user can't be asked \b false + */ + bool ReleaseInfoChanges(metaIndex const * const LastRelease, metaIndex const * const CurrentRelease, std::vector<ReleaseInfoChange> &&Changes); + APT_HIDDEN static bool ReleaseInfoChangesAsGlobalErrors(std::vector<ReleaseInfoChange> &&Changes); + /** \brief Invoked when an item is confirmed to be up-to-date. * For instance, when an HTTP download is informed that the file on @@ -835,6 +868,14 @@ class pkgAcquireStatus pkgAcquireStatus(); virtual ~pkgAcquireStatus(); }; +class pkgAcquireStatus2: public pkgAcquireStatus +{ +public: + virtual bool ReleaseInfoChanges(metaIndex const * const LastRelease, metaIndex const * const CurrentRelease, std::vector<ReleaseInfoChange> &&Changes); + + pkgAcquireStatus2(); + virtual ~pkgAcquireStatus2(); +}; /*}}}*/ /** @} */ diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc index 95e756c15..643ff8afd 100644 --- a/apt-pkg/algorithms.cc +++ b/apt-pkg/algorithms.cc @@ -17,21 +17,20 @@ #include <config.h> #include <apt-pkg/algorithms.h> -#include <apt-pkg/error.h> #include <apt-pkg/configuration.h> -#include <apt-pkg/edsp.h> #include <apt-pkg/depcache.h> +#include <apt-pkg/dpkgpm.h> +#include <apt-pkg/edsp.h> +#include <apt-pkg/error.h> #include <apt-pkg/packagemanager.h> #include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheiterators.h> #include <apt-pkg/prettyprinters.h> -#include <apt-pkg/dpkgpm.h> -#include <string.h> -#include <string> #include <cstdlib> #include <iostream> +#include <string> #include <utility> +#include <string.h> #include <apti18n.h> /*}}}*/ @@ -52,12 +51,13 @@ pkgSimulate::pkgSimulate(pkgDepCache *Cache) : pkgPackageManager(Cache), group(Sim) { Sim.Init(0); - Flags = new unsigned char[Cache->Head().PackageCount]; - memset(Flags,0,sizeof(*Flags)*Cache->Head().PackageCount); + auto PackageCount = Cache->Head().PackageCount; + Flags = new unsigned char[PackageCount]; + memset(Flags,0,sizeof(*Flags)*PackageCount); // Fake a filename so as not to activate the media swapping string Jnk = "SIMULATE"; - for (unsigned int I = 0; I != Cache->Head().PackageCount; I++) + for (decltype(PackageCount) I = 0; I != PackageCount; ++I) FileNames[I] = Jnk; } /*}}}*/ @@ -399,7 +399,7 @@ bool pkgFixBroken(pkgDepCache &Cache) pkgProblemResolver::pkgProblemResolver(pkgDepCache *pCache) : d(NULL), Cache(*pCache) { // Allocate memory - unsigned long Size = Cache.Head().PackageCount; + auto const Size = Cache.Head().PackageCount; Scores = new int[Size]; Flags = new unsigned char[Size]; memset(Flags,0,sizeof(*Flags)*Size); @@ -434,7 +434,7 @@ int pkgProblemResolver::ScoreSort(Package const *A,Package const *B) /* */ void pkgProblemResolver::MakeScores() { - unsigned long Size = Cache.Head().PackageCount; + auto const Size = Cache.Head().PackageCount; memset(Scores,0,sizeof(*Scores)*Size); // maps to pkgCache::State::VerPriority: @@ -753,7 +753,7 @@ bool pkgProblemResolver::ResolveInternal(bool const BrokenFix) MakeScores(); - unsigned long const Size = Cache.Head().PackageCount; + auto const Size = Cache.Head().PackageCount; /* We have to order the packages so that the broken fixing pass operates from highest score to lowest. This prevents problems when @@ -806,7 +806,7 @@ bool pkgProblemResolver::ResolveInternal(bool const BrokenFix) { if (Debug == true) clog << " Try to Re-Instate (" << Counter << ") " << I.FullName(false) << endl; - unsigned long OldBreaks = Cache.BrokenCount(); + auto const OldBreaks = Cache.BrokenCount(); pkgCache::Version *OldVer = Cache[I].InstallVer; Flags[I->ID] &= ReInstateTried; @@ -1006,7 +1006,7 @@ bool pkgProblemResolver::ResolveInternal(bool const BrokenFix) dangerous as it could trigger new breaks/conflicts… */ if (Debug == true) clog << " Try Installing " << APT::PrettyPkg(&Cache, Start.TargetPkg()) << " before changing " << I.FullName(false) << std::endl; - unsigned long const OldBroken = Cache.BrokenCount(); + auto const OldBroken = Cache.BrokenCount(); Cache.MarkInstall(Start.TargetPkg(), true, 1, false); // FIXME: we should undo the complete MarkInstall process here if (Cache[Start.TargetPkg()].InstBroken() == true || Cache.BrokenCount() > OldBroken) @@ -1211,14 +1211,13 @@ bool pkgProblemResolver::ResolveByKeepInternal() { pkgDepCache::ActionGroup group(Cache); - unsigned long Size = Cache.Head().PackageCount; - MakeScores(); - + /* We have to order the packages so that the broken fixing pass operates from highest score to lowest. This prevents problems when high score packages cause the removal of lower score packages that would cause the removal of even lower score packages. */ + auto Size = Cache.Head().PackageCount; pkgCache::Package **PList = new pkgCache::Package *[Size]; pkgCache::Package **PEnd = PList; for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; ++I) diff --git a/apt-pkg/algorithms.h b/apt-pkg/algorithms.h index 5148ff19d..c5c9f4c69 100644 --- a/apt-pkg/algorithms.h +++ b/apt-pkg/algorithms.h @@ -29,11 +29,9 @@ #ifndef PKGLIB_ALGORITHMS_H #define PKGLIB_ALGORITHMS_H - -#include <apt-pkg/packagemanager.h> #include <apt-pkg/depcache.h> +#include <apt-pkg/packagemanager.h> #include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheiterators.h> #include <iostream> #include <string> @@ -47,8 +45,8 @@ using std::ostream; #ifndef APT_9_CLEANER_HEADERS // include pkg{DistUpgrade,AllUpgrade,MiniizeUpgrade} here for compatibility -#include <apt-pkg/upgrade.h> #include <apt-pkg/update.h> +#include <apt-pkg/upgrade.h> #endif diff --git a/apt-pkg/aptconfiguration.cc b/apt-pkg/aptconfiguration.cc index 0035f70df..405472a72 100644 --- a/apt-pkg/aptconfiguration.cc +++ b/apt-pkg/aptconfiguration.cc @@ -15,20 +15,20 @@ #include <apt-pkg/error.h> #include <apt-pkg/fileutl.h> #include <apt-pkg/macros.h> -#include <apt-pkg/strutl.h> #include <apt-pkg/pkgsystem.h> +#include <apt-pkg/strutl.h> +#include <algorithm> +#include <string> +#include <vector> +#include <ctype.h> #include <dirent.h> -#include <stdio.h> #include <fcntl.h> -#include <ctype.h> #include <stddef.h> +#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> -#include <algorithm> -#include <string> -#include <vector> /*}}}*/ namespace APT { diff --git a/apt-pkg/aptconfiguration.h b/apt-pkg/aptconfiguration.h index fbd9b02e6..6776f96ef 100644 --- a/apt-pkg/aptconfiguration.h +++ b/apt-pkg/aptconfiguration.h @@ -11,9 +11,9 @@ #ifndef APT_CONFIGURATION_H #define APT_CONFIGURATION_H // Include Files /*{{{*/ +#include <limits> #include <string> #include <vector> -#include <limits> /*}}}*/ namespace APT { namespace Configuration { /*{{{*/ diff --git a/apt-pkg/cachefile.cc b/apt-pkg/cachefile.cc index b5f32fc29..0116308e5 100644 --- a/apt-pkg/cachefile.cc +++ b/apt-pkg/cachefile.cc @@ -15,24 +15,24 @@ #include <config.h> #include <apt-pkg/cachefile.h> -#include <apt-pkg/error.h> -#include <apt-pkg/sourcelist.h> -#include <apt-pkg/pkgcachegen.h> #include <apt-pkg/configuration.h> -#include <apt-pkg/policy.h> -#include <apt-pkg/pkgsystem.h> -#include <apt-pkg/fileutl.h> -#include <apt-pkg/progress.h> #include <apt-pkg/depcache.h> +#include <apt-pkg/error.h> +#include <apt-pkg/fileutl.h> +#include <apt-pkg/indexfile.h> #include <apt-pkg/mmap.h> #include <apt-pkg/pkgcache.h> -#include <apt-pkg/indexfile.h> +#include <apt-pkg/pkgcachegen.h> +#include <apt-pkg/pkgsystem.h> +#include <apt-pkg/policy.h> +#include <apt-pkg/progress.h> +#include <apt-pkg/sourcelist.h> -#include <string.h> -#include <unistd.h> +#include <memory> #include <string> #include <vector> -#include <memory> +#include <string.h> +#include <unistd.h> #include <apti18n.h> /*}}}*/ diff --git a/apt-pkg/cachefile.h b/apt-pkg/cachefile.h index e23f37675..097876b3a 100644 --- a/apt-pkg/cachefile.h +++ b/apt-pkg/cachefile.h @@ -21,7 +21,6 @@ #include <apt-pkg/depcache.h> #include <apt-pkg/macros.h> #include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheiterators.h> #ifndef APT_8_CLEANER_HEADERS #include <apt-pkg/acquire.h> diff --git a/apt-pkg/cachefilter.cc b/apt-pkg/cachefilter.cc index cc4cdf73c..4cbe162e9 100644 --- a/apt-pkg/cachefilter.cc +++ b/apt-pkg/cachefilter.cc @@ -9,17 +9,16 @@ #include <apt-pkg/cachefile.h> #include <apt-pkg/cachefilter.h> #include <apt-pkg/error.h> +#include <apt-pkg/macros.h> #include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheiterators.h> #include <apt-pkg/strutl.h> -#include <apt-pkg/macros.h> #include <algorithm> #include <string> #include <unordered_map> -#include <string.h> -#include <regex.h> #include <fnmatch.h> +#include <regex.h> +#include <string.h> #include <apti18n.h> /*}}}*/ diff --git a/apt-pkg/cachefilter.h b/apt-pkg/cachefilter.h index 30a3368e5..8a6c01341 100644 --- a/apt-pkg/cachefilter.h +++ b/apt-pkg/cachefilter.h @@ -7,7 +7,6 @@ #define APT_CACHEFILTER_H // Include Files /*{{{*/ #include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheiterators.h> #include <string> #include <vector> diff --git a/apt-pkg/cacheiterators.h b/apt-pkg/cacheiterators.h index 62d0ab59c..0cb684382 100644 --- a/apt-pkg/cacheiterators.h +++ b/apt-pkg/cacheiterators.h @@ -29,17 +29,19 @@ /*}}}*/ #ifndef PKGLIB_CACHEITERATORS_H #define PKGLIB_CACHEITERATORS_H -#include<apt-pkg/pkgcache.h> -#include<apt-pkg/macros.h> +#ifndef __PKGLIB_IN_PKGCACHE_H +#warning apt-pkg/cacheiterators.h should not be included directly, include apt-pkg/pkgcache.h instead +#endif +#include <apt-pkg/macros.h> -#include<iterator> #include <iosfwd> +#include <iterator> #include <string> #ifdef APT_PKG_EXPOSE_STRING_VIEW #include <apt-pkg/string_view.h> #endif -#include<string.h> +#include <string.h> // abstract Iterator template /*{{{*/ /* This template provides the very basic iterator methods we diff --git a/apt-pkg/cacheset.cc b/apt-pkg/cacheset.cc index f8ab7acb9..92f707cba 100644 --- a/apt-pkg/cacheset.cc +++ b/apt-pkg/cacheset.cc @@ -15,24 +15,23 @@ #include <apt-pkg/cachefile.h> #include <apt-pkg/cachefilter.h> #include <apt-pkg/cacheset.h> -#include <apt-pkg/error.h> -#include <apt-pkg/versionmatch.h> -#include <apt-pkg/pkgrecords.h> -#include <apt-pkg/policy.h> -#include <apt-pkg/cacheiterators.h> #include <apt-pkg/configuration.h> #include <apt-pkg/depcache.h> +#include <apt-pkg/error.h> +#include <apt-pkg/fileutl.h> #include <apt-pkg/macros.h> #include <apt-pkg/pkgcache.h> -#include <apt-pkg/fileutl.h> +#include <apt-pkg/pkgrecords.h> +#include <apt-pkg/policy.h> +#include <apt-pkg/versionmatch.h> -#include <stddef.h> -#include <stdio.h> -#include <string.h> -#include <regex.h> #include <list> #include <string> #include <vector> +#include <regex.h> +#include <stddef.h> +#include <stdio.h> +#include <string.h> #include <apti18n.h> /*}}}*/ diff --git a/apt-pkg/cacheset.h b/apt-pkg/cacheset.h index 1ac61af59..157f6139e 100644 --- a/apt-pkg/cacheset.h +++ b/apt-pkg/cacheset.h @@ -13,23 +13,22 @@ #include <map> #include <set> #if __cplusplus >= 201103L -#include <unordered_set> #include <forward_list> #include <initializer_list> +#include <unordered_set> #endif -#include <list> +#include <algorithm> #include <deque> -#include <vector> -#include <string> #include <iterator> -#include <algorithm> +#include <list> +#include <string> +#include <vector> #include <stddef.h> #include <apt-pkg/error.h> -#include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheiterators.h> #include <apt-pkg/macros.h> +#include <apt-pkg/pkgcache.h> #ifndef APT_8_CLEANER_HEADERS #include <apt-pkg/cachefile.h> diff --git a/apt-pkg/cdrom.cc b/apt-pkg/cdrom.cc index a3248fc17..2dccc6d12 100644 --- a/apt-pkg/cdrom.cc +++ b/apt-pkg/cdrom.cc @@ -2,31 +2,30 @@ */ #include <config.h> -#include <apt-pkg/error.h> -#include <apt-pkg/cdromutl.h> -#include <apt-pkg/strutl.h> -#include <apt-pkg/cdrom.h> #include <apt-pkg/aptconfiguration.h> +#include <apt-pkg/cdrom.h> +#include <apt-pkg/cdromutl.h> #include <apt-pkg/configuration.h> +#include <apt-pkg/error.h> #include <apt-pkg/fileutl.h> #include <apt-pkg/indexcopy.h> +#include <apt-pkg/strutl.h> - -#include <string.h> +#include <algorithm> +#include <fstream> +#include <iostream> #include <iostream> +#include <sstream> #include <string> #include <vector> -#include <sys/stat.h> #include <dirent.h> -#include <unistd.h> -#include <stdio.h> -#include <algorithm> #include <dlfcn.h> -#include <iostream> -#include <sstream> -#include <fstream> +#include <stdio.h> +#include <string.h> +#include <sys/stat.h> +#include <unistd.h> -#include<apti18n.h> +#include <apti18n.h> using namespace std; diff --git a/apt-pkg/cdrom.h b/apt-pkg/cdrom.h index ab1e046bf..7425c09c1 100644 --- a/apt-pkg/cdrom.h +++ b/apt-pkg/cdrom.h @@ -3,8 +3,8 @@ #include <apt-pkg/macros.h> -#include<string> -#include<vector> +#include <string> +#include <vector> #include <stddef.h> diff --git a/apt-pkg/clean.cc b/apt-pkg/clean.cc index fe57c26a2..e9bf73b6c 100644 --- a/apt-pkg/clean.cc +++ b/apt-pkg/clean.cc @@ -8,21 +8,22 @@ ##################################################################### */ /*}}}*/ // Includes /*{{{*/ -#include<config.h> +#include <config.h> +#include <apt-pkg/aptconfiguration.h> #include <apt-pkg/clean.h> -#include <apt-pkg/strutl.h> -#include <apt-pkg/error.h> #include <apt-pkg/configuration.h> -#include <apt-pkg/aptconfiguration.h> +#include <apt-pkg/error.h> #include <apt-pkg/fileutl.h> #include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheiterators.h> +#include <apt-pkg/strutl.h> #include <string> -#include <string.h> #include <dirent.h> +#include <fcntl.h> +#include <string.h> #include <sys/stat.h> +#include <sys/types.h> #include <unistd.h> #include <apti18n.h> @@ -43,17 +44,21 @@ bool pkgArchiveCleaner::Go(std::string Dir,pkgCache &Cache) if (FileExists(Dir) == false) return true; - DIR *D = opendir(Dir.c_str()); - if (D == 0) - return _error->Errno("opendir",_("Unable to read %s"),Dir.c_str()); - - std::string StartDir = SafeGetCWD(); - if (chdir(Dir.c_str()) != 0) + auto const withoutChangingDir = dynamic_cast<pkgArchiveCleaner2*>(this); + int const dirfd = open(Dir.c_str(), O_RDONLY | O_DIRECTORY | O_CLOEXEC); + if (dirfd == -1) + return _error->Errno("open",_("Unable to read %s"),Dir.c_str()); + std::string CWD; + if (withoutChangingDir == nullptr) { - closedir(D); - return _error->Errno("chdir",_("Unable to change to %s"),Dir.c_str()); + CWD = SafeGetCWD(); + if (fchdir(dirfd) != 0) + return _error->Errno("fchdir",_("Unable to change to %s"),Dir.c_str()); } - + DIR * const D = fdopendir(dirfd); + if (D == nullptr) + return _error->Errno("opendir",_("Unable to read %s"),Dir.c_str()); + for (struct dirent *Dir = readdir(D); Dir != 0; Dir = readdir(D)) { // Skip some files.. @@ -65,15 +70,13 @@ bool pkgArchiveCleaner::Go(std::string Dir,pkgCache &Cache) continue; struct stat St; - if (stat(Dir->d_name,&St) != 0) + if (fstatat(dirfd, Dir->d_name,&St, 0) != 0) { _error->Errno("stat",_("Unable to stat %s."),Dir->d_name); closedir(D); - if (chdir(StartDir.c_str()) != 0) - return _error->Errno("chdir", _("Unable to change to %s"), StartDir.c_str()); return false; } - + // Grab the package name const char *I = Dir->d_name; for (; *I != 0 && *I != '_';I++); @@ -87,7 +90,7 @@ bool pkgArchiveCleaner::Go(std::string Dir,pkgCache &Cache) if (*I != '_') continue; std::string Ver = DeQuoteString(std::string(Start,I-Start)); - + // Grab the arch Start = I + 1; for (I = Start; *I != 0 && *I != '.' ;I++); @@ -98,7 +101,7 @@ bool pkgArchiveCleaner::Go(std::string Dir,pkgCache &Cache) // ignore packages of unconfigured architectures if (APT::Configuration::checkArchitecture(Arch) == false) continue; - + // Lookup the package pkgCache::PkgIterator P = Cache.FindPkg(Pkg, Arch); if (P.end() != true) @@ -117,23 +120,29 @@ bool pkgArchiveCleaner::Go(std::string Dir,pkgCache &Cache) IsFetchable = true; break; } - + // See if this version matches the file if (IsFetchable == true && Ver == V.VerStr()) break; } - + // We found a match, keep the file if (V.end() == false) continue; } - - Erase(Dir->d_name,Pkg,Ver,St); - }; - + + if (withoutChangingDir == nullptr) + { + APT_IGNORE_DEPRECATED_PUSH + Erase(Dir->d_name, Pkg, Ver, St); + APT_IGNORE_DEPRECATED_POP + } + else + withoutChangingDir->Erase(dirfd, Dir->d_name, Pkg, Ver, St); + } closedir(D); - if (chdir(StartDir.c_str()) != 0) - return _error->Errno("chdir", _("Unable to change to %s"), StartDir.c_str()); + if (withoutChangingDir == nullptr && chdir(CWD.c_str()) != 0) + return _error->Errno("chdir", _("Unable to change to %s"),Dir.c_str()); return true; } /*}}}*/ diff --git a/apt-pkg/clean.h b/apt-pkg/clean.h index 6cedae086..2ba3932a0 100644 --- a/apt-pkg/clean.h +++ b/apt-pkg/clean.h @@ -16,6 +16,8 @@ #include <string> +#include <apt-pkg/macros.h> + class pkgCache; class pkgArchiveCleaner @@ -25,7 +27,7 @@ class pkgArchiveCleaner protected: - virtual void Erase(const char * /*File*/,std::string /*Pkg*/,std::string /*Ver*/,struct stat & /*St*/) {}; + APT_DEPRECATED_MSG("Use pkgArchiveCleaner2 to avoid CWD expectations and chdir") virtual void Erase(const char * /*File*/,std::string /*Pkg*/,std::string /*Ver*/,struct stat & /*St*/) {}; public: @@ -34,5 +36,15 @@ class pkgArchiveCleaner pkgArchiveCleaner(); virtual ~pkgArchiveCleaner(); }; +// TODO: merge classes and "erase" the old way +class pkgArchiveCleaner2: public pkgArchiveCleaner +{ + friend class pkgArchiveCleaner; +protected: + using pkgArchiveCleaner::Erase; + virtual void Erase(int const dirfd, char const * const File, + std::string const &Pkg,std::string const &Ver, + struct stat const &St) = 0; +}; #endif diff --git a/apt-pkg/contrib/cdromutl.cc b/apt-pkg/contrib/cdromutl.cc index 428ef0161..93bfb9f42 100644 --- a/apt-pkg/contrib/cdromutl.cc +++ b/apt-pkg/contrib/cdromutl.cc @@ -10,26 +10,26 @@ ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ -#include<config.h> +#include <config.h> #include <apt-pkg/cdromutl.h> +#include <apt-pkg/configuration.h> #include <apt-pkg/error.h> -#include <apt-pkg/md5.h> #include <apt-pkg/fileutl.h> -#include <apt-pkg/configuration.h> +#include <apt-pkg/md5.h> #include <apt-pkg/strutl.h> -#include <stdlib.h> -#include <string.h> #include <iostream> #include <string> #include <vector> -#include <sys/statvfs.h> #include <dirent.h> #include <fcntl.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> #include <sys/stat.h> +#include <sys/statvfs.h> #include <unistd.h> -#include <stdio.h> #include <apti18n.h> /*}}}*/ @@ -184,26 +184,32 @@ bool IdentCdrom(string CD,string &Res,unsigned int Version) MD5Summation Hash; bool writable_media = false; + int dirfd = open(CD.c_str(), O_RDONLY | O_DIRECTORY | O_CLOEXEC); + if (dirfd == -1) + return _error->Errno("open",_("Unable to read %s"),CD.c_str()); + // if we are on a writable medium (like a usb-stick) that is just // used like a cdrom don't use "." as it will constantly change, // use .disk instead - if (access(CD.c_str(), W_OK) == 0 && DirectoryExists(CD+string("/.disk"))) + if (faccessat(dirfd, ".", W_OK, 0) == 0) { - writable_media = true; - CD = CD.append("/.disk"); - if (_config->FindB("Debug::aptcdrom",false) == true) - std::clog << "Found writable cdrom, using alternative path: " << CD - << std::endl; + int diskfd = openat(dirfd, "./.disk", O_RDONLY | O_DIRECTORY | O_CLOEXEC, 0); + if (diskfd != -1) + { + close(dirfd); + dirfd = diskfd; + writable_media = true; + CD = CD.append("/.disk"); + if (_config->FindB("Debug::aptcdrom",false) == true) + std::clog << "Found writable cdrom, using alternative path: " << CD + << std::endl; + } } - string StartDir = SafeGetCWD(); - if (chdir(CD.c_str()) != 0) - return _error->Errno("chdir",_("Unable to change to %s"),CD.c_str()); - - DIR *D = opendir("."); - if (D == 0) + DIR * const D = fdopendir(dirfd); + if (D == nullptr) return _error->Errno("opendir",_("Unable to read %s"),CD.c_str()); - + /* Run over the directory, we assume that the reader order will never change as the media is read-only. In theory if the kernel did some sort of wacked caching this might not be true.. */ @@ -222,31 +228,24 @@ bool IdentCdrom(string CD,string &Res,unsigned int Version) else { struct stat Buf; - if (stat(Dir->d_name,&Buf) != 0) + if (fstatat(dirfd, Dir->d_name, &Buf, 0) != 0) continue; strprintf(S, "%lu", (unsigned long)Buf.st_mtime); } Hash.Add(S.c_str()); Hash.Add(Dir->d_name); - }; - - if (chdir(StartDir.c_str()) != 0) { - _error->Errno("chdir",_("Unable to change to %s"),StartDir.c_str()); - closedir(D); - return false; } - closedir(D); // Some stats from the fsys std::string S; if (_config->FindB("Debug::identcdrom",false) == false) { struct statvfs Buf; - if (statvfs(CD.c_str(),&Buf) != 0) + if (fstatvfs(dirfd, &Buf) != 0) return _error->Errno("statfs",_("Failed to stat the cdrom")); - // We use a kilobyte block size to advoid overflow + // We use a kilobyte block size to avoid overflow if (writable_media) { strprintf(S, "%lu", (unsigned long)(Buf.f_blocks*(Buf.f_bsize/1024))); @@ -260,6 +259,7 @@ bool IdentCdrom(string CD,string &Res,unsigned int Version) else strprintf(S, "-%u.debug", Version); + closedir(D); Res = Hash.Result().Value() + S; return true; } diff --git a/apt-pkg/contrib/cmndline.cc b/apt-pkg/contrib/cmndline.cc index 029ec3060..2b8bef2c5 100644 --- a/apt-pkg/contrib/cmndline.cc +++ b/apt-pkg/contrib/cmndline.cc @@ -11,17 +11,17 @@ ##################################################################### */ /*}}}*/ // Include files /*{{{*/ -#include<config.h> +#include <config.h> -#include <apt-pkg/configuration.h> #include <apt-pkg/cmndline.h> +#include <apt-pkg/configuration.h> #include <apt-pkg/error.h> #include <apt-pkg/strutl.h> +#include <string> #include <stddef.h> #include <stdlib.h> #include <string.h> -#include <string> #include <apti18n.h> /*}}}*/ diff --git a/apt-pkg/contrib/configuration.cc b/apt-pkg/contrib/configuration.cc index 78a98d614..442e31dff 100644 --- a/apt-pkg/contrib/configuration.cc +++ b/apt-pkg/contrib/configuration.cc @@ -19,9 +19,9 @@ #include <apt-pkg/configuration.h> #include <apt-pkg/error.h> -#include <apt-pkg/strutl.h> #include <apt-pkg/fileutl.h> #include <apt-pkg/macros.h> +#include <apt-pkg/strutl.h> #include <ctype.h> #include <regex.h> @@ -31,13 +31,13 @@ #include <string.h> #include <algorithm> -#include <iterator> -#include <string> -#include <stack> -#include <vector> #include <fstream> +#include <iterator> #include <sstream> +#include <stack> +#include <string> #include <unordered_map> +#include <vector> #include <apti18n.h> diff --git a/apt-pkg/contrib/configuration.h b/apt-pkg/contrib/configuration.h index 97a01e4cf..8d0835cf5 100644 --- a/apt-pkg/contrib/configuration.h +++ b/apt-pkg/contrib/configuration.h @@ -30,9 +30,9 @@ #include <regex.h> +#include <iostream> #include <string> #include <vector> -#include <iostream> #include <apt-pkg/macros.h> diff --git a/apt-pkg/contrib/error.cc b/apt-pkg/contrib/error.cc index c06ea8364..0233dfd59 100644 --- a/apt-pkg/contrib/error.cc +++ b/apt-pkg/contrib/error.cc @@ -17,17 +17,17 @@ #include <apt-pkg/error.h> -#include <stdarg.h> -#include <stddef.h> -#include <list> +#include <algorithm> +#include <cstring> #include <iostream> +#include <list> +#include <string> #include <errno.h> +#include <stdarg.h> +#include <stddef.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> -#include <string> -#include <cstring> -#include <algorithm> /*}}}*/ @@ -37,20 +37,21 @@ Per-Thread error object is maintained in much the same manner as libc manages errno */ #if defined(_POSIX_THREADS) && defined(HAVE_PTHREAD) - #include <pthread.h> +#include <pthread.h> - static pthread_key_t ErrorKey; - static void ErrorDestroy(void *Obj) {delete (GlobalError *)Obj;}; - static void KeyAlloc() {pthread_key_create(&ErrorKey,ErrorDestroy);}; +static pthread_key_t ErrorKey; +static void ErrorDestroy(void *Obj) { delete (GlobalError *)Obj; }; +static void KeyAlloc() { pthread_key_create(&ErrorKey, ErrorDestroy); }; - GlobalError *_GetErrorObj() { - static pthread_once_t Once = PTHREAD_ONCE_INIT; - pthread_once(&Once,KeyAlloc); +GlobalError *_GetErrorObj() +{ + static pthread_once_t Once = PTHREAD_ONCE_INIT; + pthread_once(&Once, KeyAlloc); - void *Res = pthread_getspecific(ErrorKey); - if (Res == 0) - pthread_setspecific(ErrorKey,Res = new GlobalError); - return (GlobalError *)Res; + void *Res = pthread_getspecific(ErrorKey); + if (Res == 0) + pthread_setspecific(ErrorKey, Res = new GlobalError); + return (GlobalError *)Res; } #else GlobalError *_GetErrorObj() { diff --git a/apt-pkg/contrib/error.h b/apt-pkg/contrib/error.h index b01a5fc1b..74b5cd5cf 100644 --- a/apt-pkg/contrib/error.h +++ b/apt-pkg/contrib/error.h @@ -46,8 +46,8 @@ #include <list> #include <string> -#include <stddef.h> #include <stdarg.h> +#include <stddef.h> class GlobalError /*{{{*/ { diff --git a/apt-pkg/contrib/fileutl.cc b/apt-pkg/contrib/fileutl.cc index e4c40fb4f..630a98ce4 100644 --- a/apt-pkg/contrib/fileutl.cc +++ b/apt-pkg/contrib/fileutl.cc @@ -19,52 +19,52 @@ // Include Files /*{{{*/ #include <config.h> -#include <apt-pkg/fileutl.h> -#include <apt-pkg/strutl.h> -#include <apt-pkg/error.h> -#include <apt-pkg/sptr.h> #include <apt-pkg/aptconfiguration.h> #include <apt-pkg/configuration.h> +#include <apt-pkg/error.h> +#include <apt-pkg/fileutl.h> #include <apt-pkg/macros.h> +#include <apt-pkg/sptr.h> +#include <apt-pkg/strutl.h> -#include <ctype.h> -#include <stdarg.h> -#include <stddef.h> -#include <sys/select.h> -#include <time.h> -#include <string> -#include <vector> +#include <cstdio> #include <cstdlib> #include <cstring> -#include <cstdio> #include <iostream> -#include <unistd.h> -#include <fcntl.h> -#include <sys/stat.h> -#include <sys/time.h> -#include <sys/wait.h> +#include <string> +#include <vector> +#include <ctype.h> #include <dirent.h> -#include <signal.h> #include <errno.h> +#include <fcntl.h> #include <glob.h> -#include <pwd.h> #include <grp.h> +#include <pwd.h> +#include <signal.h> +#include <stdarg.h> +#include <stddef.h> +#include <sys/select.h> +#include <sys/stat.h> +#include <sys/time.h> +#include <sys/wait.h> +#include <time.h> +#include <unistd.h> -#include <set> #include <algorithm> #include <memory> +#include <set> #ifdef HAVE_ZLIB - #include <zlib.h> +#include <zlib.h> #endif #ifdef HAVE_BZ2 - #include <bzlib.h> +#include <bzlib.h> #endif #ifdef HAVE_LZMA - #include <lzma.h> +#include <lzma.h> #endif #ifdef HAVE_LZ4 - #include <lz4frame.h> +#include <lz4frame.h> #endif #include <endian.h> #include <stdint.h> @@ -178,6 +178,21 @@ bool CopyFile(FileFd &From,FileFd &To) return true; } /*}}}*/ +bool RemoveFileAt(char const * const Function, int const dirfd, std::string const &FileName)/*{{{*/ +{ + if (FileName == "/dev/null") + return true; + errno = 0; + if (unlinkat(dirfd, FileName.c_str(), 0) != 0) + { + if (errno == ENOENT) + return true; + + return _error->WarningE(Function,_("Problem unlinking the file %s"), FileName.c_str()); + } + return true; +} + /*}}}*/ bool RemoveFile(char const * const Function, std::string const &FileName)/*{{{*/ { if (FileName == "/dev/null") @@ -2832,7 +2847,7 @@ std::string GetTempDir(std::string const &User) FileFd* GetTempFile(std::string const &Prefix, bool ImmediateUnlink, FileFd * const TmpFd) /*{{{*/ { char fn[512]; - FileFd * const Fd = TmpFd == NULL ? new FileFd() : TmpFd; + FileFd * const Fd = TmpFd == nullptr ? new FileFd() : TmpFd; std::string const tempdir = GetTempDir(); snprintf(fn, sizeof(fn), "%s/%s.XXXXXX", @@ -2843,12 +2858,16 @@ FileFd* GetTempFile(std::string const &Prefix, bool ImmediateUnlink, FileFd * co if (fd < 0) { _error->Errno("GetTempFile",_("Unable to mkstemp %s"), fn); - return NULL; + if (TmpFd == nullptr) + delete Fd; + return nullptr; } if (!Fd->OpenDescriptor(fd, FileFd::ReadWrite, FileFd::None, true)) { _error->Errno("GetTempFile",_("Unable to write to %s"),fn); - return NULL; + if (TmpFd == nullptr) + delete Fd; + return nullptr; } return Fd; } diff --git a/apt-pkg/contrib/fileutl.h b/apt-pkg/contrib/fileutl.h index dddeb70f5..5e857b5c8 100644 --- a/apt-pkg/contrib/fileutl.h +++ b/apt-pkg/contrib/fileutl.h @@ -21,12 +21,12 @@ #ifndef PKGLIB_FILEUTL_H #define PKGLIB_FILEUTL_H -#include <apt-pkg/macros.h> #include <apt-pkg/aptconfiguration.h> +#include <apt-pkg/macros.h> +#include <set> #include <string> #include <vector> -#include <set> #include <time.h> #include <zlib.h> @@ -161,6 +161,7 @@ class FileFd bool RunScripts(const char *Cnf); bool CopyFile(FileFd &From,FileFd &To); bool RemoveFile(char const * const Function, std::string const &FileName); +bool RemoveFileAt(char const * const Function, int const dirfd, std::string const &FileName); int GetLock(std::string File,bool Errors = true); bool FileExists(std::string File); bool RealFileExists(std::string File); diff --git a/apt-pkg/contrib/gpgv.cc b/apt-pkg/contrib/gpgv.cc index cdf9481cb..cc1fbc5aa 100644 --- a/apt-pkg/contrib/gpgv.cc +++ b/apt-pkg/contrib/gpgv.cc @@ -1,21 +1,21 @@ // -*- mode: cpp; mode: fold -*- // Include Files /*{{{*/ -#include<config.h> +#include <config.h> -#include<apt-pkg/configuration.h> -#include<apt-pkg/error.h> -#include<apt-pkg/strutl.h> -#include<apt-pkg/fileutl.h> -#include<apt-pkg/gpgv.h> +#include <apt-pkg/configuration.h> +#include <apt-pkg/error.h> +#include <apt-pkg/fileutl.h> +#include <apt-pkg/gpgv.h> +#include <apt-pkg/strutl.h> #include <errno.h> +#include <fcntl.h> +#include <stddef.h> #include <stdio.h> -#include <string.h> #include <stdlib.h> -#include <fcntl.h> +#include <string.h> #include <sys/wait.h> #include <unistd.h> -#include <stddef.h> #include <algorithm> #include <fstream> diff --git a/apt-pkg/contrib/hashes.cc b/apt-pkg/contrib/hashes.cc index 662c2bf8b..5a1d356f1 100644 --- a/apt-pkg/contrib/hashes.cc +++ b/apt-pkg/contrib/hashes.cc @@ -13,19 +13,19 @@ // Include Files /*{{{*/ #include <config.h> -#include <apt-pkg/hashes.h> -#include <apt-pkg/fileutl.h> #include <apt-pkg/configuration.h> +#include <apt-pkg/fileutl.h> +#include <apt-pkg/hashes.h> #include <apt-pkg/md5.h> #include <apt-pkg/sha1.h> #include <apt-pkg/sha2.h> -#include <stddef.h> #include <algorithm> -#include <unistd.h> -#include <stdlib.h> -#include <string> #include <iostream> +#include <string> +#include <stddef.h> +#include <stdlib.h> +#include <unistd.h> /*}}}*/ const char * HashString::_SupportedHashes[] = @@ -339,7 +339,7 @@ bool Hashes::AddFD(int const Fd,unsigned long long Size) bool const ToEOF = (Size == UntilEOF); while (Size != 0 || ToEOF) { - unsigned long long n = sizeof(Buf); + decltype(Size) n = sizeof(Buf); if (!ToEOF) n = std::min(Size, n); ssize_t const Res = read(Fd,Buf,n); if (Res < 0 || (!ToEOF && Res != (ssize_t) n)) // error, or short read @@ -363,9 +363,9 @@ bool Hashes::AddFD(FileFd &Fd,unsigned long long Size) bool const ToEOF = (Size == 0); while (Size != 0 || ToEOF) { - unsigned long long n = sizeof(Buf); + decltype(Size) n = sizeof(Buf); if (!ToEOF) n = std::min(Size, n); - unsigned long long a = 0; + decltype(Size) a = 0; if (Fd.Read(Buf, n, &a) == false) // error return false; if (ToEOF == false) diff --git a/apt-pkg/contrib/hashes.h b/apt-pkg/contrib/hashes.h index 1fe0afc00..1f8f45cb1 100644 --- a/apt-pkg/contrib/hashes.h +++ b/apt-pkg/contrib/hashes.h @@ -13,11 +13,10 @@ #ifndef APTPKG_HASHES_H #define APTPKG_HASHES_H - +#include <apt-pkg/macros.h> #include <apt-pkg/md5.h> #include <apt-pkg/sha1.h> #include <apt-pkg/sha2.h> -#include <apt-pkg/macros.h> #include <cstring> #include <string> diff --git a/apt-pkg/contrib/hashsum.cc b/apt-pkg/contrib/hashsum.cc index 25ccc187d..e8e86e92c 100644 --- a/apt-pkg/contrib/hashsum.cc +++ b/apt-pkg/contrib/hashsum.cc @@ -3,9 +3,9 @@ #include <apt-pkg/fileutl.h> +#include "hashsum_template.h" #include <algorithm> #include <unistd.h> -#include "hashsum_template.h" // Summation::AddFD - Add content of file into the checksum /*{{{*/ // --------------------------------------------------------------------- diff --git a/apt-pkg/contrib/hashsum_template.h b/apt-pkg/contrib/hashsum_template.h index e5032d02f..2594f6aeb 100644 --- a/apt-pkg/contrib/hashsum_template.h +++ b/apt-pkg/contrib/hashsum_template.h @@ -10,9 +10,8 @@ #ifndef APTPKG_HASHSUM_TEMPLATE_H #define APTPKG_HASHSUM_TEMPLATE_H - -#include <string> #include <cstring> +#include <string> #ifdef APT_PKG_EXPOSE_STRING_VIEW #include <apt-pkg/string_view.h> #endif diff --git a/apt-pkg/contrib/macros.h b/apt-pkg/contrib/macros.h index bc1f523ea..5e22a195d 100644 --- a/apt-pkg/contrib/macros.h +++ b/apt-pkg/contrib/macros.h @@ -165,7 +165,7 @@ // See also buildlib/libversion.mak #define APT_PKG_MAJOR 5 #define APT_PKG_MINOR 0 -#define APT_PKG_RELEASE 1 +#define APT_PKG_RELEASE 2 #define APT_PKG_ABI ((APT_PKG_MAJOR * 100) + APT_PKG_MINOR) #endif diff --git a/apt-pkg/contrib/md5.h b/apt-pkg/contrib/md5.h index a286f092a..ad0d31374 100644 --- a/apt-pkg/contrib/md5.h +++ b/apt-pkg/contrib/md5.h @@ -28,9 +28,9 @@ #include "hashsum_template.h" #ifndef APT_10_CLEANER_HEADERS -#include <string> -#include <cstring> #include <algorithm> +#include <cstring> +#include <string> #endif #ifndef APT_8_CLEANER_HEADERS using std::string; diff --git a/apt-pkg/contrib/mmap.cc b/apt-pkg/contrib/mmap.cc index cd24a2808..100796cdf 100644 --- a/apt-pkg/contrib/mmap.cc +++ b/apt-pkg/contrib/mmap.cc @@ -19,17 +19,17 @@ #define _DEFAULT_SOURCE #include <config.h> -#include <apt-pkg/mmap.h> #include <apt-pkg/error.h> #include <apt-pkg/fileutl.h> #include <apt-pkg/macros.h> +#include <apt-pkg/mmap.h> +#include <cstring> #include <string> +#include <errno.h> +#include <stdlib.h> #include <sys/mman.h> #include <unistd.h> -#include <stdlib.h> -#include <errno.h> -#include <cstring> #include <apti18n.h> /*}}}*/ diff --git a/apt-pkg/contrib/mmap.h b/apt-pkg/contrib/mmap.h index 62e64b95e..df02b1b85 100644 --- a/apt-pkg/contrib/mmap.h +++ b/apt-pkg/contrib/mmap.h @@ -25,7 +25,6 @@ #ifndef PKGLIB_MMAP_H #define PKGLIB_MMAP_H - #include <string> #ifndef APT_8_CLEANER_HEADERS diff --git a/apt-pkg/contrib/netrc.cc b/apt-pkg/contrib/netrc.cc index 8840de72c..88027c989 100644 --- a/apt-pkg/contrib/netrc.cc +++ b/apt-pkg/contrib/netrc.cc @@ -17,12 +17,12 @@ #include <apt-pkg/strutl.h> #include <iostream> +#include <pwd.h> +#include <stddef.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> -#include <stddef.h> -#include <pwd.h> #include "netrc.h" diff --git a/apt-pkg/contrib/progress.cc b/apt-pkg/contrib/progress.cc index b93018154..7c5b15e6b 100644 --- a/apt-pkg/contrib/progress.cc +++ b/apt-pkg/contrib/progress.cc @@ -10,15 +10,15 @@ // Include Files /*{{{*/ #include <config.h> -#include <apt-pkg/progress.h> -#include <apt-pkg/error.h> #include <apt-pkg/configuration.h> +#include <apt-pkg/error.h> +#include <apt-pkg/progress.h> -#include <sys/time.h> -#include <string> +#include <cstring> #include <iostream> +#include <string> #include <stdio.h> -#include <cstring> +#include <sys/time.h> #include <apti18n.h> /*}}}*/ diff --git a/apt-pkg/contrib/progress.h b/apt-pkg/contrib/progress.h index 427b1bd35..43c84da71 100644 --- a/apt-pkg/contrib/progress.h +++ b/apt-pkg/contrib/progress.h @@ -21,10 +21,9 @@ #ifndef PKGLIB_PROGRESS_H #define PKGLIB_PROGRESS_H - +#include <apt-pkg/macros.h> #include <string> #include <sys/time.h> -#include <apt-pkg/macros.h> #ifndef APT_8_CLEANER_HEADERS using std::string; diff --git a/apt-pkg/contrib/proxy.cc b/apt-pkg/contrib/proxy.cc index 1b7a92c68..86582e1aa 100644 --- a/apt-pkg/contrib/proxy.cc +++ b/apt-pkg/contrib/proxy.cc @@ -7,12 +7,14 @@ ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ -#include<apt-pkg/configuration.h> -#include<apt-pkg/error.h> -#include<apt-pkg/fileutl.h> -#include<apt-pkg/strutl.h> +#include <apt-pkg/configuration.h> +#include <apt-pkg/error.h> +#include <apt-pkg/fileutl.h> +#include <apt-pkg/strutl.h> -#include<iostream> +#include <algorithm> +#include <iostream> +#include <fcntl.h> #include <unistd.h> #include "proxy.h" @@ -21,6 +23,13 @@ // AutoDetectProxy - auto detect proxy /*{{{*/ // --------------------------------------------------------------------- /* */ +static std::vector<std::string> CompatibleProxies(URI const &URL) +{ + if (URL.Access == "http" || URL.Access == "https") + return {"http", "https", "socks5h"}; + return {URL.Access}; +} + bool AutoDetectProxy(URI &URL) { // we support both http/https debug options @@ -41,6 +50,9 @@ bool AutoDetectProxy(URI &URL) if (Debug) std::clog << "Using auto proxy detect command: " << AutoDetectProxyCmd << std::endl; + if (faccessat(AT_FDCWD, AutoDetectProxyCmd.c_str(), R_OK | X_OK, AT_EACCESS) != 0) + return _error->Errno("access", "ProxyAutoDetect command '%s' can not be executed!", AutoDetectProxyCmd.c_str()); + std::string const urlstring = URL; std::vector<const char *> Args; Args.push_back(AutoDetectProxyCmd.c_str()); @@ -70,7 +82,14 @@ bool AutoDetectProxy(URI &URL) if (Debug) std::clog << "auto detect command returned: '" << cleanedbuf << "'" << std::endl; - if (strstr(cleanedbuf, URL.Access.c_str()) == cleanedbuf || strcmp(cleanedbuf, "DIRECT") == 0) + auto compatibleTypes = CompatibleProxies(URL); + bool compatible = strcmp(cleanedbuf, "DIRECT") == 0 || + compatibleTypes.end() != std::find_if(compatibleTypes.begin(), + compatibleTypes.end(), [cleanedbuf](std::string &compat) { + return strstr(cleanedbuf, compat.c_str()) == cleanedbuf; + }); + + if (compatible) _config->Set("Acquire::"+URL.Access+"::proxy::"+URL.Host, cleanedbuf); return true; diff --git a/apt-pkg/contrib/sha1.h b/apt-pkg/contrib/sha1.h index 3387c1cfd..967e2eae0 100644 --- a/apt-pkg/contrib/sha1.h +++ b/apt-pkg/contrib/sha1.h @@ -17,9 +17,9 @@ #include "hashsum_template.h" #ifndef APT_10_CLEANER_HEADERS -#include <string> -#include <cstring> #include <algorithm> +#include <cstring> +#include <string> #endif #ifndef APT_8_CLEANER_HEADERS using std::string; diff --git a/apt-pkg/contrib/sha2.h b/apt-pkg/contrib/sha2.h index 164840d3b..d8127c66b 100644 --- a/apt-pkg/contrib/sha2.h +++ b/apt-pkg/contrib/sha2.h @@ -16,12 +16,12 @@ #include <cstring> -#include "sha2_internal.h" #include "hashsum_template.h" +#include "sha2_internal.h" #ifndef APT_10_CLEANER_HEADERS -#include <string> #include <algorithm> +#include <string> #include <stdint.h> #endif diff --git a/apt-pkg/contrib/sha2_internal.cc b/apt-pkg/contrib/sha2_internal.cc index f70b7b17d..419b92aca 100644 --- a/apt-pkg/contrib/sha2_internal.cc +++ b/apt-pkg/contrib/sha2_internal.cc @@ -33,10 +33,10 @@ */ #include <config.h> -#include <endian.h> -#include <string.h> /* memcpy()/memset() or bcopy()/bzero() */ -#include <assert.h> /* assert() */ #include "sha2_internal.h" +#include <assert.h> /* assert() */ +#include <endian.h> +#include <string.h> /* memcpy()/memset() or bcopy()/bzero() */ /* * ASSERT NOTE: @@ -93,7 +93,7 @@ /* * Define the followingsha2_* types to types of the correct length on - * the native archtecture. Most BSD systems and Linux define u_intXX_t + * the native architecture. Most BSD systems and Linux define u_intXX_t * types. Machines with very recent ANSI C headers, can use the * uintXX_t definintions from inttypes.h by defining SHA2_USE_INTTYPES_H * during compile or in the sha.h header file. diff --git a/apt-pkg/contrib/sha2_internal.h b/apt-pkg/contrib/sha2_internal.h index 1b82d965d..fa4bfc4df 100644 --- a/apt-pkg/contrib/sha2_internal.h +++ b/apt-pkg/contrib/sha2_internal.h @@ -44,8 +44,8 @@ #ifdef SHA2_USE_INTTYPES_H -#include <stddef.h> #include <inttypes.h> +#include <stddef.h> #endif /* SHA2_USE_INTTYPES_H */ diff --git a/apt-pkg/contrib/srvrec.cc b/apt-pkg/contrib/srvrec.cc index 327e59937..930989bfc 100644 --- a/apt-pkg/contrib/srvrec.cc +++ b/apt-pkg/contrib/srvrec.cc @@ -10,8 +10,8 @@ #include <netdb.h> -#include <netinet/in.h> #include <arpa/nameser.h> +#include <netinet/in.h> #include <resolv.h> #include <time.h> @@ -22,10 +22,8 @@ #include <apt-pkg/error.h> #include <apt-pkg/strutl.h> - #include "srvrec.h" - bool SrvRec::operator==(SrvRec const &other) const { return (std::tie(target, priority, weight, port) == diff --git a/apt-pkg/contrib/srvrec.h b/apt-pkg/contrib/srvrec.h index 01b810281..e22b7a1c6 100644 --- a/apt-pkg/contrib/srvrec.h +++ b/apt-pkg/contrib/srvrec.h @@ -9,9 +9,9 @@ #ifndef SRVREC_H #define SRVREC_H -#include <arpa/nameser.h> -#include <vector> #include <string> +#include <vector> +#include <arpa/nameser.h> class SrvRec { diff --git a/apt-pkg/contrib/string_view.h b/apt-pkg/contrib/string_view.h index c504edd27..536744e32 100644 --- a/apt-pkg/contrib/string_view.h +++ b/apt-pkg/contrib/string_view.h @@ -11,9 +11,9 @@ #if !defined(APT_STRINGVIEW_H) && defined(APT_PKG_EXPOSE_STRING_VIEW) #define APT_STRINGVIEW_H -#include <string.h> -#include <string> #include <apt-pkg/macros.h> +#include <string> +#include <string.h> namespace APT { diff --git a/apt-pkg/contrib/strutl.cc b/apt-pkg/contrib/strutl.cc index 88113f7a4..964f0d6c6 100644 --- a/apt-pkg/contrib/strutl.cc +++ b/apt-pkg/contrib/strutl.cc @@ -17,30 +17,30 @@ // Includes /*{{{*/ #include <config.h> -#include <apt-pkg/strutl.h> -#include <apt-pkg/fileutl.h> #include <apt-pkg/error.h> +#include <apt-pkg/fileutl.h> +#include <apt-pkg/strutl.h> -#include <array> #include <algorithm> +#include <array> #include <iomanip> #include <locale> #include <sstream> -#include <string> #include <sstream> +#include <string> #include <vector> +#include <ctype.h> +#include <errno.h> +#include <iconv.h> +#include <regex.h> +#include <stdarg.h> #include <stddef.h> +#include <stdio.h> #include <stdlib.h> -#include <time.h> -#include <ctype.h> #include <string.h> -#include <stdio.h> +#include <time.h> #include <unistd.h> -#include <regex.h> -#include <errno.h> -#include <stdarg.h> -#include <iconv.h> #include <apti18n.h> /*}}}*/ diff --git a/apt-pkg/contrib/strutl.h b/apt-pkg/contrib/strutl.h index 73f27aa6c..cc39521da 100644 --- a/apt-pkg/contrib/strutl.h +++ b/apt-pkg/contrib/strutl.h @@ -16,17 +16,16 @@ #ifndef STRUTL_H #define STRUTL_H - +#include <cstring> +#include <iostream> #include <limits> #include <string> -#include <cstring> #include <vector> -#include <iostream> #ifdef APT_PKG_EXPOSE_STRING_VIEW #include <apt-pkg/string_view.h> #endif -#include <time.h> #include <stddef.h> +#include <time.h> #include "macros.h" diff --git a/apt-pkg/deb/debindexfile.cc b/apt-pkg/deb/debindexfile.cc index c55847305..6aa3af162 100644 --- a/apt-pkg/deb/debindexfile.cc +++ b/apt-pkg/deb/debindexfile.cc @@ -11,23 +11,23 @@ // Include Files /*{{{*/ #include <config.h> +#include <apt-pkg/configuration.h> #include <apt-pkg/debindexfile.h> -#include <apt-pkg/debsrcrecords.h> #include <apt-pkg/deblistparser.h> #include <apt-pkg/debrecords.h> -#include <apt-pkg/configuration.h> +#include <apt-pkg/debsrcrecords.h> #include <apt-pkg/error.h> #include <apt-pkg/fileutl.h> #include <apt-pkg/indexfile.h> #include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheiterators.h> #include <apt-pkg/pkgrecords.h> #include <apt-pkg/srcrecords.h> -#include <stdio.h> #include <iostream> -#include <string> +#include <memory> #include <sstream> +#include <string> +#include <stdio.h> #include <sys/stat.h> #include <unistd.h> @@ -66,7 +66,7 @@ bool debSourcesIndex::OpenListFile(FileFd &, std::string const &) } pkgCacheListParser * debSourcesIndex::CreateListParser(FileFd &) { - return NULL; + return nullptr; } uint8_t debSourcesIndex::GetIndexFlags() const { @@ -128,16 +128,10 @@ pkgCacheListParser * debTranslationsIndex::CreateListParser(FileFd &Pkg) if (Pkg.IsOpen() == false) return nullptr; _error->PushToStack(); - pkgCacheListParser * const Parser = new debTranslationsParser(&Pkg); + std::unique_ptr<pkgCacheListParser> Parser(new debTranslationsParser(&Pkg)); bool const newError = _error->PendingError(); _error->MergeWithStack(); - if (newError) - { - delete Parser; - return nullptr; - } - else - return Parser; + return newError ? nullptr : Parser.release(); } /*}}}*/ // dpkg/status Index /*{{{*/ @@ -162,16 +156,10 @@ pkgCacheListParser * debStatusIndex::CreateListParser(FileFd &Pkg) if (Pkg.IsOpen() == false) return nullptr; _error->PushToStack(); - pkgCacheListParser * const Parser = new debStatusListParser(&Pkg); + std::unique_ptr<pkgCacheListParser> Parser(new debStatusListParser(&Pkg)); bool const newError = _error->PendingError(); _error->MergeWithStack(); - if (newError) - { - delete Parser; - return nullptr; - } - else - return Parser; + return newError ? nullptr : Parser.release(); } /*}}}*/ // DebPkgFile Index - a single .deb file as an index /*{{{*/ @@ -244,16 +232,10 @@ pkgCacheListParser * debDebPkgFileIndex::CreateListParser(FileFd &Pkg) if (Pkg.IsOpen() == false) return nullptr; _error->PushToStack(); - pkgCacheListParser * const Parser = new debDebFileParser(&Pkg, DebFile); + std::unique_ptr<pkgCacheListParser> Parser(new debDebFileParser(&Pkg, DebFile)); bool const newError = _error->PendingError(); _error->MergeWithStack(); - if (newError) - { - delete Parser; - return nullptr; - } - else - return Parser; + return newError ? nullptr : Parser.release(); } uint8_t debDebPkgFileIndex::GetIndexFlags() const { diff --git a/apt-pkg/deb/debindexfile.h b/apt-pkg/deb/debindexfile.h index 3652f631c..40a9e4bbc 100644 --- a/apt-pkg/deb/debindexfile.h +++ b/apt-pkg/deb/debindexfile.h @@ -16,7 +16,6 @@ #define PKGLIB_DEBINDEXFILE_H #include <apt-pkg/indexfile.h> -#include <apt-pkg/cacheiterators.h> #include <apt-pkg/pkgcache.h> #include <apt-pkg/srcrecords.h> diff --git a/apt-pkg/deb/deblistparser.cc b/apt-pkg/deb/deblistparser.cc index 4e61f0fc2..378988a1c 100644 --- a/apt-pkg/deb/deblistparser.cc +++ b/apt-pkg/deb/deblistparser.cc @@ -12,26 +12,25 @@ // Include Files /*{{{*/ #include <config.h> -#include <apt-pkg/deblistparser.h> -#include <apt-pkg/error.h> -#include <apt-pkg/configuration.h> -#include <apt-pkg/cachefilter.h> #include <apt-pkg/aptconfiguration.h> -#include <apt-pkg/strutl.h> +#include <apt-pkg/cachefilter.h> +#include <apt-pkg/configuration.h> #include <apt-pkg/crc-16.h> +#include <apt-pkg/deblistparser.h> +#include <apt-pkg/error.h> +#include <apt-pkg/macros.h> #include <apt-pkg/md5.h> #include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheiterators.h> -#include <apt-pkg/tagfile.h> +#include <apt-pkg/strutl.h> #include <apt-pkg/tagfile-keys.h> -#include <apt-pkg/macros.h> +#include <apt-pkg/tagfile.h> -#include <stddef.h> -#include <string.h> #include <algorithm> #include <string> #include <vector> #include <ctype.h> +#include <stddef.h> +#include <string.h> /*}}}*/ using std::string; @@ -372,6 +371,11 @@ unsigned short debListParser::VersionHash() string to make that not matter. */ for (; Start != End; ++Start) { + // Strip away 0: epochs from input + if (*Start == '0' && Start[1] == ':') { + Start++; // Skip the : + continue; // Skip the 0 + } if (isspace_ascii(*Start) != 0 || *Start == '=') continue; Result = AddCRC16Byte(Result, tolower_ascii_unsafe(*Start)); diff --git a/apt-pkg/deb/deblistparser.h b/apt-pkg/deb/deblistparser.h index 39f42915c..8d7efc746 100644 --- a/apt-pkg/deb/deblistparser.h +++ b/apt-pkg/deb/deblistparser.h @@ -11,11 +11,11 @@ #ifndef PKGLIB_DEBLISTPARSER_H #define PKGLIB_DEBLISTPARSER_H -#include <apt-pkg/pkgcachegen.h> -#include <apt-pkg/tagfile.h> +#include <apt-pkg/macros.h> #include <apt-pkg/md5.h> #include <apt-pkg/pkgcache.h> -#include <apt-pkg/macros.h> +#include <apt-pkg/pkgcachegen.h> +#include <apt-pkg/tagfile.h> #include <string> #include <vector> diff --git a/apt-pkg/deb/debmetaindex.cc b/apt-pkg/deb/debmetaindex.cc index cba00aa8e..a0adf85be 100644 --- a/apt-pkg/deb/debmetaindex.cc +++ b/apt-pkg/deb/debmetaindex.cc @@ -1,30 +1,30 @@ #include <config.h> -#include <apt-pkg/error.h> -#include <apt-pkg/debmetaindex.h> -#include <apt-pkg/debindexfile.h> -#include <apt-pkg/strutl.h> -#include <apt-pkg/fileutl.h> #include <apt-pkg/acquire-item.h> -#include <apt-pkg/configuration.h> #include <apt-pkg/aptconfiguration.h> -#include <apt-pkg/sourcelist.h> +#include <apt-pkg/configuration.h> +#include <apt-pkg/debindexfile.h> +#include <apt-pkg/debmetaindex.h> +#include <apt-pkg/error.h> +#include <apt-pkg/fileutl.h> +#include <apt-pkg/gpgv.h> #include <apt-pkg/hashes.h> +#include <apt-pkg/macros.h> #include <apt-pkg/metaindex.h> #include <apt-pkg/pkgcachegen.h> +#include <apt-pkg/sourcelist.h> +#include <apt-pkg/strutl.h> #include <apt-pkg/tagfile.h> -#include <apt-pkg/gpgv.h> -#include <apt-pkg/macros.h> +#include <algorithm> #include <map> +#include <sstream> #include <string> #include <utility> #include <vector> -#include <algorithm> -#include <sstream> -#include <sys/stat.h> #include <string.h> +#include <sys/stat.h> #include <apti18n.h> @@ -51,6 +51,7 @@ class APT_HIDDEN debReleaseIndexPrivate /*{{{*/ std::vector<std::string> Architectures; std::vector<std::string> NoSupportForAll; + std::vector<std::string> SupportedComponents; std::map<std::string, std::string> const ReleaseOptions; debReleaseIndexPrivate(std::map<std::string, std::string> const &Options) : CheckValidUntil(metaIndex::TRI_UNSET), ValidUntilMin(0), ValidUntilMax(0), ReleaseOptions(Options) {} @@ -392,8 +393,12 @@ bool debReleaseIndex::Load(std::string const &Filename, std::string * const Erro // FIXME: find better tag name SupportsAcquireByHash = Section.FindB("Acquire-By-Hash", false); + SetOrigin(Section.FindS("Origin")); + SetLabel(Section.FindS("Label")); + SetVersion(Section.FindS("Version")); Suite = Section.FindS("Suite"); Codename = Section.FindS("Codename"); + SetReleaseNotes(Section.FindS("Release-Notes")); { std::string const archs = Section.FindS("Architectures"); if (archs.empty() == false) @@ -404,6 +409,29 @@ bool debReleaseIndex::Load(std::string const &Filename, std::string * const Erro if (targets.empty() == false) d->NoSupportForAll = VectorizeString(targets, ' '); } + for (auto const &comp: VectorizeString(Section.FindS("Components"), ' ')) + { + if (comp.empty()) + continue; + auto const pos = comp.find_last_of('/'); + if (pos != std::string::npos) // e.g. security.debian.org uses this style + d->SupportedComponents.push_back(comp.substr(pos + 1)); + d->SupportedComponents.push_back(std::move(comp)); + } + { + decltype(pkgCache::ReleaseFile::Flags) flags = 0; + Section.FindFlag("NotAutomatic", flags, pkgCache::Flag::NotAutomatic); + signed short defaultpin = 500; + if ((flags & pkgCache::Flag::NotAutomatic) == pkgCache::Flag::NotAutomatic) + { + Section.FindFlag("ButAutomaticUpgrades", flags, pkgCache::Flag::ButAutomaticUpgrades); + if ((flags & pkgCache::Flag::ButAutomaticUpgrades) == pkgCache::Flag::ButAutomaticUpgrades) + defaultpin = 100; + else + defaultpin = 1; + } + SetDefaultPin(defaultpin); + } bool FoundHashSum = false; bool FoundStrongHashSum = false; @@ -461,7 +489,6 @@ bool debReleaseIndex::Load(std::string const &Filename, std::string * const Erro if (CheckValidUntil == true) { - std::string const Label = Section.FindS("Label"); std::string const StrValidUntil = Section.FindS("Valid-Until"); // if we have a Valid-Until header in the Release file, use it as default @@ -474,6 +501,7 @@ bool debReleaseIndex::Load(std::string const &Filename, std::string * const Erro return false; } } + auto const Label = GetLabel(); // get the user settings for this archive and use what expires earlier time_t MaxAge = d->ValidUntilMax; if (MaxAge == 0) @@ -733,6 +761,13 @@ bool debReleaseIndex::IsArchitectureAllSupportedFor(IndexTarget const &target) c return std::find(d->NoSupportForAll.begin(), d->NoSupportForAll.end(), target.Option(IndexTarget::CREATED_BY)) == d->NoSupportForAll.end(); } /*}}}*/ +bool debReleaseIndex::HasSupportForComponent(std::string const &component) const/*{{{*/ +{ + if (d->SupportedComponents.empty()) + return true; + return std::find(d->SupportedComponents.begin(), d->SupportedComponents.end(), component) != d->SupportedComponents.end(); +} + /*}}}*/ std::vector <pkgIndexFile *> *debReleaseIndex::GetIndexFiles() /*{{{*/ { if (Indexes != NULL) diff --git a/apt-pkg/deb/debmetaindex.h b/apt-pkg/deb/debmetaindex.h index f903617f7..5a97cfc78 100644 --- a/apt-pkg/deb/debmetaindex.h +++ b/apt-pkg/deb/debmetaindex.h @@ -1,8 +1,8 @@ #ifndef PKGLIB_DEBMETAINDEX_H #define PKGLIB_DEBMETAINDEX_H -#include <apt-pkg/metaindex.h> #include <apt-pkg/macros.h> +#include <apt-pkg/metaindex.h> #include <map> #include <string> @@ -61,6 +61,7 @@ class APT_HIDDEN debReleaseIndex : public metaIndex virtual bool IsTrusted() const APT_OVERRIDE; bool IsArchitectureSupported(std::string const &arch) const; bool IsArchitectureAllSupportedFor(IndexTarget const &target) const; + bool HasSupportForComponent(std::string const &component) const; void AddComponent(std::string const &sourcesEntry, bool const isSrc, std::string const &Name, diff --git a/apt-pkg/deb/debrecords.cc b/apt-pkg/deb/debrecords.cc index a132f34a6..bc4a378eb 100644 --- a/apt-pkg/deb/debrecords.cc +++ b/apt-pkg/deb/debrecords.cc @@ -10,22 +10,21 @@ // Include Files /*{{{*/ #include <config.h> -#include <apt-pkg/debrecords.h> -#include <apt-pkg/debindexfile.h> -#include <apt-pkg/strutl.h> #include <apt-pkg/aptconfiguration.h> +#include <apt-pkg/debindexfile.h> +#include <apt-pkg/debrecords.h> +#include <apt-pkg/error.h> #include <apt-pkg/fileutl.h> -#include <apt-pkg/cacheiterators.h> #include <apt-pkg/pkgcache.h> +#include <apt-pkg/strutl.h> #include <apt-pkg/tagfile.h> -#include <apt-pkg/error.h> -#include <string.h> #include <algorithm> #include <sstream> #include <string> #include <vector> #include <langinfo.h> +#include <string.h> #include <apti18n.h> /*}}}*/ diff --git a/apt-pkg/deb/debrecords.h b/apt-pkg/deb/debrecords.h index ae75a2b78..828c2b93b 100644 --- a/apt-pkg/deb/debrecords.h +++ b/apt-pkg/deb/debrecords.h @@ -14,10 +14,10 @@ #ifndef PKGLIB_DEBRECORDS_H #define PKGLIB_DEBRECORDS_H -#include <apt-pkg/pkgrecords.h> -#include <apt-pkg/tagfile.h> #include <apt-pkg/fileutl.h> #include <apt-pkg/pkgcache.h> +#include <apt-pkg/pkgrecords.h> +#include <apt-pkg/tagfile.h> #include <string> diff --git a/apt-pkg/deb/debsrcrecords.cc b/apt-pkg/deb/debsrcrecords.cc index d664b609e..0368817c2 100644 --- a/apt-pkg/deb/debsrcrecords.cc +++ b/apt-pkg/deb/debsrcrecords.cc @@ -11,22 +11,22 @@ // Include Files /*{{{*/ #include <config.h> +#include <apt-pkg/aptconfiguration.h> #include <apt-pkg/deblistparser.h> #include <apt-pkg/debsrcrecords.h> #include <apt-pkg/error.h> -#include <apt-pkg/strutl.h> -#include <apt-pkg/aptconfiguration.h> +#include <apt-pkg/gpgv.h> +#include <apt-pkg/hashes.h> #include <apt-pkg/srcrecords.h> +#include <apt-pkg/strutl.h> #include <apt-pkg/tagfile.h> -#include <apt-pkg/hashes.h> -#include <apt-pkg/gpgv.h> -#include <ctype.h> -#include <stdlib.h> -#include <string.h> #include <algorithm> #include <string> #include <vector> +#include <ctype.h> +#include <stdlib.h> +#include <string.h> /*}}}*/ using std::max; diff --git a/apt-pkg/deb/debsrcrecords.h b/apt-pkg/deb/debsrcrecords.h index 850040cf5..349e66ba2 100644 --- a/apt-pkg/deb/debsrcrecords.h +++ b/apt-pkg/deb/debsrcrecords.h @@ -11,13 +11,13 @@ #ifndef PKGLIB_DEBSRCRECORDS_H #define PKGLIB_DEBSRCRECORDS_H +#include <apt-pkg/fileutl.h> #include <apt-pkg/srcrecords.h> #include <apt-pkg/tagfile.h> -#include <apt-pkg/fileutl.h> -#include <stddef.h> #include <string> #include <vector> +#include <stddef.h> class pkgIndexFile; diff --git a/apt-pkg/deb/debsystem.cc b/apt-pkg/deb/debsystem.cc index 899f7328b..3ad25ba05 100644 --- a/apt-pkg/deb/debsystem.cc +++ b/apt-pkg/deb/debsystem.cc @@ -12,30 +12,29 @@ // Include Files /*{{{*/ #include <config.h> +#include <apt-pkg/configuration.h> +#include <apt-pkg/debindexfile.h> #include <apt-pkg/debsystem.h> #include <apt-pkg/debversion.h> -#include <apt-pkg/debindexfile.h> #include <apt-pkg/dpkgpm.h> -#include <apt-pkg/configuration.h> #include <apt-pkg/error.h> #include <apt-pkg/fileutl.h> #include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheiterators.h> #include <algorithm> -#include <ctype.h> -#include <stdlib.h> -#include <string.h> #include <string> #include <vector> -#include <unistd.h> +#include <ctype.h> #include <dirent.h> #include <errno.h> -#include <sys/types.h> +#include <fcntl.h> +#include <stdlib.h> +#include <string.h> #include <sys/stat.h> +#include <sys/types.h> #include <sys/wait.h> -#include <fcntl.h> +#include <unistd.h> #include <apti18n.h> /*}}}*/ diff --git a/apt-pkg/deb/debsystem.h b/apt-pkg/deb/debsystem.h index 5185c92d8..9fdecb42f 100644 --- a/apt-pkg/deb/debsystem.h +++ b/apt-pkg/deb/debsystem.h @@ -10,9 +10,8 @@ #ifndef PKGLIB_DEBSYSTEM_H #define PKGLIB_DEBSYSTEM_H -#include <apt-pkg/pkgsystem.h> #include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheiterators.h> +#include <apt-pkg/pkgsystem.h> #include <vector> class Configuration; diff --git a/apt-pkg/deb/debversion.cc b/apt-pkg/deb/debversion.cc index 48462c6a2..9fe2fd6b3 100644 --- a/apt-pkg/deb/debversion.cc +++ b/apt-pkg/deb/debversion.cc @@ -15,9 +15,9 @@ #include <apt-pkg/debversion.h> #include <apt-pkg/pkgcache.h> -#include <string.h> -#include <stdlib.h> #include <ctype.h> +#include <stdlib.h> +#include <string.h> /*}}}*/ debVersioningSystem debVS; diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc index 80bee03dd..58599193e 100644 --- a/apt-pkg/deb/dpkgpm.cc +++ b/apt-pkg/deb/dpkgpm.cc @@ -11,20 +11,20 @@ #include <apt-pkg/cachefile.h> #include <apt-pkg/configuration.h> +#include <apt-pkg/debsystem.h> #include <apt-pkg/depcache.h> #include <apt-pkg/dpkgpm.h> -#include <apt-pkg/debsystem.h> #include <apt-pkg/error.h> #include <apt-pkg/fileutl.h> #include <apt-pkg/install-progress.h> -#include <apt-pkg/packagemanager.h> -#include <apt-pkg/strutl.h> -#include <apt-pkg/statechanges.h> -#include <apt-pkg/cacheiterators.h> #include <apt-pkg/macros.h> +#include <apt-pkg/packagemanager.h> #include <apt-pkg/pkgcache.h> +#include <apt-pkg/statechanges.h> +#include <apt-pkg/strutl.h> #include <apt-pkg/version.h> +#include <dirent.h> #include <errno.h> #include <fcntl.h> #include <grp.h> @@ -37,9 +37,8 @@ #include <sys/select.h> #include <sys/stat.h> #include <sys/time.h> -#include <sys/wait.h> #include <sys/types.h> -#include <dirent.h> +#include <sys/wait.h> #include <termios.h> #include <time.h> #include <unistd.h> @@ -49,14 +48,14 @@ #include <cstring> #include <iostream> #include <map> +#include <numeric> #include <set> +#include <sstream> #include <string> #include <type_traits> -#include <utility> #include <unordered_set> +#include <utility> #include <vector> -#include <sstream> -#include <numeric> #include <apti18n.h> /*}}}*/ diff --git a/apt-pkg/deb/dpkgpm.h b/apt-pkg/deb/dpkgpm.h index d1c2bcf41..324551387 100644 --- a/apt-pkg/deb/dpkgpm.h +++ b/apt-pkg/deb/dpkgpm.h @@ -10,14 +10,14 @@ #ifndef PKGLIB_DPKGPM_H #define PKGLIB_DPKGPM_H +#include <apt-pkg/macros.h> #include <apt-pkg/packagemanager.h> #include <apt-pkg/pkgcache.h> -#include <apt-pkg/macros.h> -#include <vector> #include <map> -#include <stdio.h> #include <string> +#include <vector> +#include <stdio.h> #ifndef APT_10_CLEANER_HEADERS #include <apt-pkg/init.h> diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc index f3615302e..efe26dee3 100644 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@ -8,34 +8,33 @@ ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ -#include<config.h> +#include <config.h> +#include <apt-pkg/aptconfiguration.h> +#include <apt-pkg/cachefile.h> +#include <apt-pkg/cacheset.h> +#include <apt-pkg/configuration.h> #include <apt-pkg/depcache.h> -#include <apt-pkg/versionmatch.h> -#include <apt-pkg/version.h> #include <apt-pkg/error.h> #include <apt-pkg/fileutl.h> -#include <apt-pkg/strutl.h> -#include <apt-pkg/configuration.h> -#include <apt-pkg/aptconfiguration.h> -#include <apt-pkg/tagfile.h> -#include <apt-pkg/progress.h> -#include <apt-pkg/cacheset.h> +#include <apt-pkg/macros.h> #include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheiterators.h> #include <apt-pkg/prettyprinters.h> -#include <apt-pkg/cachefile.h> -#include <apt-pkg/macros.h> +#include <apt-pkg/progress.h> +#include <apt-pkg/strutl.h> +#include <apt-pkg/tagfile.h> +#include <apt-pkg/version.h> +#include <apt-pkg/versionmatch.h> -#include <stdio.h> -#include <string.h> +#include <algorithm> +#include <iostream> #include <list> +#include <set> #include <string> #include <utility> #include <vector> -#include <algorithm> -#include <iostream> -#include <set> +#include <stdio.h> +#include <string.h> #include <sys/stat.h> @@ -1783,7 +1782,7 @@ bool pkgDepCache::Policy::IsImportantDep(DepIterator const &Dep) const return true; // we support a special mode to only install-recommends for certain // sections - // FIXME: this is a meant as a temporarly solution until the + // FIXME: this is a meant as a temporary solution until the // recommends are cleaned up const char *sec = Dep.ParentVer().Section(); if (sec && ConfigValueInSubTree("APT::Install-Recommends-Sections", sec)) diff --git a/apt-pkg/depcache.h b/apt-pkg/depcache.h index 1ab86644d..87b42b7ca 100644 --- a/apt-pkg/depcache.h +++ b/apt-pkg/depcache.h @@ -38,20 +38,19 @@ #define PKGLIB_DEPCACHE_H #include <apt-pkg/configuration.h> -#include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheiterators.h> #include <apt-pkg/macros.h> +#include <apt-pkg/pkgcache.h> #include <stddef.h> -#include <memory> #include <list> +#include <memory> #include <string> #include <utility> #ifndef APT_8_CLEANER_HEADERS -#include <apt-pkg/progress.h> #include <apt-pkg/error.h> +#include <apt-pkg/progress.h> #endif #ifndef APT_10_CLEANER_HEADERS #include <set> diff --git a/apt-pkg/edsp.cc b/apt-pkg/edsp.cc index a2520441b..2e39be377 100644 --- a/apt-pkg/edsp.cc +++ b/apt-pkg/edsp.cc @@ -8,27 +8,26 @@ #include <config.h> #include <apt-pkg/algorithms.h> -#include <apt-pkg/error.h> #include <apt-pkg/cacheset.h> #include <apt-pkg/depcache.h> +#include <apt-pkg/edsp.h> +#include <apt-pkg/error.h> +#include <apt-pkg/fileutl.h> +#include <apt-pkg/packagemanager.h> #include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheiterators.h> +#include <apt-pkg/pkgsystem.h> #include <apt-pkg/prettyprinters.h> -#include <apt-pkg/packagemanager.h> #include <apt-pkg/progress.h> -#include <apt-pkg/fileutl.h> -#include <apt-pkg/edsp.h> -#include <apt-pkg/tagfile.h> -#include <apt-pkg/strutl.h> #include <apt-pkg/string_view.h> -#include <apt-pkg/pkgsystem.h> +#include <apt-pkg/strutl.h> +#include <apt-pkg/tagfile.h> -#include <sys/stat.h> #include <ctype.h> #include <stddef.h> +#include <stdio.h> #include <string.h> +#include <sys/stat.h> #include <unistd.h> -#include <stdio.h> #include <array> #include <limits> @@ -396,7 +395,7 @@ bool EDSP::WriteScenario(pkgDepCache &Cache, FILE* output, OpProgress *Progress) { if (Progress != NULL) Progress->SubProgress(Cache.Head().VersionCount, _("Send scenario to solver")); - unsigned long p = 0; + decltype(Cache.Head().VersionCount) p = 0; std::vector<std::string> archs = APT::Configuration::getArchitectures(); for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); Pkg.end() == false; ++Pkg) { @@ -420,7 +419,7 @@ bool EDSP::WriteScenario(pkgDepCache &Cache, FileFd &output, OpProgress *Progres { if (Progress != NULL) Progress->SubProgress(Cache.Head().VersionCount, _("Send scenario to solver")); - unsigned long p = 0; + decltype(Cache.Head().VersionCount) p = 0; bool Okay = output.Failed() == false; std::vector<std::string> archs = APT::Configuration::getArchitectures(); for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); Pkg.end() == false && likely(Okay); ++Pkg) @@ -450,7 +449,7 @@ bool EDSP::WriteLimitedScenario(pkgDepCache &Cache, FILE* output, { if (Progress != NULL) Progress->SubProgress(Cache.Head().VersionCount, _("Send scenario to solver")); - unsigned long p = 0; + decltype(Cache.Head().PackageCount) p = 0; for (APT::PackageSet::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg, ++p) for (pkgCache::VerIterator Ver = Pkg.VersionList(); Ver.end() == false; ++Ver) { @@ -472,7 +471,7 @@ bool EDSP::WriteLimitedScenario(pkgDepCache &Cache, FileFd &output, { if (Progress != NULL) Progress->SubProgress(Cache.Head().VersionCount, _("Send scenario to solver")); - unsigned long p = 0; + decltype(Cache.Head().PackageCount) p = 0; bool Okay = output.Failed() == false; for (auto Pkg = Cache.PkgBegin(); Pkg.end() == false && likely(Okay); ++Pkg, ++p) { @@ -502,7 +501,7 @@ bool EDSP::WriteRequest(pkgDepCache &Cache, FILE* output, bool const Upgrade, { if (Progress != NULL) Progress->SubProgress(Cache.Head().PackageCount, _("Send request to solver")); - unsigned long p = 0; + decltype(Cache.Head().PackageCount) p = 0; string del, inst; for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); Pkg.end() == false; ++Pkg, ++p) { @@ -556,7 +555,7 @@ bool EDSP::WriteRequest(pkgDepCache &Cache, FileFd &output, { if (Progress != NULL) Progress->SubProgress(Cache.Head().PackageCount, _("Send request to solver")); - unsigned long p = 0; + decltype(Cache.Head().PackageCount) p = 0; string del, inst; for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); Pkg.end() == false; ++Pkg, ++p) { @@ -618,8 +617,8 @@ bool EDSP::ReadResponse(int const input, pkgDepCache &Cache, OpProgress *Progres In theory we could use the offset as ID, but then VersionCount couldn't be used to create other versionmappings anymore and it would be too easy for a (buggy) solver to segfault APT… */ - unsigned long long const VersionCount = Cache.Head().VersionCount; - unsigned long VerIdx[VersionCount]; + auto VersionCount = Cache.Head().VersionCount; + decltype(VersionCount) VerIdx[VersionCount]; for (pkgCache::PkgIterator P = Cache.PkgBegin(); P.end() == false; ++P) { for (pkgCache::VerIterator V = P.VersionList(); V.end() == false; ++V) VerIdx[V->ID] = V.Index(); @@ -675,11 +674,11 @@ bool EDSP::ReadResponse(int const input, pkgDepCache &Cache, OpProgress *Progres continue; } - size_t const id = section.FindULL(type.c_str(), VersionCount); + decltype(VersionCount) const id = section.FindULL(type.c_str(), VersionCount); if (id == VersionCount) { _error->Warning("Unable to parse %s request with id value '%s'!", type.c_str(), section.FindS(type.c_str()).c_str()); continue; - } else if (id > Cache.Head().VersionCount) { + } else if (id > VersionCount) { _error->Warning("ID value '%s' in %s request stanza is to high to refer to a known version!", section.FindS(type.c_str()).c_str(), type.c_str()); continue; } @@ -1163,7 +1162,7 @@ bool EIPP::WriteRequest(pkgDepCache &Cache, FileFd &output, /*{{{*/ { if (Progress != NULL) Progress->SubProgress(Cache.Head().PackageCount, _("Send request to planner")); - unsigned long p = 0; + decltype(Cache.Head().PackageCount) p = 0; string del, inst, reinst; for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); Pkg.end() == false; ++Pkg, ++p) { @@ -1253,7 +1252,7 @@ bool EIPP::WriteScenario(pkgDepCache &Cache, FileFd &output, OpProgress * const { if (Progress != NULL) Progress->SubProgress(Cache.Head().PackageCount, _("Send scenario to planner")); - unsigned long p = 0; + decltype(Cache.Head().PackageCount) p = 0; bool Okay = output.Failed() == false; std::vector<std::string> archs = APT::Configuration::getArchitectures(); std::vector<bool> pkgset(Cache.Head().PackageCount, false); @@ -1328,8 +1327,8 @@ bool EIPP::ReadResponse(int const input, pkgPackageManager * const PM, OpProgres In theory we could use the offset as ID, but then VersionCount couldn't be used to create other versionmappings anymore and it would be too easy for a (buggy) solver to segfault APT… */ - unsigned long long const VersionCount = PM->Cache.Head().VersionCount; - unsigned long VerIdx[VersionCount]; + auto VersionCount = PM->Cache.Head().VersionCount; + decltype(VersionCount) VerIdx[VersionCount]; for (pkgCache::PkgIterator P = PM->Cache.PkgBegin(); P.end() == false; ++P) { for (pkgCache::VerIterator V = P.VersionList(); V.end() == false; ++V) VerIdx[V->ID] = V.Index(); @@ -1384,11 +1383,11 @@ bool EIPP::ReadResponse(int const input, pkgPackageManager * const PM, OpProgres if (type == nullptr) continue; - size_t const id = section.FindULL(type, VersionCount); + decltype(VersionCount) const id = section.FindULL(type, VersionCount); if (id == VersionCount) { _error->Warning("Unable to parse %s request with id value '%s'!", type, section.FindS(type).c_str()); continue; - } else if (id > PM->Cache.Head().VersionCount) { + } else if (id > VersionCount) { _error->Warning("ID value '%s' in %s request stanza is to high to refer to a known version!", section.FindS(type).c_str(), type); continue; } diff --git a/apt-pkg/edsp.h b/apt-pkg/edsp.h index 2c9082ed3..2f18d76eb 100644 --- a/apt-pkg/edsp.h +++ b/apt-pkg/edsp.h @@ -10,9 +10,8 @@ #define PKGLIB_EDSP_H #include <apt-pkg/cacheset.h> -#include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheiterators.h> #include <apt-pkg/macros.h> +#include <apt-pkg/pkgcache.h> #include <stdio.h> diff --git a/apt-pkg/edsp/edspindexfile.cc b/apt-pkg/edsp/edspindexfile.cc index 042a88cf9..1a8af89f0 100644 --- a/apt-pkg/edsp/edspindexfile.cc +++ b/apt-pkg/edsp/edspindexfile.cc @@ -16,9 +16,10 @@ #include <apt-pkg/pkgcache.h> #include <apt-pkg/pkgrecords.h> +#include <memory> +#include <string> #include <stddef.h> #include <unistd.h> -#include <string> /*}}}*/ // EDSP-like Index /*{{{*/ @@ -61,12 +62,12 @@ std::string edspIndex::GetComponent() const pkgCacheListParser * edspIndex::CreateListParser(FileFd &Pkg) { if (Pkg.IsOpen() == false) - return NULL; + return nullptr; _error->PushToStack(); - pkgCacheListParser * const Parser = new edspListParser(&Pkg); + std::unique_ptr<pkgCacheListParser> Parser(new edspListParser(&Pkg)); bool const newError = _error->PendingError(); _error->MergeWithStack(); - return newError ? NULL : Parser; + return newError ? nullptr : Parser.release(); } /*}}}*/ // EIPP Index /*{{{*/ @@ -80,12 +81,12 @@ std::string eippIndex::GetComponent() const pkgCacheListParser * eippIndex::CreateListParser(FileFd &Pkg) { if (Pkg.IsOpen() == false) - return NULL; + return nullptr; _error->PushToStack(); - pkgCacheListParser * const Parser = new eippListParser(&Pkg); + std::unique_ptr<pkgCacheListParser> Parser(new eippListParser(&Pkg)); bool const newError = _error->PendingError(); _error->MergeWithStack(); - return newError ? NULL : Parser; + return newError ? nullptr : Parser.release(); } /*}}}*/ diff --git a/apt-pkg/edsp/edsplistparser.cc b/apt-pkg/edsp/edsplistparser.cc index 4119639a6..b118e127d 100644 --- a/apt-pkg/edsp/edsplistparser.cc +++ b/apt-pkg/edsp/edsplistparser.cc @@ -12,15 +12,14 @@ #include <config.h> #include <apt-pkg/configuration.h> +#include <apt-pkg/deblistparser.h> #include <apt-pkg/edsplistparser.h> +#include <apt-pkg/fileutl.h> #include <apt-pkg/md5.h> -#include <apt-pkg/deblistparser.h> #include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheiterators.h> -#include <apt-pkg/tagfile.h> -#include <apt-pkg/fileutl.h> #include <apt-pkg/pkgsystem.h> #include <apt-pkg/string_view.h> +#include <apt-pkg/tagfile.h> #include <array> diff --git a/apt-pkg/edsp/edsplistparser.h b/apt-pkg/edsp/edsplistparser.h index 4904b6567..0fcc3f5fd 100644 --- a/apt-pkg/edsp/edsplistparser.h +++ b/apt-pkg/edsp/edsplistparser.h @@ -12,15 +12,15 @@ #define PKGLIB_EDSPLISTPARSER_H #include <apt-pkg/deblistparser.h> +#include <apt-pkg/fileutl.h> #include <apt-pkg/md5.h> #include <apt-pkg/pkgcache.h> -#include <apt-pkg/fileutl.h> #include <string> #ifndef APT_8_CLEANER_HEADERS -#include <apt-pkg/pkgcachegen.h> #include <apt-pkg/indexfile.h> +#include <apt-pkg/pkgcachegen.h> #include <apt-pkg/tagfile.h> #endif diff --git a/apt-pkg/edsp/edspsystem.cc b/apt-pkg/edsp/edspsystem.cc index 1ceb21a17..47f5e06d5 100644 --- a/apt-pkg/edsp/edspsystem.cc +++ b/apt-pkg/edsp/edspsystem.cc @@ -15,9 +15,8 @@ #include <apt-pkg/debversion.h> #include <apt-pkg/edspindexfile.h> #include <apt-pkg/edspsystem.h> -#include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheiterators.h> #include <apt-pkg/fileutl.h> +#include <apt-pkg/pkgcache.h> #include <stddef.h> #include <stdlib.h> diff --git a/apt-pkg/edsp/edspsystem.h b/apt-pkg/edsp/edspsystem.h index c0c9526b5..af8bcf128 100644 --- a/apt-pkg/edsp/edspsystem.h +++ b/apt-pkg/edsp/edspsystem.h @@ -10,9 +10,8 @@ #ifndef PKGLIB_EDSPSYSTEM_H #define PKGLIB_EDSPSYSTEM_H -#include <apt-pkg/pkgsystem.h> -#include <apt-pkg/cacheiterators.h> #include <apt-pkg/pkgcache.h> +#include <apt-pkg/pkgsystem.h> #include <memory> #include <vector> diff --git a/apt-pkg/indexcopy.cc b/apt-pkg/indexcopy.cc index ca5c42cb7..11d2e934e 100644 --- a/apt-pkg/indexcopy.cc +++ b/apt-pkg/indexcopy.cc @@ -10,28 +10,28 @@ ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ -#include<config.h> +#include <config.h> -#include <apt-pkg/error.h> -#include <apt-pkg/progress.h> -#include <apt-pkg/strutl.h> -#include <apt-pkg/fileutl.h> #include <apt-pkg/aptconfiguration.h> -#include <apt-pkg/configuration.h> -#include <apt-pkg/tagfile.h> -#include <apt-pkg/metaindex.h> #include <apt-pkg/cdrom.h> +#include <apt-pkg/configuration.h> +#include <apt-pkg/debmetaindex.h> +#include <apt-pkg/error.h> +#include <apt-pkg/fileutl.h> #include <apt-pkg/gpgv.h> #include <apt-pkg/hashes.h> -#include <apt-pkg/debmetaindex.h> +#include <apt-pkg/metaindex.h> +#include <apt-pkg/progress.h> +#include <apt-pkg/strutl.h> +#include <apt-pkg/tagfile.h> #include <iostream> -#include <unistd.h> -#include <sys/stat.h> +#include <sstream> #include <stdio.h> #include <stdlib.h> #include <string.h> -#include <sstream> +#include <sys/stat.h> +#include <unistd.h> #include "indexcopy.h" #include <apti18n.h> diff --git a/apt-pkg/indexfile.cc b/apt-pkg/indexfile.cc index 934943205..492f29c5a 100644 --- a/apt-pkg/indexfile.cc +++ b/apt-pkg/indexfile.cc @@ -8,31 +8,30 @@ ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ -#include<config.h> +#include <config.h> +#include <apt-pkg/aptconfiguration.h> #include <apt-pkg/configuration.h> -#include <apt-pkg/indexfile.h> +#include <apt-pkg/deblistparser.h> #include <apt-pkg/error.h> #include <apt-pkg/fileutl.h> -#include <apt-pkg/aptconfiguration.h> +#include <apt-pkg/indexfile.h> +#include <apt-pkg/macros.h> #include <apt-pkg/pkgcache.h> #include <apt-pkg/pkgcachegen.h> -#include <apt-pkg/cacheiterators.h> +#include <apt-pkg/progress.h> #include <apt-pkg/srcrecords.h> #include <apt-pkg/strutl.h> -#include <apt-pkg/progress.h> -#include <apt-pkg/deblistparser.h> -#include <apt-pkg/macros.h> #include <apt-pkg/debindexfile.h> #include <sys/stat.h> -#include <string> -#include <vector> #include <clocale> #include <cstring> #include <memory> +#include <string> +#include <vector> /*}}}*/ // Global list of Item supported @@ -338,16 +337,10 @@ pkgCacheListParser * pkgDebianIndexFile::CreateListParser(FileFd &Pkg) if (Pkg.IsOpen() == false) return nullptr; _error->PushToStack(); - pkgCacheListParser * const Parser = new debListParser(&Pkg); + std::unique_ptr<pkgCacheListParser> Parser(new debListParser(&Pkg)); bool const newError = _error->PendingError(); _error->MergeWithStack(); - if (newError) - { - delete Parser; - return nullptr; - } - else - return Parser; + return newError ? nullptr : Parser.release(); } bool pkgDebianIndexFile::Merge(pkgCacheGenerator &Gen,OpProgress * const Prog) { diff --git a/apt-pkg/indexfile.h b/apt-pkg/indexfile.h index 046216ab2..10b15fde4 100644 --- a/apt-pkg/indexfile.h +++ b/apt-pkg/indexfile.h @@ -21,11 +21,10 @@ #ifndef PKGLIB_INDEXFILE_H #define PKGLIB_INDEXFILE_H -#include <apt-pkg/srcrecords.h> -#include <apt-pkg/pkgrecords.h> -#include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheiterators.h> #include <apt-pkg/macros.h> +#include <apt-pkg/pkgcache.h> +#include <apt-pkg/pkgrecords.h> +#include <apt-pkg/srcrecords.h> #include <map> #include <string> diff --git a/apt-pkg/init.cc b/apt-pkg/init.cc index 00d991027..af4e6faa0 100644 --- a/apt-pkg/init.cc +++ b/apt-pkg/init.cc @@ -8,23 +8,23 @@ ##################################################################### */ /*}}}*/ // Include files /*{{{*/ -#include<config.h> +#include <config.h> -#include <apt-pkg/init.h> -#include <apt-pkg/fileutl.h> +#include <apt-pkg/configuration.h> #include <apt-pkg/error.h> +#include <apt-pkg/fileutl.h> +#include <apt-pkg/init.h> +#include <apt-pkg/macros.h> #include <apt-pkg/pkgsystem.h> -#include <apt-pkg/configuration.h> #include <apt-pkg/strutl.h> -#include <apt-pkg/macros.h> -#include <string.h> #include <cstdlib> #include <fstream> #include <sstream> #include <string> #include <unordered_map> #include <vector> +#include <string.h> #include <apti18n.h> /*}}}*/ diff --git a/apt-pkg/install-progress.cc b/apt-pkg/install-progress.cc index 6c3e51b2c..913068a66 100644 --- a/apt-pkg/install-progress.cc +++ b/apt-pkg/install-progress.cc @@ -2,19 +2,19 @@ #include <apt-pkg/configuration.h> #include <apt-pkg/fileutl.h> -#include <apt-pkg/strutl.h> #include <apt-pkg/install-progress.h> +#include <apt-pkg/strutl.h> -#include <signal.h> -#include <unistd.h> +#include <algorithm> +#include <cmath> #include <iostream> +#include <sstream> #include <vector> -#include <sys/ioctl.h> #include <fcntl.h> -#include <algorithm> +#include <signal.h> #include <stdio.h> -#include <sstream> -#include <cmath> +#include <sys/ioctl.h> +#include <unistd.h> #include <apti18n.h> diff --git a/apt-pkg/install-progress.h b/apt-pkg/install-progress.h index b5c133676..bcc0b615a 100644 --- a/apt-pkg/install-progress.h +++ b/apt-pkg/install-progress.h @@ -4,9 +4,9 @@ #include <apt-pkg/macros.h> #include <string> -#include <unistd.h> -#include <signal.h> #include <vector> +#include <signal.h> +#include <unistd.h> namespace APT { namespace Progress { diff --git a/apt-pkg/metaindex.cc b/apt-pkg/metaindex.cc index 8b31051fb..bdae6dcc9 100644 --- a/apt-pkg/metaindex.cc +++ b/apt-pkg/metaindex.cc @@ -1,13 +1,24 @@ // Include Files /*{{{*/ -#include <apt-pkg/pkgcachegen.h> #include <apt-pkg/indexfile.h> #include <apt-pkg/metaindex.h> +#include <apt-pkg/pkgcachegen.h> #include <apt-pkg/debmetaindex.h> #include <string> #include <vector> - /*}}}*/ + /*}}}*/ + +class metaIndexPrivate /*{{{*/ +{ + public: + std::string Origin; + std::string Label; + std::string Version; + signed short DefaultPin; + std::string ReleaseNotes; +}; + /*}}}*/ std::string metaIndex::Describe() const { @@ -26,7 +37,7 @@ bool metaIndex::Merge(pkgCacheGenerator &Gen,OpProgress *) const metaIndex::metaIndex(std::string const &URI, std::string const &Dist, char const * const Type) -: d(NULL), Indexes(NULL), Type(Type), URI(URI), Dist(Dist), Trusted(TRI_UNSET), +: d(new metaIndexPrivate()), Indexes(NULL), Type(Type), URI(URI), Dist(Dist), Trusted(TRI_UNSET), Date(0), ValidUntil(0), SupportsAcquireByHash(false), LoadedSuccessfully(TRI_UNSET) { /* nothing */ @@ -43,6 +54,7 @@ metaIndex::~metaIndex() } for (auto const &E: Entries) delete E.second; + delete d; } // one line Getters for public fields /*{{{*/ @@ -51,8 +63,13 @@ APT_PURE std::string metaIndex::GetDist() const { return Dist; } APT_PURE const char* metaIndex::GetType() const { return Type; } APT_PURE metaIndex::TriState metaIndex::GetTrusted() const { return Trusted; } APT_PURE std::string metaIndex::GetSignedBy() const { return SignedBy; } +APT_PURE std::string metaIndex::GetOrigin() const { return d->Origin; } +APT_PURE std::string metaIndex::GetLabel() const { return d->Label; } +APT_PURE std::string metaIndex::GetVersion() const { return d->Version; } APT_PURE std::string metaIndex::GetCodename() const { return Codename; } APT_PURE std::string metaIndex::GetSuite() const { return Suite; } +APT_PURE std::string metaIndex::GetReleaseNotes() const { return d->ReleaseNotes; } +APT_PURE signed short metaIndex::GetDefaultPin() const { return d->DefaultPin; } APT_PURE bool metaIndex::GetSupportsAcquireByHash() const { return SupportsAcquireByHash; } APT_PURE time_t metaIndex::GetValidUntil() const { return ValidUntil; } APT_PURE time_t metaIndex::GetDate() const { return this->Date; } @@ -104,11 +121,19 @@ std::vector<std::string> metaIndex::MetaKeys() const /*{{{*/ /*}}}*/ void metaIndex::swapLoad(metaIndex * const OldMetaIndex) /*{{{*/ { - std::swap(Entries, OldMetaIndex->Entries); + std::swap(SignedBy, OldMetaIndex->SignedBy); + std::swap(Suite, OldMetaIndex->Suite); + std::swap(Codename, OldMetaIndex->Codename); std::swap(Date, OldMetaIndex->Date); std::swap(ValidUntil, OldMetaIndex->ValidUntil); std::swap(SupportsAcquireByHash, OldMetaIndex->SupportsAcquireByHash); + std::swap(Entries, OldMetaIndex->Entries); std::swap(LoadedSuccessfully, OldMetaIndex->LoadedSuccessfully); + + OldMetaIndex->SetOrigin(d->Origin); + OldMetaIndex->SetLabel(d->Label); + OldMetaIndex->SetVersion(d->Version); + OldMetaIndex->SetDefaultPin(d->DefaultPin); } /*}}}*/ @@ -128,3 +153,17 @@ bool metaIndex::IsArchitectureAllSupportedFor(IndexTarget const &target) const/* return true; } /*}}}*/ +bool metaIndex::HasSupportForComponent(std::string const &component) const/*{{{*/ +{ + debReleaseIndex const * const deb = dynamic_cast<debReleaseIndex const *>(this); + if (deb != NULL) + return deb->HasSupportForComponent(component); + return true; +} + /*}}}*/ + +void metaIndex::SetOrigin(std::string const &origin) { d->Origin = origin; } +void metaIndex::SetLabel(std::string const &label) { d->Label = label; } +void metaIndex::SetVersion(std::string const &version) { d->Version = version; } +void metaIndex::SetDefaultPin(signed short const defaultpin) { d->DefaultPin = defaultpin; } +void metaIndex::SetReleaseNotes(std::string const ¬es) { d->ReleaseNotes = notes; } diff --git a/apt-pkg/metaindex.h b/apt-pkg/metaindex.h index 3a624e86d..91cfce59b 100644 --- a/apt-pkg/metaindex.h +++ b/apt-pkg/metaindex.h @@ -15,8 +15,8 @@ class pkgCacheGenerator; class OpProgress; #endif #ifndef APT_8_CLEANER_HEADERS -#include <apt-pkg/srcrecords.h> #include <apt-pkg/pkgrecords.h> +#include <apt-pkg/srcrecords.h> using std::string; #endif @@ -25,6 +25,8 @@ class IndexTarget; class pkgCacheGenerator; class OpProgress; +class metaIndexPrivate; + class metaIndex { public: @@ -43,7 +45,7 @@ public: TRI_YES, TRI_DONTCARE, TRI_NO, TRI_UNSET }; private: - void * const d; + metaIndexPrivate * const d; protected: std::vector <pkgIndexFile *> *Indexes; // parsed from the sources.list @@ -70,8 +72,13 @@ public: TriState GetTrusted() const; std::string GetSignedBy() const; + std::string GetOrigin() const; + std::string GetLabel() const; + std::string GetVersion() const; std::string GetCodename() const; std::string GetSuite() const; + std::string GetReleaseNotes() const; + signed short GetDefaultPin() const; bool GetSupportsAcquireByHash() const; time_t GetValidUntil() const; time_t GetDate() const; @@ -111,6 +118,13 @@ public: // FIXME: make virtual on next abi break bool IsArchitectureSupported(std::string const &arch) const; bool IsArchitectureAllSupportedFor(IndexTarget const &target) const; + bool HasSupportForComponent(std::string const &component) const; + // FIXME: should be members of the class on abi break + APT_HIDDEN void SetOrigin(std::string const &origin); + APT_HIDDEN void SetLabel(std::string const &label); + APT_HIDDEN void SetVersion(std::string const &version); + APT_HIDDEN void SetDefaultPin(signed short const defaultpin); + APT_HIDDEN void SetReleaseNotes(std::string const ¬es); }; #endif diff --git a/apt-pkg/orderlist.cc b/apt-pkg/orderlist.cc index 0be0cc8df..c968845ce 100644 --- a/apt-pkg/orderlist.cc +++ b/apt-pkg/orderlist.cc @@ -63,19 +63,18 @@ ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ -#include<config.h> +#include <config.h> -#include <apt-pkg/orderlist.h> +#include <apt-pkg/configuration.h> #include <apt-pkg/depcache.h> #include <apt-pkg/error.h> -#include <apt-pkg/configuration.h> -#include <apt-pkg/cacheiterators.h> +#include <apt-pkg/orderlist.h> #include <apt-pkg/pkgcache.h> -#include <stdlib.h> -#include <string.h> #include <algorithm> #include <iostream> +#include <stdlib.h> +#include <string.h> /*}}}*/ using namespace std; @@ -93,7 +92,7 @@ pkgOrderList::pkgOrderList(pkgDepCache *pCache) : d(NULL), Cache(*pCache), /* Construct the arrays, egcs 1.0.1 bug requires the package count hack */ - unsigned long Size = Cache.Head().PackageCount; + auto const Size = Cache.Head().PackageCount; Flags = new unsigned short[Size]; End = List = new Package *[Size]; memset(Flags,0,sizeof(*Flags)*Size); @@ -1056,8 +1055,8 @@ bool pkgOrderList::AddLoop(DepIterator D) /* */ void pkgOrderList::WipeFlags(unsigned long F) { - unsigned long Size = Cache.Head().PackageCount; - for (unsigned long I = 0; I != Size; I++) + auto Size = Cache.Head().PackageCount; + for (decltype(Size) I = 0; I != Size; ++I) Flags[I] &= ~F; } /*}}}*/ diff --git a/apt-pkg/orderlist.h b/apt-pkg/orderlist.h index 9171c45d6..3fa02342b 100644 --- a/apt-pkg/orderlist.h +++ b/apt-pkg/orderlist.h @@ -15,9 +15,8 @@ #ifndef PKGLIB_ORDERLIST_H #define PKGLIB_ORDERLIST_H -#include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheiterators.h> #include <apt-pkg/macros.h> +#include <apt-pkg/pkgcache.h> #include <string> diff --git a/apt-pkg/packagemanager.cc b/apt-pkg/packagemanager.cc index a8537431b..d5a8275c3 100644 --- a/apt-pkg/packagemanager.cc +++ b/apt-pkg/packagemanager.cc @@ -15,26 +15,25 @@ // Include Files /*{{{*/ #include <config.h> -#include <apt-pkg/packagemanager.h> -#include <apt-pkg/orderlist.h> -#include <apt-pkg/depcache.h> -#include <apt-pkg/error.h> -#include <apt-pkg/edsp.h> -#include <apt-pkg/version.h> #include <apt-pkg/acquire-item.h> #include <apt-pkg/algorithms.h> #include <apt-pkg/configuration.h> +#include <apt-pkg/depcache.h> +#include <apt-pkg/edsp.h> +#include <apt-pkg/error.h> +#include <apt-pkg/install-progress.h> #include <apt-pkg/macros.h> +#include <apt-pkg/orderlist.h> +#include <apt-pkg/packagemanager.h> #include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheiterators.h> -#include <apt-pkg/strutl.h> -#include <apt-pkg/install-progress.h> #include <apt-pkg/prettyprinters.h> +#include <apt-pkg/strutl.h> +#include <apt-pkg/version.h> -#include <stddef.h> +#include <iostream> #include <list> #include <string> -#include <iostream> +#include <stddef.h> #include <apti18n.h> /*}}}*/ @@ -937,7 +936,7 @@ bool pkgPackageManager::SmartUnPack(PkgIterator Pkg, bool const Immediate, int c if (Debug) clog << OutputInDepth(Depth) << "Removing " << ConflictPkg.FullName() << " now to avoid " << APT::PrettyDep(&Cache, End) << endl; // no earlyremove() here as user has already agreed to the permanent removal - if (SmartRemove(Pkg) == false) + if (SmartRemove(ConflictPkg) == false) return _error->Error("Internal Error, Could not early remove %s (%d)",ConflictPkg.FullName().c_str(), 1); } } diff --git a/apt-pkg/packagemanager.h b/apt-pkg/packagemanager.h index e4c7a0a0a..d9443443d 100644 --- a/apt-pkg/packagemanager.h +++ b/apt-pkg/packagemanager.h @@ -22,13 +22,13 @@ #ifndef PKGLIB_PACKAGEMANAGER_H #define PKGLIB_PACKAGEMANAGER_H -#include <apt-pkg/pkgcache.h> -#include <apt-pkg/init.h> #include <apt-pkg/edsp.h> +#include <apt-pkg/init.h> #include <apt-pkg/macros.h> +#include <apt-pkg/pkgcache.h> -#include <string> #include <set> +#include <string> #ifndef APT_10_CLEANER_HEADERS #include <apt-pkg/install-progress.h> diff --git a/apt-pkg/pkgcache.cc b/apt-pkg/pkgcache.cc index c4bf34022..ea34db469 100644 --- a/apt-pkg/pkgcache.cc +++ b/apt-pkg/pkgcache.cc @@ -20,26 +20,26 @@ ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ -#include<config.h> +#include <config.h> +#include <apt-pkg/aptconfiguration.h> +#include <apt-pkg/configuration.h> +#include <apt-pkg/error.h> +#include <apt-pkg/macros.h> +#include <apt-pkg/mmap.h> #include <apt-pkg/pkgcache.h> #include <apt-pkg/policy.h> -#include <apt-pkg/version.h> -#include <apt-pkg/error.h> #include <apt-pkg/strutl.h> -#include <apt-pkg/configuration.h> -#include <apt-pkg/aptconfiguration.h> -#include <apt-pkg/mmap.h> -#include <apt-pkg/macros.h> +#include <apt-pkg/version.h> -#include <stddef.h> -#include <string.h> -#include <sstream> +#include <zlib.h> #include <algorithm> -#include <vector> +#include <sstream> #include <string> +#include <vector> +#include <stddef.h> +#include <string.h> #include <sys/stat.h> -#include <zlib.h> #include <apti18n.h> /*}}}*/ @@ -58,7 +58,7 @@ pkgCache::Header::Header() /* Whenever the structures change the major version should be bumped, whenever the generator changes the minor version should be bumped. */ - APT_HEADER_SET(MajorVersion, 11); + APT_HEADER_SET(MajorVersion, 12); APT_HEADER_SET(MinorVersion, 0); APT_HEADER_SET(Dirty, false); diff --git a/apt-pkg/pkgcache.h b/apt-pkg/pkgcache.h index 91228f713..e1597c1b1 100644 --- a/apt-pkg/pkgcache.h +++ b/apt-pkg/pkgcache.h @@ -73,13 +73,13 @@ /*}}}*/ #ifndef PKGLIB_PKGCACHE_H #define PKGLIB_PKGCACHE_H - -#include <apt-pkg/mmap.h> +#define __PKGLIB_IN_PKGCACHE_H #include <apt-pkg/macros.h> +#include <apt-pkg/mmap.h> #include <string> -#include <time.h> #include <stdint.h> +#include <time.h> #ifdef APT_PKG_EXPOSE_STRING_VIEW #include <apt-pkg/string_view.h> @@ -783,10 +783,13 @@ inline char const * pkgCache::NativeArch() #include <apt-pkg/cacheiterators.h> -inline pkgCache::GrpIterator pkgCache::GrpBegin() - {return GrpIterator(*this);} -inline pkgCache::GrpIterator pkgCache::GrpEnd() - {return GrpIterator(*this,GrpP);} + inline pkgCache::GrpIterator pkgCache::GrpBegin() + { + return GrpIterator(*this); + } + inline pkgCache::GrpIterator pkgCache::GrpEnd() + { + return GrpIterator(*this, GrpP);} inline pkgCache::PkgIterator pkgCache::PkgBegin() {return PkgIterator(*this);} inline pkgCache::PkgIterator pkgCache::PkgEnd() @@ -822,4 +825,5 @@ class pkgCache::Namespace /*{{{*/ typedef pkgCache::Flag Flag; }; /*}}}*/ +#undef __PKGLIB_IN_PKGCACHE_H #endif diff --git a/apt-pkg/pkgcachegen.cc b/apt-pkg/pkgcachegen.cc index e52667fbc..bde0ea122 100644 --- a/apt-pkg/pkgcachegen.cc +++ b/apt-pkg/pkgcachegen.cc @@ -12,30 +12,29 @@ // Include Files /*{{{*/ #include <config.h> -#include <apt-pkg/pkgcachegen.h> -#include <apt-pkg/error.h> -#include <apt-pkg/version.h> -#include <apt-pkg/progress.h> -#include <apt-pkg/sourcelist.h> #include <apt-pkg/configuration.h> -#include <apt-pkg/pkgsystem.h> -#include <apt-pkg/macros.h> -#include <apt-pkg/metaindex.h> +#include <apt-pkg/error.h> #include <apt-pkg/fileutl.h> #include <apt-pkg/hashsum_template.h> #include <apt-pkg/indexfile.h> +#include <apt-pkg/macros.h> #include <apt-pkg/md5.h> +#include <apt-pkg/metaindex.h> #include <apt-pkg/mmap.h> #include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheiterators.h> +#include <apt-pkg/pkgcachegen.h> +#include <apt-pkg/pkgsystem.h> +#include <apt-pkg/progress.h> +#include <apt-pkg/sourcelist.h> +#include <apt-pkg/version.h> -#include <stddef.h> -#include <string.h> +#include <algorithm> #include <iostream> +#include <memory> #include <string> #include <vector> -#include <memory> -#include <algorithm> +#include <stddef.h> +#include <string.h> #include <sys/stat.h> #include <unistd.h> diff --git a/apt-pkg/pkgcachegen.h b/apt-pkg/pkgcachegen.h index cb51c113a..e11e97e09 100644 --- a/apt-pkg/pkgcachegen.h +++ b/apt-pkg/pkgcachegen.h @@ -18,14 +18,13 @@ #ifndef PKGLIB_PKGCACHEGEN_H #define PKGLIB_PKGCACHEGEN_H +#include <apt-pkg/macros.h> #include <apt-pkg/md5.h> #include <apt-pkg/mmap.h> #include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheiterators.h> -#include <apt-pkg/macros.h> -#include <vector> #include <string> +#include <vector> #if __cplusplus >= 201103L #include <unordered_set> #endif diff --git a/apt-pkg/pkgrecords.cc b/apt-pkg/pkgrecords.cc index ef4c17cd2..8a5089d8a 100644 --- a/apt-pkg/pkgrecords.cc +++ b/apt-pkg/pkgrecords.cc @@ -9,16 +9,15 @@ ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ -#include<config.h> +#include <config.h> -#include <apt-pkg/pkgrecords.h> -#include <apt-pkg/indexfile.h> #include <apt-pkg/error.h> +#include <apt-pkg/indexfile.h> #include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheiterators.h> +#include <apt-pkg/pkgrecords.h> -#include <stddef.h> #include <vector> +#include <stddef.h> #include <apti18n.h> /*}}}*/ diff --git a/apt-pkg/pkgrecords.h b/apt-pkg/pkgrecords.h index 7c50c5d41..bdbd31a78 100644 --- a/apt-pkg/pkgrecords.h +++ b/apt-pkg/pkgrecords.h @@ -17,9 +17,9 @@ #ifndef PKGLIB_PKGRECORDS_H #define PKGLIB_PKGRECORDS_H -#include <apt-pkg/pkgcache.h> #include <apt-pkg/hashes.h> #include <apt-pkg/macros.h> +#include <apt-pkg/pkgcache.h> #include <string> #include <vector> diff --git a/apt-pkg/pkgsystem.cc b/apt-pkg/pkgsystem.cc index b1c6cc1ea..aa94418c6 100644 --- a/apt-pkg/pkgsystem.cc +++ b/apt-pkg/pkgsystem.cc @@ -10,15 +10,15 @@ ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ -#include<config.h> +#include <config.h> #include <apt-pkg/debsystem.h> -#include <apt-pkg/pkgsystem.h> #include <apt-pkg/macros.h> +#include <apt-pkg/pkgsystem.h> -#include <map> #include <cassert> #include <cstring> +#include <map> /*}}}*/ pkgSystem *_system = 0; diff --git a/apt-pkg/pkgsystem.h b/apt-pkg/pkgsystem.h index affaa5c9a..4b13072e2 100644 --- a/apt-pkg/pkgsystem.h +++ b/apt-pkg/pkgsystem.h @@ -37,7 +37,6 @@ #define PKGLIB_PKGSYSTEM_H #include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheiterators.h> #include <vector> diff --git a/apt-pkg/policy.cc b/apt-pkg/policy.cc index 3dd6ddac4..008c98ecb 100644 --- a/apt-pkg/policy.cc +++ b/apt-pkg/policy.cc @@ -13,27 +13,26 @@ ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ -#include<config.h> +#include <config.h> -#include <apt-pkg/policy.h> -#include <apt-pkg/configuration.h> #include <apt-pkg/cachefilter.h> -#include <apt-pkg/tagfile.h> -#include <apt-pkg/strutl.h> -#include <apt-pkg/fileutl.h> +#include <apt-pkg/configuration.h> #include <apt-pkg/error.h> -#include <apt-pkg/cacheiterators.h> +#include <apt-pkg/fileutl.h> #include <apt-pkg/pkgcache.h> -#include <apt-pkg/versionmatch.h> +#include <apt-pkg/policy.h> +#include <apt-pkg/strutl.h> +#include <apt-pkg/tagfile.h> #include <apt-pkg/version.h> +#include <apt-pkg/versionmatch.h> +#include <iostream> +#include <sstream> +#include <string> +#include <vector> #include <ctype.h> #include <stddef.h> #include <string.h> -#include <string> -#include <vector> -#include <iostream> -#include <sstream> #include <apti18n.h> /*}}}*/ @@ -50,12 +49,14 @@ pkgPolicy::pkgPolicy(pkgCache *Owner) : Pins(nullptr), VerPins(nullptr), if (Owner == 0) return; PFPriority = new signed short[Owner->Head().PackageFileCount]; - Pins = new Pin[Owner->Head().PackageCount]; + auto PackageCount = Owner->Head().PackageCount; + Pins = new Pin[PackageCount]; VerPins = new Pin[Owner->Head().VersionCount]; - for (unsigned long I = 0; I != Owner->Head().PackageCount; I++) + for (decltype(PackageCount) I = 0; I != PackageCount; ++I) Pins[I].Type = pkgVersionMatch::None; - for (unsigned long I = 0; I != Owner->Head().VersionCount; I++) + auto VersionCount = Owner->Head().VersionCount; + for (decltype(VersionCount) I = 0; I != VersionCount; ++I) VerPins[I].Type = pkgVersionMatch::None; // The config file has a master override. diff --git a/apt-pkg/policy.h b/apt-pkg/policy.h index 943332bbb..bcd1daf3e 100644 --- a/apt-pkg/policy.h +++ b/apt-pkg/policy.h @@ -34,11 +34,10 @@ #include <apt-pkg/depcache.h> #include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheiterators.h> #include <apt-pkg/versionmatch.h> -#include <vector> #include <string> +#include <vector> #ifndef APT_8_CLEANER_HEADERS using std::vector; diff --git a/apt-pkg/prettyprinters.h b/apt-pkg/prettyprinters.h index 51d9f81a0..40f9d6628 100644 --- a/apt-pkg/prettyprinters.h +++ b/apt-pkg/prettyprinters.h @@ -1,7 +1,7 @@ #ifndef APT_PRETTYPRINTERS_H #define APT_PRETTYPRINTERS_H -#include <apt-pkg/pkgcache.h> #include <apt-pkg/macros.h> +#include <apt-pkg/pkgcache.h> class pkgDepCache; diff --git a/apt-pkg/sourcelist.cc b/apt-pkg/sourcelist.cc index df2e0b46d..17c5c7a11 100644 --- a/apt-pkg/sourcelist.cc +++ b/apt-pkg/sourcelist.cc @@ -8,31 +8,30 @@ ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ -#include<config.h> +#include <config.h> -#include <apt-pkg/sourcelist.h> #include <apt-pkg/cmndline.h> +#include <apt-pkg/configuration.h> +#include <apt-pkg/debindexfile.h> +#include <apt-pkg/debsrcrecords.h> #include <apt-pkg/error.h> #include <apt-pkg/fileutl.h> -#include <apt-pkg/strutl.h> -#include <apt-pkg/configuration.h> -#include <apt-pkg/metaindex.h> #include <apt-pkg/indexfile.h> -#include <apt-pkg/tagfile.h> +#include <apt-pkg/metaindex.h> #include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheiterators.h> -#include <apt-pkg/debindexfile.h> -#include <apt-pkg/debsrcrecords.h> +#include <apt-pkg/sourcelist.h> +#include <apt-pkg/strutl.h> +#include <apt-pkg/tagfile.h> -#include <ctype.h> -#include <stddef.h> -#include <time.h> +#include <algorithm> #include <cstring> +#include <fstream> #include <map> #include <string> #include <vector> -#include <fstream> -#include <algorithm> +#include <ctype.h> +#include <stddef.h> +#include <time.h> #include <apti18n.h> /*}}}*/ diff --git a/apt-pkg/sourcelist.h b/apt-pkg/sourcelist.h index 65f9c2b89..fedf90fa6 100644 --- a/apt-pkg/sourcelist.h +++ b/apt-pkg/sourcelist.h @@ -22,15 +22,14 @@ #ifndef PKGLIB_SOURCELIST_H #define PKGLIB_SOURCELIST_H -#include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheiterators.h> #include <apt-pkg/macros.h> +#include <apt-pkg/pkgcache.h> #include <time.h> +#include <map> #include <string> #include <vector> -#include <map> #ifndef APT_8_CLEANER_HEADERS #include <apt-pkg/tagfile.h> diff --git a/apt-pkg/srcrecords.cc b/apt-pkg/srcrecords.cc index a76604a8d..0c0c7a9fc 100644 --- a/apt-pkg/srcrecords.cc +++ b/apt-pkg/srcrecords.cc @@ -11,19 +11,19 @@ ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ -#include<config.h> +#include <config.h> -#include <apt-pkg/srcrecords.h> #include <apt-pkg/debsrcrecords.h> #include <apt-pkg/error.h> -#include <apt-pkg/sourcelist.h> -#include <apt-pkg/metaindex.h> #include <apt-pkg/indexfile.h> #include <apt-pkg/macros.h> +#include <apt-pkg/metaindex.h> +#include <apt-pkg/sourcelist.h> +#include <apt-pkg/srcrecords.h> -#include <string.h> #include <string> #include <vector> +#include <string.h> #include <apti18n.h> /*}}}*/ diff --git a/apt-pkg/srcrecords.h b/apt-pkg/srcrecords.h index a3c8444de..8c52f5683 100644 --- a/apt-pkg/srcrecords.h +++ b/apt-pkg/srcrecords.h @@ -12,8 +12,8 @@ #ifndef PKGLIB_SRCRECORDS_H #define PKGLIB_SRCRECORDS_H -#include <apt-pkg/macros.h> #include <apt-pkg/hashes.h> +#include <apt-pkg/macros.h> #include <string> #include <vector> diff --git a/apt-pkg/statechanges.cc b/apt-pkg/statechanges.cc index 35af45538..258c84885 100644 --- a/apt-pkg/statechanges.cc +++ b/apt-pkg/statechanges.cc @@ -1,9 +1,9 @@ -#include <apt-pkg/pkgcache.h> #include <apt-pkg/cacheset.h> #include <apt-pkg/debsystem.h> #include <apt-pkg/fileutl.h> -#include <apt-pkg/statechanges.h> +#include <apt-pkg/pkgcache.h> #include <apt-pkg/prettyprinters.h> +#include <apt-pkg/statechanges.h> #include <algorithm> #include <memory> diff --git a/apt-pkg/statechanges.h b/apt-pkg/statechanges.h index 1eaf21a3a..2f63d516d 100644 --- a/apt-pkg/statechanges.h +++ b/apt-pkg/statechanges.h @@ -1,6 +1,6 @@ -#include <apt-pkg/pkgcache.h> #include <apt-pkg/cacheset.h> #include <apt-pkg/macros.h> +#include <apt-pkg/pkgcache.h> #include <memory> diff --git a/apt-pkg/tagfile-compat.cc b/apt-pkg/tagfile-compat.cc index fe53e2974..e2cab474e 100644 --- a/apt-pkg/tagfile-compat.cc +++ b/apt-pkg/tagfile-compat.cc @@ -13,7 +13,7 @@ ##################################################################### */ /*}}}*/ -#include<config.h> +#include <config.h> #define APT_COMPILING_TAGFILE_COMPAT_CC #include <apt-pkg/tagfile.h> diff --git a/apt-pkg/tagfile.cc b/apt-pkg/tagfile.cc index d9519175e..7de5c055b 100644 --- a/apt-pkg/tagfile.cc +++ b/apt-pkg/tagfile.cc @@ -11,20 +11,20 @@ ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ -#include<config.h> +#include <config.h> -#include <apt-pkg/tagfile.h> -#include <apt-pkg/tagfile-keys.h> #include <apt-pkg/error.h> -#include <apt-pkg/strutl.h> #include <apt-pkg/fileutl.h> #include <apt-pkg/string_view.h> +#include <apt-pkg/strutl.h> +#include <apt-pkg/tagfile-keys.h> +#include <apt-pkg/tagfile.h> #include <list> #include <string> -#include <stdio.h> #include <ctype.h> +#include <stdio.h> #include <stdlib.h> #include <string.h> diff --git a/apt-pkg/tagfile.h b/apt-pkg/tagfile.h index e02e7332e..c4dc50a10 100644 --- a/apt-pkg/tagfile.h +++ b/apt-pkg/tagfile.h @@ -21,12 +21,12 @@ #include <apt-pkg/macros.h> -#include <stdio.h> #include <stdint.h> +#include <stdio.h> +#include <list> #include <string> #include <vector> -#include <list> #ifdef APT_PKG_EXPOSE_STRING_VIEW #include <apt-pkg/string_view.h> #endif diff --git a/apt-pkg/update.cc b/apt-pkg/update.cc index f7075c446..4c64eeb5d 100644 --- a/apt-pkg/update.cc +++ b/apt-pkg/update.cc @@ -2,11 +2,11 @@ #include <config.h> #include <apt-pkg/acquire-item.h> +#include <apt-pkg/acquire.h> #include <apt-pkg/configuration.h> #include <apt-pkg/error.h> #include <apt-pkg/fileutl.h> #include <apt-pkg/sourcelist.h> -#include <apt-pkg/acquire.h> #include <apt-pkg/strutl.h> #include <apt-pkg/update.h> diff --git a/apt-pkg/upgrade.cc b/apt-pkg/upgrade.cc index a61789c11..c9432aa64 100644 --- a/apt-pkg/upgrade.cc +++ b/apt-pkg/upgrade.cc @@ -3,13 +3,12 @@ #include <apt-pkg/algorithms.h> #include <apt-pkg/configuration.h> +#include <apt-pkg/depcache.h> #include <apt-pkg/edsp.h> #include <apt-pkg/error.h> +#include <apt-pkg/pkgcache.h> #include <apt-pkg/progress.h> #include <apt-pkg/upgrade.h> -#include <apt-pkg/depcache.h> -#include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheiterators.h> #include <string> diff --git a/apt-pkg/upgrade.h b/apt-pkg/upgrade.h index 2d9c0fa36..5612acfcb 100644 --- a/apt-pkg/upgrade.h +++ b/apt-pkg/upgrade.h @@ -10,8 +10,8 @@ #ifndef PKGLIB_UPGRADE_H #define PKGLIB_UPGRADE_H -#include <stddef.h> #include <apt-pkg/macros.h> +#include <stddef.h> class pkgDepCache; class OpProgress; diff --git a/apt-pkg/version.cc b/apt-pkg/version.cc index f32d39a69..8db311179 100644 --- a/apt-pkg/version.cc +++ b/apt-pkg/version.cc @@ -8,12 +8,12 @@ ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ -#include<config.h> +#include <config.h> #include <apt-pkg/version.h> -#include <string.h> #include <stdlib.h> +#include <string.h> /*}}}*/ static pkgVersioningSystem *VSList[10]; diff --git a/apt-pkg/versionmatch.cc b/apt-pkg/versionmatch.cc index 2376ca8fd..8106a150e 100644 --- a/apt-pkg/versionmatch.cc +++ b/apt-pkg/versionmatch.cc @@ -11,22 +11,21 @@ ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ -#include<config.h> +#include <config.h> -#include <apt-pkg/versionmatch.h> -#include <apt-pkg/strutl.h> #include <apt-pkg/error.h> #include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheiterators.h> +#include <apt-pkg/strutl.h> +#include <apt-pkg/versionmatch.h> -#include <stddef.h> -#include <stdlib.h> -#include <string.h> #include <string> -#include <stdio.h> #include <ctype.h> #include <fnmatch.h> #include <regex.h> +#include <stddef.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> /*}}}*/ using std::string; diff --git a/apt-pkg/versionmatch.h b/apt-pkg/versionmatch.h index 156ad61cb..ce8f95de5 100644 --- a/apt-pkg/versionmatch.h +++ b/apt-pkg/versionmatch.h @@ -36,7 +36,6 @@ #define PKGLIB_VERSIONMATCH_H #include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheiterators.h> #include <string> diff --git a/apt-private/acqprogress.cc b/apt-private/acqprogress.cc index e4bfbd4e5..a788ec98b 100644 --- a/apt-private/acqprogress.cc +++ b/apt-private/acqprogress.cc @@ -7,22 +7,23 @@ ##################################################################### */ /*}}}*/ // Include files /*{{{*/ -#include<config.h> +#include <config.h> -#include <apt-pkg/acquire.h> #include <apt-pkg/acquire-item.h> #include <apt-pkg/acquire-worker.h> +#include <apt-pkg/acquire.h> #include <apt-pkg/configuration.h> -#include <apt-pkg/strutl.h> #include <apt-pkg/error.h> +#include <apt-pkg/strutl.h> #include <apt-private/acqprogress.h> +#include <apt-private/private-output.h> -#include <string.h> -#include <stdio.h> -#include <signal.h> #include <iostream> #include <sstream> +#include <signal.h> +#include <stdio.h> +#include <string.h> #include <unistd.h> #include <apti18n.h> @@ -32,7 +33,7 @@ // --------------------------------------------------------------------- /* */ AcqTextStatus::AcqTextStatus(std::ostream &out, unsigned int &ScreenWidth,unsigned int const Quiet) : - pkgAcquireStatus(), out(out), ScreenWidth(ScreenWidth), LastLineLength(0), ID(0), Quiet(Quiet) + pkgAcquireStatus2(), out(out), ScreenWidth(ScreenWidth), LastLineLength(0), ID(0), Quiet(Quiet) { // testcases use it to disable pulses without disabling other user messages if (Quiet == 0 && _config->FindB("quiet::NoUpdate", false) == true) @@ -330,6 +331,25 @@ bool AcqTextStatus::MediaChange(std::string Media, std::string Drive) return bStatus; } /*}}}*/ +bool AcqTextStatus::ReleaseInfoChanges(metaIndex const * const L, metaIndex const * const N, std::vector<ReleaseInfoChange> &&Changes)/*{{{*/ +{ + if (Quiet >= 2 || isatty(STDOUT_FILENO) != 1 || isatty(STDIN_FILENO) != 1 || + _config->FindB("APT::Get::Update::InteractiveReleaseInfoChanges", false) == false) + return pkgAcquireStatus2::ReleaseInfoChanges(nullptr, nullptr, std::move(Changes)); + + _error->PushToStack(); + auto const confirmed = pkgAcquireStatus2::ReleaseInfoChanges(L, N, std::move(Changes)); + if (confirmed == true) + { + _error->MergeWithStack(); + return true; + } + clearLastLine(); + _error->DumpErrors(out, GlobalError::NOTICE, false); + _error->RevertToStack(); + return YnPrompt(_("Do you want to accept these changes and continue updating from this repository?"), false, false, out, out); +} + /*}}}*/ void AcqTextStatus::clearLastLine() { /*{{{*/ if (Quiet > 0 || LastLineLength == 0) return; diff --git a/apt-private/acqprogress.h b/apt-private/acqprogress.h index 6b6d555b1..c8c211689 100644 --- a/apt-private/acqprogress.h +++ b/apt-private/acqprogress.h @@ -12,10 +12,10 @@ #include <apt-pkg/acquire.h> #include <apt-pkg/macros.h> -#include <string> #include <iostream> +#include <string> -class APT_PUBLIC AcqTextStatus : public pkgAcquireStatus +class APT_PUBLIC AcqTextStatus : public pkgAcquireStatus2 { std::ostream &out; unsigned int &ScreenWidth; @@ -28,6 +28,7 @@ class APT_PUBLIC AcqTextStatus : public pkgAcquireStatus public: + virtual bool ReleaseInfoChanges(metaIndex const * const LastRelease, metaIndex const * const CurrentRelease, std::vector<ReleaseInfoChange> &&Changes) APT_OVERRIDE; virtual bool MediaChange(std::string Media,std::string Drive) APT_OVERRIDE; virtual void IMSHit(pkgAcquire::ItemDesc &Itm) APT_OVERRIDE; virtual void Fetch(pkgAcquire::ItemDesc &Itm) APT_OVERRIDE; diff --git a/apt-private/private-cachefile.cc b/apt-private/private-cachefile.cc index 77090f8eb..ab25338ff 100644 --- a/apt-private/private-cachefile.cc +++ b/apt-private/private-cachefile.cc @@ -1,20 +1,20 @@ // Include files /*{{{*/ -#include<config.h> +#include <config.h> #include <apt-pkg/algorithms.h> -#include <apt-pkg/upgrade.h> -#include <apt-pkg/error.h> +#include <apt-pkg/cacheset.h> #include <apt-pkg/configuration.h> #include <apt-pkg/depcache.h> +#include <apt-pkg/error.h> #include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheset.h> +#include <apt-pkg/upgrade.h> -#include <apt-private/private-output.h> #include <apt-private/private-cachefile.h> +#include <apt-private/private-output.h> -#include <string.h> -#include <ostream> #include <cstdlib> +#include <ostream> +#include <string.h> #include <apti18n.h> /*}}}*/ diff --git a/apt-private/private-cachefile.h b/apt-private/private-cachefile.h index 77e8b61d9..5086ceaeb 100644 --- a/apt-private/private-cachefile.h +++ b/apt-private/private-cachefile.h @@ -2,12 +2,12 @@ #define APT_PRIVATE_CACHEFILE_H #include <apt-pkg/cachefile.h> -#include <apt-pkg/progress.h> +#include <apt-pkg/cacheset.h> #include <apt-pkg/configuration.h> -#include <apt-pkg/pkgcache.h> #include <apt-pkg/macros.h> +#include <apt-pkg/pkgcache.h> +#include <apt-pkg/progress.h> #include <apt-pkg/sourcelist.h> -#include <apt-pkg/cacheset.h> // class CacheFile - Cover class for some dependency cache functions /*{{{*/ class APT_PUBLIC CacheFile : public pkgCacheFile diff --git a/apt-private/private-cacheset.cc b/apt-private/private-cacheset.cc index 52cd22d2a..3d1a2b91c 100644 --- a/apt-private/private-cacheset.cc +++ b/apt-private/private-cacheset.cc @@ -1,14 +1,13 @@ #include <config.h> +#include <apt-pkg/aptconfiguration.h> #include <apt-pkg/cachefile.h> -#include <apt-pkg/pkgcache.h> -#include <apt-pkg/depcache.h> -#include <apt-pkg/cacheiterators.h> #include <apt-pkg/cachefilter.h> -#include <apt-pkg/aptconfiguration.h> #include <apt-pkg/configuration.h> -#include <apt-pkg/progress.h> +#include <apt-pkg/depcache.h> +#include <apt-pkg/pkgcache.h> #include <apt-pkg/policy.h> +#include <apt-pkg/progress.h> #include <apt-pkg/strutl.h> #include <apt-private/private-cacheset.h> diff --git a/apt-private/private-cacheset.h b/apt-private/private-cacheset.h index 37c921081..7bf486b9e 100644 --- a/apt-private/private-cacheset.h +++ b/apt-private/private-cacheset.h @@ -6,10 +6,10 @@ #include <apt-private/private-output.h> -#include <vector> #include <list> #include <set> #include <string> +#include <vector> class OpProgress; diff --git a/apt-private/private-cmndline.cc b/apt-private/private-cmndline.cc index de3992a00..2ecc47ba4 100644 --- a/apt-private/private-cmndline.cc +++ b/apt-private/private-cmndline.cc @@ -3,21 +3,21 @@ #include <apt-pkg/cmndline.h> #include <apt-pkg/configuration.h> +#include <apt-pkg/error.h> #include <apt-pkg/fileutl.h> -#include <apt-pkg/pkgsystem.h> #include <apt-pkg/init.h> -#include <apt-pkg/error.h> +#include <apt-pkg/pkgsystem.h> #include <apt-pkg/strutl.h> #include <apt-private/private-cmndline.h> #include <apt-private/private-main.h> #include <stdarg.h> -#include <string.h> #include <stdlib.h> +#include <string.h> -#include <vector> #include <iomanip> +#include <vector> #include <apti18n.h> /*}}}*/ @@ -203,6 +203,15 @@ static bool addArgumentsAPTGet(std::vector<CommandLine::Args> &Args, char const else if (CmdMatches("update")) { addArg(0, "list-cleanup", "APT::Get::List-Cleanup", 0); + addArg(0, "allow-insecure-repositories", "Acquire::AllowInsecureRepositories", 0); + addArg(0, "allow-weak-repositories", "Acquire::AllowWeakRepositories", 0); + addArg(0, "allow-releaseinfo-change", "Acquire::AllowReleaseInfoChange", 0); + addArg(0, "allow-releaseinfo-change-origin", "Acquire::AllowReleaseInfoChange::Origin", 0); + addArg(0, "allow-releaseinfo-change-label", "Acquire::AllowReleaseInfoChange::Label", 0); + addArg(0, "allow-releaseinfo-change-version", "Acquire::AllowReleaseInfoChange::Version", 0); + addArg(0, "allow-releaseinfo-change-codename", "Acquire::AllowReleaseInfoChange::Codename", 0); + addArg(0, "allow-releaseinfo-change-suite", "Acquire::AllowReleaseInfoChange::Suite", 0); + addArg(0, "allow-releaseinfo-change-defaultpin", "Acquire::AllowReleaseInfoChange::DefaultPin", 0); } else if (CmdMatches("source")) { @@ -273,8 +282,6 @@ static bool addArgumentsAPTGet(std::vector<CommandLine::Args> &Args, char const addArg(0,"remove","APT::Get::Remove",0); addArg(0,"only-source","APT::Get::Only-Source",0); addArg(0,"allow-unauthenticated","APT::Get::AllowUnauthenticated",0); - addArg(0,"allow-insecure-repositories","Acquire::AllowInsecureRepositories",0); - addArg(0,"allow-weak-repositories","Acquire::AllowWeakRepositories",0); addArg(0,"install-recommends","APT::Install-Recommends",CommandLine::Boolean); addArg(0,"install-suggests","APT::Install-Suggests",CommandLine::Boolean); addArg(0,"fix-policy","APT::Get::Fix-Policy-Broken",0); @@ -462,9 +469,8 @@ static void BinarySpecificConfiguration(char const * const Binary) /*{{{*/ _config->CndSet("Binary::apt::APT::Cmd::Show-Update-Stats", true); _config->CndSet("Binary::apt::DPkg::Progress-Fancy", true); _config->CndSet("Binary::apt::APT::Keep-Downloaded-Packages", false); + _config->CndSet("Binary::apt::APT::Get::Update::InteractiveReleaseInfoChanges", true); } - if (binary == "apt-config") - _config->CndSet("Binary::apt-get::Acquire::AllowInsecureRepositories", true); _config->Set("Binary", binary); } @@ -472,8 +478,6 @@ static void BinarySpecificConfiguration(char const * const Binary) /*{{{*/ static void BinaryCommandSpecificConfiguration(char const * const Binary, char const * const Cmd)/*{{{*/ { std::string const binary = flNotDir(Binary); - if (binary == "apt-get" && CmdMatches("update")) - _config->CndSet("Binary::apt-get::Acquire::AllowInsecureRepositories", true); if ((binary == "apt" || binary == "apt-get") && CmdMatches("upgrade", "dist-upgrade", "full-upgrade")) { //FIXME: the option is documented to apply only for install/remove, so diff --git a/apt-private/private-depends.cc b/apt-private/private-depends.cc index 3a3a2737a..79d66b72a 100644 --- a/apt-private/private-depends.cc +++ b/apt-private/private-depends.cc @@ -1,12 +1,11 @@ // Include Files /*{{{*/ -#include<config.h> +#include <config.h> #include <apt-pkg/algorithms.h> #include <apt-pkg/cachefile.h> -#include <apt-pkg/cacheiterators.h> #include <apt-pkg/cacheset.h> -#include <apt-pkg/configuration.h> #include <apt-pkg/cmndline.h> +#include <apt-pkg/configuration.h> #include <apt-pkg/error.h> #include <apt-pkg/pkgcache.h> diff --git a/apt-private/private-download.cc b/apt-private/private-download.cc index ee477f4cb..25dee318e 100644 --- a/apt-private/private-download.cc +++ b/apt-private/private-download.cc @@ -1,30 +1,30 @@ // Include Files /*{{{*/ #include <config.h> -#include <apt-pkg/acquire.h> #include <apt-pkg/acquire-item.h> +#include <apt-pkg/acquire.h> #include <apt-pkg/cacheset.h> -#include <apt-pkg/cmndline.h> #include <apt-pkg/clean.h> +#include <apt-pkg/cmndline.h> #include <apt-pkg/configuration.h> #include <apt-pkg/error.h> #include <apt-pkg/fileutl.h> #include <apt-pkg/strutl.h> +#include <apt-private/acqprogress.h> #include <apt-private/private-cachefile.h> #include <apt-private/private-download.h> #include <apt-private/private-output.h> #include <apt-private/private-utils.h> -#include <apt-private/acqprogress.h> #include <fstream> #include <string> #include <vector> -#include <unistd.h> -#include <sys/types.h> -#include <pwd.h> #include <fcntl.h> +#include <pwd.h> +#include <sys/types.h> +#include <unistd.h> #ifdef HAVE_VFS_H #include <sys/vfs.h> #else @@ -33,9 +33,9 @@ #endif #include <sys/mount.h> #endif -#include <sys/statvfs.h> -#include <sys/stat.h> #include <errno.h> +#include <sys/stat.h> +#include <sys/statvfs.h> #include <apti18n.h> /*}}}*/ @@ -339,15 +339,15 @@ bool DoClean(CommandLine &) // --------------------------------------------------------------------- /* This is similar to clean but it only purges things that cannot be downloaded, that is old versions of cached packages. */ - class LogCleaner : public pkgArchiveCleaner + class LogCleaner : public pkgArchiveCleaner2 { protected: - virtual void Erase(const char *File, std::string Pkg, std::string Ver,struct stat &St) APT_OVERRIDE + virtual void Erase(int const dirfd, char const * const File, std::string const &Pkg, std::string const &Ver,struct stat const &St) APT_OVERRIDE { c1out << "Del " << Pkg << " " << Ver << " [" << SizeToStr(St.st_size) << "B]" << std::endl; if (_config->FindB("APT::Get::Simulate") == false) - RemoveFile("Cleaner::Erase", File); + RemoveFileAt("Cleaner::Erase", dirfd, File); }; }; bool DoAutoClean(CommandLine &) diff --git a/apt-private/private-install.cc b/apt-private/private-install.cc index 73a03a828..aafe5542d 100644 --- a/apt-private/private-install.cc +++ b/apt-private/private-install.cc @@ -1,41 +1,40 @@ // Include Files /*{{{*/ #include <config.h> -#include <apt-pkg/acquire.h> #include <apt-pkg/acquire-item.h> +#include <apt-pkg/acquire.h> #include <apt-pkg/algorithms.h> #include <apt-pkg/cachefile.h> #include <apt-pkg/cacheset.h> #include <apt-pkg/cmndline.h> +#include <apt-pkg/configuration.h> #include <apt-pkg/depcache.h> #include <apt-pkg/error.h> #include <apt-pkg/fileutl.h> +#include <apt-pkg/install-progress.h> +#include <apt-pkg/macros.h> +#include <apt-pkg/packagemanager.h> +#include <apt-pkg/pkgcache.h> #include <apt-pkg/pkgrecords.h> #include <apt-pkg/pkgsystem.h> +#include <apt-pkg/prettyprinters.h> #include <apt-pkg/sptr.h> #include <apt-pkg/strutl.h> -#include <apt-pkg/cacheiterators.h> -#include <apt-pkg/configuration.h> -#include <apt-pkg/macros.h> -#include <apt-pkg/packagemanager.h> -#include <apt-pkg/pkgcache.h> #include <apt-pkg/upgrade.h> -#include <apt-pkg/install-progress.h> -#include <apt-pkg/prettyprinters.h> -#include <stdlib.h> -#include <string.h> #include <algorithm> #include <iostream> +#include <map> #include <set> #include <vector> -#include <map> +#include <stdlib.h> +#include <string.h> #include <apt-private/acqprogress.h> -#include <apt-private/private-install.h> #include <apt-private/private-cachefile.h> #include <apt-private/private-cacheset.h> #include <apt-private/private-download.h> +#include <apt-private/private-install.h> #include <apt-private/private-output.h> #include <apti18n.h> @@ -109,6 +108,7 @@ bool InstallPackages(CacheFile &Cache,bool ShwKept,bool Ask, bool Safety) Cache->MarkDelete(I,true); // Create the download object + auto const DownloadAllowed = _config->FindB("APT::Get::Download",true); aptAcquireWithTextStatus Fetcher; if (_config->FindB("APT::Get::Print-URIs", false) == true) { @@ -136,7 +136,7 @@ bool InstallPackages(CacheFile &Cache,bool ShwKept,bool Ask, bool Safety) _error->PendingError() == true) return false; - if (_config->FindB("APT::Get::Download",true) == false) + if (DownloadAllowed == false) { bool Missing = false; RemoveDownloadNeedingItemsFromFetcher(Fetcher, Missing); @@ -218,27 +218,30 @@ bool InstallPackages(CacheFile &Cache,bool ShwKept,bool Ask, bool Safety) return true; } - // Display statistics - auto const FetchBytes = Fetcher.FetchNeeded(); - auto const FetchPBytes = Fetcher.PartialPresent(); - auto const DebBytes = Fetcher.TotalNeeded(); - if (DebBytes != Cache->DebSize()) + auto const FetchBytes = DownloadAllowed ? Fetcher.FetchNeeded() : 0; + auto const FetchPBytes = DownloadAllowed ? Fetcher.PartialPresent() : 0; + if (DownloadAllowed) { - c0out << DebBytes << ',' << Cache->DebSize() << std::endl; - c0out << _("How odd... The sizes didn't match, email apt@packages.debian.org") << std::endl; - } - - // Number of bytes - if (DebBytes != FetchBytes) - //TRANSLATOR: The required space between number and unit is already included - // in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB - ioprintf(c1out,_("Need to get %sB/%sB of archives.\n"), + // Display statistics + auto const DebBytes = Fetcher.TotalNeeded(); + if (DebBytes != Cache->DebSize()) + { + c0out << "E: " << DebBytes << ',' << Cache->DebSize() << std::endl; + c0out << "E: " << _("How odd... The sizes didn't match, email apt@packages.debian.org") << std::endl; + } + + // Number of bytes + if (DebBytes != FetchBytes) + //TRANSLATOR: The required space between number and unit is already included + // in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB + ioprintf(c1out,_("Need to get %sB/%sB of archives.\n"), SizeToStr(FetchBytes).c_str(),SizeToStr(DebBytes).c_str()); - else if (DebBytes != 0) - //TRANSLATOR: The required space between number and unit is already included - // in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB - ioprintf(c1out,_("Need to get %sB of archives.\n"), + else if (DebBytes != 0) + //TRANSLATOR: The required space between number and unit is already included + // in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB + ioprintf(c1out,_("Need to get %sB of archives.\n"), SizeToStr(DebBytes).c_str()); + } // Size delta if (Cache->UsrSize() >= 0) @@ -252,8 +255,9 @@ bool InstallPackages(CacheFile &Cache,bool ShwKept,bool Ask, bool Safety) ioprintf(c1out,_("After this operation, %sB disk space will be freed.\n"), SizeToStr(-1*Cache->UsrSize()).c_str()); - if (CheckFreeSpaceBeforeDownload(_config->FindDir("Dir::Cache::Archives"), (FetchBytes - FetchPBytes)) == false) - return false; + if (DownloadAllowed) + if (CheckFreeSpaceBeforeDownload(_config->FindDir("Dir::Cache::Archives"), (FetchBytes - FetchPBytes)) == false) + return false; if (_error->PendingError() == true) return false; @@ -362,7 +366,7 @@ bool InstallPackages(CacheFile &Cache,bool ShwKept,bool Ask, bool Safety) return false; Failed = false; - if (_config->FindB("APT::Get::Download",true) == false) + if (DownloadAllowed == false) RemoveDownloadNeedingItemsFromFetcher(Fetcher, Failed); } diff --git a/apt-private/private-install.h b/apt-private/private-install.h index d2a9bed3f..c8b065331 100644 --- a/apt-private/private-install.h +++ b/apt-private/private-install.h @@ -2,11 +2,10 @@ #define APT_PRIVATE_INSTALL_H #include <apt-pkg/cachefile.h> -#include <apt-pkg/configuration.h> -#include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheiterators.h> #include <apt-pkg/cacheset.h> +#include <apt-pkg/configuration.h> #include <apt-pkg/macros.h> +#include <apt-pkg/pkgcache.h> #include <list> #include <string> diff --git a/apt-private/private-list.cc b/apt-private/private-list.cc index 32c8eeaa2..2c9b349a3 100644 --- a/apt-private/private-list.cc +++ b/apt-private/private-list.cc @@ -5,21 +5,20 @@ #include <apt-pkg/cachefilter.h> #include <apt-pkg/cacheset.h> #include <apt-pkg/cmndline.h> -#include <apt-pkg/pkgrecords.h> -#include <apt-pkg/progress.h> -#include <apt-pkg/strutl.h> #include <apt-pkg/configuration.h> #include <apt-pkg/macros.h> #include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheiterators.h> +#include <apt-pkg/pkgrecords.h> +#include <apt-pkg/progress.h> +#include <apt-pkg/strutl.h> #include <apt-private/private-cacheset.h> #include <apt-private/private-list.h> #include <apt-private/private-output.h> #include <iostream> -#include <sstream> #include <map> +#include <sstream> #include <string> #include <utility> #include <vector> diff --git a/apt-private/private-main.cc b/apt-private/private-main.cc index 52f35cfdc..47b1a0921 100644 --- a/apt-private/private-main.cc +++ b/apt-private/private-main.cc @@ -10,13 +10,12 @@ #include <iostream> #include <locale> +#include <signal.h> #include <string.h> #include <unistd.h> -#include <signal.h> #include <apti18n.h> - void InitLocale(APT_CMD const binary) /*{{{*/ { try { diff --git a/apt-private/private-moo.cc b/apt-private/private-moo.cc index b8ed6efbd..ca456ed96 100644 --- a/apt-private/private-moo.cc +++ b/apt-private/private-moo.cc @@ -7,22 +7,22 @@ ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ -#include<config.h> +#include <config.h> -#include <apt-pkg/configuration.h> #include <apt-pkg/cmndline.h> +#include <apt-pkg/configuration.h> #include <apt-pkg/strutl.h> #include <apt-private/private-moo.h> #include <apt-private/private-output.h> #include <apt-private/private-utils.h> -#include <stddef.h> -#include <string.h> -#include <time.h> #include <iostream> #include <sstream> #include <string> +#include <stddef.h> +#include <string.h> +#include <time.h> #include <apti18n.h> /*}}}*/ diff --git a/apt-private/private-output.cc b/apt-private/private-output.cc index 9c25cda6d..6bc18516d 100644 --- a/apt-private/private-output.cc +++ b/apt-private/private-output.cc @@ -1,29 +1,28 @@ // Include files /*{{{*/ -#include<config.h> +#include <config.h> +#include <apt-pkg/cachefile.h> #include <apt-pkg/configuration.h> -#include <apt-pkg/strutl.h> +#include <apt-pkg/depcache.h> #include <apt-pkg/error.h> -#include <apt-pkg/cachefile.h> +#include <apt-pkg/pkgcache.h> #include <apt-pkg/pkgrecords.h> #include <apt-pkg/policy.h> -#include <apt-pkg/depcache.h> -#include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheiterators.h> +#include <apt-pkg/strutl.h> -#include <apt-private/private-output.h> #include <apt-private/private-cachefile.h> +#include <apt-private/private-output.h> -#include <regex.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> #include <iomanip> #include <iostream> #include <langinfo.h> -#include <unistd.h> +#include <regex.h> #include <signal.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> #include <sys/ioctl.h> +#include <unistd.h> #include <sstream> @@ -650,20 +649,20 @@ void Stats(ostream &out,pkgDepCache &Dep) // YnPrompt - Yes No Prompt. /*{{{*/ // --------------------------------------------------------------------- /* Returns true on a Yes.*/ -bool YnPrompt(char const * const Question, bool Default) +bool YnPrompt(char const * const Question, bool const Default, bool const ShowGlobalErrors, std::ostream &c1o, std::ostream &c2o) { auto const AssumeYes = _config->FindB("APT::Get::Assume-Yes",false); auto const AssumeNo = _config->FindB("APT::Get::Assume-No",false); // if we ask interactively, show warnings/notices before the question - if (AssumeYes == false && AssumeNo == false) + if (ShowGlobalErrors == true && AssumeYes == false && AssumeNo == false) { if (_config->FindI("quiet",0) > 0) - _error->DumpErrors(c2out); + _error->DumpErrors(c2o); else - _error->DumpErrors(c2out, GlobalError::DEBUG); + _error->DumpErrors(c2o, GlobalError::DEBUG); } - c2out << Question << std::flush; + c2o << Question << std::flush; /* nl_langinfo does not support LANGUAGE setting, so we unset it here to have the help-message (hopefully) match the expected characters */ @@ -678,13 +677,13 @@ bool YnPrompt(char const * const Question, bool Default) // e.g. "Do you want to continue? [Y/n] " // The user has to answer with an input matching the // YESEXPR/NOEXPR defined in your l10n. - c2out << " " << _("[Y/n]") << " " << std::flush; + c2o << " " << _("[Y/n]") << " " << std::flush; else // TRANSLATOR: Yes/No question help-text: defaulting to N[o] // e.g. "Should this file be removed? [y/N] " // The user has to answer with an input matching the // YESEXPR/NOEXPR defined in your l10n. - c2out << " " << _("[y/N]") << " " << std::flush; + c2o << " " << _("[y/N]") << " " << std::flush; if (language != NULL) { @@ -695,13 +694,13 @@ bool YnPrompt(char const * const Question, bool Default) if (AssumeYes) { // TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set - c1out << _("Y") << std::endl; + c1o << _("Y") << std::endl; return true; } else if (AssumeNo) { // TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set - c1out << _("N") << std::endl; + c1o << _("N") << std::endl; return false; } @@ -721,16 +720,20 @@ bool YnPrompt(char const * const Question, bool Default) REG_EXTENDED|REG_ICASE|REG_NOSUB); if (Res != 0) { - char Error[300]; + char Error[300]; regerror(Res,&Pattern,Error,sizeof(Error)); return _error->Error(_("Regex compilation error - %s"),Error); } - + Res = regexec(&Pattern, response, 0, NULL, 0); if (Res == 0) return true; return false; } +bool YnPrompt(char const * const Question, bool const Default) +{ + return YnPrompt(Question, Default, true, c1out, c2out); +} /*}}}*/ // AnalPrompt - Annoying Yes No Prompt. /*{{{*/ // --------------------------------------------------------------------- diff --git a/apt-private/private-output.h b/apt-private/private-output.h index bb9428d7f..1ac861328 100644 --- a/apt-private/private-output.h +++ b/apt-private/private-output.h @@ -2,13 +2,13 @@ #define APT_PRIVATE_OUTPUT_H #include <apt-pkg/configuration.h> -#include <apt-pkg/pkgcache.h> #include <apt-pkg/macros.h> +#include <apt-pkg/pkgcache.h> -#include <functional> #include <fstream> -#include <string> +#include <functional> #include <iostream> +#include <string> // forward declaration class pkgCacheFile; @@ -102,6 +102,7 @@ void Stats(std::ostream &out, pkgDepCache &Dep); // prompting bool YnPrompt(char const * const Question, bool Default=true); +bool YnPrompt(char const * const Question, bool const Default, bool const ShowGlobalErrors, std::ostream &c1o, std::ostream &c2o); bool AnalPrompt(std::string const &Question, const char *Text); std::string PrettyFullName(pkgCache::PkgIterator const &Pkg); diff --git a/apt-private/private-search.cc b/apt-private/private-search.cc index bae04173d..b850339f9 100644 --- a/apt-private/private-search.cc +++ b/apt-private/private-search.cc @@ -4,26 +4,25 @@ #include <apt-pkg/cachefile.h> #include <apt-pkg/cacheset.h> #include <apt-pkg/cmndline.h> -#include <apt-pkg/pkgrecords.h> -#include <apt-pkg/policy.h> -#include <apt-pkg/progress.h> -#include <apt-pkg/cacheiterators.h> #include <apt-pkg/configuration.h> #include <apt-pkg/depcache.h> #include <apt-pkg/macros.h> #include <apt-pkg/pkgcache.h> +#include <apt-pkg/pkgrecords.h> +#include <apt-pkg/policy.h> +#include <apt-pkg/progress.h> #include <apt-private/private-cacheset.h> #include <apt-private/private-output.h> #include <apt-private/private-search.h> #include <apt-private/private-show.h> -#include <string.h> #include <iostream> -#include <sstream> #include <map> +#include <sstream> #include <string> #include <utility> +#include <string.h> #include <apti18n.h> /*}}}*/ diff --git a/apt-private/private-search.h b/apt-private/private-search.h index 8ae1f38f3..518f297ca 100644 --- a/apt-private/private-search.h +++ b/apt-private/private-search.h @@ -1,8 +1,8 @@ #ifndef APT_PRIVATE_SEARCH_H #define APT_PRIVATE_SEARCH_H -#include <apt-pkg/pkgcache.h> #include <apt-pkg/macros.h> +#include <apt-pkg/pkgcache.h> class CommandLine; diff --git a/apt-private/private-show.cc b/apt-private/private-show.cc index 27338a08c..3cc6a5b87 100644 --- a/apt-private/private-show.cc +++ b/apt-private/private-show.cc @@ -4,29 +4,28 @@ #include <apt-pkg/cachefile.h> #include <apt-pkg/cacheset.h> #include <apt-pkg/cmndline.h> +#include <apt-pkg/configuration.h> +#include <apt-pkg/depcache.h> #include <apt-pkg/error.h> #include <apt-pkg/fileutl.h> #include <apt-pkg/indexfile.h> +#include <apt-pkg/macros.h> +#include <apt-pkg/pkgcache.h> #include <apt-pkg/pkgrecords.h> #include <apt-pkg/pkgsystem.h> +#include <apt-pkg/policy.h> #include <apt-pkg/sourcelist.h> #include <apt-pkg/strutl.h> #include <apt-pkg/tagfile.h> -#include <apt-pkg/cacheiterators.h> -#include <apt-pkg/configuration.h> -#include <apt-pkg/depcache.h> -#include <apt-pkg/macros.h> -#include <apt-pkg/pkgcache.h> -#include <apt-pkg/policy.h> #include <apt-private/private-cacheset.h> #include <apt-private/private-output.h> #include <apt-private/private-show.h> -#include <stdio.h> -#include <unistd.h> #include <ostream> #include <string> +#include <stdio.h> +#include <unistd.h> #include <apti18n.h> /*}}}*/ diff --git a/apt-private/private-show.h b/apt-private/private-show.h index 80871b817..e48979c2c 100644 --- a/apt-private/private-show.h +++ b/apt-private/private-show.h @@ -1,8 +1,8 @@ #ifndef APT_PRIVATE_SHOW_H #define APT_PRIVATE_SHOW_H -#include <apt-pkg/pkgcache.h> #include <apt-pkg/macros.h> +#include <apt-pkg/pkgcache.h> #include <iostream> diff --git a/apt-private/private-source.cc b/apt-private/private-source.cc index e9ec7c6cf..47610cd80 100644 --- a/apt-private/private-source.cc +++ b/apt-private/private-source.cc @@ -6,7 +6,6 @@ #include <apt-pkg/algorithms.h> #include <apt-pkg/aptconfiguration.h> #include <apt-pkg/cachefile.h> -#include <apt-pkg/cacheiterators.h> #include <apt-pkg/cacheset.h> #include <apt-pkg/cmndline.h> #include <apt-pkg/configuration.h> @@ -17,11 +16,11 @@ #include <apt-pkg/indexfile.h> #include <apt-pkg/metaindex.h> #include <apt-pkg/pkgcache.h> +#include <apt-pkg/policy.h> #include <apt-pkg/sourcelist.h> #include <apt-pkg/srcrecords.h> #include <apt-pkg/strutl.h> #include <apt-pkg/version.h> -#include <apt-pkg/policy.h> #include <apt-private/private-cachefile.h> #include <apt-private/private-cacheset.h> @@ -39,8 +38,8 @@ #include <unistd.h> #include <iostream> -#include <sstream> #include <set> +#include <sstream> #include <string> #include <vector> diff --git a/apt-private/private-sources.cc b/apt-private/private-sources.cc index 587571760..1d27d0ff1 100644 --- a/apt-private/private-sources.cc +++ b/apt-private/private-sources.cc @@ -1,24 +1,24 @@ #include <config.h> -#include <apt-pkg/hashes.h> -#include <apt-pkg/strutl.h> -#include <apt-pkg/configuration.h> -#include <apt-pkg/sourcelist.h> +#include <apt-pkg/cachefile.h> #include <apt-pkg/cmndline.h> +#include <apt-pkg/configuration.h> #include <apt-pkg/error.h> #include <apt-pkg/fileutl.h> -#include <apt-pkg/cachefile.h> +#include <apt-pkg/hashes.h> +#include <apt-pkg/sourcelist.h> +#include <apt-pkg/strutl.h> #include <apt-private/private-output.h> #include <apt-private/private-sources.h> #include <apt-private/private-utils.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <stddef.h> -#include <unistd.h> #include <iostream> #include <string> +#include <stddef.h> +#include <sys/stat.h> +#include <sys/types.h> +#include <unistd.h> #include <apti18n.h> diff --git a/apt-private/private-unmet.cc b/apt-private/private-unmet.cc index 51ace3f47..f5161fcc3 100644 --- a/apt-private/private-unmet.cc +++ b/apt-private/private-unmet.cc @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Include Files /*{{{*/ -#include<config.h> +#include <config.h> #include <apt-pkg/cachefile.h> #include <apt-pkg/cmndline.h> diff --git a/apt-private/private-update.cc b/apt-private/private-update.cc index a886c830f..8949dab30 100644 --- a/apt-private/private-update.cc +++ b/apt-private/private-update.cc @@ -1,15 +1,15 @@ // Include files /*{{{*/ -#include<config.h> +#include <config.h> #include <apt-pkg/acquire-item.h> +#include <apt-pkg/acquire.h> #include <apt-pkg/cachefile.h> #include <apt-pkg/cmndline.h> +#include <apt-pkg/configuration.h> #include <apt-pkg/error.h> #include <apt-pkg/fileutl.h> #include <apt-pkg/sourcelist.h> #include <apt-pkg/update.h> -#include <apt-pkg/acquire.h> -#include <apt-pkg/configuration.h> #include <apt-private/acqprogress.h> #include <apt-private/private-cachefile.h> diff --git a/apt-private/private-upgrade.cc b/apt-private/private-upgrade.cc index 679140bfd..989f6b0c1 100644 --- a/apt-private/private-upgrade.cc +++ b/apt-private/private-upgrade.cc @@ -1,14 +1,14 @@ // Includes /*{{{*/ #include <config.h> -#include <apt-pkg/upgrade.h> #include <apt-pkg/configuration.h> #include <apt-pkg/error.h> +#include <apt-pkg/upgrade.h> -#include <apt-private/private-install.h> #include <apt-private/private-cachefile.h> -#include <apt-private/private-upgrade.h> +#include <apt-private/private-install.h> #include <apt-private/private-output.h> +#include <apt-private/private-upgrade.h> #include <iostream> diff --git a/cmdline/apt-cache.cc b/cmdline/apt-cache.cc index 0d7425c48..0f120a4b0 100644 --- a/cmdline/apt-cache.cc +++ b/cmdline/apt-cache.cc @@ -13,17 +13,22 @@ ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ -#include<config.h> +#include <config.h> #include <apt-pkg/algorithms.h> #include <apt-pkg/cachefile.h> #include <apt-pkg/cacheset.h> #include <apt-pkg/cmndline.h> +#include <apt-pkg/configuration.h> +#include <apt-pkg/depcache.h> #include <apt-pkg/error.h> #include <apt-pkg/fileutl.h> #include <apt-pkg/indexfile.h> #include <apt-pkg/init.h> +#include <apt-pkg/macros.h> #include <apt-pkg/metaindex.h> +#include <apt-pkg/mmap.h> +#include <apt-pkg/pkgcache.h> #include <apt-pkg/pkgrecords.h> #include <apt-pkg/pkgsystem.h> #include <apt-pkg/policy.h> @@ -34,26 +39,15 @@ #include <apt-pkg/strutl.h> #include <apt-pkg/tagfile.h> #include <apt-pkg/version.h> -#include <apt-pkg/cacheiterators.h> -#include <apt-pkg/configuration.h> -#include <apt-pkg/depcache.h> -#include <apt-pkg/macros.h> -#include <apt-pkg/mmap.h> -#include <apt-pkg/pkgcache.h> #include <apt-private/private-cacheset.h> #include <apt-private/private-cmndline.h> #include <apt-private/private-depends.h> -#include <apt-private/private-show.h> +#include <apt-private/private-main.h> #include <apt-private/private-search.h> +#include <apt-private/private-show.h> #include <apt-private/private-unmet.h> -#include <apt-private/private-main.h> -#include <regex.h> -#include <stddef.h> -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> #include <algorithm> #include <cstring> #include <iomanip> @@ -63,6 +57,11 @@ #include <set> #include <string> #include <vector> +#include <regex.h> +#include <stddef.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> #include <apti18n.h> /*}}}*/ @@ -404,7 +403,7 @@ static bool DumpAvail(CommandLine &) if (unlikely(Cache == NULL || CacheFile.BuildPolicy() == false)) return false; - unsigned long Count = Cache->HeaderP->PackageCount+1; + auto const Count = Cache->HeaderP->PackageCount+1; pkgCache::VerFile **VFList = new pkgCache::VerFile *[Count]; memset(VFList,0,sizeof(*VFList)*Count); @@ -565,18 +564,19 @@ static bool XVcg(CommandLine &CmdL) 0 = None */ enum States {None=0, ToShow, ToShowNR, DoneNR, Done}; enum TheFlags {ForceNR=(1<<0)}; - unsigned char *Show = new unsigned char[Cache->Head().PackageCount]; - unsigned char *Flags = new unsigned char[Cache->Head().PackageCount]; - unsigned char *ShapeMap = new unsigned char[Cache->Head().PackageCount]; + auto PackageCount = Cache->Head().PackageCount; + unsigned char *Show = new unsigned char[PackageCount]; + unsigned char *Flags = new unsigned char[PackageCount]; + unsigned char *ShapeMap = new unsigned char[PackageCount]; // Show everything if no arguments given if (CmdL.FileList[1] == 0) - for (unsigned long I = 0; I != Cache->Head().PackageCount; I++) + for (decltype(PackageCount) I = 0; I != PackageCount; ++I) Show[I] = ToShow; else - for (unsigned long I = 0; I != Cache->Head().PackageCount; I++) + for (decltype(PackageCount) I = 0; I != PackageCount; ++I) Show[I] = None; - memset(Flags,0,sizeof(*Flags)*Cache->Head().PackageCount); + memset(Flags,0,sizeof(*Flags)*PackageCount); // Map the shapes for (pkgCache::PkgIterator Pkg = Cache->PkgBegin(); Pkg.end() == false; ++Pkg) @@ -777,18 +777,19 @@ static bool Dotty(CommandLine &CmdL) 0 = None */ enum States {None=0, ToShow, ToShowNR, DoneNR, Done}; enum TheFlags {ForceNR=(1<<0)}; - unsigned char *Show = new unsigned char[Cache->Head().PackageCount]; - unsigned char *Flags = new unsigned char[Cache->Head().PackageCount]; - unsigned char *ShapeMap = new unsigned char[Cache->Head().PackageCount]; + auto PackageCount = Cache->Head().PackageCount; + unsigned char *Show = new unsigned char[PackageCount]; + unsigned char *Flags = new unsigned char[PackageCount]; + unsigned char *ShapeMap = new unsigned char[PackageCount]; // Show everything if no arguments given if (CmdL.FileList[1] == 0) - for (unsigned long I = 0; I != Cache->Head().PackageCount; I++) + for (decltype(PackageCount) I = 0; I != PackageCount; ++I) Show[I] = ToShow; else - for (unsigned long I = 0; I != Cache->Head().PackageCount; I++) + for (decltype(PackageCount) I = 0; I != PackageCount; ++I) Show[I] = None; - memset(Flags,0,sizeof(*Flags)*Cache->Head().PackageCount); + memset(Flags,0,sizeof(*Flags)*PackageCount); // Map the shapes for (pkgCache::PkgIterator Pkg = Cache->PkgBegin(); Pkg.end() == false; ++Pkg) diff --git a/cmdline/apt-cdrom.cc b/cmdline/apt-cdrom.cc index bac808a41..577d072db 100644 --- a/cmdline/apt-cdrom.cc +++ b/cmdline/apt-cdrom.cc @@ -11,28 +11,28 @@ ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ -#include<config.h> +#include <config.h> +#include <apt-pkg/cdrom.h> +#include <apt-pkg/cdromutl.h> #include <apt-pkg/cmndline.h> +#include <apt-pkg/configuration.h> #include <apt-pkg/error.h> -#include <apt-pkg/init.h> #include <apt-pkg/fileutl.h> +#include <apt-pkg/init.h> +#include <apt-pkg/pkgsystem.h> #include <apt-pkg/progress.h> -#include <apt-pkg/cdromutl.h> #include <apt-pkg/strutl.h> -#include <apt-pkg/cdrom.h> -#include <apt-pkg/configuration.h> -#include <apt-pkg/pkgsystem.h> #include <iostream> -#include <vector> #include <string> +#include <vector> #include <sys/stat.h> #include <unistd.h> #include <apt-private/private-cmndline.h> -#include <apt-private/private-output.h> #include <apt-private/private-main.h> +#include <apt-private/private-output.h> #include <apti18n.h> /*}}}*/ diff --git a/cmdline/apt-config.cc b/cmdline/apt-config.cc index adec8dda4..ef1e95de1 100644 --- a/cmdline/apt-config.cc +++ b/cmdline/apt-config.cc @@ -16,20 +16,20 @@ ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ -#include<config.h> +#include <config.h> +#include <apt-pkg/aptconfiguration.h> #include <apt-pkg/cmndline.h> +#include <apt-pkg/configuration.h> #include <apt-pkg/error.h> #include <apt-pkg/init.h> -#include <apt-pkg/strutl.h> -#include <apt-pkg/configuration.h> -#include <apt-pkg/aptconfiguration.h> #include <apt-pkg/pkgsystem.h> +#include <apt-pkg/strutl.h> #include <iostream> +#include <map> #include <string> #include <vector> -#include <map> #include <string.h> #include <apt-private/private-cmndline.h> diff --git a/cmdline/apt-extracttemplates.cc b/cmdline/apt-extracttemplates.cc index a4468b989..928fb1882 100644 --- a/cmdline/apt-extracttemplates.cc +++ b/cmdline/apt-extracttemplates.cc @@ -13,34 +13,33 @@ ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ -#include<config.h> +#include <config.h> -#include <apt-pkg/init.h> #include <apt-pkg/cmndline.h> -#include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheiterators.h> #include <apt-pkg/configuration.h> -#include <apt-pkg/sourcelist.h> -#include <apt-pkg/pkgcachegen.h> -#include <apt-pkg/version.h> -#include <apt-pkg/tagfile.h> #include <apt-pkg/debfile.h> #include <apt-pkg/deblistparser.h> +#include <apt-pkg/dirstream.h> #include <apt-pkg/error.h> -#include <apt-pkg/strutl.h> #include <apt-pkg/fileutl.h> -#include <apt-pkg/pkgsystem.h> -#include <apt-pkg/dirstream.h> +#include <apt-pkg/init.h> #include <apt-pkg/mmap.h> +#include <apt-pkg/pkgcache.h> +#include <apt-pkg/pkgcachegen.h> +#include <apt-pkg/pkgsystem.h> +#include <apt-pkg/sourcelist.h> +#include <apt-pkg/strutl.h> +#include <apt-pkg/tagfile.h> +#include <apt-pkg/version.h> #include <apt-private/private-cmndline.h> #include <apt-private/private-main.h> #include <iostream> #include <stdio.h> +#include <stdlib.h> #include <string.h> #include <unistd.h> -#include <stdlib.h> #include "apt-extracttemplates.h" diff --git a/cmdline/apt-extracttemplates.h b/cmdline/apt-extracttemplates.h index 91e385e70..66d98570a 100644 --- a/cmdline/apt-extracttemplates.h +++ b/cmdline/apt-extracttemplates.h @@ -10,8 +10,8 @@ #ifndef _APTEXTRACTTEMPLATE_H_ #define _APTEXTRACTTEMPLATE_H_ -#include <apt-pkg/fileutl.h> #include <apt-pkg/dirstream.h> +#include <apt-pkg/fileutl.h> #include <string> diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index 95d88e2ad..5cc0a02da 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -28,50 +28,51 @@ #include <config.h> #include <apt-pkg/acquire-item.h> +#include <apt-pkg/acquire.h> #include <apt-pkg/algorithms.h> #include <apt-pkg/aptconfiguration.h> #include <apt-pkg/cachefile.h> #include <apt-pkg/cacheset.h> #include <apt-pkg/clean.h> #include <apt-pkg/cmndline.h> +#include <apt-pkg/configuration.h> #include <apt-pkg/debmetaindex.h> #include <apt-pkg/depcache.h> #include <apt-pkg/error.h> #include <apt-pkg/fileutl.h> #include <apt-pkg/indexfile.h> #include <apt-pkg/init.h> +#include <apt-pkg/macros.h> #include <apt-pkg/md5.h> #include <apt-pkg/metaindex.h> +#include <apt-pkg/pkgcache.h> #include <apt-pkg/pkgrecords.h> #include <apt-pkg/pkgsystem.h> #include <apt-pkg/progress.h> #include <apt-pkg/sourcelist.h> +#include <apt-pkg/sptr.h> #include <apt-pkg/srcrecords.h> #include <apt-pkg/strutl.h> -#include <apt-pkg/version.h> -#include <apt-pkg/acquire.h> -#include <apt-pkg/configuration.h> -#include <apt-pkg/macros.h> -#include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheiterators.h> #include <apt-pkg/upgrade.h> -#include <apt-pkg/sptr.h> +#include <apt-pkg/version.h> #include <apt-private/acqprogress.h> -#include <apt-private/private-cacheset.h> #include <apt-private/private-cachefile.h> +#include <apt-private/private-cacheset.h> #include <apt-private/private-cmndline.h> #include <apt-private/private-download.h> #include <apt-private/private-install.h> #include <apt-private/private-main.h> #include <apt-private/private-moo.h> #include <apt-private/private-output.h> +#include <apt-private/private-source.h> #include <apt-private/private-update.h> #include <apt-private/private-upgrade.h> #include <apt-private/private-utils.h> -#include <apt-private/private-source.h> #include <errno.h> +#include <grp.h> +#include <pwd.h> #include <signal.h> #include <stddef.h> #include <stdio.h> @@ -80,14 +81,12 @@ #include <sys/ioctl.h> #include <sys/stat.h> #include <unistd.h> -#include <pwd.h> -#include <grp.h> #include <algorithm> #include <fstream> #include <iostream> -#include <sstream> #include <set> +#include <sstream> #include <string> #include <vector> diff --git a/cmdline/apt-helper.cc b/cmdline/apt-helper.cc index a6f88ad06..59b72ec25 100644 --- a/cmdline/apt-helper.cc +++ b/cmdline/apt-helper.cc @@ -7,30 +7,30 @@ // Include Files /*{{{*/ #include <config.h> -#include <apt-pkg/configuration.h> +#include <apt-pkg/acquire-item.h> +#include <apt-pkg/acquire.h> #include <apt-pkg/cmndline.h> +#include <apt-pkg/configuration.h> #include <apt-pkg/error.h> +#include <apt-pkg/fileutl.h> #include <apt-pkg/init.h> -#include <apt-pkg/strutl.h> #include <apt-pkg/pkgsystem.h> -#include <apt-pkg/fileutl.h> -#include <apt-pkg/acquire.h> -#include <apt-pkg/acquire-item.h> #include <apt-pkg/proxy.h> +#include <apt-pkg/strutl.h> +#include <apt-pkg/srvrec.h> #include <apt-private/acqprogress.h> -#include <apt-private/private-output.h> -#include <apt-private/private-download.h> #include <apt-private/private-cmndline.h> +#include <apt-private/private-download.h> #include <apt-private/private-main.h> -#include <apt-pkg/srvrec.h> +#include <apt-private/private-output.h> #include <iostream> #include <string> #include <vector> -#include <unistd.h> #include <stdlib.h> +#include <unistd.h> #include <apti18n.h> /*}}}*/ diff --git a/cmdline/apt-internal-planner.cc b/cmdline/apt-internal-planner.cc index 1f74aa78f..be9de4ef4 100644 --- a/cmdline/apt-internal-planner.cc +++ b/cmdline/apt-internal-planner.cc @@ -9,34 +9,33 @@ // Include Files /*{{{*/ #include <config.h> -#include <apt-pkg/error.h> -#include <apt-pkg/cmndline.h> -#include <apt-pkg/init.h> #include <apt-pkg/cachefile.h> #include <apt-pkg/cacheset.h> -#include <apt-pkg/strutl.h> +#include <apt-pkg/cmndline.h> +#include <apt-pkg/configuration.h> +#include <apt-pkg/depcache.h> #include <apt-pkg/edsp.h> +#include <apt-pkg/error.h> #include <apt-pkg/fileutl.h> -#include <apt-pkg/pkgsystem.h> -#include <apt-pkg/configuration.h> +#include <apt-pkg/init.h> #include <apt-pkg/packagemanager.h> -#include <apt-pkg/prettyprinters.h> -#include <apt-pkg/depcache.h> #include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheiterators.h> +#include <apt-pkg/pkgsystem.h> +#include <apt-pkg/prettyprinters.h> +#include <apt-pkg/strutl.h> -#include <apt-private/private-output.h> #include <apt-private/private-cmndline.h> #include <apt-private/private-main.h> +#include <apt-private/private-output.h> -#include <string.h> +#include <cstdio> #include <iostream> -#include <sstream> #include <list> +#include <sstream> #include <string> -#include <unistd.h> -#include <cstdio> #include <stdlib.h> +#include <string.h> +#include <unistd.h> #include <apti18n.h> /*}}}*/ diff --git a/cmdline/apt-internal-solver.cc b/cmdline/apt-internal-solver.cc index aecb0eaba..5c9ca5a35 100644 --- a/cmdline/apt-internal-solver.cc +++ b/cmdline/apt-internal-solver.cc @@ -9,34 +9,33 @@ // Include Files /*{{{*/ #include <config.h> -#include <apt-pkg/error.h> -#include <apt-pkg/cmndline.h> -#include <apt-pkg/init.h> +#include <apt-pkg/algorithms.h> #include <apt-pkg/cachefile.h> #include <apt-pkg/cacheset.h> -#include <apt-pkg/strutl.h> +#include <apt-pkg/cmndline.h> +#include <apt-pkg/configuration.h> +#include <apt-pkg/depcache.h> #include <apt-pkg/edsp.h> -#include <apt-pkg/algorithms.h> +#include <apt-pkg/error.h> #include <apt-pkg/fileutl.h> +#include <apt-pkg/init.h> +#include <apt-pkg/pkgcache.h> #include <apt-pkg/pkgsystem.h> +#include <apt-pkg/strutl.h> #include <apt-pkg/upgrade.h> -#include <apt-pkg/configuration.h> -#include <apt-pkg/depcache.h> -#include <apt-pkg/pkgcache.h> -#include <apt-pkg/cacheiterators.h> -#include <apt-private/private-output.h> #include <apt-private/private-cmndline.h> #include <apt-private/private-main.h> +#include <apt-private/private-output.h> -#include <string.h> +#include <cstdio> #include <iostream> -#include <sstream> #include <list> +#include <sstream> #include <string> -#include <unistd.h> -#include <cstdio> #include <stdlib.h> +#include <string.h> +#include <unistd.h> #include <apti18n.h> /*}}}*/ diff --git a/cmdline/apt-mark.cc b/cmdline/apt-mark.cc index 0cba31e70..8315efa12 100644 --- a/cmdline/apt-mark.cc +++ b/cmdline/apt-mark.cc @@ -10,22 +10,26 @@ #include <apt-pkg/cachefile.h> #include <apt-pkg/cacheset.h> #include <apt-pkg/cmndline.h> +#include <apt-pkg/configuration.h> +#include <apt-pkg/depcache.h> #include <apt-pkg/error.h> #include <apt-pkg/fileutl.h> #include <apt-pkg/init.h> -#include <apt-pkg/pkgsystem.h> -#include <apt-pkg/strutl.h> -#include <apt-pkg/statechanges.h> -#include <apt-pkg/cacheiterators.h> -#include <apt-pkg/configuration.h> -#include <apt-pkg/depcache.h> #include <apt-pkg/macros.h> #include <apt-pkg/pkgcache.h> +#include <apt-pkg/pkgsystem.h> +#include <apt-pkg/statechanges.h> +#include <apt-pkg/strutl.h> #include <apt-private/private-cmndline.h> -#include <apt-private/private-output.h> #include <apt-private/private-main.h> +#include <apt-private/private-output.h> +#include <algorithm> +#include <fstream> +#include <iostream> +#include <string> +#include <vector> #include <errno.h> #include <fcntl.h> #include <stddef.h> @@ -34,11 +38,6 @@ #include <string.h> #include <sys/wait.h> #include <unistd.h> -#include <algorithm> -#include <fstream> -#include <iostream> -#include <string> -#include <vector> #include <apti18n.h> /*}}}*/ diff --git a/cmdline/apt-sortpkgs.cc b/cmdline/apt-sortpkgs.cc index cf19b84ec..40be29c77 100644 --- a/cmdline/apt-sortpkgs.cc +++ b/cmdline/apt-sortpkgs.cc @@ -14,25 +14,25 @@ // Include Files /*{{{*/ #include <config.h> -#include <apt-pkg/tagfile.h> -#include <apt-pkg/error.h> -#include <apt-pkg/configuration.h> #include <apt-pkg/cmndline.h> -#include <apt-pkg/init.h> -#include <apt-pkg/strutl.h> +#include <apt-pkg/configuration.h> +#include <apt-pkg/error.h> #include <apt-pkg/fileutl.h> +#include <apt-pkg/init.h> #include <apt-pkg/pkgsystem.h> +#include <apt-pkg/strutl.h> +#include <apt-pkg/tagfile.h> #include <apt-private/private-cmndline.h> #include <apt-private/private-main.h> -#include <vector> #include <algorithm> -#include <stdio.h> -#include <unistd.h> #include <iostream> -#include <string> #include <memory> +#include <string> +#include <vector> +#include <stdio.h> +#include <unistd.h> #include <apti18n.h> /*}}}*/ diff --git a/cmdline/apt.cc b/cmdline/apt.cc index 4b266bcbe..6bf85467e 100644 --- a/cmdline/apt.cc +++ b/cmdline/apt.cc @@ -9,33 +9,33 @@ ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ -#include<config.h> +#include <config.h> #include <apt-pkg/cmndline.h> +#include <apt-pkg/configuration.h> #include <apt-pkg/error.h> #include <apt-pkg/init.h> #include <apt-pkg/pkgsystem.h> #include <apt-pkg/strutl.h> -#include <apt-pkg/configuration.h> -#include <apt-private/private-list.h> -#include <apt-private/private-search.h> -#include <apt-private/private-install.h> -#include <apt-private/private-output.h> -#include <apt-private/private-update.h> #include <apt-private/private-cmndline.h> +#include <apt-private/private-depends.h> +#include <apt-private/private-download.h> +#include <apt-private/private-install.h> +#include <apt-private/private-list.h> +#include <apt-private/private-main.h> #include <apt-private/private-moo.h> -#include <apt-private/private-upgrade.h> +#include <apt-private/private-output.h> +#include <apt-private/private-search.h> #include <apt-private/private-show.h> -#include <apt-private/private-main.h> -#include <apt-private/private-sources.h> #include <apt-private/private-source.h> -#include <apt-private/private-depends.h> -#include <apt-private/private-download.h> +#include <apt-private/private-sources.h> +#include <apt-private/private-update.h> +#include <apt-private/private-upgrade.h> -#include <unistd.h> #include <iostream> #include <vector> +#include <unistd.h> #include <apti18n.h> /*}}}*/ diff --git a/debian/NEWS b/debian/NEWS index bff3621bc..9a93de69e 100644 --- a/debian/NEWS +++ b/debian/NEWS @@ -1,3 +1,34 @@ +apt (1.5~beta1) unstable; urgency=medium + + [ New HTTPS method ] + The default http method now supports HTTPS itself, including encrypted proxies + and connecting to HTTPS sites via HTTPS proxies; and the apt-transport-https + package only provides a "curl+https" method now as a fallback, but will be + removed shortly. If TLS support is unwanted, it can be disabled overall by + setting the option Acquire::AllowTLS to "false". + + As for backwards compatibility, the options IssuerCert and SslForceVersion + are not supported anymore, and any specified certificate files must in the + PEM format (curl might have allowed DER files as well). + + [ Changes to unauthenticated repositories ] + The security exception for apt-get to only raise warnings if it encounters + unauthenticated repositories in the "update" command is gone now, so that it + will raise errors just like apt and all other apt-based front-ends do since + at least apt version 1.3. + + It is possible (but STRONGLY ADVISED AGAINST) to revert to the previous + behaviour of apt-get by setting the option + Binary::apt-get::Acquire::AllowInsecureRepositories "true"; + See apt-secure(8) manpage for configuration details. + + [ Release Info Changes ] + If values like Origin, Label, and Codename change in a Release file, + update fails, or asks a user (if interactive). Various + --allow-releaseinfo-change are provided for non-interactive use. + + -- Julian Andres Klode <jak@debian.org> Mon, 03 Jul 2017 15:09:23 +0200 + apt (1.4.2) unstable; urgency=medium If periodic updates and unattended upgrades are enabled, the start of @@ -121,4 +152,3 @@ apt (0.5.25) unstable; urgency=low recreated the next time. -- Matt Zimmerman <mdz@debian.org> Sat, 8 May 2004 12:38:07 -0700 - diff --git a/debian/apt-transport-https.install b/debian/apt-transport-https.install index 7b14886df..4849f1484 100644 --- a/debian/apt-transport-https.install +++ b/debian/apt-transport-https.install @@ -1 +1,3 @@ -usr/lib/apt/methods/https +usr/lib/apt/methods/curl +usr/lib/apt/methods/curl+http +usr/lib/apt/methods/curl+https diff --git a/debian/apt.systemd.daily b/debian/apt.systemd.daily index 49af931bd..40b6692ec 100755 --- a/debian/apt.systemd.daily +++ b/debian/apt.systemd.daily @@ -78,6 +78,12 @@ check_stamp() stamp="$1" interval="$2" + if [ $interval = always ]; then + debug_echo "check_stamp: ignoring time stamp file, interval set to always" + # treat as enough time has passed + return 0 + fi + if [ $interval -eq 0 ]; then debug_echo "check_stamp: interval=0" # treat as no time has passed @@ -112,8 +118,20 @@ check_stamp() delta=$(($now-$stamp)) - # interval is in days, convert to sec. - interval=$(($interval*60*60*24)) + # Calculate the interval in seconds depending on the unit specified + if [ "${interval%s}" != "$interval" ] ; then + interval="${interval%s}" + elif [ "${interval%m}" != "$interval" ] ; then + interval="${interval%m}" + interval=$((interval*60)) + elif [ "${interval%h}" != "$interval" ] ; then + interval="${interval%h}" + interval=$((interval*60*60)) + else + interval="${interval%d}" + interval=$((interval*60*60*24)) + fi + debug_echo "check_stamp: interval=$interval, now=$now, stamp=$stamp, delta=$delta (sec)" # remove timestamps a day (or more) in the future and force re-check @@ -217,7 +235,9 @@ check_size_constraints() do_cache_backup() { BackupArchiveInterval="$1" - if [ $BackupArchiveInterval -eq 0 ]; then + if [ $BackupArchiveInterval = always ]; then + : + elif [ $BackupArchiveInterval -eq 0 ]; then return fi @@ -388,12 +408,19 @@ Debdelta=1 eval $(apt-config shell Debdelta APT::Periodic::Download-Upgradeable-Packages-Debdelta) # check if we actually have to do anything that requires locking the cache -if [ $UpdateInterval -eq 0 ] && - [ $DownloadUpgradeableInterval -eq 0 ] && - [ $UnattendedUpgradeInterval -eq 0 ] && - [ $BackupArchiveInterval -eq 0 ] && - [ $AutocleanInterval -eq 0 ] && - [ $CleanInterval -eq 0 ]; then +if [ $UpdateInterval = always ] || + [ $DownloadUpgradeableInterval = always ] || + [ $UnattendedUpgradeInterval = always ] || + [ $BackupArchiveInterval = always ] || + [ $AutocleanInterval = always ] || + [ $CleanInterval = always ] ; then + : +elif [ $UpdateInterval -eq 0 ] && + [ $DownloadUpgradeableInterval -eq 0 ] && + [ $UnattendedUpgradeInterval -eq 0 ] && + [ $BackupArchiveInterval -eq 0 ] && + [ $AutocleanInterval -eq 0 ] && + [ $CleanInterval -eq 0 ] ; then # check cache size check_size_constraints diff --git a/debian/changelog b/debian/changelog index f19355c35..e9ec2e230 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,100 @@ +apt (1.5~beta1) unstable; urgency=medium + + [ Julian Andres Klode ] + * Make Verify-Host and Verify-Peer independent again + * http: A response with Content-Length: 0 has no content + * Ignore download order in test-apt-update-failure-propagation + * tls: Add more details to error messages, and detect more errors + * Do not error out, only warn if ca certificates are not available + + [ David Kalnischkies ] + * don't set ip addresses as server names for SNI + + [ ÐлекÑей Шилин ] + * Russian translation update (Closes: #866749) + + -- Julian Andres Klode <jak@debian.org> Mon, 03 Jul 2017 16:57:59 +0200 + +apt (1.5~alpha4) experimental; urgency=medium + + * Reset failure reason when connection was successful + * Allow running the TLS stack on any lower connection + * http: Add support for CONNECT proxying to HTTPS locations + * http: Add support for https:// proxies + * Allow http(s) and socks5h for http and https in proxy auto detect + * Switch to 'http' as the default https method + * Improve closing the TLS connection + * TLS support: Error out on unsupported curl options + + -- Julian Andres Klode <jak@debian.org> Fri, 30 Jun 2017 18:18:09 +0200 + +apt (1.5~alpha3) experimental; urgency=medium + + * Don't read CaInfo if not specified (missing else) + This fixes a regression from ~alpha2. (Closes: #866559) + + -- Julian Andres Klode <jak@debian.org> Fri, 30 Jun 2017 09:50:13 +0200 + +apt (1.5~alpha2) experimental; urgency=medium + + [ David Kalnischkies ] + * support tor+https being handled by http + * use port from SRV record instead of initial port + + [ Robert Luberda ] + * fix a "critical" typo in old changelog entry (Closes: 866358) + + [ Julian Andres Klode ] + * Improve error message if system CA store is empty (Closes: #866377) + * Have apt Recommend ca-certificates + * Demote gnupg to Suggests + * http: Only use system CA store if CaInfo is not set + * Bump Standards-Version (and wrap-and-sort a bit) + * Build-Depend on debhelper (>= 10) to shut up lintian + + -- Julian Andres Klode <jak@debian.org> Thu, 29 Jun 2017 17:52:19 +0200 + +apt (1.5~alpha1) experimental; urgency=medium + + [ Julian Andres Klode ] + * pkgcache: Bump major version to 12 + * Squashed 'triehash/' changes from 565fde4e7..0ca66b761 + * methods: Add HTTPS support to http method, using GnuTLS. + The http method will eventually replace the curl-based + https method, but for now, this is an opt-in experiment + that can be enabled by setting Dir::Bin::Methods::https + to "http". + Known issues: + - We do not support HTTPS proxies yet + - We do not support proxying HTTPS connections yet (CONNECT) + - IssuerCert and SslForceVersion are unsupported + * Allow building without curl + * Introduce Acquire::AllowTLS to turn off TLS support + * Skip test-apt-download-progress + * Strip 0: epochs from the version hash + + [ David Kalnischkies ] + * schedule the correct side of the conflict for removal. + Thanks to Michael Biebl for helping find this with countless tests + * don't show incorrect 'How odd' error in no-download mode (Closes: 863635) + * Show permission error if ProxyAutoDetect cmd can't be executed + (Closes: 857885) + * Avoid chdir in acquire clean with unlinkat (Closes: 860738) + * ident a CD without changing directory + * clean archives without changing directory + * avoid changing directory in mirror method + * warn if an expected file can't be acquired + * show .diff/Index properly as ignored if we fallback + * fail InRelease on non-404 HTTP errorcodes + * deal with 3xx httpcodes as required by HTTP/1.1 spec + * fail instead of warn on insecure repositories in apt-get + * error in update on Release information changes + * show a Release-Notes URI if infos were changed + * allow frontends to override releaseinfo change behaviour + * ask for releaseinfo change interactively in apt + + -- Julian Andres Klode <jak@debian.org> Wed, 28 Jun 2017 19:52:24 +0200 + apt (1.4.6) unstable; urgency=medium * apt.systemd.daily: Do not pass -d to unattended-upgrade for the download @@ -3330,7 +3427,7 @@ apt (0.9.7.9~exp1) experimental; urgency=low -- Michael Vogt <mvo@debian.org> Fri, 22 Mar 2013 21:57:08 +0100 -apt (0.9.7.8) unstable; urgency=criticial +apt (0.9.7.8) unstable; urgency=critical * SECURITY UPDATE: InRelease verification bypass - CVE-2013-1051 diff --git a/debian/control b/debian/control index 96bbef348..896f98783 100644 --- a/debian/control +++ b/debian/control @@ -5,18 +5,19 @@ Maintainer: APT Development Team <deity@lists.debian.org> Uploaders: Michael Vogt <mvo@debian.org>, Julian Andres Klode <jak@debian.org>, David Kalnischkies <donkult@debian.org> -Standards-Version: 3.9.8 +Standards-Version: 4.0.0 Build-Depends: cmake (>= 3.4), - debhelper (>= 9.20160709~), + debhelper (>= 10), dh-systemd, docbook-xml, docbook-xsl, dpkg-dev (>= 1.17.14), gettext (>= 0.12), + googletest <!nocheck> | libgtest-dev <!nocheck>, libbz2-dev, libcurl4-gnutls-dev (>= 7.19.4~), libdb-dev, - googletest <!nocheck> | libgtest-dev <!nocheck>, + libgnutls28-dev (>= 3.4.6), liblz4-dev (>= 0.0~r126), liblzma-dev, pkg-config, @@ -35,12 +36,14 @@ Depends: adduser, ${apt:keyring}, ${misc:Depends}, ${shlibs:Depends} -Replaces: apt-utils (<< 1.3~exp2~) -Breaks: apt-utils (<< 1.3~exp2~) -Recommends: gnupg | gnupg2 | gnupg1 +Replaces: apt-utils (<< 1.3~exp2~), apt-transport-https (<< 1.5~alpha4~) +Breaks: apt-utils (<< 1.3~exp2~), apt-transport-https (<< 1.5~alpha4~) +Provides: apt-transport-https (= ${binary:Version}) +Recommends: ca-certificates Suggests: apt-doc, aptitude | synaptic | wajig, dpkg-dev (>= 1.17.2), + gnupg | gnupg2 | gnupg1, powermgmt-base, python-apt Description: commandline package manager @@ -146,10 +149,10 @@ Description: package management related utility programs Package: apt-transport-https Architecture: any -Depends: ${misc:Depends}, ${shlibs:Depends} +Depends: ${misc:Depends}, ${shlibs:Depends}, apt (>= 1.5~alpha4~) Recommends: ca-certificates Priority: optional -Description: https download transport for APT +Description: Transitional package: curl-https download transport for APT This package enables the usage of 'deb https://foo distro main' lines in the /etc/apt/sources.list so that all package managers using the libapt-pkg library can access metadata and packages available in sources @@ -157,3 +160,7 @@ Description: https download transport for APT . This transport supports server as well as client authentication with certificates. + . + This package is no longer needed, https support was integrated into apt, + and is only provided as a fallback if some bugs are found in apt's native + https support. diff --git a/debian/rules b/debian/rules index ede9591d1..d4e9600a2 100755 --- a/debian/rules +++ b/debian/rules @@ -22,7 +22,7 @@ override_dh_install-indep: override_dh_install-arch: dh_install -papt-utils -X/dump - dh_install -papt -Xmethods/https + dh_install -papt -Xmethods/curl -Xmethods/curl+https -Xmethods/curl+http dh_install --remaining --list-missing install -m 644 debian/apt.conf.autoremove debian/apt/etc/apt/apt.conf.d/01autoremove install -m 755 debian/apt.auto-removal.sh debian/apt/etc/kernel/postinst.d/apt-auto-removal diff --git a/doc/apt-get.8.xml b/doc/apt-get.8.xml index 931a4f313..7eea44b2c 100644 --- a/doc/apt-get.8.xml +++ b/doc/apt-get.8.xml @@ -14,7 +14,7 @@ &apt-email; &apt-product; <!-- The last update date --> - <date>2017-02-22T00:00:00Z</date> + <date>2017-06-30T00:00:00Z</date> </refentryinfo> <refmeta> @@ -575,6 +575,23 @@ Configuration Item: <literal>Acquire::AllowInsecureRepositories</literal>.</para></listitem> </varlistentry> + <varlistentry><term><option>--allow-releaseinfo-changes</option></term> + <listitem><para>Allow the update command to continue downloading + data from a repository which changed its information of the release + contained in the repository indicating e.g a new major release. + APT will fail at the update command for such repositories until the + change is confirmed to ensure the user is prepared for the change. + See also &apt-secure; for details on the concept and configuration. + </para><para> + Specialist options + (<literal>--allow-releaseinfo-changes-</literal><replaceable>field</replaceable>) + exist to allow changes only for 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>.</para></listitem> + </varlistentry> + <varlistentry><term><option>--show-progress</option></term> <listitem><para>Show user friendly progress information in the terminal window when packages are installed, upgraded or diff --git a/doc/apt-secure.8.xml b/doc/apt-secure.8.xml index f1f63dae1..50f99d3c3 100644 --- a/doc/apt-secure.8.xml +++ b/doc/apt-secure.8.xml @@ -13,7 +13,7 @@ &apt-email; &apt-product; <!-- The last update date --> - <date>2016-08-06T00:00:00Z</date> + <date>2017-04-12T00:00:00Z</date> </refentryinfo> <refmeta> @@ -50,10 +50,20 @@ that data like packages in the archive can't be modified by people who have no access to the Release file signing key. Starting with version 1.1 <command>APT</command> requires repositories to provide recent authentication - information for unimpeded usage of the repository. + information for unimpeded usage of the repository. Since version 1.5 changes + in the information contained in the Release file about the repository need to be + confirmed before APT continues to apply updates from this repository. </para> <para> + Note: All APT-based package management front-ends like &apt-get;, &aptitude; + and &synaptic; support this authentication feature, so this manpage uses + <literal>APT</literal> to refer to them all for simplicity only. + </para> +</refsect1> + + <refsect1><title>Unsigned Repositories</title> + <para> If an archive has an unsigned Release file or no Release file at all current APT versions will refuse to download data from them by default in <command>update</command> operations and even if forced to download @@ -63,16 +73,6 @@ </para> <para> - As a temporary exception &apt-get; (not &apt;!) raises warnings only if it - encounters unauthenticated archives to give a slightly longer grace period - on this backward compatibility effecting change. This exception will be removed - in future releases and you can opt-out of this grace period by setting the - configuration option <option>Binary::apt-get::Acquire::AllowInsecureRepositories</option> - to <literal>false</literal> or <option>--no-allow-insecure-repositories</option> - on the command line. - </para> - - <para> You can force all APT clients to raise only warnings by setting the configuration option <option>Acquire::AllowInsecureRepositories</option> to <literal>true</literal>. Individual repositories can also be allowed to be insecure @@ -93,16 +93,9 @@ to <literal>true</literal> or for Individual repositories with the &sources-list; option <literal>allow-downgrade-to-insecure=yes</literal>. </para> - - <para> - Note: All APT-based package management front-ends like &apt-get;, &aptitude; - and &synaptic; support this authentication feature, so this manpage uses - <literal>APT</literal> to refer to them all for simplicity only. - </para> </refsect1> - <refsect1><title>Trusted Repositories</title> - + <refsect1><title>Signed Repositories</title> <para> The chain of trust from an APT archive to the end user is made up of several steps. <command>apt-secure</command> is the last step in @@ -172,7 +165,22 @@ this mechanism can complement a per-package signature.</para> </refsect1> - <refsect1><title>User Configuration</title> +<refsect1><title>Information changes</title> + <para> + A Release file contains beside the checksums for the files in the repository + also general information about the repository like the origin, codename or + version number of the release. + </para><para> + This information is shown in various places so a repository owner should always + ensure correctness. Further more user configuration like &apt-preferences; + can depend and make use of this information. Since version 1.5 the user must + therefore explicitly confirm changes to signal that the user is sufficiently + prepared e.g. for the new major release of the distribution shipped in the + repository (as e.g. indicated by the codename). + </para> +</refsect1> + +<refsect1><title>User Configuration</title> <para> <command>apt-key</command> is the program that manages the list of keys used by APT to trust repositories. It can be used to add or remove keys as well @@ -193,7 +201,7 @@ </para> </refsect1> -<refsect1><title>Archive Configuration</title> +<refsect1><title>Repository Configuration</title> <para> If you want to provide archive signatures in an archive under your maintenance you have to: diff --git a/doc/apt-verbatim.ent b/doc/apt-verbatim.ent index 7d36648be..b555c5de5 100644 --- a/doc/apt-verbatim.ent +++ b/doc/apt-verbatim.ent @@ -239,7 +239,7 @@ "> <!-- this will be updated by 'prepare-release' --> -<!ENTITY apt-product-version "1.4.6"> +<!ENTITY apt-product-version "1.5~beta1"> <!-- (Code)names for various things used all over the place --> <!ENTITY debian-oldstable-codename "jessie"> diff --git a/doc/apt.conf.5.xml b/doc/apt.conf.5.xml index 260c66c46..6f47bb029 100644 --- a/doc/apt.conf.5.xml +++ b/doc/apt.conf.5.xml @@ -19,7 +19,7 @@ &apt-email; &apt-product; <!-- The last update date --> - <date>2016-11-25T00:00:00Z</date> + <date>2017-06-28T00:00:00Z</date> </refentryinfo> <refmeta> @@ -357,6 +357,15 @@ APT::Compressor::rev { </para></listitem> </varlistentry> + <varlistentry><term><option>AllowTLS</option></term> + <listitem><para> + Allow use of the internal TLS support in the http method. If set to false, + this completely disables support for TLS in apt's own methods (excluding + the curl-based https method). No TLS-related functions will be called + anymore. + </para></listitem> + </varlistentry> + <varlistentry><term><option>PDiffs</option></term> <listitem><para>Try to download deltas called <literal>PDiffs</literal> for indexes (like <filename>Packages</filename> files) instead of diff --git a/doc/examples/configure-index b/doc/examples/configure-index index eb0a242c5..244d7c1c3 100644 --- a/doc/examples/configure-index +++ b/doc/examples/configure-index @@ -29,10 +29,20 @@ and the syntax of configuration files and commandline options! */ -quiet "<INT>"; -quiet::NoUpdate "<BOOL>"; // never update progress information - included in -q=1 -quiet::NoProgress "<BOOL>"; // disables the 0% → 100% progress on cache generation and stuff -quiet::NoStatistic "<BOOL>"; // no "42 kB downloaded" stats in update +quiet "<INT>" { + NoUpdate "<BOOL>"; // never update progress information - included in -q=1 + NoProgress "<BOOL>"; // disables the 0% → 100% progress on cache generation and stuff + NoStatistic "<BOOL>"; // no "42 kB downloaded" stats in update + ReleaseInfoChange "<BOOL>" // don't even print the notices if the info change is allowed + { + Origin "<BOOL>"; + Label "<BOOL>"; + Version "<BOOL>"; + Codename "<BOOL>"; + Suite "<BOOL>"; + DefaultPin "<BOOL>"; + }; +}; // Options for APT in general APT @@ -96,6 +106,8 @@ APT CallResolver "<BOOL>"; IndexTargets::ReleaseInfo "<BOOL>"; IndexTargets::format "<STRING>"; + + Update::InteractiveReleaseInfoChanges "<BOOL>"; }; Cache @@ -206,6 +218,8 @@ Acquire Source-Symlinks "<BOOL>"; ForceHash "<STRING>"; // hashmethod used for expected hash: sha256, sha1 or md5sum + AllowTLS "<BOOL>"; // whether support for tls is enabled + PDiffs "<BOOL>"; // try to get the IndexFile diffs PDiffs::FileLimit "<INT>"; // don't use diffs if we would need more than 4 diffs PDiffs::SizeLimit "<INT>"; // don't use diffs if size of all patches excess X% of the size of the original file @@ -219,6 +233,20 @@ Acquire SameMirrorForAllIndexes "<BOOL>"; // use the mirror serving the Release file for Packages & co + AllowInsecureRepositories "<BOOL>"; + AllowWeakRepositories "<BOOL>"; + AllowDowngradeToInsecureRepositories "<BOOL>"; + // allow repositories to change information potentially breaking user config like pinning + AllowReleaseInfoChange "<BOOL>" + { + Origin "<BOOL>"; + Label "<BOOL>"; + Version "<BOOL>"; // allowed by default + Codename "<BOOL>"; + Suite "<BOOL>"; + DefaultPin "<BOOL>"; + }; + // HTTP method configuration http { @@ -455,6 +483,12 @@ DPkg // controls if apt will apport on the first dpkg error or if it // tries to install as many packages as possible StopOnError "true"; + + Progress-Fancy { + progress-fg "<STRING>"; + progress-bg "<STRING>"; + progress-bar "<BOOL>"; + }; } /* Options you can set to see some debugging text They correspond to names @@ -678,9 +712,6 @@ acquire::cdrom::mount "<DIR>"; acquire::maxreleasefilesize "<INT>"; acquire::queuehost::limit "<INT>"; acquire::max-pipeline-depth "<INT>"; -acquire::allowinsecurerepositories "<BOOL>"; -acquire::allowweakrepositories "<BOOL>"; -acquire::allowdowngradetoinsecurerepositories "<BOOL>"; acquire::progress::diffpercent "<BOOL>"; acquire::gzipindexes "<BOOL>"; acquire::indextargets::randomized "<BOOL>"; diff --git a/doc/examples/ftp-archive.conf b/doc/examples/ftp-archive.conf index 4f4b00852..31ffb24c6 100644 --- a/doc/examples/ftp-archive.conf +++ b/doc/examples/ftp-archive.conf @@ -3,9 +3,9 @@ Dir { - ArchiveDir "/org/ftp.debian.org/ftp/"; - OverrideDir "/org/ftp.debian.org/scripts/override/"; - CacheDir "/org/ftp.debian.org/scripts/cache/"; + ArchiveDir "/srv/ftp.debian.org/ftp/"; + OverrideDir "/srv/ftp.debian.org/scripts/override/"; + CacheDir "/srv/ftp.debian.org/scripts/cache/"; }; Default @@ -19,7 +19,7 @@ Default TreeDefault { - Contents::Header "/org/ftp.debian.org/scripts/masterfiles/Contents.top"; + Contents::Header "/srv/ftp.debian.org/scripts/masterfiles/Contents.top"; BinCacheDB "packages-$(ARCH).db"; // These are all defaults and are provided for completeness diff --git a/doc/po/apt-doc.pot b/doc/po/apt-doc.pot index e5d9cf9de..0412fcbab 100644 --- a/doc/po/apt-doc.pot +++ b/doc/po/apt-doc.pot @@ -5,9 +5,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: apt-doc 1.4.6\n" +"Project-Id-Version: apt-doc 1.5~alpha4\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-06-01 10:51+0200\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -1414,6 +1414,30 @@ msgstr "" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt-get.8.xml:1 msgid "" +"Allow the update command to continue downloading data from a repository " +"which changed its information of the release contained in the repository " +"indicating e.g a new major release. APT will fail at the update command for " +"such repositories until the change is confirmed to ensure the user is " +"prepared for the change. See also &apt-secure; for details on the concept " +"and configuration." +msgstr "" + +#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> +#: apt-get.8.xml:1 +msgid "" +"Specialist options " +"(<literal>--allow-releaseinfo-changes-</literal><replaceable>field</replaceable>) " +"exist to allow changes only for 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>." +msgstr "" + +#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> +#: apt-get.8.xml:1 +msgid "" "Show user friendly progress information in the terminal window when packages " "are installed, upgraded or removed. For a machine parsable version of this " "data see README.progress-reporting in the apt doc directory. Configuration " @@ -2229,7 +2253,23 @@ msgid "" "that data like packages in the archive can't be modified by people who have " "no access to the Release file signing key. Starting with version 1.1 " "<command>APT</command> requires repositories to provide recent " -"authentication information for unimpeded usage of the repository." +"authentication information for unimpeded usage of the repository. Since " +"version 1.5 changes in the information contained in the Release file about " +"the repository need to be confirmed before APT continues to apply updates " +"from this repository." +msgstr "" + +#. type: Content of: <refentry><refsect1><para> +#: apt-secure.8.xml:1 +msgid "" +"Note: All APT-based package management front-ends like &apt-get;, &aptitude; " +"and &synaptic; support this authentication feature, so this manpage uses " +"<literal>APT</literal> to refer to them all for simplicity only." +msgstr "" + +#. type: Content of: <refentry><refsect1><title> +#: apt-secure.8.xml:1 +msgid "Unsigned Repositories" msgstr "" #. type: Content of: <refentry><refsect1><para> @@ -2246,19 +2286,6 @@ msgstr "" #. type: Content of: <refentry><refsect1><para> #: apt-secure.8.xml:1 msgid "" -"As a temporary exception &apt-get; (not &apt;!) raises warnings only if it " -"encounters unauthenticated archives to give a slightly longer grace period " -"on this backward compatibility effecting change. This exception will be " -"removed in future releases and you can opt-out of this grace period by " -"setting the configuration option " -"<option>Binary::apt-get::Acquire::AllowInsecureRepositories</option> to " -"<literal>false</literal> or " -"<option>--no-allow-insecure-repositories</option> on the command line." -msgstr "" - -#. type: Content of: <refentry><refsect1><para> -#: apt-secure.8.xml:1 -msgid "" "You can force all APT clients to raise only warnings by setting the " "configuration option <option>Acquire::AllowInsecureRepositories</option> to " "<literal>true</literal>. Individual repositories can also be allowed to be " @@ -2282,17 +2309,9 @@ msgid "" "&sources-list; option <literal>allow-downgrade-to-insecure=yes</literal>." msgstr "" -#. type: Content of: <refentry><refsect1><para> -#: apt-secure.8.xml:1 -msgid "" -"Note: All APT-based package management front-ends like &apt-get;, &aptitude; " -"and &synaptic; support this authentication feature, so this manpage uses " -"<literal>APT</literal> to refer to them all for simplicity only." -msgstr "" - #. type: Content of: <refentry><refsect1><title> #: apt-secure.8.xml:1 -msgid "Trusted Repositories" +msgid "Signed Repositories" msgstr "" #. type: Content of: <refentry><refsect1><para> @@ -2385,6 +2404,30 @@ msgstr "" #. type: Content of: <refentry><refsect1><title> #: apt-secure.8.xml:1 +msgid "Information changes" +msgstr "" + +#. type: Content of: <refentry><refsect1><para> +#: apt-secure.8.xml:1 +msgid "" +"A Release file contains beside the checksums for the files in the repository " +"also general information about the repository like the origin, codename or " +"version number of the release." +msgstr "" + +#. type: Content of: <refentry><refsect1><para> +#: apt-secure.8.xml:1 +msgid "" +"This information is shown in various places so a repository owner should " +"always ensure correctness. Further more user configuration like " +"&apt-preferences; can depend and make use of this information. Since version " +"1.5 the user must therefore explicitly confirm changes to signal that the " +"user is sufficiently prepared e.g. for the new major release of the " +"distribution shipped in the repository (as e.g. indicated by the codename)." +msgstr "" + +#. type: Content of: <refentry><refsect1><title> +#: apt-secure.8.xml:1 msgid "User Configuration" msgstr "" @@ -2419,7 +2462,7 @@ msgstr "" #. type: Content of: <refentry><refsect1><title> #: apt-secure.8.xml:1 -msgid "Archive Configuration" +msgid "Repository Configuration" msgstr "" #. type: Content of: <refentry><refsect1><para> @@ -3171,6 +3214,14 @@ msgstr "" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt.conf.5.xml:1 msgid "" +"Allow use of the internal TLS support in the http method. If set to false, " +"this completely disables support for TLS in apt's own methods (excluding the " +"curl-based https method). No TLS-related functions will be called anymore." +msgstr "" + +#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> +#: apt.conf.5.xml:1 +msgid "" "Try to download deltas called <literal>PDiffs</literal> for indexes (like " "<filename>Packages</filename> files) instead of downloading whole ones. True " "by default. Preferably, this can be set for specific &sources-list; entries " diff --git a/doc/po/de.po b/doc/po/de.po index 211026f79..b53e5010d 100644 --- a/doc/po/de.po +++ b/doc/po/de.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: apt-doc 1.3\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-06-01 10:51+0200\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2016-11-15 21:51+0200\n" "Last-Translator: Chris Leick <c.leick@vollbio.de>\n" "Language-Team: German <debian-l10n-german@lists.debian.org>\n" @@ -1980,6 +1980,28 @@ msgstr "" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt-get.8.xml msgid "" +"Allow the update command to continue downloading data from a repository " +"which changed its information of the release contained in the repository " +"indicating e.g a new major release. APT will fail at the update command for " +"such repositories until the change is confirmed to ensure the user is " +"prepared for the change. See also &apt-secure; for details on the concept " +"and configuration." +msgstr "" + +#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> +#: apt-get.8.xml +msgid "" +"Specialist options (<literal>--allow-releaseinfo-changes-</" +"literal><replaceable>field</replaceable>) exist to allow changes only for " +"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>." +msgstr "" + +#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> +#: apt-get.8.xml +msgid "" "Show user friendly progress information in the terminal window when packages " "are installed, upgraded or removed. For a machine parsable version of this " "data see README.progress-reporting in the apt doc directory. Configuration " @@ -3127,13 +3149,24 @@ msgstr "Archivauthentifizierungsunterstützung für APT" #. type: Content of: <refentry><refsect1><para> #: apt-secure.8.xml +#, fuzzy +#| msgid "" +#| "Starting with version 0.6, <command>APT</command> contains code that does " +#| "signature checking of the Release file for all repositories. This ensures " +#| "that data like packages in the archive can't be modified by people who " +#| "have no access to the Release file signing key. Starting with version 1.1 " +#| "<command>APT</command> requires repositories to provide recent " +#| "authentication information for unimpeded usage of the repository." msgid "" "Starting with version 0.6, <command>APT</command> contains code that does " "signature checking of the Release file for all repositories. This ensures " "that data like packages in the archive can't be modified by people who have " "no access to the Release file signing key. Starting with version 1.1 " "<command>APT</command> requires repositories to provide recent " -"authentication information for unimpeded usage of the repository." +"authentication information for unimpeded usage of the repository. Since " +"version 1.5 changes in the information contained in the Release file about " +"the repository need to be confirmed before APT continues to apply updates " +"from this repository." msgstr "" "Beginnend mit Version 0.6 enthält <command>APT</command> Code, der die " "Signatur der Release-Datei für alle Depots prüft. Dies stellt sicher, dass " @@ -3146,6 +3179,25 @@ msgstr "" #. type: Content of: <refentry><refsect1><para> #: apt-secure.8.xml msgid "" +"Note: All APT-based package management front-ends like &apt-get;, &aptitude; " +"and &synaptic; support this authentication feature, so this manpage uses " +"<literal>APT</literal> to refer to them all for simplicity only." +msgstr "" +"Hinweis: Alle APT-basierten Paketverwaltungsoberflächen wie &apt-get;, " +"&aptitude; und &synaptic; unterstützen diese " +"Authentifizierungsfunktionalität, daher verwendet diese Handbuchseite der " +"Einfachheit halber exemplarisch für alle <literal>APT</literal>." + +#. type: Content of: <refentry><refsect1><title> +#: apt-secure.8.xml +#, fuzzy +#| msgid "Trusted Repositories" +msgid "Unsigned Repositories" +msgstr "Vertrauenswürdige Depots" + +#. type: Content of: <refentry><refsect1><para> +#: apt-secure.8.xml +msgid "" "If an archive has an unsigned Release file or no Release file at all current " "APT versions will refuse to download data from them by default in " "<command>update</command> operations and even if forced to download front-" @@ -3162,27 +3214,6 @@ msgstr "" #. type: Content of: <refentry><refsect1><para> #: apt-secure.8.xml msgid "" -"As a temporary exception &apt-get; (not &apt;!) raises warnings only if it " -"encounters unauthenticated archives to give a slightly longer grace period " -"on this backward compatibility effecting change. This exception will be " -"removed in future releases and you can opt-out of this grace period by " -"setting the configuration option <option>Binary::apt-get::Acquire::" -"AllowInsecureRepositories</option> to <literal>false</literal> or <option>--" -"no-allow-insecure-repositories</option> on the command line." -msgstr "" -"Als befristete Ausnahme gibt &apt-get; (nicht &apt;!) Warnungen nur dann " -"aus, falls es nicht authentifizierte Archive vorfindet, um eine etwas " -"längere Ãœbergangsfrist für die Änderung zu geben, die die " -"Rückwärtskompatibilität beeinflusst. Diese Ausnahme wird in zukünftigen " -"Veröffentlichungen entfernt und sie können sich von dieser Ãœbergangsfrist " -"abmelden, indem Sie die Konfigurationsoption <option>Binary::apt-get::" -"Acquire::AllowInsecureRepositories</option> auf <literal>false</literal> " -"oder <option>--no-allow-insecure-repositories</option> auf der Befehlszeile " -"setzen." - -#. type: Content of: <refentry><refsect1><para> -#: apt-secure.8.xml -msgid "" "You can force all APT clients to raise only warnings by setting the " "configuration option <option>Acquire::AllowInsecureRepositories</option> to " "<literal>true</literal>. Individual repositories can also be allowed to be " @@ -3223,21 +3254,11 @@ msgstr "" "<literal>true</literal> oder für individuelle Depots mit der &sources-list;-" "Option <literal>allow-downgrade-to-insecure=yes</literal> übergangen werden." -#. type: Content of: <refentry><refsect1><para> -#: apt-secure.8.xml -msgid "" -"Note: All APT-based package management front-ends like &apt-get;, &aptitude; " -"and &synaptic; support this authentication feature, so this manpage uses " -"<literal>APT</literal> to refer to them all for simplicity only." -msgstr "" -"Hinweis: Alle APT-basierten Paketverwaltungsoberflächen wie &apt-get;, " -"&aptitude; und &synaptic; unterstützen diese " -"Authentifizierungsfunktionalität, daher verwendet diese Handbuchseite der " -"Einfachheit halber exemplarisch für alle <literal>APT</literal>." - #. type: Content of: <refentry><refsect1><title> #: apt-secure.8.xml -msgid "Trusted Repositories" +#, fuzzy +#| msgid "Trusted Repositories" +msgid "Signed Repositories" msgstr "Vertrauenswürdige Depots" #. type: Content of: <refentry><refsect1><para> @@ -3377,6 +3398,30 @@ msgstr "" #. type: Content of: <refentry><refsect1><title> #: apt-secure.8.xml +msgid "Information changes" +msgstr "" + +#. type: Content of: <refentry><refsect1><para> +#: apt-secure.8.xml +msgid "" +"A Release file contains beside the checksums for the files in the repository " +"also general information about the repository like the origin, codename or " +"version number of the release." +msgstr "" + +#. type: Content of: <refentry><refsect1><para> +#: apt-secure.8.xml +msgid "" +"This information is shown in various places so a repository owner should " +"always ensure correctness. Further more user configuration like &apt-" +"preferences; can depend and make use of this information. Since version 1.5 " +"the user must therefore explicitly confirm changes to signal that the user " +"is sufficiently prepared e.g. for the new major release of the distribution " +"shipped in the repository (as e.g. indicated by the codename)." +msgstr "" + +#. type: Content of: <refentry><refsect1><title> +#: apt-secure.8.xml msgid "User Configuration" msgstr "Benutzerkonfiguration" @@ -3428,8 +3473,10 @@ msgstr "" #. type: Content of: <refentry><refsect1><title> #: apt-secure.8.xml -msgid "Archive Configuration" -msgstr "Archivkonfiguration" +#, fuzzy +#| msgid "User Configuration" +msgid "Repository Configuration" +msgstr "Benutzerkonfiguration" #. type: Content of: <refentry><refsect1><para> #: apt-secure.8.xml @@ -4542,6 +4589,14 @@ msgstr "" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt.conf.5.xml msgid "" +"Allow use of the internal TLS support in the http method. If set to false, " +"this completely disables support for TLS in apt's own methods (excluding the " +"curl-based https method). No TLS-related functions will be called anymore." +msgstr "" + +#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> +#: apt.conf.5.xml +msgid "" "Try to download deltas called <literal>PDiffs</literal> for indexes (like " "<filename>Packages</filename> files) instead of downloading whole ones. True " "by default. Preferably, this can be set for specific &sources-list; entries " @@ -11334,3 +11389,25 @@ msgstr " # apt-get -o dir::cache::archives=\"/Platte/\" dist-upgrade\n" #: offline.dbk msgid "Which will use the already fetched archives on the disc." msgstr "Es wird die bereits auf die Platte heruntergeladenen Archive benutzen." + +#~ msgid "" +#~ "As a temporary exception &apt-get; (not &apt;!) raises warnings only if " +#~ "it encounters unauthenticated archives to give a slightly longer grace " +#~ "period on this backward compatibility effecting change. This exception " +#~ "will be removed in future releases and you can opt-out of this grace " +#~ "period by setting the configuration option <option>Binary::apt-get::" +#~ "Acquire::AllowInsecureRepositories</option> to <literal>false</literal> " +#~ "or <option>--no-allow-insecure-repositories</option> on the command line." +#~ msgstr "" +#~ "Als befristete Ausnahme gibt &apt-get; (nicht &apt;!) Warnungen nur dann " +#~ "aus, falls es nicht authentifizierte Archive vorfindet, um eine etwas " +#~ "längere Ãœbergangsfrist für die Änderung zu geben, die die " +#~ "Rückwärtskompatibilität beeinflusst. Diese Ausnahme wird in zukünftigen " +#~ "Veröffentlichungen entfernt und sie können sich von dieser Ãœbergangsfrist " +#~ "abmelden, indem Sie die Konfigurationsoption <option>Binary::apt-get::" +#~ "Acquire::AllowInsecureRepositories</option> auf <literal>false</literal> " +#~ "oder <option>--no-allow-insecure-repositories</option> auf der " +#~ "Befehlszeile setzen." + +#~ msgid "Archive Configuration" +#~ msgstr "Archivkonfiguration" diff --git a/doc/po/es.po b/doc/po/es.po index f2f54f198..3323b8bb1 100644 --- a/doc/po/es.po +++ b/doc/po/es.po @@ -38,7 +38,7 @@ msgid "" msgstr "" "Project-Id-Version: apt-doc 1.0.5\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-06-01 10:51+0200\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2014-07-04 01:31+0200\n" "Last-Translator: Omar Campagne <ocampagne@gmail.com>\n" "Language-Team: Debian l10n Spanish <debian-l10n-spanish@lists.debian.org>\n" @@ -2053,6 +2053,28 @@ msgstr "" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt-get.8.xml msgid "" +"Allow the update command to continue downloading data from a repository " +"which changed its information of the release contained in the repository " +"indicating e.g a new major release. APT will fail at the update command for " +"such repositories until the change is confirmed to ensure the user is " +"prepared for the change. See also &apt-secure; for details on the concept " +"and configuration." +msgstr "" + +#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> +#: apt-get.8.xml +msgid "" +"Specialist options (<literal>--allow-releaseinfo-changes-</" +"literal><replaceable>field</replaceable>) exist to allow changes only for " +"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>." +msgstr "" + +#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> +#: apt-get.8.xml +msgid "" "Show user friendly progress information in the terminal window when packages " "are installed, upgraded or removed. For a machine parsable version of this " "data see README.progress-reporting in the apt doc directory. Configuration " @@ -3177,7 +3199,10 @@ msgid "" "that data like packages in the archive can't be modified by people who have " "no access to the Release file signing key. Starting with version 1.1 " "<command>APT</command> requires repositories to provide recent " -"authentication information for unimpeded usage of the repository." +"authentication information for unimpeded usage of the repository. Since " +"version 1.5 changes in the information contained in the Release file about " +"the repository need to be confirmed before APT continues to apply updates " +"from this repository." msgstr "" "Desde la versión 0.6, <command>apt</command> contiene el código que realiza " "la comprobación de la firma del fichero «Release» para todos los archivos. " @@ -3186,24 +3211,33 @@ msgstr "" #. type: Content of: <refentry><refsect1><para> #: apt-secure.8.xml +#, fuzzy +#| msgid "" +#| "The package front-ends &apt-get;, &aptitude; and &synaptic; support this " +#| "new authentication feature." msgid "" -"If an archive has an unsigned Release file or no Release file at all current " -"APT versions will refuse to download data from them by default in " -"<command>update</command> operations and even if forced to download front-" -"ends like &apt-get; will require explicit confirmation if an installation " -"request includes a package from such an unauthenticated archive." +"Note: All APT-based package management front-ends like &apt-get;, &aptitude; " +"and &synaptic; support this authentication feature, so this manpage uses " +"<literal>APT</literal> to refer to them all for simplicity only." msgstr "" +"Las interfaces de gestión de paquetes &apt-get;, &aptitude; y &synaptic; " +"pueden usar esta nueva funcionalidad de autenticación." + +#. type: Content of: <refentry><refsect1><title> +#: apt-secure.8.xml +#, fuzzy +#| msgid "Trusted archives" +msgid "Unsigned Repositories" +msgstr "Archivos de confianza" #. type: Content of: <refentry><refsect1><para> #: apt-secure.8.xml msgid "" -"As a temporary exception &apt-get; (not &apt;!) raises warnings only if it " -"encounters unauthenticated archives to give a slightly longer grace period " -"on this backward compatibility effecting change. This exception will be " -"removed in future releases and you can opt-out of this grace period by " -"setting the configuration option <option>Binary::apt-get::Acquire::" -"AllowInsecureRepositories</option> to <literal>false</literal> or <option>--" -"no-allow-insecure-repositories</option> on the command line." +"If an archive has an unsigned Release file or no Release file at all current " +"APT versions will refuse to download data from them by default in " +"<command>update</command> operations and even if forced to download front-" +"ends like &apt-get; will require explicit confirmation if an installation " +"request includes a package from such an unauthenticated archive." msgstr "" #. type: Content of: <refentry><refsect1><para> @@ -3232,25 +3266,11 @@ msgid "" "list; option <literal>allow-downgrade-to-insecure=yes</literal>." msgstr "" -#. type: Content of: <refentry><refsect1><para> -#: apt-secure.8.xml -#, fuzzy -#| msgid "" -#| "The package front-ends &apt-get;, &aptitude; and &synaptic; support this " -#| "new authentication feature." -msgid "" -"Note: All APT-based package management front-ends like &apt-get;, &aptitude; " -"and &synaptic; support this authentication feature, so this manpage uses " -"<literal>APT</literal> to refer to them all for simplicity only." -msgstr "" -"Las interfaces de gestión de paquetes &apt-get;, &aptitude; y &synaptic; " -"pueden usar esta nueva funcionalidad de autenticación." - #. type: Content of: <refentry><refsect1><title> #: apt-secure.8.xml #, fuzzy #| msgid "Trusted archives" -msgid "Trusted Repositories" +msgid "Signed Repositories" msgstr "Archivos de confianza" #. type: Content of: <refentry><refsect1><para> @@ -3411,6 +3431,30 @@ msgstr "" #. type: Content of: <refentry><refsect1><title> #: apt-secure.8.xml +msgid "Information changes" +msgstr "" + +#. type: Content of: <refentry><refsect1><para> +#: apt-secure.8.xml +msgid "" +"A Release file contains beside the checksums for the files in the repository " +"also general information about the repository like the origin, codename or " +"version number of the release." +msgstr "" + +#. type: Content of: <refentry><refsect1><para> +#: apt-secure.8.xml +msgid "" +"This information is shown in various places so a repository owner should " +"always ensure correctness. Further more user configuration like &apt-" +"preferences; can depend and make use of this information. Since version 1.5 " +"the user must therefore explicitly confirm changes to signal that the user " +"is sufficiently prepared e.g. for the new major release of the distribution " +"shipped in the repository (as e.g. indicated by the codename)." +msgstr "" + +#. type: Content of: <refentry><refsect1><title> +#: apt-secure.8.xml msgid "User Configuration" msgstr "Configuración de usuario" @@ -3462,8 +3506,10 @@ msgstr "" #. type: Content of: <refentry><refsect1><title> #: apt-secure.8.xml -msgid "Archive Configuration" -msgstr "Configuración del archivo" +#, fuzzy +#| msgid "User Configuration" +msgid "Repository Configuration" +msgstr "Configuración de usuario" #. type: Content of: <refentry><refsect1><para> #: apt-secure.8.xml @@ -4556,6 +4602,14 @@ msgstr "" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt.conf.5.xml +msgid "" +"Allow use of the internal TLS support in the http method. If set to false, " +"this completely disables support for TLS in apt's own methods (excluding the " +"curl-based https method). No TLS-related functions will be called anymore." +msgstr "" + +#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> +#: apt.conf.5.xml #, fuzzy #| msgid "" #| "Try to download deltas called <literal>PDiffs</literal> for indexes (like " @@ -11164,6 +11218,9 @@ msgstr " # apt-get -o dir::cache::archives=\"/disc/\" dist-upgrade\n" msgid "Which will use the already fetched archives on the disc." msgstr "Esto utiliza los archivos del disco previamente obtenidos." +#~ msgid "Archive Configuration" +#~ msgstr "Configuración del archivo" + #~ msgid "dpkg trigger usage (and related options)" #~ msgstr "Uso del disparador de dpkg (y de las opciones relacionadas)" diff --git a/doc/po/fr.po b/doc/po/fr.po index 56bded828..8a6c8f620 100644 --- a/doc/po/fr.po +++ b/doc/po/fr.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: apt-doc 1.0.5\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-06-01 10:51+0200\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2017-01-24 22:43+0100\n" "Last-Translator: Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>\n" "Language-Team: French <debian-l10n-french@lists.debian.org>\n" @@ -1975,6 +1975,28 @@ msgstr "" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt-get.8.xml msgid "" +"Allow the update command to continue downloading data from a repository " +"which changed its information of the release contained in the repository " +"indicating e.g a new major release. APT will fail at the update command for " +"such repositories until the change is confirmed to ensure the user is " +"prepared for the change. See also &apt-secure; for details on the concept " +"and configuration." +msgstr "" + +#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> +#: apt-get.8.xml +msgid "" +"Specialist options (<literal>--allow-releaseinfo-changes-</" +"literal><replaceable>field</replaceable>) exist to allow changes only for " +"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>." +msgstr "" + +#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> +#: apt-get.8.xml +msgid "" "Show user friendly progress information in the terminal window when packages " "are installed, upgraded or removed. For a machine parsable version of this " "data see README.progress-reporting in the apt doc directory. Configuration " @@ -3129,13 +3151,24 @@ msgstr "Gestion de l'authentification d'archive avec APT" #. type: Content of: <refentry><refsect1><para> #: apt-secure.8.xml +#, fuzzy +#| msgid "" +#| "Starting with version 0.6, <command>APT</command> contains code that does " +#| "signature checking of the Release file for all repositories. This ensures " +#| "that data like packages in the archive can't be modified by people who " +#| "have no access to the Release file signing key. Starting with version 1.1 " +#| "<command>APT</command> requires repositories to provide recent " +#| "authentication information for unimpeded usage of the repository." msgid "" "Starting with version 0.6, <command>APT</command> contains code that does " "signature checking of the Release file for all repositories. This ensures " "that data like packages in the archive can't be modified by people who have " "no access to the Release file signing key. Starting with version 1.1 " "<command>APT</command> requires repositories to provide recent " -"authentication information for unimpeded usage of the repository." +"authentication information for unimpeded usage of the repository. Since " +"version 1.5 changes in the information contained in the Release file about " +"the repository need to be confirmed before APT continues to apply updates " +"from this repository." msgstr "" "Depuis sa version 0.6, <command>apt</command> sait vérifier la signature du " "fichier Release de chaque archive. On s'assure ainsi que les paquets de " @@ -3147,6 +3180,25 @@ msgstr "" #. type: Content of: <refentry><refsect1><para> #: apt-secure.8.xml msgid "" +"Note: All APT-based package management front-ends like &apt-get;, &aptitude; " +"and &synaptic; support this authentication feature, so this manpage uses " +"<literal>APT</literal> to refer to them all for simplicity only." +msgstr "" +"Attention : toutes les interfaces de gestion de paquets comme &apt-get;, " +"&aptitude; et &synaptic; possèdent cette fonction de certification, aussi " +"cette page de manuel utilise <literal>APT</literal> pour se référer à " +"l'ensemble d'entre elles, pour des raisons de simplicité." + +#. type: Content of: <refentry><refsect1><title> +#: apt-secure.8.xml +#, fuzzy +#| msgid "Trusted Repositories" +msgid "Unsigned Repositories" +msgstr "Archives de confiance" + +#. type: Content of: <refentry><refsect1><para> +#: apt-secure.8.xml +msgid "" "If an archive has an unsigned Release file or no Release file at all current " "APT versions will refuse to download data from them by default in " "<command>update</command> operations and even if forced to download front-" @@ -3163,26 +3215,6 @@ msgstr "" #. type: Content of: <refentry><refsect1><para> #: apt-secure.8.xml msgid "" -"As a temporary exception &apt-get; (not &apt;!) raises warnings only if it " -"encounters unauthenticated archives to give a slightly longer grace period " -"on this backward compatibility effecting change. This exception will be " -"removed in future releases and you can opt-out of this grace period by " -"setting the configuration option <option>Binary::apt-get::Acquire::" -"AllowInsecureRepositories</option> to <literal>false</literal> or <option>--" -"no-allow-insecure-repositories</option> on the command line." -msgstr "" -"Comme exception temporaire, &apt-get; (pas &apt; !) émet seulement une mise " -"en garde s'il rencontre des archives non authentifiées pour accorder une " -"période de grâce un peu plus longue à cette modification affectant la " -"compatibilité ascendante. Cette exception disparaîtra dans les futures " -"versions et vous pouvez renoncer à ce délai de grâce en configurant l'option " -"<option>Binary::apt-get::Acquire::AllowInsecureRepositories</option> à " -"<literal>false</literal> ou en passant l'option <option>--no-allow-insecure-" -"repositories</option> sur la ligne de commande." - -#. type: Content of: <refentry><refsect1><para> -#: apt-secure.8.xml -msgid "" "You can force all APT clients to raise only warnings by setting the " "configuration option <option>Acquire::AllowInsecureRepositories</option> to " "<literal>true</literal>. Individual repositories can also be allowed to be " @@ -3224,21 +3256,11 @@ msgstr "" "pour des dépôts individuels avec l'option <literal>allow-downgrade-to-" "insecure=yes</literal> de &sources-list;." -#. type: Content of: <refentry><refsect1><para> -#: apt-secure.8.xml -msgid "" -"Note: All APT-based package management front-ends like &apt-get;, &aptitude; " -"and &synaptic; support this authentication feature, so this manpage uses " -"<literal>APT</literal> to refer to them all for simplicity only." -msgstr "" -"Attention : toutes les interfaces de gestion de paquets comme &apt-get;, " -"&aptitude; et &synaptic; possèdent cette fonction de certification, aussi " -"cette page de manuel utilise <literal>APT</literal> pour se référer à " -"l'ensemble d'entre elles, pour des raisons de simplicité." - #. type: Content of: <refentry><refsect1><title> #: apt-secure.8.xml -msgid "Trusted Repositories" +#, fuzzy +#| msgid "Trusted Repositories" +msgid "Signed Repositories" msgstr "Archives de confiance" #. type: Content of: <refentry><refsect1><para> @@ -3377,6 +3399,30 @@ msgstr "" #. type: Content of: <refentry><refsect1><title> #: apt-secure.8.xml +msgid "Information changes" +msgstr "" + +#. type: Content of: <refentry><refsect1><para> +#: apt-secure.8.xml +msgid "" +"A Release file contains beside the checksums for the files in the repository " +"also general information about the repository like the origin, codename or " +"version number of the release." +msgstr "" + +#. type: Content of: <refentry><refsect1><para> +#: apt-secure.8.xml +msgid "" +"This information is shown in various places so a repository owner should " +"always ensure correctness. Further more user configuration like &apt-" +"preferences; can depend and make use of this information. Since version 1.5 " +"the user must therefore explicitly confirm changes to signal that the user " +"is sufficiently prepared e.g. for the new major release of the distribution " +"shipped in the repository (as e.g. indicated by the codename)." +msgstr "" + +#. type: Content of: <refentry><refsect1><title> +#: apt-secure.8.xml msgid "User Configuration" msgstr "Configuration utilisateur" @@ -3427,8 +3473,10 @@ msgstr "" #. type: Content of: <refentry><refsect1><title> #: apt-secure.8.xml -msgid "Archive Configuration" -msgstr "Configuration d'une archive" +#, fuzzy +#| msgid "User Configuration" +msgid "Repository Configuration" +msgstr "Configuration utilisateur" #. type: Content of: <refentry><refsect1><para> #: apt-secure.8.xml @@ -4542,6 +4590,14 @@ msgstr "" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt.conf.5.xml msgid "" +"Allow use of the internal TLS support in the http method. If set to false, " +"this completely disables support for TLS in apt's own methods (excluding the " +"curl-based https method). No TLS-related functions will be called anymore." +msgstr "" + +#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> +#: apt.conf.5.xml +msgid "" "Try to download deltas called <literal>PDiffs</literal> for indexes (like " "<filename>Packages</filename> files) instead of downloading whole ones. True " "by default. Preferably, this can be set for specific &sources-list; entries " @@ -11301,6 +11357,27 @@ msgstr " # apt-get -o dir::cache::archives=\"/disc/\" dist-upgrade\n" msgid "Which will use the already fetched archives on the disc." msgstr "Cette commande utilisera les fichiers récupérés sur le disque." +#~ msgid "" +#~ "As a temporary exception &apt-get; (not &apt;!) raises warnings only if " +#~ "it encounters unauthenticated archives to give a slightly longer grace " +#~ "period on this backward compatibility effecting change. This exception " +#~ "will be removed in future releases and you can opt-out of this grace " +#~ "period by setting the configuration option <option>Binary::apt-get::" +#~ "Acquire::AllowInsecureRepositories</option> to <literal>false</literal> " +#~ "or <option>--no-allow-insecure-repositories</option> on the command line." +#~ msgstr "" +#~ "Comme exception temporaire, &apt-get; (pas &apt; !) émet seulement une " +#~ "mise en garde s'il rencontre des archives non authentifiées pour accorder " +#~ "une période de grâce un peu plus longue à cette modification affectant la " +#~ "compatibilité ascendante. Cette exception disparaîtra dans les futures " +#~ "versions et vous pouvez renoncer à ce délai de grâce en configurant " +#~ "l'option <option>Binary::apt-get::Acquire::AllowInsecureRepositories</" +#~ "option> à <literal>false</literal> ou en passant l'option <option>--no-" +#~ "allow-insecure-repositories</option> sur la ligne de commande." + +#~ msgid "Archive Configuration" +#~ msgstr "Configuration d'une archive" + #~ msgid "dpkg trigger usage (and related options)" #~ msgstr "" #~ "utilisation des actions différées (« triggers ») de dpkg (et options " diff --git a/doc/po/it.po b/doc/po/it.po index 98d5a0784..716fa8b02 100644 --- a/doc/po/it.po +++ b/doc/po/it.po @@ -1,17 +1,17 @@ # Translation of apt package's po4a documentation -# Copyright (C) 2000-2012 Debian Italian l10n team <debian-l10n-italian@lists.debian.org> +# Copyright (C) 2000-2017 Debian Italian l10n team <debian-l10n-italian@lists.debian.org> # This file is distributed under the same license as the apt package. # Translators: # Eugenia Franzoni, 2000 # Hugh Hartmann, 2000-2012 # Gabriele Stilli, 2012 -# Beatrice Torracca <beatricet@libero.it>, 2012, 2014, 2015. +# Beatrice Torracca <beatricet@libero.it>, 2012, 2014, 2015, 2017. msgid "" msgstr "" "Project-Id-Version: apt-doc 1.0.5\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-06-01 10:51+0200\n" -"PO-Revision-Date: 2015-12-27 21:26+0200\n" +"POT-Creation-Date: 2017-07-08 14:03+0200\n" +"PO-Revision-Date: 2017-03-27 19:05+0200\n" "Last-Translator: Beatrice Torracca <beatricet@libero.it>\n" "Language-Team: Italian <debian-l10n-italian@lists.debian.org>\n" "Language: it\n" @@ -1419,18 +1419,6 @@ msgstr "" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt-get.8.xml -#, fuzzy -#| msgid "" -#| "Displays by default a deb822 formatted listing of information about all " -#| "data files (aka index targets) <command>apt-get update</command> would " -#| "download. Supports a <option>--format</option> option to modify the " -#| "output format as well as accepts lines of the default output to filter " -#| "the records by. The command is mainly used as an interface for external " -#| "tools working with APT to get information as well as filenames for " -#| "downloaded files so they can use them as well instead of downloading them " -#| "again on their own. Detailed documentation is omitted here and can " -#| "instead be found in the source tree in <literal><filename>doc/acquire-" -#| "additional-files.txt</filename></literal>." msgid "" "Displays by default a deb822 formatted listing of information about all data " "files (aka index targets) <command>apt-get update</command> would download. " @@ -1450,9 +1438,9 @@ msgstr "" "principalmente come interfaccia per strumenti esterni che lavorano con APT " "per ottenere informazioni e nomi di file per i file scaricati, in modo che " "possano essere usati anch'essi invece di riscaricarli. La documentazione " -"dettagliata non è presentata qui e può essere invece trovata nell'albero dei " -"sorgenti in <literal><filename>doc/acquire-additional-files.txt</filename></" -"literal>." +"dettagliata non è presentata qui e può essere invece trovata nel file &apt-" +"acquire-additional-files; fornito con il pacchetto <package>apt-doc</" +"package>." #. type: Content of: <refentry><refsect1><title> #: apt-get.8.xml apt-cache.8.xml apt-config.8.xml apt-extracttemplates.1.xml @@ -1637,17 +1625,12 @@ msgstr "" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt-get.8.xml -#, fuzzy -#| msgid "" -#| "Show upgraded packages; print out a list of all packages that are to be " -#| "upgraded. Configuration Item: <literal>APT::Get::Show-Upgraded</literal>." msgid "" "Do not show a list of all packages that are to be upgraded. Configuration " "Item: <literal>APT::Get::Show-Upgraded</literal>." msgstr "" -"Mostra i pacchetti aggiornati; stampa un elenco di tutti i pacchetti che " -"devono essere aggiornati. Voce di configurazione: <literal>APT::Get::Show-" -"Upgraded</literal>." +"Non stampa un elenco di tutti i pacchetti che devono essere aggiornati. Voce " +"di configurazione: <literal>APT::Get::Show-Upgraded</literal>." #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt-get.8.xml @@ -1987,16 +1970,12 @@ msgstr "" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt-get.8.xml -#, fuzzy -#| msgid "" -#| "Only process architecture-dependent build-dependencies. Configuration " -#| "Item: <literal>APT::Get::Arch-Only</literal>." msgid "" "Only process architecture-independent build-dependencies. Configuration " "Item: <literal>APT::Get::Indep-Only</literal>." msgstr "" -"Elabora solo le dipendenze di compilazione dipendenti dall'architettura. " -"Voce di configurazione: <literal>APT::Get::Arch-Only</literal>." +"Elabora solo le dipendenze di compilazione indipendenti dall'architettura. " +"Voce di configurazione: <literal>APT::Get::Indep-Only</literal>." #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt-get.8.xml @@ -2018,12 +1997,6 @@ msgstr "" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt-get.8.xml -#, fuzzy -#| msgid "" -#| "Forbid the update command to acquire unverifiable data from configured " -#| "sources. Apt will fail at the update command for repositories without " -#| "valid cryptographically signatures. Configuration Item: " -#| "<literal>Acquire::AllowInsecureRepositories</literal>." msgid "" "Forbid the update command to acquire unverifiable data from configured " "sources. APT will fail at the update command for repositories without valid " @@ -2031,14 +2004,37 @@ msgid "" "concept and the implications. Configuration Item: <literal>Acquire::" "AllowInsecureRepositories</literal>." msgstr "" -"Impedisce dal comando update di acquisire dati non verificati dalle fonti " +"Impedisce al comando update di acquisire dati non verificabili dalle fonti " "configurate. Il comando update di Apt fallirà per i repository senza firme " -"crittografiche valide. Voce di configurazione: <literal>Acquire::" +"crittografiche valide. Vedere anche &apt-secure; per i dettagli sul concetto " +"e sulle implicazioni. Voce di configurazione: <literal>Acquire::" "AllowInsecureRepositories</literal>." #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt-get.8.xml msgid "" +"Allow the update command to continue downloading data from a repository " +"which changed its information of the release contained in the repository " +"indicating e.g a new major release. APT will fail at the update command for " +"such repositories until the change is confirmed to ensure the user is " +"prepared for the change. See also &apt-secure; for details on the concept " +"and configuration." +msgstr "" + +#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> +#: apt-get.8.xml +msgid "" +"Specialist options (<literal>--allow-releaseinfo-changes-</" +"literal><replaceable>field</replaceable>) exist to allow changes only for " +"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>." +msgstr "" + +#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> +#: apt-get.8.xml +msgid "" "Show user friendly progress information in the terminal window when packages " "are installed, upgraded or removed. For a machine parsable version of this " "data see README.progress-reporting in the apt doc directory. Configuration " @@ -2059,6 +2055,9 @@ msgid "" "multiple files. See <option>--with-source</option> description in &apt-" "cache; for further details." msgstr "" +"Aggiunge il file specificato come fonte per metadati. Può essere ripetuto " +"per aggiungere più file. Vedere la descrizione di <option>--with-source</" +"option> in &apt-cache; per ulteriori dettagli." #. type: Content of: <refentry><refsect1><title> #: apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml apt.conf.5.xml @@ -2712,6 +2711,12 @@ msgid "" "literal> and <literal>Packages</literal> files as well as source package " "directories. Files are matched based on their name only, not their content!" msgstr "" +"Aggiunge il file fornito come fonte di metadati. Può essere ripetuto per " +"aggiungere più file. Attualmente sono gestiti file <literal>*.deb</literal>, " +"<literal>*.dsc</literal>, <literal>*.changes</literal>, <literal>Sources</" +"literal> e <literal>Packages</literal>, oltre a directory di pacchetti " +"sorgente. La corrispondenza con i file si basa solo sul nome, non sul loro " +"contenuto!" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt-cache.8.xml @@ -2722,19 +2727,20 @@ msgid "" "name of your choice with the last character being an underscore " "(\"<literal>_</literal>\"). Example: my.example_Packages.xz" msgstr "" +"<literal>Sources</literal> e <literal>Packages</literal> possono essere " +"compressi in qualsiasi formato gestito da apt, a patto che abbiano " +"l'estensione corretta. Se è necessario archiviare più file in una directory " +"si può aggiungere a un nome a propria scelta un prefisso che termina con un " +"trattino basso («<literal>_</literal>»). Esempio: mio.esempio_Packages.xz" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt-cache.8.xml -#, fuzzy -#| msgid "" -#| "Use source index field ordering. Configuration Item: <literal>APT::" -#| "SortPkgs::Source</literal>." msgid "" "Note that these sources are treated as trusted (see &apt-secure;). " "Configuration Item: <literal>APT::Sources::With</literal>." msgstr "" -"Usa l'ordinamento dei campi dell'indice dei sorgenti. Voce di " -"configurazione: <literal>APT::SortPkgs::Source</literal>." +"Notare che queste fonti vengono trattate come fidate (vedere &apt-secure;). " +"Voce di configurazione: <literal>APT::Sources::With</literal>." #. type: Content of: <refentry><refsect1><para> #: apt-cache.8.xml @@ -2777,11 +2783,19 @@ msgid "" "whenever the underlying commands change. <command>apt-key</command> will try " "to detect such usage and generates warnings on stderr in these cases." msgstr "" +"Notare che si desidera usare <command>apt-key</command> è necessaria " +"l'installazione aggiuntiva della suite GNU Privacy Guard (pacchettizzata in " +"<package>gnupg</package>). Espressamente per questo motivo l'uso " +"programmatico (specialmente in script del manutentore per i pacchetti!) è " +"fortemente sconsigliato. Inoltre il formato di output di tutti i comandi non " +"è definito e può cambiare, e lo fa, ogni volta che cambiano i comandi " +"sottostanti. <command>apt-key</command> cerca di rilevare questi usi e " +"genera in questi casi avvertimenti sullo stderr." #. type: Content of: <refentry><refsect1><title> #: apt-key.8.xml msgid "Supported keyring files" -msgstr "" +msgstr "File di portachiavi gestiti" #. type: Content of: <refentry><refsect1><para> #: apt-key.8.xml @@ -2792,6 +2806,12 @@ msgid "" "keyring files. Binary keyring files intended to be used with any apt version " "should therefore always be created with <command>gpg --export</command>." msgstr "" +"apt-key gestisce nei file con l'estensione «<literal>gpg</literal>» " +"solamente il formato binario OpenPGP (noto anche come «GPG key public " +"ring»), non il formato di database keybox introdotto come file di " +"portachiavi predefinito nelle versioni più nuove di &gpg;. I file di " +"portachiavi binari pensati per essere usati con qualsiasi versione di apt " +"dovrebbero perciò sempre essere creati con <command>gpg --export</command>." #. type: Content of: <refentry><refsect1><para> #: apt-key.8.xml @@ -2801,6 +2821,10 @@ msgid "" "with the \"<literal>asc</literal>\" extension instead which can be created " "with <command>gpg --armor --export</command>." msgstr "" +"In alternativa, se tutti i sistemi che devono usare il portachiavi creato " +"hanno una installata versione di apt almeno >= 1.4, si può utilizzare invece " +"il formato armored ASCII con l'estensione «<literal>asc</literal>» che può " +"essere creato con <command>gpg --armor --export</command>." #. type: Content of: <refentry><refsect1><title> #: apt-key.8.xml @@ -2838,6 +2862,10 @@ msgid "" "directory with a descriptive name and either \"<literal>gpg</literal>\" or " "\"<literal>asc</literal>\" as file extension." msgstr "" +"<emphasis>Nota bene</emphasis>: invece di usare questo comando un " +"portachiavi dovrebbe essere messo direttamente nella directory <filename>/" +"etc/apt/trusted.gpg.d/</filename> con un nome descrittivo e con " +"«<literal>gpg</literal>» o «<literal>asc</literal>» come estensione di file." #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt-key.8.xml @@ -2857,10 +2885,8 @@ msgstr "Visualizza sullo standard output tutte le chiavi fidate." #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt-key.8.xml -#, fuzzy -#| msgid "List trusted keys." msgid "List trusted keys with fingerprints." -msgstr "Elenca le chiavi fidate." +msgstr "Elenca le chiavi fidate con le impronte digitali." #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt-key.8.xml @@ -2879,7 +2905,7 @@ msgstr "" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term> #: apt-key.8.xml msgid "(deprecated)" -msgstr "" +msgstr "(deprecato)" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt-key.8.xml @@ -2904,6 +2930,12 @@ msgid "" "<package>gnupg</package> and it is easier to manage keys by simply adding " "and removing files for maintainers and users alike." msgstr "" +"Notare che una distribuzione non ha più bisogno di usare questo comando, e " +"di fatto non dovrebbe farlo, e invece fornisce file portachiavi direttamente " +"nella directory <filename>/etc/apt/trusted.gpg.d/</filename>, dato che " +"questo evita una dipendenza da <package>gnupg</package> ed è più facile, sia " +"per i manutentori sia per gli utenti, gestire chiavi semplicemente " +"aggiungendo e rimuovendo file." #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt-key.8.xml @@ -3149,29 +3181,49 @@ msgstr "supporto per l'autenticazione degli archivi per APT" #| "Starting with version 0.6, <command>APT</command> contains code that does " #| "signature checking of the Release file for all repositories. This ensures " #| "that data like packages in the archive can't be modified by people who " -#| "have no access to the Release file signing key." +#| "have no access to the Release file signing key. Starting with version 1.1 " +#| "<command>APT</command> requires repositories to provide recent " +#| "authentication information for unimpeded usage of the repository." msgid "" "Starting with version 0.6, <command>APT</command> contains code that does " "signature checking of the Release file for all repositories. This ensures " "that data like packages in the archive can't be modified by people who have " "no access to the Release file signing key. Starting with version 1.1 " "<command>APT</command> requires repositories to provide recent " -"authentication information for unimpeded usage of the repository." +"authentication information for unimpeded usage of the repository. Since " +"version 1.5 changes in the information contained in the Release file about " +"the repository need to be confirmed before APT continues to apply updates " +"from this repository." msgstr "" "A partire dalla versione 0.6, <command>APT</command> contiene del codice che " "controlla le firme dei file Release per tutti i repository. Ciò assicura che " "dati quali i pacchetti nell'archivio non possano essere modificati da " -"persone che non hanno accesso alla chiave di firma dei file Release." +"persone che non hanno accesso alla chiave di firma dei file Release. A " +"partire dalla versione 1.1 <command>APT</command> richiede che i repository " +"forniscano informazioni di autenticazione recenti per l'uso senza problemi " +"del repository." #. type: Content of: <refentry><refsect1><para> #: apt-secure.8.xml +msgid "" +"Note: All APT-based package management front-ends like &apt-get;, &aptitude; " +"and &synaptic; support this authentication feature, so this manpage uses " +"<literal>APT</literal> to refer to them all for simplicity only." +msgstr "" +"Nota: tutti i front-end di gestione dei pacchetti basati su APT, come &apt-" +"get;, &aptitude; e &synaptic;, supportano questa funzionalità di " +"autenticazione, perciò questa pagina di manuale usa <literal>APT</literal> " +"per fare riferimento a tutti loro solo per ragioni di semplicità ." + +#. type: Content of: <refentry><refsect1><title> +#: apt-secure.8.xml #, fuzzy -#| msgid "" -#| "If an archive has an unsigned Release file or no Release file at all " -#| "current APT versions will raise a warning in <command>update</command> " -#| "operations and front-ends like <command>apt-get</command> will require " -#| "explicit confirmation if an installation request includes a package from " -#| "such an unauthenticated archive." +#| msgid "Trusted Repositories" +msgid "Unsigned Repositories" +msgstr "Repository fidati" + +#. type: Content of: <refentry><refsect1><para> +#: apt-secure.8.xml msgid "" "If an archive has an unsigned Release file or no Release file at all current " "APT versions will refuse to download data from them by default in " @@ -3180,22 +3232,12 @@ msgid "" "request includes a package from such an unauthenticated archive." msgstr "" "Se un archivio ha un file Release non firmato o non ha per nulla un file " -"Release, le versioni attuali di APT mostrano un avvertimento durante le " -"operazioni di <command>update</command> e i frontend come <command>apt-get</" -"command> richiedono una conferma esplicita se una richiesta di installazione " -"include un pacchetto da un archivio non autenticato di questo tipo." - -#. type: Content of: <refentry><refsect1><para> -#: apt-secure.8.xml -msgid "" -"As a temporary exception &apt-get; (not &apt;!) raises warnings only if it " -"encounters unauthenticated archives to give a slightly longer grace period " -"on this backward compatibility effecting change. This exception will be " -"removed in future releases and you can opt-out of this grace period by " -"setting the configuration option <option>Binary::apt-get::Acquire::" -"AllowInsecureRepositories</option> to <literal>false</literal> or <option>--" -"no-allow-insecure-repositories</option> on the command line." -msgstr "" +"Release, tutte le versioni attuali di APT si rifiutano in modo predefinito " +"di scaricare dati da esso durante le operazioni di <command>update</" +"command>, e i frontend come <command>apt-get</command>, anche se forzati a " +"scaricare, richiedono una conferma esplicita se una richiesta di " +"installazione include un pacchetto da un archivio non autenticato di questo " +"tipo." #. type: Content of: <refentry><refsect1><para> #: apt-secure.8.xml @@ -3210,6 +3252,16 @@ msgid "" "disable even the warnings, but be sure to understand the implications as " "detailed in &sources-list;." msgstr "" +"Si possono forzare tutti i client APT a dare solo avvertimenti impostando " +"l'opzione di configurazione <option>Acquire::AllowInsecureRepositories</" +"option> a <literal>true</literal>. È anche possibile abilitare singoli " +"repository non sicuri attraverso l'opzione per &sources-list; <literal>allow-" +"insecure=yes</literal>. Notare che l'uso di repository non sicuri è " +"fortemente sconsigliato e tutte le opzioni per forzare apt a continuare a " +"supportarli verranno da ultimo rimosse. Gli utenti hanno a disposizione " +"anche l'opzione <option>Trusted</option> per disabilitare anche gli " +"avvertimenti, ma assicurarsi di avere compreso le implicazioni, come " +"spiegato in dettaglio in &sources-list;." #. type: Content of: <refentry><refsect1><para> #: apt-secure.8.xml @@ -3222,22 +3274,19 @@ msgid "" "<literal>true</literal> or for Individual repositories with the &sources-" "list; option <literal>allow-downgrade-to-insecure=yes</literal>." msgstr "" - -#. type: Content of: <refentry><refsect1><para> -#: apt-secure.8.xml -msgid "" -"Note: All APT-based package management front-ends like &apt-get;, &aptitude; " -"and &synaptic; support this authentication feature, so this manpage uses " -"<literal>APT</literal> to refer to them all for simplicity only." -msgstr "" -"Nota: tutti i front-end di gestione dei pacchetti basati su APT, come &apt-" -"get;, &aptitude; e &synaptic;, supportano questa funzionalità di " -"autenticazione, perciò questa pagina di manuale usa <literal>APT</literal> " -"per fare riferimento a tutti loro solo per ragioni di semplicità ." +"Un repository che in precedenza era autenticato ma che perde il proprio " +"stato in un'operazione di <command>update</command> genera un errore in " +"tutti i client APT indipendentemente dall'opzione per permettere o proibire " +"l'uso di repository non sicuri. L'errore può essere scavalcato impostando in " +"aggiunta <option>Acquire::AllowDowngradeToInsecureRepositories</option> a " +"<literal>true</literal> o, per repository individuali, con l'opzione " +"<literal>allow-downgrade-to-insecure=yes</literal> per &sources-list;." #. type: Content of: <refentry><refsect1><title> #: apt-secure.8.xml -msgid "Trusted Repositories" +#, fuzzy +#| msgid "Trusted Repositories" +msgid "Signed Repositories" msgstr "Repository fidati" #. type: Content of: <refentry><refsect1><para> @@ -3377,6 +3426,30 @@ msgstr "" #. type: Content of: <refentry><refsect1><title> #: apt-secure.8.xml +msgid "Information changes" +msgstr "" + +#. type: Content of: <refentry><refsect1><para> +#: apt-secure.8.xml +msgid "" +"A Release file contains beside the checksums for the files in the repository " +"also general information about the repository like the origin, codename or " +"version number of the release." +msgstr "" + +#. type: Content of: <refentry><refsect1><para> +#: apt-secure.8.xml +msgid "" +"This information is shown in various places so a repository owner should " +"always ensure correctness. Further more user configuration like &apt-" +"preferences; can depend and make use of this information. Since version 1.5 " +"the user must therefore explicitly confirm changes to signal that the user " +"is sufficiently prepared e.g. for the new major release of the distribution " +"shipped in the repository (as e.g. indicated by the codename)." +msgstr "" + +#. type: Content of: <refentry><refsect1><title> +#: apt-secure.8.xml msgid "User Configuration" msgstr "Configurazione utente" @@ -3426,8 +3499,10 @@ msgstr "" #. type: Content of: <refentry><refsect1><title> #: apt-secure.8.xml -msgid "Archive Configuration" -msgstr "Configurazione dell'archivio" +#, fuzzy +#| msgid "User Configuration" +msgid "Repository Configuration" +msgstr "Configurazione utente" #. type: Content of: <refentry><refsect1><para> #: apt-secure.8.xml @@ -4185,6 +4260,15 @@ msgid "" "pass to the command <command>rev</command> without additional commandline " "parameters for compression and uncompression:" msgstr "" +"Questo ambito definisce quali formati di compressione sono gestiti, come " +"possono essere effettuate la compressione e la decompressione se il supporto " +"per il formato non è incorporato direttamente in apt e un valoro di costo " +"che indica quanto costoso è comprimere qualcosa in questo formato. Come " +"esempio, la seguente sezione di configurazione permette ad apt di scaricare " +"e decomprimere, oltre a creare e archiviare, file con l'estensione a basso " +"costo <literal>.reversed</literal> che passerà al comando <command>rev</" +"command> senza parametri aggiuntivi per la compressione e la decompressione " +"nella riga di comando:" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><informalexample><programlisting> #: apt.conf.5.xml @@ -4199,6 +4283,14 @@ msgid "" "\tCost \"10\";\n" "};\n" msgstr "" +"APT::Compressor::rev {\n" +"\tName \"rev\";\n" +"\tExtension \".reversed\";\n" +"\tBinary \"rev\";\n" +"\tCompressArg {};\n" +"\tUncompressArg {};\n" +"\tCost \"10\";\n" +"};\n" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt.conf.5.xml @@ -4512,6 +4604,14 @@ msgstr "" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt.conf.5.xml msgid "" +"Allow use of the internal TLS support in the http method. If set to false, " +"this completely disables support for TLS in apt's own methods (excluding the " +"curl-based https method). No TLS-related functions will be called anymore." +msgstr "" + +#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> +#: apt.conf.5.xml +msgid "" "Try to download deltas called <literal>PDiffs</literal> for indexes (like " "<filename>Packages</filename> files) instead of downloading whole ones. True " "by default. Preferably, this can be set for specific &sources-list; entries " @@ -4702,17 +4802,6 @@ msgstr "" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt.conf.5.xml -#, fuzzy -#| msgid "" -#| "<literal>Acquire::http::Proxy-Auto-Detect</literal> can be used to " -#| "specify an external command to discover the http proxy to use. Apt " -#| "expects the command to output the proxy on stdout in the style " -#| "<literal>http://proxy:port/</literal>. This will override the generic " -#| "<literal>Acquire::http::Proxy</literal> but not any specific host proxy " -#| "configuration set via <literal>Acquire::http::Proxy::$HOST</literal>. " -#| "See the &squid-deb-proxy-client; package for an example implementation " -#| "that uses avahi. This option takes precedence over the legacy option name " -#| "<literal>ProxyAutoDetect</literal>." msgid "" "<literal>Acquire::http::Proxy-Auto-Detect</literal> can be used to specify " "an external command to discover the http proxy to use. The first and only " @@ -4728,14 +4817,19 @@ msgid "" "the legacy option name <literal>ProxyAutoDetect</literal>." msgstr "" "<literal>Acquire::http::Proxy-Auto-Detect</literal> può essere usato per " -"specificare un comando esterno per rilevare il proxy http da usare. Apt si " -"aspetta che il comando produca in output il proxy sullo stdout nello stile " -"<literal>http://proxy:porta/</literal>. Questo avrà la precedenza sul " -"generico <literal>Acquire::http::Proxy</literal>, ma non su qualsiasi " -"configurazione specifica di host proxy impostata con <literal>Acquire::http::" -"Proxy::$HOST</literal>. Vedere il pacchetto &squid-deb-proxy-client; per un " -"esempio di implementazione che usa avahi. Questa opzione ha la precedenza " -"sull'opzione col nome obsoleto <literal>ProxyAutoDetect</literal>." +"specificare un comando esterno per rilevare il proxy http da usare. Il primo " +"è unico parametro è un URI che indica l'host da contattare per permettere " +"una configurazione specifica per host. APT si aspetta che il comando produca " +"in output il proxy sullo stdout come singola riga nello stile " +"<literal>http://proxy:porta/</literal> o la parola <literal>DIRECT</literal> " +"se non deve essere usato un proxy. L'assenza di output indica che devono " +"essere usate le impostazioni generiche per proxy. Notare che il rilevamento " +"automatico non verrà usato per un host se una configurazione di proxy " +"specifica per host è già impostata con <literal>Acquire::http::Proxy::" +"<replaceable>HOST</replaceable></literal>. Vedere il pacchetto &squid-deb-" +"proxy-client; per un esempio di implementazione che usa avahi. Questa " +"opzione ha la precedenza sull'opzione col nome obsoleto " +"<literal>ProxyAutoDetect</literal>." #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt.conf.5.xml @@ -4920,15 +5014,6 @@ msgstr "Acquire::CompressionTypes::<replaceable>EstensioneFile</replaceable> \"< #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt.conf.5.xml -#, fuzzy -#| msgid "" -#| "List of compression types which are understood by the acquire methods. " -#| "Files like <filename>Packages</filename> can be available in various " -#| "compression formats. By default the acquire methods can decompress " -#| "<command>bzip2</command>, <command>lzma</command> and <command>gzip</" -#| "command> compressed files; with this setting more formats can be added on " -#| "the fly or the used method can be changed. The syntax for this is: " -#| "<placeholder type=\"synopsis\" id=\"0\"/>" msgid "" "List of compression types which are understood by the acquire methods. " "Files like <filename>Packages</filename> can be available in various " @@ -4941,10 +5026,12 @@ msgstr "" "Elenco di tipi di compressione che sono capiti dai metodi di acquisizione. I " "file come <filename>Packages</filename> possono essere disponibili in vari " "formati di compressione. In modo predefinito i metodi di acquisizione " -"possono decomprimere file compressi con <command>bzip2</command>, " -"<command>lzma</command> e <command>gzip</command>; con questa impostazione " -"si possono aggiungere altri formati al volo oppure può essere cambiato il " -"metodo usato. La sintassi è: <placeholder type=\"synopsis\" id=\"0\"/>" +"possono decomprimere e ricomprimere molti formati comuni come <command>xz</" +"command> e <command>gzip</command>; con questa impostazione si possono " +"ottenere informazioni sui formati supportati, si può modificarli oltre ad " +"aggiungere il supporto per altri formati (vedere anche <option>APT::" +"Compressor</option>). La sintassi è: <placeholder type=\"synopsis\" id=\"0\"/" +">" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><synopsis> #: apt.conf.5.xml @@ -4960,21 +5047,6 @@ msgstr "Acquire::CompressionTypes::Order { \"xz\"; \"gz\"; };" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt.conf.5.xml -#, fuzzy -#| msgid "" -#| "Also, the <literal>Order</literal> subgroup can be used to define in " -#| "which order the acquire system will try to download the compressed files. " -#| "The acquire system will try the first and proceed with the next " -#| "compression type in this list on error, so to prefer one over the other " -#| "type simply add the preferred type first - default types not already " -#| "added will be implicitly appended to the end of the list, so e.g. " -#| "<placeholder type=\"synopsis\" id=\"0\"/> can be used to prefer " -#| "<command>gzip</command> compressed files over <command>bzip2</command> " -#| "and <command>lzma</command>. If <command>lzma</command> should be " -#| "preferred over <command>gzip</command> and <command>bzip2</command> the " -#| "configure setting should look like this: <placeholder type=\"synopsis\" " -#| "id=\"1\"/> It is not needed to add <literal>bz2</literal> to the list " -#| "explicitly as it will be added automatically." msgid "" "Also, the <literal>Order</literal> subgroup can be used to define in which " "order the acquire system will try to download the compressed files. The " @@ -4993,12 +5065,12 @@ msgstr "" "quale ordine il sistema di acquisizione cerca di scaricare i file compressi. " "Il sistema tenta con il primo tipo di compressione e in caso di errore passa " "al successivo nell'elenco perciò, per preferire un tipo rispetto ad un " -"altro, basta mettere il tipo preferito per primo; i tipi predefiniti che non " -"sono già presenti vengono aggiunti in modo implicito alla fine dell'elenco, " -"perciò si può usare, ad esempio, <placeholder type=\"synopsis\" id=\"0\"/> " -"per preferire i file compressi con <command>gzip</command> a <command>bzip2</" -"command> e <command>lzma</command>. Se si volesse preferire <command>lzma</" -"command> rispetto a <command>gzip</command> e <command>bzip2</command>, " +"altro, basta mettere il tipo preferito per primo; i tipi che non sono già " +"presenti vengono aggiunti in modo implicito alla fine dell'elenco, perciò si " +"può usare, ad esempio, <placeholder type=\"synopsis\" id=\"0\"/> per " +"preferire i file compressi con <command>gzip</command> a tutti gli altri " +"formati di compressione. Se si volesse preferire <command>xz</command> " +"rispetto a <command>gzip</command> e <command>bzip2</command>, " "l'impostazione di configurazione sarebbe: <placeholder type=\"synopsis\" id=" "\"1\"/> Non è necessario aggiungere esplicitamente <literal>bz2</literal> " "all'elenco, dato che verrà aggiunto automaticamente." @@ -5011,18 +5083,6 @@ msgstr "Dir::Bin::bzip2 \"/bin/bzip2\";" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt.conf.5.xml -#, fuzzy -#| msgid "" -#| "Note that the <literal>Dir::Bin::<replaceable>Methodname</replaceable></" -#| "literal> will be checked at run time. If this option has been set, the " -#| "method will only be used if this file exists; e.g. for the " -#| "<literal>bzip2</literal> method (the inbuilt) setting is: <placeholder " -#| "type=\"literallayout\" id=\"0\"/> Note also that list entries specified " -#| "on the command line will be added at the end of the list specified in the " -#| "configuration files, but before the default entries. To prefer a type in " -#| "this case over the ones specified in the configuration files you can set " -#| "the option direct - not in list style. This will not override the " -#| "defined list; it will only prefix the list with this type." msgid "" "Note that the <literal>Dir::Bin::<replaceable>Methodname</replaceable></" "literal> will be checked at run time. If this option has been set and " @@ -5038,15 +5098,16 @@ msgid "" msgstr "" "Notare che <literal>Dir::Bin::<replaceable>NomeMetodo</replaceable></" "literal> viene controllata al momento dell'esecuzione. Se questa opzione è " -"stata impostata, il metodo verrà usato solo se questo file è esistente; ad " -"esempio, per il metodo <literal>bzip2</literal> l'impostazione (interna) è: " -"<placeholder type=\"literallayout\" id=\"0\"/> Notare anche che le voci " -"nell'elenco specificate nella riga di comando vengono aggiunte alla fine " -"dell'elenco specificato nei file di configurazione, ma prima delle voci " -"predefinite. In questo caso, per preferire un tipo rispetto a quelli " -"specificati nei file di configurazione si può impostare l'opzione " -"direttamente, non nello stile per elenco. Ciò non sovrascrive l'elenco " -"definito; aggiunge solamente il tipo indicato all'inizio dell'elenco." +"stata impostata e il supporto per il formato non è incluso direttamente in " +"apt, il metodo verrà usato solo se questo file è esistente; ad esempio, per " +"il metodo <literal>bzip2</literal> l'impostazione (interna) è: <placeholder " +"type=\"literallayout\" id=\"0\"/> Notare anche che le voci nell'elenco " +"specificate nella riga di comando vengono aggiunte alla fine dell'elenco " +"specificato nei file di configurazione, ma prima delle voci predefinite. In " +"questo caso, per preferire un tipo rispetto a quelli specificati nei file di " +"configurazione si può impostare l'opzione direttamente, non nello stile per " +"elenco. Ciò non sovrascrive l'elenco definito; aggiunge solamente il tipo " +"indicato all'inizio dell'elenco." #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt.conf.5.xml @@ -5190,6 +5251,10 @@ msgid "" "literal>\". Concept, implications as well as alternatives are detailed in " "&apt-secure;." msgstr "" +"Permette alle operazioni di aggiornamento di caricare file dei dati da " +"repository senza sufficienti informazioni di sicurezza. Il valore " +"predefinito è «<literal>false</literal>». Il concetto, le implicazioni e le " +"alternative sono spiegati in dettaglio in &apt-secure;." #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt.conf.5.xml @@ -5199,18 +5264,14 @@ msgid "" "strong enough. The default value is \"<literal>false</literal>\". Concept, " "implications as well as alternatives are detailed in &apt-secure;." msgstr "" +"Permette alle operazioni di aggiornamento di caricare file dei dati da " +"repository che forniscono informazioni di sicurezza che sono però " +"considerate non abbastanza robuste dal punto di vista crittografico. Il " +"valore predefinito è «<literal>false</literal>». Il concetto, le " +"implicazioni e le alternative sono spiegati in dettaglio in &apt-secure;." #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt.conf.5.xml -#, fuzzy -#| msgid "" -#| "Allow that a repository that was previously gpg signed to become unsigned " -#| "durign a update operation. When there is no valid signature of a " -#| "previously trusted repository apt will refuse the update. This option can " -#| "be used to override this protection. You almost certainly never want to " -#| "enable this. The default is false. Note that apt will still consider " -#| "packages from this source untrusted and warn about them if you try to " -#| "install them." msgid "" "Allow that a repository that was previously gpg signed to become unsigned " "during an update operation. When there is no valid signature for a " @@ -5224,8 +5285,8 @@ msgstr "" "valida per un repository precedentemente fidato, apt rifiuta " "l'aggiornamento. Questa opzione può essere usata per scavalcare questa " "protezione. Non dovrebbe mai venire abilitata. Il valore predefinito è " -"falso. Notare che apt considera comunque i pacchetti da questa fonte come " -"non fidati e produce avvertimenti se si cerca di installarli." +"«<literal>false</literal>. Il concetto, le implicazioni e le alternative " +"sono spiegati in dettaglio in &apt-secure;." #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term> #: apt.conf.5.xml @@ -5622,17 +5683,6 @@ msgstr "" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt.conf.5.xml -#, fuzzy -#| msgid "" -#| "Package action lines consist of five fields in Version 2: old version, " -#| "direction of version change (< for upgrades, > for downgrades, = " -#| "for no change), new version, action. The version fields are \"-\" for no " -#| "version at all (for example when installing a package for the first time; " -#| "no version is treated as earlier than any real version, so that is an " -#| "upgrade, indicated as <literal>- < 1.23.4</literal>). The action field " -#| "is \"**CONFIGURE**\" if the package is being configured, \"**REMOVE**\" " -#| "if it is being removed, or the filename of a .deb file if it is being " -#| "unpacked." msgid "" "Package action lines consist of five fields in Version 2: package name " "(without architecture qualification even if foreign), old version, direction " @@ -5645,14 +5695,15 @@ msgid "" "the filename of a .deb file if it is being unpacked." msgstr "" "Le righe delle azioni di pacchetto sono costituite nella Versione 2 da " -"cinque campi: vecchia versione, direzione del cambiamento di versione (< " -"per gli aggiornamenti, > per le retrocessioni a versioni precedenti, = " -"per nessun cambiamento), nuova versione, azione. I campi di versione sono " -"«-» per nessuna versione (per esempio quando si installa un pacchetto per la " +"cinque campi: nome di pacchetto (senza qualifica dell'architettura anche se " +"foreign), vecchia versione, direzione del cambiamento di versione (< per " +"gli aggiornamenti, > per le retrocessioni a versioni precedenti, = per " +"nessun cambiamento), nuova versione, azione. I campi di versione sono «-» " +"per nessuna versione (per esempio quando si installa un pacchetto per la " "prima volta; la mancanza di versione viene trattata come precedente a " "qualsiasi versione, perciò è un aggiornamento indicato come <literal>- < " "1.23.4</literal>). Il campo dell'azione è «**CONFIGURE**» se il pacchetto " -"viene configurato, «**REMOVE**» se viene rimosso o il nome ddi un file .deb " +"viene configurato, «**REMOVE**» se viene rimosso o il nome di un file .deb " "se viene spacchettato." #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> @@ -5727,14 +5778,6 @@ msgstr "" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt.conf.5.xml -#, fuzzy -#| msgid "" -#| "If this option is set APT will call <command>dpkg --configure --pending</" -#| "command> to let &dpkg; handle all required configurations and triggers. " -#| "This option is activated automatically per default if the previous option " -#| "is not set to <literal>all</literal>, but deactivating it could be useful " -#| "if you want to run APT multiple times in a row - e.g. in an installer. In " -#| "these sceneries you could deactivate this option in all but the last run." msgid "" "If this option is set APT will call <command>dpkg --configure --pending</" "command> to let &dpkg; handle all required configurations and triggers. This " @@ -5744,11 +5787,10 @@ msgid "" msgstr "" "Se questa opzione è impostata, APT invoca <command>dpkg --configure --" "pending</command> per lasciare che &dpkg; gestisca tutte le configurazioni e " -"i trigger necessari. Questa opzione viene attivata automaticamente in modo " -"predefinito se l'opzione precedente non è impostata a <literal>all</" -"literal>, ma potrebbe essere utile disattivarla se si desidera eseguire APT " -"più volte di seguito, ad esempio in un installatore. In uno scenario simile " -"si può disattivare questa opzione in tutte le esecuzioni tranne l'ultima." +"i trigger necessari. Questa opzione è attivata in modo predefinito, ma " +"potrebbe essere utile disattivarla se si desidera eseguire APT più volte di " +"seguito, ad esempio in un installatore. In uno scenario simile si può " +"disattivare questa opzione in tutte le esecuzioni tranne l'ultima." #. type: Content of: <refentry><refsect1><title> #: apt.conf.5.xml @@ -7948,14 +7990,6 @@ msgstr "" #. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para> #: sources.list.5.xml -#, fuzzy -#| msgid "" -#| "<option>Targets</option> (<option>target</option>) is a multivalue option " -#| "defining which download targets apt will try to acquire from this source. " -#| "If not specified, the default set is defined by the <option>Acquire::" -#| "IndexTargets</option> configuration scope. Additionally, specific " -#| "targets can be enabled or disabled by using the identifier as field name " -#| "instead of using this multivalue option." msgid "" "<option>Targets</option> (<option>target</option>) is a multivalue option " "defining which download targets apt will try to acquire from this source. If " @@ -7969,9 +8003,10 @@ msgstr "" "che definisce quali rilasci obiettivo di scaricamento apt cercherà di " "acquisire da questa fonte. Se non specificata, l'insieme predefinito è " "definito dall'ambito di configurazione <option>Acquire::IndexTargets</" -"option>. In aggiunta target specifici possono essere abilitati o " -"disabilitati usando l'identificatore come nome di campo invece di usare " -"questa opzione multivalore." +"option> (i rilasci obiettivo sono specificati con il loro nome nel campo " +"<literal>Created-By</literal>). In aggiunta target specifici possono essere " +"abilitati o disabilitati usando il campo <literal>Identifier</literal> come " +"opzione con un valore booleano invece di usare questa opzione multivalore." #. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para> #: sources.list.5.xml @@ -8050,6 +8085,12 @@ msgid "" "set to <literal>yes</literal> they circumvent parts of &apt-secure; and " "should therefore not be used lightly!" msgstr "" +"<option>Allow-Insecure</option> (<option>allow-insecure</option>), " +"<option>Allow-Weak</option> (<option>allow-weak</option>) e <option>Allow-" +"Downgrade-To-Insecure</option> (<option>allow-downgrade-to-insecure</" +"option>) sono valori booleani che hanno tutti il valore predefinito " +"<literal>no</literal>. Se impostati a <literal>yes</literal> aggirano parti " +"di &apt-secure; e perciò non devono essere usati con leggerezza!" #. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para> #: sources.list.5.xml @@ -8082,18 +8123,6 @@ msgstr "" #. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para> #: sources.list.5.xml -#, fuzzy -#| msgid "" -#| "<option>Signed-By</option> (<option>signed-by</option>) is either an " -#| "absolute path to a keyring file (has to be accessible and readable for " -#| "the <literal>_apt</literal> user, so ensure everyone has read-permissions " -#| "on the file) or a fingerprint of a key either in the <filename>trusted." -#| "gpg</filename> keyring or in one of the keyrings in the <filename>trusted." -#| "gpg.d/</filename> directory (see <command>apt-key fingerprint</command>). " -#| "If the option is set, only the key(s) in this keyring or only the key " -#| "with this fingerprint is used for the &apt-secure; verification of this " -#| "repository. Otherwise all keys in the trusted keyrings are considered " -#| "valid signers for this repository." msgid "" "<option>Signed-By</option> (<option>signed-by</option>) is either an " "absolute path to a keyring file (has to be accessible and readable for the " @@ -8107,17 +8136,19 @@ msgid "" "previously acquired <filename>Release</filename> file. Otherwise all keys " "in the trusted keyrings are considered valid signers for this repository." msgstr "" -"<option>Signed-By</option> (<option>signed-by</option>) è un percorso " +"<option>Signed-By</option> (<option>signed-by</option>) è un percorso " "assoluto ad un file di portachiavi (deve essere accessibile e leggibile " "dall'utente <literal>_apt</literal>, perciò assicurarsi che tutti abbiano i " -"permessi di lettura sul file) oppure una fingerprint di una chiave nel " -"portachiavi <filename>trusted.gpg</filename> o in uno dei portachiavi nella " +"permessi di lettura sul file) oppure una o più fingerprint di chiavi nel " +"portachiavi <filename>trusted.gpg</filename> o nei portachiavi nella " "directory <filename>trusted.gpg.d/</filename> (vedere <command>apt-key " "fingerprint</command>). Se l'opzione è impostata, solo le chiavi in questo " -"portachiavi oppure solamente la chiave con questa fingerprint vengono usate " -"per la verifica con &apt-secure; di questo repository. Altrimenti tutte le " -"chiavi nei portachiavi fidati vengono considerate come firmatari validi per " -"questo repository." +"portachiavi oppure solamente la chiave con queste fingerprint vengono usate " +"per la verifica con &apt-secure; di questo repository. Il valore predefinito " +"è quello dell'opzione omonima se impostata nel file <filename>Release</" +"filename> precedentemente acquisito. Altrimenti tutte le chiavi nei " +"portachiavi fidati vengono considerate come firmatari validi per questo " +"repository." #. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para> #: sources.list.5.xml @@ -8821,19 +8852,6 @@ msgstr "" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt-ftparchive.1.xml -#, fuzzy -#| msgid "" -#| "The <literal>release</literal> command generates a Release file from a " -#| "directory tree. It recursively searches the given directory for " -#| "uncompressed <filename>Packages</filename> and <filename>Sources</" -#| "filename> files and ones compressed with <command>gzip</command>, " -#| "<command>bzip2</command> or <command>lzma</command> as well as " -#| "<filename>Release</filename> and <filename>md5sum.txt</filename> files by " -#| "default (<literal>APT::FTPArchive::Release::Default-Patterns</literal>). " -#| "Additional filename patterns can be added by listing them in " -#| "<literal>APT::FTPArchive::Release::Patterns</literal>. It then writes to " -#| "stdout a <filename>Release</filename> file containing (by default) an " -#| "MD5, SHA1, SHA256 and SHA512 digest for each file." msgid "" "The <literal>release</literal> command generates a Release file from a " "directory tree. It recursively searches the given directory for uncompressed " @@ -8849,15 +8867,15 @@ msgid "" msgstr "" "Il comando <literal>release</literal> genera un file Release da un albero di " "directory. In modo predefinito cerca ricorsivamente nella directory data i " -"file <filename>Packages</filename> e <filename>Sources</filename> non " -"compressi e quelli compressi con <command>gzip</command>, <command>bzip2</" -"command> o <command>lzma</command>, come anche i file <filename>Release</" -"filename> e <filename>md5sum.txt</filename> (<literal>APT::FTPArchive::" -"Release::Default-Patterns</literal>). Si possono aggiungere ulteriori " -"modelli per i nomi di file elencandoli in <literal>APT::FTPArchive::Release::" -"Patterns</literal>. Scrive poi sullo stdout un file <filename>Release</" -"filename> contenente (in modo predefinito) per ogni file un digest MD5, " -"SHA1, SHA256 e SHA512." +"file <filename>Packages</filename>, <filename>Sources</filename>, " +"<filename>Contents</filename>, <filename>Components</filename> e " +"<filename>icons</filename> compressi e non compressi, come anche i file " +"<filename>Release</filename>, <filename>Index</filename> e <filename>md5sum." +"txt</filename> (<literal>APT::FTPArchive::Release::Default-Patterns</" +"literal>). Si possono aggiungere ulteriori modelli per i nomi di file " +"elencandoli in <literal>APT::FTPArchive::Release::Patterns</literal>. Scrive " +"poi sullo stdout un file <filename>Release</filename> contenente (in modo " +"predefinito) per ogni file un digest MD5, SHA1, SHA256 e SHA512." #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt-ftparchive.1.xml @@ -9004,12 +9022,6 @@ msgstr "" #. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para> #: apt-ftparchive.1.xml -#, fuzzy -#| msgid "" -#| "Sets the default compression schemes to use for the package index files. " -#| "It is a string that contains a space separated list of at least one of: " -#| "'.' (no compression), 'gzip' and 'bzip2'. The default for all compression " -#| "schemes is '. gzip'." msgid "" "Sets the default compression schemes to use for the package index files. It " "is a string that contains a space separated list of at least one of the " @@ -9018,8 +9030,9 @@ msgid "" msgstr "" "Imposta gli schemi di compressione predefiniti da usare per i file indice " "dei pacchetti. È una stringa che contiene una lista separata da spazi con " -"almeno uno fra «.» (nessuna compressione), «gzip» e «bzip2». Il valore " -"predefinito per tutti gli schemi di compressione è «. gzip»." +"almeno uno dei compressori configurati con l'ambito di configurazione " +"<option>APT::Compressor</option>. Il valore predefinito per tutti gli schemi " +"di compressione è «. gzip»." #. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para> #: apt-ftparchive.1.xml @@ -11312,6 +11325,27 @@ msgstr " # apt-get -o dir::cache::archives=\"/disc/\" dist-upgrade\n" msgid "Which will use the already fetched archives on the disc." msgstr "che userà gli archivi già scaricati e presenti sul disco." +#~ msgid "" +#~ "As a temporary exception &apt-get; (not &apt;!) raises warnings only if " +#~ "it encounters unauthenticated archives to give a slightly longer grace " +#~ "period on this backward compatibility effecting change. This exception " +#~ "will be removed in future releases and you can opt-out of this grace " +#~ "period by setting the configuration option <option>Binary::apt-get::" +#~ "Acquire::AllowInsecureRepositories</option> to <literal>false</literal> " +#~ "or <option>--no-allow-insecure-repositories</option> on the command line." +#~ msgstr "" +#~ "Come eccezione temporanea &apt-get; (non &apt;!) dà solo avvertimenti se " +#~ "incrontra archivi non autenticati, per fornire un periodo di grazia " +#~ "leggermente più lungo per questa modifica che influenza sulla " +#~ "compatibilità all'indietro. Questa eccezione sarà rimossa nei rilasci " +#~ "futuri e si può rinunciare a questo periodo di grazia ipostando l'opzione " +#~ "di configurazione <option>Binary::apt-get::Acquire::" +#~ "AllowInsecureRepositories</option> a <literal>false</literal> o <option>--" +#~ "no-allow-insecure-repositories</option> nella riga di comando." + +#~ msgid "Archive Configuration" +#~ msgstr "Configurazione dell'archivio" + #~ msgid "dpkg trigger usage (and related options)" #~ msgstr "Uso dei trigger di dpkg (e relative opzioni)" diff --git a/doc/po/ja.po b/doc/po/ja.po index 05b1e2dcb..07f66a33e 100644 --- a/doc/po/ja.po +++ b/doc/po/ja.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: apt-doc 1.4\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-06-01 10:51+0200\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2017-01-06 04:50+0900\n" "Last-Translator: Takuma Yamada <tyamada@takumayamada.com>\n" "Language-Team: Japanese <debian-japanese@lists.debian.org>\n" @@ -1948,6 +1948,28 @@ msgstr "" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt-get.8.xml msgid "" +"Allow the update command to continue downloading data from a repository " +"which changed its information of the release contained in the repository " +"indicating e.g a new major release. APT will fail at the update command for " +"such repositories until the change is confirmed to ensure the user is " +"prepared for the change. See also &apt-secure; for details on the concept " +"and configuration." +msgstr "" + +#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> +#: apt-get.8.xml +msgid "" +"Specialist options (<literal>--allow-releaseinfo-changes-</" +"literal><replaceable>field</replaceable>) exist to allow changes only for " +"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>." +msgstr "" + +#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> +#: apt-get.8.xml +msgid "" "Show user friendly progress information in the terminal window when packages " "are installed, upgraded or removed. For a machine parsable version of this " "data see README.progress-reporting in the apt doc directory. Configuration " @@ -3049,13 +3071,24 @@ msgstr "APT アーカイブèªè¨¼ã‚µãƒãƒ¼ãƒˆ" #. type: Content of: <refentry><refsect1><para> #: apt-secure.8.xml +#, fuzzy +#| msgid "" +#| "Starting with version 0.6, <command>APT</command> contains code that does " +#| "signature checking of the Release file for all repositories. This ensures " +#| "that data like packages in the archive can't be modified by people who " +#| "have no access to the Release file signing key. Starting with version 1.1 " +#| "<command>APT</command> requires repositories to provide recent " +#| "authentication information for unimpeded usage of the repository." msgid "" "Starting with version 0.6, <command>APT</command> contains code that does " "signature checking of the Release file for all repositories. This ensures " "that data like packages in the archive can't be modified by people who have " "no access to the Release file signing key. Starting with version 1.1 " "<command>APT</command> requires repositories to provide recent " -"authentication information for unimpeded usage of the repository." +"authentication information for unimpeded usage of the repository. Since " +"version 1.5 changes in the information contained in the Release file about " +"the repository need to be confirmed before APT continues to apply updates " +"from this repository." msgstr "" "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 0.6 よりã€<command>APT</command> ã¯å…¨ãƒªãƒã‚¸ãƒˆãƒªã«å¯¾ã™ã‚‹ Release " "ファイルã®ç½²åãƒã‚§ãƒƒã‚¯ã‚³ãƒ¼ãƒ‰ã‚’åŽéŒ²ã—ã¦ã„ã¾ã™ã€‚ã“ã‚Œã«ã‚ˆã‚Šã€ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã®ãƒ‘ッ" @@ -3067,6 +3100,25 @@ msgstr "" #. type: Content of: <refentry><refsect1><para> #: apt-secure.8.xml msgid "" +"Note: All APT-based package management front-ends like &apt-get;, &aptitude; " +"and &synaptic; support this authentication feature, so this manpage uses " +"<literal>APT</literal> to refer to them all for simplicity only." +msgstr "" +"注æ„: &apt-get;ã€&aptitude;ã€&synaptic; ã¨ã„ã£ãŸ APT ベースã®ãƒ‘ッケージ管ç†ãƒ•" +"ãƒãƒ³ãƒˆã‚¨ãƒ³ãƒ‰ã¯å…¨ã¦ã“ã®æ–°ã—ã„証明機能をサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚ã“ã® man ページã§ã¯" +"å˜ç´”化ã™ã‚‹ãŸã‚ã ã‘ã«ã€ãã®å…¨ã¦ã‚’å‚ç…§ã™ã‚‹ã®ã« <literal>APT</literal> を使ã£ã¦" +"ã„ã¾ã™ã€‚" + +#. type: Content of: <refentry><refsect1><title> +#: apt-secure.8.xml +#, fuzzy +#| msgid "Trusted Repositories" +msgid "Unsigned Repositories" +msgstr "ä¿¡é ¼æ¸ˆãƒªãƒã‚¸ãƒˆãƒª" + +#. type: Content of: <refentry><refsect1><para> +#: apt-secure.8.xml +msgid "" "If an archive has an unsigned Release file or no Release file at all current " "APT versions will refuse to download data from them by default in " "<command>update</command> operations and even if forced to download front-" @@ -3083,25 +3135,6 @@ msgstr "" #. type: Content of: <refentry><refsect1><para> #: apt-secure.8.xml msgid "" -"As a temporary exception &apt-get; (not &apt;!) raises warnings only if it " -"encounters unauthenticated archives to give a slightly longer grace period " -"on this backward compatibility effecting change. This exception will be " -"removed in future releases and you can opt-out of this grace period by " -"setting the configuration option <option>Binary::apt-get::Acquire::" -"AllowInsecureRepositories</option> to <literal>false</literal> or <option>--" -"no-allow-insecure-repositories</option> on the command line." -msgstr "" -"一時的ãªä¾‹å¤–ã¨ã—㦠&apt-get; (not &apt;!) ã¯ã“ã®å¾Œæ–¹äº’æ›æ€§ã«å½±éŸ¿ã®ã‚る変更ã«" -"対応ã™ã‚‹ãŸã‚ã®å°‘ã—ã°ã‹ã‚Šé•·ã„猶予期間ã¨ã—ã¦ã€è¨¼æ˜Žã•ã‚Œã¦ã„ãªã„アーカイブã«ã¤ã„" -"ã¦ã®ã¿è¦å‘Šã—ã¾ã™ã€‚ã“ã®ä¾‹å¤–ã¯å°†æ¥ã®ãƒªãƒªãƒ¼ã‚¹ã§ã¯å‰Šé™¤ã•ã‚Œã€è¨å®šã‚ªãƒ—ション " -"<option>Binary::apt-get::Acquire::AllowInsecureRepositories</option> ã« " -"<literal>false</literal> ã‚’è¨å®šã™ã‚‹ã‹ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§ <option>--no-allow-" -"insecure-repositories</option> を指定ã™ã‚‹ã“ã¨ã§ã“ã®çŒ¶äºˆæœŸé–“を無効化ã™ã‚‹ã“ã¨ã‚‚" -"ã§ãã¾ã™ã€‚" - -#. type: Content of: <refentry><refsect1><para> -#: apt-secure.8.xml -msgid "" "You can force all APT clients to raise only warnings by setting the " "configuration option <option>Acquire::AllowInsecureRepositories</option> to " "<literal>true</literal>. Individual repositories can also be allowed to be " @@ -3141,21 +3174,11 @@ msgstr "" "<literal>allow-downgrade-to-insecure=yes</literal> を個々ã®ãƒªãƒã‚¸ãƒˆãƒªã«è¨å®šã™" "ã‚‹ã“ã¨ã§ã“ã®ã‚¨ãƒ©ãƒ¼ã‚’無視ã•ã›ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" -#. type: Content of: <refentry><refsect1><para> -#: apt-secure.8.xml -msgid "" -"Note: All APT-based package management front-ends like &apt-get;, &aptitude; " -"and &synaptic; support this authentication feature, so this manpage uses " -"<literal>APT</literal> to refer to them all for simplicity only." -msgstr "" -"注æ„: &apt-get;ã€&aptitude;ã€&synaptic; ã¨ã„ã£ãŸ APT ベースã®ãƒ‘ッケージ管ç†ãƒ•" -"ãƒãƒ³ãƒˆã‚¨ãƒ³ãƒ‰ã¯å…¨ã¦ã“ã®æ–°ã—ã„証明機能をサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚ã“ã® man ページã§ã¯" -"å˜ç´”化ã™ã‚‹ãŸã‚ã ã‘ã«ã€ãã®å…¨ã¦ã‚’å‚ç…§ã™ã‚‹ã®ã« <literal>APT</literal> を使ã£ã¦" -"ã„ã¾ã™ã€‚" - #. type: Content of: <refentry><refsect1><title> #: apt-secure.8.xml -msgid "Trusted Repositories" +#, fuzzy +#| msgid "Trusted Repositories" +msgid "Signed Repositories" msgstr "ä¿¡é ¼æ¸ˆãƒªãƒã‚¸ãƒˆãƒª" #. type: Content of: <refentry><refsect1><para> @@ -3289,6 +3312,30 @@ msgstr "" #. type: Content of: <refentry><refsect1><title> #: apt-secure.8.xml +msgid "Information changes" +msgstr "" + +#. type: Content of: <refentry><refsect1><para> +#: apt-secure.8.xml +msgid "" +"A Release file contains beside the checksums for the files in the repository " +"also general information about the repository like the origin, codename or " +"version number of the release." +msgstr "" + +#. type: Content of: <refentry><refsect1><para> +#: apt-secure.8.xml +msgid "" +"This information is shown in various places so a repository owner should " +"always ensure correctness. Further more user configuration like &apt-" +"preferences; can depend and make use of this information. Since version 1.5 " +"the user must therefore explicitly confirm changes to signal that the user " +"is sufficiently prepared e.g. for the new major release of the distribution " +"shipped in the repository (as e.g. indicated by the codename)." +msgstr "" + +#. type: Content of: <refentry><refsect1><title> +#: apt-secure.8.xml msgid "User Configuration" msgstr "ユーザè¨å®š" @@ -3337,8 +3384,10 @@ msgstr "" #. type: Content of: <refentry><refsect1><title> #: apt-secure.8.xml -msgid "Archive Configuration" -msgstr "アーカイブè¨å®š" +#, fuzzy +#| msgid "User Configuration" +msgid "Repository Configuration" +msgstr "ユーザè¨å®š" #. type: Content of: <refentry><refsect1><para> #: apt-secure.8.xml @@ -4379,6 +4428,14 @@ msgstr "" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt.conf.5.xml msgid "" +"Allow use of the internal TLS support in the http method. If set to false, " +"this completely disables support for TLS in apt's own methods (excluding the " +"curl-based https method). No TLS-related functions will be called anymore." +msgstr "" + +#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> +#: apt.conf.5.xml +msgid "" "Try to download deltas called <literal>PDiffs</literal> for indexes (like " "<filename>Packages</filename> files) instead of downloading whole ones. True " "by default. Preferably, this can be set for specific &sources-list; entries " @@ -10824,3 +10881,23 @@ msgstr " # apt-get -o dir::cache::archives=\"/disc/\" dist-upgrade\n" #: offline.dbk msgid "Which will use the already fetched archives on the disc." msgstr "ã“ã‚Œã§ã€ãƒ‡ã‚£ã‚¹ã‚¯ã«ã‚ã‚‹å–得済ã¿ã®ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–を使用ã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" + +#~ msgid "" +#~ "As a temporary exception &apt-get; (not &apt;!) raises warnings only if " +#~ "it encounters unauthenticated archives to give a slightly longer grace " +#~ "period on this backward compatibility effecting change. This exception " +#~ "will be removed in future releases and you can opt-out of this grace " +#~ "period by setting the configuration option <option>Binary::apt-get::" +#~ "Acquire::AllowInsecureRepositories</option> to <literal>false</literal> " +#~ "or <option>--no-allow-insecure-repositories</option> on the command line." +#~ msgstr "" +#~ "一時的ãªä¾‹å¤–ã¨ã—㦠&apt-get; (not &apt;!) ã¯ã“ã®å¾Œæ–¹äº’æ›æ€§ã«å½±éŸ¿ã®ã‚る変更" +#~ "ã«å¯¾å¿œã™ã‚‹ãŸã‚ã®å°‘ã—ã°ã‹ã‚Šé•·ã„猶予期間ã¨ã—ã¦ã€è¨¼æ˜Žã•ã‚Œã¦ã„ãªã„アーカイブã«" +#~ "ã¤ã„ã¦ã®ã¿è¦å‘Šã—ã¾ã™ã€‚ã“ã®ä¾‹å¤–ã¯å°†æ¥ã®ãƒªãƒªãƒ¼ã‚¹ã§ã¯å‰Šé™¤ã•ã‚Œã€è¨å®šã‚ªãƒ—ショ" +#~ "ン <option>Binary::apt-get::Acquire::AllowInsecureRepositories</option> " +#~ "ã« <literal>false</literal> ã‚’è¨å®šã™ã‚‹ã‹ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§ <option>--no-" +#~ "allow-insecure-repositories</option> を指定ã™ã‚‹ã“ã¨ã§ã“ã®çŒ¶äºˆæœŸé–“を無効化" +#~ "ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" + +#~ msgid "Archive Configuration" +#~ msgstr "アーカイブè¨å®š" diff --git a/doc/po/nl.po b/doc/po/nl.po index fead991a3..2da4013bd 100644 --- a/doc/po/nl.po +++ b/doc/po/nl.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: apt-doc 1.4~beta4-nl\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-06-01 10:51+0200\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2017-01-19 17:53+0100\n" "Last-Translator: Frans Spiesschaert <Frans.Spiesschaert@yucom.be>\n" "Language-Team: Debian Dutch l10n Team <debian-l10n-dutch@lists.debian.org>\n" @@ -2047,6 +2047,28 @@ msgstr "" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt-get.8.xml msgid "" +"Allow the update command to continue downloading data from a repository " +"which changed its information of the release contained in the repository " +"indicating e.g a new major release. APT will fail at the update command for " +"such repositories until the change is confirmed to ensure the user is " +"prepared for the change. See also &apt-secure; for details on the concept " +"and configuration." +msgstr "" + +#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> +#: apt-get.8.xml +msgid "" +"Specialist options (<literal>--allow-releaseinfo-changes-</" +"literal><replaceable>field</replaceable>) exist to allow changes only for " +"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>." +msgstr "" + +#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> +#: apt-get.8.xml +msgid "" "Show user friendly progress information in the terminal window when packages " "are installed, upgraded or removed. For a machine parsable version of this " "data see README.progress-reporting in the apt doc directory. Configuration " @@ -3210,13 +3232,24 @@ msgstr "Ondersteuning in APT voor de authenticatie van archieven" #. type: Content of: <refentry><refsect1><para> #: apt-secure.8.xml +#, fuzzy +#| msgid "" +#| "Starting with version 0.6, <command>APT</command> contains code that does " +#| "signature checking of the Release file for all repositories. This ensures " +#| "that data like packages in the archive can't be modified by people who " +#| "have no access to the Release file signing key. Starting with version 1.1 " +#| "<command>APT</command> requires repositories to provide recent " +#| "authentication information for unimpeded usage of the repository." msgid "" "Starting with version 0.6, <command>APT</command> contains code that does " "signature checking of the Release file for all repositories. This ensures " "that data like packages in the archive can't be modified by people who have " "no access to the Release file signing key. Starting with version 1.1 " "<command>APT</command> requires repositories to provide recent " -"authentication information for unimpeded usage of the repository." +"authentication information for unimpeded usage of the repository. Since " +"version 1.5 changes in the information contained in the Release file about " +"the repository need to be confirmed before APT continues to apply updates " +"from this repository." msgstr "" "Met ingang van versie 0.6 bevat <command>APT</command> code die voor alle " "pakketbronnen de ondertekening controleert van het bestand Release. Dit " @@ -3229,6 +3262,26 @@ msgstr "" #. type: Content of: <refentry><refsect1><para> #: apt-secure.8.xml msgid "" +"Note: All APT-based package management front-ends like &apt-get;, &aptitude; " +"and &synaptic; support this authentication feature, so this manpage uses " +"<literal>APT</literal> to refer to them all for simplicity only." +msgstr "" +"Opmerking: Alle op APT gebaseerde front-ends voor pakketbeheer, zoals &apt-" +"get;, &aptitude; en &synaptic;, ondersteunen deze " +"authenticatiefunctionaliteit. Het is enkel om het eenvoudig te houden dat " +"deze man-pagina van <literal>APT</literal> gebruikt wordt om die " +"functionaliteit aan ze allemaal toe te schrijven." + +#. type: Content of: <refentry><refsect1><title> +#: apt-secure.8.xml +#, fuzzy +#| msgid "Trusted Repositories" +msgid "Unsigned Repositories" +msgstr "Betrouwbare pakketarchieven" + +#. type: Content of: <refentry><refsect1><para> +#: apt-secure.8.xml +msgid "" "If an archive has an unsigned Release file or no Release file at all current " "APT versions will refuse to download data from them by default in " "<command>update</command> operations and even if forced to download front-" @@ -3246,27 +3299,6 @@ msgstr "" #. type: Content of: <refentry><refsect1><para> #: apt-secure.8.xml msgid "" -"As a temporary exception &apt-get; (not &apt;!) raises warnings only if it " -"encounters unauthenticated archives to give a slightly longer grace period " -"on this backward compatibility effecting change. This exception will be " -"removed in future releases and you can opt-out of this grace period by " -"setting the configuration option <option>Binary::apt-get::Acquire::" -"AllowInsecureRepositories</option> to <literal>false</literal> or <option>--" -"no-allow-insecure-repositories</option> on the command line." -msgstr "" -"Bij wijze van tijdelijke uitzondering geeft &apt-get; (niet &apt;!) enkel " -"waarschuwingen als het niet-geauthenticeerde archieven tegenkomt om zo deze " -"wijziging die de compatibiliteit aantast, enigszins langer uit te stellen. " -"Deze uitzondering zal uit toekomstige uitgaven verwijderd worden en u kunt " -"nu reeds kiezen om geen gebruik te maken van dit uitstel door de " -"configuratie-optie <option>Binary::apt-get::Acquire::" -"AllowInsecureRepositories</option> op <literal>false</literal> in te stellen " -"of door aan de commandoregel de optie <option>--no-allow-insecure-" -"repositories</option> te gebruiken." - -#. type: Content of: <refentry><refsect1><para> -#: apt-secure.8.xml -msgid "" "You can force all APT clients to raise only warnings by setting the " "configuration option <option>Acquire::AllowInsecureRepositories</option> to " "<literal>true</literal>. Individual repositories can also be allowed to be " @@ -3308,22 +3340,11 @@ msgstr "" "te stellen of voor individuele pakketbronnen door de optie <literal>allow-" "downgrade-to-insecure=yes</literal> te gebruiken in &sources-list;." -#. type: Content of: <refentry><refsect1><para> -#: apt-secure.8.xml -msgid "" -"Note: All APT-based package management front-ends like &apt-get;, &aptitude; " -"and &synaptic; support this authentication feature, so this manpage uses " -"<literal>APT</literal> to refer to them all for simplicity only." -msgstr "" -"Opmerking: Alle op APT gebaseerde front-ends voor pakketbeheer, zoals &apt-" -"get;, &aptitude; en &synaptic;, ondersteunen deze " -"authenticatiefunctionaliteit. Het is enkel om het eenvoudig te houden dat " -"deze man-pagina van <literal>APT</literal> gebruikt wordt om die " -"functionaliteit aan ze allemaal toe te schrijven." - #. type: Content of: <refentry><refsect1><title> #: apt-secure.8.xml -msgid "Trusted Repositories" +#, fuzzy +#| msgid "Trusted Repositories" +msgid "Signed Repositories" msgstr "Betrouwbare pakketarchieven" #. type: Content of: <refentry><refsect1><para> @@ -3468,6 +3489,30 @@ msgstr "" #. type: Content of: <refentry><refsect1><title> #: apt-secure.8.xml +msgid "Information changes" +msgstr "" + +#. type: Content of: <refentry><refsect1><para> +#: apt-secure.8.xml +msgid "" +"A Release file contains beside the checksums for the files in the repository " +"also general information about the repository like the origin, codename or " +"version number of the release." +msgstr "" + +#. type: Content of: <refentry><refsect1><para> +#: apt-secure.8.xml +msgid "" +"This information is shown in various places so a repository owner should " +"always ensure correctness. Further more user configuration like &apt-" +"preferences; can depend and make use of this information. Since version 1.5 " +"the user must therefore explicitly confirm changes to signal that the user " +"is sufficiently prepared e.g. for the new major release of the distribution " +"shipped in the repository (as e.g. indicated by the codename)." +msgstr "" + +#. type: Content of: <refentry><refsect1><title> +#: apt-secure.8.xml msgid "User Configuration" msgstr "Configuratie op gebruikersniveau" @@ -3519,8 +3564,10 @@ msgstr "" #. type: Content of: <refentry><refsect1><title> #: apt-secure.8.xml -msgid "Archive Configuration" -msgstr "Configuratie op archiefniveau" +#, fuzzy +#| msgid "User Configuration" +msgid "Repository Configuration" +msgstr "Configuratie op gebruikersniveau" #. type: Content of: <refentry><refsect1><para> #: apt-secure.8.xml @@ -4638,6 +4685,14 @@ msgstr "" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt.conf.5.xml msgid "" +"Allow use of the internal TLS support in the http method. If set to false, " +"this completely disables support for TLS in apt's own methods (excluding the " +"curl-based https method). No TLS-related functions will be called anymore." +msgstr "" + +#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> +#: apt.conf.5.xml +msgid "" "Try to download deltas called <literal>PDiffs</literal> for indexes (like " "<filename>Packages</filename> files) instead of downloading whole ones. True " "by default. Preferably, this can be set for specific &sources-list; entries " @@ -11508,6 +11563,28 @@ msgid "Which will use the already fetched archives on the disc." msgstr "" "En dit zal gebruik maken van de reeds opgehaalde archieven op de schijf." +#~ msgid "" +#~ "As a temporary exception &apt-get; (not &apt;!) raises warnings only if " +#~ "it encounters unauthenticated archives to give a slightly longer grace " +#~ "period on this backward compatibility effecting change. This exception " +#~ "will be removed in future releases and you can opt-out of this grace " +#~ "period by setting the configuration option <option>Binary::apt-get::" +#~ "Acquire::AllowInsecureRepositories</option> to <literal>false</literal> " +#~ "or <option>--no-allow-insecure-repositories</option> on the command line." +#~ msgstr "" +#~ "Bij wijze van tijdelijke uitzondering geeft &apt-get; (niet &apt;!) enkel " +#~ "waarschuwingen als het niet-geauthenticeerde archieven tegenkomt om zo " +#~ "deze wijziging die de compatibiliteit aantast, enigszins langer uit te " +#~ "stellen. Deze uitzondering zal uit toekomstige uitgaven verwijderd worden " +#~ "en u kunt nu reeds kiezen om geen gebruik te maken van dit uitstel door " +#~ "de configuratie-optie <option>Binary::apt-get::Acquire::" +#~ "AllowInsecureRepositories</option> op <literal>false</literal> in te " +#~ "stellen of door aan de commandoregel de optie <option>--no-allow-insecure-" +#~ "repositories</option> te gebruiken." + +#~ msgid "Archive Configuration" +#~ msgstr "Configuratie op archiefniveau" + #~ msgid "dpkg trigger usage (and related options)" #~ msgstr "het gebruik van triggers door dpkg (en gerelateerde opties)" diff --git a/doc/po/pl.po b/doc/po/pl.po index d588fa8ec..03e9f380e 100644 --- a/doc/po/pl.po +++ b/doc/po/pl.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: apt-doc 1.0.5\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-06-01 10:51+0200\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2014-07-04 02:13+0200\n" "Last-Translator: Robert Luberda <robert@debian.org>\n" "Language-Team: Polish <manpages-pl-list@lists.sourceforge.net>\n" @@ -2062,6 +2062,28 @@ msgstr "" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt-get.8.xml msgid "" +"Allow the update command to continue downloading data from a repository " +"which changed its information of the release contained in the repository " +"indicating e.g a new major release. APT will fail at the update command for " +"such repositories until the change is confirmed to ensure the user is " +"prepared for the change. See also &apt-secure; for details on the concept " +"and configuration." +msgstr "" + +#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> +#: apt-get.8.xml +msgid "" +"Specialist options (<literal>--allow-releaseinfo-changes-</" +"literal><replaceable>field</replaceable>) exist to allow changes only for " +"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>." +msgstr "" + +#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> +#: apt-get.8.xml +msgid "" "Show user friendly progress information in the terminal window when packages " "are installed, upgraded or removed. For a machine parsable version of this " "data see README.progress-reporting in the apt doc directory. Configuration " @@ -3227,7 +3249,10 @@ msgid "" "that data like packages in the archive can't be modified by people who have " "no access to the Release file signing key. Starting with version 1.1 " "<command>APT</command> requires repositories to provide recent " -"authentication information for unimpeded usage of the repository." +"authentication information for unimpeded usage of the repository. Since " +"version 1.5 changes in the information contained in the Release file about " +"the repository need to be confirmed before APT continues to apply updates " +"from this repository." msgstr "" "PoczÄ…wszy od wersji 0.6 <command>apt</command> zawiera kod sprawdzajÄ…cy " "sygnatury plików \"Release\" wszystkich archiwów. Zapewnia to, że pakiety w " @@ -3236,24 +3261,33 @@ msgstr "" #. type: Content of: <refentry><refsect1><para> #: apt-secure.8.xml +#, fuzzy +#| msgid "" +#| "The package front-ends &apt-get;, &aptitude; and &synaptic; support this " +#| "new authentication feature." msgid "" -"If an archive has an unsigned Release file or no Release file at all current " -"APT versions will refuse to download data from them by default in " -"<command>update</command> operations and even if forced to download front-" -"ends like &apt-get; will require explicit confirmation if an installation " -"request includes a package from such an unauthenticated archive." +"Note: All APT-based package management front-ends like &apt-get;, &aptitude; " +"and &synaptic; support this authentication feature, so this manpage uses " +"<literal>APT</literal> to refer to them all for simplicity only." msgstr "" +"NakÅ‚adki na APT typu &apt-get;, &aptitude; i &synaptic; obsÅ‚ugujÄ… ten nowy " +"sposób autoryzacji pakietów." + +#. type: Content of: <refentry><refsect1><title> +#: apt-secure.8.xml +#, fuzzy +#| msgid "Trusted archives" +msgid "Unsigned Repositories" +msgstr "Zaufane archiwa" #. type: Content of: <refentry><refsect1><para> #: apt-secure.8.xml msgid "" -"As a temporary exception &apt-get; (not &apt;!) raises warnings only if it " -"encounters unauthenticated archives to give a slightly longer grace period " -"on this backward compatibility effecting change. This exception will be " -"removed in future releases and you can opt-out of this grace period by " -"setting the configuration option <option>Binary::apt-get::Acquire::" -"AllowInsecureRepositories</option> to <literal>false</literal> or <option>--" -"no-allow-insecure-repositories</option> on the command line." +"If an archive has an unsigned Release file or no Release file at all current " +"APT versions will refuse to download data from them by default in " +"<command>update</command> operations and even if forced to download front-" +"ends like &apt-get; will require explicit confirmation if an installation " +"request includes a package from such an unauthenticated archive." msgstr "" #. type: Content of: <refentry><refsect1><para> @@ -3282,25 +3316,11 @@ msgid "" "list; option <literal>allow-downgrade-to-insecure=yes</literal>." msgstr "" -#. type: Content of: <refentry><refsect1><para> -#: apt-secure.8.xml -#, fuzzy -#| msgid "" -#| "The package front-ends &apt-get;, &aptitude; and &synaptic; support this " -#| "new authentication feature." -msgid "" -"Note: All APT-based package management front-ends like &apt-get;, &aptitude; " -"and &synaptic; support this authentication feature, so this manpage uses " -"<literal>APT</literal> to refer to them all for simplicity only." -msgstr "" -"NakÅ‚adki na APT typu &apt-get;, &aptitude; i &synaptic; obsÅ‚ugujÄ… ten nowy " -"sposób autoryzacji pakietów." - #. type: Content of: <refentry><refsect1><title> #: apt-secure.8.xml #, fuzzy #| msgid "Trusted archives" -msgid "Trusted Repositories" +msgid "Signed Repositories" msgstr "Zaufane archiwa" #. type: Content of: <refentry><refsect1><para> @@ -3461,6 +3481,30 @@ msgstr "" #. type: Content of: <refentry><refsect1><title> #: apt-secure.8.xml +msgid "Information changes" +msgstr "" + +#. type: Content of: <refentry><refsect1><para> +#: apt-secure.8.xml +msgid "" +"A Release file contains beside the checksums for the files in the repository " +"also general information about the repository like the origin, codename or " +"version number of the release." +msgstr "" + +#. type: Content of: <refentry><refsect1><para> +#: apt-secure.8.xml +msgid "" +"This information is shown in various places so a repository owner should " +"always ensure correctness. Further more user configuration like &apt-" +"preferences; can depend and make use of this information. Since version 1.5 " +"the user must therefore explicitly confirm changes to signal that the user " +"is sufficiently prepared e.g. for the new major release of the distribution " +"shipped in the repository (as e.g. indicated by the codename)." +msgstr "" + +#. type: Content of: <refentry><refsect1><title> +#: apt-secure.8.xml #, fuzzy #| msgid "User configuration" msgid "User Configuration" @@ -3514,9 +3558,9 @@ msgstr "" #. type: Content of: <refentry><refsect1><title> #: apt-secure.8.xml #, fuzzy -#| msgid "Archive configuration" -msgid "Archive Configuration" -msgstr "Konfiguracja archiwum" +#| msgid "User configuration" +msgid "Repository Configuration" +msgstr "Konfiguracja użytkownika" #. type: Content of: <refentry><refsect1><para> #: apt-secure.8.xml @@ -4426,6 +4470,14 @@ msgstr "" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt.conf.5.xml msgid "" +"Allow use of the internal TLS support in the http method. If set to false, " +"this completely disables support for TLS in apt's own methods (excluding the " +"curl-based https method). No TLS-related functions will be called anymore." +msgstr "" + +#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> +#: apt.conf.5.xml +msgid "" "Try to download deltas called <literal>PDiffs</literal> for indexes (like " "<filename>Packages</filename> files) instead of downloading whole ones. True " "by default. Preferably, this can be set for specific &sources-list; entries " @@ -10332,6 +10384,11 @@ msgstr " # apt-get -o dir::cache::archives=\"/disc/\" dist-upgrade\n" msgid "Which will use the already fetched archives on the disc." msgstr "Które użyje pobranych uprzednio archiwów z dysku." +#, fuzzy +#~| msgid "Archive configuration" +#~ msgid "Archive Configuration" +#~ msgstr "Konfiguracja archiwum" + #~ msgid "" #~ "DPkg::NoTriggers \"true\";\n" #~ "PackageManager::Configure \"smart\";\n" diff --git a/doc/po/pt.po b/doc/po/pt.po index 704b02b84..0ea4faabb 100644 --- a/doc/po/pt.po +++ b/doc/po/pt.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: apt-doc 1.0.7\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-06-01 10:51+0200\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2014-08-29 00:34+0100\n" "Last-Translator: Américo Monteiro <a_monteiro@gmx.com>\n" "Language-Team: Portuguese <traduz@debianpt.org>\n" @@ -1996,6 +1996,28 @@ msgstr "" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt-get.8.xml msgid "" +"Allow the update command to continue downloading data from a repository " +"which changed its information of the release contained in the repository " +"indicating e.g a new major release. APT will fail at the update command for " +"such repositories until the change is confirmed to ensure the user is " +"prepared for the change. See also &apt-secure; for details on the concept " +"and configuration." +msgstr "" + +#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> +#: apt-get.8.xml +msgid "" +"Specialist options (<literal>--allow-releaseinfo-changes-</" +"literal><replaceable>field</replaceable>) exist to allow changes only for " +"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>." +msgstr "" + +#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> +#: apt-get.8.xml +msgid "" "Show user friendly progress information in the terminal window when packages " "are installed, upgraded or removed. For a machine parsable version of this " "data see README.progress-reporting in the apt doc directory. Configuration " @@ -3118,7 +3140,10 @@ msgid "" "that data like packages in the archive can't be modified by people who have " "no access to the Release file signing key. Starting with version 1.1 " "<command>APT</command> requires repositories to provide recent " -"authentication information for unimpeded usage of the repository." +"authentication information for unimpeded usage of the repository. Since " +"version 1.5 changes in the information contained in the Release file about " +"the repository need to be confirmed before APT continues to apply updates " +"from this repository." msgstr "" "A partir da versão 0.6, o <command>apt</command> contém código que faz " "verificação de assinaturas do ficheiro Release para todos os arquivos. Isto " @@ -3127,24 +3152,33 @@ msgstr "" #. type: Content of: <refentry><refsect1><para> #: apt-secure.8.xml +#, fuzzy +#| msgid "" +#| "The package front-ends &apt-get;, &aptitude; and &synaptic; support this " +#| "new authentication feature." msgid "" -"If an archive has an unsigned Release file or no Release file at all current " -"APT versions will refuse to download data from them by default in " -"<command>update</command> operations and even if forced to download front-" -"ends like &apt-get; will require explicit confirmation if an installation " -"request includes a package from such an unauthenticated archive." +"Note: All APT-based package management front-ends like &apt-get;, &aptitude; " +"and &synaptic; support this authentication feature, so this manpage uses " +"<literal>APT</literal> to refer to them all for simplicity only." msgstr "" +"Os front-ends de pacotes &apt-get;, &aptitude; e &synaptic; suportam esta " +"nova funcionalidade de autenticação." + +#. type: Content of: <refentry><refsect1><title> +#: apt-secure.8.xml +#, fuzzy +#| msgid "Trusted archives" +msgid "Unsigned Repositories" +msgstr "Arquivos de confiança" #. type: Content of: <refentry><refsect1><para> #: apt-secure.8.xml msgid "" -"As a temporary exception &apt-get; (not &apt;!) raises warnings only if it " -"encounters unauthenticated archives to give a slightly longer grace period " -"on this backward compatibility effecting change. This exception will be " -"removed in future releases and you can opt-out of this grace period by " -"setting the configuration option <option>Binary::apt-get::Acquire::" -"AllowInsecureRepositories</option> to <literal>false</literal> or <option>--" -"no-allow-insecure-repositories</option> on the command line." +"If an archive has an unsigned Release file or no Release file at all current " +"APT versions will refuse to download data from them by default in " +"<command>update</command> operations and even if forced to download front-" +"ends like &apt-get; will require explicit confirmation if an installation " +"request includes a package from such an unauthenticated archive." msgstr "" #. type: Content of: <refentry><refsect1><para> @@ -3173,25 +3207,11 @@ msgid "" "list; option <literal>allow-downgrade-to-insecure=yes</literal>." msgstr "" -#. type: Content of: <refentry><refsect1><para> -#: apt-secure.8.xml -#, fuzzy -#| msgid "" -#| "The package front-ends &apt-get;, &aptitude; and &synaptic; support this " -#| "new authentication feature." -msgid "" -"Note: All APT-based package management front-ends like &apt-get;, &aptitude; " -"and &synaptic; support this authentication feature, so this manpage uses " -"<literal>APT</literal> to refer to them all for simplicity only." -msgstr "" -"Os front-ends de pacotes &apt-get;, &aptitude; e &synaptic; suportam esta " -"nova funcionalidade de autenticação." - #. type: Content of: <refentry><refsect1><title> #: apt-secure.8.xml #, fuzzy #| msgid "Trusted archives" -msgid "Trusted Repositories" +msgid "Signed Repositories" msgstr "Arquivos de confiança" #. type: Content of: <refentry><refsect1><para> @@ -3351,6 +3371,30 @@ msgstr "" #. type: Content of: <refentry><refsect1><title> #: apt-secure.8.xml +msgid "Information changes" +msgstr "" + +#. type: Content of: <refentry><refsect1><para> +#: apt-secure.8.xml +msgid "" +"A Release file contains beside the checksums for the files in the repository " +"also general information about the repository like the origin, codename or " +"version number of the release." +msgstr "" + +#. type: Content of: <refentry><refsect1><para> +#: apt-secure.8.xml +msgid "" +"This information is shown in various places so a repository owner should " +"always ensure correctness. Further more user configuration like &apt-" +"preferences; can depend and make use of this information. Since version 1.5 " +"the user must therefore explicitly confirm changes to signal that the user " +"is sufficiently prepared e.g. for the new major release of the distribution " +"shipped in the repository (as e.g. indicated by the codename)." +msgstr "" + +#. type: Content of: <refentry><refsect1><title> +#: apt-secure.8.xml msgid "User Configuration" msgstr "Configuração do utilizador" @@ -3402,8 +3446,10 @@ msgstr "" #. type: Content of: <refentry><refsect1><title> #: apt-secure.8.xml -msgid "Archive Configuration" -msgstr "Configuração de arquivos" +#, fuzzy +#| msgid "User Configuration" +msgid "Repository Configuration" +msgstr "Configuração do utilizador" #. type: Content of: <refentry><refsect1><para> #: apt-secure.8.xml @@ -4492,6 +4538,14 @@ msgstr "" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt.conf.5.xml +msgid "" +"Allow use of the internal TLS support in the http method. If set to false, " +"this completely disables support for TLS in apt's own methods (excluding the " +"curl-based https method). No TLS-related functions will be called anymore." +msgstr "" + +#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> +#: apt.conf.5.xml #, fuzzy #| msgid "" #| "Try to download deltas called <literal>PDiffs</literal> for indexes (like " @@ -11082,6 +11136,9 @@ msgstr " # apt-get -o dir::cache::archives=\"/disc/\" dist-upgrade\n" msgid "Which will use the already fetched archives on the disc." msgstr "O qual irá usar os arquivos já obtidos e que estão no disco." +#~ msgid "Archive Configuration" +#~ msgstr "Configuração de arquivos" + #~ msgid "dpkg trigger usage (and related options)" #~ msgstr "Utilização trigger do dpkg (e opções relacionadas)" diff --git a/doc/po/pt_BR.po b/doc/po/pt_BR.po index 82ac7ff97..b68a7dc91 100644 --- a/doc/po/pt_BR.po +++ b/doc/po/pt_BR.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: apt-doc 1.0.5\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-06-01 10:51+0200\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2004-09-20 17:02+0000\n" "Last-Translator: André LuÃs Lopes <andrelop@debian.org>\n" "Language-Team: <debian-l10n-portuguese@lists.debian.org>\n" @@ -1388,6 +1388,28 @@ msgstr "" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt-get.8.xml msgid "" +"Allow the update command to continue downloading data from a repository " +"which changed its information of the release contained in the repository " +"indicating e.g a new major release. APT will fail at the update command for " +"such repositories until the change is confirmed to ensure the user is " +"prepared for the change. See also &apt-secure; for details on the concept " +"and configuration." +msgstr "" + +#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> +#: apt-get.8.xml +msgid "" +"Specialist options (<literal>--allow-releaseinfo-changes-</" +"literal><replaceable>field</replaceable>) exist to allow changes only for " +"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>." +msgstr "" + +#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> +#: apt-get.8.xml +msgid "" "Show user friendly progress information in the terminal window when packages " "are installed, upgraded or removed. For a machine parsable version of this " "data see README.progress-reporting in the apt doc directory. Configuration " @@ -2195,29 +2217,33 @@ msgid "" "that data like packages in the archive can't be modified by people who have " "no access to the Release file signing key. Starting with version 1.1 " "<command>APT</command> requires repositories to provide recent " -"authentication information for unimpeded usage of the repository." +"authentication information for unimpeded usage of the repository. Since " +"version 1.5 changes in the information contained in the Release file about " +"the repository need to be confirmed before APT continues to apply updates " +"from this repository." msgstr "" #. type: Content of: <refentry><refsect1><para> #: apt-secure.8.xml msgid "" -"If an archive has an unsigned Release file or no Release file at all current " -"APT versions will refuse to download data from them by default in " -"<command>update</command> operations and even if forced to download front-" -"ends like &apt-get; will require explicit confirmation if an installation " -"request includes a package from such an unauthenticated archive." +"Note: All APT-based package management front-ends like &apt-get;, &aptitude; " +"and &synaptic; support this authentication feature, so this manpage uses " +"<literal>APT</literal> to refer to them all for simplicity only." +msgstr "" + +#. type: Content of: <refentry><refsect1><title> +#: apt-secure.8.xml +msgid "Unsigned Repositories" msgstr "" #. type: Content of: <refentry><refsect1><para> #: apt-secure.8.xml msgid "" -"As a temporary exception &apt-get; (not &apt;!) raises warnings only if it " -"encounters unauthenticated archives to give a slightly longer grace period " -"on this backward compatibility effecting change. This exception will be " -"removed in future releases and you can opt-out of this grace period by " -"setting the configuration option <option>Binary::apt-get::Acquire::" -"AllowInsecureRepositories</option> to <literal>false</literal> or <option>--" -"no-allow-insecure-repositories</option> on the command line." +"If an archive has an unsigned Release file or no Release file at all current " +"APT versions will refuse to download data from them by default in " +"<command>update</command> operations and even if forced to download front-" +"ends like &apt-get; will require explicit confirmation if an installation " +"request includes a package from such an unauthenticated archive." msgstr "" #. type: Content of: <refentry><refsect1><para> @@ -2246,17 +2272,9 @@ msgid "" "list; option <literal>allow-downgrade-to-insecure=yes</literal>." msgstr "" -#. type: Content of: <refentry><refsect1><para> -#: apt-secure.8.xml -msgid "" -"Note: All APT-based package management front-ends like &apt-get;, &aptitude; " -"and &synaptic; support this authentication feature, so this manpage uses " -"<literal>APT</literal> to refer to them all for simplicity only." -msgstr "" - #. type: Content of: <refentry><refsect1><title> #: apt-secure.8.xml -msgid "Trusted Repositories" +msgid "Signed Repositories" msgstr "" #. type: Content of: <refentry><refsect1><para> @@ -2349,6 +2367,30 @@ msgstr "" #. type: Content of: <refentry><refsect1><title> #: apt-secure.8.xml +msgid "Information changes" +msgstr "" + +#. type: Content of: <refentry><refsect1><para> +#: apt-secure.8.xml +msgid "" +"A Release file contains beside the checksums for the files in the repository " +"also general information about the repository like the origin, codename or " +"version number of the release." +msgstr "" + +#. type: Content of: <refentry><refsect1><para> +#: apt-secure.8.xml +msgid "" +"This information is shown in various places so a repository owner should " +"always ensure correctness. Further more user configuration like &apt-" +"preferences; can depend and make use of this information. Since version 1.5 " +"the user must therefore explicitly confirm changes to signal that the user " +"is sufficiently prepared e.g. for the new major release of the distribution " +"shipped in the repository (as e.g. indicated by the codename)." +msgstr "" + +#. type: Content of: <refentry><refsect1><title> +#: apt-secure.8.xml msgid "User Configuration" msgstr "" @@ -2383,7 +2425,7 @@ msgstr "" #. type: Content of: <refentry><refsect1><title> #: apt-secure.8.xml -msgid "Archive Configuration" +msgid "Repository Configuration" msgstr "" #. type: Content of: <refentry><refsect1><para> @@ -3134,6 +3176,14 @@ msgstr "" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt.conf.5.xml msgid "" +"Allow use of the internal TLS support in the http method. If set to false, " +"this completely disables support for TLS in apt's own methods (excluding the " +"curl-based https method). No TLS-related functions will be called anymore." +msgstr "" + +#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> +#: apt.conf.5.xml +msgid "" "Try to download deltas called <literal>PDiffs</literal> for indexes (like " "<filename>Packages</filename> files) instead of downloading whole ones. True " "by default. Preferably, this can be set for specific &sources-list; entries " diff --git a/ftparchive/apt-ftparchive.cc b/ftparchive/apt-ftparchive.cc index ab6f48d61..196a0668c 100644 --- a/ftparchive/apt-ftparchive.cc +++ b/ftparchive/apt-ftparchive.cc @@ -12,33 +12,33 @@ // Include Files /*{{{*/ #include <config.h> -#include <apt-pkg/error.h> -#include <apt-pkg/configuration.h> #include <apt-pkg/cmndline.h> -#include <apt-pkg/strutl.h> -#include <apt-pkg/init.h> +#include <apt-pkg/configuration.h> +#include <apt-pkg/error.h> #include <apt-pkg/fileutl.h> +#include <apt-pkg/init.h> +#include <apt-pkg/strutl.h> #include <apt-private/private-cmndline.h> -#include <apt-private/private-output.h> #include <apt-private/private-main.h> +#include <apt-private/private-output.h> #include <algorithm> #include <climits> -#include <sys/time.h> -#include <locale.h> -#include <stdio.h> -#include <sys/stat.h> -#include <time.h> #include <functional> #include <iostream> #include <string> #include <vector> +#include <locale.h> +#include <stdio.h> +#include <sys/stat.h> +#include <sys/time.h> +#include <time.h> -#include "cachedb.h" -#include "override.h" #include "apt-ftparchive.h" +#include "cachedb.h" #include "multicompress.h" +#include "override.h" #include "writer.h" #include <apti18n.h> @@ -1002,7 +1002,7 @@ static bool Clean(CommandLine &CmdL) stable_sort(PkgList.begin(),PkgList.end(),PackageMap::SrcDBCompare()); string CacheDir = Setup.FindDir("Dir::CacheDir"); - + for (vector<PackageMap>::iterator I = PkgList.begin(); I != PkgList.end(); ) { if(I->BinCacheDB != "") @@ -1016,15 +1016,11 @@ static bool Clean(CommandLine &CmdL) if (DB_SRC.Clean() == false) _error->DumpErrors(); - string CacheDB = I->BinCacheDB; - string SrcCacheDB = I->SrcCacheDB; - while(I != PkgList.end() && - I->BinCacheDB == CacheDB && - I->SrcCacheDB == SrcCacheDB) - ++I; + I = std::find_if(I, PkgList.end(), + [&](PackageMap const &PM) { return PM.BinCacheDB != I->BinCacheDB || PM.SrcCacheDB != I->SrcCacheDB; + }); } - return true; } /*}}}*/ diff --git a/ftparchive/apt-ftparchive.h b/ftparchive/apt-ftparchive.h index 240cf9ba7..b1ce17545 100644 --- a/ftparchive/apt-ftparchive.h +++ b/ftparchive/apt-ftparchive.h @@ -13,7 +13,6 @@ #ifndef APT_FTPARCHIVE_H #define APT_FTPARCHIVE_H - #include <fstream> using std::ostream; diff --git a/ftparchive/byhash.cc b/ftparchive/byhash.cc index 354d089c3..b24f6158e 100644 --- a/ftparchive/byhash.cc +++ b/ftparchive/byhash.cc @@ -11,15 +11,15 @@ // Include Files /*{{{*/ #include <config.h> -#include<algorithm> -#include<string> +#include <algorithm> +#include <string> -#include <unistd.h> #include <sys/stat.h> +#include <unistd.h> +#include "byhash.h" #include <apt-pkg/fileutl.h> #include <apt-pkg/hashes.h> -#include "byhash.h" // Delete all files in a directory except the most recent N ones void DeleteAllButMostRecent(std::string dir, int KeepFiles) diff --git a/ftparchive/cachedb.cc b/ftparchive/cachedb.cc index 868029abd..210ce6dc1 100644 --- a/ftparchive/cachedb.cc +++ b/ftparchive/cachedb.cc @@ -12,22 +12,22 @@ // Include Files /*{{{*/ #include <config.h> +#include <apt-pkg/configuration.h> +#include <apt-pkg/debfile.h> #include <apt-pkg/error.h> +#include <apt-pkg/fileutl.h> +#include <apt-pkg/gpgv.h> +#include <apt-pkg/hashes.h> #include <apt-pkg/md5.h> #include <apt-pkg/sha1.h> #include <apt-pkg/sha2.h> #include <apt-pkg/strutl.h> -#include <apt-pkg/configuration.h> -#include <apt-pkg/fileutl.h> -#include <apt-pkg/debfile.h> -#include <apt-pkg/gpgv.h> -#include <apt-pkg/hashes.h> -#include <netinet/in.h> // htonl, etc #include <ctype.h> +#include <netinet/in.h> // htonl, etc #include <stddef.h> -#include <sys/stat.h> #include <strings.h> +#include <sys/stat.h> #include "cachedb.h" diff --git a/ftparchive/cachedb.h b/ftparchive/cachedb.h index 417c25a9f..117ba5a1b 100644 --- a/ftparchive/cachedb.h +++ b/ftparchive/cachedb.h @@ -12,15 +12,15 @@ #ifndef CACHEDB_H #define CACHEDB_H -#include <apt-pkg/hashes.h> #include <apt-pkg/debfile.h> +#include <apt-pkg/hashes.h> #include <db.h> -#include <errno.h> #include <string> -#include <string.h> +#include <errno.h> #include <stdint.h> #include <stdio.h> +#include <string.h> #include "contents.h" #include "sources.h" diff --git a/ftparchive/contents.h b/ftparchive/contents.h index bc691d473..8691b0e87 100644 --- a/ftparchive/contents.h +++ b/ftparchive/contents.h @@ -12,9 +12,9 @@ #include <apt-pkg/dirstream.h> +#include <string> #include <stddef.h> #include <stdio.h> -#include <string> class debDebFile; class FileFd; diff --git a/ftparchive/multicompress.cc b/ftparchive/multicompress.cc index 3ffc5266e..abb8c5906 100644 --- a/ftparchive/multicompress.cc +++ b/ftparchive/multicompress.cc @@ -16,26 +16,43 @@ // Include Files /*{{{*/ #include <config.h> -#include <apt-pkg/fileutl.h> -#include <apt-pkg/strutl.h> -#include <apt-pkg/error.h> -#include <apt-pkg/md5.h> #include <apt-pkg/aptconfiguration.h> +#include <apt-pkg/error.h> +#include <apt-pkg/fileutl.h> #include <apt-pkg/hashsum_template.h> +#include <apt-pkg/md5.h> +#include <apt-pkg/strutl.h> #include <ctype.h> -#include <vector> -#include <sys/types.h> #include <sys/stat.h> #include <sys/time.h> +#include <sys/types.h> #include <unistd.h> +#include <algorithm> +#include <vector> + #include "multicompress.h" #include <apti18n.h> /*}}}*/ using namespace std; +static std::vector<APT::Configuration::Compressor>::const_iterator findMatchingCompressor(std::string::const_iterator &I, + std::string::const_iterator const &End, std::vector<APT::Configuration::Compressor> const &Compressors) +{ + // Grab a word (aka: a compressor name) + for (; I != End && isspace(*I); ++I); + string::const_iterator Start = I; + for (; I != End && !isspace(*I); ++I); + + auto const Comp = std::find_if(Compressors.begin(), Compressors.end(), + [&](APT::Configuration::Compressor const &C) { return stringcmp(Start, I, C.Name.c_str()) == 0; + }); + if (Comp == Compressors.end()) + _error->Warning(_("Unknown compression algorithm '%s'"),string(Start,I).c_str()); + return Comp; +} // MultiCompress::MultiCompress - Constructor /*{{{*/ // --------------------------------------------------------------------- @@ -48,38 +65,21 @@ MultiCompress::MultiCompress(string const &Output,string const &Compress, Outputter = -1; UpdateMTime = 0; - /* Parse the compression string, a space separated lists of compresison - types */ - string::const_iterator I = Compress.begin(); - for (; I != Compress.end();) + auto const Compressors = APT::Configuration::getCompressors(); + // Parse the compression string, a space separated lists of compression types + for (auto I = Compress.cbegin(); I != Compress.cend();) { - for (; I != Compress.end() && isspace(*I); ++I); - - // Grab a word - string::const_iterator Start = I; - for (; I != Compress.end() && !isspace(*I); ++I); - - // Find the matching compressor - std::vector<APT::Configuration::Compressor> Compressors = APT::Configuration::getCompressors(); - std::vector<APT::Configuration::Compressor>::const_iterator Comp = Compressors.begin(); - for (; Comp != Compressors.end(); ++Comp) - if (stringcmp(Start,I,Comp->Name.c_str()) == 0) - break; - - // Hmm.. unknown. + auto const Comp = findMatchingCompressor(I, Compress.cend(), Compressors); if (Comp == Compressors.end()) - { - _error->Warning(_("Unknown compression algorithm '%s'"),string(Start,I).c_str()); continue; - } - - // Create and link in a new output + + // Create and link in a new output Files *NewOut = new Files; NewOut->Next = Outputs; Outputs = NewOut; NewOut->CompressProg = *Comp; - NewOut->Output = Output+Comp->Extension; - + NewOut->Output = Output + Comp->Extension; + struct stat St; if (stat(NewOut->Output.c_str(),&St) == 0) NewOut->OldMTime = St.st_mtime; @@ -128,34 +128,21 @@ MultiCompress::~MultiCompress() one or more of the files is missing. */ bool MultiCompress::GetStat(string const &Output,string const &Compress,struct stat &St) { - /* Parse the compression string, a space separated lists of compresison - types */ - string::const_iterator I = Compress.begin(); + auto const Compressors = APT::Configuration::getCompressors(); + + // Parse the compression string, a space separated lists of compression types bool DidStat = false; - for (; I != Compress.end();) + for (auto I = Compress.cbegin(); I != Compress.cend();) { - for (; I != Compress.end() && isspace(*I); ++I); - - // Grab a word - string::const_iterator Start = I; - for (; I != Compress.end() && !isspace(*I); ++I); - - // Find the matching compressor - std::vector<APT::Configuration::Compressor> Compressors = APT::Configuration::getCompressors(); - std::vector<APT::Configuration::Compressor>::const_iterator Comp = Compressors.begin(); - for (; Comp != Compressors.end(); ++Comp) - if (stringcmp(Start,I,Comp->Name.c_str()) == 0) - break; - - // Hmm.. unknown. + auto const Comp = findMatchingCompressor(I, Compress.cend(), Compressors); if (Comp == Compressors.end()) continue; - string Name = Output+Comp->Extension; + string Name = Output + Comp->Extension; if (stat(Name.c_str(),&St) != 0) return false; DidStat = true; - } + } return DidStat; } /*}}}*/ diff --git a/ftparchive/multicompress.h b/ftparchive/multicompress.h index 161716b86..50453acab 100644 --- a/ftparchive/multicompress.h +++ b/ftparchive/multicompress.h @@ -16,8 +16,8 @@ #ifndef MULTICOMPRESS_H #define MULTICOMPRESS_H -#include <apt-pkg/fileutl.h> #include <apt-pkg/aptconfiguration.h> +#include <apt-pkg/fileutl.h> #include <string> #include <stdio.h> diff --git a/ftparchive/override.cc b/ftparchive/override.cc index 8a0c5bab1..26d629bfa 100644 --- a/ftparchive/override.cc +++ b/ftparchive/override.cc @@ -12,13 +12,13 @@ // Include Files /*{{{*/ #include <config.h> -#include <apt-pkg/strutl.h> #include <apt-pkg/error.h> +#include <apt-pkg/strutl.h> -#include <stdio.h> +#include <utility> #include <ctype.h> +#include <stdio.h> #include <string.h> -#include <utility> #include "override.h" diff --git a/ftparchive/override.h b/ftparchive/override.h index c5cacc2b4..74637404c 100644 --- a/ftparchive/override.h +++ b/ftparchive/override.h @@ -12,8 +12,6 @@ #ifndef OVERRIDE_H #define OVERRIDE_H - - #include <map> #include <string> diff --git a/ftparchive/sources.cc b/ftparchive/sources.cc index ab976b490..60a86171f 100644 --- a/ftparchive/sources.cc +++ b/ftparchive/sources.cc @@ -1,5 +1,5 @@ -#include <string> #include <sstream> +#include <string> // for memcpy #include <cstring> diff --git a/ftparchive/writer.cc b/ftparchive/writer.cc index cac1d943d..d5c9735e7 100644 --- a/ftparchive/writer.cc +++ b/ftparchive/writer.cc @@ -14,19 +14,26 @@ #include <config.h> #include <apt-pkg/configuration.h> +#include <apt-pkg/debfile.h> #include <apt-pkg/deblistparser.h> #include <apt-pkg/error.h> #include <apt-pkg/fileutl.h> #include <apt-pkg/gpgv.h> #include <apt-pkg/hashes.h> #include <apt-pkg/md5.h> -#include <apt-pkg/strutl.h> -#include <apt-pkg/debfile.h> #include <apt-pkg/pkgcache.h> #include <apt-pkg/sha1.h> #include <apt-pkg/sha2.h> +#include <apt-pkg/strutl.h> #include <apt-pkg/tagfile.h> +#include <algorithm> +#include <ctime> +#include <iomanip> +#include <iostream> +#include <memory> +#include <sstream> +#include <utility> #include <ctype.h> #include <fnmatch.h> #include <ftw.h> @@ -35,19 +42,12 @@ #include <sys/stat.h> #include <sys/types.h> #include <unistd.h> -#include <ctime> -#include <iostream> -#include <iomanip> -#include <sstream> -#include <memory> -#include <utility> -#include <algorithm> #include "apt-ftparchive.h" -#include "writer.h" +#include "byhash.h" #include "cachedb.h" #include "multicompress.h" -#include "byhash.h" +#include "writer.h" #include <apti18n.h> /*}}}*/ @@ -417,7 +417,7 @@ bool PackagesWriter::DoPackage(string FileName) string Architecture; // if we generate a Packages file for a given arch, we use it to // look for overrides. if we run in "simple" mode without the - // "Architecures" variable in the config we use the architecure value + // "Architecures" variable in the config we use the architecture value // from the deb file if(Arch != "") Architecture = Arch; diff --git a/ftparchive/writer.h b/ftparchive/writer.h index ea4c66da4..b2cef4f00 100644 --- a/ftparchive/writer.h +++ b/ftparchive/writer.h @@ -15,19 +15,19 @@ #include <apt-pkg/hashes.h> -#include <string> -#include <stdio.h> #include <iostream> -#include <vector> #include <map> #include <set> +#include <string> +#include <vector> +#include <stdio.h> #include <stdlib.h> #include <sys/types.h> -#include "contents.h" +#include "apt-ftparchive.h" #include "cachedb.h" +#include "contents.h" #include "override.h" -#include "apt-ftparchive.h" using std::string; using std::cout; diff --git a/git-clang-format.sh b/git-clang-format.sh new file mode 100755 index 000000000..d374b66bd --- /dev/null +++ b/git-clang-format.sh @@ -0,0 +1,3 @@ +#!/bin/sh +cd "$(dirname "$0")" +git clang-format-3.8 --diff "$@" | sed "s#+/\*\}\}\}\*/#+ /*}}}*/#" | patch -p1 diff --git a/methods/CMakeLists.txt b/methods/CMakeLists.txt index a74c2ce07..3ae3f9963 100644 --- a/methods/CMakeLists.txt +++ b/methods/CMakeLists.txt @@ -6,13 +6,18 @@ add_executable(gpgv gpgv.cc) add_executable(cdrom cdrom.cc) add_executable(http http.cc http_main.cc rfc2553emu.cc connect.cc basehttp.cc) add_executable(mirror mirror.cc http.cc rfc2553emu.cc connect.cc basehttp.cc) -add_executable(https https.cc basehttp.cc) +if (HAVE_CURL) + add_executable(curl curl.cc basehttp.cc) +endif() add_executable(ftp ftp.cc rfc2553emu.cc connect.cc) add_executable(rred rred.cc) add_executable(rsh rsh.cc) -# Add target-specific header directories -target_include_directories(https PRIVATE ${CURL_INCLUDE_DIRS}) +target_compile_definitions(http PRIVATE ${GNUTLS_DEFINITIONS}) +target_include_directories(http PRIVATE ${GNUTLS_INCLUDE_DIR}) +if (HAVE_CURL) +target_include_directories(curl PRIVATE ${CURL_INCLUDE_DIRS}) +endif() # Link the executables against the libraries target_link_libraries(file apt-pkg) @@ -20,16 +25,30 @@ target_link_libraries(copy apt-pkg) target_link_libraries(store apt-pkg) target_link_libraries(gpgv apt-pkg) target_link_libraries(cdrom apt-pkg) -target_link_libraries(http apt-pkg) -target_link_libraries(mirror apt-pkg ${RESOLV_LIBRARIES}) -target_link_libraries(https apt-pkg ${CURL_LIBRARIES}) -target_link_libraries(ftp apt-pkg) +target_link_libraries(http apt-pkg ${GNUTLS_LIBRARIES}) +target_link_libraries(mirror apt-pkg ${RESOLV_LIBRARIES} ${GNUTLS_LIBRARIES}) +if (HAVE_CURL) + target_link_libraries(curl apt-pkg ${CURL_LIBRARIES}) +endif() +target_link_libraries(ftp apt-pkg ${GNUTLS_LIBRARIES}) target_link_libraries(rred apt-pkg) target_link_libraries(rsh apt-pkg) # Install the library -install(TARGETS file copy store gpgv cdrom http https ftp rred rsh mirror +install(TARGETS file copy store gpgv cdrom http ftp rred rsh mirror RUNTIME DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/apt/methods) add_slaves(${CMAKE_INSTALL_LIBEXECDIR}/apt/methods store gzip lzma bzip2 xz) add_slaves(${CMAKE_INSTALL_LIBEXECDIR}/apt/methods rsh ssh) + +set(curl_slaves curl+https curl+http) + +if (FORCE_CURL) + set(curl_slaves ${curl_slaves} https) +else() + add_slaves(${CMAKE_INSTALL_LIBEXECDIR}/apt/methods http https) +endif() +if (HAVE_CURL) + install(TARGETS curl RUNTIME DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/apt/methods) + add_slaves(${CMAKE_INSTALL_LIBEXECDIR}/apt/methods curl ${curl_slaves}) +endif() diff --git a/methods/aptmethod.h b/methods/aptmethod.h index 04c4fa99b..04858e29d 100644 --- a/methods/aptmethod.h +++ b/methods/aptmethod.h @@ -4,15 +4,16 @@ #include <apt-pkg/acquire-method.h> #include <apt-pkg/configuration.h> #include <apt-pkg/error.h> +#include <apt-pkg/fileutl.h> #include <algorithm> #include <locale> #include <string> #include <vector> +#include <sys/stat.h> #include <sys/time.h> #include <sys/types.h> -#include <sys/stat.h> #include <unistd.h> #include <apti18n.h> diff --git a/methods/basehttp.cc b/methods/basehttp.cc index d7d9bccd0..c3d570c83 100644 --- a/methods/basehttp.cc +++ b/methods/basehttp.cc @@ -15,6 +15,11 @@ #include <apt-pkg/fileutl.h> #include <apt-pkg/strutl.h> +#include <iostream> +#include <limits> +#include <map> +#include <string> +#include <vector> #include <ctype.h> #include <signal.h> #include <stdio.h> @@ -23,11 +28,6 @@ #include <sys/time.h> #include <time.h> #include <unistd.h> -#include <iostream> -#include <limits> -#include <map> -#include <string> -#include <vector> #include "basehttp.h" @@ -146,6 +146,9 @@ bool RequestState::HeaderLine(string const &Line) /*{{{*/ if (stringcasecmp(Tag,"Content-Length:") == 0) { + auto ContentLength = strtoull(Val.c_str(), NULL, 10); + if (ContentLength == 0) + return true; if (Encoding == Closes) Encoding = Stream; HaveContent = true; @@ -154,7 +157,7 @@ bool RequestState::HeaderLine(string const &Line) /*{{{*/ if (Result == 416 || (Result >= 300 && Result < 400)) DownloadSizePtr = &JunkSize; - *DownloadSizePtr = strtoull(Val.c_str(), NULL, 10); + *DownloadSizePtr = ContentLength; if (*DownloadSizePtr >= std::numeric_limits<unsigned long long>::max()) return _error->Errno("HeaderLine", _("The HTTP server sent an invalid Content-Length header")); else if (*DownloadSizePtr == 0) @@ -286,18 +289,18 @@ BaseHttpMethod::DealWithHeaders(FetchResult &Res, RequestState &Req) return IMS_HIT; } - /* Redirect - * - * Note that it is only OK for us to treat all redirection the same - * because we *always* use GET, not other HTTP methods. There are - * three redirection codes for which it is not appropriate that we - * redirect. Pass on those codes so the error handling kicks in. - */ - if (AllowRedirect - && (Req.Result > 300 && Req.Result < 400) - && (Req.Result != 300 // Multiple Choices - && Req.Result != 304 // Not Modified - && Req.Result != 306)) // (Not part of HTTP/1.1, reserved) + /* Note that it is only OK for us to treat all redirection the same + because we *always* use GET, not other HTTP methods. + Codes not mentioned are handled as errors later as required by the + HTTP spec to handle unknown codes the same as the x00 code. */ + constexpr unsigned int RedirectCodes[] = { + 301, // Moved Permanently + 302, // Found + 303, // See Other + 307, // Temporary Redirect + 308, // Permanent Redirect + }; + if (AllowRedirect && std::find(std::begin(RedirectCodes), std::end(RedirectCodes), Req.Result) != std::end(RedirectCodes)) { if (Req.Location.empty() == true) ; diff --git a/methods/basehttp.h b/methods/basehttp.h index 41a9a4306..7000e7b89 100644 --- a/methods/basehttp.h +++ b/methods/basehttp.h @@ -11,14 +11,14 @@ #ifndef APT_SERVER_H #define APT_SERVER_H -#include <apt-pkg/strutl.h> -#include <apt-pkg/fileutl.h> #include "aptmethod.h" +#include <apt-pkg/fileutl.h> +#include <apt-pkg/strutl.h> -#include <time.h> #include <iostream> -#include <string> #include <memory> +#include <string> +#include <time.h> using std::cout; using std::endl; diff --git a/methods/cdrom.cc b/methods/cdrom.cc index 87a58e948..8b7587fe5 100644 --- a/methods/cdrom.cc +++ b/methods/cdrom.cc @@ -12,11 +12,11 @@ #include <apt-pkg/cdrom.h> #include <apt-pkg/cdromutl.h> -#include <apt-pkg/error.h> #include <apt-pkg/configuration.h> +#include <apt-pkg/error.h> #include <apt-pkg/fileutl.h> -#include <apt-pkg/strutl.h> #include <apt-pkg/hashes.h> +#include <apt-pkg/strutl.h> #include "aptmethod.h" diff --git a/methods/connect.cc b/methods/connect.cc index f6fb14769..949cd3f99 100644 --- a/methods/connect.cc +++ b/methods/connect.cc @@ -13,27 +13,31 @@ // Include Files /*{{{*/ #include <config.h> -#include <apt-pkg/error.h> -#include <apt-pkg/fileutl.h> -#include <apt-pkg/strutl.h> #include <apt-pkg/acquire-method.h> #include <apt-pkg/configuration.h> +#include <apt-pkg/error.h> +#include <apt-pkg/fileutl.h> #include <apt-pkg/srvrec.h> +#include <apt-pkg/strutl.h> -#include <stdio.h> -#include <errno.h> -#include <unistd.h> +#include <gnutls/gnutls.h> +#include <gnutls/x509.h> + +#include <set> #include <sstream> +#include <string> +#include <errno.h> +#include <stdio.h> #include <string.h> -#include<set> -#include<string> +#include <unistd.h> // Internet stuff +#include <netdb.h> +#include <arpa/inet.h> #include <netinet/in.h> #include <sys/socket.h> -#include <arpa/inet.h> -#include <netdb.h> +#include "aptmethod.h" #include "connect.h" #include "rfc2553emu.h" #include <apti18n.h> @@ -76,16 +80,46 @@ static bool ConnectionAllowed(char const * const Service, std::string const &Hos return true; } /*}}}*/ + +// File Descriptor based Fd /*{{{*/ +struct FdFd : public MethodFd +{ + int fd = -1; + int Fd() APT_OVERRIDE { return fd; } + ssize_t Read(void *buf, size_t count) APT_OVERRIDE { return ::read(fd, buf, count); } + ssize_t Write(void *buf, size_t count) APT_OVERRIDE { return ::write(fd, buf, count); } + int Close() APT_OVERRIDE + { + int result = 0; + if (fd != -1) + result = ::close(fd); + fd = -1; + return result; + } +}; + +bool MethodFd::HasPending() +{ + return false; +} +std::unique_ptr<MethodFd> MethodFd::FromFd(int iFd) +{ + FdFd *fd = new FdFd(); + fd->fd = iFd; + return std::unique_ptr<MethodFd>(fd); +} + /*}}}*/ // DoConnect - Attempt a connect operation /*{{{*/ // --------------------------------------------------------------------- /* This helper function attempts a connection to a single address. */ -static bool DoConnect(struct addrinfo *Addr,std::string const &Host, - unsigned long TimeOut,int &Fd,pkgAcqMethod *Owner) +static bool DoConnect(struct addrinfo *Addr, std::string const &Host, + unsigned long TimeOut, std::unique_ptr<MethodFd> &Fd, aptMethod *Owner) { // Show a status indicator char Name[NI_MAXHOST]; char Service[NI_MAXSERV]; - + Fd.reset(new FdFd()); + Name[0] = 0; Service[0] = 0; getnameinfo(Addr->ai_addr,Addr->ai_addrlen, @@ -107,20 +141,21 @@ static bool DoConnect(struct addrinfo *Addr,std::string const &Host, } // Get a socket - if ((Fd = socket(Addr->ai_family,Addr->ai_socktype, - Addr->ai_protocol)) < 0) + if ((static_cast<FdFd *>(Fd.get())->fd = socket(Addr->ai_family, Addr->ai_socktype, + Addr->ai_protocol)) < 0) return _error->Errno("socket",_("Could not create a socket for %s (f=%u t=%u p=%u)"), Name,Addr->ai_family,Addr->ai_socktype,Addr->ai_protocol); - - SetNonBlock(Fd,true); - if (connect(Fd,Addr->ai_addr,Addr->ai_addrlen) < 0 && + + SetNonBlock(Fd->Fd(), true); + if (connect(Fd->Fd(), Addr->ai_addr, Addr->ai_addrlen) < 0 && errno != EINPROGRESS) return _error->Errno("connect",_("Cannot initiate the connection " "to %s:%s (%s)."),Host.c_str(),Service,Name); /* This implements a timeout for connect by opening the connection nonblocking */ - if (WaitFd(Fd,true,TimeOut) == false) { + if (WaitFd(Fd->Fd(), true, TimeOut) == false) + { bad_addr.insert(bad_addr.begin(), std::string(Name)); Owner->SetFailReason("Timeout"); return _error->Error(_("Could not connect to %s:%s (%s), " @@ -130,7 +165,7 @@ static bool DoConnect(struct addrinfo *Addr,std::string const &Host, // Check the socket for an error condition unsigned int Err; unsigned int Len = sizeof(Err); - if (getsockopt(Fd,SOL_SOCKET,SO_ERROR,&Err,&Len) != 0) + if (getsockopt(Fd->Fd(), SOL_SOCKET, SO_ERROR, &Err, &Len) != 0) return _error->Errno("getsockopt",_("Failed")); if (Err != 0) @@ -144,14 +179,16 @@ static bool DoConnect(struct addrinfo *Addr,std::string const &Host, return _error->Errno("connect",_("Could not connect to %s:%s (%s)."),Host.c_str(), Service,Name); } - + + Owner->SetFailReason(""); + return true; } /*}}}*/ // Connect to a given Hostname /*{{{*/ static bool ConnectToHostname(std::string const &Host, int const Port, - const char * const Service, int DefPort, int &Fd, - unsigned long const TimeOut, pkgAcqMethod * const Owner) + const char *const Service, int DefPort, std::unique_ptr<MethodFd> &Fd, + unsigned long const TimeOut, aptMethod *const Owner) { if (ConnectionAllowed(Service, Host) == false) return false; @@ -254,10 +291,9 @@ static bool ConnectToHostname(std::string const &Host, int const Port, { LastUsed = CurHost; return true; - } - close(Fd); - Fd = -1; - + } + Fd->Close(); + // Ignore UNIX domain sockets do { @@ -286,9 +322,9 @@ static bool ConnectToHostname(std::string const &Host, int const Port, // Connect - Connect to a server /*{{{*/ // --------------------------------------------------------------------- /* Performs a connection to the server (including SRV record lookup) */ -bool Connect(std::string Host,int Port,const char *Service, - int DefPort,int &Fd, - unsigned long TimeOut,pkgAcqMethod *Owner) +bool Connect(std::string Host, int Port, const char *Service, + int DefPort, std::unique_ptr<MethodFd> &Fd, + unsigned long TimeOut, aptMethod *Owner) { if (_error->PendingError() == true) return false; @@ -312,12 +348,15 @@ bool Connect(std::string Host,int Port,const char *Service, size_t stackSize = 0; // try to connect in the priority order of the srv records std::string initialHost{std::move(Host)}; + auto const initialPort = Port; while(SrvRecords.empty() == false) { _error->PushToStack(); ++stackSize; // PopFromSrvRecs will also remove the server - Host = PopFromSrvRecs(SrvRecords).target; + auto Srv = PopFromSrvRecs(SrvRecords); + Host = Srv.target; + Port = Srv.port; auto const ret = ConnectToHostname(Host, Port, Service, DefPort, Fd, TimeOut, Owner); if (ret) { @@ -327,6 +366,7 @@ bool Connect(std::string Host,int Port,const char *Service, } } Host = std::move(initialHost); + Port = initialPort; // we have no (good) SrvRecords for this host, connect right away _error->PushToStack(); @@ -340,3 +380,410 @@ bool Connect(std::string Host,int Port,const char *Service, _error->MergeWithStack(); return ret; } + /*}}}*/ +// UnwrapSocks - Handle SOCKS setup /*{{{*/ +// --------------------------------------------------------------------- +/* This does socks magic */ +static bool TalkToSocksProxy(int const ServerFd, std::string const &Proxy, + char const *const type, bool const ReadWrite, uint8_t *const ToFrom, + unsigned int const Size, unsigned int const Timeout) +{ + if (WaitFd(ServerFd, ReadWrite, Timeout) == false) + return _error->Error("Waiting for the SOCKS proxy %s to %s timed out", URI::SiteOnly(Proxy).c_str(), type); + if (ReadWrite == false) + { + if (FileFd::Read(ServerFd, ToFrom, Size) == false) + return _error->Error("Reading the %s from SOCKS proxy %s failed", type, URI::SiteOnly(Proxy).c_str()); + } + else + { + if (FileFd::Write(ServerFd, ToFrom, Size) == false) + return _error->Error("Writing the %s to SOCKS proxy %s failed", type, URI::SiteOnly(Proxy).c_str()); + } + return true; +} + +bool UnwrapSocks(std::string Host, int Port, URI Proxy, std::unique_ptr<MethodFd> &Fd, + unsigned long Timeout, aptMethod *Owner) +{ + /* We implement a very basic SOCKS5 client here complying mostly to RFC1928 expect + * for not offering GSSAPI auth which is a must (we only do no or user/pass auth). + * We also expect the SOCKS5 server to do hostname lookup (aka socks5h) */ + std::string const ProxyInfo = URI::SiteOnly(Proxy); + Owner->Status(_("Connecting to %s (%s)"), "SOCKS5h proxy", ProxyInfo.c_str()); +#define APT_WriteOrFail(TYPE, DATA, LENGTH) \ + if (TalkToSocksProxy(Fd->Fd(), ProxyInfo, TYPE, true, DATA, LENGTH, Timeout) == false) \ + return false +#define APT_ReadOrFail(TYPE, DATA, LENGTH) \ + if (TalkToSocksProxy(Fd->Fd(), ProxyInfo, TYPE, false, DATA, LENGTH, Timeout) == false) \ + return false + if (Host.length() > 255) + return _error->Error("Can't use SOCKS5h as hostname %s is too long!", Host.c_str()); + if (Proxy.User.length() > 255 || Proxy.Password.length() > 255) + return _error->Error("Can't use user&pass auth as they are too long (%lu and %lu) for the SOCKS5!", Proxy.User.length(), Proxy.Password.length()); + if (Proxy.User.empty()) + { + uint8_t greeting[] = {0x05, 0x01, 0x00}; + APT_WriteOrFail("greet-1", greeting, sizeof(greeting)); + } + else + { + uint8_t greeting[] = {0x05, 0x02, 0x00, 0x02}; + APT_WriteOrFail("greet-2", greeting, sizeof(greeting)); + } + uint8_t greeting[2]; + APT_ReadOrFail("greet back", greeting, sizeof(greeting)); + if (greeting[0] != 0x05) + return _error->Error("SOCKS proxy %s greets back with wrong version: %d", ProxyInfo.c_str(), greeting[0]); + if (greeting[1] == 0x00) + ; // no auth has no method-dependent sub-negotiations + else if (greeting[1] == 0x02) + { + if (Proxy.User.empty()) + return _error->Error("SOCKS proxy %s negotiated user&pass auth, but we had not offered it!", ProxyInfo.c_str()); + // user&pass auth sub-negotiations are defined by RFC1929 + std::vector<uint8_t> auth = {{0x01, static_cast<uint8_t>(Proxy.User.length())}}; + std::copy(Proxy.User.begin(), Proxy.User.end(), std::back_inserter(auth)); + auth.push_back(static_cast<uint8_t>(Proxy.Password.length())); + std::copy(Proxy.Password.begin(), Proxy.Password.end(), std::back_inserter(auth)); + APT_WriteOrFail("user&pass auth", auth.data(), auth.size()); + uint8_t authstatus[2]; + APT_ReadOrFail("auth report", authstatus, sizeof(authstatus)); + if (authstatus[0] != 0x01) + return _error->Error("SOCKS proxy %s auth status response with wrong version: %d", ProxyInfo.c_str(), authstatus[0]); + if (authstatus[1] != 0x00) + return _error->Error("SOCKS proxy %s reported authorization failure: username or password incorrect? (%d)", ProxyInfo.c_str(), authstatus[1]); + } + else + return _error->Error("SOCKS proxy %s greets back having not found a common authorization method: %d", ProxyInfo.c_str(), greeting[1]); + union { + uint16_t *i; + uint8_t *b; + } portu; + uint16_t port = htons(static_cast<uint16_t>(Port)); + portu.i = &port; + std::vector<uint8_t> request = {{0x05, 0x01, 0x00, 0x03, static_cast<uint8_t>(Host.length())}}; + std::copy(Host.begin(), Host.end(), std::back_inserter(request)); + request.push_back(portu.b[0]); + request.push_back(portu.b[1]); + APT_WriteOrFail("request", request.data(), request.size()); + uint8_t response[4]; + APT_ReadOrFail("first part of response", response, sizeof(response)); + if (response[0] != 0x05) + return _error->Error("SOCKS proxy %s response with wrong version: %d", ProxyInfo.c_str(), response[0]); + if (response[2] != 0x00) + return _error->Error("SOCKS proxy %s has unexpected non-zero reserved field value: %d", ProxyInfo.c_str(), response[2]); + std::string bindaddr; + if (response[3] == 0x01) // IPv4 address + { + uint8_t ip4port[6]; + APT_ReadOrFail("IPv4+Port of response", ip4port, sizeof(ip4port)); + portu.b[0] = ip4port[4]; + portu.b[1] = ip4port[5]; + port = ntohs(*portu.i); + strprintf(bindaddr, "%d.%d.%d.%d:%d", ip4port[0], ip4port[1], ip4port[2], ip4port[3], port); + } + else if (response[3] == 0x03) // hostname + { + uint8_t namelength; + APT_ReadOrFail("hostname length of response", &namelength, 1); + uint8_t hostname[namelength + 2]; + APT_ReadOrFail("hostname of response", hostname, sizeof(hostname)); + portu.b[0] = hostname[namelength]; + portu.b[1] = hostname[namelength + 1]; + port = ntohs(*portu.i); + hostname[namelength] = '\0'; + strprintf(bindaddr, "%s:%d", hostname, port); + } + else if (response[3] == 0x04) // IPv6 address + { + uint8_t ip6port[18]; + APT_ReadOrFail("IPv6+port of response", ip6port, sizeof(ip6port)); + portu.b[0] = ip6port[16]; + portu.b[1] = ip6port[17]; + port = ntohs(*portu.i); + strprintf(bindaddr, "[%02X%02X:%02X%02X:%02X%02X:%02X%02X:%02X%02X:%02X%02X:%02X%02X:%02X%02X]:%d", + ip6port[0], ip6port[1], ip6port[2], ip6port[3], ip6port[4], ip6port[5], ip6port[6], ip6port[7], + ip6port[8], ip6port[9], ip6port[10], ip6port[11], ip6port[12], ip6port[13], ip6port[14], ip6port[15], + port); + } + else + return _error->Error("SOCKS proxy %s destination address is of unknown type: %d", + ProxyInfo.c_str(), response[3]); + if (response[1] != 0x00) + { + char const *errstr = nullptr; + auto errcode = response[1]; + // Tor error reporting can be a bit arcane, lets try to detect & fix it up + if (bindaddr == "0.0.0.0:0") + { + auto const lastdot = Host.rfind('.'); + if (lastdot == std::string::npos || Host.substr(lastdot) != ".onion") + ; + else if (errcode == 0x01) + { + auto const prevdot = Host.rfind('.', lastdot - 1); + if (lastdot == 16 && prevdot == std::string::npos) + ; // valid .onion address + else if (prevdot != std::string::npos && (lastdot - prevdot) == 17) + ; // valid .onion address with subdomain(s) + else + { + errstr = "Invalid hostname: onion service name must be 16 characters long"; + Owner->SetFailReason("SOCKS"); + } + } + // in all likelihood the service is either down or the address has + // a typo and so "Host unreachable" is the better understood error + // compared to the technically correct "TLL expired". + else if (errcode == 0x06) + errcode = 0x04; + } + if (errstr == nullptr) + { + switch (errcode) + { + case 0x01: + errstr = "general SOCKS server failure"; + Owner->SetFailReason("SOCKS"); + break; + case 0x02: + errstr = "connection not allowed by ruleset"; + Owner->SetFailReason("SOCKS"); + break; + case 0x03: + errstr = "Network unreachable"; + Owner->SetFailReason("ConnectionTimedOut"); + break; + case 0x04: + errstr = "Host unreachable"; + Owner->SetFailReason("ConnectionTimedOut"); + break; + case 0x05: + errstr = "Connection refused"; + Owner->SetFailReason("ConnectionRefused"); + break; + case 0x06: + errstr = "TTL expired"; + Owner->SetFailReason("Timeout"); + break; + case 0x07: + errstr = "Command not supported"; + Owner->SetFailReason("SOCKS"); + break; + case 0x08: + errstr = "Address type not supported"; + Owner->SetFailReason("SOCKS"); + break; + default: + errstr = "Unknown error"; + Owner->SetFailReason("SOCKS"); + break; + } + } + return _error->Error("SOCKS proxy %s could not connect to %s (%s) due to: %s (%d)", + ProxyInfo.c_str(), Host.c_str(), bindaddr.c_str(), errstr, response[1]); + } + else if (Owner->DebugEnabled()) + ioprintf(std::clog, "http: SOCKS proxy %s connection established to %s (%s)\n", + ProxyInfo.c_str(), Host.c_str(), bindaddr.c_str()); + + if (WaitFd(Fd->Fd(), true, Timeout) == false) + return _error->Error("SOCKS proxy %s reported connection to %s (%s), but timed out", + ProxyInfo.c_str(), Host.c_str(), bindaddr.c_str()); +#undef APT_ReadOrFail +#undef APT_WriteOrFail + + return true; +} + /*}}}*/ +// UnwrapTLS - Handle TLS connections /*{{{*/ +// --------------------------------------------------------------------- +/* Performs a TLS handshake on the socket */ +struct TlsFd : public MethodFd +{ + std::unique_ptr<MethodFd> UnderlyingFd; + gnutls_session_t session; + gnutls_certificate_credentials_t credentials; + std::string hostname; + + int Fd() APT_OVERRIDE { return UnderlyingFd->Fd(); } + + ssize_t Read(void *buf, size_t count) APT_OVERRIDE + { + return HandleError(gnutls_record_recv(session, buf, count)); + } + ssize_t Write(void *buf, size_t count) APT_OVERRIDE + { + return HandleError(gnutls_record_send(session, buf, count)); + } + + template <typename T> + T HandleError(T err) + { + if (err < 0 && gnutls_error_is_fatal(err)) + errno = EIO; + else if (err < 0) + errno = EAGAIN; + else + errno = 0; + return err; + } + + int Close() APT_OVERRIDE + { + auto err = HandleError(gnutls_bye(session, GNUTLS_SHUT_RDWR)); + auto lower = UnderlyingFd->Close(); + return err < 0 ? HandleError(err) : lower; + } + + bool HasPending() APT_OVERRIDE + { + return gnutls_record_check_pending(session) > 0; + } +}; + +bool UnwrapTLS(std::string Host, std::unique_ptr<MethodFd> &Fd, + unsigned long Timeout, aptMethod *Owner) +{ + if (_config->FindB("Acquire::AllowTLS", true) == false) + return _error->Error("TLS support has been disabled: Acquire::AllowTLS is false."); + + int err; + TlsFd *tlsFd = new TlsFd(); + + tlsFd->hostname = Host; + tlsFd->UnderlyingFd = MethodFd::FromFd(-1); // For now + + if ((err = gnutls_init(&tlsFd->session, GNUTLS_CLIENT | GNUTLS_NONBLOCK)) < 0) + return _error->Error("Internal error: could not allocate credentials: %s", gnutls_strerror(err)); + + FdFd *fdfd = dynamic_cast<FdFd *>(Fd.get()); + if (fdfd != nullptr) + { + gnutls_transport_set_int(tlsFd->session, fdfd->fd); + } + else + { + gnutls_transport_set_ptr(tlsFd->session, Fd.get()); + gnutls_transport_set_pull_function(tlsFd->session, + [](gnutls_transport_ptr_t p, void *buf, size_t size) -> ssize_t { + return reinterpret_cast<MethodFd *>(p)->Read(buf, size); + }); + gnutls_transport_set_push_function(tlsFd->session, + [](gnutls_transport_ptr_t p, const void *buf, size_t size) -> ssize_t { + return reinterpret_cast<MethodFd *>(p)->Write((void *)buf, size); + }); + } + + if ((err = gnutls_certificate_allocate_credentials(&tlsFd->credentials)) < 0) + return _error->Error("Internal error: could not allocate credentials: %s", gnutls_strerror(err)); + + // Credential setup + std::string fileinfo = Owner->ConfigFind("CaInfo", ""); + if (fileinfo.empty()) + { + // No CaInfo specified, use system trust store. + err = gnutls_certificate_set_x509_system_trust(tlsFd->credentials); + if (err == 0) + Owner->Warning("No system certificates available. Try installing ca-certificates."); + else if (err < 0) + return _error->Error("Could not load system TLS certificates: %s", gnutls_strerror(err)); + } + else + { + // CA location has been set, use the specified one instead + gnutls_certificate_set_verify_flags(tlsFd->credentials, GNUTLS_VERIFY_ALLOW_X509_V1_CA_CRT); + err = gnutls_certificate_set_x509_trust_file(tlsFd->credentials, fileinfo.c_str(), GNUTLS_X509_FMT_PEM); + if (err < 0) + return _error->Error("Could not load certificates from %s (CaInfo option): %s", fileinfo.c_str(), gnutls_strerror(err)); + } + + if (!Owner->ConfigFind("IssuerCert", "").empty()) + return _error->Error("The option '%s' is not supported anymore", "IssuerCert"); + if (!Owner->ConfigFind("SslForceVersion", "").empty()) + return _error->Error("The option '%s' is not supported anymore", "SslForceVersion"); + + // For client authentication, certificate file ... + std::string const cert = Owner->ConfigFind("SslCert", ""); + std::string const key = Owner->ConfigFind("SslKey", ""); + if (cert.empty() == false) + { + if ((err = gnutls_certificate_set_x509_key_file( + tlsFd->credentials, + cert.c_str(), + key.empty() ? cert.c_str() : key.c_str(), + GNUTLS_X509_FMT_PEM)) < 0) + { + return _error->Error("Could not load client certificate (%s, SslCert option) or key (%s, SslKey option): %s", cert.c_str(), key.c_str(), gnutls_strerror(err)); + } + } + + // CRL file + std::string const crlfile = Owner->ConfigFind("CrlFile", ""); + if (crlfile.empty() == false) + { + if ((err = gnutls_certificate_set_x509_crl_file(tlsFd->credentials, + crlfile.c_str(), + GNUTLS_X509_FMT_PEM)) < 0) + return _error->Error("Could not load custom certificate revocation list %s (CrlFile option): %s", crlfile.c_str(), gnutls_strerror(err)); + } + + if ((err = gnutls_credentials_set(tlsFd->session, GNUTLS_CRD_CERTIFICATE, tlsFd->credentials)) < 0) + return _error->Error("Internal error: Could not add certificates to session: %s", gnutls_strerror(err)); + + if ((err = gnutls_set_default_priority(tlsFd->session)) < 0) + return _error->Error("Internal error: Could not set algorithm preferences: %s", gnutls_strerror(err)); + + if (Owner->ConfigFindB("Verify-Peer", true)) + { + gnutls_session_set_verify_cert(tlsFd->session, Owner->ConfigFindB("Verify-Host", true) ? tlsFd->hostname.c_str() : nullptr, 0); + } + + // set SNI only if the hostname is really a name and not an address + { + struct in_addr addr4; + struct in6_addr addr6; + + if (inet_pton(AF_INET, tlsFd->hostname.c_str(), &addr4) == 1 || + inet_pton(AF_INET6, tlsFd->hostname.c_str(), &addr6) == 1) + /* not a host name */; + else if ((err = gnutls_server_name_set(tlsFd->session, GNUTLS_NAME_DNS, tlsFd->hostname.c_str(), tlsFd->hostname.length())) < 0) + return _error->Error("Could not set host name %s to indicate to server: %s", tlsFd->hostname.c_str(), gnutls_strerror(err)); + } + + // Set the FD now, so closing it works reliably. + tlsFd->UnderlyingFd = std::move(Fd); + Fd.reset(tlsFd); + + // Do the handshake. Our socket is non-blocking, so we need to call WaitFd() + // accordingly. + do + { + err = gnutls_handshake(tlsFd->session); + if ((err == GNUTLS_E_INTERRUPTED || err == GNUTLS_E_AGAIN) && + WaitFd(Fd->Fd(), gnutls_record_get_direction(tlsFd->session) == 1, Timeout) == false) + return _error->Errno("select", "Could not wait for server fd"); + } while (err < 0 && gnutls_error_is_fatal(err) == 0); + + if (err < 0) + { + // Print reason why validation failed. + if (err == GNUTLS_E_CERTIFICATE_VERIFICATION_ERROR) + { + gnutls_datum_t txt; + auto type = gnutls_certificate_type_get(tlsFd->session); + auto status = gnutls_session_get_verify_cert_status(tlsFd->session); + if (gnutls_certificate_verification_status_print(status, + type, &txt, 0) == 0) + { + _error->Error("Certificate verification failed: %s", txt.data); + } + gnutls_free(txt.data); + } + return _error->Error("Could not handshake: %s", gnutls_strerror(err)); + } + + return true; +} + /*}}}*/ diff --git a/methods/connect.h b/methods/connect.h index bbe1bb35d..817ebf765 100644 --- a/methods/connect.h +++ b/methods/connect.h @@ -10,12 +10,41 @@ #ifndef CONNECT_H #define CONNECT_H +#include <memory> #include <string> +#include <stddef.h> -class pkgAcqMethod; +class aptMethod; + +/** + * \brief Small representation of a file descriptor for network traffic. + * + * This provides support for TLS, SOCKS, and HTTP CONNECT proxies. + */ +struct MethodFd +{ + /// \brief Returns -1 for unusable, or an fd to select() on otherwise + virtual int Fd() = 0; + /// \brief Should behave like read(2) + virtual ssize_t Read(void *buf, size_t count) = 0; + /// \brief Should behave like write(2) + virtual ssize_t Write(void *buf, size_t count) = 0; + /// \brief Closes the file descriptor. Can be called multiple times. + virtual int Close() = 0; + /// \brief Destructor + virtual ~MethodFd(){}; + /// \brief Construct a MethodFd from a UNIX file descriptor + static std::unique_ptr<MethodFd> FromFd(int iFd); + /// \brief If there is pending data. + virtual bool HasPending(); +}; + +bool Connect(std::string To, int Port, const char *Service, int DefPort, + std::unique_ptr<MethodFd> &Fd, unsigned long TimeOut, aptMethod *Owner); + +bool UnwrapSocks(std::string To, int Port, URI Proxy, std::unique_ptr<MethodFd> &Fd, unsigned long Timeout, aptMethod *Owner); +bool UnwrapTLS(std::string To, std::unique_ptr<MethodFd> &Fd, unsigned long Timeout, aptMethod *Owner); -bool Connect(std::string To,int Port,const char *Service,int DefPort, - int &Fd,unsigned long TimeOut,pkgAcqMethod *Owner); void RotateDNS(); #endif diff --git a/methods/copy.cc b/methods/copy.cc index 810fc2f38..fd4786ede 100644 --- a/methods/copy.cc +++ b/methods/copy.cc @@ -11,12 +11,12 @@ // Include Files /*{{{*/ #include <config.h> -#include <apt-pkg/fileutl.h> -#include <apt-pkg/strutl.h> +#include "aptmethod.h" +#include <apt-pkg/configuration.h> #include <apt-pkg/error.h> +#include <apt-pkg/fileutl.h> #include <apt-pkg/hashes.h> -#include <apt-pkg/configuration.h> -#include "aptmethod.h" +#include <apt-pkg/strutl.h> #include <string> #include <sys/stat.h> diff --git a/methods/https.cc b/methods/curl.cc index d71ef0bf0..dfdd3b06b 100644 --- a/methods/https.cc +++ b/methods/curl.cc @@ -12,28 +12,27 @@ // Include Files /*{{{*/ #include <config.h> -#include <apt-pkg/fileutl.h> +#include <apt-pkg/configuration.h> #include <apt-pkg/error.h> +#include <apt-pkg/fileutl.h> #include <apt-pkg/hashes.h> -#include <apt-pkg/netrc.h> -#include <apt-pkg/configuration.h> #include <apt-pkg/macros.h> -#include <apt-pkg/strutl.h> +#include <apt-pkg/netrc.h> #include <apt-pkg/proxy.h> +#include <apt-pkg/strutl.h> +#include <ctype.h> +#include <stdio.h> +#include <stdlib.h> #include <sys/stat.h> #include <sys/time.h> #include <unistd.h> -#include <stdio.h> -#include <ctype.h> -#include <stdlib.h> #include <array> #include <iostream> #include <sstream> - -#include "https.h" +#include "curl.h" #include <apti18n.h> /*}}}*/ @@ -469,6 +468,7 @@ bool HttpsMethod::Fetch(FetchItem *Itm) case BaseHttpMethod::ERROR_WITH_CONTENT_PAGE: // unlink, no need keep 401/404 page content in partial/ RemoveFile(Binary.c_str(), Req.File.Name()); + // Fall through. case BaseHttpMethod::ERROR_UNRECOVERABLE: case BaseHttpMethod::ERROR_NOT_FROM_SERVER: return false; diff --git a/methods/https.h b/methods/curl.h index fbbf34501..d352dc52a 100644 --- a/methods/https.h +++ b/methods/curl.h @@ -11,11 +11,11 @@ #ifndef APT_HTTPS_H #define APT_HTTPS_H -#include <curl/curl.h> #include <iostream> -#include <stddef.h> -#include <string> #include <memory> +#include <string> +#include <curl/curl.h> +#include <stddef.h> #include "basehttp.h" diff --git a/methods/file.cc b/methods/file.cc index 5cbf1924e..6111329d5 100644 --- a/methods/file.cc +++ b/methods/file.cc @@ -15,12 +15,12 @@ // Include Files /*{{{*/ #include <config.h> +#include "aptmethod.h" #include <apt-pkg/aptconfiguration.h> #include <apt-pkg/error.h> -#include <apt-pkg/hashes.h> #include <apt-pkg/fileutl.h> +#include <apt-pkg/hashes.h> #include <apt-pkg/strutl.h> -#include "aptmethod.h" #include <string> #include <sys/stat.h> diff --git a/methods/ftp.cc b/methods/ftp.cc index d789637a8..9bfe72bc6 100644 --- a/methods/ftp.cc +++ b/methods/ftp.cc @@ -17,33 +17,33 @@ // Include Files /*{{{*/ #include <config.h> -#include <apt-pkg/fileutl.h> +#include <apt-pkg/configuration.h> #include <apt-pkg/error.h> +#include <apt-pkg/fileutl.h> #include <apt-pkg/hashes.h> #include <apt-pkg/netrc.h> -#include <apt-pkg/configuration.h> #include <apt-pkg/strutl.h> +#include <iostream> #include <ctype.h> +#include <errno.h> +#include <signal.h> +#include <stdarg.h> +#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include <sys/time.h> #include <unistd.h> -#include <signal.h> -#include <stdio.h> -#include <errno.h> -#include <stdarg.h> -#include <iostream> // Internet stuff -#include <netinet/in.h> -#include <arpa/inet.h> #include <netdb.h> +#include <arpa/inet.h> +#include <netinet/in.h> -#include "rfc2553emu.h" #include "connect.h" #include "ftp.h" +#include "rfc2553emu.h" #include <apti18n.h> /*}}}*/ @@ -73,8 +73,8 @@ time_t FtpMethod::FailTime = 0; // FTPConn::FTPConn - Constructor /*{{{*/ // --------------------------------------------------------------------- /* */ -FTPConn::FTPConn(URI Srv) : Len(0), ServerFd(-1), DataFd(-1), - DataListenFd(-1), ServerName(Srv), +FTPConn::FTPConn(URI Srv) : Len(0), ServerFd(MethodFd::FromFd(-1)), DataFd(-1), + DataListenFd(-1), ServerName(Srv), ForceExtended(false), TryPassive(true), PeerAddrLen(0), ServerAddrLen(0) { @@ -96,8 +96,7 @@ FTPConn::~FTPConn() /* Just tear down the socket and data socket */ void FTPConn::Close() { - close(ServerFd); - ServerFd = -1; + ServerFd->Close(); close(DataFd); DataFd = -1; close(DataListenFd); @@ -112,10 +111,10 @@ void FTPConn::Close() // --------------------------------------------------------------------- /* Connect to the server using a non-blocking connection and perform a login. */ -bool FTPConn::Open(pkgAcqMethod *Owner) +bool FTPConn::Open(aptMethod *Owner) { // Use the already open connection if possible. - if (ServerFd != -1) + if (ServerFd->Fd() != -1) return true; Close(); @@ -178,12 +177,12 @@ bool FTPConn::Open(pkgAcqMethod *Owner) // Get the remote server's address PeerAddrLen = sizeof(PeerAddr); - if (getpeername(ServerFd,(sockaddr *)&PeerAddr,&PeerAddrLen) != 0) + if (getpeername(ServerFd->Fd(), (sockaddr *)&PeerAddr, &PeerAddrLen) != 0) return _error->Errno("getpeername",_("Unable to determine the peer name")); // Get the local machine's address ServerAddrLen = sizeof(ServerAddr); - if (getsockname(ServerFd,(sockaddr *)&ServerAddr,&ServerAddrLen) != 0) + if (getsockname(ServerFd->Fd(), (sockaddr *)&ServerAddr, &ServerAddrLen) != 0) return _error->Errno("getsockname",_("Unable to determine the local name")); return Res; @@ -314,7 +313,7 @@ bool FTPConn::Login() /* This performs a very simple buffered read. */ bool FTPConn::ReadLine(string &Text) { - if (ServerFd == -1) + if (ServerFd->Fd() == -1) return false; // Suck in a line @@ -339,14 +338,14 @@ bool FTPConn::ReadLine(string &Text) } // Wait for some data.. - if (WaitFd(ServerFd,false,TimeOut) == false) + if (WaitFd(ServerFd->Fd(), false, TimeOut) == false) { Close(); return _error->Error(_("Connection timeout")); } // Suck it back - int Res = read(ServerFd,Buffer + Len,sizeof(Buffer) - Len); + int Res = ServerFd->Read(Buffer + Len, sizeof(Buffer) - Len); if (Res == 0) _error->Error(_("Server closed the connection")); if (Res <= 0) @@ -451,13 +450,13 @@ bool FTPConn::WriteMsg(unsigned int &Ret,string &Text,const char *Fmt,...) unsigned long Start = 0; while (Len != 0) { - if (WaitFd(ServerFd,true,TimeOut) == false) + if (WaitFd(ServerFd->Fd(), true, TimeOut) == false) { Close(); return _error->Error(_("Connection timeout")); } - - int Res = write(ServerFd,S + Start,Len); + + int Res = ServerFd->Write(S + Start, Len); if (Res <= 0) { _error->Errno("write",_("Write error")); diff --git a/methods/ftp.h b/methods/ftp.h index 6a12475a0..67d00d9f1 100644 --- a/methods/ftp.h +++ b/methods/ftp.h @@ -10,19 +10,20 @@ #ifndef APT_FTP_H #define APT_FTP_H -#include <apt-pkg/strutl.h> #include "aptmethod.h" +#include "connect.h" +#include <apt-pkg/strutl.h> +#include <string> #include <sys/socket.h> #include <sys/types.h> #include <time.h> -#include <string> class FTPConn { char Buffer[1024*10]; unsigned long Len; - int ServerFd; + std::unique_ptr<MethodFd> ServerFd; int DataFd; int DataListenFd; URI ServerName; @@ -55,7 +56,7 @@ class FTPConn bool WriteMsg(unsigned int &Ret,std::string &Text,const char *Fmt,...); // Connection control - bool Open(pkgAcqMethod *Owner); + bool Open(aptMethod *Owner); void Close(); bool GoPasv(); bool ExtGoPasv(); diff --git a/methods/gpgv.cc b/methods/gpgv.cc index 51c268d02..8de15c48a 100644 --- a/methods/gpgv.cc +++ b/methods/gpgv.cc @@ -1,11 +1,11 @@ #include <config.h> +#include "aptmethod.h" #include <apt-pkg/configuration.h> #include <apt-pkg/error.h> +#include <apt-pkg/fileutl.h> #include <apt-pkg/gpgv.h> #include <apt-pkg/strutl.h> -#include <apt-pkg/fileutl.h> -#include "aptmethod.h" #include <ctype.h> #include <errno.h> @@ -16,11 +16,11 @@ #include <sys/wait.h> #include <unistd.h> -#include <array> #include <algorithm> -#include <sstream> -#include <iterator> +#include <array> #include <iostream> +#include <iterator> +#include <sstream> #include <string> #include <vector> diff --git a/methods/http.cc b/methods/http.cc index 9f5959548..9f01d15b3 100644 --- a/methods/http.cc +++ b/methods/http.cc @@ -13,40 +13,32 @@ socket. This provides ideal pipelining as in many cases all of the requests will fit into a single packet. The input socket is buffered the same way and fed into the fd for the file (may be a pipe in future). - - This double buffering provides fairly substantial transfer rates, - compared to wget the http method is about 4% faster. Most importantly, - when HTTP is compared with FTP as a protocol the speed difference is - huge. In tests over the internet from two sites to llug (via ATM) this - program got 230k/s sustained http transfer rates. FTP on the other - hand topped out at 170k/s. That combined with the time to setup the - FTP connection makes HTTP a vastly superior protocol. ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ #include <config.h> -#include <apt-pkg/fileutl.h> #include <apt-pkg/configuration.h> #include <apt-pkg/error.h> +#include <apt-pkg/fileutl.h> #include <apt-pkg/hashes.h> #include <apt-pkg/netrc.h> -#include <apt-pkg/strutl.h> #include <apt-pkg/proxy.h> +#include <apt-pkg/strutl.h> +#include <cstring> +#include <iostream> +#include <sstream> +#include <arpa/inet.h> +#include <errno.h> #include <stddef.h> +#include <stdio.h> #include <stdlib.h> #include <sys/select.h> -#include <cstring> #include <sys/stat.h> #include <sys/time.h> #include <unistd.h> -#include <stdio.h> -#include <errno.h> -#include <arpa/inet.h> -#include <iostream> -#include <sstream> #include "config.h" #include "connect.h" @@ -95,7 +87,7 @@ void CircleBuf::Reset() // --------------------------------------------------------------------- /* This fills up the buffer with as much data as is in the FD, assuming it is non-blocking.. */ -bool CircleBuf::Read(int Fd) +bool CircleBuf::Read(std::unique_ptr<MethodFd> const &Fd) { while (1) { @@ -126,11 +118,11 @@ bool CircleBuf::Read(int Fd) // Write the buffer segment ssize_t Res; if(CircleBuf::BwReadLimit) { - Res = read(Fd,Buf + (InP%Size), - BwReadMax > LeftRead() ? LeftRead() : BwReadMax); + Res = Fd->Read(Buf + (InP % Size), + BwReadMax > LeftRead() ? LeftRead() : BwReadMax); } else - Res = read(Fd,Buf + (InP%Size),LeftRead()); - + Res = Fd->Read(Buf + (InP % Size), LeftRead()); + if(Res > 0 && BwReadLimit > 0) CircleBuf::BwTickReadData += Res; @@ -193,7 +185,7 @@ void CircleBuf::FillOut() // CircleBuf::Write - Write from the buffer into a FD /*{{{*/ // --------------------------------------------------------------------- /* This empties the buffer into the FD. */ -bool CircleBuf::Write(int Fd) +bool CircleBuf::Write(std::unique_ptr<MethodFd> const &Fd) { while (1) { @@ -208,7 +200,7 @@ bool CircleBuf::Write(int Fd) // Write the buffer segment ssize_t Res; - Res = write(Fd,Buf + (OutP%Size),LeftWrite()); + Res = Fd->Write(Buf + (OutP % Size), LeftWrite()); if (Res == 0) return false; @@ -266,6 +258,15 @@ bool CircleBuf::WriteTillEl(string &Data,bool Single) return false; } /*}}}*/ +// CircleBuf::Write - Write from the buffer to a string /*{{{*/ +// --------------------------------------------------------------------- +/* This copies everything */ +bool CircleBuf::Write(string &Data) +{ + Data = std::string((char *)Buf + (OutP % Size), LeftWrite()); + OutP += LeftWrite(); + return true; +} // CircleBuf::Stats - Print out stats information /*{{{*/ // --------------------------------------------------------------------- /* */ @@ -287,38 +288,137 @@ CircleBuf::~CircleBuf() delete Hash; } +// UnwrapHTTPConnect - Does the HTTP CONNECT handshake /*{{{*/ +// --------------------------------------------------------------------- +/* Performs a TLS handshake on the socket */ +struct HttpConnectFd : public MethodFd +{ + std::unique_ptr<MethodFd> UnderlyingFd; + std::string Buffer; + + int Fd() APT_OVERRIDE { return UnderlyingFd->Fd(); } + + ssize_t Read(void *buf, size_t count) APT_OVERRIDE + { + if (!Buffer.empty()) + { + auto read = count < Buffer.size() ? count : Buffer.size(); + + memcpy(buf, Buffer.data(), read); + Buffer.erase(Buffer.begin(), Buffer.begin() + read); + return read; + } + + return UnderlyingFd->Read(buf, count); + } + ssize_t Write(void *buf, size_t count) APT_OVERRIDE + { + return UnderlyingFd->Write(buf, count); + } + + int Close() APT_OVERRIDE + { + return UnderlyingFd->Close(); + } + + bool HasPending() APT_OVERRIDE + { + return !Buffer.empty(); + } +}; + +bool UnwrapHTTPConnect(std::string Host, int Port, URI Proxy, std::unique_ptr<MethodFd> &Fd, + unsigned long Timeout, aptMethod *Owner) +{ + Owner->Status(_("Connecting to %s (%s)"), "HTTP proxy", URI::SiteOnly(Proxy).c_str()); + // The HTTP server expects a hostname with a trailing :port + std::stringstream Req; + std::string ProperHost; + + if (Host.find(':') != std::string::npos) + ProperHost = '[' + Proxy.Host + ']'; + else + ProperHost = Proxy.Host; + + // Build the connect + Req << "CONNECT " << Host << ":" << std::to_string(Port) << " HTTP/1.1\r\n"; + if (Proxy.Port != 0) + Req << "Host: " << ProperHost << ":" << std::to_string(Proxy.Port) << "\r\n"; + else + Req << "Host: " << ProperHost << "\r\n"; + ; + + maybe_add_auth(Proxy, _config->FindFile("Dir::Etc::netrc")); + if (Proxy.User.empty() == false || Proxy.Password.empty() == false) + Req << "Proxy-Authorization: Basic " + << Base64Encode(Proxy.User + ":" + Proxy.Password) << "\r\n"; + + Req << "User-Agent: " << Owner->ConfigFind("User-Agent", "Debian APT-HTTP/1.3 (" PACKAGE_VERSION ")") << "\r\n"; + + Req << "\r\n"; + + CircleBuf In(dynamic_cast<HttpMethod *>(Owner), 4096); + CircleBuf Out(dynamic_cast<HttpMethod *>(Owner), 4096); + std::string Headers; + + if (Owner->DebugEnabled() == true) + cerr << Req.str() << endl; + Out.Read(Req.str()); + + // Writing from proxy + while (Out.WriteSpace() > 0) + { + if (WaitFd(Fd->Fd(), true, Timeout) == false) + return _error->Errno("select", "Writing to proxy failed"); + if (Out.Write(Fd) == false) + return _error->Errno("write", "Writing to proxy failed"); + } + + while (In.ReadSpace() > 0) + { + if (WaitFd(Fd->Fd(), false, Timeout) == false) + return _error->Errno("select", "Reading from proxy failed"); + if (In.Read(Fd) == false) + return _error->Errno("read", "Reading from proxy failed"); + + if (In.WriteTillEl(Headers)) + break; + } + + if (Owner->DebugEnabled() == true) + cerr << Headers << endl; + + if (!(APT::String::Startswith(Headers, "HTTP/1.0 200") || APT::String::Startswith(Headers, "HTTP/1.1 200"))) + return _error->Error("Invalid response from proxy: %s", Headers.c_str()); + + if (In.WriteSpace() > 0) + { + // Maybe there is actual data already read, if so we need to buffer it + std::unique_ptr<HttpConnectFd> NewFd(new HttpConnectFd()); + In.Write(NewFd->Buffer); + NewFd->UnderlyingFd = std::move(Fd); + Fd = std::move(NewFd); + } + + return true; +} + /*}}}*/ + // HttpServerState::HttpServerState - Constructor /*{{{*/ HttpServerState::HttpServerState(URI Srv,HttpMethod *Owner) : ServerState(Srv, Owner), In(Owner, 64*1024), Out(Owner, 4*1024) { TimeOut = Owner->ConfigFindI("Timeout", TimeOut); + ServerFd = MethodFd::FromFd(-1); Reset(); } /*}}}*/ // HttpServerState::Open - Open a connection to the server /*{{{*/ // --------------------------------------------------------------------- /* This opens a connection to the server. */ -static bool TalkToSocksProxy(int const ServerFd, std::string const &Proxy, - char const * const type, bool const ReadWrite, uint8_t * const ToFrom, - unsigned int const Size, unsigned int const Timeout) -{ - if (WaitFd(ServerFd, ReadWrite, Timeout) == false) - return _error->Error("Waiting for the SOCKS proxy %s to %s timed out", URI::SiteOnly(Proxy).c_str(), type); - if (ReadWrite == false) - { - if (FileFd::Read(ServerFd, ToFrom, Size) == false) - return _error->Error("Reading the %s from SOCKS proxy %s failed", type, URI::SiteOnly(Proxy).c_str()); - } - else - { - if (FileFd::Write(ServerFd, ToFrom, Size) == false) - return _error->Error("Writing the %s to SOCKS proxy %s failed", type, URI::SiteOnly(Proxy).c_str()); - } - return true; -} bool HttpServerState::Open() { // Use the already open connection if possible. - if (ServerFd != -1) + if (ServerFd->Fd() != -1) return true; Close(); @@ -360,165 +460,17 @@ bool HttpServerState::Open() if (Proxy.empty() == false) Owner->AddProxyAuth(Proxy, ServerName); + bool tls = (ServerName.Access == "https" || APT::String::Endswith(ServerName.Access, "+https")); + auto const DefaultService = tls ? "https" : "http"; + auto const DefaultPort = tls ? 443 : 80; if (Proxy.Access == "socks5h") { if (Connect(Proxy.Host, Proxy.Port, "socks", 1080, ServerFd, TimeOut, Owner) == false) return false; - /* We implement a very basic SOCKS5 client here complying mostly to RFC1928 expect - * for not offering GSSAPI auth which is a must (we only do no or user/pass auth). - * We also expect the SOCKS5 server to do hostname lookup (aka socks5h) */ - std::string const ProxyInfo = URI::SiteOnly(Proxy); - Owner->Status(_("Connecting to %s (%s)"),"SOCKS5h proxy",ProxyInfo.c_str()); - auto const Timeout = Owner->ConfigFindI("TimeOut", 120); - #define APT_WriteOrFail(TYPE, DATA, LENGTH) if (TalkToSocksProxy(ServerFd, ProxyInfo, TYPE, true, DATA, LENGTH, Timeout) == false) return false - #define APT_ReadOrFail(TYPE, DATA, LENGTH) if (TalkToSocksProxy(ServerFd, ProxyInfo, TYPE, false, DATA, LENGTH, Timeout) == false) return false - if (ServerName.Host.length() > 255) - return _error->Error("Can't use SOCKS5h as hostname %s is too long!", ServerName.Host.c_str()); - if (Proxy.User.length() > 255 || Proxy.Password.length() > 255) - return _error->Error("Can't use user&pass auth as they are too long (%lu and %lu) for the SOCKS5!", Proxy.User.length(), Proxy.Password.length()); - if (Proxy.User.empty()) - { - uint8_t greeting[] = { 0x05, 0x01, 0x00 }; - APT_WriteOrFail("greet-1", greeting, sizeof(greeting)); - } - else - { - uint8_t greeting[] = { 0x05, 0x02, 0x00, 0x02 }; - APT_WriteOrFail("greet-2", greeting, sizeof(greeting)); - } - uint8_t greeting[2]; - APT_ReadOrFail("greet back", greeting, sizeof(greeting)); - if (greeting[0] != 0x05) - return _error->Error("SOCKS proxy %s greets back with wrong version: %d", ProxyInfo.c_str(), greeting[0]); - if (greeting[1] == 0x00) - ; // no auth has no method-dependent sub-negotiations - else if (greeting[1] == 0x02) - { - if (Proxy.User.empty()) - return _error->Error("SOCKS proxy %s negotiated user&pass auth, but we had not offered it!", ProxyInfo.c_str()); - // user&pass auth sub-negotiations are defined by RFC1929 - std::vector<uint8_t> auth = {{ 0x01, static_cast<uint8_t>(Proxy.User.length()) }}; - std::copy(Proxy.User.begin(), Proxy.User.end(), std::back_inserter(auth)); - auth.push_back(static_cast<uint8_t>(Proxy.Password.length())); - std::copy(Proxy.Password.begin(), Proxy.Password.end(), std::back_inserter(auth)); - APT_WriteOrFail("user&pass auth", auth.data(), auth.size()); - uint8_t authstatus[2]; - APT_ReadOrFail("auth report", authstatus, sizeof(authstatus)); - if (authstatus[0] != 0x01) - return _error->Error("SOCKS proxy %s auth status response with wrong version: %d", ProxyInfo.c_str(), authstatus[0]); - if (authstatus[1] != 0x00) - return _error->Error("SOCKS proxy %s reported authorization failure: username or password incorrect? (%d)", ProxyInfo.c_str(), authstatus[1]); - } - else - return _error->Error("SOCKS proxy %s greets back having not found a common authorization method: %d", ProxyInfo.c_str(), greeting[1]); - union { uint16_t * i; uint8_t * b; } portu; - uint16_t port = htons(static_cast<uint16_t>(ServerName.Port == 0 ? 80 : ServerName.Port)); - portu.i = &port; - std::vector<uint8_t> request = {{ 0x05, 0x01, 0x00, 0x03, static_cast<uint8_t>(ServerName.Host.length()) }}; - std::copy(ServerName.Host.begin(), ServerName.Host.end(), std::back_inserter(request)); - request.push_back(portu.b[0]); - request.push_back(portu.b[1]); - APT_WriteOrFail("request", request.data(), request.size()); - uint8_t response[4]; - APT_ReadOrFail("first part of response", response, sizeof(response)); - if (response[0] != 0x05) - return _error->Error("SOCKS proxy %s response with wrong version: %d", ProxyInfo.c_str(), response[0]); - if (response[2] != 0x00) - return _error->Error("SOCKS proxy %s has unexpected non-zero reserved field value: %d", ProxyInfo.c_str(), response[2]); - std::string bindaddr; - if (response[3] == 0x01) // IPv4 address - { - uint8_t ip4port[6]; - APT_ReadOrFail("IPv4+Port of response", ip4port, sizeof(ip4port)); - portu.b[0] = ip4port[4]; - portu.b[1] = ip4port[5]; - port = ntohs(*portu.i); - strprintf(bindaddr, "%d.%d.%d.%d:%d", ip4port[0], ip4port[1], ip4port[2], ip4port[3], port); - } - else if (response[3] == 0x03) // hostname - { - uint8_t namelength; - APT_ReadOrFail("hostname length of response", &namelength, 1); - uint8_t hostname[namelength + 2]; - APT_ReadOrFail("hostname of response", hostname, sizeof(hostname)); - portu.b[0] = hostname[namelength]; - portu.b[1] = hostname[namelength + 1]; - port = ntohs(*portu.i); - hostname[namelength] = '\0'; - strprintf(bindaddr, "%s:%d", hostname, port); - } - else if (response[3] == 0x04) // IPv6 address - { - uint8_t ip6port[18]; - APT_ReadOrFail("IPv6+port of response", ip6port, sizeof(ip6port)); - portu.b[0] = ip6port[16]; - portu.b[1] = ip6port[17]; - port = ntohs(*portu.i); - strprintf(bindaddr, "[%02X%02X:%02X%02X:%02X%02X:%02X%02X:%02X%02X:%02X%02X:%02X%02X:%02X%02X]:%d", - ip6port[0], ip6port[1], ip6port[2], ip6port[3], ip6port[4], ip6port[5], ip6port[6], ip6port[7], - ip6port[8], ip6port[9], ip6port[10], ip6port[11], ip6port[12], ip6port[13], ip6port[14], ip6port[15], - port); - } - else - return _error->Error("SOCKS proxy %s destination address is of unknown type: %d", - ProxyInfo.c_str(), response[3]); - if (response[1] != 0x00) - { - char const * errstr = nullptr; - auto errcode = response[1]; - // Tor error reporting can be a bit arcane, lets try to detect & fix it up - if (bindaddr == "0.0.0.0:0") - { - auto const lastdot = ServerName.Host.rfind('.'); - if (lastdot == std::string::npos || ServerName.Host.substr(lastdot) != ".onion") - ; - else if (errcode == 0x01) - { - auto const prevdot = ServerName.Host.rfind('.', lastdot - 1); - if (lastdot == 16 && prevdot == std::string::npos) - ; // valid .onion address - else if (prevdot != std::string::npos && (lastdot - prevdot) == 17) - ; // valid .onion address with subdomain(s) - else - { - errstr = "Invalid hostname: onion service name must be 16 characters long"; - Owner->SetFailReason("SOCKS"); - } - } - // in all likelihood the service is either down or the address has - // a typo and so "Host unreachable" is the better understood error - // compared to the technically correct "TLL expired". - else if (errcode == 0x06) - errcode = 0x04; - } - if (errstr == nullptr) - { - switch (errcode) - { - case 0x01: errstr = "general SOCKS server failure"; Owner->SetFailReason("SOCKS"); break; - case 0x02: errstr = "connection not allowed by ruleset"; Owner->SetFailReason("SOCKS"); break; - case 0x03: errstr = "Network unreachable"; Owner->SetFailReason("ConnectionTimedOut"); break; - case 0x04: errstr = "Host unreachable"; Owner->SetFailReason("ConnectionTimedOut"); break; - case 0x05: errstr = "Connection refused"; Owner->SetFailReason("ConnectionRefused"); break; - case 0x06: errstr = "TTL expired"; Owner->SetFailReason("Timeout"); break; - case 0x07: errstr = "Command not supported"; Owner->SetFailReason("SOCKS"); break; - case 0x08: errstr = "Address type not supported"; Owner->SetFailReason("SOCKS"); break; - default: errstr = "Unknown error"; Owner->SetFailReason("SOCKS"); break; - } - } - return _error->Error("SOCKS proxy %s could not connect to %s (%s) due to: %s (%d)", - ProxyInfo.c_str(), ServerName.Host.c_str(), bindaddr.c_str(), errstr, response[1]); - } - else if (Owner->DebugEnabled()) - ioprintf(std::clog, "http: SOCKS proxy %s connection established to %s (%s)\n", - ProxyInfo.c_str(), ServerName.Host.c_str(), bindaddr.c_str()); - - if (WaitFd(ServerFd, true, Timeout) == false) - return _error->Error("SOCKS proxy %s reported connection to %s (%s), but timed out", - ProxyInfo.c_str(), ServerName.Host.c_str(), bindaddr.c_str()); - #undef APT_ReadOrFail - #undef APT_WriteOrFail + if (UnwrapSocks(ServerName.Host, ServerName.Port == 0 ? DefaultPort : ServerName.Port, + Proxy, ServerFd, Owner->ConfigFindI("TimeOut", 120), Owner) == false) + return false; } else { @@ -531,16 +483,28 @@ bool HttpServerState::Open() Port = ServerName.Port; Host = ServerName.Host; } - else if (Proxy.Access != "http") + else if (Proxy.Access != "http" && Proxy.Access != "https") return _error->Error("Unsupported proxy configured: %s", URI::SiteOnly(Proxy).c_str()); else { if (Proxy.Port != 0) Port = Proxy.Port; Host = Proxy.Host; + + if (Proxy.Access == "https" && Port == 0) + Port = 443; } - return Connect(Host,Port,"http",80,ServerFd,TimeOut,Owner); + if (!Connect(Host, Port, DefaultService, DefaultPort, ServerFd, TimeOut, Owner)) + return false; + if (Host == Proxy.Host && Proxy.Access == "https" && UnwrapTLS(Proxy.Host, ServerFd, TimeOut, Owner) == false) + return false; + if (Host == Proxy.Host && tls && UnwrapHTTPConnect(ServerName.Host, ServerName.Port == 0 ? DefaultPort : ServerName.Port, Proxy, ServerFd, Owner->ConfigFindI("TimeOut", 120), Owner) == false) + return false; } + + if (tls && UnwrapTLS(ServerName.Host, ServerFd, TimeOut, Owner) == false) + return false; + return true; } /*}}}*/ @@ -549,8 +513,7 @@ bool HttpServerState::Open() /* */ bool HttpServerState::Close() { - close(ServerFd); - ServerFd = -1; + ServerFd->Close(); return true; } /*}}}*/ @@ -672,7 +635,7 @@ bool HttpServerState::WriteResponse(const std::string &Data) /*{{{*/ /*}}}*/ APT_PURE bool HttpServerState::IsOpen() /*{{{*/ { - return (ServerFd != -1); + return (ServerFd->Fd() != -1); } /*}}}*/ bool HttpServerState::InitHashes(HashStringList const &ExpectedHashes) /*{{{*/ @@ -685,7 +648,7 @@ bool HttpServerState::InitHashes(HashStringList const &ExpectedHashes) /*{{{*/ void HttpServerState::Reset() /*{{{*/ { ServerState::Reset(); - ServerFd = -1; + ServerFd->Close(); } /*}}}*/ @@ -710,7 +673,7 @@ bool HttpServerState::Die(RequestState &Req) SetNonBlock(Req.File.Fd(),false); while (In.WriteSpace() == true) { - if (In.Write(Req.File.Fd()) == false) + if (In.Write(MethodFd::FromFd(Req.File.Fd())) == false) return _error->Errno("write",_("Error writing to the file")); // Done @@ -762,7 +725,7 @@ bool HttpServerState::Flush(FileFd * const File) while (In.WriteSpace() == true) { - if (In.Write(File->Fd()) == false) + if (In.Write(MethodFd::FromFd(File->Fd())) == false) return _error->Errno("write",_("Error writing to file")); if (In.IsLimit() == true) return true; @@ -781,38 +744,45 @@ bool HttpServerState::Flush(FileFd * const File) bool HttpServerState::Go(bool ToFile, RequestState &Req) { // Server has closed the connection - if (ServerFd == -1 && (In.WriteSpace() == false || - ToFile == false)) + if (ServerFd->Fd() == -1 && (In.WriteSpace() == false || + ToFile == false)) return false; - + + // Handle server IO + if (ServerFd->HasPending() && In.ReadSpace() == true) + { + errno = 0; + if (In.Read(ServerFd) == false) + return Die(Req); + } + fd_set rfds,wfds; FD_ZERO(&rfds); FD_ZERO(&wfds); /* Add the server. We only send more requests if the connection will be persisting */ - if (Out.WriteSpace() == true && ServerFd != -1 - && Persistent == true) - FD_SET(ServerFd,&wfds); - if (In.ReadSpace() == true && ServerFd != -1) - FD_SET(ServerFd,&rfds); - + if (Out.WriteSpace() == true && ServerFd->Fd() != -1 && Persistent == true) + FD_SET(ServerFd->Fd(), &wfds); + if (In.ReadSpace() == true && ServerFd->Fd() != -1) + FD_SET(ServerFd->Fd(), &rfds); + // Add the file - int FileFD = -1; + auto FileFD = MethodFd::FromFd(-1); if (Req.File.IsOpen()) - FileFD = Req.File.Fd(); - - if (In.WriteSpace() == true && ToFile == true && FileFD != -1) - FD_SET(FileFD,&wfds); + FileFD = MethodFd::FromFd(Req.File.Fd()); + + if (In.WriteSpace() == true && ToFile == true && FileFD->Fd() != -1) + FD_SET(FileFD->Fd(), &wfds); // Add stdin if (Owner->ConfigFindB("DependOnSTDIN", true) == true) FD_SET(STDIN_FILENO,&rfds); // Figure out the max fd - int MaxFd = FileFD; - if (MaxFd < ServerFd) - MaxFd = ServerFd; + int MaxFd = FileFD->Fd(); + if (MaxFd < ServerFd->Fd()) + MaxFd = ServerFd->Fd(); // Select struct timeval tv; @@ -833,14 +803,14 @@ bool HttpServerState::Go(bool ToFile, RequestState &Req) } // Handle server IO - if (ServerFd != -1 && FD_ISSET(ServerFd,&rfds)) + if (ServerFd->Fd() != -1 && FD_ISSET(ServerFd->Fd(), &rfds)) { errno = 0; if (In.Read(ServerFd) == false) return Die(Req); } - - if (ServerFd != -1 && FD_ISSET(ServerFd,&wfds)) + + if (ServerFd->Fd() != -1 && FD_ISSET(ServerFd->Fd(), &wfds)) { errno = 0; if (Out.Write(ServerFd) == false) @@ -848,7 +818,7 @@ bool HttpServerState::Go(bool ToFile, RequestState &Req) } // Send data to the file - if (FileFD != -1 && FD_ISSET(FileFD,&wfds)) + if (FileFD->Fd() != -1 && FD_ISSET(FileFD->Fd(), &wfds)) { if (In.Write(FileFD) == false) return _error->Errno("write",_("Error writing to output file")); @@ -897,7 +867,7 @@ void HttpMethod::SendReq(FetchItem *Itm) but while its a must for all servers to accept absolute URIs, it is assumed clients will sent an absolute path for non-proxies */ std::string requesturi; - if (Server->Proxy.Access != "http" || Server->Proxy.empty() == true || Server->Proxy.Host.empty()) + if ((Server->Proxy.Access != "http" && Server->Proxy.Access != "https") || APT::String::Endswith(Uri.Access, "https") || Server->Proxy.empty() == true || Server->Proxy.Host.empty()) requesturi = Uri.Path; else requesturi = Uri; @@ -946,8 +916,8 @@ void HttpMethod::SendReq(FetchItem *Itm) else if (Itm->LastModified != 0) Req << "If-Modified-Since: " << TimeRFC1123(Itm->LastModified, false).c_str() << "\r\n"; - if (Server->Proxy.Access == "http" && - (Server->Proxy.User.empty() == false || Server->Proxy.Password.empty() == false)) + if ((Server->Proxy.Access == "http" || Server->Proxy.Access == "https") && + (Server->Proxy.User.empty() == false || Server->Proxy.Password.empty() == false)) Req << "Proxy-Authorization: Basic " << Base64Encode(Server->Proxy.User + ":" + Server->Proxy.Password) << "\r\n"; @@ -1009,6 +979,11 @@ HttpMethod::HttpMethod(std::string &&pProg) : BaseHttpMethod(pProg.c_str(), "1.2 addName = "http"; auto const plus = Binary.find('+'); if (plus != std::string::npos) + { + auto name2 = Binary.substr(plus + 1); + if (std::find(methodNames.begin(), methodNames.end(), name2) == methodNames.end()) + addName = std::move(name2); addName = Binary.substr(0, plus); + } } /*}}}*/ diff --git a/methods/http.h b/methods/http.h index c79a6454e..7a763675c 100644 --- a/methods/http.h +++ b/methods/http.h @@ -13,11 +13,13 @@ #include <apt-pkg/strutl.h> +#include <iostream> +#include <memory> #include <string> #include <sys/time.h> -#include <iostream> #include "basehttp.h" +#include "connect.h" using std::cout; using std::endl; @@ -66,11 +68,12 @@ class CircleBuf unsigned long long TotalWriten; // Read data in - bool Read(int Fd); + bool Read(std::unique_ptr<MethodFd> const &Fd); bool Read(std::string const &Data); // Write data out - bool Write(int Fd); + bool Write(std::unique_ptr<MethodFd> const &Fd); + bool Write(std::string &Data); bool WriteTillEl(std::string &Data,bool Single = false); // Control the write limit @@ -90,12 +93,14 @@ class CircleBuf ~CircleBuf(); }; +bool UnwrapHTTPConnect(std::string To, int Port, URI Proxy, std::unique_ptr<MethodFd> &Fd, unsigned long Timeout, aptMethod *Owner); + struct HttpServerState: public ServerState { // This is the connection itself. Output is data FROM the server CircleBuf In; CircleBuf Out; - int ServerFd; + std::unique_ptr<MethodFd> ServerFd; protected: virtual bool ReadHeaderLines(std::string &Data) APT_OVERRIDE; diff --git a/methods/http_main.cc b/methods/http_main.cc index 1e56044b7..792b5e22f 100644 --- a/methods/http_main.cc +++ b/methods/http_main.cc @@ -1,6 +1,6 @@ #include <config.h> -#include <apt-pkg/fileutl.h> #include <apt-pkg/error.h> +#include <apt-pkg/fileutl.h> #include <signal.h> #include "http.h" @@ -11,7 +11,7 @@ int main(int, const char *argv[]) // closes the connection (this is dealt with via ServerDie()) signal(SIGPIPE, SIG_IGN); std::string Binary = flNotDir(argv[0]); - if (Binary.find('+') == std::string::npos && Binary != "http") + if (Binary.find('+') == std::string::npos && Binary != "https" && Binary != "http") Binary.append("+http"); return HttpMethod(std::move(Binary)).Loop(); } diff --git a/methods/mirror.cc b/methods/mirror.cc index 71faaf591..b0da5c530 100644 --- a/methods/mirror.cc +++ b/methods/mirror.cc @@ -10,32 +10,35 @@ // Include Files /*{{{*/ #include <config.h> -#include <apt-pkg/aptconfiguration.h> -#include <apt-pkg/fileutl.h> #include <apt-pkg/acquire-item.h> #include <apt-pkg/acquire.h> -#include <apt-pkg/error.h> -#include <apt-pkg/sourcelist.h> +#include <apt-pkg/aptconfiguration.h> #include <apt-pkg/configuration.h> +#include <apt-pkg/error.h> +#include <apt-pkg/fileutl.h> #include <apt-pkg/metaindex.h> +#include <apt-pkg/sourcelist.h> #include <apt-pkg/strutl.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> #include <algorithm> -#include <iostream> #include <fstream> +#include <iostream> + +#include <dirent.h> +#include <fcntl.h> +#include <stdlib.h> +#include <string.h> #include <sys/stat.h> +#include <sys/types.h> #include <sys/utsname.h> -#include <dirent.h> +#include <unistd.h> using namespace std; -#include<sstream> +#include <sstream> -#include "mirror.h" #include "http.h" +#include "mirror.h" #include <apti18n.h> /*}}}*/ @@ -89,16 +92,12 @@ bool MirrorMethod::Clean(string Dir) pkgSourceList list; list.ReadMainList(); - DIR *D = opendir(Dir.c_str()); - if (D == 0) - return _error->Errno("opendir",_("Unable to read %s"),Dir.c_str()); - - string StartDir = SafeGetCWD(); - if (chdir(Dir.c_str()) != 0) - { - closedir(D); - return _error->Errno("chdir",_("Unable to change to %s"),Dir.c_str()); - } + int const dirfd = open(Dir.c_str(), O_RDONLY | O_DIRECTORY | O_CLOEXEC); + if (dirfd == -1) + return _error->Errno("open",_("Unable to read %s"), Dir.c_str()); + DIR * const D = fdopendir(dirfd); + if (D == nullptr) + return _error->Errno("fdopendir",_("Unable to read %s"),Dir.c_str()); for (struct dirent *Dir = readdir(D); Dir != 0; Dir = readdir(D)) { @@ -122,12 +121,9 @@ bool MirrorMethod::Clean(string Dir) } // nothing found, nuke it if (I == list.end()) - RemoveFile("mirror", Dir->d_name); + RemoveFileAt("mirror", dirfd, Dir->d_name); } - closedir(D); - if (chdir(StartDir.c_str()) != 0) - return _error->Errno("chdir",_("Unable to change to %s"),StartDir.c_str()); return true; } diff --git a/methods/rfc2553emu.cc b/methods/rfc2553emu.cc index 372882769..13f79391a 100644 --- a/methods/rfc2553emu.cc +++ b/methods/rfc2553emu.cc @@ -16,12 +16,12 @@ /*}}}*/ #include <config.h> -#include <stdlib.h> +#include "rfc2553emu.h" #include <arpa/inet.h> #include <netinet/in.h> -#include <string.h> #include <stdio.h> -#include "rfc2553emu.h" +#include <stdlib.h> +#include <string.h> #ifndef HAVE_GETADDRINFO // getaddrinfo - Resolve a hostname /*{{{*/ diff --git a/methods/rfc2553emu.h b/methods/rfc2553emu.h index ad7ddf48a..462bfe26f 100644 --- a/methods/rfc2553emu.h +++ b/methods/rfc2553emu.h @@ -23,8 +23,8 @@ #define RFC2553EMU_H #include <netdb.h> -#include <sys/types.h> #include <sys/socket.h> +#include <sys/types.h> // Autosense getaddrinfo #if defined(AI_PASSIVE) && defined(EAI_NONAME) diff --git a/methods/rred.cc b/methods/rred.cc index 2e5008d46..3a3b20286 100644 --- a/methods/rred.cc +++ b/methods/rred.cc @@ -7,19 +7,19 @@ #include <config.h> -#include <apt-pkg/init.h> -#include <apt-pkg/fileutl.h> +#include "aptmethod.h" +#include <apt-pkg/configuration.h> #include <apt-pkg/error.h> -#include <apt-pkg/strutl.h> +#include <apt-pkg/fileutl.h> #include <apt-pkg/hashes.h> -#include <apt-pkg/configuration.h> -#include "aptmethod.h" +#include <apt-pkg/init.h> +#include <apt-pkg/strutl.h> -#include <stddef.h> #include <iostream> -#include <string> #include <list> +#include <string> #include <vector> +#include <stddef.h> #include <assert.h> #include <errno.h> diff --git a/methods/rsh.cc b/methods/rsh.cc index 7b8af6f9b..69a51a13d 100644 --- a/methods/rsh.cc +++ b/methods/rsh.cc @@ -13,22 +13,22 @@ // Include Files /*{{{*/ #include <config.h> +#include <apt-pkg/configuration.h> #include <apt-pkg/error.h> #include <apt-pkg/fileutl.h> #include <apt-pkg/hashes.h> -#include <apt-pkg/configuration.h> #include <apt-pkg/strutl.h> +#include "rsh.h" +#include <errno.h> +#include <signal.h> +#include <stdarg.h> +#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include <sys/time.h> #include <unistd.h> -#include <signal.h> -#include <stdio.h> -#include <errno.h> -#include <stdarg.h> -#include "rsh.h" #include <apti18n.h> /*}}}*/ diff --git a/methods/store.cc b/methods/store.cc index 1faaa4fb4..d54a14397 100644 --- a/methods/store.cc +++ b/methods/store.cc @@ -13,19 +13,19 @@ // Include Files /*{{{*/ #include <config.h> +#include "aptmethod.h" +#include <apt-pkg/aptconfiguration.h> #include <apt-pkg/configuration.h> #include <apt-pkg/error.h> #include <apt-pkg/fileutl.h> #include <apt-pkg/hashes.h> #include <apt-pkg/strutl.h> -#include <apt-pkg/aptconfiguration.h> -#include "aptmethod.h" +#include <string> +#include <vector> #include <string.h> #include <sys/stat.h> #include <sys/time.h> -#include <string> -#include <vector> #include <apti18n.h> /*}}}*/ diff --git a/po/CMakeLists.txt b/po/CMakeLists.txt index 258c9b050..743b2f0eb 100644 --- a/po/CMakeLists.txt +++ b/po/CMakeLists.txt @@ -10,12 +10,18 @@ apt_add_translation_domain( EXCLUDE_LANGUAGES ${languages_excluded} ) +if (HAVE_CURL) + set(curl_methods curl) +else() + set(curl_methods) +endif() + apt_add_translation_domain( DOMAIN apt TARGETS apt apt-cache apt-get apt-config apt-cdrom apt-helper apt-mark apt-private # Methods - file copy store gpgv cdrom http https ftp rred rsh mirror + file copy store gpgv cdrom http ${curl_methods} ftp rred rsh mirror SCRIPTS ../dselect/install ../dselect/update EXCLUDE_LANGUAGES ${languages_excluded} ) diff --git a/po/apt-all.pot b/po/apt-all.pot index b9169ee9a..af965e710 100644 --- a/po/apt-all.pot +++ b/po/apt-all.pot @@ -5,9 +5,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: apt 1.4.6\n" +"Project-Id-Version: apt 1.5~alpha4\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-06-01 10:51+0200\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -211,7 +211,7 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "" #: apt-pkg/acquire-item.cc @@ -289,6 +289,13 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " "architecture '%s'" msgstr "" @@ -296,8 +303,8 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" #: apt-pkg/acquire-item.cc @@ -324,6 +331,31 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -409,12 +441,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "" -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -595,6 +621,11 @@ msgstr "" #: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "" + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "" @@ -1556,6 +1587,12 @@ msgid "" "in the drive '%s' and press [Enter]\n" msgstr "" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "" @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 1.0.5\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:41+0100\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2006-10-20 21:28+0300\n" "Last-Translator: Ossama M. Khayat <okhayat@yahoo.com>\n" "Language-Team: Arabic <support@arabeyes.org>\n" @@ -214,7 +214,7 @@ msgstr "المسار %s طويل جداً" #: apt-pkg/acquire-item.cc #, fuzzy, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "المسار %s طويل جداً" #: apt-pkg/acquire-item.cc @@ -295,6 +295,13 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " "architecture '%s'" msgstr "" @@ -302,8 +309,8 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" #: apt-pkg/acquire-item.cc @@ -330,6 +337,31 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -415,12 +447,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "نظام الØزم '%s' غير مدعوم" -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -603,6 +629,11 @@ msgstr "" #: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "" + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "" @@ -1571,6 +1602,12 @@ msgstr "" " '%s'\n" "ÙÙŠ السوّاقة '%s' وضغط Ù…ÙØªØ§Ø Ø§Ù„Ø¥Ø¯Ø®Ø§Ù„\n" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "تصØÙŠØ Ø§Ù„Ù…Ø¹ØªÙ…Ø¯Ø§Øª..." @@ -4,7 +4,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 0.7.18\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:41+0100\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2010-10-02 23:35+0100\n" "Last-Translator: Iñigo Varela <ivarela@softastur.org>\n" "Language-Team: Asturian (ast)\n" @@ -210,7 +210,7 @@ msgstr "El direutorio %s ta desviáu" #: apt-pkg/acquire-item.cc #, fuzzy, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "El direutorio %s ta desviáu" #: apt-pkg/acquire-item.cc @@ -292,6 +292,13 @@ msgstr "Fallu GPG: %s: %s" #: apt-pkg/acquire-item.cc #, c-format msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " "architecture '%s'" msgstr "" @@ -299,8 +306,8 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" #: apt-pkg/acquire-item.cc @@ -327,6 +334,31 @@ msgstr "Conflictu de distribución: %s (esperábase %s pero obtúvose %s)" #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -416,12 +448,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "La triba de ficheru d'indiz '%s' nun ta sofitada" -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "Nun se pudo cambiar a %s" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -620,6 +646,11 @@ msgstr "Les entraes de la llista d'orÃxenes pa esti discu son:\n" #: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "Nun se pudo cambiar a %s" + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "Nun pudo lleese %s." @@ -1620,6 +1651,12 @@ msgstr "" " '%s'\n" "na unidá '%s' y calca Intro\n" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "Iguando dependencies..." @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 0.7.21\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:41+0100\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2012-06-25 17:23+0300\n" "Last-Translator: Damyan Ivanov <dmn@debian.org>\n" "Language-Team: Bulgarian <dict@fsa-bg.org>\n" @@ -216,7 +216,7 @@ msgstr "ДиректориÑта %s е отклонена" #: apt-pkg/acquire-item.cc #, fuzzy, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "ДиректориÑта %s е отклонена" #: apt-pkg/acquire-item.cc @@ -298,6 +298,13 @@ msgstr "Грешка от GPG: %s: %s" #: apt-pkg/acquire-item.cc #, c-format msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " "architecture '%s'" msgstr "" @@ -305,11 +312,9 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" -"Ðе може да Ñе открие елемент „%s“ във файла Release (объркан ред в sources." -"list или повреден файл)" #: apt-pkg/acquire-item.cc #, c-format @@ -337,6 +342,31 @@ msgstr "Конфликт в диÑтрибуциÑта: %s (очаквана: %s #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -425,12 +455,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "Ðе Ñе поддържа индекÑен файл от типа „%s“" -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "ÐеуÑпех при преминаването в %s" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -633,6 +657,11 @@ msgstr "ЗапиÑите в ÑпиÑъка Ñ Ð¸Ð·Ñ‚Ð¾Ñ‡Ð½Ð¸Ñ†Ð¸ за този Ð #: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "ÐеуÑпех при преминаването в %s" + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "ÐеуÑпех при получаването на атрибути на %s." @@ -1651,6 +1680,12 @@ msgstr "" " „%s“\n" "в уÑтройÑтвото „%s“ и натиÑнете „Enter“\n" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "Коригиране на завиÑимоÑтите..." @@ -3828,6 +3863,13 @@ msgstr "Връзката прекъÑна преждевременно" msgid "Empty files can't be valid archives" msgstr "Празни файлове не могат да бъдат валидни архиви" +#~ msgid "" +#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list " +#~ "entry or malformed file)" +#~ msgstr "" +#~ "Ðе може да Ñе открие елемент „%s“ във файла Release (объркан ред в " +#~ "sources.list или повреден файл)" + #~ msgid "Unmet dependencies. Try using --fix-broken." #~ msgstr "Ðеудовлетворени завиÑимоÑти. Опитайте Ñ â€ž--fix-broken“." @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 0.5.26\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:41+0100\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2004-05-06 15:25+0100\n" "Last-Translator: Safir Å ećerović <sapphire@linux.org.ba>\n" "Language-Team: Bosnian <lokal@lugbih.org>\n" @@ -212,7 +212,7 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "" #: apt-pkg/acquire-item.cc @@ -291,6 +291,13 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " "architecture '%s'" msgstr "" @@ -298,8 +305,8 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" #: apt-pkg/acquire-item.cc @@ -326,6 +333,31 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -411,12 +443,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "" -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -600,6 +626,11 @@ msgstr "" #: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "" + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "" @@ -1566,6 +1597,12 @@ msgid "" "in the drive '%s' and press [Enter]\n" msgstr "" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "Ispravljam zavisnosti..." @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 1.4~beta1\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:41+0100\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2016-12-05 21:09+0100\n" "Last-Translator: Oriol Debian <oriol.debian@gmail.com>\n" "Language-Team: Catalan <debian-l10n-catalan@lists.debian.org>\n" @@ -221,7 +221,7 @@ msgstr "El directori «%s» ja no està signat." #: apt-pkg/acquire-item.cc #, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "El directori «%s» ja no té fitxer de publicació «Release»." #: apt-pkg/acquire-item.cc @@ -306,6 +306,18 @@ msgid "GPG error: %s: %s" msgstr "S'ha produït un error amb el GPG: %s: %s" #: apt-pkg/acquire-item.cc +#, fuzzy, c-format +#| msgid "" +#| "Skipping acquire of configured file '%s' as repository '%s' doesn't " +#| "support architecture '%s'" +msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" +"S'omet l'ús del fitxer configurat «%s» ja que el repositori «%s» no admet " +"l'arquitectura «%s»" + +#: apt-pkg/acquire-item.cc #, c-format msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " @@ -315,13 +327,16 @@ msgstr "" "l'arquitectura «%s»" #: apt-pkg/acquire-item.cc -#, c-format +#, fuzzy, c-format +#| msgid "" +#| "Skipping acquire of configured file '%s' as repository '%s' doesn't " +#| "support architecture '%s'" msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" -"No s'ha trobat l'entrada «%s» esperada, al fitxer Release (entrada errònia " -"al sources.list o fitxer malformat)" +"S'omet l'ús del fitxer configurat «%s» ja que el repositori «%s» no admet " +"l'arquitectura «%s»" #: apt-pkg/acquire-item.cc #, c-format @@ -351,6 +366,31 @@ msgstr "Distribució en conflicte: %s (s'esperava %s però s'ha obtingut %s)" #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -448,12 +488,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "No està suportada la neteja de «%s» " -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "No es pot canviar a %s" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -657,6 +691,11 @@ msgstr "Les entrades de la llista de fonts per a aquest disc són:\n" #: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "No es pot canviar a %s" + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "No es pot veure l'estat de %s." @@ -1680,6 +1719,12 @@ msgstr "" " «%s»\n" "en la unitat «%s» i premeu [Intro]\n" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "S'estan corregint les dependències…" @@ -3907,6 +3952,13 @@ msgstr "La connexió s'ha tancat prematurament" msgid "Empty files can't be valid archives" msgstr "Els fitxers buits no poden ser arxius và lids" +#~ msgid "" +#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list " +#~ "entry or malformed file)" +#~ msgstr "" +#~ "No s'ha trobat l'entrada «%s» esperada, al fitxer Release (entrada " +#~ "errònia al sources.list o fitxer malformat)" + #~ msgid "Unmet dependencies. Try using --fix-broken." #~ msgstr "Dependències sense satisfer. Proveu-ho emprant --fix-broken." @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 1.4.2\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:41+0100\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2017-05-06 11:08+0200\n" "Last-Translator: Miroslav Kure <kurem@debian.cz>\n" "Language-Team: Czech <debian-l10n-czech@lists.debian.org>\n" @@ -208,8 +208,8 @@ msgid "" "See apt-secure(8) manpage for repository creation and user configuration " "details." msgstr "" -"Podrobnosti o vytvářenà a nastavenà repositářů naleznete v manuálové " -"stránce apt-secure(8)." +"Podrobnosti o vytvářenà a nastavenà repositářů naleznete v manuálové stránce " +"apt-secure(8)." #: apt-pkg/acquire-item.cc #, c-format @@ -218,7 +218,7 @@ msgstr "Repositář „%s“ již nenà podepsán." #: apt-pkg/acquire-item.cc #, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "Repositář „%s“ již neobsahuje soubor Release." #: apt-pkg/acquire-item.cc @@ -300,6 +300,18 @@ msgid "GPG error: %s: %s" msgstr "Chyba GPG: %s: %s" #: apt-pkg/acquire-item.cc +#, fuzzy, c-format +#| msgid "" +#| "Skipping acquire of configured file '%s' as repository '%s' doesn't " +#| "support architecture '%s'" +msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" +"PÅ™eskakuje se staženà souboru „%s“, protože repositář „%s“ nepodporuje " +"architekturu „%s“" + +#: apt-pkg/acquire-item.cc #, c-format msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " @@ -309,13 +321,16 @@ msgstr "" "architekturu „%s“" #: apt-pkg/acquire-item.cc -#, c-format +#, fuzzy, c-format +#| msgid "" +#| "Skipping acquire of configured file '%s' as repository '%s' doesn't " +#| "support architecture '%s'" msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" -"V souboru Release nelze najÃt oÄekávanou položku „%s“ (chybný sources.list " -"nebo poruÅ¡ený soubor)" +"PÅ™eskakuje se staženà souboru „%s“, protože repositář „%s“ nepodporuje " +"architekturu „%s“" #: apt-pkg/acquire-item.cc #, c-format @@ -345,6 +360,31 @@ msgstr "Konfliktnà distribuce: %s (oÄekáváno %s, obdrženo %s)" #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -435,12 +475,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "VyÄiÅ¡tÄ›nà %s nenà podporováno" -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "Nelze pÅ™ejÃt do %s" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -632,6 +666,11 @@ msgstr "Seznamy zdrojů na tomto disku jsou:\n" #: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "Nelze pÅ™ejÃt do %s" + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "Nebylo možno vyhodnotit %s." @@ -1039,7 +1078,6 @@ msgstr "" "Release soubor %s neobsahuje Hash záznam, který by byl pro bezpeÄnost " "považován za dostateÄnÄ› silný" - #: apt-pkg/deb/debmetaindex.cc #, c-format msgid "Invalid '%s' entry in Release file %s" @@ -1629,6 +1667,12 @@ msgstr "" " „%s“\n" "do mechaniky „%s“ a stisknÄ›te [Enter]\n" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "Opravujà se závislosti…" @@ -3806,6 +3850,13 @@ msgstr "Spojenà bylo pÅ™edÄasnÄ› ukonÄeno" msgid "Empty files can't be valid archives" msgstr "Prázdné soubory nejsou platnými archivy" +#~ msgid "" +#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list " +#~ "entry or malformed file)" +#~ msgstr "" +#~ "V souboru Release nelze najÃt oÄekávanou položku „%s“ (chybný sources." +#~ "list nebo poruÅ¡ený soubor)" + #~ msgid "Unmet dependencies. Try using --fix-broken." #~ msgstr "NesplnÄ›né závislosti. Zkuste použÃt --fix-broken." @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 1.0.5\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:41+0100\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2005-06-06 13:46+0100\n" "Last-Translator: Dafydd Harries <daf@muse.19inch.net>\n" "Language-Team: Welsh <cy@pengwyn.linux.org.uk>\n" @@ -216,7 +216,7 @@ msgstr "Mae'r cyfeiriadur %s wedi ei ddargyfeirio" #: apt-pkg/acquire-item.cc #, fuzzy, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "Mae'r cyfeiriadur %s wedi ei ddargyfeirio" #: apt-pkg/acquire-item.cc @@ -297,6 +297,13 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " "architecture '%s'" msgstr "" @@ -304,8 +311,8 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" #: apt-pkg/acquire-item.cc @@ -330,6 +337,31 @@ msgstr "" msgid "Conflicting distribution: %s (expected %s but got %s)" msgstr "" +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + # FIXME: case #: apt-pkg/acquire-item.cc #, c-format @@ -424,12 +456,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "Ni chynhelir y math ffeil mynegai '%s'" -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "Ni ellir newid i %s" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -619,6 +645,11 @@ msgstr "" #: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "Ni ellir newid i %s" + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "Ni ellir gwneud stat() o %s." @@ -1617,6 +1648,12 @@ msgstr "" " '%s'\n" "yn y gyrriant '%s' a gwasgwch Enter\n" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "Yn cywiro dibyniaethau..." @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 1.4~rc2\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:41+0100\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2017-03-02 23:51+0200\n" "Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n" "Language-Team: Danish <debian-l10n-danish@lists.debian.org>\n" @@ -205,8 +205,8 @@ msgid "" "Data from such a repository can't be authenticated and is therefore " "potentially dangerous to use." msgstr "" -"Data, fra et sÃ¥dant arkiv, kan ikke godkendes og er derfor potentielt " -"farlig at anvende." +"Data, fra et sÃ¥dant arkiv, kan ikke godkendes og er derfor potentielt farlig " +"at anvende." #: apt-pkg/acquire-item.cc msgid "" @@ -223,7 +223,7 @@ msgstr "Arkivet »%s« er ikke længere underskrevet." #: apt-pkg/acquire-item.cc #, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "Arkivet »%s« har ikke længere en udgivelsesfil." #: apt-pkg/acquire-item.cc @@ -260,7 +260,9 @@ msgstr "Hashsum stemmer ikke" #: apt-pkg/acquire-item.cc msgid "Insufficient information available to perform this download securely" -msgstr "Utilstrækkelig information er tilgængelig for at udføre denne overførsel sikkert" +msgstr "" +"Utilstrækkelig information er tilgængelig for at udføre denne overførsel " +"sikkert" #: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc #, c-format @@ -295,8 +297,8 @@ msgid "" "An error occurred during the signature verification. The repository is not " "updated and the previous index files will be used. GPG error: %s: %s" msgstr "" -"Der opstod en fejl under signaturbekræftelse. Arkivet er ikke opdateret " -"og den forrige indeksfil vil blive brugt. GPG-fejl: %s: %s" +"Der opstod en fejl under signaturbekræftelse. Arkivet er ikke opdateret og " +"den forrige indeksfil vil blive brugt. GPG-fejl: %s: %s" #. Invalid signature file, reject (LP: #346386) (Closes: #627642) #: apt-pkg/acquire-item.cc @@ -305,22 +307,37 @@ msgid "GPG error: %s: %s" msgstr "GPG-fejl: %s: %s" #: apt-pkg/acquire-item.cc +#, fuzzy, c-format +#| msgid "" +#| "Skipping acquire of configured file '%s' as repository '%s' doesn't " +#| "support architecture '%s'" +msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" +"Udelader erhvervelse af konfigureret fil »%s«, da arkivet »%s« ikke " +"understøtter arkitekturen »%s«" + +#: apt-pkg/acquire-item.cc #, c-format msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " "architecture '%s'" msgstr "" -"Udelader erhvervelse af konfigureret fil »%s«, da arkivet »%s« ikke understøtter " -"arkitekturen »%s«" +"Udelader erhvervelse af konfigureret fil »%s«, da arkivet »%s« ikke " +"understøtter arkitekturen »%s«" #: apt-pkg/acquire-item.cc -#, c-format +#, fuzzy, c-format +#| msgid "" +#| "Skipping acquire of configured file '%s' as repository '%s' doesn't " +#| "support architecture '%s'" msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" -"Kunne ikke finde uventet punkt »%s« i udgivelsesfil (forkert sources.list-" -"punkt eller forkert udformet fil)" +"Udelader erhvervelse af konfigureret fil »%s«, da arkivet »%s« ikke " +"understøtter arkitekturen »%s«" #: apt-pkg/acquire-item.cc #, c-format @@ -350,6 +367,31 @@ msgstr "Konfliktdistribution: %s (forventede %s men fik %s)" #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -403,8 +445,7 @@ msgstr "Metoden %s startede ikke korrekt" #, c-format msgid "" "Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]." -msgstr "" -"Indsæt venligst disken med navnet: »%s« i drevet »%s« og tryk [Retur]." +msgstr "Indsæt venligst disken med navnet: »%s« i drevet »%s« og tryk [Retur]." #: apt-pkg/acquire.cc apt-pkg/cdrom.cc #, c-format @@ -440,12 +481,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "Rensning af %s er ikke understøttet" -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "Kunne ikke skifte til %s" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -640,6 +675,11 @@ msgstr "Denne disk har følgende kildeliste-indgange:\n" #: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "Kunne ikke skifte til %s" + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "Kunne ikke finde %s." @@ -667,8 +707,7 @@ msgid "" "Command line option %s is not understood in combination with the other " "options" msgstr "" -"Kommandolinjetilvalget %s forstÃ¥s ikke i kombination med de andre " -"tilvalg" +"Kommandolinjetilvalget %s forstÃ¥s ikke i kombination med de andre tilvalg" #: apt-pkg/contrib/cmndline.cc #, c-format @@ -1056,7 +1095,8 @@ msgstr "Ugyldigt punkt »%s« i udgivelsesfil %s" #: apt-pkg/deb/debmetaindex.cc #, c-format msgid "Conflicting values set for option %s regarding source %s %s" -msgstr "Værdisæt er ikke i overensstemmelse for tilvalget %s jævnfør kilden %s %s" +msgstr "" +"Værdisæt er ikke i overensstemmelse for tilvalget %s jævnfør kilden %s %s" #: apt-pkg/deb/debmetaindex.cc #, c-format @@ -1066,7 +1106,9 @@ msgstr "Ugyldigt værdisæt for tilvalget %s jævnfør kilden %s %s (%s)" #: apt-pkg/deb/debmetaindex.cc #, c-format msgid "Conflicting values set for option %s regarding source %s %s: %s != %s" -msgstr "Værdisæt er ikke i overenstemmelse for tilvalget %s jævnfør kilden %s %s: %s != %s" +msgstr "" +"Værdisæt er ikke i overenstemmelse for tilvalget %s jævnfør kilden %s %s: " +"%s != %s" #: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc #, c-format @@ -1522,7 +1564,9 @@ msgstr "Kunne ikke forstÃ¥ pin-type %s" #: apt-pkg/policy.cc #, c-format msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)" -msgstr "%s: Værdien %s er uden for intervallet med gyldige pin-prioriteringer (%d til %d)" +msgstr "" +"%s: Værdien %s er uden for intervallet med gyldige pin-prioriteringer (%d " +"til %d)" #: apt-pkg/policy.cc msgid "No priority (or zero) specified for pin" @@ -1637,6 +1681,12 @@ msgstr "" " »%s«\n" "i drevet »%s« og tryk [Retur]\n" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "Retter afhængigheder ..." @@ -1734,7 +1784,8 @@ msgstr "Virtuelle pakker som »%s« kan ikke fjernes\n" #: apt-private/private-cacheset.cc apt-private/private-install.cc #, c-format msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n" -msgstr "Pakken »%s« er ikke installeret, sÃ¥ blev ikke fjernet. Mente du »%s«?\n" +msgstr "" +"Pakken »%s« er ikke installeret, sÃ¥ blev ikke fjernet. Mente du »%s«?\n" #: apt-private/private-cacheset.cc apt-private/private-install.cc #, c-format @@ -1801,8 +1852,8 @@ msgid "" "--force-yes is deprecated, use one of the options starting with --allow " "instead." msgstr "" -"--force-yes er forældet, brug i stedet for et af tilvalgene startende " -"med --allow" +"--force-yes er forældet, brug i stedet for et af tilvalgene startende med --" +"allow" #: apt-private/private-download.cc msgid "" @@ -3836,3 +3887,9 @@ msgstr "Forbindelsen lukkedes for hurtigt" msgid "Empty files can't be valid archives" msgstr "Tomme filer kan ikke være gyldige arkiver" +#~ msgid "" +#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list " +#~ "entry or malformed file)" +#~ msgstr "" +#~ "Kunne ikke finde uventet punkt »%s« i udgivelsesfil (forkert sources.list-" +#~ "punkt eller forkert udformet fil)" @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 1.0.8\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:41+0100\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2014-09-19 13:04+0100\n" "Last-Translator: Holger Wansing <linux@wansing-online.de>\n" "Language-Team: Debian German <debian-l10n-german@lists.debian.org>\n" @@ -215,7 +215,7 @@ msgstr "Das Verzeichnis %s ist umgeleitet." #: apt-pkg/acquire-item.cc #, fuzzy, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "Das Verzeichnis %s ist umgeleitet." #: apt-pkg/acquire-item.cc @@ -299,6 +299,13 @@ msgstr "GPG-Fehler: %s: %s" #: apt-pkg/acquire-item.cc #, c-format msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " "architecture '%s'" msgstr "" @@ -306,11 +313,9 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" -"Erwarteter Eintrag »%s« konnte in Release-Datei nicht gefunden werden " -"(falscher Eintrag in sources.list oder missgebildete Datei)." #: apt-pkg/acquire-item.cc #, c-format @@ -338,6 +343,31 @@ msgstr "Konflikt bei Distribution: %s (%s erwartet, aber %s bekommen)" #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -431,12 +461,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "Leeren von %s wird nicht unterstützt." -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "Es konnte nicht nach %s gewechselt werden." - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -641,6 +665,11 @@ msgstr "Quelllisteneinträge für dieses Medium sind:\n" #: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "Es konnte nicht nach %s gewechselt werden." + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "%s mit stat abfragen nicht möglich" @@ -1671,6 +1700,12 @@ msgstr "" " »%s«\n" "in Laufwerk »%s« ein und drücken Sie die Eingabetaste (Enter).\n" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "Abhängigkeiten werden korrigiert ..." @@ -3909,6 +3944,13 @@ msgstr "Verbindung vorzeitig beendet" msgid "Empty files can't be valid archives" msgstr "Leere Dateien können kein gültiges Archiv sein." +#~ msgid "" +#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list " +#~ "entry or malformed file)" +#~ msgstr "" +#~ "Erwarteter Eintrag »%s« konnte in Release-Datei nicht gefunden werden " +#~ "(falscher Eintrag in sources.list oder missgebildete Datei)." + #~ msgid "Unmet dependencies. Try using --fix-broken." #~ msgstr "Unerfüllte Abhängigkeiten. Versuchen Sie, --fix-broken zu benutzen." @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 1.0.5\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:41+0100\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2006-09-19 09:49+0530\n" "Last-Translator: Kinley Tshering <gasepkuenden2k3@hotmail.com>\n" "Language-Team: Dzongkha <pgeyleg@dit.gov.bt>\n" @@ -214,7 +214,7 @@ msgstr "སྣོད་à½à½¼à¼‹%s་འདི་à½à¼‹à½•à¾±à½¼à½‚ས་སྒà #: apt-pkg/acquire-item.cc #, fuzzy, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "སྣོད་à½à½¼à¼‹%s་འདི་à½à¼‹à½•à¾±à½¼à½‚ས་སྒྱུར་དེ་ཡོདà¼" #: apt-pkg/acquire-item.cc @@ -295,6 +295,13 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " "architecture '%s'" msgstr "" @@ -302,8 +309,8 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" #: apt-pkg/acquire-item.cc @@ -330,6 +337,31 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -418,12 +450,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "ཟུར་à½à½¼à¼‹à½¡à½²à½‚་སྣོད་ཀྱི་དབྱེ་བ་ '%s' འདི་རྒྱབ་སà¾à¾±à½¼à½¢à¼‹à½˜à¼‹à½ བད་བསà¼" -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "%s་ལུ་བསྒྱུར་བཅོས་འབད་མ་ཚུགསà¼" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -611,6 +637,11 @@ msgstr "འ་ནི་ ཌིསིཀ་གི་དོན་ལུ་ འབà #: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "%s་ལུ་བསྒྱུར་བཅོས་འབད་མ་ཚུགསà¼" + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "%s་ ངོ་བཤུས་འབད་མ་ཚུགསà¼" @@ -1592,6 +1623,12 @@ msgstr "" " '%s'\n" "འདྲེན་འཕྲུལ་'%s'ནང་བཙུགས་བཞིནམ་ལས་ལོག་ལྡེ་འདི་ཨེབà¼\n" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "རྟེན་འབྲེལ་ནོར་བཅོས་འབད་དོà¼" @@ -16,7 +16,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 1.0.5\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:41+0100\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2008-08-26 18:25+0300\n" "Last-Translator: Θανάσης Îάτσης <natsisthanasis@gmail.com>\n" "Language-Team: Greek <debian-l10n-greek@lists.debian.org>\n" @@ -222,7 +222,7 @@ msgstr "Ο φάκελος %s Îχει εκτÏαπεί" #: apt-pkg/acquire-item.cc #, fuzzy, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "Ο φάκελος %s Îχει εκτÏαπεί" #: apt-pkg/acquire-item.cc @@ -302,6 +302,13 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " "architecture '%s'" msgstr "" @@ -309,8 +316,8 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" #: apt-pkg/acquire-item.cc @@ -337,6 +344,31 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -428,12 +460,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "Ο Ï„Ïπος αÏχείου ευÏετηÏίου '%s' δεν υποστηÏίζεται" -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "ΑδÏνατη η αλλαγή σε %s" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -624,6 +650,11 @@ msgstr "Οι κατάλογοι με τις πηγÎÏ‚ Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… δίσΠ#: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "ΑδÏνατη η αλλαγή σε %s" + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "ΑδÏνατη η εÏÏεση της κατάστασης του %s." @@ -1610,6 +1641,12 @@ msgstr "" " '%s'\n" "στη συσκευή '%s' και πιÎστε enter\n" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "ΔιόÏθωση εξαÏτήσεων..." @@ -34,7 +34,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 0.8.10\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:41+0100\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2016-01-26 01:51+0100\n" "Last-Translator: Manuel \"Venturi\" Porras Peralta <venturi@openmailbox." "org>\n" @@ -277,7 +277,7 @@ msgstr "El repositorio «%s» ya no está firmado." #: apt-pkg/acquire-item.cc #, fuzzy, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "El repositorio «%s» no tiene un fichero de Publicación." #: apt-pkg/acquire-item.cc @@ -362,6 +362,18 @@ msgid "GPG error: %s: %s" msgstr "Error de GPG: %s: %s" #: apt-pkg/acquire-item.cc +#, fuzzy, c-format +#| msgid "" +#| "Skipping acquire of configured file '%s' as repository '%s' doesn't " +#| "support architecture '%s'" +msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" +"Omitiendo el uso del fichero configurado «%s» ya que el repositorio «%s» no " +"admite la arquitectura «%s»" + +#: apt-pkg/acquire-item.cc #, c-format msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " @@ -371,13 +383,16 @@ msgstr "" "admite la arquitectura «%s»" #: apt-pkg/acquire-item.cc -#, c-format +#, fuzzy, c-format +#| msgid "" +#| "Skipping acquire of configured file '%s' as repository '%s' doesn't " +#| "support architecture '%s'" msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" -"No se pudo encontrar la entrada esperada «%s» en el archivo " -"«Release» (entrada incorrecta en «sources.list» o fichero mal formado)" +"Omitiendo el uso del fichero configurado «%s» ya que el repositorio «%s» no " +"admite la arquitectura «%s»" #: apt-pkg/acquire-item.cc #, c-format @@ -407,6 +422,31 @@ msgstr "Distribución conflictiva: %s (se esperaba %s, pero se obtuvo %s)" #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -506,12 +546,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "No se admite la limpieza de «%s»" -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "No se pudo cambiar a %s" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -715,6 +749,11 @@ msgstr "Las entradas de la lista de fuentes para este disco son:\n" #: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "No se pudo cambiar a %s" + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "No se pudo leer %s." @@ -1746,6 +1785,12 @@ msgstr "" " «%s»\n" "en la unidad «%s» y pulse [Enter]\n" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "Corrigiendo dependencias..." @@ -3967,6 +4012,13 @@ msgstr "La conexión se cerró prematuramente" msgid "Empty files can't be valid archives" msgstr "Los ficheros vacÃos no pueden ser archivos válidos" +#~ msgid "" +#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list " +#~ "entry or malformed file)" +#~ msgstr "" +#~ "No se pudo encontrar la entrada esperada «%s» en el archivo " +#~ "«Release» (entrada incorrecta en «sources.list» o fichero mal formado)" + #~ msgid "Unmet dependencies. Try using --fix-broken." #~ msgstr "Dependencias incumplidas. Pruebe de nuevo utilizando --fix-broken." @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 1.0.5\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:41+0100\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2009-05-17 00:41+0200\n" "Last-Translator: Piarres Beobide <pi@beobide.net>\n" "Language-Team: Euskara <debian-l10n-basque@lists.debian.org>\n" @@ -213,7 +213,7 @@ msgstr "%s direktorioa desbideratuta dago" #: apt-pkg/acquire-item.cc #, fuzzy, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "%s direktorioa desbideratuta dago" #: apt-pkg/acquire-item.cc @@ -293,6 +293,13 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " "architecture '%s'" msgstr "" @@ -300,8 +307,8 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" #: apt-pkg/acquire-item.cc @@ -328,6 +335,31 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -417,12 +449,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "'%s' motako indize fitxategirik ez da onartzen" -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "Ezin da %s(e)ra aldatu" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -610,6 +636,11 @@ msgstr "Diskoarentzako jatorri sarrerak:\n" #: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "Ezin da %s(e)ra aldatu" + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "Ezin da %s atzitu." @@ -1591,6 +1622,12 @@ msgstr "" " '%s'\n" "izeneko diska '%s' gailuan eta enter sakatu\n" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "Mendekotasunak zuzentzen..." @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 0.5.26\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:41+0100\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2008-12-11 14:52+0200\n" "Last-Translator: Tapio Lehtonen <tale@debian.org>\n" "Language-Team: Finnish <debian-l10n-finnish@lists.debian.org>\n" @@ -213,7 +213,7 @@ msgstr "Kansio %s on korvautunut" #: apt-pkg/acquire-item.cc #, fuzzy, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "Kansio %s on korvautunut" #: apt-pkg/acquire-item.cc @@ -293,6 +293,13 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " "architecture '%s'" msgstr "" @@ -300,8 +307,8 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" #: apt-pkg/acquire-item.cc @@ -328,6 +335,31 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -417,12 +449,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "Hakemistotiedoston tyyppi \"%s\" ei ole tuettu" -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "Kansioon %s vaihto ei onnistu" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -610,6 +636,11 @@ msgstr "Tämän levyn lähdekoodipakettien luettelon tietueita ovat:\n" #: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "Kansioon %s vaihto ei onnistu" + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "stat %s ei onnistu." @@ -1586,6 +1617,12 @@ msgstr "" "\"%s\"\n" "asemaan \"%s\" ja paina Enter\n" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "Korjataan riippuvuuksia..." @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 1.0.5\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:41+0100\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2013-12-15 16:45+0100\n" "Last-Translator: Julien Patriarca <leatherface@debian.org>\n" "Language-Team: French <debian-l10n-french@lists.debian.org>\n" @@ -215,7 +215,7 @@ msgstr "Le répertoire %s est détourné" #: apt-pkg/acquire-item.cc #, fuzzy, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "Le répertoire %s est détourné" #: apt-pkg/acquire-item.cc @@ -299,6 +299,13 @@ msgstr "Erreur de GPG : %s : %s" #: apt-pkg/acquire-item.cc #, c-format msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " "architecture '%s'" msgstr "" @@ -306,11 +313,9 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" -"Impossible de trouver l'entrée « %s » attendue dans le fichier « Release » : " -"ligne non valable dans sources.list ou fichier corrompu" #: apt-pkg/acquire-item.cc #, c-format @@ -338,6 +343,31 @@ msgstr "Distribution en conflit : %s (%s attendu, mais %s obtenu)" #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -431,12 +461,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "Le type de fichier d'index « %s » n'est pas accepté" -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "Impossible d'accéder à %s" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -646,6 +670,11 @@ msgstr "Les entrées de listes de sources pour ce disque sont :\n" #: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "Impossible d'accéder à %s" + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "Impossible de localiser %s." @@ -1676,6 +1705,12 @@ msgstr "" "« %s »\n" "dans le lecteur « %s » et appuyez sur la touche Entrée\n" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "Correction des dépendances..." @@ -3895,6 +3930,13 @@ msgstr "Connexion fermée prématurément" msgid "Empty files can't be valid archives" msgstr "Les fichiers vides ne peuvent être des archives valables" +#~ msgid "" +#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list " +#~ "entry or malformed file)" +#~ msgstr "" +#~ "Impossible de trouver l'entrée « %s » attendue dans le fichier " +#~ "« Release » : ligne non valable dans sources.list ou fichier corrompu" + #~ msgid "Unmet dependencies. Try using --fix-broken." #~ msgstr "Dépendances manquantes. Essayez d'utiliser l'option --fix-broken." @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 1.0.5\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:41+0100\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2011-05-12 15:28+0100\n" "Last-Translator: Miguel Anxo Bouzada <mbouzada@gmail.com>\n" "Language-Team: galician <proxecto@trasno.net>\n" @@ -217,7 +217,7 @@ msgstr "O directorio %s está desviado" #: apt-pkg/acquire-item.cc #, fuzzy, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "O directorio %s está desviado" #: apt-pkg/acquire-item.cc @@ -300,6 +300,13 @@ msgstr "Produciuse un erro de GPG: %s %s" #: apt-pkg/acquire-item.cc #, c-format msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " "architecture '%s'" msgstr "" @@ -307,11 +314,9 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" -"Non é posÃbel atopar a entrada agardada «%s» no ficheiro de publicación " -"(entrada sources.list incorrecta ou ficheiro con formato incorrecto)" #: apt-pkg/acquire-item.cc #, c-format @@ -337,6 +342,31 @@ msgstr "Conflito na distribución: %s (agardábase %s mais obtÃvose %s)" #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -426,12 +456,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "O tipo de ficheiros de Ãndices «%s» non está admitido" -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "Non é posÃbel cambiar a %s" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -634,6 +658,11 @@ msgstr "As entradas da lista de orixes deste disco son:\n" #: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "Non é posÃbel cambiar a %s" + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "Non é posÃbel analizar %s." @@ -1644,6 +1673,12 @@ msgstr "" " «%s»\n" "na unidade «%s» e prema Intro\n" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "Corrixindo as dependencias..." @@ -3816,6 +3851,13 @@ msgstr "A conexión pechouse prematuramente" msgid "Empty files can't be valid archives" msgstr "Os ficheiros baleiros non poden ser arquivadores válidos" +#~ msgid "" +#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list " +#~ "entry or malformed file)" +#~ msgstr "" +#~ "Non é posÃbel atopar a entrada agardada «%s» no ficheiro de publicación " +#~ "(entrada sources.list incorrecta ou ficheiro con formato incorrecto)" + #~ msgid "Unmet dependencies. Try using --fix-broken." #~ msgstr "Dependencias incumpridas. Probe a empregar --fix-broken." @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 1.0.5\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:41+0100\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2016-04-10 19:46+0200\n" "Last-Translator: Gabor Kelemen <kelemeng@ubuntu.com>\n" "Language-Team: Hungarian <gnome-hu-list@gnome.org>\n" @@ -220,7 +220,7 @@ msgstr "A(z) „%s†tároló már nincs aláÃrva." #: apt-pkg/acquire-item.cc #, fuzzy, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "A(z) „%s†tárolónak nincs Release fájlja." #: apt-pkg/acquire-item.cc @@ -305,6 +305,18 @@ msgid "GPG error: %s: %s" msgstr "GPG hiba: %s: %s" #: apt-pkg/acquire-item.cc +#, fuzzy, c-format +#| msgid "" +#| "Skipping acquire of configured file '%s' as repository '%s' doesn't " +#| "support architecture '%s'" +msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" +"A beállÃtott „%s†fájl beszerzésének kihagyása, mert a(z) „%s†tároló nem " +"támogatja a(z) „%s†architektúrát" + +#: apt-pkg/acquire-item.cc #, c-format msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " @@ -314,13 +326,16 @@ msgstr "" "támogatja a(z) „%s†architektúrát" #: apt-pkg/acquire-item.cc -#, c-format +#, fuzzy, c-format +#| msgid "" +#| "Skipping acquire of configured file '%s' as repository '%s' doesn't " +#| "support architecture '%s'" msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" -"A várt „%s†bejegyzés nem található a Release fájlban (Rossz sources.list " -"bejegyzés vagy helytelenül formázott fájl)" +"A beállÃtott „%s†fájl beszerzésének kihagyása, mert a(z) „%s†tároló nem " +"támogatja a(z) „%s†architektúrát" #: apt-pkg/acquire-item.cc #, c-format @@ -350,6 +365,31 @@ msgstr "ÃœtközÅ‘ disztribúció: %s (a várt %s helyett %s érkezett)" #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -445,12 +485,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "A(z) „%s†tisztÃtása nem támogatott" -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "Nem sikerült ide váltani: %s" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -647,6 +681,11 @@ msgstr "A lemezhez tartozó forráslista-bejegyzések a következÅ‘k:\n" #: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "Nem sikerült ide váltani: %s" + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "%s nem érhetÅ‘ el." @@ -1668,6 +1707,12 @@ msgstr "" " „%sâ€\n" "cÃmkéjű lemezt a(z) %s meghajtóba, és nyomja meg az Entert\n" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "FüggÅ‘ségek javÃtása..." @@ -3865,6 +3910,13 @@ msgstr "A kapcsolat idÅ‘ elÅ‘tt lezárult" msgid "Empty files can't be valid archives" msgstr "Az üres fájlok biztosan nem érvényes csomagok" +#~ msgid "" +#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list " +#~ "entry or malformed file)" +#~ msgstr "" +#~ "A várt „%s†bejegyzés nem található a Release fájlban (Rossz sources.list " +#~ "bejegyzés vagy helytelenül formázott fájl)" + #~ msgid "Unmet dependencies. Try using --fix-broken." #~ msgstr "TeljesÃtetlen függÅ‘ségek. Próbálja a --fix-broken használatával." @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 1.0.5\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:41+0100\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2015-04-07 16:51+0100\n" "Last-Translator: Milo Casagrande <milo@milo.name>\n" "Language-Team: Italian <tp@lists.linux.it>\n" @@ -215,7 +215,7 @@ msgstr "La directory %s è deviata" #: apt-pkg/acquire-item.cc #, fuzzy, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "La directory %s è deviata" #: apt-pkg/acquire-item.cc @@ -298,6 +298,13 @@ msgstr "Errore GPG: %s: %s" #: apt-pkg/acquire-item.cc #, c-format msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " "architecture '%s'" msgstr "" @@ -305,11 +312,9 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" -"Impossibile trovare la voce \"%s\" nel file Release (voce in sources.list " -"errata o file danneggiato)" #: apt-pkg/acquire-item.cc #, c-format @@ -337,6 +342,31 @@ msgstr "Distribuzione in conflitto: %s (atteso %s ma ottenuto %s)" #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -429,12 +459,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "La pulizia di %s non è supportata" -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "Impossibile passare a %s" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -640,6 +664,11 @@ msgstr "Le voci dell'elenco sorgenti per questo disco sono:\n" #: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "Impossibile passare a %s" + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "Impossibile eseguire stat su %s." @@ -1665,6 +1694,12 @@ msgstr "" " \"%s\"\n" "nell'unità \"%s\" e premere Invio\n" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "Correzione delle dipendenze..." @@ -3867,6 +3902,13 @@ msgstr "Connessione chiusa prematuramente" msgid "Empty files can't be valid archives" msgstr "File vuoti non possono essere archivi validi" +#~ msgid "" +#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list " +#~ "entry or malformed file)" +#~ msgstr "" +#~ "Impossibile trovare la voce \"%s\" nel file Release (voce in sources.list " +#~ "errata o file danneggiato)" + #~ msgid "Unmet dependencies. Try using --fix-broken." #~ msgstr "Dipendenze non trovate. Riprovare usando --fix-broken." @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 1.4\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-01-27 21:41+0100\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2017-01-06 04:50+0900\n" "Last-Translator: Takuma Yamada <tyamada@takumayamada.com>\n" "Language-Team: Japanese <debian-japanese@lists.debian.org>\n" @@ -223,7 +223,7 @@ msgstr "リãƒã‚¸ãƒˆãƒª %s ã¯ã‚‚ã†ç½²åã•ã‚Œã¦ã„ã¾ã›ã‚“。" #: apt-pkg/acquire-item.cc #, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "リãƒã‚¸ãƒˆãƒª %s ã«ã¯ Release ファイルãŒãªããªã£ã¦ã„ã¾ã™ã€‚" #: apt-pkg/acquire-item.cc @@ -305,6 +305,18 @@ msgid "GPG error: %s: %s" msgstr "GPG エラー: %s: %s" #: apt-pkg/acquire-item.cc +#, fuzzy, c-format +#| msgid "" +#| "Skipping acquire of configured file '%s' as repository '%s' doesn't " +#| "support architecture '%s'" +msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" +"リãƒã‚¸ãƒˆãƒª '%2$s' ãŒã‚¢ãƒ¼ã‚テクãƒãƒ£ '%3$s' をサãƒãƒ¼ãƒˆã—ãªã„ãŸã‚è¨å®šãƒ•ã‚¡ã‚¤ãƒ« " +"'%1$s' ã®å–得をスã‚ップ" + +#: apt-pkg/acquire-item.cc #, c-format msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " @@ -314,13 +326,16 @@ msgstr "" "'%1$s' ã®å–得をスã‚ップ" #: apt-pkg/acquire-item.cc -#, c-format +#, fuzzy, c-format +#| msgid "" +#| "Skipping acquire of configured file '%s' as repository '%s' doesn't " +#| "support architecture '%s'" msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" -"期待ã•ã‚Œã‚‹ã‚¨ãƒ³ãƒˆãƒª '%s' ㌠Release ファイル内ã«è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ (誤ã£ãŸ " -"sources.list エントリã‹ã€å£Šã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«)" +"リãƒã‚¸ãƒˆãƒª '%2$s' ãŒã‚¢ãƒ¼ã‚テクãƒãƒ£ '%3$s' をサãƒãƒ¼ãƒˆã—ãªã„ãŸã‚è¨å®šãƒ•ã‚¡ã‚¤ãƒ« " +"'%1$s' ã®å–得をスã‚ップ" #: apt-pkg/acquire-item.cc #, c-format @@ -352,6 +367,31 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -446,12 +486,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "%s ã®æ¶ˆåŽ»ã¯ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“" -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "%s ã¸å¤‰æ›´ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -651,6 +685,11 @@ msgstr "ã“ã®ãƒ‡ã‚£ã‚¹ã‚¯ã®ã‚½ãƒ¼ã‚¹ãƒªã‚¹ãƒˆã®ã‚¨ãƒ³ãƒˆãƒª:\n" #: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "%s ã¸å¤‰æ›´ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“" + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "%s ã®çŠ¶æ…‹ã‚’å–å¾—ã§ãã¾ã›ã‚“。" @@ -1663,6 +1702,12 @@ msgstr "" "ã¨ãƒ©ãƒ™ãƒ«ã®ä»˜ã„ãŸãƒ‡ã‚£ã‚¹ã‚¯ã‚’ドライブ '%s' ã«å…¥ã‚Œã¦ [Enter] ã‚ーを押ã—ã¦ãã ã•" "ã„\n" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "ä¾å˜é–¢ä¿‚を解決ã—ã¦ã„ã¾ã™ ..." @@ -3848,3 +3893,10 @@ msgstr "途ä¸ã§æŽ¥ç¶šãŒã‚¯ãƒãƒ¼ã‚ºã•ã‚Œã¾ã—ãŸ" #: methods/store.cc msgid "Empty files can't be valid archives" msgstr "空ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¯æœ‰åŠ¹ãªã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã¨èªã‚られã¾ã›ã‚“" + +#~ msgid "" +#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list " +#~ "entry or malformed file)" +#~ msgstr "" +#~ "期待ã•ã‚Œã‚‹ã‚¨ãƒ³ãƒˆãƒª '%s' ㌠Release ファイル内ã«è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ (誤ã£ãŸ " +#~ "sources.list エントリã‹ã€å£Šã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«)" @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 1.0.5\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:41+0100\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2006-10-10 09:48+0700\n" "Last-Translator: Khoem Sokhem <khoemsokhem@khmeros.info>\n" "Language-Team: Khmer <support@khmeros.info>\n" @@ -216,7 +216,7 @@ msgstr "ážážâ€‹ %s ážáŸ’រូវបាន​បង្វែរ" #: apt-pkg/acquire-item.cc #, fuzzy, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "ážážâ€‹ %s ážáŸ’រូវបាន​បង្វែរ" #: apt-pkg/acquire-item.cc @@ -297,6 +297,13 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " "architecture '%s'" msgstr "" @@ -304,8 +311,8 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" #: apt-pkg/acquire-item.cc @@ -332,6 +339,31 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -419,12 +451,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "ប្រភáŸáž‘​ឯកសារ​លិបិក្រម​ '%s' មិនážáŸ’រូវ​បាន​គាំទ្រ​" -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "មិនអាច​ប្ដូរទៅ %s បានឡើយ" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -610,6 +636,11 @@ msgstr "ធាážáž»áž”ញ្ចូល​បញ្ជីប្រភព​សម #: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "មិនអាច​ប្ដូរទៅ %s បានឡើយ" + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "មិនអាច​ážáŸ’លែង %s បានឡើយ ។" @@ -1585,6 +1616,12 @@ msgstr "" " '%s'\n" "ក្នុង​ដ្រាយ​ '%s' ហើយ​ចុច​បញ្ចូល\n" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "កំពុង​កែ​ភាពអាស្រáŸáž™â€‹..." @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 1.0.5\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:41+0100\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2010-08-30 02:31+0900\n" "Last-Translator: Changwoo Ryu <cwryu@debian.org>\n" "Language-Team: Korean <debian-l10n-korean@lists.debian.org>\n" @@ -210,7 +210,7 @@ msgstr "%s ë””ë ‰í„°ë¦¬ê°€ ì „í™˜ë˜ì—ˆìŠµë‹ˆë‹¤" #: apt-pkg/acquire-item.cc #, fuzzy, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "%s ë””ë ‰í„°ë¦¬ê°€ ì „í™˜ë˜ì—ˆìŠµë‹ˆë‹¤" #: apt-pkg/acquire-item.cc @@ -292,6 +292,13 @@ msgstr "GPG 오류: %s: %s" #: apt-pkg/acquire-item.cc #, c-format msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " "architecture '%s'" msgstr "" @@ -299,8 +306,8 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" #: apt-pkg/acquire-item.cc @@ -327,6 +334,31 @@ msgstr "ë°°í¬íŒ 충ëŒ: %s (예ìƒê°’ %s, ì‹¤ì œê°’ %s)" #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -416,12 +448,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "ì¸ë±ìŠ¤ íŒŒì¼ íƒ€ìž… '%s' íƒ€ìž…ì€ ì§€ì›í•˜ì§€ 않습니다" -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "%s ë””ë ‰í† ë¦¬ë¡œ ì´ë™í• 수 없습니다" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -611,6 +637,11 @@ msgstr "ì´ ë””ìŠ¤í¬ì˜ 소스 리스트 í•ëª©ì€ 다ìŒê³¼ 같습니다:\n" #: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "%s ë””ë ‰í† ë¦¬ë¡œ ì´ë™í• 수 없습니다" + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "%sì˜ ì •ë³´ë¥¼ ì½ì„ 수 없습니다." @@ -1596,6 +1627,12 @@ msgstr "" "디스í¬ë¥¼ ë„£ê³ enter를 누르ì‹ì‹œì˜¤\n" " '%1$s'\n" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "ì˜ì¡´ì„±ì„ 바로잡는 중입니다..." @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 1.0.5\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:41+0100\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2008-05-08 12:48+0200\n" "Last-Translator: Erdal Ronahi <erdal.ronahi@gmail.com>\n" "Language-Team: ku <ubuntu-l10n-kur@lists.ubuntu.com>\n" @@ -216,7 +216,7 @@ msgstr "Rêça %s zêde dirêj e" #: apt-pkg/acquire-item.cc #, fuzzy, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "Rêça %s zêde dirêj e" #: apt-pkg/acquire-item.cc @@ -295,6 +295,13 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " "architecture '%s'" msgstr "" @@ -302,8 +309,8 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" #: apt-pkg/acquire-item.cc @@ -330,6 +337,31 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -415,12 +447,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "" -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "Nikarî derbasa %s bike" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -602,6 +628,11 @@ msgid "Source list entries for this disc are:\n" msgstr "" #: apt-pkg/clean.cc +#, c-format +msgid "Unable to change to %s" +msgstr "Nikarî derbasa %s bike" + +#: apt-pkg/clean.cc #, fuzzy, c-format msgid "Unable to stat %s." msgstr "Nivîsandin ji bo %s ne pêkane" @@ -1567,6 +1598,12 @@ msgid "" "in the drive '%s' and press [Enter]\n" msgstr "Dîsketê siwar bike û piÅŸtre biÅŸkoja derbaskirinê bitikîne" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "Bindestî tên serrastkirin..." @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 1.0.5\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:41+0100\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2008-08-02 01:47-0400\n" "Last-Translator: Gintautas Miliauskas <gintas@akl.lt>\n" "Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n" @@ -215,7 +215,7 @@ msgstr "Kelias %s per ilgas" #: apt-pkg/acquire-item.cc #, fuzzy, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "Kelias %s per ilgas" #: apt-pkg/acquire-item.cc @@ -295,6 +295,13 @@ msgstr "GPG klaida: %s: %s" #: apt-pkg/acquire-item.cc #, c-format msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " "architecture '%s'" msgstr "" @@ -302,8 +309,8 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" #: apt-pkg/acquire-item.cc @@ -330,6 +337,31 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -415,12 +447,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "" -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "Nepavyko pakeisti į %s" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -605,6 +631,11 @@ msgstr "" #: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "Nepavyko pakeisti į %s" + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "" @@ -1575,6 +1606,12 @@ msgstr "" " „%s“,\n" "į įrenginį „%s“ ir paspauskite enter\n" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "Taisomos priklausomybÄ—s..." @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 1.0.5\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:41+0100\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2008-11-20 23:27+0530\n" "Last-Translator: Sampada <sampadanakhare@gmail.com>\n" "Language-Team: Marathi, janabhaaratii, C-DAC, Mumbai, India " @@ -212,7 +212,7 @@ msgstr "%s संचिका डायवà¥à¤¹à¤°à¥à¤Ÿ केली आहे #: apt-pkg/acquire-item.cc #, fuzzy, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "%s संचिका डायवà¥à¤¹à¤°à¥à¤Ÿ केली आहे/वळवली आहे" #: apt-pkg/acquire-item.cc @@ -292,6 +292,13 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " "architecture '%s'" msgstr "" @@ -299,8 +306,8 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" #: apt-pkg/acquire-item.cc @@ -327,6 +334,31 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -416,12 +448,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "'%s' पà¥à¤°à¤•à¤¾à¤°à¤šà¥€ निरà¥à¤¦à¥‡à¤¶à¤• संचिका सहायà¥à¤¯à¤•à¤¾à¤°à¥€ नाही" -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "%s मधà¥à¤¯à¥‡ बदलणà¥à¤¯à¤¾à¤¸ असमरà¥à¤¥" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -609,6 +635,11 @@ msgstr "हà¥à¤¯à¤¾ डिसà¥à¤•/चकती करिता सà¥à¤¤à¥à¤ #: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "%s मधà¥à¤¯à¥‡ बदलणà¥à¤¯à¤¾à¤¸ असमरà¥à¤¥" + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "%s सà¥à¤Ÿà¥…ट करणà¥à¤¯à¤¾à¤¤ असमरà¥à¤¥. " @@ -1587,6 +1618,12 @@ msgstr "" "%s'\n" "'%s' डà¥à¤°à¤¾à¤ˆà¤µà¥à¤¹ मधà¥à¤¯à¥‡ व à¤à¤‚टर कळ दाबा\n" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "डिपेनà¥à¤¡à¤¨à¥à¤¸à¥€à¤œ बरोबर/दà¥à¤°à¥‚सà¥à¤¤ करत आहे..." @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 1.0.5\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:41+0100\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2016-06-11 22:38+0200\n" "Last-Translator: Petter Reinholdtsen <pere@hungry.com>\n" "Language-Team: Norwegian BokmÃ¥l <i18n-no@lister.ping.uio.no>\n" @@ -218,7 +218,7 @@ msgstr "Katalogen %s er avledet" #: apt-pkg/acquire-item.cc #, fuzzy, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "Katalogen %s er avledet" #: apt-pkg/acquire-item.cc @@ -300,6 +300,13 @@ msgstr "GPG-feil: %s: %s" #: apt-pkg/acquire-item.cc #, c-format msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " "architecture '%s'" msgstr "" @@ -307,8 +314,8 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" #: apt-pkg/acquire-item.cc @@ -335,6 +342,31 @@ msgstr "Konflikt mellom distribusjoner: %s (forventet %s men fant %s)" #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -422,12 +454,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "Oversiktsfil av typen «%s» støttes ikke" -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "Klarer ikke Ã¥ endre %s" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -625,6 +651,11 @@ msgstr "Kildelisteoppføringer for denne CD-en er:\n" #: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "Klarer ikke Ã¥ endre %s" + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "Klarer ikke finne informasjonom %s." @@ -1615,6 +1646,12 @@ msgstr "" " «%s»\n" "i «%s» og trykk «Enter»\n" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "Retter pÃ¥ avhengighetsforhold ..." @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 1.0.5\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:41+0100\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2006-06-12 14:35+0545\n" "Last-Translator: Shiva Pokharel <pokharelshiva@hotmail.com>\n" "Language-Team: Nepali <info@mpp.org.np>\n" @@ -212,7 +212,7 @@ msgstr "डाइरेकà¥à¤Ÿà¥à¤°à¥€ %s फेरियो " #: apt-pkg/acquire-item.cc #, fuzzy, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "डाइरेकà¥à¤Ÿà¥à¤°à¥€ %s फेरियो " #: apt-pkg/acquire-item.cc @@ -293,6 +293,13 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " "architecture '%s'" msgstr "" @@ -300,8 +307,8 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" #: apt-pkg/acquire-item.cc @@ -328,6 +335,31 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -415,12 +447,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "अनà¥à¤•à¥à¤°à¤®à¤£à¤¿à¤•à¤¾ फाइल पà¥à¤°à¤•à¤¾à¤° '%s' समरà¥à¤¥à¤¿à¤¤ छैन" -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "%s मा परिवरà¥à¤¤à¤¨ गरà¥à¤¨ असकà¥à¤·à¤®" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -606,6 +632,11 @@ msgstr "यो डिसà¥à¤•à¤•à¥‹ लागि सà¥à¤°à¥‹à¤¤ सूचि à #: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "%s मा परिवरà¥à¤¤à¤¨ गरà¥à¤¨ असकà¥à¤·à¤®" + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "%s सà¥à¤¥à¤¿à¤° गरà¥à¤¨ असकà¥à¤·à¤® à¤à¤¯à¥‹ ।" @@ -1582,6 +1613,12 @@ msgstr "" " '%s'\n" "र इनà¥à¤Ÿà¤° थिचà¥à¤¨à¥à¤¹à¥‹à¤¸à¥\n" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "निरà¥à¤à¤°à¤¤à¤¾à¤¹à¤°à¥‚ सà¥à¤§à¤¾à¤° गरिदैछ..." @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 1.4~beta4\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:20+0100\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2017-01-19 17:32+0100\n" "Last-Translator: Frans Spiesschaert <Frans.Spiesschaert@yucom.be>\n" "Language-Team: Debian Dutch l10n Team <debian-l10n-dutch@lists.debian.org>\n" @@ -224,7 +224,7 @@ msgstr "De pakketbron '%s' heeft niet langer een ondertekening." #: apt-pkg/acquire-item.cc #, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "De pakketbron '%s' heeft niet langer een Release-bestand." #: apt-pkg/acquire-item.cc @@ -309,6 +309,18 @@ msgid "GPG error: %s: %s" msgstr "GPG-fout: %s: %s" #: apt-pkg/acquire-item.cc +#, fuzzy, c-format +#| msgid "" +#| "Skipping acquire of configured file '%s' as repository '%s' doesn't " +#| "support architecture '%s'" +msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" +"Opvragen van het in de configuratie vermeld bestand '%s' overgeslagen, " +"vermits pakketbron '%s' de architectuur '%s' niet ondersteunt" + +#: apt-pkg/acquire-item.cc #, c-format msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " @@ -318,13 +330,16 @@ msgstr "" "vermits pakketbron '%s' de architectuur '%s' niet ondersteunt" #: apt-pkg/acquire-item.cc -#, c-format +#, fuzzy, c-format +#| msgid "" +#| "Skipping acquire of configured file '%s' as repository '%s' doesn't " +#| "support architecture '%s'" msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" -"Kon de verwachte regel '%s' in het Release-bestand niet vinden (Foute regel " -"in het bestand sources.list of bestand in een ongeldig formaat)" +"Opvragen van het in de configuratie vermeld bestand '%s' overgeslagen, " +"vermits pakketbron '%s' de architectuur '%s' niet ondersteunt" #: apt-pkg/acquire-item.cc #, c-format @@ -355,6 +370,31 @@ msgstr "Tegenstrijdige distributie: %s (verwachtte %s, maar kreeg %s)" #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -450,12 +490,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "Opschonen van %s wordt niet ondersteund" -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "Kan %s niet veranderen" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -658,6 +692,11 @@ msgstr "Bronlijst-elementen voor deze schijf zijn:\n" #: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "Kan %s niet veranderen" + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "Kan de status van %s niet opvragen." @@ -1687,6 +1726,12 @@ msgstr "" " '%s'\n" "in het station '%s' te plaatsen en op [Enter] te drukken\n" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "Vereisten worden gecorrigeerd..." @@ -3922,6 +3967,13 @@ msgstr "Verbinding werd voortijdig afgebroken" msgid "Empty files can't be valid archives" msgstr "Lege bestanden kunnen geen geldige archieven zijn" +#~ msgid "" +#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list " +#~ "entry or malformed file)" +#~ msgstr "" +#~ "Kon de verwachte regel '%s' in het Release-bestand niet vinden (Foute " +#~ "regel in het bestand sources.list of bestand in een ongeldig formaat)" + #~ msgid "Unmet dependencies. Try using --fix-broken." #~ msgstr "" #~ "Er zijn vereisten waaraan niet voldaan is. Probeer --fix-broken te " @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 1.0.5\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:41+0100\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2005-02-14 23:30+0100\n" "Last-Translator: Havard Korsvoll <korsvoll@skulelinux.no>\n" "Language-Team: Norwegian nynorsk <i18n-nn@lister.ping.uio.no>\n" @@ -215,7 +215,7 @@ msgstr "Katalogen %s er avleidd" #: apt-pkg/acquire-item.cc #, fuzzy, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "Katalogen %s er avleidd" #: apt-pkg/acquire-item.cc @@ -296,6 +296,13 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " "architecture '%s'" msgstr "" @@ -303,8 +310,8 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" #: apt-pkg/acquire-item.cc @@ -331,6 +338,31 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -422,12 +454,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "Indeksfiltypen «%s» er ikkje støtta" -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "Klarte ikkje byta til %s" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -614,6 +640,11 @@ msgstr "Kjeldelisteoppføringar for denne disken er:\n" #: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "Klarte ikkje byta til %s" + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "Klarte ikkje få status på %s." @@ -1591,6 +1622,12 @@ msgstr "" " «%s»\n" "i stasjonen «%s» og trykk Enter.\n" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "Rettar på krav ..." @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 0.9.7.3\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:41+0100\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2012-07-28 21:53+0200\n" "Last-Translator: MichaÅ‚ KuÅ‚ach <michal.kulach@gmail.com>\n" "Language-Team: Polish <debian-l10n-polish@lists.debian.org>\n" @@ -218,7 +218,7 @@ msgstr "OminiÄ™cie katalogu %s" #: apt-pkg/acquire-item.cc #, fuzzy, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "OminiÄ™cie katalogu %s" #: apt-pkg/acquire-item.cc @@ -300,6 +300,13 @@ msgstr "BÅ‚Ä…d GPG: %s: %s" #: apt-pkg/acquire-item.cc #, c-format msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " "architecture '%s'" msgstr "" @@ -307,11 +314,9 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" -"Nie udaÅ‚o siÄ™ znaleźć oczekiwanego wpisu \"%s\" w pliku Release " -"(nieprawidÅ‚owy wpis sources.list lub nieprawidÅ‚owy plik)" #: apt-pkg/acquire-item.cc #, c-format @@ -339,6 +344,31 @@ msgstr "NieprawidÅ‚owa dystrybucja: %s (oczekiwano %s, a otrzymano %s)" #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -427,12 +457,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "Plik indeksu typu \"%s\" nie jest obsÅ‚ugiwany" -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "Nie udaÅ‚o siÄ™ przejść do %s" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -635,6 +659,11 @@ msgstr "ŹródÅ‚a dla tej pÅ‚yty to:\n" #: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "Nie udaÅ‚o siÄ™ przejść do %s" + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "Nie udaÅ‚o siÄ™ wykonać operacji stat na pliku %s." @@ -1652,6 +1681,12 @@ msgstr "" " \"%s\"\n" "do napÄ™du \"%s\" i nacisnąć enter\n" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "Naprawianie zależnoÅ›ci..." @@ -3855,6 +3890,13 @@ msgstr "PoÅ‚Ä…czenie zostaÅ‚o przedwczeÅ›nie zamkniÄ™te" msgid "Empty files can't be valid archives" msgstr "Puste pliki nie mogÄ… być prawidÅ‚owymi archiwami" +#~ msgid "" +#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list " +#~ "entry or malformed file)" +#~ msgstr "" +#~ "Nie udaÅ‚o siÄ™ znaleźć oczekiwanego wpisu \"%s\" w pliku Release " +#~ "(nieprawidÅ‚owy wpis sources.list lub nieprawidÅ‚owy plik)" + #~ msgid "Unmet dependencies. Try using --fix-broken." #~ msgstr "NiespeÅ‚nione zależnoÅ›ci. ProszÄ™ spróbować użyć --fix-broken." @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 1.0.5\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:41+0100\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2012-06-29 15:45+0100\n" "Last-Translator: Miguel Figueiredo <elmig@debianpt.org>\n" "Language-Team: Portuguese <traduz@debianpt.org>\n" @@ -213,7 +213,7 @@ msgstr "O directório %s é desviado" #: apt-pkg/acquire-item.cc #, fuzzy, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "O directório %s é desviado" #: apt-pkg/acquire-item.cc @@ -296,6 +296,13 @@ msgstr "Erro GPG: %s: %s" #: apt-pkg/acquire-item.cc #, c-format msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " "architecture '%s'" msgstr "" @@ -303,11 +310,9 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" -"Incapaz de encontrar a entrada '%s' esperada no ficheiro Release (entrada " -"errada em sources.list ou ficheiro malformado)" #: apt-pkg/acquire-item.cc #, c-format @@ -335,6 +340,31 @@ msgstr "Distribuição em conflito: %s (esperado %s mas obtido %s)" #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -426,12 +456,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "Tipo do ficheiro de Ãndice '%s' não é suportado" -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "ImpossÃvel mudar para %s" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -635,6 +659,11 @@ msgstr "As entradas de listas de Source para este Disco são:\n" #: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "ImpossÃvel mudar para %s" + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "Não foi possÃvel fazer stat %s." @@ -1656,6 +1685,12 @@ msgstr "" " '%s'\n" "no leitor '%s' e pressione enter\n" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "A corrigir dependências..." @@ -3833,6 +3868,13 @@ msgstr "Ligação encerrada prematuramente" msgid "Empty files can't be valid archives" msgstr "Ficheiros vazios não podem ser arquivos válidos" +#~ msgid "" +#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list " +#~ "entry or malformed file)" +#~ msgstr "" +#~ "Incapaz de encontrar a entrada '%s' esperada no ficheiro Release (entrada " +#~ "errada em sources.list ou ficheiro malformado)" + #~ msgid "Unmet dependencies. Try using --fix-broken." #~ msgstr "Dependências não satisfeitas. Tente utilizar --fix-broken." diff --git a/po/pt_BR.po b/po/pt_BR.po index d5f1c370e..333db8a37 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 1.0.5\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:41+0100\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2008-11-17 02:33-0200\n" "Last-Translator: Felipe Augusto van de Wiel (faw) <faw@debian.org>\n" "Language-Team: Brazilian Portuguese <debian-l10n-portuguese@lists.debian." @@ -213,7 +213,7 @@ msgstr "O diretório %s é desviado (\"diverted\")" #: apt-pkg/acquire-item.cc #, fuzzy, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "O diretório %s é desviado (\"diverted\")" #: apt-pkg/acquire-item.cc @@ -293,6 +293,13 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " "architecture '%s'" msgstr "" @@ -300,8 +307,8 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" #: apt-pkg/acquire-item.cc @@ -328,6 +335,31 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -419,12 +451,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "Tipo de arquivo de Ãndice '%s' não é suportado" -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "ImpossÃvel mudar para %s" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -615,6 +641,11 @@ msgstr "Entradas na lista de fontes para este disco são:\n" #: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "ImpossÃvel mudar para %s" + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "ImpossÃvel executar \"stat\" %s." @@ -1599,6 +1630,12 @@ msgstr "" " '%s'\n" "na unidade '%s' e pressione enter\n" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "Corrigindo dependências..." @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 1.0.5\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:41+0100\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2008-11-15 02:21+0200\n" "Last-Translator: Eddy PetriÈ™or <eddy.petrisor@gmail.com>\n" "Language-Team: Romanian <debian-l10n-romanian@lists.debian.org>\n" @@ -217,7 +217,7 @@ msgstr "Directorul %s este redirectat" #: apt-pkg/acquire-item.cc #, fuzzy, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "Directorul %s este redirectat" #: apt-pkg/acquire-item.cc @@ -297,6 +297,13 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " "architecture '%s'" msgstr "" @@ -304,8 +311,8 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" #: apt-pkg/acquire-item.cc @@ -332,6 +339,31 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -422,12 +454,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "Tipul de fiÈ™ier index '%s' nu este suportat" -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "Nu pot schimba la %s" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -619,6 +645,11 @@ msgstr "Intrările listei surselor pentru acest disc sunt:\n" #: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "Nu pot schimba la %s" + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "Nu pot determina starea %s." @@ -1602,6 +1633,12 @@ msgstr "" " „%sâ€\n" "în unitatea „%s†și apăsaÈ›i Enter\n" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "Corectez dependenÈ›ele..." @@ -8,19 +8,20 @@ # Dmitry Astapov <adept@despammed.com>, 2004. # Yuri Kozlov <kozlov.y@gmail.com>, 2004, 2005, 2006, 2007, 2008. # Yuri Kozlov <yuray@komyakino.ru>, 2009, 2010, 2012, 2015, 2016. +# Aleksej Shilin <rootlexx@mail.ru>, 2017. msgid "" msgstr "" "Project-Id-Version: apt 1.2.12\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:41+0100\n" -"PO-Revision-Date: 2016-05-19 20:50+0300\n" -"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" +"PO-Revision-Date: 2017-07-01 16:05+0300\n" +"Last-Translator: Aleksej Shilin <rootlexx@mail.ru>\n" "Language-Team: Russian <debian-l10n-russian@lists.debian.org>\n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Lokalize 1.5\n" +"X-Generator: Lokalize 2.0\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" @@ -225,7 +226,7 @@ msgstr "Репозиторий «%s» больше не подпиÑан." #: apt-pkg/acquire-item.cc #, fuzzy, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "Репозиторий «%s» не Ñодержит файла Release." #: apt-pkg/acquire-item.cc @@ -309,6 +310,18 @@ msgid "GPG error: %s: %s" msgstr "Ошибка GPG: %s: %s" #: apt-pkg/acquire-item.cc +#, fuzzy, c-format +#| msgid "" +#| "Skipping acquire of configured file '%s' as repository '%s' doesn't " +#| "support architecture '%s'" +msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" +"ПропуÑкаетÑÑ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ðµ наÑтроенного файла «%s», так как репозиторий «%s» не " +"поддерживает архитектуру «%s»" + +#: apt-pkg/acquire-item.cc #, c-format msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " @@ -318,13 +331,16 @@ msgstr "" "поддерживает архитектуру «%s»" #: apt-pkg/acquire-item.cc -#, c-format +#, fuzzy, c-format +#| msgid "" +#| "Skipping acquire of configured file '%s' as repository '%s' doesn't " +#| "support architecture '%s'" msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" -"Ðевозможно найти ожидаемый Ñлемент «%s» в файле Release (Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ " -"в sources.list или файл)" +"ПропуÑкаетÑÑ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ðµ наÑтроенного файла «%s», так как репозиторий «%s» не " +"поддерживает архитектуру «%s»" #: apt-pkg/acquire-item.cc #, c-format @@ -354,6 +370,31 @@ msgstr "Конфликт раÑпроÑтранениÑ: %s (ожидалÑÑ %s #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -447,23 +488,17 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "ОчиÑтка «%s» не поддерживаетÑÑ" -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "Ðевозможно Ñменить текущий каталог на %s" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc #, c-format msgid "Retrieving file %li of %li (%s remaining)" -msgstr "СкачиваетÑÑ Ñ„Ð°Ð¹Ð» %li из %li (оÑталоÑÑŒ %s)" +msgstr "Получение файла %li из %li (оÑталоÑÑŒ %s)" #: apt-pkg/acquire.cc #, c-format msgid "Retrieving file %li of %li" -msgstr "СкачиваетÑÑ Ñ„Ð°Ð¹Ð» %li из %li" +msgstr "Получение файла %li из %li" #: apt-pkg/algorithms.cc #, c-format @@ -651,6 +686,11 @@ msgstr "ЗапиÑи в ÑпиÑке иÑточников Ð´Ð»Ñ Ñтого ди #: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "Ðевозможно Ñменить текущий каталог на %s" + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "Ðевозможно получить атрибуты %s." @@ -1661,7 +1701,7 @@ msgstr "Ошк:%lu %s" #: apt-private/acqprogress.cc #, c-format msgid "Fetched %sB in %s (%sB/s)\n" -msgstr "Получено %sБ за %s (%sБ/c)\n" +msgstr "Получено %sB за %s (%sB/s)\n" #: apt-private/acqprogress.cc msgid " [Working]" @@ -1678,6 +1718,12 @@ msgstr "" " «%s»\n" "в уÑтройÑтво «%s» и нажмите [Enter]\n" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "ИÑправление завиÑимоÑтей…" @@ -1960,7 +2006,7 @@ msgstr "Ðеобходимо Ñкачать %sB/%sB архивов.\n" #: apt-private/private-install.cc #, c-format msgid "Need to get %sB of archives.\n" -msgstr "Ðеобходимо Ñкачать %sБ архивов.\n" +msgstr "Ðеобходимо Ñкачать %sB архивов.\n" #. TRANSLATOR: The required space between number and unit is already included #. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB @@ -2005,7 +2051,7 @@ msgstr "" #: apt-private/private-install.cc msgid "Abort." -msgstr "Ðварийное завершение." +msgstr "Прервано." #: apt-private/private-install.cc msgid "Do you want to continue?" @@ -2259,7 +2305,7 @@ msgstr "Пакеты, которые будут обновлены:" #: apt-private/private-output.cc msgid "The following packages will be DOWNGRADED:" -msgstr "Пакеты, будут заменены на более СТÐРЫЕ верÑии:" +msgstr "Пакеты, которые будут заменены на более СТÐРЫЕ верÑии:" #: apt-private/private-output.cc msgid "The following held packages will be changed:" @@ -2282,12 +2328,12 @@ msgstr "" #: apt-private/private-output.cc #, c-format msgid "%lu upgraded, %lu newly installed, " -msgstr "обновлено %lu, уÑтановлено %lu новых пакетов, " +msgstr "Обновлено %lu пакетов, уÑтановлено %lu новых пакетов, " #: apt-private/private-output.cc #, c-format msgid "%lu reinstalled, " -msgstr "переуÑтановлено %lu переуÑтановлено, " +msgstr "переуÑтановлено %lu пакетов, " #: apt-private/private-output.cc #, c-format @@ -2302,7 +2348,7 @@ msgstr "Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¾Ñ‚Ð¼ÐµÑ‡ÐµÐ½Ð¾ %lu пакетов, и %lu па #: apt-private/private-output.cc #, c-format msgid "%lu not fully installed or removed.\n" -msgstr "не уÑтановлено до конца или удалено %lu пакетов.\n" +msgstr "УÑтановлено или удалено не до конца %lu пакетов.\n" #. TRANSLATOR: Yes/No question help-text: defaulting to Y[es] #. e.g. "Do you want to continue? [Y/n] " @@ -2457,14 +2503,14 @@ msgstr "ПропуÑкаем уже Ñкачанный файл «%s»\n" #: apt-private/private-source.cc #, c-format msgid "Need to get %sB/%sB of source archives.\n" -msgstr "Ðеобходимо получить %sб/%sб архивов иÑходного кода.\n" +msgstr "Ðеобходимо Ñкачать %sB/%sB архивов иÑходного кода.\n" #. TRANSLATOR: The required space between number and unit is already included #. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB #: apt-private/private-source.cc #, c-format msgid "Need to get %sB of source archives.\n" -msgstr "Ðеобходимо получить %sб архивов иÑходного кода.\n" +msgstr "Ðеобходимо Ñкачать %sB архивов иÑходного кода.\n" #: apt-private/private-source.cc #, c-format @@ -3898,6 +3944,13 @@ msgstr "Соединение закрыто преждевременно" msgid "Empty files can't be valid archives" msgstr "ПуÑтые файлы не могут быть допуÑтимыми архивами" +#~ msgid "" +#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list " +#~ "entry or malformed file)" +#~ msgstr "" +#~ "Ðевозможно найти ожидаемый Ñлемент «%s» в файле Release (Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ " +#~ "запиÑÑŒ в sources.list или файл)" + #~ msgid "Unmet dependencies. Try using --fix-broken." #~ msgstr "" #~ "Ðеудовлетворённые завиÑимоÑти. ПопытайтеÑÑŒ иÑпользовать --fix-broken." @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 1.0.5\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:41+0100\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2012-06-28 20:49+0100\n" "Last-Translator: Ivan Masár <helix84@centrum.sk>\n" "Language-Team: Slovak <sk-i18n@lists.linux.sk>\n" @@ -215,7 +215,7 @@ msgstr "Adresár %s je divertovaný" #: apt-pkg/acquire-item.cc #, fuzzy, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "Adresár %s je divertovaný" #: apt-pkg/acquire-item.cc @@ -297,6 +297,13 @@ msgstr "Chyba GPG: %s: %s" #: apt-pkg/acquire-item.cc #, c-format msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " "architecture '%s'" msgstr "" @@ -304,11 +311,9 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" -"Nepodarilo sa nájsÅ¥ oÄakávanú položku „%s“ v súbore Release (Nesprávna " -"položka sources.list alebo chybný formát súboru)" #: apt-pkg/acquire-item.cc #, c-format @@ -336,6 +341,31 @@ msgstr "V konflikte s distribúciou: %s (oÄakávalo sa %s ale dostali sme %s)" #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -423,12 +453,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "Indexový súbor typu „%s“ nie je podporovaný" -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "Nedá sa prejsÅ¥ do %s" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -624,6 +648,11 @@ msgstr "Položky zoznamu zdrojov pre tento disk sú:\n" #: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "Nedá sa prejsÅ¥ do %s" + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "Nie je možné vykonaÅ¥ stat %s." @@ -1622,6 +1651,12 @@ msgstr "" " „%s“\n" "do mechaniky „%s“ a stlaÄte Enter\n" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "Opravujú sa závislosti..." @@ -3794,6 +3829,13 @@ msgstr "Spojenie bolo predÄasne ukonÄené" msgid "Empty files can't be valid archives" msgstr "Prázdne súbory nemôžu byÅ¥ platné archÃvy" +#~ msgid "" +#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list " +#~ "entry or malformed file)" +#~ msgstr "" +#~ "Nepodarilo sa nájsÅ¥ oÄakávanú položku „%s“ v súbore Release (Nesprávna " +#~ "položka sources.list alebo chybný formát súboru)" + #~ msgid "Unmet dependencies. Try using --fix-broken." #~ msgstr "Nesplnené závislosti. Skúste použiÅ¥ --fix-broken." @@ -4,7 +4,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 0.5.5\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:41+0100\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2012-06-27 21:29+0000\n" "Last-Translator: Andrej Znidarsic <andrej.znidarsic@gmail.com>\n" "Language-Team: Slovenian <sl@li.org>\n" @@ -215,7 +215,7 @@ msgstr "Mapa %s je odklonjena" #: apt-pkg/acquire-item.cc #, fuzzy, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "Mapa %s je odklonjena" #: apt-pkg/acquire-item.cc @@ -297,6 +297,13 @@ msgstr "Napaka GPG: %s: %s" #: apt-pkg/acquire-item.cc #, c-format msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " "architecture '%s'" msgstr "" @@ -304,11 +311,9 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" -"Ni mogoÄe najti priÄakovanega vnosa '%s' v datoteki Release (napaÄen vnos " -"sources.list ali slabo oblikovana datoteka)" #: apt-pkg/acquire-item.cc #, c-format @@ -336,6 +341,31 @@ msgstr "Distribucija v sporu: %s (priÄakovana %s, toda dobljena %s)" #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -425,12 +455,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "Vrsta datoteke s kazalom '%s' ni podprta" -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "Ni mogoÄe spremeniti v %s" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -623,6 +647,11 @@ msgstr "Izvorni vnosi za ta disk so:\n" #: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "Ni mogoÄe spremeniti v %s" + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "Ni mogoÄe doloÄiti %s." @@ -1622,6 +1651,12 @@ msgstr "" " '%s'\n" "v enoto '%s' in pritisnite vnosno tipko\n" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "Popravljanje odvisnosti ..." @@ -3801,6 +3836,13 @@ msgstr "Povezava se je prezgodaj zaprla" msgid "Empty files can't be valid archives" msgstr "Prazne datoteke ne morejo biti veljavni arhivi" +#~ msgid "" +#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list " +#~ "entry or malformed file)" +#~ msgstr "" +#~ "Ni mogoÄe najti priÄakovanega vnosa '%s' v datoteki Release (napaÄen vnos " +#~ "sources.list ali slabo oblikovana datoteka)" + #~ msgid "Unmet dependencies. Try using --fix-broken." #~ msgstr "NereÅ¡ene odvisnosti. Poskusite uporabiti --fix-broken." @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: apt\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:41+0100\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2015-08-19 21:33+0200\n" "Last-Translator: Anders Jonsson <anders.jonsson@norsjovallen.se>\n" "Language-Team: Swedish <debian-l10n-swedish@debian.org>\n" @@ -216,7 +216,7 @@ msgstr "FörrÃ¥det â€%s†är inte längre signerat." #: apt-pkg/acquire-item.cc #, fuzzy, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "FörrÃ¥det â€%s†är inte längre signerat." #: apt-pkg/acquire-item.cc @@ -301,6 +301,13 @@ msgstr "GPG-fel: %s: %s" #: apt-pkg/acquire-item.cc #, c-format msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " "architecture '%s'" msgstr "" @@ -308,11 +315,9 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" -"Kunde inte hitta förväntad post â€%s†i Release-fil (Felaktig sources.list-" -"post eller fel format pÃ¥ fil)" #: apt-pkg/acquire-item.cc #, c-format @@ -340,6 +345,31 @@ msgstr "Konflikt i distribution: %s (förväntade %s men fick %s)" #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -432,13 +462,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "Rensning av %s stöds inte" -# Felmeddelande för misslyckad chdir -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "Kunde inte byta till %s" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -635,6 +658,12 @@ msgstr "Skriver ny källista\n" msgid "Source list entries for this disc are:\n" msgstr "Poster i källistan för denna skiva:\n" +# Felmeddelande för misslyckad chdir +#: apt-pkg/clean.cc +#, c-format +msgid "Unable to change to %s" +msgstr "Kunde inte byta till %s" + #: apt-pkg/clean.cc #, c-format msgid "Unable to stat %s." @@ -1644,6 +1673,12 @@ msgstr "" " â€%sâ€\n" "i enheten â€%s†och tryck pÃ¥ [Retur]\n" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "Korrigerar beroenden…" @@ -3834,6 +3869,13 @@ msgstr "Anslutningen stängdes i förtid" msgid "Empty files can't be valid archives" msgstr "Tomma filer kan inte vara giltiga arkiv" +#~ msgid "" +#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list " +#~ "entry or malformed file)" +#~ msgstr "" +#~ "Kunde inte hitta förväntad post â€%s†i Release-fil (Felaktig sources.list-" +#~ "post eller fel format pÃ¥ fil)" + #~ msgid "Unmet dependencies. Try using --fix-broken." #~ msgstr "Otillfredsställda beroenden. Prova med --fix-broken." @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 1.0.5\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:41+0100\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2014-12-12 13:00+0700\n" "Last-Translator: Theppitak Karoonboonyanan <thep@debian.org>\n" "Language-Team: Thai <thai-l10n@googlegroups.com>\n" @@ -213,7 +213,7 @@ msgstr "ไดเรà¸à¸—à¸à¸£à¸µ %s ถูภdivert" #: apt-pkg/acquire-item.cc #, fuzzy, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "ไดเรà¸à¸—à¸à¸£à¸µ %s ถูภdivert" #: apt-pkg/acquire-item.cc @@ -296,6 +296,13 @@ msgstr "ข้à¸à¸œà¸´à¸”พลาดจาภGPG: %s: %s" #: apt-pkg/acquire-item.cc #, c-format msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " "architecture '%s'" msgstr "" @@ -303,11 +310,9 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" -"ไม่พบรายà¸à¸²à¸£ '%s' ที่ต้à¸à¸‡à¸à¸²à¸£à¹ƒà¸™à¹à¸Ÿà¹‰à¸¡ Release (รายà¸à¸²à¸£ sources.list ไม่ถูà¸à¸•à¹‰à¸à¸‡ " -"หรืà¸à¹à¸Ÿà¹‰à¸¡à¸œà¸´à¸”รูปà¹à¸šà¸š)" #: apt-pkg/acquire-item.cc #, c-format @@ -335,6 +340,31 @@ msgstr "ชุดจัดà¹à¸ˆà¸à¸‚ัดà¹à¸¢à¹‰à¸‡à¸à¸±à¸™: %s (ต้ภ#: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -420,12 +450,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "ไม่รà¸à¸‡à¸£à¸±à¸šà¸à¸²à¸£à¸¥à¹‰à¸²à¸‡à¸‚้à¸à¸¡à¸¹à¸¥à¸—ี่ %s" -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "ไม่สามารถเปลี่ยนไดเรà¸à¸—à¸à¸£à¸µà¹„ปยัง %s" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -613,6 +637,11 @@ msgstr "บรรทัดรายชื่à¸à¹à¸«à¸¥à¹ˆà¸‡à¹à¸žà¸à¹€à¸à¸ˆ #: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "ไม่สามารถเปลี่ยนไดเรà¸à¸—à¸à¸£à¸µà¹„ปยัง %s" + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "ไม่สามารถ stat %s" @@ -1593,6 +1622,12 @@ msgstr "" " '%s'\n" "ลงในไดรว์ %s à¹à¸¥à¹‰à¸§à¸à¸” enter\n" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "à¸à¸³à¸¥à¸±à¸‡à¹à¸à¹‰à¸›à¸±à¸à¸«à¸²à¸„วามขึ้นต่à¸à¸à¸±à¸™à¸£à¸°à¸«à¸§à¹ˆà¸²à¸‡à¹à¸žà¸à¹€à¸à¸ˆ..." @@ -3715,6 +3750,13 @@ msgstr "à¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸à¸¡à¸•à¹ˆà¸à¸–ูà¸à¸›à¸´à¸”à¸à¹ˆà¸à¸™à¹€à¸§ msgid "Empty files can't be valid archives" msgstr "à¹à¸Ÿà¹‰à¸¡à¸§à¹ˆà¸²à¸‡à¹€à¸›à¸¥à¹ˆà¸²à¹„ม่สามารถเป็นà¹à¸Ÿà¹‰à¸¡à¸ˆà¸±à¸”เà¸à¹‡à¸šà¸—ี่ใช้à¸à¸²à¸£à¹„ด้" +#~ msgid "" +#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list " +#~ "entry or malformed file)" +#~ msgstr "" +#~ "ไม่พบรายà¸à¸²à¸£ '%s' ที่ต้à¸à¸‡à¸à¸²à¸£à¹ƒà¸™à¹à¸Ÿà¹‰à¸¡ Release (รายà¸à¸²à¸£ sources.list ไม่ถูà¸à¸•à¹‰à¸à¸‡ " +#~ "หรืà¸à¹à¸Ÿà¹‰à¸¡à¸œà¸´à¸”รูปà¹à¸šà¸š)" + #~ msgid "Unmet dependencies. Try using --fix-broken." #~ msgstr "รายà¸à¸²à¸£à¹à¸žà¸à¹€à¸à¸ˆà¸—ี่ต้à¸à¸‡à¹ƒà¸Šà¹‰à¹„ม่ครบ à¸à¸£à¸¸à¸“าลà¸à¸‡à¹ƒà¸Šà¹‰à¸•à¸±à¸§à¹€à¸¥à¸·à¸à¸ --fix-broken" @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 1.0.5\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:41+0100\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2007-03-29 21:36+0800\n" "Last-Translator: Eric Pareja <xenos@upm.edu.ph>\n" "Language-Team: Tagalog <debian-tl@banwa.upm.edu.ph>\n" @@ -215,7 +215,7 @@ msgstr "Ang directory %s ay divertado" #: apt-pkg/acquire-item.cc #, fuzzy, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "Ang directory %s ay divertado" #: apt-pkg/acquire-item.cc @@ -296,6 +296,13 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " "architecture '%s'" msgstr "" @@ -303,8 +310,8 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" #: apt-pkg/acquire-item.cc @@ -331,6 +338,31 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -421,12 +453,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "Hindi suportado ang uri ng talaksang index na '%s'" -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "Di makalipat sa %s" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -619,6 +645,11 @@ msgstr "Mga nakatala sa Listahan ng Source para sa Disc na ito ay:\n" #: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "Di makalipat sa %s" + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "Hindi ma-stat ang %s" @@ -1606,6 +1637,12 @@ msgstr "" " '%s'\n" "sa drive '%s' at pindutin ang enter\n" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "Inaayos ang mga dependensiya..." @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 1.0.5\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:41+0100\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2016-09-24 03:24+0300\n" "Last-Translator: Mert Dirik <mertdirik@gmail.com>\n" "Language-Team: Debian l10n Turkish <debian-l10n-turkish@lists.debian.org>\n" @@ -222,7 +222,7 @@ msgstr "'%s' deposu imzalanmamış" #: apt-pkg/acquire-item.cc #, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "'%s' deposu artık Release dosyası barındırmıyor." #: apt-pkg/acquire-item.cc @@ -307,6 +307,18 @@ msgid "GPG error: %s: %s" msgstr "GPG hatası: %s: %s" #: apt-pkg/acquire-item.cc +#, fuzzy, c-format +#| msgid "" +#| "Skipping acquire of configured file '%s' as repository '%s' doesn't " +#| "support architecture '%s'" +msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" +"'%2$s' deposu '%3$s' mimarisini desteklemediÄŸi için yapılandırılmış '%1$s' " +"dosyası alınmıyor" + +#: apt-pkg/acquire-item.cc #, c-format msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " @@ -316,13 +328,16 @@ msgstr "" "dosyası alınmıyor" #: apt-pkg/acquire-item.cc -#, c-format +#, fuzzy, c-format +#| msgid "" +#| "Skipping acquire of configured file '%s' as repository '%s' doesn't " +#| "support architecture '%s'" msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" -"'Release' dosyasında olması beklenilen '%s' girdisi bulunamadı (sources.list " -"dosyasındaki girdi ya da satır hatalı)" +"'%2$s' deposu '%3$s' mimarisini desteklemediÄŸi için yapılandırılmış '%1$s' " +"dosyası alınmıyor" #: apt-pkg/acquire-item.cc #, c-format @@ -352,6 +367,31 @@ msgstr "Dağıtım çakışması: %s (beklenen %s ama eldeki %s)" #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -447,12 +487,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "%s temizliÄŸi desteklenmiyor" -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "%s olarak deÄŸiÅŸtirilemedi" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -645,6 +679,11 @@ msgstr "Bu disk için olan kaynak listesi girdileri:\n" #: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "%s olarak deÄŸiÅŸtirilemedi" + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "%s için dosya bilgisi alınamadı." @@ -1651,6 +1690,12 @@ msgstr "" " '%1$s'\n" "olarak etiketlenmiÅŸ diski takın ve [Enter] tuÅŸuna basın\n" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "Bağımlılıklar düzeltiliyor..." @@ -3852,6 +3897,13 @@ msgstr "BaÄŸlantı vaktinden önce kapandı" msgid "Empty files can't be valid archives" msgstr "BoÅŸ dosyalar geçerli birer arÅŸiv dosyası olamazlar" +#~ msgid "" +#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list " +#~ "entry or malformed file)" +#~ msgstr "" +#~ "'Release' dosyasında olması beklenilen '%s' girdisi bulunamadı (sources." +#~ "list dosyasındaki girdi ya da satır hatalı)" + #~ msgid "Unmet dependencies. Try using --fix-broken." #~ msgstr "Karşılanmayan bağımlılıklar. --fix-broken kullanmayı deneyin." @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 1.0.5\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:41+0100\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2012-09-25 20:19+0300\n" "Last-Translator: A. Bondarenko <artem.brz@gmail.com>\n" "Language-Team: УкраїнÑька <uk@li.org>\n" @@ -223,7 +223,7 @@ msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ñ–Ñ %s Ñ” відхиленою (diverted)" #: apt-pkg/acquire-item.cc #, fuzzy, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ñ–Ñ %s Ñ” відхиленою (diverted)" #: apt-pkg/acquire-item.cc @@ -305,6 +305,13 @@ msgstr "Помилка GPG: %s: %s" #: apt-pkg/acquire-item.cc #, c-format msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " "architecture '%s'" msgstr "" @@ -312,11 +319,9 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" -"Ðеможливо знайти очікуваний Ð·Ð°Ð¿Ð¸Ñ '%s' у 'Release' файлі (Ðевірний Ð·Ð°Ð¿Ð¸Ñ Ñƒ " -"sources.list, або пошкоджений файл)" #: apt-pkg/acquire-item.cc #, c-format @@ -344,6 +349,31 @@ msgstr "Конфліктуючий диÑтрибутив: %s (Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð²Ñ #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -433,12 +463,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "Тип '%s' індекÑного файлу не підтримуєтьÑÑ" -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "Ðеможливо змінити на %s" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -634,6 +658,11 @@ msgstr "Перелік вихідних текÑтів Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ диÑÐ #: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "Ðеможливо змінити на %s" + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "Ðеможливо прочитати атрибути %s." @@ -1653,6 +1682,12 @@ msgstr "" " '%s'\n" "у приÑтрій '%s' Ñ– натиÑніть Enter\n" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "Ð’Ð¸Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð°Ð»ÐµÐ¶Ð½Ð¾Ñтей..." @@ -3856,6 +3891,13 @@ msgstr "З'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¾ передчаÑно" msgid "Empty files can't be valid archives" msgstr "ПуÑÑ‚Ñ– файли не можуть бути правильними архівами" +#~ msgid "" +#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list " +#~ "entry or malformed file)" +#~ msgstr "" +#~ "Ðеможливо знайти очікуваний Ð·Ð°Ð¿Ð¸Ñ '%s' у 'Release' файлі (Ðевірний Ð·Ð°Ð¿Ð¸Ñ " +#~ "у sources.list, або пошкоджений файл)" + #~ msgid "Unmet dependencies. Try using --fix-broken." #~ msgstr "Ðезадоволені залежноÑÑ‚Ñ–. Спробуйте викориÑтати --fix-broken." @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 1.0.8\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:41+0100\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2014-09-12 13:48+0700\n" "Last-Translator: Trần Ngá»c Quân <vnwildman@gmail.com>\n" "Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n" @@ -217,7 +217,7 @@ msgstr "ThÆ° mục %s bị trệch hÆ°á»›ng" #: apt-pkg/acquire-item.cc #, fuzzy, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "ThÆ° mục %s bị trệch hÆ°á»›ng" #: apt-pkg/acquire-item.cc @@ -301,6 +301,13 @@ msgstr "Lá»—i GPG: %s: %s" #: apt-pkg/acquire-item.cc #, c-format msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " "architecture '%s'" msgstr "" @@ -308,11 +315,9 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" -"Không tìm thấy mục cần thiết “%s†trong táºp tin Phát hà nh (Sai mục trong " -"sources.list hoặc táºp tin bị há»ng)" #: apt-pkg/acquire-item.cc #, c-format @@ -340,6 +345,31 @@ msgstr "Bản phát hà nh xung Ä‘á»™t: %s (cần %s nhÆ°ng lại nháºn được #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -429,12 +459,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "Không há»— trợ việc xóa %s" -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "Không thể chuyển đổi sang %s" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -628,6 +652,11 @@ msgstr "Các mục tin danh sách nguồn cho Ä‘Ä©a nà y:\n" #: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "Không thể chuyển đổi sang %s" + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "Không thể lấy trạng thái vá» %s." @@ -1636,6 +1665,12 @@ msgstr "" " “%sâ€\n" "và o ổ “%s†rồi bấm nút Enter\n" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "Äang sá»a chữa quan hệ phụ thuá»™c..." @@ -3825,6 +3860,13 @@ msgstr "Kết nối bị đóng bất ngá»" msgid "Empty files can't be valid archives" msgstr "Các táºp tin trống rá»—ng không phải là kho lÆ°u hợp lệ" +#~ msgid "" +#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list " +#~ "entry or malformed file)" +#~ msgstr "" +#~ "Không tìm thấy mục cần thiết “%s†trong táºp tin Phát hà nh (Sai mục trong " +#~ "sources.list hoặc táºp tin bị há»ng)" + #~ msgid "Unmet dependencies. Try using --fix-broken." #~ msgstr "" #~ "ChÆ°a thá»a mãn quan hệ phụ thuá»™c. Hãy thá» dùng tùy chá»n “--fix-brokenâ€." diff --git a/po/zh_CN.po b/po/zh_CN.po index fd9ca30b4..ed5bbbdd8 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -8,10 +8,10 @@ # msgid "" msgstr "" -"Project-Id-Version: apt 1.4.x\n" +"Project-Id-Version: apt 1.5.x\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:41+0100\n" -"PO-Revision-Date: 2017-01-26 12:00+0000\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" +"PO-Revision-Date: 2017-07-04 03:00+0000\n" "Last-Translator: Zhou Mo <cdluminate@gmail.com>\n" "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n" "Language: zh_CN\n" @@ -215,7 +215,7 @@ msgstr "仓库 “%s†的ç¾åä¸å†ç”Ÿæ•ˆã€‚" #: apt-pkg/acquire-item.cc #, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "仓库 “%s†ä¸å†å«æœ‰ Release 文件。" #: apt-pkg/acquire-item.cc @@ -297,24 +297,32 @@ msgstr "GPG 错误:%s: %s" #: apt-pkg/acquire-item.cc #, c-format msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "鉴于仓库 '%2$s' ä¸å«æœ‰ '%3$s' 组件,跳过é…置文件 '%1$s' 的获å–。" +"(sources.list ä¸çš„组件å称是å¦æ‹¼å†™é”™è¯¯ï¼Ÿ)" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " "architecture '%s'" -msgstr "鉴于仓库 '%2$s' ä¸æ”¯æŒ '%3$s' 体系结构,跳过é…置文件 '%1$s' çš„æ•èŽ·ã€‚" +msgstr "鉴于仓库 '%2$s' ä¸æ”¯æŒ '%3$s' 体系结构,跳过é…置文件 '%1$s' 的获å–。" #: apt-pkg/acquire-item.cc #, c-format msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" -msgstr "" -"在 Release 文件ä¸æ‰¾ä¸åˆ°æœŸæœ›çš„æ¡ç›® %s(sources.listæ¡ç›®æœ‰è¯¯ï¼Œæˆ–者文件有误)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" +msgstr "鉴于仓库 '%2$s' ä¸æä¾›é…置文件 '%1$s' ,跳过其获å–过程。" +"(sources.list ä¸æ˜¯å¦æœ‰æ‹¼å†™é”™è¯¯ï¼Ÿ)" #: apt-pkg/acquire-item.cc #, c-format msgid "" "Skipping acquire of configured file '%s' as repository '%s' provides only " "weak security information for it" -msgstr "鉴于仓库 '%2$s' æ供的安全信æ¯å¼ºåº¦å¤ªä½Žï¼Œè·³è¿‡é…置文件 '%1$s' çš„acquire." +msgstr "鉴于仓库 '%2$s' æ供的安全信æ¯å¼ºåº¦å¤ªä½Žï¼Œè·³è¿‡é…置文件 '%1$s' 的获å–。" #. TRANSLATOR: The first %s is the URL of the bad Release file, the second is #. the time since then the file is invalid - formatted in the same way as in @@ -334,6 +342,32 @@ msgstr "冲çªçš„å‘行版:%s (期望 %s 但得到 %s)" #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "仓库'%s'将其'%s'值从'%s'修改到了'%s'" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "仓库'%s'将其'%s'的默认优先级从'%hi'修改到了'%hi'。" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "更多有关细节å¯ä»¥é˜…览在线å‘行注记:%s" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "为了让这个仓库能够应用,这必须在更新之å‰æ˜¾å¼æŽ¥å—。更多细节请å‚阅" +" %s 手册。" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -421,12 +455,6 @@ msgstr "由于文件'%s'æ— æ³•è¢«ç”¨æˆ·'%s'访问,已脱离沙盒并ææƒä¸ºæ msgid "Clean of %s is not supported" msgstr "%s çš„ Clean (清ç†)ä¸è¢«æ”¯æŒ" -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "æ— æ³•åˆ‡æ¢å·¥ä½œç›®å½•åˆ° %s" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -617,6 +645,11 @@ msgstr "对应于该盘片的软件æºè®¾ç½®é¡¹æ˜¯ï¼š\n" #: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "æ— æ³•åˆ‡æ¢å·¥ä½œç›®å½•åˆ° %s" + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "æ— æ³•è¯»å– %s 的状æ€ã€‚" @@ -1589,6 +1622,12 @@ msgstr "" " “%sâ€\n" "的盘片æ’入驱动器“%sâ€å†æŒ‰ã€Œå›žè½¦ã€é”®\n" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "您是å¦æ„¿æ„接å—这些更改,并且继ç»ä»Žæ¤ä»“库更新?" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "æ£åœ¨ä¿®å¤ä¾èµ–关系..." @@ -3712,6 +3751,12 @@ msgstr "连接被永久关é—" msgid "Empty files can't be valid archives" msgstr "空文件ä¸æ˜¯æœ‰æ•ˆå½’æ¡£" +#~ msgid "" +#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list " +#~ "entry or malformed file)" +#~ msgstr "" +#~ "在 Release 文件ä¸æ‰¾ä¸åˆ°æœŸæœ›çš„æ¡ç›® %s(sources.listæ¡ç›®æœ‰è¯¯ï¼Œæˆ–者文件有误)" + #~ msgid "Unmet dependencies. Try using --fix-broken." #~ msgstr "ä¸èƒ½æ»¡è¶³ä¾èµ–关系。ä¸å¦¨è¯•ä¸€ä¸‹ --fix-broken 选项。" diff --git a/po/zh_TW.po b/po/zh_TW.po index d9ee6b25a..5cc930733 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 1.2.X\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2017-02-06 14:41+0100\n" +"POT-Creation-Date: 2017-07-03 16:55+0200\n" "PO-Revision-Date: 2009-01-28 10:41+0800\n" "Last-Translator: Tetralet <tetralet@gmail.com>\n" "Language-Team: Debian-user in Chinese [Big5] <debian-chinese-big5@lists." @@ -215,7 +215,7 @@ msgstr "路徑 %s 已被抽æ›" #: apt-pkg/acquire-item.cc #, fuzzy, c-format -msgid "The repository '%s' does no longer have a Release file." +msgid "The repository '%s' no longer has a Release file." msgstr "路徑 %s 已被抽æ›" #: apt-pkg/acquire-item.cc @@ -295,6 +295,13 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" +"Skipping acquire of configured file '%s' as repository '%s' doesn't have the " +"component '%s' (component misspelt in sources.list?)" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" "Skipping acquire of configured file '%s' as repository '%s' doesn't support " "architecture '%s'" msgstr "" @@ -302,8 +309,8 @@ msgstr "" #: apt-pkg/acquire-item.cc #, c-format msgid "" -"Unable to find expected entry '%s' in Release file (Wrong sources.list entry " -"or malformed file)" +"Skipping acquire of configured file '%s' as repository '%s' does not seem to " +"provide it (sources.list entry misspelt?)" msgstr "" #: apt-pkg/acquire-item.cc @@ -330,6 +337,31 @@ msgstr "發行版本è¡çªï¼š%s(應當是 %s 但å»å¾—到 %s)" #: apt-pkg/acquire-item.cc #, c-format +msgid "Repository '%s' changed its '%s' value from '%s' to '%s'" +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format +msgid "Repository '%s' changed its default priority for %s from %hi to %hi." +msgstr "" + +#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"More information about this can be found online in the Release notes at: %s" +msgstr "" + +#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8) +#: apt-pkg/acquire-item.cc +#, c-format +msgid "" +"This must be accepted explicitly before updates for this repository can be " +"applied. See %s manpage for details." +msgstr "" + +#: apt-pkg/acquire-item.cc +#, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" @@ -417,12 +449,6 @@ msgstr "" msgid "Clean of %s is not supported" msgstr "ä¸è¢«æ”¯æ´çš„索引檔類型 '%s'" -#: apt-pkg/acquire.cc apt-pkg/clean.cc apt-pkg/contrib/cdromutl.cc -#: methods/mirror.cc -#, c-format -msgid "Unable to change to %s" -msgstr "無法切æ›è‡³ %s" - #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc @@ -607,6 +633,11 @@ msgstr "該碟片的來æºåˆ—è¡¨é …ç›®ç‚ºï¼š\n" #: apt-pkg/clean.cc #, c-format +msgid "Unable to change to %s" +msgstr "無法切æ›è‡³ %s" + +#: apt-pkg/clean.cc +#, c-format msgid "Unable to stat %s." msgstr "無法å–å¾— %s 的狀態。" @@ -1579,6 +1610,12 @@ msgstr "" " '%s'\n" "放入 '%s' è£ç½®ï¼Œç„¶å¾ŒæŒ‰ [Enter] éµ\n" +#: apt-private/acqprogress.cc +msgid "" +"Do you want to accept these changes and continue updating from this " +"repository?" +msgstr "" + #: apt-private/private-cachefile.cc msgid "Correcting dependencies..." msgstr "æ£åœ¨ä¿®æ£ç›¸ä¾é—œä¿‚..." diff --git a/shippable.yml b/shippable.yml index ad72afc80..54a707cdd 100644 --- a/shippable.yml +++ b/shippable.yml @@ -6,10 +6,10 @@ build: image_tag: stretch pull: true ci: - - apt-get install -qq build-essential + - apt-get install -qq build-essential expect - ./prepare-release travis-ci - mkdir build - - ( cd build && cmake .. ) + - ( cd build && cmake -DWITH_CURL=OFF .. ) - make -C build -j 4 - CTEST_OUTPUT_ON_FAILURE=1 make -C build test - - ./test/integration/run-tests -q + - unbuffer ./test/integration/run-tests -q -j 4 diff --git a/test/integration/create-test-data b/test/integration/create-test-data index 7040aaed7..eff2ba530 100755 --- a/test/integration/create-test-data +++ b/test/integration/create-test-data @@ -6,42 +6,55 @@ if [ -z "$1" -o -z "$2" ]; then exit 1 fi +CHECK_ARGS='no' TESTDIR="$(readlink -f "$(dirname "$0")")" . "$TESTDIR/framework" -BUILDDIRECTORY="${TESTDIR}/../../build/bin" +find_project_binary_dir +BUILDDIRECTORY="${APT_INTEGRATION_TESTS_BUILD_DIR:-"${PROJECT_BINARY_DIR}/cmdline"}" -GENERATE=$1 -CODENAME=$2 +GENERATE="$1" +CODENAME="$2" shift 2 -WORKDIR=$(mktemp -d) -trap "rm -rf $WORKDIR" 0 HUP INT QUIT ILL ABRT FPE SEGV PIPE TERM -touch $WORKDIR/status -TMPGEN=$WORKDIR/Packages -export LANG=C - -LISTOFPKGS=$(aptget install $* -t $CODENAME -so Dir::state::status=$WORKDIR/status -o Dir::Cache::archives=$WORKDIR -o pkgCacheGen::Essential=none -o APT::Immediate-Configure=0 2> /dev/null | awk '/^Inst/ {print $2}' | sed -e "s#\$#/$CODENAME#") +WORKDIR="$(mktemp -d)" +cleanupworkdir() { + if [ -z "$WORKDIR" ]; then return; fi + rm -rf "$WORKDIR" +} +trap "cleanupworkdir;" 0 HUP INT QUIT ILL ABRT FPE SEGV PIPE TERM +touch "$WORKDIR/status" +TMPGEN="$WORKDIR/Packages" +export LANG=C.UTF-8 + +aptgetinstall() { + aptget install "$@" --no-install-recommends -t "$CODENAME" -s \ + -o Dir::state::status="$WORKDIR/status" \ + -o Dir::Cache="$WORKDIR" \ + -o pkgCacheGen::Essential=none \ + -o APT::Immediate-Configure=0 +} +LISTOFPKGS="$(aptgetinstall "$@" 2> /dev/null | awk '/^Inst/ {print $2}' | sed -e "s#\$#/$CODENAME#")" if [ -z "$LISTOFPKGS" ]; then echo "List of packages is empty: run apt-get install command again for you now" - aptget install $* -t $CODENAME -so Dir::state::status=$WORKDIR/status -o Dir::Cache::archives=$WORKDIR -o pkgCacheGen::Essential=none -o APT::Immediate-Configure=0 + aptgetinstall exit 1 fi -aptcache show $LISTOFPKGS --no-all-versions 2> $WORKDIR/error.lst > $TMPGEN -sed -i $TMPGEN \ - -e '/^ / d' \ +aptcache show $LISTOFPKGS --no-all-versions 2> "$WORKDIR/error.lst" | sed -e '/^ / d' \ -e '/^SHA1: / d' -e '/^SHA256: / d' \ -e '/^Homepage: / d' -e '/^Tag: / d' \ -e '/^Xul-Appid: / d' \ - -e '/^Status: / d' + -e '/^Status: / d' \ + -e 's/^Description-en:/Description:/' \ + > "$TMPGEN" if [ "$CODENAME" = "experimental" ]; then - aptcache show $(cat $WORKDIR/error.lst | cut -d"'" -f 4 | sed -e 's#$#/sid#') --no-all-versions 2> /dev/null >> $TMPGEN + aptcache show $(cut -d"'" -f 4 "$WORKDIR/error.lst" | sed -e 's#$#/sid#') --no-all-versions 2> /dev/null >> "$TMPGEN" fi if echo "$GENERATE" | grep '^status-' > /dev/null; then - sed -i $TMPGEN -e '/^Package: / a\ + sed -i "$TMPGEN" -e '/^Package: / a\ Status: install ok installed' \ -e '/^Filename: / d' -e '/^Size: / d' -e '/^MD5sum: / d' fi -apt-sortpkgs $TMPGEN > $GENERATE +apt-sortpkgs "$TMPGEN" > "$GENERATE" diff --git a/test/integration/framework b/test/integration/framework index c65ac5acb..12c80b96c 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -2,7 +2,7 @@ EXIT_CODE=0 -while [ -n "$1" ]; do +while [ -n "$1" -a -z "$CHECK_ARGS" ]; do if [ "$1" = "-q" ]; then export MSGLEVEL=2 elif [ "$1" = "-qq" ]; then @@ -1161,7 +1161,7 @@ setupaptarchive() { killgpgagent() { if [ -z "${TMPWORKINGDIRECTORY}" ]; then return; fi local GPGHOME="${TMPWORKINGDIRECTORY}/signinghome" - if [ -e "${GPGHOME}" ]; then return; fi + if [ ! -e "${GPGHOME}" ]; then return; fi # ensure the agent dies quickly as different versions have different suicide heuristics GNUPGHOME="${GPGHOME}" gpgconf --kill gpg-agent >/dev/null 2>&1 || true rm -rf "$GPGHOME" @@ -1428,12 +1428,12 @@ checkdiff() { local TMPFILE2="${TMPWORKINGDIRECTORY}/rootdir/tmp/checkdiff.2.tmp" touch "$TMPFILE1" "$TMPFILE2" if [ "$1" != '-' ]; then - sed -e '/^profiling:/ d' < "$1" >"$TMPFILE1" + sed -e '/^profiling:/ d' -e '/\.\.\.profiling:/{N;s#\.\.\.profiling:.*\n#...#g}' < "$1" >"$TMPFILE1" else TMPFILE1='-' fi if [ "$2" != '-' ]; then - sed -e '/^profiling:/ d' < "$2" >"$TMPFILE2" + sed -e '/^profiling:/ d' -e '/\.\.\.profiling:/{N;s#\.\.\.profiling:.*\n#...#g}' < "$2" >"$TMPFILE2" else TMPFILE2='-' fi @@ -2059,10 +2059,12 @@ aptautotest_aptget_update() { if ! test -d "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists"; then return; fi testfilestats "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt" '%U:%G:%a' '=' "${TEST_DEFAULT_USER}:${TEST_DEFAULT_GROUP}:755" testfilestats "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists" '%U:%G:%a' '=' "${TEST_DEFAULT_USER}:${TEST_DEFAULT_GROUP}:755" + ( + cd / # all copied files are properly chmodded local backupIFS="$IFS" IFS="$(printf "\n\b")" - for file in $(find "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists" -type f ! -name 'lock'); do + find "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists" -type f ! -name 'lock' | while read file; do testfilestats "$file" '%U:%G:%a' '=' "${TEST_DEFAULT_USER}:${TEST_DEFAULT_GROUP}:644" done IFS="$backupIFS" @@ -2074,6 +2076,7 @@ aptautotest_aptget_update() { testfileequal "${TMPWORKINGDIRECTORY}/rootdir/var/log/aptgetupdate.before.lst" \ "$(find "${TMPWORKINGDIRECTORY}/aptarchive/dists" -type f | while read line; do stat --format '%U:%G:%a:%n' "$line"; done | sort)" fi + ) } aptautotest_apt_update() { aptautotest_aptget_update "$@"; } aptautotest_aptcdrom_add() { aptautotest_aptget_update "$@"; } diff --git a/test/integration/test-apt-download-progress b/test/integration/skip-apt-download-progress index 13a18f7c3..13a18f7c3 100755 --- a/test/integration/test-apt-download-progress +++ b/test/integration/skip-apt-download-progress diff --git a/test/integration/test-acquire-binary-all b/test/integration/test-acquire-binary-all index ba47eddc2..379348e3f 100755 --- a/test/integration/test-acquire-binary-all +++ b/test/integration/test-acquire-binary-all @@ -114,9 +114,9 @@ testsuccess grep '^Get.* all Contents ' aptupdate.output testequal 'foo-1 foo-2' aptcache pkgnames foo- -# apt doesn't know supported archs, so missing a configured arch is a failure +# apt doesn't know supported archs, so missing a configured arch is a problem configarchitecture 'amd64' 'i386' -testfailure apt update +testwarningmsg "W: Skipping acquire of configured file 'main/binary-i386/Packages' as repository 'file:$(readlink -f ./aptarchive) unstable InRelease' does not seem to provide it (sources.list entry misspelt?)" apt update testequal 'foo-1 foo-2' aptcache pkgnames foo- diff --git a/test/integration/test-apt-get-update-unauth-warning b/test/integration/test-apt-get-update-unauth-warning index 093478b9e..616e0234c 100755 --- a/test/integration/test-apt-get-update-unauth-warning +++ b/test/integration/test-apt-get-update-unauth-warning @@ -21,7 +21,8 @@ setupaptarchive --no-update APTARCHIVE="$(readlink -f ./aptarchive)" find "$APTARCHIVE/dists/unstable" \( -name 'InRelease' -o -name 'Release.gpg' \) -delete sed -i -n '/^SHA1:$/q;p' "${APTARCHIVE}/dists/unstable/Release" -testwarning aptget update +testfailure aptget update +testwarning aptget update --allow-insecure-repositories rm -rf rootdir/var/lib/apt/lists @@ -35,7 +36,7 @@ Err:2 file:$APTARCHIVE unstable Release Reading package lists... E: The repository 'file:$APTARCHIVE unstable Release' does not have a Release file. N: Updating from such a repository can't be done securely, and is therefore disabled by default. -N: See apt-secure(8) manpage for repository creation and user configuration details." aptget update --no-allow-insecure-repositories +N: See apt-secure(8) manpage for repository creation and user configuration details." aptget update # no package foo testsuccessequal 'Listing...' apt list foo diff --git a/test/integration/test-apt-helper b/test/integration/test-apt-helper index 5e4a96fbd..fda28968f 100755 --- a/test/integration/test-apt-helper +++ b/test/integration/test-apt-helper @@ -79,11 +79,11 @@ setupproxydetect() { echo "$@" } > "${TMPWORKINGDIRECTORY}/apt-proxy-detect" chmod 755 "${TMPWORKINGDIRECTORY}/apt-proxy-detect" - echo "Acquire::${METH}::Proxy-Auto-Detect \"${TMPWORKINGDIRECTORY}/apt-proxy-detect\";" > rootdir/etc/apt/apt.conf.d/02proxy-detect + echo "Acquire::${METH}::${CONFNAME} \"${TMPWORKINGDIRECTORY}/apt-proxy-detect\";" > rootdir/etc/apt/apt.conf.d/02proxy-detect } test_apt_helper_detect_proxy() { - msgmsg 'apt-helper auto-detect-proxy' 'no proxy' + msgmsg "apt-helper $CONFNAME" 'no proxy' testsuccessequal "Using proxy '' for URL 'http://example.com/'" apthelper auto-detect-proxy http://example.com/ setupproxydetect 'http' 'exit 0' testsuccessequal "Using proxy '' for URL 'http://example.com/'" apthelper auto-detect-proxy http://example.com/ @@ -94,19 +94,26 @@ test_apt_helper_detect_proxy() { W: ProxyAutoDetect command returned an empty line" apthelper auto-detect-proxy http://example.com/ setupproxydetect 'http' 'echo DIRECT' testsuccessequal "Using proxy 'DIRECT' for URL 'http://example.com/'" apthelper auto-detect-proxy http://example.com/ + chmod -x "${TMPWORKINGDIRECTORY}/apt-proxy-detect" + testfailureequal "E: ProxyAutoDetect command '${TMPWORKINGDIRECTORY}/apt-proxy-detect' can not be executed! - access (13: Permission denied)" apthelper auto-detect-proxy http://example.com/ - msgmsg 'apt-helper auto-detect-proxy' 'http proxy' + msgmsg "apt-helper $CONFNAME" 'http proxy' setupproxydetect 'http' 'echo "http://some-proxy"' testsuccessequal "Using proxy 'http://some-proxy' for URL 'http://www.example.com/'" apthelper auto-detect-proxy http://www.example.com + testsuccessequal "Using proxy '' for URL 'https://ssl.example.com/'" apthelper auto-detect-proxy https://ssl.example.com - msgmsg 'apt-helper auto-detect-proxy' 'https proxy' + msgmsg "apt-helper $CONFNAME" 'https proxy' setupproxydetect 'https' 'echo "https://https-proxy"' + testsuccessequal "Using proxy '' for URL 'http://no-ssl.example.com/'" apthelper auto-detect-proxy http://no-ssl.example.com testsuccessequal "Using proxy 'https://https-proxy' for URL 'https://ssl.example.com/'" apthelper auto-detect-proxy https://ssl.example.com + rm -f rootdir/etc/apt/apt.conf.d/02proxy-detect "${TMPWORKINGDIRECTORY}/apt-proxy-detect" } test_apt_helper_download "http://localhost:${APTHTTPPORT}" test_apt_helper_download "https://localhost:${APTHTTPSPORT}" -test_apt_helper_detect_proxy +for CONFNAME in 'ProxyAutoDetect' 'Proxy-Auto-Detect' ; do + test_apt_helper_detect_proxy +done msgmsg 'test various failure modes' testfailureequal 'E: Invalid operation download' apthelper download testfailureequal 'E: Must specify at least one pair url/filename' apthelper download-file diff --git a/test/integration/test-apt-https-no-redirect b/test/integration/test-apt-https-no-redirect index d6c630d5f..1c388098b 100755 --- a/test/integration/test-apt-https-no-redirect +++ b/test/integration/test-apt-https-no-redirect @@ -14,7 +14,8 @@ echo 'alright' > aptarchive/working changetohttpswebserver webserverconfig 'aptwebserver::redirect::replace::/redirectme/' "http://localhost:${APTHTTPPORT}/" webserverconfig 'aptwebserver::redirect::replace::/redirectme2/' "https://localhost:${APTHTTPSPORT}/" -echo 'Dir::Bin::Methods::https+http "https";' > rootdir/etc/apt/apt.conf.d/99add-https-http-method +echo 'Dir::Bin::Methods::https+http "http";' > rootdir/etc/apt/apt.conf.d/99add-https-http-method +echo 'Dir::Bin::Methods::foo+https "http";' > rootdir/etc/apt/apt.conf.d/99add-foo-https-method msgtest 'download of a file works via' 'http' testsuccess --nomsg downloadfile "http://localhost:${APTHTTPPORT}/working" httpfile @@ -26,20 +27,22 @@ testfileequal httpsfile 'alright' rm -f httpfile httpsfile msgtest 'download of http file works via' 'https+http' -testsuccess --nomsg downloadfile "http://localhost:${APTHTTPPORT}/working" httpfile +testsuccess --nomsg downloadfile "https+http://localhost:${APTHTTPPORT}/working" httpfile testfileequal httpfile 'alright' - -msgtest 'download of https file works via' 'https+http' -testsuccess --nomsg downloadfile "https://localhost:${APTHTTPSPORT}/working" httpsfile -testfileequal httpsfile 'alright' -rm -f httpfile httpsfile +rm -f httpfile msgtest 'download of a file does not work if' 'https redirected to http' testfailure --nomsg downloadfile "https://localhost:${APTHTTPSPORT}/redirectme/working" redirectfile - msgtest 'libcurl has forbidden access in last request to' 'http resource' testsuccess --nomsg grep -q -E -- "Redirection from https to 'http://.*' is forbidden" rootdir/tmp/testfailure.output +rm -f redirectfile msgtest 'download of a file does work if' 'https+http redirected to https' testsuccess --nomsg downloadfile "https+http://localhost:${APTHTTPPORT}/redirectme2/working" redirectfile testfileequal redirectfile 'alright' +rm -f redirectfile + +msgtest 'download of a file does work if' 'foo+https redirected to https' +testsuccess --nomsg downloadfile "foo+https://localhost:${APTHTTPSPORT}/redirectme2/working" redirectfile +testfileequal redirectfile 'alright' +rm -f redirectfile diff --git a/test/integration/test-apt-key b/test/integration/test-apt-key index 4fd1510a2..13afff995 100755 --- a/test/integration/test-apt-key +++ b/test/integration/test-apt-key @@ -12,8 +12,13 @@ TESTDIR="$(readlink -f "$(dirname "$0")")" . "$TESTDIR/framework" setupenvironment +chmod o+x "${TMPWORKINGDIRECTORY}/.." configarchitecture 'amd64' +insertpackage 'unstable' 'bar' 'i386' '1' +insertsource 'unstable' 'foo' 'all' '1' +setupaptarchive --no-update + # start from a clean plate again cleanplate() { rm -rf "${ROOTDIR}/etc/apt/trusted.gpg.d/" "${ROOTDIR}/etc/apt/trusted.gpg" @@ -249,6 +254,10 @@ gpg: unchanged: 1' aptkey --fakeroot update chmod 000 "${ROOTDIR}/etc/apt/trusted.gpg.d/unreadablekey.${EXT}" testwarning --nomsg aptkey --quiet --readonly verify "${SIGNATURE}.gpg" "${SIGNATURE}" testwarning aptkey list + # check that apt users see warnings, too + rm -rf "${ROOTDIR}/var/lib/apt/lists" + testwarning apt update + chmod 644 "${ROOTDIR}/etc/apt/trusted.gpg.d/unreadablekey.${EXT}" rm -f "${ROOTDIR}/etc/apt/trusted.gpg.d/unreadablekey.${EXT}" fi @@ -275,6 +284,10 @@ gpg: unchanged: 1' aptkey --fakeroot update msgtest 'Test verify fails on' 'bad file' testfailure --nomsg aptkey --quiet --readonly verify "${SIGNATURE}.gpg" "${SIGNATURE}2" + + # try to perform an entire update with this gpgv + rm -rf "${ROOTDIR}/var/lib/apt/lists" + testsuccess apt update -o Test::Dir="${ROOTDIR}" done rm -f "${ROOTDIR}/etc/apt/apt.conf.d/00gpgvcmd" diff --git a/test/integration/test-apt-update-disappeared-component b/test/integration/test-apt-update-disappeared-component new file mode 100755 index 000000000..7c7dd7711 --- /dev/null +++ b/test/integration/test-apt-update-disappeared-component @@ -0,0 +1,45 @@ +#!/bin/sh +set -e + +TESTDIR="$(readlink -f "$(dirname "$0")")" +. "$TESTDIR/framework" +setupenvironment +configarchitecture 'amd64' + +insertpackage 'unstable' 'foobar' 'all' '1' + +APTARCHIVE="file:$(readlink -f ./aptarchive) unstable InRelease" +setupaptarchive --no-update +sed -i -e 's#main\s*$#main contrib non-free sub/component#' rootdir/etc/apt/sources.list.d/* + +# if no Component info is available we assume all are supported, which means +# that non-existent Packages files are assumed to be missing because they are +# empty (as the repository is declaring support for them via Architectures) +testwarningmsg "W: Skipping acquire of configured file 'contrib/source/Sources' as repository '${APTARCHIVE}' does not seem to provide it (sources.list entry misspelt?) +W: Skipping acquire of configured file 'non-free/source/Sources' as repository '${APTARCHIVE}' does not seem to provide it (sources.list entry misspelt?) +W: Skipping acquire of configured file 'sub/component/source/Sources' as repository '${APTARCHIVE}' does not seem to provide it (sources.list entry misspelt?)" apt update + +sed -i -e '/^Codename: / a\ +Components: main contrib' $(find ./aptarchive -name 'Release') +signreleasefiles + +testwarningmsg "W: Skipping acquire of configured file 'contrib/source/Sources' as repository '${APTARCHIVE}' does not seem to provide it (sources.list entry misspelt?) +W: Skipping acquire of configured file 'non-free/source/Sources' as repository '${APTARCHIVE}' doesn't have the component 'non-free' (component misspelt in sources.list?) +W: Skipping acquire of configured file 'sub/component/source/Sources' as repository '${APTARCHIVE}' doesn't have the component 'sub/component' (component misspelt in sources.list?) +W: Skipping acquire of configured file 'non-free/binary-amd64/Packages' as repository '${APTARCHIVE}' doesn't have the component 'non-free' (component misspelt in sources.list?) +W: Skipping acquire of configured file 'non-free/binary-all/Packages' as repository '${APTARCHIVE}' doesn't have the component 'non-free' (component misspelt in sources.list?) +W: Skipping acquire of configured file 'non-free/i18n/Translation-en' as repository '${APTARCHIVE}' doesn't have the component 'non-free' (component misspelt in sources.list?) +W: Skipping acquire of configured file 'sub/component/binary-amd64/Packages' as repository '${APTARCHIVE}' doesn't have the component 'sub/component' (component misspelt in sources.list?) +W: Skipping acquire of configured file 'sub/component/binary-all/Packages' as repository '${APTARCHIVE}' doesn't have the component 'sub/component' (component misspelt in sources.list?) +W: Skipping acquire of configured file 'sub/component/i18n/Translation-en' as repository '${APTARCHIVE}' doesn't have the component 'sub/component' (component misspelt in sources.list?)" apt update + +# the field looks like this e.g. for security.debian.org sources +sed -i -e 's#^Components:.*$#Components: updates/main updates/contrib sub/component#' $(find ./aptarchive -name 'Release') +signreleasefiles + +testwarningmsg "W: Skipping acquire of configured file 'contrib/source/Sources' as repository '${APTARCHIVE}' does not seem to provide it (sources.list entry misspelt?) +W: Skipping acquire of configured file 'non-free/source/Sources' as repository '${APTARCHIVE}' doesn't have the component 'non-free' (component misspelt in sources.list?) +W: Skipping acquire of configured file 'sub/component/source/Sources' as repository '${APTARCHIVE}' does not seem to provide it (sources.list entry misspelt?) +W: Skipping acquire of configured file 'non-free/binary-amd64/Packages' as repository '${APTARCHIVE}' doesn't have the component 'non-free' (component misspelt in sources.list?) +W: Skipping acquire of configured file 'non-free/binary-all/Packages' as repository '${APTARCHIVE}' doesn't have the component 'non-free' (component misspelt in sources.list?) +W: Skipping acquire of configured file 'non-free/i18n/Translation-en' as repository '${APTARCHIVE}' doesn't have the component 'non-free' (component misspelt in sources.list?)" apt update diff --git a/test/integration/test-apt-update-failure-propagation b/test/integration/test-apt-update-failure-propagation index 1361b1b93..20d941f7d 100755 --- a/test/integration/test-apt-update-failure-propagation +++ b/test/integration/test-apt-update-failure-propagation @@ -47,24 +47,9 @@ mv aptarchive/dists/stable aptarchive/dists/stable.good testfailuremsg "E: The repository 'https://localhost:${APTHTTPSPORT} stable Release' does not have a Release file. N: Updating from such a repository can't be done securely, and is therefore disabled by default. N: See apt-secure(8) manpage for repository creation and user configuration details." apt update -testfailure aptget update --no-allow-insecure-repositories -testequalor2 "Hit:1 http://localhost:${APTHTTPPORT} sid InRelease -Ign:2 https://localhost:${APTHTTPSPORT} stable InRelease - 404 Not Found -Err:3 https://localhost:${APTHTTPSPORT} stable Release - 404 Not Found -Reading package lists... -E: The repository 'https://localhost:${APTHTTPSPORT} stable Release' does not have a Release file. -N: Updating from such a repository can't be done securely, and is therefore disabled by default. -N: See apt-secure(8) manpage for repository creation and user configuration details." "Ign:1 https://localhost:${APTHTTPSPORT} stable InRelease - 404 Not Found -Err:2 https://localhost:${APTHTTPSPORT} stable Release - 404 Not Found -Hit:3 http://localhost:${APTHTTPPORT} sid InRelease -Reading package lists... -E: The repository 'https://localhost:${APTHTTPSPORT} stable Release' does not have a Release file. +testfailuremsg "E: The repository 'https://localhost:${APTHTTPSPORT} stable Release' does not have a Release file. N: Updating from such a repository can't be done securely, and is therefore disabled by default. -N: See apt-secure(8) manpage for repository creation and user configuration details." cat rootdir/tmp/testfailure.output +N: See apt-secure(8) manpage for repository creation and user configuration details." aptget update mv aptarchive/dists/stable.good aptarchive/dists/stable posttest() { @@ -100,7 +85,13 @@ for FILE in rootdir/etc/apt/sources.list.d/*-stable-* ; do sed -i -e "s#:${APTHTTPSPORT}/#:666/#" "$FILE" done testwarning aptget update -o Dir::Bin::Methods::https="${OLDMETHODS}/https" +if grep -q FORCE_CURL:BOOL=OFF $PROJECT_BINARY_DIR/CMakeCache.txt; then +testequalor2 "W: Failed to fetch https://localhost:666/dists/stable/InRelease Failed to connect to localhost port 666: Connection refused +W: Some index files failed to download. They have been ignored, or old ones used instead." "W: Failed to fetch https://localhost:666/dists/stable/InRelease Could not connect to localhost:666 (127.0.0.1). - connect (111: Connection refused) +W: Some index files failed to download. They have been ignored, or old ones used instead." tail -n 2 rootdir/tmp/testwarning.output +else testequalor2 "W: Failed to fetch https://localhost:666/dists/stable/InRelease Failed to connect to localhost port 666: Connection refused W: Some index files failed to download. They have been ignored, or old ones used instead." "W: Failed to fetch https://localhost:666/dists/stable/InRelease couldn't connect to host W: Some index files failed to download. They have been ignored, or old ones used instead." tail -n 2 rootdir/tmp/testwarning.output +fi posttest diff --git a/test/integration/test-apt-update-releaseinfo-changes b/test/integration/test-apt-update-releaseinfo-changes new file mode 100755 index 000000000..e4bca3658 --- /dev/null +++ b/test/integration/test-apt-update-releaseinfo-changes @@ -0,0 +1,80 @@ +#!/bin/sh +set -e + +TESTDIR="$(readlink -f "$(dirname "$0")")" +. "$TESTDIR/framework" +setupenvironment +configarchitecture 'amd64' + +insertpackage 'earth' 'human' 'all' '1' + +getoriginfromsuite() { echo -n 'Earth'; } +getlabelfromsuite() { echo -n 'Blue Planet'; } +getcodenamefromsuite() { echo -n 'home'; } +getreleaseversionfromsuite() { echo -n '1.0'; } +getnotautomaticfromsuite() { echo -n 'yes'; } +getbutautomaticupgradesfromsuite() { echo -n 'yes'; } +setupaptarchive --no-update +testsuccess aptget update + +cp -a aptarchive/dists aptarchive/dists.bak +cp -a rootdir/var/lib/apt/lists rootdir/var/lib/apt/lists.bak +APTARCHIVE="$(readlink -f './aptarchive')" + +sed -i -e 's#^Origin: Earth#Origin: Mars#' $(find ./aptarchive -name 'Release') +signreleasefiles +testfailuremsg "E: Repository 'file:$APTARCHIVE earth InRelease' changed its 'Origin' value from 'Earth' to 'Mars' +N: This must be accepted explicitly before updates for this repository can be applied. See apt-secure(8) manpage for details." apt update +testfailure apt update --allow-releaseinfo-change-label +testsuccesswithnotice apt update --allow-releaseinfo-change +testequal "All packages are up to date. +N: Repository 'file:$APTARCHIVE earth InRelease' changed its 'Origin' value from 'Earth' to 'Mars'" tail -n 2 rootdir/tmp/testsuccesswithnotice.output + +rm -rf rootdir/var/lib/apt/lists +cp -a rootdir/var/lib/apt/lists.bak rootdir/var/lib/apt/lists +sed -i -e 's#^Label: Blue#Label: Red#' $(find ./aptarchive -name 'Release') +signreleasefiles +testfailuremsg "E: Repository 'file:$APTARCHIVE earth InRelease' changed its 'Origin' value from 'Earth' to 'Mars' +E: Repository 'file:$APTARCHIVE earth InRelease' changed its 'Label' value from 'Blue Planet' to 'Red Planet' +N: This must be accepted explicitly before updates for this repository can be applied. See apt-secure(8) manpage for details." apt update +testfailure apt update --allow-releaseinfo-change-label +testfailuremsg "N: Repository 'file:$APTARCHIVE earth InRelease' changed its 'Origin' value from 'Earth' to 'Mars' +E: Repository 'file:$APTARCHIVE earth InRelease' changed its 'Label' value from 'Blue Planet' to 'Red Planet' +N: This must be accepted explicitly before updates for this repository can be applied. See apt-secure(8) manpage for details." apt update --allow-releaseinfo-change-origin +testsuccess apt update --allow-releaseinfo-change-origin --allow-releaseinfo-change-label -o quiet::ReleaseInfoChange=true + +# version changes are allowed by default +sed -i -e 's#^Version: 1#Version: 2#' $(find ./aptarchive -name 'Release') +signreleasefiles +testfailuremsg "E: Repository 'file:$APTARCHIVE earth InRelease' changed its 'Version' value from '1.0' to '2.0' +N: This must be accepted explicitly before updates for this repository can be applied. See apt-secure(8) manpage for details." apt update --no-allow-releaseinfo-change-version +testsuccesswithnotice apt update +testequal "All packages are up to date. +N: Repository 'file:$APTARCHIVE earth InRelease' changed its 'Version' value from '1.0' to '2.0'" tail -n 2 rootdir/tmp/testsuccesswithnotice.output + +sed -i -e 's#^Codename: home#Codename: colony#' $(find ./aptarchive -name 'Release') +signreleasefiles +testfailuremsg "E: Repository 'file:$APTARCHIVE earth InRelease' changed its 'Codename' value from 'home' to 'colony' +N: This must be accepted explicitly before updates for this repository can be applied. See apt-secure(8) manpage for details." apt update --no-allow-releaseinfo-change-codename +testsuccesswithnotice apt update --allow-releaseinfo-change-codename +testequal "All packages are up to date. +N: Repository 'file:$APTARCHIVE earth InRelease' changed its 'Codename' value from 'home' to 'colony'" tail -n 2 rootdir/tmp/testsuccesswithnotice.output + +sed -i -e '/^ButAutomaticUpgrades: / d' $(find ./aptarchive -name 'Release') +signreleasefiles +testfailuremsg "E: Repository 'file:$APTARCHIVE earth InRelease' changed its default priority for apt_preferences(5) from 100 to 1. +N: This must be accepted explicitly before updates for this repository can be applied. See apt-secure(8) manpage for details." apt update +testsuccesswithnotice apt update --allow-releaseinfo-change +testequal "All packages are up to date. +N: Repository 'file:$APTARCHIVE earth InRelease' changed its default priority for apt_preferences(5) from 100 to 1." tail -n 2 rootdir/tmp/testsuccesswithnotice.output + +sed -i -e '/^NotAutomatic: / d' -e '/^Codename: / a\ +Release-Notes: https://example.org/mars/release-notes' $(find ./aptarchive -name 'Release') +signreleasefiles +testfailuremsg "E: Repository 'file:$APTARCHIVE earth InRelease' changed its default priority for apt_preferences(5) from 1 to 500. +N: More information about this can be found online in the Release notes at: https://example.org/mars/release-notes +N: This must be accepted explicitly before updates for this repository can be applied. See apt-secure(8) manpage for details." apt update +testsuccesswithnotice apt update --allow-releaseinfo-change-defaultpin +testequal "All packages are up to date. +N: Repository 'file:$APTARCHIVE earth InRelease' changed its default priority for apt_preferences(5) from 1 to 500. +N: More information about this can be found online in the Release notes at: https://example.org/mars/release-notes" tail -n 3 rootdir/tmp/testsuccesswithnotice.output diff --git a/test/integration/test-bug-602412-dequote-redirect b/test/integration/test-bug-602412-dequote-redirect index 9c6aa3945..3db7b5ea0 100755 --- a/test/integration/test-bug-602412-dequote-redirect +++ b/test/integration/test-bug-602412-dequote-redirect @@ -30,7 +30,7 @@ Reading package lists..." aptget update testsuccess --nomsg aptget install unrelated --download-only -y } -for CODE in 301 302 307; do +for CODE in 301 302 307 308; do webserverconfig 'aptwebserver::redirect::httpcode' "$CODE" rm -f aptarchive/webserver.log.client*.log testrun "$CODE" "http://localhost:${APTHTTPPORT}" @@ -40,7 +40,7 @@ done changetohttpswebserver -for CODE in 301 302 307; do +for CODE in 301 302 307 308; do webserverconfig 'aptwebserver::redirect::httpcode' "$CODE" rm -f aptarchive/webserver.log.client*.log testrun "$CODE" "https://localhost:${APTHTTPSPORT}" diff --git a/test/integration/test-bug-717891-abolute-uris-for-proxies b/test/integration/test-bug-717891-abolute-uris-for-proxies index ed9b9a555..5f1b7546c 100755 --- a/test/integration/test-bug-717891-abolute-uris-for-proxies +++ b/test/integration/test-bug-717891-abolute-uris-for-proxies @@ -16,7 +16,7 @@ testfailure --nomsg aptget update --allow-insecure-repositories echo "Acquire::http::Proxy \"http://localhost:${APTHTTPPORT}\";" > rootdir/etc/apt/apt.conf.d/99proxy -msgtest 'Check that requests to proxies are' 'absolute uris' +msgtest 'Check that requests to proxies are' 'absolute uris via config' testsuccess --nomsg aptget update testsuccessequal 'Reading package lists... @@ -26,3 +26,28 @@ The following NEW packages will be installed: 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Inst unrelated (0.5~squeeze1 unstable [all]) Conf unrelated (0.5~squeeze1 unstable [all])' aptget install unrelated -s + +rm -f rootdir/etc/apt/apt.conf.d/99proxy +echo "Acquire::http::Proxy-Auto-Detect \"${TMPWORKINGDIRECTORY}/apt-proxy-detect\";" > rootdir/etc/apt/apt.conf.d/02proxy-detect +cat > "${TMPWORKINGDIRECTORY}/apt-proxy-detect" <<EOF +#!/bin/sh +set -e +echo "http://localhost:${APTHTTPPORT}" +EOF +chmod 755 "${TMPWORKINGDIRECTORY}/apt-proxy-detect" + +msgtest 'Check that requests to proxies are' 'absolute uris via auto-detect' +testsuccess aptget update -o Debug::Acquire::http=1 + +testsuccessequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + unrelated +0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst unrelated (0.5~squeeze1 unstable [all]) +Conf unrelated (0.5~squeeze1 unstable [all])' aptget install unrelated -s + +chmod 444 "${TMPWORKINGDIRECTORY}/apt-proxy-detect" +msgtest 'Check that non-executable proxy commands result in' 'permission error' +testfailure --nomsg aptget update +testsuccess grep 'can not be executed' rootdir/tmp/testfailure.output diff --git a/test/integration/test-bug-738785-switch-protocol b/test/integration/test-bug-738785-switch-protocol index 690e8727e..471d12e53 100755 --- a/test/integration/test-bug-738785-switch-protocol +++ b/test/integration/test-bug-738785-switch-protocol @@ -47,4 +47,4 @@ cd - >/dev/null # check that downgrades from https to http are not allowed webserverconfig 'aptwebserver::support::http' 'true' sed -i -e "s#:${APTHTTPPORT}/redirectme#:${APTHTTPSPORT}/downgrademe#" -e 's# http:# https:#' rootdir/etc/apt/sources.list.d/* -testfailure aptget update --allow-insecure-repositories -o Acquire::https::Timeout=1 +testfailure aptget update --allow-insecure-repositories -o Acquire::https::Timeout=1 -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::https=1 diff --git a/test/integration/test-bug-838779-untrusted-to-trusted-Release-hit b/test/integration/test-bug-838779-untrusted-to-trusted-Release-hit index 6fcc2b8e1..50234753b 100755 --- a/test/integration/test-bug-838779-untrusted-to-trusted-Release-hit +++ b/test/integration/test-bug-838779-untrusted-to-trusted-Release-hit @@ -23,7 +23,8 @@ testdpkgnotinstalled 'foo' msgmsg 'Untrusted to trusted hit' 'InRelease' rm -rf rootdir/var/lib/apt/lists rootdir/var/cache/apt/archives mv rootdir/etc/apt/trusted.gpg.d rootdir/etc/apt/trusted.gpg.d-bak -testwarning aptget update +testfailure aptget update +testwarning aptget update --allow-insecure-repositories testfailure apt install foo -y testdpkgnotinstalled 'foo' mv rootdir/etc/apt/trusted.gpg.d-bak rootdir/etc/apt/trusted.gpg.d @@ -37,7 +38,8 @@ msgmsg 'Untrusted to trusted hit' 'Release.gpg' find aptarchive -name 'InRelease' -delete rm -rf rootdir/var/lib/apt/lists rootdir/var/cache/apt/archives mv rootdir/etc/apt/trusted.gpg.d rootdir/etc/apt/trusted.gpg.d-bak -testwarning aptget update +testfailure aptget update +testwarning aptget update --allow-insecure-repositories testfailure apt install foo -y testdpkgnotinstalled 'foo' mv rootdir/etc/apt/trusted.gpg.d-bak rootdir/etc/apt/trusted.gpg.d diff --git a/test/integration/test-bug-841874-warning-for-mismatching-distribution b/test/integration/test-bug-841874-warning-for-mismatching-distribution index 6cc8e3173..7502eefc3 100755 --- a/test/integration/test-bug-841874-warning-for-mismatching-distribution +++ b/test/integration/test-bug-841874-warning-for-mismatching-distribution @@ -47,15 +47,3 @@ testfailure apt show foo ln -s "${APTARCHIVE}/dists/testing" "${APTARCHIVE}/dists/buster" testsuccess apt update testsuccess apt show foo - -# changing codenames gets a warning, too -rm -rf rootdir/var/lib/apt/lists -sed -i -e 's#buster#testing#g' rootdir/etc/apt/sources.list.d/* -testsuccess apt update -testsuccess apt show foo -sed -i -e 's#^Codename: buster#Codename: zurg#g' $(find ./aptarchive -name 'Release') -signreleasefiles -testwarningmsg "W: Conflicting distribution: file:$APTARCHIVE testing/updates InRelease (expected buster/updates but got zurg/updates)" apt update -testsuccess apt show foo -testsuccess apt update -testsuccess apt show foo diff --git a/test/integration/test-dpkg-normalization b/test/integration/test-dpkg-normalization new file mode 100755 index 000000000..cfcb90d67 --- /dev/null +++ b/test/integration/test-dpkg-normalization @@ -0,0 +1,44 @@ +#!/bin/sh +set -e + +TESTDIR="$(readlink -f "$(dirname "$0")")" +. "$TESTDIR/framework" +setupenvironment +configarchitecture "i386" + +insertpackage 'unstable' 'spaces' 'i386' '1.0' 'Depends: spaces (= 1.0)' +insertpackage 'unstable' 'spaces' 'i386' '1.0' 'Depends: spaces (= 1.0)' +insertpackage 'unstable' 'lessequal' 'i386' '1.0' 'Depends: spaces (>= 1.0)' +insertpackage 'unstable' 'lessequal' 'i386' '1.0' 'Depends: spaces (> 1.0)' +insertpackage 'unstable' 'zero-epoch' 'i386' '1.0' 'Depends: spaces (< 0:1.0.0)' +insertpackage 'unstable' 'zero-epoch' 'i386' '1.0' 'Depends: spaces (< 1.0.0)' +insertpackage 'unstable' 'zero-epoch' 'i386' '0:1.0' 'Depends: spaces (< 0:1.0.0)' + +setupaptarchive + +testsuccessequal "spaces: + Installed: (none) + Candidate: 1.0 + Version table: + 1.0 500 + 500 file:$TMPWORKINGDIRECTORY/aptarchive unstable/main i386 Packages + 500 file:$TMPWORKINGDIRECTORY/aptarchive unstable/main i386 Packages" aptcache policy spaces + +testsuccessequal "lessequal: + Installed: (none) + Candidate: 1.0 + Version table: + 1.0 500 + 500 file:$TMPWORKINGDIRECTORY/aptarchive unstable/main i386 Packages + 500 file:$TMPWORKINGDIRECTORY/aptarchive unstable/main i386 Packages" aptcache policy lessequal + + + +testsuccessequal "zero-epoch: + Installed: (none) + Candidate: 1.0 + Version table: + 1.0 500 + 500 file:$TMPWORKINGDIRECTORY/aptarchive unstable/main i386 Packages + 500 file:$TMPWORKINGDIRECTORY/aptarchive unstable/main i386 Packages + 500 file:$TMPWORKINGDIRECTORY/aptarchive unstable/main i386 Packages" aptcache policy zero-epoch diff --git a/test/integration/test-handle-redirect-as-used-mirror-change b/test/integration/test-handle-redirect-as-used-mirror-change index 254bdd54a..a6f8b788f 100755 --- a/test/integration/test-handle-redirect-as-used-mirror-change +++ b/test/integration/test-handle-redirect-as-used-mirror-change @@ -89,5 +89,6 @@ Reading package lists..." aptget update rm -rf rootdir/var/lib/apt/lists find aptarchive -name 'Release.gpg' -delete find aptarchive -name 'Release' -delete -testwarning aptget update +testfailure aptget update +testwarning aptget update --allow-insecure-repositories testsuccess grep 'does not have a Release file' rootdir/tmp/testwarning.output diff --git a/test/integration/test-pdiff-usage b/test/integration/test-pdiff-usage index 430551fa4..e7b052d49 100755 --- a/test/integration/test-pdiff-usage +++ b/test/integration/test-pdiff-usage @@ -50,7 +50,7 @@ wasmergeused() { if echo "$*" | grep -q -- '-o test::cannot-use-pdiff=1'; then msgtest 'Check if pdiff was' 'not used' cp -a rootdir/tmp/testsuccess.output rootdir/tmp/aptupdate.output - testsuccess --nomsg grep "diff/Index with Message: Couldn't parse pdiff index" rootdir/tmp/aptupdate.output + testsuccess --nomsg grep "^Ign:.* Packages\.diff/Index" rootdir/tmp/aptupdate.output return; fi @@ -336,7 +336,7 @@ SHA256-Download: generatereleasefiles '+1hour' signreleasefiles wasmergeused "$@" -o test::cannot-use-pdiff=1 - testsuccess grep 'bytes (Limit is' rootdir/tmp/aptupdate.output + testsuccess grep 'bytes, but limit is' rootdir/tmp/aptupdate.output testnopackage oldstuff testsuccessequal "$(cat "${PKGFILE}-new") " aptcache show apt newstuff diff --git a/test/integration/test-policy-pinning b/test/integration/test-policy-pinning index 30238bd87..5676d1457 100755 --- a/test/integration/test-policy-pinning +++ b/test/integration/test-policy-pinning @@ -238,7 +238,7 @@ testequalpolicycoolstuff "2.0~bpo1" "2.0~bpo1" 990 500 990 "" -o Test=ButAutomat rm incoming/backports.main.pkglist incoming/backports.main.srclist buildsimplenativepackage "coolstuff" "all" "2.0~bpo2" "backports" -setupaptarchive +setupaptarchive --no-update sed -i aptarchive/dists/backports/Release -e 1i"NotAutomatic: yes" signreleasefiles diff --git a/test/integration/test-ubuntu-bug-346386-apt-get-update-paywall b/test/integration/test-ubuntu-bug-346386-apt-get-update-paywall index a756b5df2..46c7c5672 100755 --- a/test/integration/test-ubuntu-bug-346386-apt-get-update-paywall +++ b/test/integration/test-ubuntu-bug-346386-apt-get-update-paywall @@ -70,3 +70,12 @@ partial' ls "$LISTS" runtests '^E:.*Clearsigned file .*NOSPLIT.*' webserverconfig 'aptwebserver::overwrite::.*InRelease::filename' '/404' runtests '^E:.*Signed file .*NODATA.*' + +webserverconfig 'aptwebserver::overwrite::.*::filename' '/404' +webserverconfig 'aptwebserver::httpcode::404' '511 Network Authentication Required' +rm -rf rootdir/var/lib/apt/lists +testfailureequal "Err:1 http://localhost:${APTHTTPPORT} unstable InRelease + 511 Network Authentication Required +Reading package lists... +E: Failed to fetch http://localhost:${APTHTTPPORT}/dists/unstable/InRelease 511 Network Authentication Required +E: Some index files failed to download. They have been ignored, or old ones used instead." apt update diff --git a/test/interactive-helper/aptwebserver.cc b/test/interactive-helper/aptwebserver.cc index 4b98cbd7c..b4b3ef870 100644 --- a/test/interactive-helper/aptwebserver.cc +++ b/test/interactive-helper/aptwebserver.cc @@ -23,10 +23,10 @@ #include <unistd.h> #include <algorithm> -#include <iostream> #include <fstream> -#include <sstream> +#include <iostream> #include <list> +#include <sstream> #include <string> #include <thread> #include <vector> @@ -54,6 +54,7 @@ static std::string httpcodeToStr(int const httpcode) /*{{{*/ case 304: return _config->Find("aptwebserver::httpcode::304", "304 Not Modified"); case 305: return _config->Find("aptwebserver::httpcode::305", "305 Use Proxy"); case 307: return _config->Find("aptwebserver::httpcode::307", "307 Temporary Redirect"); + case 308: return _config->Find("aptwebserver::httpcode::308", "308 Permanent Redirect"); // Client errors 4xx case 400: return _config->Find("aptwebserver::httpcode::400", "400 Bad Request"); case 401: return _config->Find("aptwebserver::httpcode::401", "401 Unauthorized"); @@ -127,7 +128,7 @@ static bool sendHead(std::ostream &log, int const client, int const httpcode, st std::stringstream buffer; auto const empties = _config->FindVector("aptwebserver::empty-response-header"); - for (auto && e: empties) + for (auto const &e: empties) buffer << e << ":" << std::endl; _config->Dump(buffer, "aptwebserver::response-header", "%t: %v%n", false); std::vector<std::string> addheaders = VectorizeString(buffer.str(), '\n'); diff --git a/test/interactive-helper/extract-control.cc b/test/interactive-helper/extract-control.cc index 852ec4ee9..a19e0380c 100644 --- a/test/interactive-helper/extract-control.cc +++ b/test/interactive-helper/extract-control.cc @@ -4,8 +4,8 @@ #include <apt-pkg/error.h> #include <apt-pkg/fileutl.h> -#include <string> #include <iostream> +#include <string> #include <unistd.h> using namespace std; diff --git a/test/interactive-helper/rpmver.cc b/test/interactive-helper/rpmver.cc index 017c92fba..b23ba2876 100644 --- a/test/interactive-helper/rpmver.cc +++ b/test/interactive-helper/rpmver.cc @@ -1,11 +1,11 @@ #include <config.h> #include <apt-pkg/debversion.h> -#include <rpm/rpmio.h> +#include <ctype.h> #include <rpm/misc.h> -#include <stdlib.h> +#include <rpm/rpmio.h> #include <stdio.h> -#include <ctype.h> +#include <stdlib.h> #define xisdigit(x) isdigit(x) #define xisalpha(x) isalpha(x) diff --git a/test/interactive-helper/teestream.h b/test/interactive-helper/teestream.h index 728a1bae2..058717ac3 100644 --- a/test/interactive-helper/teestream.h +++ b/test/interactive-helper/teestream.h @@ -8,8 +8,8 @@ a logfile easily, so don't expect that to be a bulletproof implementation. */ -#include <iostream> #include <apt-pkg/macros.h> +#include <iostream> template <typename CharT, typename Traits = std::char_traits<CharT> > class basic_teebuf: public std::basic_streambuf<CharT, Traits> diff --git a/test/interactive-helper/test_fileutl.cc b/test/interactive-helper/test_fileutl.cc index 7c4b95759..6c29b748f 100644 --- a/test/interactive-helper/test_fileutl.cc +++ b/test/interactive-helper/test_fileutl.cc @@ -1,13 +1,13 @@ +#include <apt-pkg/error.h> #include <apt-pkg/fileutl.h> #include <apt-pkg/strutl.h> -#include <apt-pkg/error.h> -#include <sys/types.h> +#include <fcntl.h> +#include <stdlib.h> #include <sys/stat.h> +#include <sys/types.h> #include <sys/wait.h> #include <unistd.h> -#include <stdlib.h> -#include <fcntl.h> #include <iostream> #include <string> diff --git a/test/interactive-helper/test_udevcdrom.cc b/test/interactive-helper/test_udevcdrom.cc index b87dcd935..2355186d6 100644 --- a/test/interactive-helper/test_udevcdrom.cc +++ b/test/interactive-helper/test_udevcdrom.cc @@ -2,11 +2,11 @@ #include <apt-pkg/cdrom.h> -#include <stddef.h> +#include <iostream> #include <string> -#include <assert.h> #include <vector> -#include <iostream> +#include <assert.h> +#include <stddef.h> int main() { diff --git a/test/interactive-helper/testdeb.cc b/test/interactive-helper/testdeb.cc index 69e1ffe0b..0bb24a52a 100644 --- a/test/interactive-helper/testdeb.cc +++ b/test/interactive-helper/testdeb.cc @@ -1,10 +1,10 @@ #include <config.h> -#include <apt-pkg/dirstream.h> +#include <apt-pkg/arfile.h> #include <apt-pkg/debfile.h> +#include <apt-pkg/dirstream.h> #include <apt-pkg/error.h> #include <apt-pkg/extracttar.h> -#include <apt-pkg/arfile.h> #include <apt-pkg/fileutl.h> #include <iostream> diff --git a/test/libapt/acqprogress_test.cc b/test/libapt/acqprogress_test.cc index 0e82a285d..d4596c85d 100644 --- a/test/libapt/acqprogress_test.cc +++ b/test/libapt/acqprogress_test.cc @@ -1,12 +1,12 @@ #include <config.h> -#include <apt-pkg/hashes.h> -#include <apt-pkg/acquire.h> #include <apt-pkg/acquire-item.h> +#include <apt-pkg/acquire.h> #include <apt-pkg/configuration.h> +#include <apt-pkg/hashes.h> #include <apt-private/acqprogress.h> -#include <string> -#include <sstream> #include <gtest/gtest.h> +#include <sstream> +#include <string> class TestItem: public pkgAcquire::Item { diff --git a/test/libapt/cdrom_test.cc b/test/libapt/cdrom_test.cc index b4c51cdb0..c9021e64e 100644 --- a/test/libapt/cdrom_test.cc +++ b/test/libapt/cdrom_test.cc @@ -1,13 +1,13 @@ #include <config.h> -#include <apt-pkg/configuration.h> #include <apt-pkg/cdrom.h> #include <apt-pkg/cdromutl.h> +#include <apt-pkg/configuration.h> #include <apt-pkg/fileutl.h> #include <string> -#include <string.h> #include <vector> +#include <string.h> #include <gtest/gtest.h> diff --git a/test/libapt/cdromfindpackages_test.cc b/test/libapt/cdromfindpackages_test.cc index 0d8eb1f90..f6acf18fd 100644 --- a/test/libapt/cdromfindpackages_test.cc +++ b/test/libapt/cdromfindpackages_test.cc @@ -5,10 +5,10 @@ #include <apt-pkg/fileutl.h> #include <algorithm> +#include <iostream> #include <string> #include <vector> #include <stddef.h> -#include <iostream> #include <gtest/gtest.h> diff --git a/test/libapt/compareversion_test.cc b/test/libapt/compareversion_test.cc index 3b2c0c209..1782c61cc 100644 --- a/test/libapt/compareversion_test.cc +++ b/test/libapt/compareversion_test.cc @@ -18,15 +18,15 @@ /*}}}*/ #include <config.h> -#include <apt-pkg/error.h> #include <apt-pkg/debversion.h> +#include <apt-pkg/error.h> #include <apt-pkg/fileutl.h> #include <fstream> #include <string> #include <stdlib.h> -#include <unistd.h> #include <sys/wait.h> +#include <unistd.h> #include <gtest/gtest.h> diff --git a/test/libapt/extracttar_test.cc b/test/libapt/extracttar_test.cc index 0255bd767..30934144a 100644 --- a/test/libapt/extracttar_test.cc +++ b/test/libapt/extracttar_test.cc @@ -3,8 +3,8 @@ #include <iostream> #include <stdlib.h> -#include <gtest/gtest.h> #include "assert.h" +#include <gtest/gtest.h> class Stream : public pkgDirStream { diff --git a/test/libapt/file-helpers.cc b/test/libapt/file-helpers.cc index 48d8a9fbb..aa16a2e30 100644 --- a/test/libapt/file-helpers.cc +++ b/test/libapt/file-helpers.cc @@ -2,10 +2,10 @@ #include <string> -#include <unistd.h> +#include <fcntl.h> #include <sys/stat.h> #include <sys/types.h> -#include <fcntl.h> +#include <unistd.h> #include <gtest/gtest.h> diff --git a/test/libapt/fileutl_test.cc b/test/libapt/fileutl_test.cc index 67bd850a1..6cc850033 100644 --- a/test/libapt/fileutl_test.cc +++ b/test/libapt/fileutl_test.cc @@ -1,10 +1,10 @@ #include <config.h> +#include <apt-pkg/aptconfiguration.h> +#include <apt-pkg/configuration.h> #include <apt-pkg/error.h> #include <apt-pkg/fileutl.h> #include <apt-pkg/strutl.h> -#include <apt-pkg/aptconfiguration.h> -#include <apt-pkg/configuration.h> #include <algorithm> #include <string> @@ -25,7 +25,9 @@ static void TestFileFd(mode_t const a_umask, mode_t const ExpectedFilePermission static const char* fname = "apt-filefd-test.txt"; if (FileExists(fname) == true) + { EXPECT_EQ(0, unlink(fname)); + } FileFd f; umask(a_umask); @@ -290,7 +292,9 @@ TEST(FileUtlTest, Popen) // ensure that after a close all is good again if(FileExists("/proc/self/fd")) + { EXPECT_EQ(Glob("/proc/self/fd/*").size(), OpenFds.size()); + } // ReadWrite is not supported _error->PushToStack(); diff --git a/test/libapt/getlanguages_test.cc b/test/libapt/getlanguages_test.cc index 29ff0c9ae..26ff66f72 100644 --- a/test/libapt/getlanguages_test.cc +++ b/test/libapt/getlanguages_test.cc @@ -10,9 +10,9 @@ #include <string> #include <vector> -#include <sys/types.h> -#include <sys/stat.h> #include <fcntl.h> +#include <sys/stat.h> +#include <sys/types.h> #include <gtest/gtest.h> diff --git a/test/libapt/getlistoffilesindir_test.cc b/test/libapt/getlistoffilesindir_test.cc index 8c5e56b1d..606e2733e 100644 --- a/test/libapt/getlistoffilesindir_test.cc +++ b/test/libapt/getlistoffilesindir_test.cc @@ -1,11 +1,11 @@ #include <config.h> -#include <apt-pkg/fileutl.h> #include <apt-pkg/error.h> +#include <apt-pkg/fileutl.h> +#include <iostream> #include <string> #include <vector> -#include <iostream> #include <gtest/gtest.h> diff --git a/test/libapt/globalerror_test.cc b/test/libapt/globalerror_test.cc index bb36905a4..67682c275 100644 --- a/test/libapt/globalerror_test.cc +++ b/test/libapt/globalerror_test.cc @@ -2,9 +2,9 @@ #include <apt-pkg/error.h> -#include <stddef.h> #include <string> #include <errno.h> +#include <stddef.h> #include <string.h> #include <gtest/gtest.h> diff --git a/test/libapt/gtest_runner.cc b/test/libapt/gtest_runner.cc index 73854d976..5620aa0bd 100644 --- a/test/libapt/gtest_runner.cc +++ b/test/libapt/gtest_runner.cc @@ -1,9 +1,9 @@ #include <gtest/gtest.h> #include <apt-pkg/configuration.h> -#include <apt-pkg/pkgsystem.h> #include <apt-pkg/error.h> #include <apt-pkg/init.h> +#include <apt-pkg/pkgsystem.h> int main(int argc, char **argv) { ::testing::InitGoogleTest(&argc, argv); diff --git a/test/libapt/hashsums_test.cc b/test/libapt/hashsums_test.cc index fb9a25643..8b4533265 100644 --- a/test/libapt/hashsums_test.cc +++ b/test/libapt/hashsums_test.cc @@ -1,16 +1,16 @@ #include <config.h> #include <apt-pkg/configuration.h> +#include <apt-pkg/fileutl.h> +#include <apt-pkg/hashes.h> #include <apt-pkg/md5.h> #include <apt-pkg/sha1.h> #include <apt-pkg/sha2.h> #include <apt-pkg/strutl.h> -#include <apt-pkg/hashes.h> -#include <apt-pkg/fileutl.h> #include <iostream> -#include <stdlib.h> #include <string> +#include <stdlib.h> #include <gtest/gtest.h> diff --git a/test/libapt/indexcopytosourcelist_test.cc b/test/libapt/indexcopytosourcelist_test.cc index eb6d49edf..b0bfeb4b2 100644 --- a/test/libapt/indexcopytosourcelist_test.cc +++ b/test/libapt/indexcopytosourcelist_test.cc @@ -1,7 +1,7 @@ #include <config.h> -#include <apt-pkg/configuration.h> #include <apt-pkg/aptconfiguration.h> +#include <apt-pkg/configuration.h> #include <apt-pkg/indexcopy.h> #include <string> diff --git a/test/libapt/parsedepends_test.cc b/test/libapt/parsedepends_test.cc index c2781b5d6..ed849f768 100644 --- a/test/libapt/parsedepends_test.cc +++ b/test/libapt/parsedepends_test.cc @@ -1,11 +1,11 @@ #include <config.h> -#include <apt-pkg/deblistparser.h> #include <apt-pkg/configuration.h> +#include <apt-pkg/deblistparser.h> #include <apt-pkg/pkgcache.h> -#include <string.h> #include <string> +#include <string.h> #include <gtest/gtest.h> diff --git a/test/libapt/priority_test.cc b/test/libapt/priority_test.cc index ef1941ce5..af7932ae8 100644 --- a/test/libapt/priority_test.cc +++ b/test/libapt/priority_test.cc @@ -1,7 +1,7 @@ #include <config.h> #include <apt-pkg/pkgcache.h> -#include <string> #include <gtest/gtest.h> +#include <string> using std::string; diff --git a/test/libapt/sourcelist_test.cc b/test/libapt/sourcelist_test.cc index 83c441092..6182639a4 100644 --- a/test/libapt/sourcelist_test.cc +++ b/test/libapt/sourcelist_test.cc @@ -1,7 +1,7 @@ #include <config.h> -#include <apt-pkg/sourcelist.h> #include <apt-pkg/fileutl.h> +#include <apt-pkg/sourcelist.h> #include <string> #include <stdlib.h> diff --git a/test/libapt/srvrecs_test.cc b/test/libapt/srvrecs_test.cc index 5253b1c34..4fcc96dae 100644 --- a/test/libapt/srvrecs_test.cc +++ b/test/libapt/srvrecs_test.cc @@ -77,7 +77,9 @@ TEST(SrvRecTest,Randomness) EXPECT_TRUE(std::all_of(first_pull.begin(), first_pull.end(), [](SrvRec const &R) { return R.priority == 20; })); EXPECT_TRUE(std::all_of(second_pull.begin(), second_pull.end(), [](SrvRec const &R) { return R.priority == 20; })); if (startingClock != -1 && startingClock != clock()) + { EXPECT_FALSE(std::equal(first_pull.begin(), first_pull.end(), second_pull.begin())); + } EXPECT_TRUE(std::all_of(base2.begin(), base2.end(), [](SrvRec const &R) { return R.priority == 30; })); } diff --git a/test/libapt/strutil_test.cc b/test/libapt/strutil_test.cc index d7700bd54..9c192a58b 100644 --- a/test/libapt/strutil_test.cc +++ b/test/libapt/strutil_test.cc @@ -1,6 +1,6 @@ #include <config.h> -#include <apt-pkg/strutl.h> #include <apt-pkg/fileutl.h> +#include <apt-pkg/strutl.h> #include <string> #include <vector> diff --git a/test/libapt/tagfile_test.cc b/test/libapt/tagfile_test.cc index 24fbd389e..fb85ebcad 100644 --- a/test/libapt/tagfile_test.cc +++ b/test/libapt/tagfile_test.cc @@ -3,11 +3,11 @@ #include <apt-pkg/fileutl.h> #include <apt-pkg/tagfile.h> +#include <sstream> #include <string> #include <stdlib.h> #include <string.h> #include <unistd.h> -#include <sstream> #include <gtest/gtest.h> diff --git a/test/libapt/tagsection_test.cc b/test/libapt/tagsection_test.cc index 779932595..d79b1b63d 100644 --- a/test/libapt/tagsection_test.cc +++ b/test/libapt/tagsection_test.cc @@ -3,8 +3,8 @@ #include <apt-pkg/fileutl.h> #include <apt-pkg/tagfile.h> -#include <string> #include <sstream> +#include <string> #include <gtest/gtest.h> diff --git a/test/libapt/teestream_test.cc b/test/libapt/teestream_test.cc index 18610b24d..a897e08ec 100644 --- a/test/libapt/teestream_test.cc +++ b/test/libapt/teestream_test.cc @@ -1,9 +1,9 @@ #include <config.h> -#include <string> -#include <sstream> -#include <fstream> #include "../interactive-helper/teestream.h" +#include <fstream> +#include <sstream> +#include <string> #include <gtest/gtest.h> diff --git a/test/libapt/uri_test.cc b/test/libapt/uri_test.cc index 09d018049..54f4f84f8 100644 --- a/test/libapt/uri_test.cc +++ b/test/libapt/uri_test.cc @@ -2,8 +2,8 @@ #include <apt-pkg/configuration.h> #include <apt-pkg/proxy.h> #include <apt-pkg/strutl.h> -#include <string> #include <gtest/gtest.h> +#include <string> TEST(URITest, BasicHTTP) { diff --git a/triehash/triehash.pl b/triehash/triehash.pl index c943c1d9f..841c0e7e2 100755 --- a/triehash/triehash.pl +++ b/triehash/triehash.pl @@ -195,6 +195,15 @@ GetOptions ("code|C=s" => \$code_name, or die("Could not parse options!"); +# This implements a simple trie. Each node has three attributes: +# +# children - A hash of keys to other nodes +# value - The value to be stored here +# label - A named representation of the value. +# +# The key at each level of the trie can consist of one or more bytes, and the +# trie can be normalized to a form where all keys at a level have the same +# length using rebuild_tree(). package Trie { sub new { @@ -229,6 +238,8 @@ package Trie { return (substr($key, 0, $split), substr($key, $split)); } + # Given a key, a label, and a value, insert that into the tree, possibly + # replacing an existing node. sub insert { my ($self, $key, $label, $value) = @_; @@ -245,6 +256,10 @@ package Trie { $self->{children}{$child}->insert($tail, $label, $value); } + # Construct a new trie that only contains words of a given length. This + # is used to split up the common trie after knowing all words, so we can + # switch on the expected word length first, and have the per-trie function + # implement simple longest prefix matching. sub filter_depth { my ($self, $togo) = @_; @@ -269,6 +284,7 @@ package Trie { return $new; } + # (helper for rebuild_tree) # Reinsert all value nodes into the specified $trie, prepending $prefix # to their $paths. sub reinsert_value_nodes_into { @@ -281,7 +297,17 @@ package Trie { } } - # Find an earlier split due a an ambiguous character + # (helper for rebuild_tree) + # Find the earliest point to split a key. Normally, we split at the maximum + # power of 2 that is greater or equal than the length of the key. When we + # are building an ASCII-optimised case-insensitive trie that simply ORs + # each byte with 0x20, we need to split at the first ambiguous character: + # + # For example, the words a-bc and a\rbc are identical in such a situation: + # '-' | 0x20 == '-' == '\r' | 0x20 + # We cannot simply switch on all 4 bytes at once, but need to split before + # the ambiguous character so we can process the ambiguous character on its + # own. sub find_ealier_split { my ($self, $key) = @_; @@ -296,7 +322,10 @@ package Trie { return $self->alignpower2(length $key); } - # Rebuild the trie, splitting at ambiguous chars, and unifying key lengths + # This rebuilds the trie, splitting each key before ambiguous characters + # as explained in find_earlier_split(), and then chooses the smallest + # such split at each level, so that all keys at all levels have the same + # length (so we can use a multi-byte switch). sub rebuild_tree { my $self = shift; # Determine if/where we need to split before an ambiguous character @@ -387,54 +416,61 @@ package CCodeGen { return sprintf("*((triehash_uu%s*) &string[$offset])", $length * 8); } + # Render the trie so that it matches the longest prefix. sub print_table { my ($self, $trie, $fh, $indent, $index) = @_; $indent //= 0; $index //= 0; - if (defined $trie->{value}) { - printf $fh (" " x $indent . "return %s;\n", ($enum_class ? "${enum_name}::" : "").$trie->{label}); - return; - } + # If we have children, try to match them. + if (%{$trie->{children}}) { + # The difference between lowercase and uppercase alphabetical characters + # is that they have one bit flipped. If we have alphabetical characters + # in the search space, and the entire search space works fine if we + # always turn on the flip, just OR the character we are switching over + # with the bit. + my $want_use_bit = 0; + my $can_use_bit = 1; + my $key_length = 0; + foreach my $key (sort keys %{$trie->{children}}) { + $can_use_bit &= not main::ambiguous($key); + $want_use_bit |= ($key =~ /^[a-zA-Z]+$/); + $key_length = length($key); + } - # The difference between lowercase and uppercase alphabetical characters - # is that they have one bit flipped. If we have alphabetical characters - # in the search space, and the entire search space works fine if we - # always turn on the flip, just OR the character we are switching over - # with the bit. - my $want_use_bit = 0; - my $can_use_bit = 1; - my $key_length = 0; - foreach my $key (sort keys %{$trie->{children}}) { - $can_use_bit &= not main::ambiguous($key); - $want_use_bit |= ($key =~ /^[a-zA-Z]+$/); - $key_length = length($key); - } + if ($ignore_case && $can_use_bit && $want_use_bit) { + printf $fh ((" " x $indent) . "switch(%s | 0x%s) {\n", $self->switch_key($index, $key_length), "20" x $key_length); + } else { + printf $fh ((" " x $indent) . "switch(%s) {\n", $self->switch_key($index, $key_length)); + } - if ($ignore_case && $can_use_bit && $want_use_bit) { - printf $fh ((" " x $indent) . "switch(%s | 0x%s) {\n", $self->switch_key($index, $key_length), "20" x $key_length); - } else { - printf $fh ((" " x $indent) . "switch(%s) {\n", $self->switch_key($index, $key_length)); - } + my $notfirst = 0; + foreach my $key (sort keys %{$trie->{children}}) { + if ($notfirst) { + printf $fh (" " x $indent . " break;\n"); + } + if ($ignore_case) { + printf $fh (" " x $indent . "case %s:\n", $self->case_label(lc($key))); + printf $fh (" " x $indent . "case %s:\n", $self->case_label(uc($key))) if lc($key) ne uc($key) && !($can_use_bit && $want_use_bit); + } else { + printf $fh (" " x $indent . "case %s:\n", $self->case_label($key)); + } - my $notfirst = 0; - foreach my $key (sort keys %{$trie->{children}}) { - if ($notfirst) { - printf $fh (" " x $indent . " break;\n"); - } - if ($ignore_case) { - printf $fh (" " x $indent . "case %s:\n", $self->case_label(lc($key))); - printf $fh (" " x $indent . "case %s:\n", $self->case_label(uc($key))) if lc($key) ne uc($key) && !($can_use_bit && $want_use_bit); - } else { - printf $fh (" " x $indent . "case %s:\n", $self->case_label($key)); + $self->print_table($trie->{children}{$key}, $fh, $indent + 1, $index + length($key)); + + $notfirst=1; } - $self->print_table($trie->{children}{$key}, $fh, $indent + 1, $index + length($key)); + printf $fh (" " x $indent . "}\n"); + } + - $notfirst=1; + # This node has a value, so it is a possible end point. If no children + # matched, we have found our longest prefix. + if (defined $trie->{value}) { + printf $fh (" " x $indent . "return %s;\n", ($enum_class ? "${enum_name}::" : "").$trie->{label}); } - printf $fh (" " x $indent . "}\n"); } sub print_words { @@ -524,22 +560,17 @@ package CCodeGen { } } -# Check if the word can be reached by exactly one word in (alphabet OR 0x20). +# A character is ambiguous if the 1<<5 (0x20) bit does not correspond to the +# lower case bit. A word is ambiguous if any character is. This definition is +# used to check if we can perform the |0x20 optimization when building a case- +# insensitive trie. sub ambiguous { my $word = shift; foreach my $char (split //, $word) { - # Setting the lowercase flag in the character produces a different - # character, the character would thus not be matched. - return 1 if ((ord($char) | 0x20) != ord(lc($char))); - - # A word is also ambiguous if any character in lowercase can be reached - # by ORing 0x20 from another character in the charset that is not a - # lowercase character of the current character. - # Assume that we have UTF-8 and the most significant bit can be set - for my $i (0..255) { - return 1 if (($i | 0x20) == ord(lc($char)) && lc(chr($i)) ne lc($char)); - } + # If 0x20 does not solely indicate lowercase, it is ambiguous + return 1 if ord(lc($char)) != (ord($char) | 0x20); + return 1 if ord(uc($char)) != (ord($char) & ~0x20); } return 0; |