]> git.saurik.com Git - apt.git/commitdiff
* merged with auto-mark
authorMichael Vogt <michael.vogt@ubuntu.com>
Wed, 26 Jul 2006 09:00:06 +0000 (11:00 +0200)
committerMichael Vogt <michael.vogt@ubuntu.com>
Wed, 26 Jul 2006 09:00:06 +0000 (11:00 +0200)
1  2 
cmdline/apt-get.cc

diff --combined cmdline/apt-get.cc
index d190e8adffcc3b3f9bf90f3be9f5bb7c817b5968,ad4da133f85e93967dd1e514fdfb0fceb0e886fd..a723174ab47998339634ad408611350b851e4400
@@@ -1356,29 -1356,20 +1356,29 @@@ bool DoUpdate(CommandLine &CmdL
        return false;
  
     bool Failed = false;
 +   bool TransientNetworkFailure = false;
     for (pkgAcquire::ItemIterator I = Fetcher.ItemsBegin(); I != Fetcher.ItemsEnd(); I++)
     {
        if ((*I)->Status == pkgAcquire::Item::StatDone)
         continue;
  
        (*I)->Finished();
 -      
 +
        fprintf(stderr,_("Failed to fetch %s  %s\n"),(*I)->DescURI().c_str(),
              (*I)->ErrorText.c_str());
 +
 +      if ((*I)->Status == pkgAcquire::Item::StatTransientNetworkError) 
 +      {
 +       TransientNetworkFailure = true;
 +       continue;
 +      }
 +
        Failed = true;
     }
     
     // Clean out any old list files
 -   if (!Failed && _config->FindB("APT::Get::List-Cleanup",true) == true)
 +   if (!TransientNetworkFailure &&
 +       _config->FindB("APT::Get::List-Cleanup",true) == true)
     {
        if (Fetcher.Clean(_config->FindDir("Dir::State::lists")) == false ||
          Fetcher.Clean(_config->FindDir("Dir::State::lists") + "partial/") == false)
     if (Cache.BuildCaches() == false)
        return false;
     
 -   if (Failed == true)
 +   if (TransientNetworkFailure == true)
 +      _error->Warning(_("Some index files failed to download, they have been ignored, or old ones used instead."));
 +   else if (Failed == true)
        return _error->Error(_("Some index files failed to download, they have been ignored, or old ones used instead."));
 -   
 +
     return true;
  }
                                                                        /*}}}*/
@@@ -1487,159 -1476,162 +1487,162 @@@ bool DoInstall(CommandLine &CmdL
     if (strcasecmp(CmdL.FileList[0],"remove") == 0)
        DefRemove = true;
     else if (strcasecmp(CmdL.FileList[0], "autoremove") == 0)
-      {
-        _config->Set("APT::Get::AutomaticRemove", "true");
-        DefRemove = true;
-      }
+    {
+       _config->Set("APT::Get::AutomaticRemove", "true");
+       DefRemove = true;
+    }
  
-    for (const char **I = CmdL.FileList + 1; *I != 0; I++)
+    // new scope for the ActionGroup
     {
-       // Duplicate the string
-       unsigned int Length = strlen(*I);
-       char S[300];
-       if (Length >= sizeof(S))
-        continue;
-       strcpy(S,*I);
-       
-       // See if we are removing and special indicators..
-       bool Remove = DefRemove;
-       char *VerTag = 0;
-       bool VerIsRel = false;
-       while (Cache->FindPkg(S).end() == true)
+       pkgDepCache::ActionGroup group(Cache);
+       for (const char **I = CmdL.FileList + 1; *I != 0; I++)
        {
-        // Handle an optional end tag indicating what to do
-        if (Length >= 1 && S[Length - 1] == '-')
-        {
-           Remove = true;
-           S[--Length] = 0;
+        // Duplicate the string
+        unsigned int Length = strlen(*I);
+        char S[300];
+        if (Length >= sizeof(S))
            continue;
-        }
-        
-        if (Length >= 1 && S[Length - 1] == '+')
+        strcpy(S,*I);
+       
+        // See if we are removing and special indicators..
+        bool Remove = DefRemove;
+        char *VerTag = 0;
+        bool VerIsRel = false;
+        while (Cache->FindPkg(S).end() == true)
         {
-           Remove = false;
-           S[--Length] = 0;
-           continue;
-        }
+           // Handle an optional end tag indicating what to do
+           if (Length >= 1 && S[Length - 1] == '-')
+           {
+              Remove = true;
+              S[--Length] = 0;
+              continue;
+           }
         
-        char *Slash = strchr(S,'=');
-        if (Slash != 0)
-        {
-           VerIsRel = false;
-           *Slash = 0;
-           VerTag = Slash + 1;
-        }
+           if (Length >= 1 && S[Length - 1] == '+')
+           {
+              Remove = false;
+              S[--Length] = 0;
+              continue;
+           }
         
-        Slash = strchr(S,'/');
-        if (Slash != 0)
-        {
-           VerIsRel = true;
-           *Slash = 0;
-           VerTag = Slash + 1;
-        }
+           char *Slash = strchr(S,'=');
+           if (Slash != 0)
+           {
+              VerIsRel = false;
+              *Slash = 0;
+              VerTag = Slash + 1;
+           }
         
-        break;
-       }
-       
-       // Locate the package
-       pkgCache::PkgIterator Pkg = Cache->FindPkg(S);
-       Packages++;
-       if (Pkg.end() == true)
-       {
-        // Check if the name is a regex
-        const char *I;
-        for (I = S; *I != 0; I++)
-           if (*I == '?' || *I == '*' || *I == '|' ||
-               *I == '[' || *I == '^' || *I == '$')
-              break;
-        if (*I == 0)
-           return _error->Error(_("Couldn't find package %s"),S);
-        // Regexs must always be confirmed
-        ExpectedInst += 1000;
+           Slash = strchr(S,'/');
+           if (Slash != 0)
+           {
+              VerIsRel = true;
+              *Slash = 0;
+              VerTag = Slash + 1;
+           }
         
-        // Compile the regex pattern
-        regex_t Pattern;
-        int Res;
-        if ((Res = regcomp(&Pattern,S,REG_EXTENDED | REG_ICASE |
-                    REG_NOSUB)) != 0)
-        {
-           char Error[300];        
-           regerror(Res,&Pattern,Error,sizeof(Error));
-           return _error->Error(_("Regex compilation error - %s"),Error);
+           break;
         }
-        
-        // Run over the matches
-        bool Hit = false;
-        for (Pkg = Cache->PkgBegin(); Pkg.end() == false; Pkg++)
+       
+        // Locate the package
+        pkgCache::PkgIterator Pkg = Cache->FindPkg(S);
+        Packages++;
+        if (Pkg.end() == true)
         {
-           if (regexec(&Pattern,Pkg.Name(),0,0,0) != 0)
-              continue;
+           // Check if the name is a regex
+           const char *I;
+           for (I = S; *I != 0; I++)
+              if (*I == '?' || *I == '*' || *I == '|' ||
+                  *I == '[' || *I == '^' || *I == '$')
+                 break;
+           if (*I == 0)
+              return _error->Error(_("Couldn't find package %s"),S);
+           // Regexs must always be confirmed
+           ExpectedInst += 1000;
+        
+           // Compile the regex pattern
+           regex_t Pattern;
+           int Res;
+           if ((Res = regcomp(&Pattern,S,REG_EXTENDED | REG_ICASE |
+                              REG_NOSUB)) != 0)
+           {
+              char Error[300];     
+              regerror(Res,&Pattern,Error,sizeof(Error));
+              return _error->Error(_("Regex compilation error - %s"),Error);
+           }
+        
+           // Run over the matches
+           bool Hit = false;
+           for (Pkg = Cache->PkgBegin(); Pkg.end() == false; Pkg++)
+           {
+              if (regexec(&Pattern,Pkg.Name(),0,0,0) != 0)
+                 continue;
            
-           ioprintf(c1out,_("Note, selecting %s for regex '%s'\n"),
-                    Pkg.Name(),S);
+              ioprintf(c1out,_("Note, selecting %s for regex '%s'\n"),
+                       Pkg.Name(),S);
            
+              if (VerTag != 0)
+                 if (TryToChangeVer(Pkg,Cache,VerTag,VerIsRel) == false)
+                    return false;
+           
+              Hit |= TryToInstall(Pkg,Cache,Fix,Remove,BrokenFix,
+                                  ExpectedInst,false);
+           }
+           regfree(&Pattern);
+        
+           if (Hit == false)
+              return _error->Error(_("Couldn't find package %s"),S);
+        }
+        else
+        {
            if (VerTag != 0)
               if (TryToChangeVer(Pkg,Cache,VerTag,VerIsRel) == false)
                  return false;
-           
-           Hit |= TryToInstall(Pkg,Cache,Fix,Remove,BrokenFix,
-                               ExpectedInst,false);
-        }
-        regfree(&Pattern);
-        
-        if (Hit == false)
-           return _error->Error(_("Couldn't find package %s"),S);
-       }
-       else
-       {
-        if (VerTag != 0)
-           if (TryToChangeVer(Pkg,Cache,VerTag,VerIsRel) == false)
+           if (TryToInstall(Pkg,Cache,Fix,Remove,BrokenFix,ExpectedInst) == false)
               return false;
-        if (TryToInstall(Pkg,Cache,Fix,Remove,BrokenFix,ExpectedInst) == false)
-           return false;
-       }      
-    }
+        }      
+       }
  
