Sophie

Sophie

distrib > Mageia > 3 > i586 > media > core-release-src > by-pkgid > 03c7be59b52dc9fb87015775eab75aad > files > 11

smart-1.4.1-8.mga3.src.rpm

--- smart-1.4.1/smart/fetcher.py.keyerror~	2012-01-18 19:35:11.380803889 +0100
+++ smart-1.4.1/smart/fetcher.py	2012-01-18 19:38:59.527083835 +0100
@@ -261,6 +261,7 @@ class Fetcher(object):
                     if (item.getRetries() < MAXRETRIES and
                         item.setNextURL()):
                         item.reset()
+                        item.start()
                         handler = self.getHandlerInstance(item)
                         handler.enqueue(item)
                         if handler not in active:
@@ -484,7 +485,7 @@ class FetchItem(object):
         if self._progress.getSub(url):
             self._progress.setSubStopped(url)
             self._progress.show()
-            self._progress.resetSub(url)
+        self._progress.resetSub(url)
 
     def getRetries(self):
         return self._retries
@@ -1094,9 +1095,9 @@ class FTPHandler(FetcherHandler):
                 valid, reason = fetcher.validate(item, localpath,
                                                  withreason=True)
                 if not valid:
+                    item.reset()
                     if openmode == "a":
                         # Try again, from the very start.
-                        item.reset()
                         self._lock.acquire()
                         self._queue.append(item)
                         self._lock.release()
@@ -1295,9 +1296,9 @@ class URLLIBHandler(FetcherHandler):
                 valid, reason = fetcher.validate(item, localpath,
                                                  withreason=True)
                 if not valid:
+                    item.reset()
                     if openmode == "a":
                         # Try again, from the very start.
-                        item.reset()
                         self._lock.acquire()
                         self._queue.append(item)
                         self._lock.release()
@@ -1617,10 +1618,12 @@ class PyCurlHandler(FetcherHandler):
                     if valid:
                         fetchedsize = handle.getinfo(pycurl.SIZE_DOWNLOAD)
                         item.setSucceeded(localpath, fetchedsize)
-                    elif handle.partsize:
-                        self._queue.append(item)
                     else:
-                        item.setFailed(reason)
+                        item.reset()
+                        if handle.partsize:
+                            self._queue.append(item)
+                        else:
+                            item.setFailed(reason)
 
             for handle, errno, errmsg in failed:
 
@@ -1911,6 +1914,7 @@ class SCPHandler(FetcherHandler):
                 valid, reason = fetcher.validate(item, localpath,
                                                  withreason=True)
                 if not valid:
+                    item.reset()
                     raise Error, reason
 
         except (Error, IOError, OSError), e:
--- smart-1.4.1/smart/progress.py.keyerror~	2011-08-18 15:06:34.000000000 +0200
+++ smart-1.4.1/smart/progress.py	2012-01-18 19:38:59.527083835 +0100
@@ -39,6 +39,8 @@ class Progress(object):
         self.__lasttime = 0
         self.__lock = thread.allocate_lock()
         self.__hassub = False
+        self.__fragmentbackup = {}
+        self.__subsucceeded = {}
 
     def lock(self):
         self.__lock.acquire()
@@ -60,6 +62,8 @@ class Progress(object):
         self.__subdone.clear()
         self.__lasttime = 0
         self.__hassub = False
+        self.__fragmentbackup.clear()
+        self.__subsucceeded.clear()
 
     def setHasSub(self, flag):
         self.__hassub = flag
@@ -93,6 +97,7 @@ class Progress(object):
                 subdone = False
                 if subpercent == 100:
                     self.__subdone[subkey] = True
+                    self.__subsucceeded[subkey] = True
                     subdone = True
                     if fragment:
                         _current, _total, _data = self.__progress
@@ -110,6 +115,9 @@ class Progress(object):
                     self.expose(topic, percent, *info)
                     if info[-1]:
                         subkey = info[0]
+                        (subcurrent, subtotal,
+                        fragment, subdata) = self.__subprogress[subkey]
+                        self.__fragmentbackup[subkey] = fragment
                         del self.__subprogress[subkey]
                         del self.__sublastshown[subkey]
                         del self.__subtopic[subkey]
@@ -275,11 +283,21 @@ class Progress(object):
         try:
             if subkey in self.__subdone:
                 del self.__subdone[subkey]
+            fragment = 0
             if subkey in self.__subprogress:
                 (subcurrent, subtotal,
                  fragment, subdata) = self.__subprogress[subkey]
                 self.__subprogress[subkey] = (0, subtotal, fragment, {})
+            elif subkey in self.__fragmentbackup:
+                fragment = self.__fragmentbackup[subkey]
             self.__lasttime = 0
+            if subkey in self.__subsucceeded:
+                del self.__subsucceeded[subkey]
+                self.__done = False
+                if fragment:
+                    self.__lock.release()
+                    self.add(-fragment)
+                    self.__lock.acquire()
         finally:
             self.__lock.release()