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
pull/1/head
Tatsuhiro Tsujikawa 2010-09-10 15:03:40 +00:00
parent f26685ded1
commit cb796432ec
2 changed files with 31 additions and 6 deletions

View File

@ -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> 2010-09-10 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Added --max-download-result=NUM option. This option sets maximum Added --max-download-result=NUM option. This option sets maximum

View File

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