ソースを参照

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;
    }