* cmdline/apt-get.cc:
authorMichael Vogt <michael.vogt@ubuntu.com>
Wed, 23 Dec 2009 13:11:59 +0000 (14:11 +0100)
committerMichael Vogt <michael.vogt@ubuntu.com>
Wed, 23 Dec 2009 13:11:59 +0000 (14:11 +0100)
  - fix apt-get source pkg=version regression (closes: #561971)

cmdline/apt-get.cc
debian/changelog

index f84c82d..dede013 100644 (file)
@@ -1299,31 +1299,41 @@ pkgSrcRecords::Parser *FindSrc(const char *Name,pkgRecords &Recs,
               {
                  pkgRecords::Parser &Parse = Recs.Lookup(VF);
                  Src = Parse.SourcePkg();
+                 // no SourcePkg name, so it is the "binary" name
+                 if (Src.empty() == true)
+                    Src = TmpSrc;
+                 // no Version, so we try the Version of the SourcePkg -
+                 // and after that the version of the binary package
                  if (VerTag.empty() == true)
                     VerTag = Parse.SourceVer();
+                 if (VerTag.empty() == true)
+                    VerTag = Ver.VerStr();
                  break;
               }
            }
+           if (Src.empty() == false)
+              break;
         }
         if (Src.empty() == true) 
         {
-           if (VerTag.empty() == false)
-              _error->Warning(_("Ignore unavailable version '%s' of package '%s'"), VerTag.c_str(), TmpSrc.c_str());
-           else
+           // Sources files have no codename information
+           if (VerTag.empty() == true && DefRel.empty() == false)
               _error->Warning(_("Ignore unavailable target release '%s' of package '%s'"), DefRel.c_str(), TmpSrc.c_str());
-           VerTag.clear();
            DefRel.clear();
         }
       }
-      if (VerTag.empty() == true && DefRel.empty() == true) 
+      if (Src.empty() == true)
       {
-        // if we don't have a version or default release, use the CandidateVer to find the Source
+        // if we don't have found a fitting package yet so we will
+        // choose a good candidate and proceed with that.
+        // Maybe we will find a source later on with the right VerTag
         pkgCache::VerIterator Ver = Cache.GetCandidateVer(Pkg);
         if (Ver.end() == false) 
         {
            pkgRecords::Parser &Parse = Recs.Lookup(Ver.FileList());
            Src = Parse.SourcePkg();
-           VerTag = Parse.SourceVer();
+           if (VerTag.empty() == true)
+              VerTag = Parse.SourceVer();
         }
       }
    }
index eb50b4c..03a467c 100644 (file)
@@ -3,6 +3,8 @@ apt (0.7.25.1) UNRELEASED; urgency=low
   * merged lp:~mvo/apt/history
     - this writes a /var/log/apt/history tagfile that contains details
       from the transaction (complements term.log)
+  * cmdline/apt-get.cc:
+    - fix apt-get source pkg=version regression (closes: #561971)
 
  -- Michael Vogt <michael.vogt@ubuntu.com>  Fri, 18 Dec 2009 16:54:18 +0100