don't cleanup cdrom files in apt-get update
authorDavid Kalnischkies <david@kalnischkies.de>
Wed, 15 Oct 2014 13:56:53 +0000 (15:56 +0200)
committerDavid Kalnischkies <david@kalnischkies.de>
Wed, 15 Oct 2014 13:56:53 +0000 (15:56 +0200)
Regression from merging 801745284905e7962aa77a9f37a6b4e7fcdc19d0 and
b0f4b486e6850c5f98520ccf19da71d0ed748ae4. While fine by itself, merged
the part fixing the filename is skipped if a cdrom source is
encountered, so that our list-cleanup removes what seems to be orphaned
files.

Closes: 765458

apt-pkg/acquire-item.cc
test/integration/test-apt-cdrom

index 2401364..253cbda 100644 (file)
@@ -1144,16 +1144,12 @@ void pkgAcqIndex::Done(string Message,unsigned long long Size,string Hash,
    else
       Local = true;
 
-   // do not reverify cdrom sources as apt-cdrom may rewrite the Packages
-   // file when its doing the indexcopy
-   if (RealURI.substr(0,6) == "cdrom:" &&
-       StringToBool(LookupTag(Message,"IMS-Hit"),false) == true)
-      return;
-
    // The files timestamp matches, for non-local URLs reverify the local
    // file, for local file, uncompress again to ensure the hashsum is still
    // matching the Release file
-   if (!Local && StringToBool(LookupTag(Message,"IMS-Hit"),false) == true)
+   bool const IsCDROM = RealURI.substr(0,6) == "cdrom:";
+   if ((Local == false || IsCDROM == true) &&
+        StringToBool(LookupTag(Message,"IMS-Hit"),false) == true)
    {
       // set destfile to the final destfile
       if(_config->FindB("Acquire::GzipIndexes",false) == false)
@@ -1162,7 +1158,10 @@ void pkgAcqIndex::Done(string Message,unsigned long long Size,string Hash,
          DestFile += URItoFileName(RealURI);
       }
 
-      ReverifyAfterIMS(FileName);
+      // do not reverify cdrom sources as apt-cdrom may rewrite the Packages
+      // file when its doing the indexcopy
+      if (IsCDROM == false)
+        ReverifyAfterIMS(FileName);
       return;
    }
    string decompProg;
index 8d8fdf1..44eccb7 100755 (executable)
@@ -66,22 +66,51 @@ CD_LABEL="$(echo "$ident" | grep "^Stored label:" | head -n1 | sed "s/^[^:]*: //
 testequal "CD::${CD_ID} \"${CD_LABEL}\";
 CD::${CD_ID}::Label \"${CD_LABEL}\";" cat rootdir/var/lib/apt/cdroms.list
 
-testequal 'Reading package lists...
+testcdromusage() {
+       touch rootdir/var/lib/apt/extended_states
+
+       testequal 'Reading package lists...
 Building dependency tree...
+Reading state information...
 The following NEW packages will be installed:
   testing
 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
 Inst testing (0.8.15 stable [amd64])
 Conf testing (0.8.15 stable [amd64])' aptget install testing -s
 
-testequal 'Reading package lists...
+       testdpkgnotinstalled testing
+       testsuccess aptget install testing -y
+       testdpkginstalled testing
+       testsuccess aptget purge testing -y
+       testdpkgnotinstalled testing
+
+       testequal 'Reading package lists...
 Building dependency tree...
+Reading state information...
 The following NEW packages will be installed:
   testing:i386
 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
 Inst testing:i386 (0.8.15 stable [i386])
 Conf testing:i386 (0.8.15 stable [i386])' aptget install testing:i386 -s
 
+       testdpkgnotinstalled testing:i386
+       testsuccess aptget install testing:i386 -y
+       testdpkginstalled testing:i386
+       testsuccess aptget purge testing:i386 -y
+       testdpkgnotinstalled testing:i386
+
+       rm -f testing_0.8.15_amd64.deb
+       testsuccess aptget download testing
+       testsuccess test -s testing_0.8.15_amd64.deb
+       rm -f testing_0.8.15_amd64.deb
+
+       rm -f testing_0.8.15.dsc
+       testsuccess aptget source testing --dsc-only -d
+       testsuccess test -s testing_0.8.15.dsc
+       rm -f testing_0.8.15.dsc
+}
+testcdromusage
+
 # check Idempotence of apt-cdrom (and disabling of Translation dropping)
 testequal "$CDROM_PRE
 Found 2 package indexes, 1 source indexes, 2 translation indexes and 1 signatures
@@ -101,7 +130,15 @@ $CDROM_POST" aptcdromlog add
 msgtest 'Test for the english description translation of' 'testing'
 aptcache show testing -o Acquire::Languages=en | grep -q '^Description-en: ' && msgpass || msgfail
 
-# check that we really can install from a 'cdrom'
-testdpkgnotinstalled testing
-testsuccess aptget install testing -y
-testdpkginstalled testing
+# ensure cdrom method isn't trying to mount the cdrom
+mv rootdir/media/cdrom-unmounted rootdir/media/cdrom-ejected
+# ensure an update doesn't mess with cdrom sources
+testsuccess aptget update
+testfileequal rootdir/tmp/testsuccess.output 'Reading package lists...'
+mv rootdir/media/cdrom-ejected rootdir/media/cdrom-unmounted
+testcdromusage
+
+# and again to check that it withstands the temptation even if it could mount
+testsuccess aptget update
+testfileequal rootdir/tmp/testsuccess.output 'Reading package lists...'
+testcdromusage