]> git.saurik.com Git - apt.git/commitdiff
fix same-mirror redirection for Release{,.gpg} pair
authorDavid Kalnischkies <david@kalnischkies.de>
Sat, 7 May 2016 11:45:25 +0000 (13:45 +0200)
committerDavid Kalnischkies <david@kalnischkies.de>
Sat, 7 May 2016 11:45:25 +0000 (13:45 +0200)
Commit 9b8034a9fd40b4d05075fda719e61f6eb4c45678 just deals with
InRelease properly and generates broken URIs in case the mirror (or the
achieve really) has no InRelease file.

[As this was in no released version no need to clutter changelog with a
fix notice.]

Git-Dch: Ignore

apt-pkg/acquire-item.cc
test/integration/test-handle-redirect-as-used-mirror-change

index fde45e1fe9a8a37b7ceb5c9e1a4a04b36ffb0841..9b809db71d41cd55ef398a948d6dde8b500c8272 100644 (file)
@@ -344,7 +344,7 @@ bool pkgAcqTransactionItem::QueueURI(pkgAcquire::ItemDesc &Item)
    {
       // this ensures we rewrite only once and only the first step
       auto const OldBaseURI = Target.Option(IndexTarget::BASE_URI);
-      if (APT::String::Startswith(Item.URI, OldBaseURI))
+      if (OldBaseURI.empty() == false && APT::String::Startswith(Item.URI, OldBaseURI))
       {
         auto const ExtraPath = Item.URI.substr(OldBaseURI.length());
         Item.URI = flCombine(TransactionManager->BaseURI, ExtraPath);
@@ -1107,7 +1107,7 @@ bool pkgAcqMetaBase::CheckDownloadDone(pkgAcqTransactionItem * const I, const st
    {
       if (APT::String::Endswith(I->Desc.URI, "InRelease"))
         TransactionManager->BaseURI = I->Desc.URI.substr(0, I->Desc.URI.length() - strlen("InRelease"));
-      else
+      else if (APT::String::Endswith(I->Desc.URI, "Release"))
         TransactionManager->BaseURI = I->Desc.URI.substr(0, I->Desc.URI.length() - strlen("Release"));
    }
 
index b297a6f2a8dd6f5e80ea02c595f1ce7dfc0a194e..2f6431e665c309ca62e43d31137fd9263d2f69fb 100755 (executable)
@@ -9,6 +9,7 @@ configcompression '.' 'gz'
 
 buildsimplenativepackage 'unrelated' 'all' '0.5~squeeze1' 'unstable'
 
+export APT_DONT_SIGN=''
 setupaptarchive --no-update
 changetowebserver
 webserverconfig 'aptwebserver::redirect::replace::/redirectme/' "http://0.0.0.0:${APTHTTPPORT}/"
@@ -41,3 +42,23 @@ Location: http://0.0.0.0:${APTHTTPPORT}/dists/unstable/main/i18n/Translation-en.
 cd downloaded
 testsuccess apthelper download-file "http://localhost:${APTHTTPPORT}/redirectme/dists/unstable/InRelease" inrelease
 testsuccess test -s inrelease
+cd - >/dev/null
+
+find aptarchive -name 'InRelease' -delete
+rm -rf rootdir/var/lib/apt/lists
+
+testsuccessequal "Ign:1 http://0.0.0.0:${APTHTTPPORT} 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]
+Get:4 http://0.0.0.0:${APTHTTPPORT} unstable/main Sources [$(stat -c %s aptarchive/dists/unstable/main/source/Sources.gz) B]
+Get:5 http://0.0.0.0:${APTHTTPPORT} unstable/main all Packages [$(stat -c %s aptarchive/dists/unstable/main/binary-all/Packages.gz) B]
+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
+  404  Not Found
+Hit:2 http://0.0.0.0:${APTHTTPPORT} unstable Release
+Reading package lists..." aptget update
+
+