]> git.saurik.com Git - apt.git/commitdiff
* basic error reporting from apt in place now (ReportMirrorFailures())
authorMichael Vogt <michael.vogt@ubuntu.com>
Wed, 17 Jan 2007 15:35:56 +0000 (16:35 +0100)
committerMichael Vogt <michael.vogt@ubuntu.com>
Wed, 17 Jan 2007 15:35:56 +0000 (16:35 +0100)
apt-pkg/acquire-item.cc
apt-pkg/acquire-item.h
apt-pkg/acquire-method.cc
apt-pkg/acquire-method.h
methods/mirror.cc
methods/mirror.h
po/apt-all.pot

index 8ec4ba2c0b6c2b4d5fb229201e6b7e61a004d024..7b2a897638dd41170fade094411028bd34a25886 100644 (file)
@@ -176,7 +176,8 @@ string pkgAcqIndex::Custom600Headers()
    struct stat Buf;
    if (stat(Final.c_str(),&Buf) != 0)
       return "\nIndex-File: true";
-   
+   if(ExpectedMD5 != "")
+      return "\nExpectedMD5: " + ExpectedMD5;
    return "\nIndex-File: true\nLast-Modified: " + TimeRFC1123(Buf.st_mtime);
 }
                                                                        /*}}}*/
@@ -1015,6 +1016,13 @@ void pkgAcqArchive::Failed(string Message,pkgAcquire::MethodConfig *Cnf)
    }
 }
                                                                        /*}}}*/
+// ---------------------------------------------------------------------
+string pkgAcqArchive::Custom600Headers()
+{
+   if(MD5 != "")
+      return "\nExpectedMD5: " + MD5;
+   return "";
+}
 // AcqArchive::IsTrusted - Determine whether this archive comes from a
 // trusted source                                                      /*{{{*/
 // ---------------------------------------------------------------------
index da1bea801d7310557691a9d2470ffa2bf033466b..c9cd75321f5c227b4975ff6b4954c2210d729f72 100644 (file)
@@ -205,6 +205,7 @@ class pkgAcqArchive : public pkgAcquire::Item
    virtual string ShortDesc() {return Desc.ShortDesc;};
    virtual void Finished();
    virtual bool IsTrusted();
+   virtual string Custom600Headers();
    
    pkgAcqArchive(pkgAcquire *Owner,pkgSourceList *Sources,
                 pkgRecords *Recs,pkgCache::VerIterator const &Version,
index 41b832f3babe7fc106caec319ed6daf35e39e7f6..638797657d94afaeea1775e26ad3f66696d22dec 100644 (file)
@@ -368,6 +368,7 @@ int pkgAcqMethod::Run(bool Single)
            
            Tmp->Uri = LookupTag(Message,"URI");
            Tmp->DestFile = LookupTag(Message,"FileName");
+           Tmp->ExpectedMD5 = LookupTag(Message,"ExpectedMD5");
            if (StrToTime(LookupTag(Message,"Last-Modified"),Tmp->LastModified) == false)
               Tmp->LastModified = 0;
            Tmp->IndexFile = StringToBool(LookupTag(Message,"Index-File"),false);
index e0e7c1d09b7101f1b08b1a7a11527df2a24e861b..9e908d32cf8a4a68c562d8de686e3d6eb79d524c 100644 (file)
@@ -33,6 +33,7 @@ class pkgAcqMethod
       string DestFile;
       time_t LastModified;
       bool IndexFile;
+      string ExpectedMD5;
    };
    
    struct FetchResult
