summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Vogt <mvo@ubuntu.com>2014-11-06 08:57:59 +0100
committerMichael Vogt <mvo@ubuntu.com>2014-11-06 08:57:59 +0100
commitf8fac12c5fa287476b781c96807baaa534ef8f76 (patch)
tree222dd450a4bad958edc608ec575f27aed07ae68a
parent23e1a70b47329088a8f83bd94f5e774954c4c56a (diff)
parent9397ea947c23c0957a683152360909810340abce (diff)
downloadapt-f8fac12c5fa287476b781c96807baaa534ef8f76.tar.gz
Merge remote-tracking branch 'mvo/feature/no-more-acquire-guessing' into debian/experimental
-rw-r--r--apt-pkg/acquire-item.cc158
-rw-r--r--apt-pkg/acquire-item.h37
-rw-r--r--apt-pkg/deb/debindexfile.cc13
-rw-r--r--apt-pkg/deb/debindexfile.h1
-rwxr-xr-xtest/integration/test-apt-update-filesize-mismatch13
-rwxr-xr-xtest/integration/test-apt-update-hashsum-mismatch13
-rwxr-xr-xtest/integration/test-bug-595691-empty-and-broken-archive-files10
-rwxr-xr-xtest/integration/test-bug-624218-Translation-file-handling14
8 files changed, 55 insertions, 204 deletions
diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc
index f684e81f1..605ca7ae4 100644
--- a/apt-pkg/acquire-item.cc
+++ b/apt-pkg/acquire-item.cc
@@ -1260,6 +1260,9 @@ string pkgAcqIndex::Custom600Headers() const
if (stat(Final.c_str(),&Buf) == 0)
msg += "\nLast-Modified: " + TimeRFC1123(Buf.st_mtime);
+ if(Target->IsOptional())
+ msg += "\nFail-Ignore: true";
+
return msg;
}
/*}}}*/
@@ -1283,8 +1286,12 @@ void pkgAcqIndex::Failed(string Message,pkgAcquire::MethodConfig *Cnf)
unlink(EraseFileName.c_str());
}
- /// cancel the entire transaction
- TransactionManager->AbortTransaction();
+ Item::Failed(Message,Cnf);
+
+ if(Target->IsOptional() && ExpectedHashes.empty() && Stage == STAGE_DOWNLOAD)
+ Status = StatDone;
+ else
+ TransactionManager->AbortTransaction();
}
/*}}}*/
// pkgAcqIndex::GetFinalFilename - Return the full final file path /*{{{*/
@@ -1476,57 +1483,6 @@ void pkgAcqIndex::StageDecompressDone(string Message,
return;
}
/*}}}*/
-// AcqIndexTrans::pkgAcqIndexTrans - Constructor /*{{{*/
-// ---------------------------------------------------------------------
-/* The Translation file is added to the queue */
-pkgAcqIndexTrans::pkgAcqIndexTrans(pkgAcquire *Owner,
- string URI,string URIDesc,string ShortDesc)
- : pkgAcqIndex(Owner, URI, URIDesc, ShortDesc, HashStringList())
-{
-}
-pkgAcqIndexTrans::pkgAcqIndexTrans(pkgAcquire *Owner,
- pkgAcqMetaBase *TransactionManager,
- IndexTarget const * const Target,
- HashStringList const &ExpectedHashes,
- indexRecords *MetaIndexParser)
- : pkgAcqIndex(Owner, TransactionManager, Target, ExpectedHashes, MetaIndexParser)
-{
-}
- /*}}}*/
-// AcqIndexTrans::Custom600Headers - Insert custom request headers /*{{{*/
-string pkgAcqIndexTrans::Custom600Headers() const
-{
- string Final = GetFinalFilename();
-
- struct stat Buf;
- if (stat(Final.c_str(),&Buf) != 0)
- return "\nFail-Ignore: true\nIndex-File: true";
- return "\nFail-Ignore: true\nIndex-File: true\nLast-Modified: " + TimeRFC1123(Buf.st_mtime);
-}
- /*}}}*/
-// AcqIndexTrans::Failed - Silence failure messages for missing files /*{{{*/
-void pkgAcqIndexTrans::Failed(string Message,pkgAcquire::MethodConfig *Cnf)
-{
- Item::Failed(Message,Cnf);
-
- size_t const nextExt = CompressionExtensions.find(' ');
- if (nextExt != std::string::npos)
- {
- CompressionExtensions = CompressionExtensions.substr(nextExt+1);
- Init(RealURI, Desc.Description, Desc.ShortDesc);
- Status = StatIdle;
- return;
- }
-
- // FIXME: this is used often (e.g. in pkgAcqIndexTrans) so refactor
- if (Cnf->LocalOnly == true ||
- StringToBool(LookupTag(Message,"Transient-Failure"),false) == false)
- {
- // Ignore this
- Status = StatDone;
- }
-}
- /*}}}*/
// AcqMetaBase::Add - Add a item to the current Transaction /*{{{*/
void pkgAcqMetaBase::Add(Item *I)
{
@@ -1973,87 +1929,59 @@ bool pkgAcqMetaBase::CheckDownloadDone(const std::string &Message,
/*}}}*/
void pkgAcqMetaBase::QueueIndexes(bool verify) /*{{{*/
{
- bool transInRelease = false;
- {
- std::vector<std::string> const keys = MetaIndexParser->MetaKeys();
- for (std::vector<std::string>::const_iterator k = keys.begin(); k != keys.end(); ++k)
- // FIXME: Feels wrong to check for hardcoded string here, but what should we do elseā€¦
- if (k->find("Translation-") != std::string::npos)
- {
- transInRelease = true;
- break;
- }
- }
-
// at this point the real Items are loaded in the fetcher
ExpectedAdditionalItems = 0;
- for (vector <IndexTarget*>::const_iterator Target = IndexTargets->begin();
+
+ vector <struct IndexTarget*>::const_iterator Target;
+ for (Target = IndexTargets->begin();
Target != IndexTargets->end();
++Target)
{
HashStringList ExpectedIndexHashes;
const indexRecords::checkSum *Record = MetaIndexParser->Lookup((*Target)->MetaKey);
- bool compressedAvailable = false;
- if (Record == NULL)
+
+ // optional target that we do not have in the Release file are
+ // skipped
+ if (verify == true && Record == NULL && (*Target)->IsOptional())
+ continue;
+
+ // targets without a hash record are a error when verify is required
+ if (verify == true && Record == NULL)
{
- if ((*Target)->IsOptional() == true)
- {
- std::vector<std::string> types = APT::Configuration::getCompressionTypes();
- for (std::vector<std::string>::const_iterator t = types.begin(); t != types.end(); ++t)
- if (MetaIndexParser->Exists((*Target)->MetaKey + "." + *t) == true)
- {
- compressedAvailable = true;
- break;
- }
- }
- else if (verify == true)
- {
- Status = StatAuthError;
- strprintf(ErrorText, _("Unable to find expected entry '%s' in Release file (Wrong sources.list entry or malformed file)"), (*Target)->MetaKey.c_str());
- return;
- }
+ Status = StatAuthError;
+ strprintf(ErrorText, _("Unable to find expected entry '%s' in Release file (Wrong sources.list entry or malformed file)"), (*Target)->MetaKey.c_str());
+ return;
}
- else
+
+ if (Record)
+ ExpectedIndexHashes = Record->Hashes;
+
+ if (_config->FindB("Debug::pkgAcquire::Auth", false))
{
- ExpectedIndexHashes = Record->Hashes;
- if (_config->FindB("Debug::pkgAcquire::Auth", false))
- {
- std::cerr << "Queueing: " << (*Target)->URI << std::endl
- << "Expected Hash:" << std::endl;
- for (HashStringList::const_iterator hs = ExpectedIndexHashes.begin(); hs != ExpectedIndexHashes.end(); ++hs)
- std::cerr << "\t- " << hs->toStr() << std::endl;
- std::cerr << "For: " << Record->MetaKeyFilename << std::endl;
- }
- if (verify == true && ExpectedIndexHashes.empty() == true && (*Target)->IsOptional() == false)
- {
- Status = StatAuthError;
- strprintf(ErrorText, _("Unable to find hash sum for '%s' in Release file"), (*Target)->MetaKey.c_str());
- return;
- }
- }
+ std::cerr << "Queueing: " << (*Target)->URI << std::endl
+ << "Expected Hash:" << std::endl;
+ for (HashStringList::const_iterator hs = ExpectedIndexHashes.begin(); hs != ExpectedIndexHashes.end(); ++hs)
+ std::cerr << "\t- " << hs->toStr() << std::endl;
+ std::cerr << "For: " << Record->MetaKeyFilename << std::endl;
- if ((*Target)->IsOptional() == true)
+ }
+ if (verify == true && ExpectedIndexHashes.empty() == true)
{
- if (transInRelease == false || Record != NULL || compressedAvailable == true)
- {
- if (_config->FindB("Acquire::PDiffs",true) == true && transInRelease == true &&
- MetaIndexParser->Exists((*Target)->MetaKey + ".diff/Index") == true)
- new pkgAcqDiffIndex(Owner, TransactionManager, *Target, ExpectedIndexHashes, MetaIndexParser);
- else
- new pkgAcqIndexTrans(Owner, TransactionManager, *Target, ExpectedIndexHashes, MetaIndexParser);
- }
- continue;
+ Status = StatAuthError;
+ strprintf(ErrorText, _("Unable to find hash sum for '%s' in Release file"), (*Target)->MetaKey.c_str());
+ return;
}
- /* Queue Packages file (either diff or full packages files, depending
+ /* Queue the Index file (Packages, Sources, Translation-$foo
+ (either diff or full packages files, depending
on the users option) - we also check if the PDiff Index file is listed
in the Meta-Index file. Ideal would be if pkgAcqDiffIndex would test this
instead, but passing the required info to it is to much hassle */
if(_config->FindB("Acquire::PDiffs",true) == true && (verify == false ||
- MetaIndexParser->Exists((*Target)->MetaKey + ".diff/Index") == true))
- new pkgAcqDiffIndex(Owner, TransactionManager, *Target, ExpectedIndexHashes, MetaIndexParser);
+ MetaIndexParser->Exists((*Target)->MetaKey + ".diff/Index") == true))
+ new pkgAcqDiffIndex(Owner, TransactionManager, *Target, ExpectedIndexHashes, MetaIndexParser);
else
- new pkgAcqIndex(Owner, TransactionManager, *Target, ExpectedIndexHashes, MetaIndexParser);
+ new pkgAcqIndex(Owner, TransactionManager, *Target, ExpectedIndexHashes, MetaIndexParser);
}
}
/*}}}*/
diff --git a/apt-pkg/acquire-item.h b/apt-pkg/acquire-item.h
index ff1bf563a..10d7e6a09 100644
--- a/apt-pkg/acquire-item.h
+++ b/apt-pkg/acquire-item.h
@@ -1027,43 +1027,6 @@ class pkgAcqIndex : public pkgAcqBaseIndex
std::string const &ShortDesc);
};
/*}}}*/
-/** \brief An acquire item that is responsible for fetching a {{{
- * translated index file.
- *
- * The only difference from pkgAcqIndex is that transient failures
- * are suppressed: no error occurs if the translated index file is
- * missing.
- */
-class pkgAcqIndexTrans : public pkgAcqIndex
-{
- void *d;
-
- public:
-
- virtual void Failed(std::string Message,pkgAcquire::MethodConfig *Cnf);
- virtual std::string Custom600Headers() const;
-
- /** \brief Create a pkgAcqIndexTrans.
- *
- * \param Owner The pkgAcquire object with which this item is
- * associated.
- *
- * \param URI The URI of the index file that is to be downloaded.
- *
- * \param URIDesc A "URI-style" description of this index file.
- *
- * \param ShortDesc A brief description of this index file.
- */
- pkgAcqIndexTrans(pkgAcquire *Owner,
- std::string URI,std::string URIDesc,
- std::string ShortDesc);
- pkgAcqIndexTrans(pkgAcquire *Owner,
- pkgAcqMetaBase *TransactionManager,
- IndexTarget const * const Target,
- HashStringList const &ExpectedHashes,
- indexRecords *MetaIndexParser);
-};
- /*}}}*/
/** \brief Information about an index file. */ /*{{{*/
class IndexTarget
{
diff --git a/apt-pkg/deb/debindexfile.cc b/apt-pkg/deb/debindexfile.cc
index cc1d94d81..335f9d36e 100644
--- a/apt-pkg/deb/debindexfile.cc
+++ b/apt-pkg/deb/debindexfile.cc
@@ -452,19 +452,6 @@ string debTranslationsIndex::IndexURI(const char *Type) const
return Res;
}
/*}}}*/
-// TranslationsIndex::GetIndexes - Fetch the index files /*{{{*/
-// ---------------------------------------------------------------------
-/* */
-bool debTranslationsIndex::GetIndexes(pkgAcquire *Owner) const
-{
- string const TranslationFile = string("Translation-").append(Language);
- new pkgAcqIndexTrans(Owner, IndexURI(Language),
- Info(TranslationFile.c_str()),
- TranslationFile);
-
- return true;
-}
- /*}}}*/
// TranslationsIndex::Describe - Give a descriptive path to the index /*{{{*/
// ---------------------------------------------------------------------
/* This should help the user find the index in the sources.list and
diff --git a/apt-pkg/deb/debindexfile.h b/apt-pkg/deb/debindexfile.h
index e5a1a7873..d727d9547 100644
--- a/apt-pkg/deb/debindexfile.h
+++ b/apt-pkg/deb/debindexfile.h
@@ -114,7 +114,6 @@ class debTranslationsIndex : public pkgIndexFile
// Interface for acquire
virtual std::string Describe(bool Short) const;
- virtual bool GetIndexes(pkgAcquire *Owner) const;
// Interface for the Cache Generator
virtual bool Exists() const;
diff --git a/test/integration/test-apt-update-filesize-mismatch b/test/integration/test-apt-update-filesize-mismatch
index b484c5161..f78b83b5f 100755
--- a/test/integration/test-apt-update-filesize-mismatch
+++ b/test/integration/test-apt-update-filesize-mismatch
@@ -38,16 +38,11 @@ for get in $(sed -n 's#^GET /\([^ ]\+\.gz\) HTTP.\+$#\1#p' aptarchive/webserver.
done
signreleasefiles
- TEST='testfailure'
- if expr match "$COMPRESSFILE" '^.*Translation-.*$' >/dev/null; then
- TEST='testsuccess'
- unset COMPRESSFILE
- fi
- $TEST aptget update -o Debug::pkgAcquire::Worker=1
- cp rootdir/tmp/${TEST}.output rootdir/tmp/update.output
+ testfailure aptget update -o Debug::pkgAcquire::Worker=1
+ cp rootdir/tmp/testfailure.output rootdir/tmp/update.output
testsuccess grep -E "$(basename -s '.gz' "$COMPRESSFILE").*Hash Sum mismatch" rootdir/tmp/update.output
- $TEST aptcache show foo
- $TEST aptget install foo -s
+ testfailure aptcache show foo
+ testfailure aptget install foo -s
testfailure aptcache show bar
testfailure aptget install bar -s
diff --git a/test/integration/test-apt-update-hashsum-mismatch b/test/integration/test-apt-update-hashsum-mismatch
index 747418c53..c2c5b3887 100755
--- a/test/integration/test-apt-update-hashsum-mismatch
+++ b/test/integration/test-apt-update-hashsum-mismatch
@@ -33,16 +33,11 @@ for get in $(sed -n 's#^GET /\([^ ]\+\.gz\) HTTP.\+$#\1#p' aptarchive/webserver.
webserverconfig 'aptwebserver::overwrite' ''
webserverconfig "aptwebserver::overwrite::$(printf '%s' "${get}" | sed 's#/#%2F#g' )::filename" '%2FDoctorEvil.gz'
- TEST='testfailure'
- if expr match "$get" '^.*Translation-.*$' >/dev/null; then
- TEST='testsuccess'
- unset get
- fi
- $TEST aptget update
- cp rootdir/tmp/${TEST}.output rootdir/tmp/update.output
+ testfailure aptget update
+ cp rootdir/tmp/testfailure.output rootdir/tmp/update.output
testsuccess grep -E "$(basename -s '.gz' "$get").*Hash Sum mismatch" rootdir/tmp/update.output
- $TEST aptcache show foo
- $TEST aptget install foo -s
+ testfailure aptcache show foo
+ testfailure aptget install foo -s
testfailure aptcache show bar
testfailure aptget install bar -s
diff --git a/test/integration/test-bug-595691-empty-and-broken-archive-files b/test/integration/test-bug-595691-empty-and-broken-archive-files
index fedf82c92..bca07268c 100755
--- a/test/integration/test-bug-595691-empty-and-broken-archive-files
+++ b/test/integration/test-bug-595691-empty-and-broken-archive-files
@@ -73,16 +73,6 @@ E: Some index files failed to download. They have been ignored, or old ones used
testoverhttp() {
forcecompressor "$1"
- createemptyfile 'en'
- testaptgetupdate "Get: http://localhost:8080 Packages []
-Get: http://localhost:8080 Translation-en
-Reading package lists..." "empty file en.$COMPRESS over http"
-
- createemptyarchive 'en'
- testaptgetupdate "Get: http://localhost:8080 Packages []
-Get: http://localhost:8080 Translation-en []
-Reading package lists..." "empty archive en.$COMPRESS over http"
-
createemptyarchive 'Packages'
testaptgetupdate "Get: http://localhost:8080 Packages []
Reading package lists..." "empty archive Packages.$COMPRESS over http"
diff --git a/test/integration/test-bug-624218-Translation-file-handling b/test/integration/test-bug-624218-Translation-file-handling
index d3c5b08ac..d32bd513b 100755
--- a/test/integration/test-bug-624218-Translation-file-handling
+++ b/test/integration/test-bug-624218-Translation-file-handling
@@ -47,16 +47,10 @@ translationslisted() {
translationslisted 'with full Index'
-# only compressed files available (as it happens on CD-ROM)
-sed -i '/i18n\/Translation-[^.]*$/ d' $(find aptarchive -name 'Release')
-signreleasefiles
-
-translationslisted 'with partial Index'
-
-
-# no records at all about Translation files (fallback to guessing)
-sed -i '/i18n\/Translation-.*$/ d' $(find aptarchive -name 'Release')
-signreleasefiles
+# No Release file at all, so no records about Translation files
+# (fallback to guessing)
+find aptarchive -name 'Release' -or -name 'InRelease' | xargs rm -f
+configallowinsecurerepositories "true";
msgtest 'Download of en as forced language' 'without Index'
aptget update -o Acquire::Languages=en | grep -q -e 'Translation-en ' && msgpass || msgfail