Преглед изворни кода

ensure compression cleanup even without lists-cleanup

If we store files compressed in lists/ and the file switched compression
formats we happened to retain the "old" format, but by default the
cleanup process catched this oversight and removed the file.
[The initial situation described doesn't arise as we store no files by
default compressed and even with apt-file configuring Contents files, we
don't really have that problem as there is just .gz files for those.]

We solve this by just removing any uncompressed as well as compressed
(we support) file just before we move the 'new' version of the file in.
David Kalnischkies пре 10 година
родитељ
комит
1866240123
1 измењених фајлова са 32 додато и 5 уклоњено
  1. 32 5
      apt-pkg/acquire-item.cc

+ 32 - 5
apt-pkg/acquire-item.cc

@@ -388,16 +388,43 @@ bool pkgAcqTransactionItem::TransactionState(TransactionStates const state)
 	 }
 	 break;
       case TransactionCommit:
-	 if(PartialFile != "")
+	 if(PartialFile.empty() == false)
 	 {
-	    if(Debug == true)
-	       std::clog << "mv " << PartialFile << " -> "<< DestFile << " # " << DescURI() << std::endl;
+	    if (PartialFile != DestFile)
+	    {
+	       // ensure that even without lists-cleanup all compressions are nuked
+	       std::string FinalFile = GetFinalFileNameFromURI(Target.URI);
+	       if (FileExists(FinalFile))
+	       {
+		  if(Debug == true)
+		     std::clog << "rm " << FinalFile << " # " << DescURI() << std::endl;
+		  if (RemoveFile("TransactionStates-Cleanup", FinalFile) == false)
+		     return false;
+	       }
+	       for (auto const &ext: APT::Configuration::getCompressorExtensions())
+	       {
+		  auto const Final = FinalFile + ext;
+		  if (FileExists(Final))
+		  {
+		     if(Debug == true)
+			std::clog << "rm " << Final << " # " << DescURI() << std::endl;
+		     if (RemoveFile("TransactionStates-Cleanup", Final) == false)
+			return false;
+		  }
+	       }
+	       if(Debug == true)
+		  std::clog << "mv " << PartialFile << " -> "<< DestFile << " # " << DescURI() << std::endl;
+	       if (Rename(PartialFile, DestFile) == false)
+		  return false;
+	    }
+	    else if(Debug == true)
+	       std::clog << "keep " << PartialFile << " # " << DescURI() << std::endl;
 
-	    Rename(PartialFile, DestFile);
 	 } else {
 	    if(Debug == true)
 	       std::clog << "rm " << DestFile << " # " << DescURI() << std::endl;
-	    RemoveFile("TransactionCommit", DestFile);
+	    if (RemoveFile("TransactionCommit", DestFile) == false)
+	       return false;
 	 }
 	 break;
    }