index f08b324ec333a4e9f597117c4b5cb4d316268792..428726a3d197cb42ea314adb7eedbb39654de73c 100644 (file)
@@ -32,14 +32,14 @@ using namespace std;
 
 /* 
  * TODO: 
- * - send expected checksum to the mirror method so that 
-     some checking/falling back can be done here already
-     use pkgAcquire::Custom600Header() for this? what about gpgv 
-     failures?
+ * - what about gpgv  failures? better standard format for errors
+     to send back to LP
    #OR#
  * - implement it at the pkgAcquire::Item::Failed() level but then
-     we need to send back what uri exactly was failing
-
+     we need to send back what uri exactly was failing 
+     [mvo: the problem with this approach is ::Failed() is not really
+           called for all failures :/ e.g. md5sum mismatch in a archive
+           is not]
  * - deal with runing as non-root because we can't write to the lists 
      dir then -> use the cached mirror file
  * - better method to download than having a pkgAcquire interface here
@@ -214,6 +214,9 @@ bool MirrorMethod::Fetch(FetchItem *Itm)
 
 void MirrorMethod::Fail(string Err,bool Transient)
 {
+   // FIXME: queue next mirror?
+   ReportMirrorFailure(Err);
+
    if(Queue->Uri.find("http://") != string::npos)
       Queue->Uri.replace(0,Mirror.size(), BaseUri);
    pkgAcqMethod::Fail(Err, Transient);
@@ -228,11 +231,23 @@ void MirrorMethod::URIStart(FetchResult &Res)
 
 void MirrorMethod::URIDone(FetchResult &Res,FetchResult *Alt)
 {
+   // FIXME: queue next mirror?
+   if(Queue->ExpectedMD5 != "" && Res.MD5Sum != Queue->ExpectedMD5)
+      ReportMirrorFailure("499 Hash mismatch");
+
    if(Queue->Uri.find("http://") != string::npos)
       Queue->Uri.replace(0,Mirror.size(), BaseUri);
    pkgAcqMethod::URIDone(Res, Alt);
 }
 
+void MirrorMethod::ReportMirrorFailure(string FailCode)
+{
+   // report that Queue->Uri failed
+   std::cerr << "\nReportMirrorFailure: " 
+            << Queue->Uri
+            << " FailCode: " 
+            << FailCode << std::endl;
+}
 
 int main()
 {
index 798f5a9b5fd425b0d9d2cebe556cc7d9abe712b2..3ff9e1a962c19c20efa477fe64062fdc141d89c8 100644 (file)
@@ -35,6 +35,7 @@ class MirrorMethod : public HttpMethod
    bool GetMirrorFile(string uri);
    bool SelectMirror();
    bool Clean(string dir);
+   void ReportMirrorFailure(string FailCode);
    
    // we need to overwrite those to transform the url back
    virtual void Fail(string Why, bool Transient = false);
index 52fadb81c41344906156841c45d4144f9e843d80..aee5c09c8aacdbd1af4a29caf89f4caf883b4326 100644 (file)
@@ -1330,7 +1330,7 @@ msgstr ""
 
 #: apt-inst/extract.cc:467 apt-pkg/contrib/configuration.cc:750
 #: apt-pkg/contrib/cdromutl.cc:153 apt-pkg/sourcelist.cc:324
-#: apt-pkg/acquire.cc:421 apt-pkg/clean.cc:38 methods/mirror.cc:86
+#: apt-pkg/acquire.cc:421 apt-pkg/clean.cc:38 methods/mirror.cc:92
 #, c-format
 msgid "Unable to read %s"
 msgstr ""
@@ -1956,7 +1956,7 @@ msgid "Unable to stat the mount point %s"
 msgstr ""
 
 #: apt-pkg/contrib/cdromutl.cc:149 apt-pkg/acquire.cc:427 apt-pkg/clean.cc:44
-#: methods/mirror.cc:92
+#: methods/mirror.cc:98
 #, c-format
 msgid "Unable to change to %s"
 msgstr ""
@@ -2362,35 +2362,35 @@ msgstr ""
 msgid "rename failed, %s (%s -> %s)."
 msgstr ""
 
-#: apt-pkg/acquire-item.cc:236 apt-pkg/acquire-item.cc:945
+#: apt-pkg/acquire-item.cc:237 apt-pkg/acquire-item.cc:946
 msgid "MD5Sum mismatch"
 msgstr ""
 
-#: apt-pkg/acquire-item.cc:640
+#: apt-pkg/acquire-item.cc:641
 msgid "There is no public key available for the following key IDs:\n"
 msgstr ""
 
-#: apt-pkg/acquire-item.cc:753
+#: apt-pkg/acquire-item.cc:754
 #, c-format
 msgid ""
 "I wasn't able to locate a file for the %s package. This might mean you need "
 "to manually fix this package. (due to missing arch)"
 msgstr ""
 
-#: apt-pkg/acquire-item.cc:812
+#: apt-pkg/acquire-item.cc:813
 #, c-format
 msgid ""
 "I wasn't able to locate file for the %s package. This might mean you need to "
 "manually fix this package."
 msgstr ""
 
-#: apt-pkg/acquire-item.cc:848
+#: apt-pkg/acquire-item.cc:849
 #, c-format
 msgid ""
 "The package index files are corrupted. No Filename: field for package %s."
 msgstr ""
 
-#: apt-pkg/acquire-item.cc:935
+#: apt-pkg/acquire-item.cc:936
 msgid "Size mismatch"
 msgstr ""