-    /* If we are in the Broken fixing mode we do not attempt to fix the
-       problems. This is if the user invoked install without -f and gave
-       packages */
-    if (BrokenFix == true && Cache->BrokenCount() != 0)
-    {
-       c1out << _("You might want to run `apt-get -f install' to correct these:") << endl;
-       ShowBroken(c1out,Cache,false);
+       /* If we are in the Broken fixing mode we do not attempt to fix the
+        problems. This is if the user invoked install without -f and gave
+        packages */
+       if (BrokenFix == true && Cache->BrokenCount() != 0)
+       {
+        c1out << _("You might want to run `apt-get -f install' to correct these:") << endl;
+        ShowBroken(c1out,Cache,false);
  
-       return _error->Error(_("Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution)."));
-    }
+        return _error->Error(_("Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution)."));
+       }
     
-    // Call the scored problem resolver
-    Fix.InstallProtect();
-    if (Fix.Resolve(true) == false)
-       _error->Discard();
+       // Call the scored problem resolver
+       Fix.InstallProtect();
+       if (Fix.Resolve(true) == false)
+        _error->Discard();
  
-    // Now we check the state of the packages,
-    if (Cache->BrokenCount() != 0)
-    {
-       c1out << 
-        _("Some packages could not be installed. This may mean that you have\n" 
-        "requested an impossible situation or if you are using the unstable\n" 
-        "distribution that some required packages have not yet been created\n"
-        "or been moved out of Incoming.") << endl;
-       if (Packages == 1)
+       // Now we check the state of the packages,
+       if (Cache->BrokenCount() != 0)
        {
-        c1out << endl;
         c1out << 
-         _("Since you only requested a single operation it is extremely likely that\n"
-           "the package is simply not installable and a bug report against\n" 
-           "that package should be filed.") << endl;
-       }
+           _("Some packages could not be installed. This may mean that you have\n" 
+             "requested an impossible situation or if you are using the unstable\n" 
+             "distribution that some required packages have not yet been created\n"
+             "or been moved out of Incoming.") << endl;
+        if (Packages == 1)
+        {
+           c1out << endl;
+           c1out << 
+              _("Since you only requested a single operation it is extremely likely that\n"
+                "the package is simply not installable and a bug report against\n" 
+                "that package should be filed.") << endl;
+        }
  
-       c1out << _("The following information may help to resolve the situation:") << endl;
-       c1out << endl;
-       ShowBroken(c1out,Cache,false);
-       return _error->Error(_("Broken packages"));
-    }   
-    
+        c1out << _("The following information may help to resolve the situation:") << endl;
+        c1out << endl;
+        ShowBroken(c1out,Cache,false);
+        return _error->Error(_("Broken packages"));
+       }   
+    }
     if (_config->FindB("APT::Get::AutomaticRemove")) {
        if (!DoAutomaticRemove(Cache)) 
         return false;