Kaynağa Gözat

* apt-pkg/cdrom.cc:
- support InRelease files on cdrom

David Kalnischkies 14 yıl önce
ebeveyn
işleme
212080b87d
3 değiştirilmiş dosya ile 26 ekleme ve 8 silme
  1. 2 2
      apt-pkg/cdrom.cc
  2. 21 5
      apt-pkg/indexcopy.cc
  3. 3 1
      debian/changelog

+ 2 - 2
apt-pkg/cdrom.cc

@@ -68,12 +68,11 @@ bool pkgCdrom::FindPackages(string CD,
    if (RealFileExists(".aptignr") == true)
       return true;
 
-
    /* Check _first_ for a signature file as apt-cdrom assumes that all files
       under a Packages/Source file are in control of that file and stops 
       the scanning
    */
-   if (RealFileExists("Release.gpg") == true)
+   if (RealFileExists("Release.gpg") == true || RealFileExists("InRelease") == true)
    {
       SigList.push_back(CD);
    }
@@ -718,6 +717,7 @@ bool pkgCdrom::Add(pkgCdromStatus *log)					/*{{{*/
    DropRepeats(List,"Packages");
    DropRepeats(SourceList,"Sources");
    DropRepeats(SigList,"Release.gpg");
+   DropRepeats(SigList,"InRelease");
    DropRepeats(TransList,"");
    if(log != NULL) {
       msg.str("");

+ 21 - 5
apt-pkg/indexcopy.cc

@@ -638,13 +638,19 @@ bool SigVerify::CopyAndVerify(string CDROM,string Name,vector<string> &SigList,
 
       string const releasegpg = *I+"Release.gpg";
       string const release = *I+"Release";
+      string const inrelease = *I+"InRelease";
+      bool useInRelease = true;
 
       // a Release.gpg without a Release should never happen
-      if(RealFileExists(release) == false)
+      if (RealFileExists(inrelease) == true)
+	 ;
+      else if(RealFileExists(release) == false || RealFileExists(releasegpg) == false)
       {
 	 delete MetaIndex;
 	 continue;
       }
+      else
+	 useInRelease = false;
 
       pid_t pid = ExecFork();
       if(pid < 0) {
@@ -652,11 +658,16 @@ bool SigVerify::CopyAndVerify(string CDROM,string Name,vector<string> &SigList,
 	 return false;
       }
       if(pid == 0)
-	 RunGPGV(release, releasegpg);
+      {
+	 if (useInRelease == true)
+	    RunGPGV(inrelease, inrelease);
+	 else
+	    RunGPGV(release, releasegpg);
+      }
 
       if(!ExecWait(pid, "gpgv")) {
 	 _error->Warning("Signature verification failed for: %s",
-			 releasegpg.c_str());
+			 (useInRelease ? inrelease.c_str() : releasegpg.c_str()));
 	 // something went wrong, don't copy the Release.gpg
 	 // FIXME: delete any existing gpg file?
 	 continue;
@@ -686,8 +697,13 @@ bool SigVerify::CopyAndVerify(string CDROM,string Name,vector<string> &SigList,
       delete MetaIndex;
    
       // everything was fine, copy the Release and Release.gpg file
-      CopyMetaIndex(CDROM, Name, prefix, "Release");
-      CopyMetaIndex(CDROM, Name, prefix, "Release.gpg");
+      if (useInRelease == true)
+	 CopyMetaIndex(CDROM, Name, prefix, "InRelease");
+      else
+      {
+	 CopyMetaIndex(CDROM, Name, prefix, "Release");
+	 CopyMetaIndex(CDROM, Name, prefix, "Release.gpg");
+      }
    }   
 
    return true;

+ 3 - 1
debian/changelog

@@ -31,8 +31,10 @@ apt (0.8.16~exp9) UNRELEASED; urgency=low
     - dump the APT::Compressor settings correctly and completely
   * apt-pkg/contrib/fileutl.{h,cc}:
     - implement a ModificationTime method for FileFd
+  * apt-pkg/cdrom.cc:
+    - support InRelease files on cdrom
 
- -- David Kalnischkies <kalnischkies@gmail.com>  Sat, 10 Dec 2011 20:02:29 +0100
+ -- David Kalnischkies <kalnischkies@gmail.com>  Sun, 11 Dec 2011 01:30:12 +0100
 
 apt (0.8.16~exp8) experimental; urgency=low