Browse Source

2010-09-10 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>

	Store last error of removed download result so that it can be used
	as exit status.
	* src/RequestGroupMan.cc
Tatsuhiro Tsujikawa 15 years ago
parent
commit
cb796432ec
2 changed files with 31 additions and 6 deletions
  1. 6 0
      ChangeLog
  2. 25 6
      src/RequestGroupMan.cc

+ 6 - 0
ChangeLog

@@ -1,3 +1,9 @@
+2010-09-10  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
+
+	Store last error of removed download result so that it can be used
+	as exit status.
+	* src/RequestGroupMan.cc
+
 2010-09-10  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
 
 	Added --max-download-result=NUM option. This option sets maximum

+ 25 - 6
src/RequestGroupMan.cc

@@ -517,7 +517,7 @@ void RequestGroupMan::fillRequestGroupFromReserver(DownloadEngine* e)
         logger_->debug("Commands deleted");
       }
       groupToAdd->releaseRuntimeResource(e);
-      downloadResults_.push_back(groupToAdd->createDownloadResult());
+      addDownloadResult(groupToAdd->createDownloadResult());
     }
   }
   if(!temp.empty()) {
@@ -559,9 +559,9 @@ void RequestGroupMan::closeFile()
 RequestGroupMan::DownloadStat RequestGroupMan::getDownloadStat() const
 {
   size_t finished = 0;
-  size_t error = 0;
+  size_t error = removedErrorResult_;
   size_t inprogress = 0;
-  downloadresultcode::RESULT lastError = downloadresultcode::FINISHED;
+  downloadresultcode::RESULT lastError = removedLastErrorResult_;
   for(std::deque<SharedHandle<DownloadResult> >::const_iterator itr =
         downloadResults_.begin(), eoi = downloadResults_.end();
       itr != eoi; ++itr) {
@@ -772,14 +772,33 @@ void RequestGroupMan::addDownloadResult(const SharedHandle<DownloadResult>& dr)
 {
   if(maxDownloadResult_ == 0) {
     if(!downloadResults_.empty()) {
+      for(std::deque<SharedHandle<DownloadResult> >::iterator i =
+            downloadResults_.begin(), eoi = downloadResults_.end(); i != eoi;
+          ++i) {
+        if((*i)->result != downloadresultcode::FINISHED) {
+          removedLastErrorResult_ = (*i)->result;
+          ++removedErrorResult_;
+        }
+      }
       downloadResults_.clear();
     }
+    if(dr->result != downloadresultcode::FINISHED) {
+      removedLastErrorResult_ = dr->result;
+      ++removedErrorResult_;
+    }
   } else {
     size_t curSize = downloadResults_.size();
     if(curSize >= maxDownloadResult_) {
-      downloadResults_.erase
-        (downloadResults_.begin(),
-         downloadResults_.begin()+curSize-maxDownloadResult_+1);
+      std::deque<SharedHandle<DownloadResult> >::iterator last =
+        downloadResults_.begin()+curSize-maxDownloadResult_+1;
+      for(std::deque<SharedHandle<DownloadResult> >::iterator i =
+            downloadResults_.begin(); i != last; ++i) {
+        if((*i)->result != downloadresultcode::FINISHED) {
+          removedLastErrorResult_ = (*i)->result;
+          ++removedErrorResult_;
+        }
+      }        
+      downloadResults_.erase(downloadResults_.begin(), last);
     }
     downloadResults_.push_back(dr);
   }