summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.travis.yml2
-rw-r--r--CMakeLists.txt3
-rw-r--r--README.md10
-rw-r--r--apt-pkg/acquire-item.cc116
-rw-r--r--apt-pkg/acquire-item.h147
-rw-r--r--apt-pkg/acquire-worker.cc26
-rw-r--r--apt-pkg/contrib/fileutl.cc5
-rw-r--r--apt-pkg/contrib/fileutl.h2
-rw-r--r--apt-pkg/contrib/srvrec.cc2
-rw-r--r--apt-pkg/deb/debindexfile.cc6
-rw-r--r--apt-pkg/deb/debsystem.cc22
-rw-r--r--apt-pkg/indexfile.cc8
-rw-r--r--apt-pkg/install-progress.cc20
-rw-r--r--apt-pkg/sourcelist.cc42
-rw-r--r--apt-private/private-cmndline.cc5
-rw-r--r--cmdline/apt-key.in13
-rw-r--r--completions/CMakeLists.txt4
-rw-r--r--debian/apt.install2
-rw-r--r--debian/changelog29
-rw-r--r--debian/control6
-rwxr-xr-xdebian/rules2
-rw-r--r--debian/tests/control3
-rw-r--r--doc/apt-cache.8.xml17
-rw-r--r--doc/apt-get.8.xml10
-rw-r--r--doc/apt-verbatim.ent2
-rw-r--r--doc/po/apt-doc.pot40
-rw-r--r--doc/po/de.po43
-rw-r--r--doc/po/es.po43
-rw-r--r--doc/po/fr.po43
-rw-r--r--doc/po/it.po43
-rw-r--r--doc/po/ja.po43
-rw-r--r--doc/po/nl.po43
-rw-r--r--doc/po/pl.po44
-rw-r--r--doc/po/pt.po43
-rw-r--r--doc/po/pt_BR.po37
-rw-r--r--ftparchive/writer.cc1
-rw-r--r--methods/aptmethod.h4
-rw-r--r--methods/http.cc9
-rw-r--r--methods/http.h2
-rw-r--r--methods/https.cc12
-rw-r--r--methods/server.cc80
-rw-r--r--methods/server.h5
-rw-r--r--po/apt-all.pot8
-rw-r--r--po/ar.po10
-rw-r--r--po/ast.po10
-rw-r--r--po/bg.po10
-rw-r--r--po/bs.po6
-rw-r--r--po/ca.po10
-rw-r--r--po/cs.po10
-rw-r--r--po/cy.po10
-rw-r--r--po/da.po10
-rw-r--r--po/de.po10
-rw-r--r--po/dz.po10
-rw-r--r--po/el.po10
-rw-r--r--po/es.po10
-rw-r--r--po/eu.po10
-rw-r--r--po/fi.po10
-rw-r--r--po/fr.po10
-rw-r--r--po/gl.po10
-rw-r--r--po/hu.po10
-rw-r--r--po/it.po10
-rw-r--r--po/ja.po10
-rw-r--r--po/km.po10
-rw-r--r--po/ko.po10
-rw-r--r--po/ku.po6
-rw-r--r--po/lt.po6
-rw-r--r--po/mr.po10
-rw-r--r--po/nb.po10
-rw-r--r--po/ne.po10
-rw-r--r--po/nl.po10
-rw-r--r--po/nn.po10
-rw-r--r--po/pl.po10
-rw-r--r--po/pt.po10
-rw-r--r--po/pt_BR.po10
-rw-r--r--po/ro.po10
-rw-r--r--po/ru.po10
-rw-r--r--po/sk.po10
-rw-r--r--po/sl.po10
-rw-r--r--po/sv.po10
-rw-r--r--po/th.po10
-rw-r--r--po/tl.po10
-rw-r--r--po/tr.po10
-rw-r--r--po/uk.po10
-rw-r--r--po/vi.po10
-rw-r--r--po/zh_CN.po10
-rw-r--r--po/zh_TW.po10
-rwxr-xr-xprepare-release5
-rw-r--r--test/integration/framework47
-rw-r--r--test/integration/joesixpack.pubbin639 -> 639 bytes
-rw-r--r--test/integration/joesixpack.secbin1290 -> 1290 bytes
-rw-r--r--test/integration/keyrings/test-archive-keyring.pubbin979 -> 979 bytes
-rw-r--r--test/integration/keyrings/test-archive-keyring.secbin1355 -> 1642 bytes
-rw-r--r--test/integration/keyrings/test-master-keyring.pubbin1199 -> 1199 bytes
-rw-r--r--test/integration/keyrings/test-master-keyring.secbin2501 -> 2501 bytes
-rw-r--r--test/integration/marvinparanoid.pubbin629 -> 624 bytes
-rw-r--r--test/integration/marvinparanoid.secbin1280 -> 1275 bytes
-rw-r--r--test/integration/rexexpired.pubbin1200 -> 1191 bytes
-rw-r--r--test/integration/rexexpired.secbin2502 -> 2493 bytes
-rwxr-xr-xtest/integration/test-apt-get-install-deb35
-rwxr-xr-xtest/integration/test-apt-key42
-rwxr-xr-xtest/integration/test-apt-key-net-update9
-rwxr-xr-xtest/integration/test-apt-key-used-in-maintainerscript2
-rwxr-xr-xtest/integration/test-apt-update-transactions2
-rwxr-xr-xtest/integration/test-bug-623443-fail-on-bad-proxies5
-rwxr-xr-xtest/integration/test-bug-778375-server-has-no-reason-phrase1
-rwxr-xr-xtest/integration/test-bug-lp1445239-download-loop1
-rwxr-xr-xtest/integration/test-handle-redirect-as-used-mirror-change24
-rwxr-xr-xtest/integration/test-partial-file-support8
-rwxr-xr-xtest/integration/test-pdiff-usage29
-rwxr-xr-xtest/integration/test-releasefile-verification7
-rw-r--r--test/interactive-helper/aptwebserver.cc12
-rw-r--r--test/libapt/install_progress_test.cc7
-rw-r--r--test/libapt/srvrecs_test.cc10
-rw-r--r--test/libapt/stringview_test.cc20
114 files changed, 1209 insertions, 522 deletions
diff --git a/.travis.yml b/.travis.yml
index 3c4b59319..424172e04 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -16,7 +16,7 @@ before_script:
- ( mkdir build && cd build && cmake .. )
- make -C build -j4
script:
- - make -C build test
+ - CTEST_OUTPUT_ON_FAILURE=1 make -C build test
- ./test/integration/run-tests -q
- sudo adduser --force-badname --system --home /nonexistent --no-create-home --quiet _apt || true
- sudo ./test/integration/run-tests -q
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9cb3dbeeb..2ed87b34b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -113,7 +113,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.3~rc1ubuntu1")
+set(PACKAGE_VERSION "1.3~rc2")
if (NOT DEFINED COMMON_ARCH)
execute_process(COMMAND dpkg-architecture -qDEB_HOST_ARCH
@@ -133,6 +133,7 @@ add_subdirectory(apt-pkg)
add_subdirectory(apt-private)
add_subdirectory(apt-inst)
add_subdirectory(cmdline)
+add_subdirectory(completions)
add_subdirectory(doc)
add_subdirectory(dselect)
add_subdirectory(ftparchive)
diff --git a/README.md b/README.md
index 1c1019713..981e878a0 100644
--- a/README.md
+++ b/README.md
@@ -35,7 +35,7 @@ Our bugtracker as well as a general overview can be found at the [Debian Tracker
Contributing
------------
APT is maintained in git, the official repository being located at
-`git://anonscm.debian.org/apt/apt.git` ([webgit](http://anonscm.debian.org/gitweb/?p=apt/apt.git)),
+`git://anonscm.debian.org/apt/apt.git` ([webgit](https://anonscm.debian.org/git/apt/apt.git)),
but also available at other locations like [GitHub](https://github.com/Debian/apt).
The default branch is `master`, other branches targeted at different
@@ -62,7 +62,7 @@ You can also use the Ninja generator of cmake, to do that pass
to the cmake invocation, and then use ninja instead of make.
The source code uses in most parts a relatively uncommon indent convention,
-namely 3 spaces with 8 space tab (see [doc/style.txt](http://anonscm.debian.org/gitweb/?p=apt/apt.git;a=blob;f=doc/style.txt) for more on this).
+namely 3 spaces with 8 space tab (see [doc/style.txt](https://anonscm.debian.org/git/apt/apt.git/tree/doc/style.txt) for more on this).
Adhering to it avoids unnecessary code-churn destroying history (aka: `git blame`)
and you are therefore encouraged to write patches in this style.
Your editor can surely help you with this, for vim the settings would be
@@ -115,8 +115,10 @@ itself as well as in conjunction with dpkg and other tools while working with pa
### Unit tests
-These tests are gtest-dev based, reside in `./test/libapt` and can be run with `make test`.
-They are executed at package build-time, but not by `make`.
+These tests are gtest-dev based, executed by ctest, reside in `./test/libapt`
+and can be run with `make test`. They are executed at package build-time, but
+not by `make`. CTest by default does not show the output of tests, even if they
+failed, so to see more details you can also run them with `ctest --verbose`.
Debugging
---------
diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc
index f13d2f6ae..7abb7b206 100644
--- a/apt-pkg/acquire-item.cc
+++ b/apt-pkg/acquire-item.cc
@@ -410,7 +410,7 @@ bool pkgAcqTransactionItem::QueueURI(pkgAcquire::ItemDesc &Item)
return false;
}
// If we got the InRelease file via a mirror, pick all indexes directly from this mirror, too
- if (TransactionManager->BaseURI.empty() == false &&
+ if (TransactionManager->BaseURI.empty() == false && UsedMirror.empty() &&
URI::SiteOnly(Item.URI) != URI::SiteOnly(TransactionManager->BaseURI))
{
// this ensures we rewrite only once and only the first step
@@ -451,7 +451,11 @@ std::string pkgAcquire::Item::GetFinalFilename() const
}
std::string pkgAcqDiffIndex::GetFinalFilename() const
{
- return GetFinalFileNameFromURI(GetDiffIndexURI(Target));
+ std::string const FinalFile = GetFinalFileNameFromURI(GetDiffIndexURI(Target));
+ // we don't want recompress, so lets keep whatever we got
+ if (CurrentCompressionExtension == "uncompressed")
+ return FinalFile;
+ return FinalFile + "." + CurrentCompressionExtension;
}
std::string pkgAcqIndex::GetFinalFilename() const
{
@@ -488,7 +492,10 @@ std::string pkgAcqIndex::GetMetaKey() const
}
std::string pkgAcqDiffIndex::GetMetaKey() const
{
- return GetDiffIndexFileName(Target.MetaKey);
+ auto const metakey = GetDiffIndexFileName(Target.MetaKey);
+ if (CurrentCompressionExtension == "uncompressed")
+ return metakey;
+ return metakey + "." + CurrentCompressionExtension;
}
/*}}}*/
//pkgAcqTransactionItem::TransactionState and specialisations for child classes /*{{{*/
@@ -991,6 +998,9 @@ std::string pkgAcquire::Item::HashSum() const /*{{{*/
/*}}}*/
bool pkgAcquire::Item::IsRedirectionLoop(std::string const &NewURI) /*{{{*/
{
+ // store can fail due to permission errors and the item will "loop" then
+ if (APT::String::Startswith(NewURI, "store:"))
+ return false;
if (d->PastRedirections.empty())
{
d->PastRedirections.push_back(NewURI);
@@ -1223,9 +1233,15 @@ bool pkgAcqMetaBase::CheckDownloadDone(pkgAcqTransactionItem * const I, const st
if (I->UsedMirror.empty() == false && _config->FindB("Acquire::SameMirrorForAllIndexes", true))
{
if (APT::String::Endswith(I->Desc.URI, "InRelease"))
+ {
TransactionManager->BaseURI = I->Desc.URI.substr(0, I->Desc.URI.length() - strlen("InRelease"));
+ TransactionManager->UsedMirror = I->UsedMirror;
+ }
else if (APT::String::Endswith(I->Desc.URI, "Release"))
+ {
TransactionManager->BaseURI = I->Desc.URI.substr(0, I->Desc.URI.length() - strlen("Release"));
+ TransactionManager->UsedMirror = I->UsedMirror;
+ }
}
std::string const FileName = LookupTag(Message,"Filename");
@@ -1962,44 +1978,33 @@ pkgAcqBaseIndex::~pkgAcqBaseIndex() {}
pkgAcqDiffIndex::pkgAcqDiffIndex(pkgAcquire * const Owner,
pkgAcqMetaClearSig * const TransactionManager,
IndexTarget const &Target)
- : pkgAcqBaseIndex(Owner, TransactionManager, Target), d(NULL), diffs(NULL)
+ : pkgAcqIndex(Owner, TransactionManager, Target, true), d(NULL), diffs(NULL)
{
// FIXME: Magic number as an upper bound on pdiffs we will reasonably acquire
ExpectedAdditionalItems = 40;
-
Debug = _config->FindB("Debug::pkgAcquire::Diffs",false);
- Desc.Owner = this;
- Desc.Description = GetDiffIndexFileName(Target.Description);
- Desc.ShortDesc = Target.ShortDesc;
- Desc.URI = GetDiffIndexURI(Target);
-
- DestFile = GetPartialFileNameFromURI(Desc.URI);
+ CompressionExtensions.clear();
+ {
+ std::vector<std::string> types = APT::Configuration::getCompressionTypes();
+ if (types.empty() == false)
+ {
+ std::ostringstream os;
+ std::copy_if(types.begin(), types.end()-1, std::ostream_iterator<std::string>(os, " "), [&](std::string const type) {
+ if (type == "uncompressed")
+ return true;
+ return TransactionManager->MetaIndexParser->Exists(GetDiffIndexFileName(Target.MetaKey) + '.' + type);
+ });
+ os << *types.rbegin();
+ CompressionExtensions = os.str();
+ }
+ }
+ if (Target.Option(IndexTarget::COMPRESSIONTYPES).find("by-hash") != std::string::npos)
+ CompressionExtensions = "by-hash " + CompressionExtensions;
+ Init(GetDiffIndexURI(Target), GetDiffIndexFileName(Target.Description), Target.ShortDesc);
if(Debug)
std::clog << "pkgAcqDiffIndex: " << Desc.URI << std::endl;
-
- QueueURI(Desc);
-}
- /*}}}*/
-// AcqIndex::Custom600Headers - Insert custom request headers /*{{{*/
-// ---------------------------------------------------------------------
-/* The only header we use is the last-modified header. */
-string pkgAcqDiffIndex::Custom600Headers() const
-{
- if (TransactionManager->LastMetaIndexParser != NULL)
- return "\nIndex-File: true";
-
- string const Final = GetFinalFilename();
-
- if(Debug)
- std::clog << "Custom600Header-IMS: " << Final << std::endl;
-
- struct stat Buf;
- if (stat(Final.c_str(),&Buf) != 0)
- return "\nIndex-File: true";
-
- return "\nIndex-File: true\nLast-Modified: " + TimeRFC1123(Buf.st_mtime, false);
}
/*}}}*/
void pkgAcqDiffIndex::QueueOnIMSHit() const /*{{{*/
@@ -2030,7 +2035,7 @@ bool pkgAcqDiffIndex::ParseDiffIndex(string const &IndexDiffFile) /*{{{*/
std::clog << "pkgAcqDiffIndex::ParseIndexDiff() " << IndexDiffFile
<< std::endl;
- FileFd Fd(IndexDiffFile,FileFd::ReadOnly);
+ FileFd Fd(IndexDiffFile, FileFd::ReadOnly, FileFd::Extension);
pkgTagFile TF(&Fd);
if (Fd.IsOpen() == false || Fd.Failed())
return false;
@@ -2402,7 +2407,9 @@ bool pkgAcqDiffIndex::ParseDiffIndex(string const &IndexDiffFile) /*{{{*/
/*}}}*/
void pkgAcqDiffIndex::Failed(string const &Message,pkgAcquire::MethodConfig const * const Cnf)/*{{{*/
{
- pkgAcqBaseIndex::Failed(Message,Cnf);
+ if (CommonFailed(GetDiffIndexURI(Target), GetDiffIndexFileName(Target.Description), Message, Cnf))
+ return;
+
Status = StatDone;
ExpectedAdditionalItems = 0;
@@ -2820,10 +2827,12 @@ pkgAcqIndexMergeDiffs::~pkgAcqIndexMergeDiffs() {}
// AcqIndex::AcqIndex - Constructor /*{{{*/
pkgAcqIndex::pkgAcqIndex(pkgAcquire * const Owner,
pkgAcqMetaClearSig * const TransactionManager,
- IndexTarget const &Target)
+ IndexTarget const &Target, bool const Derived)
: pkgAcqBaseIndex(Owner, TransactionManager, Target), d(NULL), Stage(STAGE_DOWNLOAD),
CompressionExtensions(Target.Option(IndexTarget::COMPRESSIONTYPES))
{
+ if (Derived)
+ return;
Init(Target.URI, Target.Description, Target.ShortDesc);
if(_config->FindB("Debug::Acquire::Transaction", false) == true)
@@ -2856,10 +2865,6 @@ void pkgAcqIndex::Init(string const &URI, string const &URIDesc,
DestFile = GetPartialFileNameFromURI(URI);
NextCompressionExtension(CurrentCompressionExtension, CompressionExtensions, false);
- // store file size of the download to ensure the fetcher gives
- // accurate progress reporting
- FileSize = GetExpectedHashes().FileSize();
-
if (CurrentCompressionExtension == "uncompressed")
{
Desc.URI = URI;
@@ -2874,6 +2879,8 @@ void pkgAcqIndex::Init(string const &URI, string const &URIDesc,
Desc.URI = URI + '.' + CurrentCompressionExtension;
DestFile = DestFile + '.' + CurrentCompressionExtension;
}
+ else
+ Desc.URI = URI;
HashStringList const Hashes = GetExpectedHashes();
HashString const * const TargetHash = Hashes.find(NULL);
@@ -2896,6 +2903,9 @@ void pkgAcqIndex::Init(string const &URI, string const &URIDesc,
DestFile = DestFile + '.' + CurrentCompressionExtension;
}
+ // store file size of the download to ensure the fetcher gives
+ // accurate progress reporting
+ FileSize = GetExpectedHashes().FileSize();
Desc.Description = URIDesc;
Desc.Owner = this;
@@ -2928,20 +2938,40 @@ string pkgAcqIndex::Custom600Headers() const
}
/*}}}*/
// AcqIndex::Failed - getting the indexfile failed /*{{{*/
-void pkgAcqIndex::Failed(string const &Message,pkgAcquire::MethodConfig const * const Cnf)
+bool pkgAcqIndex::CommonFailed(std::string const &TargetURI, std::string const TargetDesc,
+ std::string const &Message, pkgAcquire::MethodConfig const * const Cnf)
{
pkgAcqBaseIndex::Failed(Message,Cnf);
+ if (UsedMirror.empty() == false && UsedMirror != "DIRECT" &&
+ LookupTag(Message, "FailReason") == "HttpError404")
+ {
+ UsedMirror = "DIRECT";
+ if (Desc.URI.find("/by-hash/") != std::string::npos)
+ CompressionExtensions = "by-hash " + CompressionExtensions;
+ else
+ CompressionExtensions = CurrentCompressionExtension + ' ' + CompressionExtensions;
+ Init(TargetURI, TargetDesc, Desc.ShortDesc);
+ Status = StatIdle;
+ return true;
+ }
+
// authorisation matches will not be fixed by other compression types
if (Status != StatAuthError)
{
if (CompressionExtensions.empty() == false)
{
- Init(Target.URI, Desc.Description, Desc.ShortDesc);
+ Init(TargetURI, Desc.Description, Desc.ShortDesc);
Status = StatIdle;
- return;
+ return true;
}
}
+ return false;
+}
+void pkgAcqIndex::Failed(string const &Message,pkgAcquire::MethodConfig const * const Cnf)
+{
+ if (CommonFailed(Target.URI, Target.Description, Message, Cnf))
+ return;
if(Target.IsOptional && GetExpectedHashes().empty() && Stage == STAGE_DOWNLOAD)
Status = StatDone;
diff --git a/apt-pkg/acquire-item.h b/apt-pkg/acquire-item.h
index e6e5ea12b..71a11bcde 100644
--- a/apt-pkg/acquire-item.h
+++ b/apt-pkg/acquire-item.h
@@ -611,6 +611,79 @@ class APT_HIDDEN pkgAcqBaseIndex : public pkgAcqTransactionItem
virtual ~pkgAcqBaseIndex();
};
/*}}}*/
+/** \brief An acquire item that is responsible for fetching an index {{{
+ * file (e.g., Packages or Sources).
+ *
+ * \sa pkgAcqDiffIndex, pkgAcqIndexDiffs, pkgAcqIndexTrans
+ *
+ * \todo Why does pkgAcqIndex have protected members?
+ */
+class APT_HIDDEN pkgAcqIndex : public pkgAcqBaseIndex
+{
+ void * const d;
+
+ protected:
+
+ /** \brief The stages the method goes through
+ *
+ * The method first downloads the indexfile, then its decompressed (or
+ * copied) and verified
+ */
+ enum AllStages {
+ STAGE_DOWNLOAD,
+ STAGE_DECOMPRESS_AND_VERIFY,
+ };
+ AllStages Stage;
+
+ /** \brief Handle what needs to be done when the download is done */
+ void StageDownloadDone(std::string const &Message);
+
+ /** \brief Handle what needs to be done when the decompression/copy is
+ * done
+ */
+ void StageDecompressDone();
+
+ /** \brief If \b set, this partially downloaded file will be
+ * removed when the download completes.
+ */
+ std::string EraseFileName;
+
+ /** \brief The compression-related file extensions that are being
+ * added to the downloaded file one by one if first fails (e.g., "gz bz2").
+ */
+ std::string CompressionExtensions;
+
+ /** \brief The actual compression extension currently used */
+ std::string CurrentCompressionExtension;
+
+ /** \brief Do the changes needed to fetch via AptByHash (if needed) */
+ void InitByHashIfNeeded();
+
+ /** \brief Get the full pathname of the final file for the current URI */
+ virtual std::string GetFinalFilename() const APT_OVERRIDE;
+
+ virtual bool TransactionState(TransactionStates const state) APT_OVERRIDE;
+
+ public:
+ // Specialized action members
+ virtual void Failed(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 Custom600Headers() const APT_OVERRIDE;
+ virtual std::string DescURI() const APT_OVERRIDE {return Desc.URI;};
+ virtual std::string GetMetaKey() const APT_OVERRIDE;
+
+ pkgAcqIndex(pkgAcquire * const Owner, pkgAcqMetaClearSig * const TransactionManager,
+ IndexTarget const &Target, bool const Derived = false) APT_NONNULL(2, 3);
+ virtual ~pkgAcqIndex();
+
+ protected:
+ APT_HIDDEN void Init(std::string const &URI, std::string const &URIDesc,
+ std::string const &ShortDesc);
+ APT_HIDDEN bool CommonFailed(std::string const &TargetURI, std::string const TargetDesc,
+ std::string const &Message, pkgAcquire::MethodConfig const * const Cnf);
+};
+ /*}}}*/
/** \brief An item that is responsible for fetching an index file of {{{
* package list diffs and starting the package list's download.
*
@@ -620,7 +693,7 @@ class APT_HIDDEN pkgAcqBaseIndex : public pkgAcqTransactionItem
*
* \sa pkgAcqIndexDiffs, pkgAcqIndex
*/
-class APT_HIDDEN pkgAcqDiffIndex : public pkgAcqBaseIndex
+class APT_HIDDEN pkgAcqDiffIndex : public pkgAcqIndex
{
void * const d;
std::vector<pkgAcqIndexMergeDiffs*> * diffs;
@@ -646,7 +719,6 @@ class APT_HIDDEN pkgAcqDiffIndex : public pkgAcqBaseIndex
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";};
- virtual std::string Custom600Headers() const APT_OVERRIDE;
virtual std::string GetMetaKey() const APT_OVERRIDE;
/** \brief Parse the Index file for a set of Packages diffs.
@@ -887,77 +959,6 @@ class APT_HIDDEN pkgAcqIndexDiffs : public pkgAcqBaseIndex
virtual ~pkgAcqIndexDiffs();
};
/*}}}*/
-/** \brief An acquire item that is responsible for fetching an index {{{
- * file (e.g., Packages or Sources).
- *
- * \sa pkgAcqDiffIndex, pkgAcqIndexDiffs, pkgAcqIndexTrans
- *
- * \todo Why does pkgAcqIndex have protected members?
- */
-class APT_HIDDEN pkgAcqIndex : public pkgAcqBaseIndex
-{
- void * const d;
-
- protected:
-
- /** \brief The stages the method goes through
- *
- * The method first downloads the indexfile, then its decompressed (or
- * copied) and verified
- */
- enum AllStages {
- STAGE_DOWNLOAD,
- STAGE_DECOMPRESS_AND_VERIFY,
- };
- AllStages Stage;
-
- /** \brief Handle what needs to be done when the download is done */
- void StageDownloadDone(std::string const &Message);
-
- /** \brief Handle what needs to be done when the decompression/copy is
- * done
- */
- void StageDecompressDone();
-
- /** \brief If \b set, this partially downloaded file will be
- * removed when the download completes.
- */
- std::string EraseFileName;
-
- /** \brief The compression-related file extensions that are being
- * added to the downloaded file one by one if first fails (e.g., "gz bz2").
- */
- std::string CompressionExtensions;
-
- /** \brief The actual compression extension currently used */
- std::string CurrentCompressionExtension;
-
- /** \brief Do the changes needed to fetch via AptByHash (if needed) */
- void InitByHashIfNeeded();
-
- /** \brief Get the full pathname of the final file for the current URI */
- virtual std::string GetFinalFilename() const APT_OVERRIDE;
-
- virtual bool TransactionState(TransactionStates const state) APT_OVERRIDE;
-
- public:
- // Specialized action members
- virtual void Failed(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 Custom600Headers() const APT_OVERRIDE;
- virtual std::string DescURI() const APT_OVERRIDE {return Desc.URI;};
- virtual std::string GetMetaKey() const APT_OVERRIDE;
-
- pkgAcqIndex(pkgAcquire * const Owner, pkgAcqMetaClearSig * const TransactionManager,
- IndexTarget const &Target) APT_NONNULL(2, 3);
- virtual ~pkgAcqIndex();
-
- private:
- APT_HIDDEN void Init(std::string const &URI, std::string const &URIDesc,
- std::string const &ShortDesc);
-};
- /*}}}*/
/** \brief An item that is responsible for fetching a package file. {{{
*
* If the package file already exists in the cache, nothing will be
diff --git a/apt-pkg/acquire-worker.cc b/apt-pkg/acquire-worker.cc
index 7a4f8177f..a4fbc7651 100644
--- a/apt-pkg/acquire-worker.cc
+++ b/apt-pkg/acquire-worker.cc
@@ -464,6 +464,7 @@ bool pkgAcquire::Worker::RunMessages()
}
else
{
+ auto SavedDesc = Owner->GetItemDesc();
if (isDoomedItem(Owner) == false)
{
if (Message.find("\nFailReason:") == std::string::npos)
@@ -476,7 +477,7 @@ bool pkgAcquire::Worker::RunMessages()
Owner->Failed(Message,Config);
}
if (Log != nullptr)
- Log->Fail(Owner->GetItemDesc());
+ Log->Fail(SavedDesc);
}
}
ItemDone();
@@ -524,11 +525,11 @@ bool pkgAcquire::Worker::RunMessages()
Owner->Status = pkgAcquire::Item::StatAuthError;
else if (errTransient)
Owner->Status = pkgAcquire::Item::StatTransientNetworkError;
-
+ auto SavedDesc = Owner->GetItemDesc();
if (isDoomedItem(Owner) == false)
Owner->Failed(Message,Config);
if (Log != nullptr)
- Log->Fail(Owner->GetItemDesc());
+ Log->Fail(SavedDesc);
}
ItemDone();
@@ -685,6 +686,25 @@ bool pkgAcquire::Worker::QueueItem(pkgAcquire::Queue::QItem *Item)
return true;
}
+ if (Item->Owner->IsRedirectionLoop(Item->URI))
+ {
+ std::string const Message = "400 URI Failure"
+ "\nURI: " + Item->URI +
+ "\nFilename: " + Item->Owner->DestFile +
+ "\nFailReason: RedirectionLoop";
+
+ auto const ItmOwners = Item->Owners;
+ for (auto &O: ItmOwners)
+ {
+ O->Status = pkgAcquire::Item::StatError;
+ O->Failed(Message, Config);
+ if (Log != nullptr)
+ Log->Fail(O->GetItemDesc());
+ }
+ // "queued" successfully, the item just instantly failed
+ return true;
+ }
+
string Message = "600 URI Acquire\n";
Message.reserve(300);
Message += "URI: " + Item->URI;
diff --git a/apt-pkg/contrib/fileutl.cc b/apt-pkg/contrib/fileutl.cc
index a9d51a6bf..fd13b45dc 100644
--- a/apt-pkg/contrib/fileutl.cc
+++ b/apt-pkg/contrib/fileutl.cc
@@ -1908,11 +1908,12 @@ public:
" but was forced to ignore it in favor of an external binary – which isn't installed.", compressor.Name.c_str());
bool const Comp = (Mode & FileFd::WriteOnly) == FileFd::WriteOnly;
- if (Comp == false)
+ if (Comp == false && filefd->iFd != -1)
{
// Handle 'decompression' of empty files
struct stat Buf;
- fstat(filefd->iFd, &Buf);
+ if (fstat(filefd->iFd, &Buf) != 0)
+ return filefd->FileFdErrno("fstat", "Could not stat fd %d for file %s", filefd->iFd, filefd->FileName.c_str());
if (Buf.st_size == 0 && S_ISFIFO(Buf.st_mode) == false)
return true;
diff --git a/apt-pkg/contrib/fileutl.h b/apt-pkg/contrib/fileutl.h
index 4a1676dc2..15665f8b5 100644
--- a/apt-pkg/contrib/fileutl.h
+++ b/apt-pkg/contrib/fileutl.h
@@ -164,7 +164,7 @@ bool RemoveFile(char const * const Function, std::string const &FileName);
int GetLock(std::string File,bool Errors = true);
bool FileExists(std::string File);
bool RealFileExists(std::string File);
-bool DirectoryExists(std::string const &Path) APT_CONST;
+bool DirectoryExists(std::string const &Path);
bool CreateDirectory(std::string const &Parent, std::string const &Path);
time_t GetModificationTime(std::string const &Path);
bool Rename(std::string From, std::string To);
diff --git a/apt-pkg/contrib/srvrec.cc b/apt-pkg/contrib/srvrec.cc
index be159bad9..327e59937 100644
--- a/apt-pkg/contrib/srvrec.cc
+++ b/apt-pkg/contrib/srvrec.cc
@@ -185,7 +185,7 @@ SrvRec PopFromSrvRecs(std::vector<SrvRec> &Recs)
[&I](SrvRec const &J) { return I->priority != J.priority; });
// clock seems random enough.
- I += clock() % std::distance(I, J);
+ I += std::max(static_cast<clock_t>(0), clock()) % std::distance(I, J);
SrvRec const selected = std::move(*I);
Recs.erase(I);
diff --git a/apt-pkg/deb/debindexfile.cc b/apt-pkg/deb/debindexfile.cc
index 6a23b2c00..65bd3e6ee 100644
--- a/apt-pkg/deb/debindexfile.cc
+++ b/apt-pkg/deb/debindexfile.cc
@@ -80,7 +80,11 @@ debPackagesIndex::debPackagesIndex(IndexTarget const &Target, bool const Trusted
std::string debPackagesIndex::ArchiveInfo(pkgCache::VerIterator const &Ver) const
{
std::string Res = Target.Description;
- Res.erase(Target.Description.rfind(' '));
+ {
+ auto const space = Target.Description.rfind(' ');
+ if (space != std::string::npos)
+ Res.erase(space);
+ }
Res += " ";
Res += Ver.ParentPkg().Name();
diff --git a/apt-pkg/deb/debsystem.cc b/apt-pkg/deb/debsystem.cc
index fd702b3c6..f7968ec47 100644
--- a/apt-pkg/deb/debsystem.cc
+++ b/apt-pkg/deb/debsystem.cc
@@ -184,26 +184,24 @@ pkgPackageManager *debSystem::CreatePM(pkgDepCache *Cache) const
// System::Initialize - Setup the configuration space.. /*{{{*/
// ---------------------------------------------------------------------
/* These are the Debian specific configuration variables.. */
-static std::string getDpkgStatusLocation(Configuration &Cnf) {
+static std::string getDpkgStatusLocation(Configuration const &Cnf) {
+ Configuration PathCnf;
+ PathCnf.Set("Dir", Cnf.Find("Dir", "/"));
+ PathCnf.Set("Dir::State::status", "status");
auto const cnfstatedir = Cnf.Find("Dir::State", "var/lib/apt/");
+ // if the state dir ends in apt, replace it with dpkg -
+ // for the default this gives us the same as the fallback below.
+ // This can't be a ../dpkg as that would play bad with symlinks
std::string statedir;
if (APT::String::Endswith(cnfstatedir, "/apt/"))
statedir.assign(cnfstatedir, 0, cnfstatedir.length() - 5);
else if (APT::String::Endswith(cnfstatedir, "/apt"))
statedir.assign(cnfstatedir, 0, cnfstatedir.length() - 4);
if (statedir.empty())
- Cnf.Set("Dir::State", "var/lib/dpkg");
+ PathCnf.Set("Dir::State", "var/lib/dpkg");
else
- Cnf.Set("Dir::State", flCombine(statedir, "dpkg"));
- auto const cnfrootdir = Cnf.Find("RootDir");
- if (Cnf.Exists("RootDir") == true)
- Cnf.Set("RootDir", "");
- Cnf.Set("Dir::State::status", "status");
- auto const statusfile = Cnf.FindFile("Dir::State::status");
- if (cnfrootdir.empty() == false)
- Cnf.Set("RootDir", cnfrootdir);
- Cnf.Set("Dir::State", cnfstatedir);
- return statusfile;
+ PathCnf.Set("Dir::State", flCombine(statedir, "dpkg"));
+ return PathCnf.FindFile("Dir::State::status");
}
bool debSystem::Initialize(Configuration &Cnf)
{
diff --git a/apt-pkg/indexfile.cc b/apt-pkg/indexfile.cc
index b1435d32c..934943205 100644
--- a/apt-pkg/indexfile.cc
+++ b/apt-pkg/indexfile.cc
@@ -151,7 +151,13 @@ std::string IndexTarget::Option(OptionKeys const EnumKey) const /*{{{*/
APT_CASE(ALLOW_WEAK);
APT_CASE(ALLOW_DOWNGRADE_TO_INSECURE);
#undef APT_CASE
- case FILENAME: return _config->FindDir("Dir::State::lists") + URItoFileName(URI);
+ case FILENAME:
+ {
+ auto const M = Options.find("FILENAME");
+ if (M == Options.end())
+ return _config->FindDir("Dir::State::lists") + URItoFileName(URI);
+ return M->second;
+ }
case EXISTING_FILENAME:
std::string const filename = Option(FILENAME);
std::vector<std::string> const types = VectorizeString(Option(COMPRESSIONTYPES), ' ');
diff --git a/apt-pkg/install-progress.cc b/apt-pkg/install-progress.cc
index c77c240c3..be5b8b5c7 100644
--- a/apt-pkg/install-progress.cc
+++ b/apt-pkg/install-progress.cc
@@ -14,6 +14,7 @@
#include <algorithm>
#include <stdio.h>
#include <sstream>
+#include <cmath>
#include <apti18n.h>
@@ -321,19 +322,14 @@ std::string
PackageManagerFancy::GetTextProgressStr(float Percent, int OutputSize)
{
std::string output;
- int i;
-
- // should we raise a exception here instead?
- if (Percent < 0.0 || Percent > 1.0 || OutputSize < 3)
+ if (unlikely(OutputSize < 3))
return output;
-
- int BarSize = OutputSize - 2; // bar without the leading "[" and trailing "]"
- output += "[";
- for(i=0; i < BarSize*Percent; i++)
- output += "#";
- for (/*nothing*/; i < BarSize; i++)
- output += ".";
- output += "]";
+
+ int const BarSize = OutputSize - 2; // bar without the leading "[" and trailing "]"
+ int const BarDone = std::max(0, std::min(BarSize, static_cast<int>(std::floor(Percent * BarSize))));
+ output.append("[");
+ std::fill_n(std::fill_n(std::back_inserter(output), BarDone, '#'), BarSize - BarDone, '.');
+ output.append("]");
return output;
}
diff --git a/apt-pkg/sourcelist.cc b/apt-pkg/sourcelist.cc
index 000539582..cfd824978 100644
--- a/apt-pkg/sourcelist.cc
+++ b/apt-pkg/sourcelist.cc
@@ -328,6 +328,9 @@ bool pkgSourceList::ReadMainList()
// Only warn if there is no sources.list file.
_error->WarningE("RealFileExists", _("Unable to read %s"), Main.c_str());
+ for (auto && file: _config->FindVector("APT::Sources::With"))
+ Res &= AddVolatileFile(file, nullptr);
+
return Res;
}
/*}}}*/
@@ -420,18 +423,18 @@ bool pkgSourceList::ParseFileOldStyle(std::string const &File)
/* Returns: the number of stanzas parsed*/
bool pkgSourceList::ParseFileDeb822(string const &File)
{
- unsigned int i = 1;
-
// see if we can read the file
FileFd Fd(File, FileFd::ReadOnly);
pkgTagFile Sources(&Fd, pkgTagFile::SUPPORT_COMMENTS);
if (Fd.IsOpen() == false || Fd.Failed())
- return _error->Error(_("Malformed stanza %u in source list %s (type)"),i,File.c_str());
+ return _error->Error(_("Malformed stanza %u in source list %s (type)"),0,File.c_str());
// read step by step
pkgTagSection Tags;
+ unsigned int i = 0;
while (Sources.Step(Tags) == true)
{
+ ++i;
if(Tags.Exists("Types") == false)
return _error->Error(_("Malformed stanza %u in source list %s (type)"),i,File.c_str());
@@ -449,8 +452,6 @@ bool pkgSourceList::ParseFileDeb822(string const &File)
if (!Parse->ParseStanza(SrcList, Tags, i, Fd))
return false;
-
- ++i;
}
}
return true;
@@ -544,6 +545,22 @@ void pkgSourceList::AddVolatileFile(pkgIndexFile * const File) /*{{{*/
VolatileFiles.push_back(File);
}
/*}}}*/
+static bool fileNameMatches(std::string const &filename, std::string const &idxtype)/*{{{*/
+{
+ for (auto && type: APT::Configuration::getCompressionTypes())
+ {
+ if (type == "uncompressed")
+ {
+ if (filename == idxtype || APT::String::Endswith(filename, '_' + idxtype))
+ return true;
+ }
+ else if (filename == idxtype + '.' + type ||
+ APT::String::Endswith(filename, '_' + idxtype + '.' + type))
+ return true;
+ }
+ return false;
+}
+ /*}}}*/
bool pkgSourceList::AddVolatileFile(std::string const &File, std::vector<std::string> * const VolatileCmdL)/*{{{*/
{
// Note: FileExists matches directories and links, too!
@@ -574,7 +591,20 @@ bool pkgSourceList::AddVolatileFile(std::string const &File, std::vector<std::st
return true;
}
else
- return false;
+ {
+ auto const filename = flNotDir(File);
+ auto const Target = IndexTarget(File, filename, File, "file:" + File, false, true, {
+ { "FILENAME", File },
+ { "REPO_URI", "file:" + flAbsPath(flNotFile(File)) + '/' },
+ { "COMPONENT", "volatile-packages-file" },
+ });
+ if (fileNameMatches(filename, "Packages"))
+ AddVolatileFile(new debPackagesIndex(Target, true));
+ else if (fileNameMatches(filename, "Sources"))
+ AddVolatileFile(new debSourcesIndex(Target, true));
+ else
+ return false;
+ }
if (VolatileCmdL != nullptr)
VolatileCmdL->push_back(File);
diff --git a/apt-private/private-cmndline.cc b/apt-private/private-cmndline.cc
index feb8d67a9..a890aafab 100644
--- a/apt-private/private-cmndline.cc
+++ b/apt-private/private-cmndline.cc
@@ -96,6 +96,7 @@ static bool addArgumentsAPTCache(std::vector<CommandLine::Args> &Args, char cons
addArg('p', "pkg-cache", "Dir::Cache::pkgcache", CommandLine::HasArg);
addArg('s', "src-cache", "Dir::Cache::srcpkgcache", CommandLine::HasArg);
+ addArg(0, "with-source", "APT::Sources::With::", CommandLine::HasArg);
return found_something;
}
@@ -275,6 +276,7 @@ static bool addArgumentsAPTGet(std::vector<CommandLine::Args> &Args, char const
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);
+ addArg(0, "with-source", "APT::Sources::With::", CommandLine::HasArg);
return found_something;
}
@@ -307,6 +309,7 @@ static bool addArgumentsAPTMark(std::vector<CommandLine::Args> &Args, char const
addArg('s',"dry-run","APT::Mark::Simulate",0);
addArg('s',"no-act","APT::Mark::Simulate",0);
}
+ addArg(0, "with-source", "APT::Sources::With::", CommandLine::HasArg);
return true;
}
@@ -340,6 +343,8 @@ static bool addArgumentsAPT(std::vector<CommandLine::Args> &Args, char const * c
else
return false;
+ addArg(0, "with-source", "APT::Sources::With::", CommandLine::HasArg);
+
return true;
}
/*}}}*/
diff --git a/cmdline/apt-key.in b/cmdline/apt-key.in
index 0f9118492..81314c7f5 100644
--- a/cmdline/apt-key.in
+++ b/cmdline/apt-key.in
@@ -200,8 +200,8 @@ remove_key_from_keyring() {
local FINGERPRINTS="${GPGHOMEDIR}/keyringfile.keylst"
get_fingerprints_of_keyring "$KEYRINGFILE" > "$FINGERPRINTS"
- # strip leading 0x, if present:
- KEY="${KEY#0x}"
+ # strip leading 0x, if present:
+ KEY="$(echo "${KEY#0x}" | tr -d ' ')"
# check if the key is in this keyring
if ! grep -iq "^[0-9A-F]*${KEY}$" "$FINGERPRINTS"; then
@@ -530,9 +530,11 @@ EOF
GPG_EXE="gpg"
elif command_available 'gpg2'; then
GPG_EXE="gpg2"
+ elif command_available 'gpg1'; then
+ GPG_EXE="gpg1"
else
- echo >&2 "Error: gnupg or gnupg2 do not seem to be installed,"
- echo >&2 "Error: but apt-key requires gnupg or gnupg2 for this operation."
+ echo >&2 "Error: gnupg, gnupg2 and gnupg1 do not seem to be installed,"
+ echo >&2 "Error: but apt-key requires gnupg, gnupg2 or gnupg1 for this operation."
echo >&2
exit 255
fi
@@ -639,8 +641,9 @@ case "$command" in
if [ -n "$GPGV" ] && command_available "$GPGV"; then true;
elif command_available 'gpgv'; then GPGV='gpgv';
elif command_available 'gpgv2'; then GPGV='gpgv2';
+ elif command_available 'gpgv1'; then GPGV='gpgv1';
else
- echo >&2 'ERROR: gpgv or gpgv2 required for verification'
+ echo >&2 'ERROR: gpgv, gpgv2 or gpgv1 required for verification'
exit 29
fi
# for a forced keyid we need gpg --export, so full wrapping required
diff --git a/completions/CMakeLists.txt b/completions/CMakeLists.txt
new file mode 100644
index 000000000..4ef62a892
--- /dev/null
+++ b/completions/CMakeLists.txt
@@ -0,0 +1,4 @@
+set(BASH_COMPLETION_DIR "${CMAKE_INSTALL_DATAROOTDIR}/bash-completion/completions"
+ CACHE PATH "Path to the bash-completion completions directory")
+
+install(FILES bash/apt DESTINATION ${BASH_COMPLETION_DIR})
diff --git a/debian/apt.install b/debian/apt.install
index 82b9ec6f4..a8a56c925 100644
--- a/debian/apt.install
+++ b/debian/apt.install
@@ -29,7 +29,7 @@ usr/share/man/*/*/apt-mark.*
usr/share/man/*/*/apt-secure.*
usr/share/man/*/*/sources.list.*
usr/share/man/*/*/apt_preferences.*
-completions/bash/* /usr/share/bash-completion/completions/
+usr/share/bash-completion/completions/
debian/*.service /lib/systemd/system/
debian/*.timer /lib/systemd/system/
usr/lib/apt/apt-helper
diff --git a/debian/changelog b/debian/changelog
index a69ebff45..8d2289a21 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,32 @@
+apt (1.3~rc2) unstable; urgency=medium
+
+ [ Julian Andres Klode ]
+ * debian/NEWS: Get rid of 1.3~pre3+cmake1 entry.
+ Thanks to Axel Beckert for reporting
+ * CMake: Use COPYONLY instead of @ONLY
+ * fileutl: empty file support: Avoid fstat() on -1 fd and check result
+ * Change anonscm.d.o links to /git/apt/apt.git and https
+
+ [ David Kalnischkies ]
+ * don't perform int<float in progress bar drawing
+ * ensure a good clock() value for usage and tests
+ * drop incorrect const attribute from DirectoryExists (LP: 1473674)
+ * http(s): allow empty values for header fields (Closes: 834048)
+ * don't sent Range requests if we know its not accepted
+ * don't try pipelining if server closes connections (Closes: #832113)
+ * log with the failed item description, not with next try
+ * retry without same redirection mirror on 404 errors
+ * support getting only-uncompressed files via by-hash
+ * support compression and by-hash for .diff/Index files (Closes: #824926)
+ * default to Dir=/ in dpkg/status file finding magic
+ * add the gpg-classic variant to the gpgv/gnupg or-group
+ * allow spaces in fingerprints for 'apt-key del'
+ * add --with-source option and Packages/Sources support
+ * don't count each Type as an individual deb822-sources stanza
+ * methods: read config in most to least specific order (Closes: 834642)
+
+ -- Julian Andres Klode <jak@debian.org> Wed, 17 Aug 2016 23:31:07 +0200
+
apt (1.3~rc1ubuntu2) yakkety; urgency=medium
* Don't build with -O3. See LP: #1473674.
diff --git a/debian/control b/debian/control
index 4d4dd97e5..535d3693d 100644
--- a/debian/control
+++ b/debian/control
@@ -15,15 +15,15 @@ Build-Depends: dpkg-dev (>= 1.17.14), debhelper (>= 9.20141010), libdb-dev,
Build-Depends-Indep: doxygen, w3m, graphviz
Build-Conflicts: autoconf2.13, automake1.4
Vcs-Git: https://anonscm.debian.org/git/apt/apt.git
-Vcs-Browser: https://anonscm.debian.org/cgit/apt/apt.git
+Vcs-Browser: https://anonscm.debian.org/git/apt/apt.git
Testsuite: autopkgtest
Package: apt
Architecture: any
-Depends: ${shlibs:Depends}, ${misc:Depends}, ${apt:keyring}, gpgv | gpgv2, adduser
+Depends: ${shlibs:Depends}, ${misc:Depends}, ${apt:keyring}, gpgv | gpgv2 | gpgv1, adduser
Replaces: manpages-pl (<< 20060617-3~), manpages-it (<< 2.80-4~), sun-java6-jdk (>> 0), sun-java5-jdk (>> 0), openjdk-6-jdk (<< 6b24-1.11-0ubuntu1~), bash-completion (<< 1:2.1-4.2+fakesync1), apt-utils (<< 1.3~exp2~)
Breaks: manpages-pl (<< 20060617-3~), manpages-it (<< 2.80-4~), sun-java6-jdk (>> 0), sun-java5-jdk (>> 0), openjdk-6-jdk (<< 6b24-1.11-0ubuntu1~), apt-utils (<< 1.3~exp2~)
-Recommends: gnupg | gnupg2
+Recommends: gnupg | gnupg2 | gnupg1
Suggests: aptitude | synaptic | wajig, dpkg-dev (>= 1.17.2), apt-doc, python-apt, powermgmt-base
Description: commandline package manager
This package provides commandline tools for searching and
diff --git a/debian/rules b/debian/rules
index b36db7cb8..f662944f5 100755
--- a/debian/rules
+++ b/debian/rules
@@ -13,6 +13,8 @@ export DEB_CFLAGS_MAINT_APPEND := -O2
# do not fail as we are just experimenting with symbol files for now
export DPKG_GENSYMBOLS_CHECK_LEVEL=0
+export CTEST_OUTPUT_ON_FAILURE=1
+
%:
dh $@ --with systemd --parallel --buildsystem=cmake
diff --git a/debian/tests/control b/debian/tests/control
index 406679d37..b7555dc2e 100644
--- a/debian/tests/control
+++ b/debian/tests/control
@@ -1,4 +1,5 @@
Tests: run-tests
Restrictions: allow-stderr
-Depends: @, @builddeps@, fakeroot, wget, stunnel4, lsof, db-util, gnupg, gnupg2,
+Depends: @, @builddeps@, fakeroot, wget, stunnel4, lsof, db-util,
+ gnupg, gnupg1, gpgv, gpgv1,
libfile-fcntllock-perl, python3-apt
diff --git a/doc/apt-cache.8.xml b/doc/apt-cache.8.xml
index 4e2de26bc..b8c6aa989 100644
--- a/doc/apt-cache.8.xml
+++ b/doc/apt-cache.8.xml
@@ -14,7 +14,7 @@
&apt-email;
&apt-product;
<!-- The last update date -->
- <date>2015-10-27T00:00:00Z</date>
+ <date>2016-08-16T00:00:00Z</date>
</refentryinfo>
<refmeta>
@@ -350,6 +350,21 @@ Reverse Provides:
Configuration Item: <literal>APT::Cache::Installed</literal>.</para></listitem>
</varlistentry>
+ <varlistentry><term><option>--with-source</option> <option>&synopsis-param-filename;</option></term>
+ <listitem><para>
+ Adds the given file as a source for metadata. Can be repeated to add multiple files.
+ Supported are currently <literal>*.deb</literal>, <literal>*.dsc</literal>,
+ <literal>*.changes</literal>, <literal>Sources</literal> and
+ <literal>Packages</literal> files as well as source package directories.
+ Files are matched based on their name only, not their content!</para>
+ <para><literal>Sources</literal> and <literal>Packages</literal> can be compressed in any
+ format apt supports as long as they have the correct extension. If you need to store
+ multiple of these files in one directory you can prefix a name of your choice with the
+ last character being an underscore ("<literal>_</literal>"). Example: my.example_Packages.xz</para>
+ <para>Note that these sources are treated as trusted (see &apt-secure;).
+ Configuration Item: <literal>APT::Sources::With</literal>.</para></listitem>
+ </varlistentry>
+
&apt-commonoptions;
</variablelist>
diff --git a/doc/apt-get.8.xml b/doc/apt-get.8.xml
index 20555b77e..4c34b298b 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>2016-08-06T00:00:00Z</date>
+ <date>2016-08-16T00:00:00Z</date>
</refentryinfo>
<refmeta>
@@ -577,7 +577,13 @@
README.progress-reporting in the apt doc directory.
Configuration Item: <literal>Dpkg::Progress</literal> and <literal>Dpkg::Progress-Fancy</literal>.</para></listitem>
</varlistentry>
-
+
+ <varlistentry><term><option>--with-source</option> <option>&synopsis-param-filename;</option></term>
+ <listitem><para>
+ Adds the given file as a source for metadata. Can be repeated to add multiple files.
+ See <option>--with-source</option> description in &apt-cache; for further details.
+ </para></listitem>
+ </varlistentry>
&apt-commonoptions;
diff --git a/doc/apt-verbatim.ent b/doc/apt-verbatim.ent
index 11622bbc8..2ffb4f54d 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.3~rc1ubuntu1">
+<!ENTITY apt-product-version "1.3~rc2">
<!-- (Code)names for various things used all over the place -->
<!ENTITY debian-oldstable-codename "wheezy">
diff --git a/doc/po/apt-doc.pot b/doc/po/apt-doc.pot
index eab634042..fa084c504 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.3~rc1ubuntu1\n"
+"Project-Id-Version: apt-doc 1.3~rc2\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2016-08-12 02:18+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+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,14 @@ msgid ""
"<literal>Dpkg::Progress-Fancy</literal>."
msgstr ""
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml:1
+msgid ""
+"Adds the given file as a source for metadata. Can be repeated to add "
+"multiple files. See <option>--with-source</option> description in "
+"&apt-cache; for further details."
+msgstr ""
+
#. type: Content of: <refentry><refsect1><title>
#: apt-get.8.xml:1 apt-cache.8.xml:1 apt-key.8.xml:1 apt-mark.8.xml:1
#: apt.conf.5.xml:1 apt_preferences.5.xml:1
@@ -1862,6 +1870,34 @@ msgid ""
"Configuration Item: <literal>APT::Cache::Installed</literal>."
msgstr ""
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml:1
+msgid ""
+"Adds the given file as a source for metadata. Can be repeated to add "
+"multiple files. Supported are currently <literal>*.deb</literal>, "
+"<literal>*.dsc</literal>, <literal>*.changes</literal>, "
+"<literal>Sources</literal> and <literal>Packages</literal> files as well as "
+"source package directories. Files are matched based on their name only, not "
+"their content!"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml:1
+msgid ""
+"<literal>Sources</literal> and <literal>Packages</literal> can be compressed "
+"in any format apt supports as long as they have the correct extension. If "
+"you need to store multiple of these files in one directory you can prefix a "
+"name of your choice with the last character being an underscore "
+"(\"<literal>_</literal>\"). Example: my.example_Packages.xz"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml:1
+msgid ""
+"Note that these sources are treated as trusted (see &apt-secure;). "
+"Configuration Item: <literal>APT::Sources::With</literal>."
+msgstr ""
+
#. type: Content of: <refentry><refsect1><para>
#: apt-cache.8.xml:1
msgid "&apt-conf;, &sources-list;, &apt-get;"
diff --git a/doc/po/de.po b/doc/po/de.po
index e4b15a43d..3284f8199 100644
--- a/doc/po/de.po
+++ b/doc/po/de.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt-doc 1.0.8\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2016-08-12 02:18+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+0200\n"
"PO-Revision-Date: 2014-09-14 14:46+0200\n"
"Last-Translator: Chris Leick <c.leick@vollbio.de>\n"
"Language-Team: German <debian-l10n-german@lists.debian.org>\n"
@@ -1982,6 +1982,14 @@ msgstr ""
"Konfigurationselemente: <literal>Dpkg::Progress</literal> und <literal>Dpkg::"
"Progress-Fancy</literal>."
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Adds the given file as a source for metadata. Can be repeated to add "
+"multiple files. See <option>--with-source</option> description in &apt-"
+"cache; for further details."
+msgstr ""
+
#. 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
#: apt_preferences.5.xml
@@ -2654,6 +2662,39 @@ msgstr ""
"literal> auf Pakete, die aktuell installiert sind. Konfigurationselement: "
"<literal>APT::Cache::Installed</literal>."
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Adds the given file as a source for metadata. Can be repeated to add "
+"multiple files. Supported are currently <literal>*.deb</literal>, "
+"<literal>*.dsc</literal>, <literal>*.changes</literal>, <literal>Sources</"
+"literal> and <literal>Packages</literal> files as well as source package "
+"directories. Files are matched based on their name only, not their content!"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Sources</literal> and <literal>Packages</literal> can be compressed "
+"in any format apt supports as long as they have the correct extension. If "
+"you need to store multiple of these files in one directory you can prefix a "
+"name of your choice with the last character being an underscore "
+"(\"<literal>_</literal>\"). Example: my.example_Packages.xz"
+msgstr ""
+
+#. 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 ""
+"Quellindexfeldanordnung benutzen. Konfigurationselement: <literal>APT::"
+"SortPkgs::Source</literal>."
+
#. type: Content of: <refentry><refsect1><para>
#: apt-cache.8.xml
msgid "&apt-conf;, &sources-list;, &apt-get;"
diff --git a/doc/po/es.po b/doc/po/es.po
index fd5e1edf2..0c1b02e27 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: 2016-08-12 02:18+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+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"
@@ -2055,6 +2055,14 @@ msgid ""
"literal>."
msgstr ""
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Adds the given file as a source for metadata. Can be repeated to add "
+"multiple files. See <option>--with-source</option> description in &apt-"
+"cache; for further details."
+msgstr ""
+
#. 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
#: apt_preferences.5.xml
@@ -2727,6 +2735,39 @@ msgstr ""
"a paquetes actualmente instalados. Opción de configuración: <literal>APT::"
"Cache::Installed</literal>."
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Adds the given file as a source for metadata. Can be repeated to add "
+"multiple files. Supported are currently <literal>*.deb</literal>, "
+"<literal>*.dsc</literal>, <literal>*.changes</literal>, <literal>Sources</"
+"literal> and <literal>Packages</literal> files as well as source package "
+"directories. Files are matched based on their name only, not their content!"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Sources</literal> and <literal>Packages</literal> can be compressed "
+"in any format apt supports as long as they have the correct extension. If "
+"you need to store multiple of these files in one directory you can prefix a "
+"name of your choice with the last character being an underscore "
+"(\"<literal>_</literal>\"). Example: my.example_Packages.xz"
+msgstr ""
+
+#. 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 ""
+"Utililza el orden por el campo de índice de fuentes. Opción de "
+"configuración: <literal>APT::SortPkgs::Source</literal>."
+
#. type: Content of: <refentry><refsect1><para>
#: apt-cache.8.xml
msgid "&apt-conf;, &sources-list;, &apt-get;"
diff --git a/doc/po/fr.po b/doc/po/fr.po
index 0a7e69323..f53d1a73a 100644
--- a/doc/po/fr.po
+++ b/doc/po/fr.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: 2016-08-12 02:18+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+0200\n"
"PO-Revision-Date: 2014-11-15 17:26+0100\n"
"Last-Translator: Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>\n"
"Language-Team: French <debian-l10n-french@lists.debian.org>\n"
@@ -1977,6 +1977,14 @@ msgstr ""
"configuration : <literal>Dpkg::Progress</literal> et <literal>Dpkg::Progress-"
"Fancy</literal>."
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Adds the given file as a source for metadata. Can be repeated to add "
+"multiple files. See <option>--with-source</option> description in &apt-"
+"cache; for further details."
+msgstr ""
+
#. 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
#: apt_preferences.5.xml
@@ -2653,6 +2661,39 @@ msgstr ""
"<literal>rdepends</literal> aux paquets qui sont actuellement installés. "
"Élément de configuration : <literal>APT::Cache::Installed</literal>."
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Adds the given file as a source for metadata. Can be repeated to add "
+"multiple files. Supported are currently <literal>*.deb</literal>, "
+"<literal>*.dsc</literal>, <literal>*.changes</literal>, <literal>Sources</"
+"literal> and <literal>Packages</literal> files as well as source package "
+"directories. Files are matched based on their name only, not their content!"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Sources</literal> and <literal>Packages</literal> can be compressed "
+"in any format apt supports as long as they have the correct extension. If "
+"you need to store multiple of these files in one directory you can prefix a "
+"name of your choice with the last character being an underscore "
+"(\"<literal>_</literal>\"). Example: my.example_Packages.xz"
+msgstr ""
+
+#. 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 ""
+"Utiliser un index de sources pour le tri des champs. Élément de "
+"configuration : <literal>APT::SortPkgs::Source</literal>."
+
#. type: Content of: <refentry><refsect1><para>
#: apt-cache.8.xml
msgid "&apt-conf;, &sources-list;, &apt-get;"
diff --git a/doc/po/it.po b/doc/po/it.po
index ce6badd69..7cdca80a4 100644
--- a/doc/po/it.po
+++ b/doc/po/it.po
@@ -10,7 +10,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: 2016-08-12 02:18+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+0200\n"
"PO-Revision-Date: 2015-12-27 21:26+0200\n"
"Last-Translator: Beatrice Torracca <beatricet@libero.it>\n"
"Language-Team: Italian <debian-l10n-italian@lists.debian.org>\n"
@@ -2039,6 +2039,14 @@ msgstr ""
"configurazione: <literal>Dpkg::Progress</literal> e <literal>Dpkg::Progress-"
"Fancy</literal>."
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Adds the given file as a source for metadata. Can be repeated to add "
+"multiple files. See <option>--with-source</option> description in &apt-"
+"cache; for further details."
+msgstr ""
+
#. 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
#: apt_preferences.5.xml
@@ -2682,6 +2690,39 @@ msgstr ""
"ai pacchetti attualmente installati. Voce di configurazione: <literal>APT::"
"Cache::Installed</literal>."
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Adds the given file as a source for metadata. Can be repeated to add "
+"multiple files. Supported are currently <literal>*.deb</literal>, "
+"<literal>*.dsc</literal>, <literal>*.changes</literal>, <literal>Sources</"
+"literal> and <literal>Packages</literal> files as well as source package "
+"directories. Files are matched based on their name only, not their content!"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Sources</literal> and <literal>Packages</literal> can be compressed "
+"in any format apt supports as long as they have the correct extension. If "
+"you need to store multiple of these files in one directory you can prefix a "
+"name of your choice with the last character being an underscore "
+"(\"<literal>_</literal>\"). Example: my.example_Packages.xz"
+msgstr ""
+
+#. 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>."
+
#. type: Content of: <refentry><refsect1><para>
#: apt-cache.8.xml
msgid "&apt-conf;, &sources-list;, &apt-get;"
diff --git a/doc/po/ja.po b/doc/po/ja.po
index 732c0f49d..0a8e54720 100644
--- a/doc/po/ja.po
+++ b/doc/po/ja.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt-doc 1.0.6\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2016-08-12 02:18+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+0200\n"
"PO-Revision-Date: 2016-03-23 09:39+0900\n"
"Last-Translator: Takuma Yamada <tyamada@takumayamada.com>\n"
"Language-Team: Japanese <debian-japanese@lists.debian.org>\n"
@@ -1973,6 +1973,14 @@ msgstr ""
"reporting を見てください。設定項目: <literal>Dpkg::Progress</literal>、 "
"<literal>Dpkg::Progress-Fancy</literal>"
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Adds the given file as a source for metadata. Can be repeated to add "
+"multiple files. See <option>--with-source</option> description in &apt-"
+"cache; for further details."
+msgstr ""
+
#. 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
#: apt_preferences.5.xml
@@ -2585,6 +2593,39 @@ msgstr ""
"ストールされているパッケージに限定します。設定項目: <literal>APT::Cache::"
"Installed</literal>"
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Adds the given file as a source for metadata. Can be repeated to add "
+"multiple files. Supported are currently <literal>*.deb</literal>, "
+"<literal>*.dsc</literal>, <literal>*.changes</literal>, <literal>Sources</"
+"literal> and <literal>Packages</literal> files as well as source package "
+"directories. Files are matched based on their name only, not their content!"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Sources</literal> and <literal>Packages</literal> can be compressed "
+"in any format apt supports as long as they have the correct extension. If "
+"you need to store multiple of these files in one directory you can prefix a "
+"name of your choice with the last character being an underscore "
+"(\"<literal>_</literal>\"). Example: my.example_Packages.xz"
+msgstr ""
+
+#. 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 ""
+"ソースインデックスフィールド順に並べ替えに使用します。設定項目: "
+"<literal>APT::SortPkgs::Source</literal>"
+
#. type: Content of: <refentry><refsect1><para>
#: apt-cache.8.xml
msgid "&apt-conf;, &sources-list;, &apt-get;"
diff --git a/doc/po/nl.po b/doc/po/nl.po
index 72db264f0..23ee68f2b 100644
--- a/doc/po/nl.po
+++ b/doc/po/nl.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt-doc 1.1.10-nl\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2016-08-12 02:18+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+0200\n"
"PO-Revision-Date: 2016-02-01 16:17+0100\n"
"Last-Translator: Frans Spiesschaert <Frans.Spiesschaert@yucom.be>\n"
"Language-Team: Debian Dutch l10n Team <debian-l10n-dutch@lists.debian.org>\n"
@@ -2072,6 +2072,14 @@ msgstr ""
"u README.progress-reporting raadplegen in apt's doc-map. Configuratie-item: "
"<literal>Dpkg::Progress</literal> en <literal>Dpkg::Progress-Fancy</literal>."
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Adds the given file as a source for metadata. Can be repeated to add "
+"multiple files. See <option>--with-source</option> description in &apt-"
+"cache; for further details."
+msgstr ""
+
#. 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
#: apt_preferences.5.xml
@@ -2723,6 +2731,39 @@ msgstr ""
"beperken tot pakketten die momenteel geïnstalleerd zijn. Configuratie-item: "
"<literal>APT::Cache::Installed</literal>."
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Adds the given file as a source for metadata. Can be repeated to add "
+"multiple files. Supported are currently <literal>*.deb</literal>, "
+"<literal>*.dsc</literal>, <literal>*.changes</literal>, <literal>Sources</"
+"literal> and <literal>Packages</literal> files as well as source package "
+"directories. Files are matched based on their name only, not their content!"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Sources</literal> and <literal>Packages</literal> can be compressed "
+"in any format apt supports as long as they have the correct extension. If "
+"you need to store multiple of these files in one directory you can prefix a "
+"name of your choice with the last character being an underscore "
+"(\"<literal>_</literal>\"). Example: my.example_Packages.xz"
+msgstr ""
+
+#. 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 ""
+"Veldordening gebruiken bij een broncode-index. Configuratie-item: "
+"<literal>APT::SortPkgs::Source</literal>."
+
#. type: Content of: <refentry><refsect1><para>
#: apt-cache.8.xml
msgid "&apt-conf;, &sources-list;, &apt-get;"
diff --git a/doc/po/pl.po b/doc/po/pl.po
index 30826bb39..a5f1c3f3b 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: 2016-08-12 02:18+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+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"
@@ -2053,6 +2053,14 @@ msgid ""
"literal>."
msgstr ""
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Adds the given file as a source for metadata. Can be repeated to add "
+"multiple files. See <option>--with-source</option> description in &apt-"
+"cache; for further details."
+msgstr ""
+
#. 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
#: apt_preferences.5.xml
@@ -2759,6 +2767,40 @@ msgstr ""
"literal> tylko do pakietów, które są obecnie zainstalowane. Pozycja w pliku "
"konfiguracyjnym: <literal>APT::Cache::Installed</literal>."
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Adds the given file as a source for metadata. Can be repeated to add "
+"multiple files. Supported are currently <literal>*.deb</literal>, "
+"<literal>*.dsc</literal>, <literal>*.changes</literal>, <literal>Sources</"
+"literal> and <literal>Packages</literal> files as well as source package "
+"directories. Files are matched based on their name only, not their content!"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Sources</literal> and <literal>Packages</literal> can be compressed "
+"in any format apt supports as long as they have the correct extension. If "
+"you need to store multiple of these files in one directory you can prefix a "
+"name of your choice with the last character being an underscore "
+"(\"<literal>_</literal>\"). Example: my.example_Packages.xz"
+msgstr ""
+
+#
+#. 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 ""
+"Używa kolejności pól indeksu pliku Source. Pozycja w pliku konfiguracji: "
+"<literal>APT::SortPkgs::Source</literal>."
+
#
#. type: Content of: <refentry><refsect1><para>
#: apt-cache.8.xml
diff --git a/doc/po/pt.po b/doc/po/pt.po
index b85863b17..35a004286 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: 2016-08-12 02:18+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+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"
@@ -1999,6 +1999,14 @@ msgstr ""
"reporting no directório doc do apt. Item de Configuração: <literal>Dpkg::"
"Progress</literal> e <literal>Dpkg::Progress-Fancy</literal>."
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Adds the given file as a source for metadata. Can be repeated to add "
+"multiple files. See <option>--with-source</option> description in &apt-"
+"cache; for further details."
+msgstr ""
+
#. 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
#: apt_preferences.5.xml
@@ -2665,6 +2673,39 @@ msgstr ""
"aos pacotes que estão actualmente instalados. Item de Configuração: "
"<literal>APT::Cache::Installed</literal>."
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Adds the given file as a source for metadata. Can be repeated to add "
+"multiple files. Supported are currently <literal>*.deb</literal>, "
+"<literal>*.dsc</literal>, <literal>*.changes</literal>, <literal>Sources</"
+"literal> and <literal>Packages</literal> files as well as source package "
+"directories. Files are matched based on their name only, not their content!"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Sources</literal> and <literal>Packages</literal> can be compressed "
+"in any format apt supports as long as they have the correct extension. If "
+"you need to store multiple of these files in one directory you can prefix a "
+"name of your choice with the last character being an underscore "
+"(\"<literal>_</literal>\"). Example: my.example_Packages.xz"
+msgstr ""
+
+#. 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 ordenação de campo de índice Source. Item de Configuração: <literal>APT::"
+"SortPkgs::Source</literal>."
+
#. type: Content of: <refentry><refsect1><para>
#: apt-cache.8.xml
msgid "&apt-conf;, &sources-list;, &apt-get;"
diff --git a/doc/po/pt_BR.po b/doc/po/pt_BR.po
index ee7547557..9d3ea426b 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: 2016-08-12 02:18+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+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"
@@ -1392,6 +1392,14 @@ msgid ""
"literal>."
msgstr ""
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Adds the given file as a source for metadata. Can be repeated to add "
+"multiple files. See <option>--with-source</option> description in &apt-"
+"cache; for further details."
+msgstr ""
+
#. 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
#: apt_preferences.5.xml
@@ -1841,6 +1849,33 @@ msgid ""
"<literal>APT::Cache::Installed</literal>."
msgstr ""
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Adds the given file as a source for metadata. Can be repeated to add "
+"multiple files. Supported are currently <literal>*.deb</literal>, "
+"<literal>*.dsc</literal>, <literal>*.changes</literal>, <literal>Sources</"
+"literal> and <literal>Packages</literal> files as well as source package "
+"directories. Files are matched based on their name only, not their content!"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Sources</literal> and <literal>Packages</literal> can be compressed "
+"in any format apt supports as long as they have the correct extension. If "
+"you need to store multiple of these files in one directory you can prefix a "
+"name of your choice with the last character being an underscore "
+"(\"<literal>_</literal>\"). Example: my.example_Packages.xz"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Note that these sources are treated as trusted (see &apt-secure;). "
+"Configuration Item: <literal>APT::Sources::With</literal>."
+msgstr ""
+
#. type: Content of: <refentry><refsect1><para>
#: apt-cache.8.xml
msgid "&apt-conf;, &sources-list;, &apt-get;"
diff --git a/ftparchive/writer.cc b/ftparchive/writer.cc
index c34a04d1a..018cf0052 100644
--- a/ftparchive/writer.cc
+++ b/ftparchive/writer.cc
@@ -992,6 +992,7 @@ ReleaseWriter::ReleaseWriter(FileFd * const GivenOutput, string const &/*DB*/) :
AddPattern("Release");
AddPattern("Contents-*");
AddPattern("Index");
+ AddPattern("Index.*");
AddPattern("icons-*.tar");
AddPattern("icons-*.tar.*");
AddPattern("Components-*.yml");
diff --git a/methods/aptmethod.h b/methods/aptmethod.h
index 38f451708..04c4fa99b 100644
--- a/methods/aptmethod.h
+++ b/methods/aptmethod.h
@@ -86,10 +86,10 @@ public:
}
std::string ConfigFind(char const * const postfix, std::string const &defValue) const APT_NONNULL(2)
{
- for (auto && name: methodNames)
+ for (auto name = methodNames.rbegin(); name != methodNames.rend(); ++name)
{
std::string conf;
- strprintf(conf, "Acquire::%s::%s", name.c_str(), postfix);
+ strprintf(conf, "Acquire::%s::%s", name->c_str(), postfix);
auto const value = _config->Find(conf);
if (value.empty() == false)
return value;
diff --git a/methods/http.cc b/methods/http.cc
index 0358b50cd..11136bb9a 100644
--- a/methods/http.cc
+++ b/methods/http.cc
@@ -647,6 +647,13 @@ bool HttpServerState::InitHashes(HashStringList const &ExpectedHashes) /*{{{*/
return true;
}
/*}}}*/
+void HttpServerState::Reset(bool const Everything) /*{{{*/
+{
+ ServerState::Reset(Everything);
+ if (Everything)
+ ServerFd = -1;
+}
+ /*}}}*/
APT_PURE Hashes * HttpServerState::GetHashes() /*{{{*/
{
@@ -899,7 +906,7 @@ void HttpMethod::SendReq(FetchItem *Itm)
// Check for a partial file and send if-queries accordingly
struct stat SBuf;
- if (stat(Itm->DestFile.c_str(),&SBuf) >= 0 && SBuf.st_size > 0)
+ if (Server->RangesAllowed && stat(Itm->DestFile.c_str(),&SBuf) >= 0 && SBuf.st_size > 0)
Req << "Range: bytes=" << std::to_string(SBuf.st_size) << "-\r\n"
<< "If-Range: " << TimeRFC1123(SBuf.st_mtime, false) << "\r\n";
else if (Itm->LastModified != 0)
diff --git a/methods/http.h b/methods/http.h
index 644e576f0..b7341f5f8 100644
--- a/methods/http.h
+++ b/methods/http.h
@@ -103,7 +103,7 @@ struct HttpServerState: public ServerState
virtual bool WriteResponse(std::string const &Data) APT_OVERRIDE;
public:
- virtual void Reset() APT_OVERRIDE { ServerState::Reset(); ServerFd = -1; };
+ virtual void Reset(bool const Everything = true) APT_OVERRIDE;
virtual bool RunData(FileFd * const File) APT_OVERRIDE;
virtual bool RunDataToDevNull() APT_OVERRIDE;
diff --git a/methods/https.cc b/methods/https.cc
index 283126f6b..b2d05136c 100644
--- a/methods/https.cc
+++ b/methods/https.cc
@@ -382,8 +382,15 @@ bool HttpsMethod::Fetch(FetchItem *Itm)
headers = curl_slist_append(headers, "Accept: text/*");
}
+ // go for it - if the file exists, append on it
+ File = new FileFd(Itm->DestFile, FileFd::WriteAny);
+ if (Server == nullptr || Server->Comp(Itm->Uri) == false)
+ Server = CreateServerState(Itm->Uri);
+ else
+ Server->Reset(false);
+
// if we have the file send an if-range query with a range header
- if (stat(Itm->DestFile.c_str(),&SBuf) >= 0 && SBuf.st_size > 0)
+ if (Server->RangesAllowed && stat(Itm->DestFile.c_str(),&SBuf) >= 0 && SBuf.st_size > 0)
{
std::string Buf;
strprintf(Buf, "Range: bytes=%lli-", (long long) SBuf.st_size);
@@ -397,9 +404,6 @@ bool HttpsMethod::Fetch(FetchItem *Itm)
curl_easy_setopt(curl, CURLOPT_TIMEVALUE, Itm->LastModified);
}
- // go for it - if the file exists, append on it
- File = new FileFd(Itm->DestFile, FileFd::WriteAny);
- Server = CreateServerState(Itm->Uri);
if (Server->InitHashes(Itm->ExpectedHashes) == false)
return false;
diff --git a/methods/server.cc b/methods/server.cc
index 0888617b1..af7276bad 100644
--- a/methods/server.cc
+++ b/methods/server.cc
@@ -46,20 +46,9 @@ time_t ServerMethod::FailTime = 0;
ServerState::RunHeadersResult ServerState::RunHeaders(FileFd * const File,
const std::string &Uri)
{
- State = Header;
-
+ Reset(false);
Owner->Status(_("Waiting for headers"));
- Major = 0;
- Minor = 0;
- Result = 0;
- TotalFileSize = 0;
- JunkSize = 0;
- StartPos = 0;
- Encoding = Closes;
- HaveContent = false;
- time(&Date);
-
do
{
string Data;
@@ -101,25 +90,7 @@ bool ServerState::HeaderLine(string Line)
if (Line.empty() == true)
return true;
- string::size_type Pos = Line.find(' ');
- if (Pos == string::npos || Pos+1 > Line.length())
- {
- // Blah, some servers use "connection:closes", evil.
- Pos = Line.find(':');
- if (Pos == string::npos || Pos + 2 > Line.length())
- return _error->Error(_("Bad header line"));
- Pos++;
- }
-
- // Parse off any trailing spaces between the : and the next word.
- string::size_type Pos2 = Pos;
- while (Pos2 < Line.length() && isspace_ascii(Line[Pos2]) != 0)
- Pos2++;
-
- string Tag = string(Line,0,Pos);
- string Val = string(Line,Pos2);
-
- if (stringcasecmp(Tag.c_str(),Tag.c_str()+4,"HTTP") == 0)
+ if (Line.size() > 4 && stringcasecmp(Line.data(), Line.data()+4, "HTTP") == 0)
{
// Evil servers return no version
if (Line[4] == '/')
@@ -163,6 +134,21 @@ bool ServerState::HeaderLine(string Line)
return true;
}
+ // Blah, some servers use "connection:closes", evil.
+ // and some even send empty header fields…
+ string::size_type Pos = Line.find(':');
+ if (Pos == string::npos)
+ return _error->Error(_("Bad header line"));
+ ++Pos;
+
+ // Parse off any trailing spaces between the : and the next word.
+ string::size_type Pos2 = Pos;
+ while (Pos2 < Line.length() && isspace_ascii(Line[Pos2]) != 0)
+ Pos2++;
+
+ string const Tag(Line,0,Pos);
+ string const Val(Line,Pos2);
+
if (stringcasecmp(Tag,"Content-Length:") == 0)
{
if (Encoding == Closes)
@@ -222,8 +208,16 @@ bool ServerState::HeaderLine(string Line)
if (stringcasecmp(Tag,"Connection:") == 0)
{
if (stringcasecmp(Val,"close") == 0)
+ {
Persistent = false;
- if (stringcasecmp(Val,"keep-alive") == 0)
+ Pipeline = false;
+ /* Some servers send error pages (as they are dynamically generated)
+ for simplicity via a connection close instead of e.g. chunked,
+ so assuming an always closing server only if we get a file + close */
+ if (Result >= 200 && Result < 300)
+ PipelineAllowed = false;
+ }
+ else if (stringcasecmp(Val,"keep-alive") == 0)
Persistent = true;
return true;
}
@@ -241,6 +235,15 @@ bool ServerState::HeaderLine(string Line)
return true;
}
+ if (stringcasecmp(Tag, "Accept-Ranges:") == 0)
+ {
+ std::string ranges = ',' + Val + ',';
+ ranges.erase(std::remove(ranges.begin(), ranges.end(), ' '), ranges.end());
+ if (ranges.find(",bytes,") == std::string::npos)
+ RangesAllowed = false;
+ return true;
+ }
+
return true;
}
/*}}}*/
@@ -257,6 +260,19 @@ bool ServerState::AddPartialFileToHashes(FileFd &File) /*{{{*/
return GetHashes()->AddFD(File, StartPos);
}
/*}}}*/
+void ServerState::Reset(bool const Everything) /*{{{*/
+{
+ Major = 0; Minor = 0; Result = 0; Code[0] = '\0';
+ TotalFileSize = 0; JunkSize = 0; StartPos = 0;
+ Encoding = Closes; time(&Date); HaveContent = false;
+ State = Header; MaximumSize = 0;
+ if (Everything)
+ {
+ Persistent = false; Pipeline = false; PipelineAllowed = true;
+ RangesAllowed = true;
+ }
+}
+ /*}}}*/
// ServerMethod::DealWithHeaders - Handle the retrieved header data /*{{{*/
// ---------------------------------------------------------------------
diff --git a/methods/server.h b/methods/server.h
index 1d114354f..c3adba87a 100644
--- a/methods/server.h
+++ b/methods/server.h
@@ -51,6 +51,7 @@ struct ServerState
enum {Header, Data} State;
bool Persistent;
bool PipelineAllowed;
+ bool RangesAllowed;
std::string Location;
// This is a Persistent attribute of the server itself.
@@ -84,9 +85,7 @@ struct ServerState
bool AddPartialFileToHashes(FileFd &File);
bool Comp(URI Other) const {return Other.Host == ServerName.Host && Other.Port == ServerName.Port;};
- virtual void Reset() {Major = 0; Minor = 0; Result = 0; Code[0] = '\0'; TotalFileSize = 0; JunkSize = 0;
- StartPos = 0; Encoding = Closes; time(&Date); HaveContent = false;
- State = Header; Persistent = false; Pipeline = false; MaximumSize = 0; PipelineAllowed = true;};
+ virtual void Reset(bool const Everything = true);
virtual bool WriteResponse(std::string const &Data) = 0;
/** \brief Transfer the data from the socket */
diff --git a/po/apt-all.pot b/po/apt-all.pot
index 6c1ace15f..3246191cf 100644
--- a/po/apt-all.pot
+++ b/po/apt-all.pot
@@ -5,9 +5,9 @@
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: apt 1.3~rc1ubuntu1\n"
+"Project-Id-Version: apt 1.3~rc2\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2016-08-12 01:40+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+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"
@@ -3511,11 +3511,11 @@ msgid "Waiting for headers"
msgstr ""
#: methods/server.cc
-msgid "Bad header line"
+msgid "The HTTP server sent an invalid reply header"
msgstr ""
#: methods/server.cc
-msgid "The HTTP server sent an invalid reply header"
+msgid "Bad header line"
msgstr ""
#: methods/server.cc
diff --git a/po/ar.po b/po/ar.po
index 628273c2f..3e22a25ba 100644
--- a/po/ar.po
+++ b/po/ar.po
@@ -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: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+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"
@@ -3573,14 +3573,14 @@ msgid "Waiting for headers"
msgstr "بانتظار الترويسات"
#: methods/server.cc
-msgid "Bad header line"
-msgstr "سطر ترويسة سيء"
-
-#: methods/server.cc
msgid "The HTTP server sent an invalid reply header"
msgstr "أرسل خادم http ترويسة ردّ غير صالحة"
#: methods/server.cc
+msgid "Bad header line"
+msgstr "سطر ترويسة سيء"
+
+#: methods/server.cc
msgid "The HTTP server sent an invalid Content-Length header"
msgstr "أرسل خادم http ترويسة طول محتويات (ِContent-Length) غير صالحة"
diff --git a/po/ast.po b/po/ast.po
index 3c85159bd..3b644c682 100644
--- a/po/ast.po
+++ b/po/ast.po
@@ -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: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+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"
@@ -3739,14 +3739,14 @@ msgid "Waiting for headers"
msgstr "Esperando les testeres"
#: methods/server.cc
-msgid "Bad header line"
-msgstr "Fallu na llinia testera"
-
-#: methods/server.cc
msgid "The HTTP server sent an invalid reply header"
msgstr "El sirvidor HTTP mandó una testera incorreuta de rempuesta"
#: methods/server.cc
+msgid "Bad header line"
+msgstr "Fallu na llinia testera"
+
+#: methods/server.cc
msgid "The HTTP server sent an invalid Content-Length header"
msgstr "El sirvidor HTTP mandó una testera incorreuta de Content-Length"
diff --git a/po/bg.po b/po/bg.po
index 97abdfeee..8d3c5af80 100644
--- a/po/bg.po
+++ b/po/bg.po
@@ -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: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+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"
@@ -3788,14 +3788,14 @@ msgid "Waiting for headers"
msgstr "Чакане на заглавни части"
#: methods/server.cc
-msgid "Bad header line"
-msgstr "Невалиден ред на заглавна част"
-
-#: methods/server.cc
msgid "The HTTP server sent an invalid reply header"
msgstr "HTTP сървърът изпрати невалидна заглавна част като отговор"
#: methods/server.cc
+msgid "Bad header line"
+msgstr "Невалиден ред на заглавна част"
+
+#: methods/server.cc
msgid "The HTTP server sent an invalid Content-Length header"
msgstr "HTTP сървърът изпрати невалидна заглавна част „Content-Length“"
diff --git a/po/bs.po b/po/bs.po
index 7f5c334b8..4f5f59995 100644
--- a/po/bs.po
+++ b/po/bs.po
@@ -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: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+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"
@@ -3556,11 +3556,11 @@ msgid "Waiting for headers"
msgstr "Čekam na zaglavlja"
#: methods/server.cc
-msgid "Bad header line"
+msgid "The HTTP server sent an invalid reply header"
msgstr ""
#: methods/server.cc
-msgid "The HTTP server sent an invalid reply header"
+msgid "Bad header line"
msgstr ""
#: methods/server.cc
diff --git a/po/ca.po b/po/ca.po
index e171b0c18..792723c6b 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 0.9.7.6\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+0200\n"
"PO-Revision-Date: 2012-10-19 13:30+0200\n"
"Last-Translator: Jordi Mallach <jordi@debian.org>\n"
"Language-Team: Catalan <debian-l10n-catalan@lists.debian.org>\n"
@@ -3788,14 +3788,14 @@ msgid "Waiting for headers"
msgstr "S'estan esperant les capçaleres"
#: methods/server.cc
-msgid "Bad header line"
-msgstr "Línia de capçalera incorrecta"
-
-#: methods/server.cc
msgid "The HTTP server sent an invalid reply header"
msgstr "El servidor HTTP ha enviat una capçalera de resposta no vàlida"
#: methods/server.cc
+msgid "Bad header line"
+msgstr "Línia de capçalera incorrecta"
+
+#: methods/server.cc
msgid "The HTTP server sent an invalid Content-Length header"
msgstr "El servidor HTTP ha enviat una capçalera de Content-Length no vàlida"
diff --git a/po/cs.po b/po/cs.po
index 474cc1c6c..845e42e55 100644
--- a/po/cs.po
+++ b/po/cs.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: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+0200\n"
"PO-Revision-Date: 2015-08-29 15:24+0200\n"
"Last-Translator: Miroslav Kure <kurem@debian.cz>\n"
"Language-Team: Czech <debian-l10n-czech@lists.debian.org>\n"
@@ -3741,14 +3741,14 @@ msgid "Waiting for headers"
msgstr "Čeká se na hlavičky"
#: methods/server.cc
-msgid "Bad header line"
-msgstr "Chybná hlavička"
-
-#: methods/server.cc
msgid "The HTTP server sent an invalid reply header"
msgstr "Http server poslal neplatnou hlavičku odpovědi"
#: methods/server.cc
+msgid "Bad header line"
+msgstr "Chybná hlavička"
+
+#: methods/server.cc
msgid "The HTTP server sent an invalid Content-Length header"
msgstr "Http server poslal neplatnou hlavičku Content-Length"
diff --git a/po/cy.po b/po/cy.po
index 0f9a06986..cd519b8e9 100644
--- a/po/cy.po
+++ b/po/cy.po
@@ -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: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+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"
@@ -3764,15 +3764,15 @@ msgid "Waiting for headers"
msgstr "Yn aros am benawdau"
#: methods/server.cc
-msgid "Bad header line"
-msgstr "Llinell pennawd gwael"
-
-#: methods/server.cc
#, fuzzy
msgid "The HTTP server sent an invalid reply header"
msgstr "Danfonodd y gweinydd HTTP bennawd ateb annilys"
#: methods/server.cc
+msgid "Bad header line"
+msgstr "Llinell pennawd gwael"
+
+#: methods/server.cc
#, fuzzy
msgid "The HTTP server sent an invalid Content-Length header"
msgstr "Danfonodd y gweinydd HTTP bennawd Content-Length annilys"
diff --git a/po/da.po b/po/da.po
index 2afb8323e..a8fe76975 100644
--- a/po/da.po
+++ b/po/da.po
@@ -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: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+0200\n"
"PO-Revision-Date: 2014-07-06 23:51+0200\n"
"Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
"Language-Team: Danish <debian-l10n-danish@lists.debian.org>\n"
@@ -3757,14 +3757,14 @@ msgid "Waiting for headers"
msgstr "Afventer hoveder"
#: methods/server.cc
-msgid "Bad header line"
-msgstr "Ugyldig linje i hovedet"
-
-#: methods/server.cc
msgid "The HTTP server sent an invalid reply header"
msgstr "Http-serveren sendte et ugyldigt svarhovede"
#: methods/server.cc
+msgid "Bad header line"
+msgstr "Ugyldig linje i hovedet"
+
+#: methods/server.cc
msgid "The HTTP server sent an invalid Content-Length header"
msgstr "Http-serveren sendte et ugyldigt Content-Length-hovede"
diff --git a/po/de.po b/po/de.po
index 9720e7d74..f4cb6de46 100644
--- a/po/de.po
+++ b/po/de.po
@@ -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: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+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"
@@ -3866,14 +3866,14 @@ msgid "Waiting for headers"
msgstr "Warten auf Kopfzeilen"
#: methods/server.cc
-msgid "Bad header line"
-msgstr "Ungültige Kopfzeile"
-
-#: methods/server.cc
msgid "The HTTP server sent an invalid reply header"
msgstr "Vom HTTP-Server wurde eine ungültige Antwort-Kopfzeile gesandt."
#: methods/server.cc
+msgid "Bad header line"
+msgstr "Ungültige Kopfzeile"
+
+#: methods/server.cc
msgid "The HTTP server sent an invalid Content-Length header"
msgstr ""
"Vom HTTP-Server wurde eine ungültige »Content-Length«-Kopfzeile gesandt."
diff --git a/po/dz.po b/po/dz.po
index edbe84834..604b9b842 100644
--- a/po/dz.po
+++ b/po/dz.po
@@ -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: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+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"
@@ -3712,14 +3712,14 @@ msgid "Waiting for headers"
msgstr "མགོ་ཡིག་ཚུ་གི་དོན་ལུ་བསྒ྄ག་དོ།"
#: methods/server.cc
-msgid "Bad header line"
-msgstr "མགོ་ཡིག་གི་གྲལ་ཐིག་བྱང་ཉེས།"
-
-#: methods/server.cc
msgid "The HTTP server sent an invalid reply header"
msgstr "ཨེཆི་ཊི་ཊི་པི་ སར་བར་འདི་གིས་ནུས་མེད་ལན་གསལ་གི་མགོ་ཡིག་ཅིག་བཏང་ཡོད།"
#: methods/server.cc
+msgid "Bad header line"
+msgstr "མགོ་ཡིག་གི་གྲལ་ཐིག་བྱང་ཉེས།"
+
+#: methods/server.cc
msgid "The HTTP server sent an invalid Content-Length header"
msgstr "ཨེཆི་ཊི་ཊི་པི་སར་བར་འདི་གིས་ནུས་མེད་ནང་དོན་རིང་-ཚད་ཀྱི་མགོ་ཡིག་ཅིག་བཏང་ཡོད།"
diff --git a/po/el.po b/po/el.po
index 2de3090ab..52393d61c 100644
--- a/po/el.po
+++ b/po/el.po
@@ -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: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+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"
@@ -3741,14 +3741,14 @@ msgid "Waiting for headers"
msgstr "Αναμονή επικεφαλίδων"
#: methods/server.cc
-msgid "Bad header line"
-msgstr "Ελαττωματική γραμμή επικεφαλίδας"
-
-#: methods/server.cc
msgid "The HTTP server sent an invalid reply header"
msgstr "Ο διακομιστής http έστειλε μια άκυρη επικεφαλίδα απάντησης"
#: methods/server.cc
+msgid "Bad header line"
+msgstr "Ελαττωματική γραμμή επικεφαλίδας"
+
+#: methods/server.cc
msgid "The HTTP server sent an invalid Content-Length header"
msgstr "Ο διακομιστής http έστειλε μια άκυρη επικεφαλίδα Content-Length"
diff --git a/po/es.po b/po/es.po
index 09cc5a54d..9643ecded 100644
--- a/po/es.po
+++ b/po/es.po
@@ -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: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+0200\n"
"PO-Revision-Date: 2016-01-26 01:51+0100\n"
"Last-Translator: Manuel \"Venturi\" Porras Peralta <venturi@openmailbox."
"org>\n"
@@ -3922,14 +3922,14 @@ msgid "Waiting for headers"
msgstr "Esperando las cabeceras"
#: methods/server.cc
-msgid "Bad header line"
-msgstr "Línea de cabecera incorrecta"
-
-#: methods/server.cc
msgid "The HTTP server sent an invalid reply header"
msgstr "El servidor de http envió una cabecera de respuesta inválida"
#: methods/server.cc
+msgid "Bad header line"
+msgstr "Línea de cabecera incorrecta"
+
+#: methods/server.cc
msgid "The HTTP server sent an invalid Content-Length header"
msgstr "El servidor de http envió una cabecera de «Content-Length» inválida"
diff --git a/po/eu.po b/po/eu.po
index a58a72bbc..b98343774 100644
--- a/po/eu.po
+++ b/po/eu.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: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+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"
@@ -3708,14 +3708,14 @@ msgid "Waiting for headers"
msgstr "Goiburuen zain"
#: methods/server.cc
-msgid "Bad header line"
-msgstr "Okerreko goiburu-lerroa"
-
-#: methods/server.cc
msgid "The HTTP server sent an invalid reply header"
msgstr "http zerbitzariak erantzun goiburu baliogabe bat bidali du."
#: methods/server.cc
+msgid "Bad header line"
+msgstr "Okerreko goiburu-lerroa"
+
+#: methods/server.cc
msgid "The HTTP server sent an invalid Content-Length header"
msgstr "http zerbitzariak Content-Length buru baliogabe bat bidali du"
diff --git a/po/fi.po b/po/fi.po
index 3ab555c0a..87df7fe3f 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -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: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+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"
@@ -3700,14 +3700,14 @@ msgid "Waiting for headers"
msgstr "Odotetaan otsikoita"
#: methods/server.cc
-msgid "Bad header line"
-msgstr "Virheellinen otsikkorivi"
-
-#: methods/server.cc
msgid "The HTTP server sent an invalid reply header"
msgstr "HTTP-palvelin lähetti virheellisen vastausotsikon"
#: methods/server.cc
+msgid "Bad header line"
+msgstr "Virheellinen otsikkorivi"
+
+#: methods/server.cc
msgid "The HTTP server sent an invalid Content-Length header"
msgstr "HTTP-palvelin lähetti virheellisen Content-Length-otsikon"
diff --git a/po/fr.po b/po/fr.po
index 3d7353f6f..1734acf55 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -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: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+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"
@@ -3854,14 +3854,14 @@ msgid "Waiting for headers"
msgstr "Attente des fichiers d'en-tête"
#: methods/server.cc
-msgid "Bad header line"
-msgstr "Mauvaise ligne d'en-tête"
-
-#: methods/server.cc
msgid "The HTTP server sent an invalid reply header"
msgstr "Le serveur http a envoyé une réponse dont l'en-tête est invalide"
#: methods/server.cc
+msgid "Bad header line"
+msgstr "Mauvaise ligne d'en-tête"
+
+#: methods/server.cc
msgid "The HTTP server sent an invalid Content-Length header"
msgstr "Le serveur http a envoyé un en-tête « Content-Length » invalide"
diff --git a/po/gl.po b/po/gl.po
index bfe7e8a56..4bed4543c 100644
--- a/po/gl.po
+++ b/po/gl.po
@@ -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: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+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"
@@ -3775,14 +3775,14 @@ msgid "Waiting for headers"
msgstr "Agardando polas cabeceiras"
#: methods/server.cc
-msgid "Bad header line"
-msgstr "Liña de cabeceira incorrecta"
-
-#: methods/server.cc
msgid "The HTTP server sent an invalid reply header"
msgstr "O servidor HTTP enviou unha cabeceira de resposta incorrecta"
#: methods/server.cc
+msgid "Bad header line"
+msgstr "Liña de cabeceira incorrecta"
+
+#: methods/server.cc
msgid "The HTTP server sent an invalid Content-Length header"
msgstr ""
"O servidor HTTP enviou unha cabeceira cunha lonxitude de contido incorrecta"
diff --git a/po/hu.po b/po/hu.po
index de507d65e..c8e64820e 100644
--- a/po/hu.po
+++ b/po/hu.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: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+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"
@@ -3820,14 +3820,14 @@ msgid "Waiting for headers"
msgstr "Várakozás a fejlécekre"
#: methods/server.cc
-msgid "Bad header line"
-msgstr "Rossz fejlécsor"
-
-#: methods/server.cc
msgid "The HTTP server sent an invalid reply header"
msgstr "A HTTP-kiszolgáló érvénytelen válaszfejlécet küldött"
#: methods/server.cc
+msgid "Bad header line"
+msgstr "Rossz fejlécsor"
+
+#: methods/server.cc
msgid "The HTTP server sent an invalid Content-Length header"
msgstr "A HTTP-kiszolgáló érvénytelen Content-Length fejlécet küldött"
diff --git a/po/it.po b/po/it.po
index 58ea6868a..7592baa45 100644
--- a/po/it.po
+++ b/po/it.po
@@ -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: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+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"
@@ -3828,14 +3828,14 @@ msgid "Waiting for headers"
msgstr "In attesa degli header"
#: methods/server.cc
-msgid "Bad header line"
-msgstr "Riga header non corretta"
-
-#: methods/server.cc
msgid "The HTTP server sent an invalid reply header"
msgstr "Il server HTTP ha inviato un header di risposta non valido"
#: methods/server.cc
+msgid "Bad header line"
+msgstr "Riga header non corretta"
+
+#: methods/server.cc
msgid "The HTTP server sent an invalid Content-Length header"
msgstr "Il server HTTP ha inviato un header Content-Length non valido"
diff --git a/po/ja.po b/po/ja.po
index d8ab0a823..421ff137d 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 1.0.9.3\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+0200\n"
"PO-Revision-Date: 2016-05-18 15:31+0900\n"
"Last-Translator: Takuma Yamada <tyamada@takumayamada.com>\n"
"Language-Team: Japanese <debian-japanese@lists.debian.org>\n"
@@ -3811,14 +3811,14 @@ msgid "Waiting for headers"
msgstr "ヘッダの待機中です"
#: methods/server.cc
-msgid "Bad header line"
-msgstr "不正なヘッダ行です"
-
-#: methods/server.cc
msgid "The HTTP server sent an invalid reply header"
msgstr "HTTP サーバが不正なリプライヘッダを送信してきました"
#: methods/server.cc
+msgid "Bad header line"
+msgstr "不正なヘッダ行です"
+
+#: methods/server.cc
msgid "The HTTP server sent an invalid Content-Length header"
msgstr "HTTP サーバが不正な Content-Length ヘッダを送信してきました"
diff --git a/po/km.po b/po/km.po
index 3734e0679..7f705faaf 100644
--- a/po/km.po
+++ b/po/km.po
@@ -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: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+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"
@@ -3681,14 +3681,14 @@ msgid "Waiting for headers"
msgstr "កំពុង​រង់ចាំ​បឋមកថា"
#: methods/server.cc
-msgid "Bad header line"
-msgstr "ជួរ​បឋមកថា​ខូច​"
-
-#: methods/server.cc
msgid "The HTTP server sent an invalid reply header"
msgstr "ម៉ាស៊ីន​បម្រើ​ HTTP បានផ្ញើបឋមកថាចម្លើយតបមិនត្រឹមត្រូវ"
#: methods/server.cc
+msgid "Bad header line"
+msgstr "ជួរ​បឋមកថា​ខូច​"
+
+#: methods/server.cc
msgid "The HTTP server sent an invalid Content-Length header"
msgstr "ម៉ាស៊ីន​បម្រើ​ HTTP បានផ្ញើ​​បឋមកថាប្រវែង​​​មាតិកា​មិនត្រឹមត្រូវ​"
diff --git a/po/ko.po b/po/ko.po
index b1399cc79..3056850d0 100644
--- a/po/ko.po
+++ b/po/ko.po
@@ -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: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+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"
@@ -3696,14 +3696,14 @@ msgid "Waiting for headers"
msgstr "헤더를 기다리는 중입니다"
#: methods/server.cc
-msgid "Bad header line"
-msgstr "헤더 줄이 잘못되었습니다"
-
-#: methods/server.cc
msgid "The HTTP server sent an invalid reply header"
msgstr "HTTP 서버에서 잘못된 응답 헤더를 보냈습니다"
#: methods/server.cc
+msgid "Bad header line"
+msgstr "헤더 줄이 잘못되었습니다"
+
+#: methods/server.cc
msgid "The HTTP server sent an invalid Content-Length header"
msgstr "HTTP 서버에서 잘못된 Content-Length 헤더를 보냈습니다"
diff --git a/po/ku.po b/po/ku.po
index d99dc126b..b2b54de28 100644
--- a/po/ku.po
+++ b/po/ku.po
@@ -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: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+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"
@@ -3582,11 +3582,11 @@ msgid "Waiting for headers"
msgstr ""
#: methods/server.cc
-msgid "Bad header line"
+msgid "The HTTP server sent an invalid reply header"
msgstr ""
#: methods/server.cc
-msgid "The HTTP server sent an invalid reply header"
+msgid "Bad header line"
msgstr ""
#: methods/server.cc
diff --git a/po/lt.po b/po/lt.po
index e08b8ee17..854ec5a4e 100644
--- a/po/lt.po
+++ b/po/lt.po
@@ -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: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+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"
@@ -3675,11 +3675,11 @@ msgid "Waiting for headers"
msgstr "Laukiama antraščių"
#: methods/server.cc
-msgid "Bad header line"
+msgid "The HTTP server sent an invalid reply header"
msgstr ""
#: methods/server.cc
-msgid "The HTTP server sent an invalid reply header"
+msgid "Bad header line"
msgstr ""
#: methods/server.cc
diff --git a/po/mr.po b/po/mr.po
index 94f17661d..996f73792 100644
--- a/po/mr.po
+++ b/po/mr.po
@@ -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: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+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 "
@@ -3684,14 +3684,14 @@ msgid "Waiting for headers"
msgstr "शीर्षकासाठी थांबले आहे...."
#: methods/server.cc
-msgid "Bad header line"
-msgstr "वाईट शीर्षक ओळ"
-
-#: methods/server.cc
msgid "The HTTP server sent an invalid reply header"
msgstr "HTTP सर्व्हरने अवैध प्रत्त्युत्तर शीर्षक पाठविले"
#: methods/server.cc
+msgid "Bad header line"
+msgstr "वाईट शीर्षक ओळ"
+
+#: methods/server.cc
msgid "The HTTP server sent an invalid Content-Length header"
msgstr "HTTP सर्व्हरने अवैध मजकूर-लांबी शीर्षक पाठविले "
diff --git a/po/nb.po b/po/nb.po
index e6cd4382b..40ec2bfa9 100644
--- a/po/nb.po
+++ b/po/nb.po
@@ -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: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+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"
@@ -3754,14 +3754,14 @@ msgid "Waiting for headers"
msgstr "Venter på hoder"
#: methods/server.cc
-msgid "Bad header line"
-msgstr "Ødelagt hodelinje"
-
-#: methods/server.cc
msgid "The HTTP server sent an invalid reply header"
msgstr "HTTP-tjeneren sendte et ugyldig svarhode"
#: methods/server.cc
+msgid "Bad header line"
+msgstr "Ødelagt hodelinje"
+
+#: methods/server.cc
msgid "The HTTP server sent an invalid Content-Length header"
msgstr "HTTP-tjeneren sendte et ugyldig «Content-Length»-hode"
diff --git a/po/ne.po b/po/ne.po
index 4857f5840..430a157d5 100644
--- a/po/ne.po
+++ b/po/ne.po
@@ -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: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+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"
@@ -3681,14 +3681,14 @@ msgid "Waiting for headers"
msgstr "हेडरहरुको लागि पर्खिदैछ"
#: methods/server.cc
-msgid "Bad header line"
-msgstr "खराब हेडर लाइन"
-
-#: methods/server.cc
msgid "The HTTP server sent an invalid reply header"
msgstr "HTTP सर्भरले अवैध जवाफ हेडर पठायो"
#: methods/server.cc
+msgid "Bad header line"
+msgstr "खराब हेडर लाइन"
+
+#: methods/server.cc
msgid "The HTTP server sent an invalid Content-Length header"
msgstr "HTTP सर्भरले अवैध सामग्री-लम्बाई हेडर पठायो"
diff --git a/po/nl.po b/po/nl.po
index e0d6e7b10..0187cdee8 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -12,7 +12,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 1.2.11\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+0200\n"
"PO-Revision-Date: 2016-04-27 18:12+0200\n"
"Last-Translator: Frans Spiesschaert <Frans.Spiesschaert@yucom.be>\n"
"Language-Team: Debian Dutch l10n Team <debian-l10n-dutch@lists.debian.org>\n"
@@ -3879,14 +3879,14 @@ msgid "Waiting for headers"
msgstr "Wachten op de kopteksten"
#: methods/server.cc
-msgid "Bad header line"
-msgstr "Foute koptekstregel"
-
-#: methods/server.cc
msgid "The HTTP server sent an invalid reply header"
msgstr "De HTTP-server verstuurde een ongeldige 'reply'-koptekst"
#: methods/server.cc
+msgid "Bad header line"
+msgstr "Foute koptekstregel"
+
+#: methods/server.cc
msgid "The HTTP server sent an invalid Content-Length header"
msgstr "De HTTP-server verstuurde een ongeldige 'Content-Length'-koptekst"
diff --git a/po/nn.po b/po/nn.po
index efcf7c189..bbfcccd66 100644
--- a/po/nn.po
+++ b/po/nn.po
@@ -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: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+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"
@@ -3697,14 +3697,14 @@ msgid "Waiting for headers"
msgstr "Ventar p hovud"
#: methods/server.cc
-msgid "Bad header line"
-msgstr "ydelagd hovudlinje"
-
-#: methods/server.cc
msgid "The HTTP server sent an invalid reply header"
msgstr "HTTP-tenaren sende eit ugyldig svarhovud"
#: methods/server.cc
+msgid "Bad header line"
+msgstr "ydelagd hovudlinje"
+
+#: methods/server.cc
msgid "The HTTP server sent an invalid Content-Length header"
msgstr "HTTP-tenaren sende eit ugyldig Content-Length-hovud"
diff --git a/po/pl.po b/po/pl.po
index f1a12cc35..4a104bb42 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -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: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+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"
@@ -3816,14 +3816,14 @@ msgid "Waiting for headers"
msgstr "Oczekiwanie na nagłówki"
#: methods/server.cc
-msgid "Bad header line"
-msgstr "Nieprawidłowa linia nagłówka"
-
-#: methods/server.cc
msgid "The HTTP server sent an invalid reply header"
msgstr "Serwer HTTP przysłał nieprawidłowy nagłówek odpowiedzi"
#: methods/server.cc
+msgid "Bad header line"
+msgstr "Nieprawidłowa linia nagłówka"
+
+#: methods/server.cc
msgid "The HTTP server sent an invalid Content-Length header"
msgstr "Serwer HTTP przysłał nieprawidłowy nagłówek Content-Length"
diff --git a/po/pt.po b/po/pt.po
index ae29c3413..b1a12fd4e 100644
--- a/po/pt.po
+++ b/po/pt.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: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+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"
@@ -3792,14 +3792,14 @@ msgid "Waiting for headers"
msgstr "A aguardar por cabeçalhos"
#: methods/server.cc
-msgid "Bad header line"
-msgstr "Linha de cabeçalho errada"
-
-#: methods/server.cc
msgid "The HTTP server sent an invalid reply header"
msgstr "O servidor HTTP enviou um cabeçalho de resposta inválido"
#: methods/server.cc
+msgid "Bad header line"
+msgstr "Linha de cabeçalho errada"
+
+#: methods/server.cc
msgid "The HTTP server sent an invalid Content-Length header"
msgstr "O servidor HTTP enviou um cabeçalho Content-Length inválido"
diff --git a/po/pt_BR.po b/po/pt_BR.po
index c642c43ef..ff99e113d 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: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+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."
@@ -3727,14 +3727,14 @@ msgid "Waiting for headers"
msgstr "Aguardando por cabeçalhos"
#: methods/server.cc
-msgid "Bad header line"
-msgstr "Linha de cabeçalho ruim"
-
-#: methods/server.cc
msgid "The HTTP server sent an invalid reply header"
msgstr "O servidor HTTP enviou um cabeçalho de resposta inválido"
#: methods/server.cc
+msgid "Bad header line"
+msgstr "Linha de cabeçalho ruim"
+
+#: methods/server.cc
msgid "The HTTP server sent an invalid Content-Length header"
msgstr "O servidor HTTP enviou um cabeçalho \"Content-Length\" inválido"
diff --git a/po/ro.po b/po/ro.po
index 8248431c2..3a661c7fa 100644
--- a/po/ro.po
+++ b/po/ro.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: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+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"
@@ -3739,14 +3739,14 @@ msgid "Waiting for headers"
msgstr "În așteptarea antetelor"
#: methods/server.cc
-msgid "Bad header line"
-msgstr "Linie de antet necorespunzătoare"
-
-#: methods/server.cc
msgid "The HTTP server sent an invalid reply header"
msgstr "Serverul HTTP a trimis un antet de răspuns necorespunzător"
#: methods/server.cc
+msgid "Bad header line"
+msgstr "Linie de antet necorespunzătoare"
+
+#: methods/server.cc
msgid "The HTTP server sent an invalid Content-Length header"
msgstr "Serverul HTTP a trimis un antet Content-Length necorespunzător"
diff --git a/po/ru.po b/po/ru.po
index 14c2884ce..97163cbfc 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -12,7 +12,7 @@ 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: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+0200\n"
"PO-Revision-Date: 2016-05-19 20:50+0300\n"
"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
"Language-Team: Russian <debian-l10n-russian@lists.debian.org>\n"
@@ -3855,14 +3855,14 @@ msgid "Waiting for headers"
msgstr "Ожидание заголовков"
#: methods/server.cc
-msgid "Bad header line"
-msgstr "Неверный заголовок"
-
-#: methods/server.cc
msgid "The HTTP server sent an invalid reply header"
msgstr "Http-сервер послал неверный заголовок"
#: methods/server.cc
+msgid "Bad header line"
+msgstr "Неверный заголовок"
+
+#: methods/server.cc
msgid "The HTTP server sent an invalid Content-Length header"
msgstr "Http сервер послал неверный заголовок Content-Length"
diff --git a/po/sk.po b/po/sk.po
index 9c4195b36..161a7c11b 100644
--- a/po/sk.po
+++ b/po/sk.po
@@ -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: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+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"
@@ -3754,14 +3754,14 @@ msgid "Waiting for headers"
msgstr "Čaká sa na hlavičky"
#: methods/server.cc
-msgid "Bad header line"
-msgstr "Chybná hlavička"
-
-#: methods/server.cc
msgid "The HTTP server sent an invalid reply header"
msgstr "HTTP server poslal neplatnú hlavičku odpovede"
#: methods/server.cc
+msgid "Bad header line"
+msgstr "Chybná hlavička"
+
+#: methods/server.cc
msgid "The HTTP server sent an invalid Content-Length header"
msgstr "HTTP server poslal neplatnú hlavičku Content-Length"
diff --git a/po/sl.po b/po/sl.po
index 16b9a872b..03372cdbe 100644
--- a/po/sl.po
+++ b/po/sl.po
@@ -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: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+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"
@@ -3760,14 +3760,14 @@ msgid "Waiting for headers"
msgstr "Čakanje na glave"
#: methods/server.cc
-msgid "Bad header line"
-msgstr "Neveljavna vrstica glave"
-
-#: methods/server.cc
msgid "The HTTP server sent an invalid reply header"
msgstr "Strežnik HTTP je poslal neveljavno glavo odgovora"
#: methods/server.cc
+msgid "Bad header line"
+msgstr "Neveljavna vrstica glave"
+
+#: methods/server.cc
msgid "The HTTP server sent an invalid Content-Length header"
msgstr "Strežnik HTTP je poslal glavo z neveljavno dolžino vsebine"
diff --git a/po/sv.po b/po/sv.po
index 300bc0591..55400f12a 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -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: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+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"
@@ -3789,14 +3789,14 @@ msgid "Waiting for headers"
msgstr "Väntar på rubriker"
#: methods/server.cc
-msgid "Bad header line"
-msgstr "Felaktig rubrikrad"
-
-#: methods/server.cc
msgid "The HTTP server sent an invalid reply header"
msgstr "Http-servern sände ett ogiltigt svarshuvud"
#: methods/server.cc
+msgid "Bad header line"
+msgstr "Felaktig rubrikrad"
+
+#: methods/server.cc
msgid "The HTTP server sent an invalid Content-Length header"
msgstr "Http-servern sände en ogiltig Content-Length-rubrik"
diff --git a/po/th.po b/po/th.po
index f43cdd910..acaf8180a 100644
--- a/po/th.po
+++ b/po/th.po
@@ -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: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+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"
@@ -3675,14 +3675,14 @@ msgid "Waiting for headers"
msgstr "รอหัวข้อมูล"
#: methods/server.cc
-msgid "Bad header line"
-msgstr "บรรทัดข้อมูลส่วนหัวผิดพลาด"
-
-#: methods/server.cc
msgid "The HTTP server sent an invalid reply header"
msgstr "เซิร์ฟเวอร์ HTTP ส่งข้อมูลส่วนหัวตอบมาไม่ถูกต้อง"
#: methods/server.cc
+msgid "Bad header line"
+msgstr "บรรทัดข้อมูลส่วนหัวผิดพลาด"
+
+#: methods/server.cc
msgid "The HTTP server sent an invalid Content-Length header"
msgstr "เซิร์ฟเวอร์ HTTP ส่งข้อมูลส่วนหัว Content-Length มาไม่ถูกต้อง"
diff --git a/po/tl.po b/po/tl.po
index 83ead225d..91f8740dd 100644
--- a/po/tl.po
+++ b/po/tl.po
@@ -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: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+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"
@@ -3720,14 +3720,14 @@ msgid "Waiting for headers"
msgstr "Naghihintay ng panimula"
#: methods/server.cc
-msgid "Bad header line"
-msgstr "Maling linyang panimula"
-
-#: methods/server.cc
msgid "The HTTP server sent an invalid reply header"
msgstr "Nagpadala ang HTTP server ng di tanggap na reply header"
#: methods/server.cc
+msgid "Bad header line"
+msgstr "Maling linyang panimula"
+
+#: methods/server.cc
msgid "The HTTP server sent an invalid Content-Length header"
msgstr "Nagpadala ang HTTP server ng di tanggap na Content-Length header"
diff --git a/po/tr.po b/po/tr.po
index b0cb3bc64..61874d4bd 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -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: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+0200\n"
"PO-Revision-Date: 2016-07-21 18:43+0300\n"
"Last-Translator: Mert Dirik <mertdirik@gmail.com>\n"
"Language-Team: Debian l10n Turkish <debian-l10n-turkish@lists.debian.org>\n"
@@ -3814,14 +3814,14 @@ msgid "Waiting for headers"
msgstr "Başlıklar bekleniyor"
#: methods/server.cc
-msgid "Bad header line"
-msgstr "Kötü başlık satırı"
-
-#: methods/server.cc
msgid "The HTTP server sent an invalid reply header"
msgstr "HTTP sunucusu geçersiz bir cevap başlığı gönderdi"
#: methods/server.cc
+msgid "Bad header line"
+msgstr "Kötü başlık satırı"
+
+#: methods/server.cc
msgid "The HTTP server sent an invalid Content-Length header"
msgstr "HTTP sunucusu geçersiz bir Content-Length başlığı gönderdi"
diff --git a/po/uk.po b/po/uk.po
index a987cf0fe..eabb2a74b 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -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: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+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"
@@ -3817,14 +3817,14 @@ msgid "Waiting for headers"
msgstr "Очікування на заголовки"
#: methods/server.cc
-msgid "Bad header line"
-msgstr "Невірний рядок заголовку"
-
-#: methods/server.cc
msgid "The HTTP server sent an invalid reply header"
msgstr "HTTP сервер відіслав невірний заголовок 'reply'"
#: methods/server.cc
+msgid "Bad header line"
+msgstr "Невірний рядок заголовку"
+
+#: methods/server.cc
msgid "The HTTP server sent an invalid Content-Length header"
msgstr "HTTP сервер відіслав невірний заголовок 'Content-Length'"
diff --git a/po/vi.po b/po/vi.po
index 5b95844b1..1d4d42e93 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -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: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+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"
@@ -3781,14 +3781,14 @@ msgid "Waiting for headers"
msgstr "Đang đợi phần đầu dữ liệu..."
#: methods/server.cc
-msgid "Bad header line"
-msgstr "Dòng đầu sai"
-
-#: methods/server.cc
msgid "The HTTP server sent an invalid reply header"
msgstr "Máy phục vụ HTTP đã gửi một dòng đầu trả lời không hợp lệ"
#: methods/server.cc
+msgid "Bad header line"
+msgstr "Dòng đầu sai"
+
+#: methods/server.cc
msgid "The HTTP server sent an invalid Content-Length header"
msgstr ""
"Máy phục vụ HTTP đã gửi một dòng đầu Content-Length (độ dài nội dung) không "
diff --git a/po/zh_CN.po b/po/zh_CN.po
index e9c2b0856..03acbe108 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.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: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+0200\n"
"PO-Revision-Date: 2016-06-27 08:00+0000\n"
"Last-Translator: Zhou Mo <cdluminate@gmail.com>\n"
"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
@@ -3677,14 +3677,14 @@ msgid "Waiting for headers"
msgstr "正在等待报头"
#: methods/server.cc
-msgid "Bad header line"
-msgstr "错误的报头行"
-
-#: methods/server.cc
msgid "The HTTP server sent an invalid reply header"
msgstr "该 HTTP 服务器发送了一个无效的应答报头"
#: methods/server.cc
+msgid "Bad header line"
+msgstr "错误的报头行"
+
+#: methods/server.cc
msgid "The HTTP server sent an invalid Content-Length header"
msgstr "该 HTTP 服务器发送了一个无效的 Content-Length 报头"
diff --git a/po/zh_TW.po b/po/zh_TW.po
index 14abf54f9..eb85a1a42 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: 2016-08-11 13:57+0200\n"
+"POT-Creation-Date: 2016-08-17 23:47+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."
@@ -3660,14 +3660,14 @@ msgid "Waiting for headers"
msgstr "等待標頭"
#: methods/server.cc
-msgid "Bad header line"
-msgstr "標頭行錯誤"
-
-#: methods/server.cc
msgid "The HTTP server sent an invalid reply header"
msgstr "HTTP 伺服器傳送了一個無效的回覆標頭"
#: methods/server.cc
+msgid "Bad header line"
+msgstr "標頭行錯誤"
+
+#: methods/server.cc
msgid "The HTTP server sent an invalid Content-Length header"
msgstr "HTTP 伺服器傳送了一個無效的 Content-Length 標頭"
diff --git a/prepare-release b/prepare-release
index df1b0a2cf..1e434a305 100755
--- a/prepare-release
+++ b/prepare-release
@@ -158,8 +158,9 @@ elif [ "$1" = 'buildlog' ]; then
shift
done
elif [ "$1" = 'travis-ci' ]; then
- apt-get install -qy --no-install-recommends $(sed -n -e '/^Build-Depends: /,/^Build-Depends-Indep: / {p}' debian/control | sed -e 's#([^)]*)##g' -e 's#^Build-Depends\(-Indep\)\?: ##' -e 's#<.*>##g' | tr -d ',')
- apt-get install -qy --no-install-recommends $(sed -n 's#^Depends: .*@, \(.*\)$#\1#p' debian/tests/control | tr -d ',')
+ apt-get install -qy --no-install-recommends dctrl-tools
+ apt-get install -qy --no-install-recommends $(grep-dctrl -S -s Build-Depends,Build-Depends-Indep,Build-Depends-Arch apt ./debian/control | sed -e 's#([^)]*)##g' -e 's#^Build-Depends\(-Indep\|-Arch\)\?: ##' -e 's#<.*>##g' | tr -s '\n,' ' ')
+ apt-get install -qy --no-install-recommends $(grep-dctrl -F Tests -s Depends run-tests ./debian/tests/control | tr -s '\n,' ' ' | cut -d'@' -f 4- | sed -e 's#gnupg1#gnupg2#' -e 's#gpgv1#gpgv2#')
elif [ "$1" = 'coverage' ]; then
DIR="${2:-./coverage}"
git clean -dfX # remove ignored build artefacts for a clean start
diff --git a/test/integration/framework b/test/integration/framework
index 8a95d79bb..1e356ffaf 100644
--- a/test/integration/framework
+++ b/test/integration/framework
@@ -216,7 +216,7 @@ gdb() {
if [ "${CMD##*/}" = "$CMD" ]; then
CMD="${BUILDDIRECTORY}/${CMD}"
fi
- runapt command gdb --quiet -ex run "$CMD" --args "$CMD" "$@"
+ runapt command gdb --quiet -ex "directory '$SOURCEDIRECTORY'" -ex run "$CMD" --args "$CMD" "$@"
}
lastmodification() {
date -u -d "@$(stat -c '%Y' "${TMPWORKINGDIRECTORY}/$1")" -R
@@ -1856,49 +1856,24 @@ testwebserverlaststatuscode() {
msggroup
}
-createlistofkeys() {
- local OUTPUT="$1"
- shift
+mapkeynametokeyid() {
while [ -n "$1" ]; do
- # gpg 2.1.something starts printing [SC] at some point
- if grep -q ' rsa2048/' "$OUTPUT" && grep -qF '[SC]' "$OUTPUT"; then
- case "$1" in
- *Joe*|*Sixpack*) echo 'pub rsa2048/DBAC8DAE 2010-08-18 [SC]';;
- *Rex*|*Expired*) echo 'pub rsa2048/27CE74F9 2013-07-12 [SC] [expired: 2013-07-13]';;
- *Marvin*|*Paranoid*) echo 'pub rsa2048/528144E2 2011-01-16 [SC]';;
- oldarchive) echo 'pub rsa1024/F68C85A3 2013-12-19 [SC]';;
- newarchive) echo 'pub rsa2048/DBAC8DAE 2010-08-18 [SC]';;
- *) echo 'UNKNOWN KEY';;
- esac
- # gpg 2.1 has a slightly different output format
- elif grep -q ' rsa2048/' "$OUTPUT"; then
- case "$1" in
- *Joe*|*Sixpack*) echo 'pub rsa2048/DBAC8DAE 2010-08-18';;
- *Rex*|*Expired*) echo 'pub rsa2048/27CE74F9 2013-07-12 [expired: 2013-07-13]';;
- *Marvin*|*Paranoid*) echo 'pub rsa2048/528144E2 2011-01-16';;
- oldarchive) echo 'pub rsa1024/F68C85A3 2013-12-19';;
- newarchive) echo 'pub rsa2048/DBAC8DAE 2010-08-18';;
- *) echo 'UNKNOWN KEY';;
- esac
- else
- case "$1" in
- *Joe*|*Sixpack*) echo 'pub 2048R/DBAC8DAE 2010-08-18';;
- *Rex*|*Expired*) echo 'pub 2048R/27CE74F9 2013-07-12 [expired: 2013-07-13]';;
- *Marvin*|*Paranoid*) echo 'pub 2048R/528144E2 2011-01-16';;
- oldarchive) echo 'pub 1024R/F68C85A3 2013-12-19';;
- newarchive) echo 'pub 2048R/DBAC8DAE 2010-08-18';;
- *) echo 'UNKNOWN KEY';;
- esac
- fi
+ case "$1" in
+ *Joe*|*Sixpack*|newarchive) echo '5A90D141DBAC8DAE';;
+ *Rex*|*Expired*) echo '4BC0A39C27CE74F9';;
+ *Marvin*|*Paranoid*) echo 'E8525D47528144E2';;
+ oldarchive) echo 'FDD2DB85F68C85A3';;
+ *) echo 'UNKNOWN KEY';;
+ esac
shift
done
}
testaptkeys() {
local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/aptkeylist.output"
- if ! aptkey list | grep '^pub' > "$OUTPUT"; then
+ if ! aptkey list --with-colon | grep '^pub' | cut -d':' -f 5 > "$OUTPUT"; then
echo -n > "$OUTPUT"
fi
- testfileequal "$OUTPUT" "$(createlistofkeys "$OUTPUT" "$@")"
+ testfileequal "$OUTPUT" "$(mapkeynametokeyid "$@")"
}
pause() {
diff --git a/test/integration/joesixpack.pub b/test/integration/joesixpack.pub
index 2b40b97b6..cad056104 100644
--- a/test/integration/joesixpack.pub
+++ b/test/integration/joesixpack.pub
Binary files differ
diff --git a/test/integration/joesixpack.sec b/test/integration/joesixpack.sec
index 92aaada76..0dc5cd8f6 100644
--- a/test/integration/joesixpack.sec
+++ b/test/integration/joesixpack.sec
Binary files differ
diff --git a/test/integration/keyrings/test-archive-keyring.pub b/test/integration/keyrings/test-archive-keyring.pub
index d8d9d472b..325174086 100644
--- a/test/integration/keyrings/test-archive-keyring.pub
+++ b/test/integration/keyrings/test-archive-keyring.pub
Binary files differ
diff --git a/test/integration/keyrings/test-archive-keyring.sec b/test/integration/keyrings/test-archive-keyring.sec
index aece750e8..001f79569 100644
--- a/test/integration/keyrings/test-archive-keyring.sec
+++ b/test/integration/keyrings/test-archive-keyring.sec
Binary files differ
diff --git a/test/integration/keyrings/test-master-keyring.pub b/test/integration/keyrings/test-master-keyring.pub
index 33aa16796..9809d3259 100644
--- a/test/integration/keyrings/test-master-keyring.pub
+++ b/test/integration/keyrings/test-master-keyring.pub
Binary files differ
diff --git a/test/integration/keyrings/test-master-keyring.sec b/test/integration/keyrings/test-master-keyring.sec
index 9cb33176c..c5c5bfd5f 100644
--- a/test/integration/keyrings/test-master-keyring.sec
+++ b/test/integration/keyrings/test-master-keyring.sec
Binary files differ
diff --git a/test/integration/marvinparanoid.pub b/test/integration/marvinparanoid.pub
index 9a59c2e40..866dc1492 100644
--- a/test/integration/marvinparanoid.pub
+++ b/test/integration/marvinparanoid.pub
Binary files differ
diff --git a/test/integration/marvinparanoid.sec b/test/integration/marvinparanoid.sec
index ff54e8680..ace09f735 100644
--- a/test/integration/marvinparanoid.sec
+++ b/test/integration/marvinparanoid.sec
Binary files differ
diff --git a/test/integration/rexexpired.pub b/test/integration/rexexpired.pub
index 5ab2e489a..2d2c81c83 100644
--- a/test/integration/rexexpired.pub
+++ b/test/integration/rexexpired.pub
Binary files differ
diff --git a/test/integration/rexexpired.sec b/test/integration/rexexpired.sec
index dc00168cd..c431fd908 100644
--- a/test/integration/rexexpired.sec
+++ b/test/integration/rexexpired.sec
Binary files differ
diff --git a/test/integration/test-apt-get-install-deb b/test/integration/test-apt-get-install-deb
index 3aacc301d..5f2877dfd 100755
--- a/test/integration/test-apt-get-install-deb
+++ b/test/integration/test-apt-get-install-deb
@@ -64,6 +64,23 @@ Remv foo:i386 [1.0]
Inst foo (1.0 local-deb [amd64])
Conf foo (1.0 local-deb [amd64])" aptget install ./incoming/foo_1.0_amd64.deb -s
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.' aptget install --with-source ./incoming/foo_1.0_amd64.deb -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+The following packages will be REMOVED:
+ foo:i386
+The following NEW packages will be installed:
+ foo
+0 upgraded, 1 newly installed, 1 to remove and 0 not upgraded.
+Remv foo:i386 [1.0]
+Inst foo (1.0 local-deb [amd64])
+Conf foo (1.0 local-deb [amd64])' aptget install --with-source ./incoming/foo_1.0_amd64.deb foo -s
+
# Check that installing the local deb works if it is not the candidate
echo "Package: foo
Pin: version 1.0
@@ -133,3 +150,21 @@ fi
sed -i -e '/^Depends: foo/ d' rootdir/var/lib/dpkg/status
testsuccess aptget install -y ./incoming/pkg-as-it-should-be_0_all.deb
testfailure grep 'is already the newest version' rootdir/tmp/testsuccess.output
+testsuccess apt purge -y pkg-as-it-should-be
+
+echo "Package: pkg-as-it-should-be
+Architecture: all
+Version: 0
+Installed-Size: 2903
+Filename: incoming/pkg-as-it-should-be_0_all.deb
+Size: $(stat -c %s incoming/pkg-as-it-should-be_0_all.deb)
+SHA256: $(sha256sum incoming/pkg-as-it-should-be_0_all.deb | cut -d' ' -f 1)
+" > Packages
+testdpkgnotinstalled 'pkg-as-it-should-be'
+testnopackage pkg-as-it-should-be
+testsuccess apt install --with-source ./Packages pkg-as-it-should-be -s
+testsuccess apt install --with-source ./Packages pkg-as-it-should-be --print-uris
+testsuccess apt show --with-source ./Packages pkg-as-it-should-be
+testequal 'Package: pkg-as-it-should-be' head -n1 rootdir/tmp/testsuccess.output
+testsuccess apt install -y --with-source ./Packages pkg-as-it-should-be
+testdpkginstalled 'pkg-as-it-should-be'
diff --git a/test/integration/test-apt-key b/test/integration/test-apt-key
index e777de1a4..759ce1487 100755
--- a/test/integration/test-apt-key
+++ b/test/integration/test-apt-key
@@ -41,7 +41,9 @@ APT::Key::RemovedKeys \"${KEYDIR}/rexexpired.pub\";" > "${ROOTDIR}/etc/apt/apt.c
msgtest 'Check that paths in finger output are not' 'double-slashed'
testfailure --nomsg grep '//' "${ROOTDIR}/tmp/testsuccess.output"
- testsuccessequal 'gpg: key DBAC8DAE: "Joe Sixpack (APT Testcases Dummy) <joe@example.org>" not changed
+ testequalor2 'gpg: key DBAC8DAE: "Joe Sixpack (APT Testcases Dummy) <joe@example.org>" not changed
+gpg: Total number processed: 1
+gpg: unchanged: 1' 'gpg: key 5A90D141DBAC8DAE: "Joe Sixpack (APT Testcases Dummy) <joe@example.org>" not changed
gpg: Total number processed: 1
gpg: unchanged: 1' aptkey --fakeroot update
@@ -114,6 +116,14 @@ gpg: unchanged: 1' aptkey --fakeroot update
testfailure test -e "${ROOTDIR}/etc/apt/trusted.gpg.d/joesixpack.gpg"
testsuccess cmp "${KEYDIR}/joesixpack.pub" "${ROOTDIR}/etc/apt/trusted.gpg.d/joesixpack.gpg~"
+ msgtest 'Test key removal with' 'spaced fingerprint'
+ cleanplate
+ cp -a "${KEYDIR}/joesixpack.pub" "${ROOTDIR}/etc/apt/trusted.gpg.d/joesixpack.gpg"
+ testsuccess --nomsg aptkey --fakeroot del '34A8 E9D1 8DB3 20F3 67E8 EAA0 5A90 D141 DBAC 8DAE'
+ testempty aptkey list
+ testfailure test -e "${ROOTDIR}/etc/apt/trusted.gpg.d/joesixpack.gpg"
+ testsuccess cmp "${KEYDIR}/joesixpack.pub" "${ROOTDIR}/etc/apt/trusted.gpg.d/joesixpack.gpg~"
+
msgtest 'Test key removal with' 'single key in softlink'
cleanplate
ln -s "$(readlink -f "${KEYDIR}/joesixpack.pub")" "${ROOTDIR}/etc/apt/trusted.gpg.d/joesixpack.gpg"
@@ -185,8 +195,9 @@ gpg: unchanged: 1' aptkey --fakeroot update
msgtest 'Test verify a file' 'with no sig'
testfailure --nomsg aptkey --quiet --readonly --keyring "${KEYDIR}/testcase-multikey.pub" verify "${SIGNATURE}" "${SIGNATURE}2"
- for GPGV in '' 'gpgv' 'gpgv2'; do
+ for GPGV in '' 'gpgv' 'gpgv1' 'gpgv2'; do
echo "APT::Key::GPGVCommand \"$GPGV\";" > "${ROOTDIR}/etc/apt/apt.conf.d/00gpgvcmd"
+ if [ -n "$GPGV" ] && ! command dpkg -l gnupg1 2>&1 | grep -q '^ii'; then continue; fi
msgtest 'Test verify a file' 'with all keys'
testsuccess --nomsg aptkey --quiet --readonly verify "${SIGNATURE}.gpg" "${SIGNATURE}"
@@ -229,8 +240,9 @@ gpg: unchanged: 1' aptkey --fakeroot update
adv --batch --yes -u 'Marvin' -u 'Joe' --armor --detach-sign --sign --output "${SIGNATURE}.gpg" "${SIGNATURE}"
testsuccess test -s "${SIGNATURE}.gpg" -a -s "${SIGNATURE}"
- for GPGV in '' 'gpgv' 'gpgv2'; do
+ for GPGV in '' 'gpgv' 'gpgv1' 'gpgv2'; do
echo "APT::Key::GPGVCommand \"$GPGV\";" > "${ROOTDIR}/etc/apt/apt.conf.d/00gpgvcmd"
+ if [ -n "$GPGV" ] && ! command dpkg -l gnupg1 2>&1 | grep -q '^ii'; then continue; fi
msgtest 'Test verify a doublesigned file' 'with all keys'
testsuccess --nomsg aptkey --quiet --readonly verify "${SIGNATURE}.gpg" "${SIGNATURE}"
@@ -265,11 +277,25 @@ gpg: unchanged: 1' aptkey --fakeroot update
}
setupgpgcommand() {
- echo "APT::Key::GPGCommand \"$1\";" > "${ROOTDIR}/etc/apt/apt.conf.d/00gpgcmd"
- msgmsg 'Force tests to be run with' "$1"
+ local GPGEXE;
+ if command dpkg -l gnupg1 2>&1 | grep -q '^ii'; then
+ if [ "$1" = '1' ]; then
+ GPGEXE='gpg1'
+ else
+ GPGEXE='gpg'
+ fi
+ else
+ if [ "$1" = '1' ]; then
+ GPGEXE='gpg'
+ else
+ GPGEXE='gpg2'
+ fi
+ fi
+ msgmsg 'Force tests to be run with' "$GPGEXE"
+ echo "APT::Key::GPGCommand \"$GPGEXE\";" > "${ROOTDIR}/etc/apt/apt.conf.d/00gpgcmd"
testsuccess aptkey --readonly adv --version
cp "${ROOTDIR}/tmp/testsuccess.output" "${TMPWORKINGDIRECTORY}/aptkey.version"
- testsuccess grep "^gpg (GnuPG) $2\." "${TMPWORKINGDIRECTORY}/aptkey.version"
+ testsuccess grep "^gpg (GnuPG) $1\." "${TMPWORKINGDIRECTORY}/aptkey.version"
}
# run with default (whatever this is) in current CWD with relative paths
@@ -285,7 +311,7 @@ cd inaccessible
chmod 600 ../inaccessible
testfilestats "${TMPWORKINGDIRECTORY}/inaccessible" '%a' '=' '600'
-setupgpgcommand 'gpg' '1'
+setupgpgcommand '1'
testrun
-setupgpgcommand 'gpg2' '2'
+setupgpgcommand '2'
testrun
diff --git a/test/integration/test-apt-key-net-update b/test/integration/test-apt-key-net-update
index 990fb5ad2..b9f716e10 100755
--- a/test/integration/test-apt-key-net-update
+++ b/test/integration/test-apt-key-net-update
@@ -24,14 +24,7 @@ echo 'APT::Key::Net-Update-Enabled "1";' >> ./aptconfig.conf
# test against the "real" webserver
testsuccess aptkey --fakeroot net-update
-testequalor2 'Checking for new archive signing keys now
-gpg: key F68C85A3: public key "Test Automatic Archive Signing Key <ftpmaster@example.com>" imported
-gpg: Total number processed: 1
-gpg: imported: 1 (RSA: 1)' 'Checking for new archive signing keys now
-gpg: key F68C85A3: public key "Test Automatic Archive Signing Key <ftpmaster@example.com>" imported
-gpg: Total number processed: 1
-gpg: imported: 1' cat rootdir/tmp/testsuccess.output
-
+testfailure grep 'not added' rootdir/tmp/testsuccess.output
testaptkeys 'oldarchive' 'newarchive'
# now try a different one
diff --git a/test/integration/test-apt-key-used-in-maintainerscript b/test/integration/test-apt-key-used-in-maintainerscript
index f7008084f..b5ed3279f 100755
--- a/test/integration/test-apt-key-used-in-maintainerscript
+++ b/test/integration/test-apt-key-used-in-maintainerscript
@@ -32,7 +32,7 @@ testdpkginstalled 'aptkeyuser-depends'
testfailure grep '^Warning: This will BREAK' apt.output
testsuccess grep '^Warning: apt-key' apt.output
-testsuccess apt install ./incoming/aptkeyuser-nodepends_*.changes -y
+testsuccess apt install --with-source ./incoming/aptkeyuser-nodepends_*.changes aptkeyuser-nodepends -y
cp rootdir/tmp/testsuccess.output apt.output
testdpkginstalled 'aptkeyuser-nodepends'
testsuccess grep '^Warning: This will BREAK' apt.output
diff --git a/test/integration/test-apt-update-transactions b/test/integration/test-apt-update-transactions
index d8154b283..ab678c133 100755
--- a/test/integration/test-apt-update-transactions
+++ b/test/integration/test-apt-update-transactions
@@ -82,7 +82,7 @@ testsetup 'file'
changetowebserver
webserverconfig 'aptwebserver::support::modified-since' 'false' "$1"
webserverconfig 'aptwebserver::support::last-modified' 'false' "$1" # curl is clever and sees hits here also
-webserverconfig 'aptwebserver::support::range' 'false' "$1"
+webserverconfig 'aptwebserver::response-header::Accept-Ranges' 'none' "$1"
testsetup 'http'
diff --git a/test/integration/test-bug-623443-fail-on-bad-proxies b/test/integration/test-bug-623443-fail-on-bad-proxies
index 04542e0cd..d91a3ab8b 100755
--- a/test/integration/test-bug-623443-fail-on-bad-proxies
+++ b/test/integration/test-bug-623443-fail-on-bad-proxies
@@ -29,5 +29,6 @@ testfailure apt update
unset http_proxy
testsuccess grep 'Unsupported proxy configured' rootdir/tmp/testfailure.output
-
-
+echo 'Acquire::http::Proxy "foo://example.org";
+Acquire::https::Proxy "DIRECT";' > rootdir/etc/apt/apt.conf.d/proxy.conf
+testsuccess apt update
diff --git a/test/integration/test-bug-778375-server-has-no-reason-phrase b/test/integration/test-bug-778375-server-has-no-reason-phrase
index bce41235f..28e31e069 100755
--- a/test/integration/test-bug-778375-server-has-no-reason-phrase
+++ b/test/integration/test-bug-778375-server-has-no-reason-phrase
@@ -11,6 +11,7 @@ echo 'found' > aptarchive/working
changetohttpswebserver -o 'aptwebserver::redirect::replace::/redirectme/=/' \
-o 'aptwebserver::httpcode::200=200' -o 'aptwebserver::httpcode::404=404' \
-o 'aptwebserver::httpcode::301=301'
+webserverconfig 'aptwebserver::empty-response-header::' 'foobar'
testdownload() {
rm -f downfile
diff --git a/test/integration/test-bug-lp1445239-download-loop b/test/integration/test-bug-lp1445239-download-loop
index a12d5252d..6802840a5 100755
--- a/test/integration/test-bug-lp1445239-download-loop
+++ b/test/integration/test-bug-lp1445239-download-loop
@@ -12,7 +12,6 @@ setupenvironment
configarchitecture 'amd64'
changetowebserver
-webserverconfig 'aptwebserver::support::range' 'true'
TESTFILE='aptarchive/testfile'
dd if=/dev/zero of=$TESTFILE bs=100k count=1 2>/dev/null
diff --git a/test/integration/test-handle-redirect-as-used-mirror-change b/test/integration/test-handle-redirect-as-used-mirror-change
index 2f6431e66..2e8fbeff6 100755
--- a/test/integration/test-handle-redirect-as-used-mirror-change
+++ b/test/integration/test-handle-redirect-as-used-mirror-change
@@ -44,10 +44,28 @@ testsuccess apthelper download-file "http://localhost:${APTHTTPPORT}/redirectme/
testsuccess test -s inrelease
cd - >/dev/null
+webserverconfig "aptwebserver::redirect::replace::http://0.0.0.0:${APTHTTPPORT}/dists/unstable/InRelease" "http://0.0.0.0:${APTHTTPPORT}/storage/dists/unstable/InRelease"
+mkdir -p aptarchive/storage/dists/unstable
+mv aptarchive/dists/unstable/InRelease aptarchive/storage/dists/unstable
+rm -rf rootdir/var/lib/apt/lists
+testsuccessequal "Get:1 http://0.0.0.0:${APTHTTPPORT}/storage unstable InRelease [$(stat -c %s aptarchive/storage/dists/unstable/InRelease) B]
+Ign:2 http://0.0.0.0:${APTHTTPPORT}/storage unstable/main Sources
+ 404 Not Found
+Ign:3 http://0.0.0.0:${APTHTTPPORT}/storage unstable/main all Packages
+ 404 Not Found
+Ign:4 http://0.0.0.0:${APTHTTPPORT}/storage unstable/main Translation-en
+ 404 Not Found
+Get:2 http://0.0.0.0:${APTHTTPPORT} unstable/main Sources [$(stat -c %s aptarchive/dists/unstable/main/source/Sources.gz) B]
+Get:3 http://0.0.0.0:${APTHTTPPORT} unstable/main all Packages [$(stat -c %s aptarchive/dists/unstable/main/binary-all/Packages.gz) B]
+Get:4 http://0.0.0.0:${APTHTTPPORT} unstable/main Translation-en [$(stat -c %s aptarchive/dists/unstable/main/i18n/Translation-en.gz) B]
+Reading package lists...
+Building dependency tree...
+All packages are up to date." apt update
+
find aptarchive -name 'InRelease' -delete
rm -rf rootdir/var/lib/apt/lists
-testsuccessequal "Ign:1 http://0.0.0.0:${APTHTTPPORT} unstable InRelease
+testsuccessequal "Ign:1 http://0.0.0.0:${APTHTTPPORT}/storage unstable InRelease
404 Not Found
Get:2 http://0.0.0.0:${APTHTTPPORT} unstable Release [$(stat -c %s aptarchive/dists/unstable/Release) B]
Get:3 http://0.0.0.0:${APTHTTPPORT} unstable Release.gpg [$(stat -c %s aptarchive/dists/unstable/Release.gpg) B]
@@ -56,9 +74,7 @@ Get:5 http://0.0.0.0:${APTHTTPPORT} unstable/main all Packages [$(stat -c %s apt
Get:6 http://0.0.0.0:${APTHTTPPORT} unstable/main Translation-en [$(stat -c %s aptarchive/dists/unstable/main/i18n/Translation-en.gz) B]
Reading package lists..." aptget update
-testsuccessequal "Ign:1 http://0.0.0.0:${APTHTTPPORT} unstable InRelease
+testsuccessequal "Ign:1 http://0.0.0.0:${APTHTTPPORT}/storage unstable InRelease
404 Not Found
Hit:2 http://0.0.0.0:${APTHTTPPORT} unstable Release
Reading package lists..." aptget update
-
-
diff --git a/test/integration/test-partial-file-support b/test/integration/test-partial-file-support
index 1c5d120d8..9b5eed1e5 100755
--- a/test/integration/test-partial-file-support
+++ b/test/integration/test-partial-file-support
@@ -96,6 +96,7 @@ followuprequest() {
testrun() {
webserverconfig 'aptwebserver::support::range' 'true'
+ webserverconfig 'aptwebserver::response-header::Accept-Ranges' 'bytes'
local DOWN='./downloaded/testfile'
copysource $TESTFILE 0 $DOWN
@@ -125,7 +126,11 @@ testrun() {
testdownloadfile 'old data' "${1}/testfile" "$DOWN" '='
testwebserverlaststatuscode '200' "$DOWNLOADLOG"
- webserverconfig 'aptwebserver::support::range' 'false'
+ if [ "${1%%:*}" = 'https' ] && expr match "$1" "^.*/redirectme$" >/dev/null; then
+ webserverconfig 'aptwebserver::response-header::Accept-Ranges' 'none'
+ else
+ webserverconfig 'aptwebserver::support::range' 'false'
+ fi
copysource $TESTFILE 20 $DOWN
testdownloadfile 'no server support' "${1}/testfile" "$DOWN" '='
@@ -148,4 +153,5 @@ changetohttpswebserver
serverconfigs "https://localhost:${APTHTTPSPORT}"
webserverconfig 'aptwebserver::redirect::replace::/redirectme/' "https://localhost:${APTHTTPSPORT}/"
+serverconfigs "https://localhost:${APTHTTPSPORT}/redirectme"
serverconfigs "http://localhost:${APTHTTPPORT}/redirectme"
diff --git a/test/integration/test-pdiff-usage b/test/integration/test-pdiff-usage
index 39d847203..59a3fd8af 100755
--- a/test/integration/test-pdiff-usage
+++ b/test/integration/test-pdiff-usage
@@ -35,6 +35,7 @@ wasmergeused() {
fi
testsuccess apt update "$@"
+ #apt update "$@" 2>&1 | tee rootdir/tmp/testsuccess.output
msgtest 'No intermediate patch files' 'still exist'
local EDS="$(find rootdir/var/lib/apt/lists -name '*.ed' -o -name '*.ed.*')"
@@ -116,6 +117,34 @@ SHA256-Download:
testsuccessequal "$(cat "${PKGFILE}-new")
" aptcache show apt newstuff
+ msgmsg "Testcase: apply with compressed Index and one patch: $*"
+ cp "${PKGFILE}-new" aptarchive/Packages
+ compressfile 'aptarchive/Packages'
+ cat "$PATCHINDEX" | gzip > "${PATCHINDEX}.gz"
+ generatereleasefiles '+1hour'
+ signreleasefiles
+ find aptarchive -name 'Packages*' -type f -delete
+ rm "$PATCHINDEX"
+ rm -rf rootdir/var/lib/apt/lists
+ cp -a rootdir/var/lib/apt/lists-bak rootdir/var/lib/apt/lists
+ wasmergeused "$@"
+ testnopackage oldstuff
+ testsuccessequal "$(cat "${PKGFILE}-new")
+" aptcache show apt newstuff
+
+ msgmsg "Testcase: apply with by-hash compressed Index and one patch: $*"
+ local NORMAL="$(readlink -f "./aptarchive/Packages.diff")"
+ local BYHASH="${NORMAL}/by-hash/SHA256"
+ mkdir -p "${BYHASH}"
+ find "${NORMAL}/" -maxdepth 1 -name "Index*" -exec mv '{}' "$BYHASH" \;
+ ln -s "${BYHASH}/Index.gz" "${BYHASH}/$(sha256sum "${BYHASH}/Index.gz" | cut -f1 -d' ')"
+ rm -rf rootdir/var/lib/apt/lists
+ cp -a rootdir/var/lib/apt/lists-bak rootdir/var/lib/apt/lists
+ wasmergeused "$@" -o Acquire::By-Hash=force
+ testnopackage oldstuff
+ testsuccessequal "$(cat "${PKGFILE}-new")
+" aptcache show apt newstuff
+
msgmsg "Testcase: SHA1-only patches are not used: $*"
find aptarchive -name 'Packages*' -type f -delete
cp "${PKGFILE}-new" aptarchive/Packages
diff --git a/test/integration/test-releasefile-verification b/test/integration/test-releasefile-verification
index 82e48ffa8..20ca613da 100755
--- a/test/integration/test-releasefile-verification
+++ b/test/integration/test-releasefile-verification
@@ -12,8 +12,6 @@ buildaptarchive
setupflataptarchive
changetowebserver
-webserverconfig 'aptwebserver::support::range' 'false'
-
prepare() {
local DATE="${2:-now}"
if [ "$DATE" = 'now' ]; then
@@ -239,7 +237,7 @@ runtest() {
updatewithwarnings '^W: .* NO_PUBKEY'
sed -i "s#^\(deb\(-src\)\?\) \[signed-by=$MARVIN\] #\1 #" rootdir/etc/apt/sources.list.d/*
- local MARVIN="$(aptkey --keyring $MARVIN finger | grep 'Key fingerprint' | cut -d'=' -f 2 | tr -d ' ')"
+ local MARVIN="$(aptkey --keyring $MARVIN finger --with-colons | grep '^fpr' | cut -d':' -f 10)"
msgmsg 'Cold archive signed by bad keyid' 'Joe Sixpack'
rm -rf rootdir/var/lib/apt/lists
signreleasefiles 'Joe Sixpack'
@@ -263,7 +261,7 @@ runtest() {
" aptcache show apt
installaptold
- local SIXPACK="$(aptkey --keyring keys/joesixpack.pub finger | grep 'Key fingerprint' | cut -d'=' -f 2 | tr -d ' ')"
+ local SIXPACK="$(aptkey --keyring keys/joesixpack.pub finger --with-colons | grep '^fpr' | cut -d':' -f 10)"
msgmsg 'Cold archive signed by good keyids' 'Joe Sixpack'
rm -rf rootdir/var/lib/apt/lists
signreleasefiles 'Joe Sixpack'
@@ -273,7 +271,6 @@ runtest() {
" aptcache show apt
installaptold
- local SIXPACK="$(aptkey --keyring keys/joesixpack.pub finger | grep 'Key fingerprint' | cut -d'=' -f 2 | tr -d ' ')"
msgmsg 'Cold archive signed by good keyids' 'Joe Sixpack'
rm -rf rootdir/var/lib/apt/lists
sed -i "s#^\(deb\(-src\)\?\) \[signed-by=${SIXPACK},${MARVIN}\] #\1 [signed-by=${MARVIN},${SIXPACK}] #" rootdir/etc/apt/sources.list.d/*
diff --git a/test/interactive-helper/aptwebserver.cc b/test/interactive-helper/aptwebserver.cc
index 817760ec3..950a17bc1 100644
--- a/test/interactive-helper/aptwebserver.cc
+++ b/test/interactive-helper/aptwebserver.cc
@@ -122,6 +122,9 @@ static bool sendHead(int const client, int const httpcode, std::list<std::string
_config->Set("APTWebserver::Last-Status-Code", httpcode);
std::stringstream buffer;
+ auto const empties = _config->FindVector("aptwebserver::empty-response-header");
+ for (auto && 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');
for (std::vector<std::string>::const_iterator h = addheaders.begin(); h != addheaders.end(); ++h)
@@ -714,6 +717,15 @@ static void * handleClient(void * voidclient) /*{{{*/
condition.clear();
if (condition.empty() == false && strncmp(condition.c_str(), "bytes=", 6) == 0)
{
+ std::string ranges = ',' + _config->Find("aptwebserver::response-header::Accept-Ranges") + ',';
+ ranges.erase(std::remove(ranges.begin(), ranges.end(), ' '), ranges.end());
+ if (ranges.find(",bytes,") == std::string::npos)
+ {
+ // we handle it as an error here because we are a test server - a real one should just ignore it
+ sendError(client, 400, *m, sendContent, "Client does range requests we don't support", headers);
+ continue;
+ }
+
time_t cache;
std::string ifrange;
if (_config->FindB("aptwebserver::support::if-range", true) == true)
diff --git a/test/libapt/install_progress_test.cc b/test/libapt/install_progress_test.cc
index a70fc9261..b63b4716f 100644
--- a/test/libapt/install_progress_test.cc
+++ b/test/libapt/install_progress_test.cc
@@ -12,9 +12,14 @@ TEST(InstallProgressTest, FancyGetTextProgressStr)
EXPECT_EQ(60, p.GetTextProgressStr(0.5, 60).size());
EXPECT_EQ("[#.]", p.GetTextProgressStr(0.5, 4));
+ EXPECT_EQ("[..........]", p.GetTextProgressStr(0.0, 12));
EXPECT_EQ("[#.........]", p.GetTextProgressStr(0.1, 12));
+ EXPECT_EQ("[####......]", p.GetTextProgressStr(0.4999, 12));
+ EXPECT_EQ("[#####.....]", p.GetTextProgressStr(0.5001, 12));
EXPECT_EQ("[#########.]", p.GetTextProgressStr(0.9, 12));
+ EXPECT_EQ("[##########]", p.GetTextProgressStr(1.0, 12));
// deal with incorrect inputs gracefully (or should we die instead?)
- EXPECT_EQ("", p.GetTextProgressStr(-999, 12));
+ EXPECT_EQ("[..........]", p.GetTextProgressStr(-1.0, 12));
+ EXPECT_EQ("[##########]", p.GetTextProgressStr(2.0, 12));
}
diff --git a/test/libapt/srvrecs_test.cc b/test/libapt/srvrecs_test.cc
index b3fa8102d..5253b1c34 100644
--- a/test/libapt/srvrecs_test.cc
+++ b/test/libapt/srvrecs_test.cc
@@ -53,12 +53,19 @@ TEST(SrvRecTest,Randomness)
EXPECT_EQ(testLength*2, base2.size());
std::vector<SrvRec> first_pull;
+ auto const startingClock = clock();
for (unsigned int i = 0; i < testLength; ++i)
first_pull.push_back(PopFromSrvRecs(base1));
EXPECT_TRUE(base1.empty());
EXPECT_FALSE(first_pull.empty());
EXPECT_EQ(testLength, first_pull.size());
+ // busy-wait for a cpu-clock change as we use it as "random" value
+ if (startingClock != -1)
+ for (int i = 0; i < 100000; ++i)
+ if (startingClock != clock())
+ break;
+
std::vector<SrvRec> second_pull;
for (unsigned int i = 0; i < testLength; ++i)
second_pull.push_back(PopFromSrvRecs(base2));
@@ -69,7 +76,8 @@ TEST(SrvRecTest,Randomness)
EXPECT_EQ(first_pull.size(), second_pull.size());
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; }));
- EXPECT_FALSE(std::equal(first_pull.begin(), first_pull.end(), second_pull.begin()));
+ 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/stringview_test.cc b/test/libapt/stringview_test.cc
index a4b7d77e3..f215287d9 100644
--- a/test/libapt/stringview_test.cc
+++ b/test/libapt/stringview_test.cc
@@ -34,26 +34,28 @@ TEST(StringViewTest,EmptyString)
TEST(StringViewTest,FooString)
{
- constexpr APT::StringView defString("foo", 3);
+ constexpr APT::StringView defString("fooGARBAGE", 3);
static_assert( 3 == defString.length(), "def right size");
- EXPECT_EQ(defString.to_string(), defString.data());
+ EXPECT_EQ(0, defString.to_string().compare(0, defString.length(), defString.data(), 3));
APT::StringView strString{std::string{"foo"}};
EXPECT_EQ(3, strString.length());
- EXPECT_EQ(strString.to_string(), strString.data());
+ EXPECT_EQ(0, strString.to_string().compare(0, strString.length(), strString.data(), 3));
- constexpr char const * const charp = "foo";
+ constexpr char const * const charp = "fooGARBAGE";
constexpr APT::StringView charpString{charp, 3};
- EXPECT_EQ( 3, charpString.length());
- EXPECT_EQ(charpString.to_string(), charpString.data());
+ EXPECT_EQ(3, charpString.length());
+ EXPECT_EQ(0, charpString.to_string().compare(0, charpString.length(), charpString.data(), 3));
- APT::StringView charp2String{charp};
+ char * charp2 = strdup("foo");
+ APT::StringView charp2String{charp2};
EXPECT_EQ(3, charp2String.length());
- EXPECT_EQ(charp2String.to_string(), charp2String.data());
+ EXPECT_EQ(0, charp2String.to_string().compare(0, charp2String.length(), charp2String.data(), 3));
+ free(charp2);
const APT::StringView charaString{"foo"};
EXPECT_EQ(3, charaString.length());
- EXPECT_EQ(charaString.to_string(), charaString.data());
+ EXPECT_EQ(0, charaString.to_string().compare(0, charaString.length(), charaString.data(), 3));
EXPECT_TRUE(APT::StringView("foo") == "foo");
EXPECT_FALSE(APT::StringView("foo") != "foo");