Entropy/PackageInterface:
- remove add_download() from fetch_file_on_mirrors() Entropy/Equo/Spritz: - add add_downloads() (from UGC interface) after the fetch process Entropy/SocketHostInterface/Repository Daemon: - add a new command that let client register all the downloaded packages at once git-svn-id: http://svn.sabayonlinux.org/projects/entropy/trunk@2646 cd1c1023-2f26-0410-ae45-c471fc1f0318
This commit is contained in:
@@ -835,6 +835,7 @@ def installPackages(packages = [], atomsdata = [], deps = True, emptydeps = Fals
|
||||
if not etpUi['clean'] or onlyfetch:
|
||||
### Before starting the real install, fetch packages and verify checksum.
|
||||
fetchqueue = 0
|
||||
mykeys = {}
|
||||
for packageInfo in runQueue:
|
||||
fetchqueue += 1
|
||||
|
||||
@@ -842,6 +843,10 @@ def installPackages(packages = [], atomsdata = [], deps = True, emptydeps = Fals
|
||||
metaopts['dochecksum'] = dochecksum
|
||||
Package = Equo.Package()
|
||||
Package.prepare(packageInfo,"fetch", metaopts)
|
||||
myrepo = Package.infoDict['repository']
|
||||
if not mykeys.has_key(myrepo):
|
||||
mykeys[myrepo] = set()
|
||||
mykeys[myrepo].add(Equo.entropyTools.dep_getkey(Package.infoDict['atom']))
|
||||
|
||||
xterm_header = "Equo ("+_("fetch")+") :: "+str(fetchqueue)+" of "+totalqueue+" ::"
|
||||
print_info(red(" :: ")+bold("(")+blue(str(fetchqueue))+"/"+red(totalqueue)+bold(") ")+">>> "+darkgreen(Package.infoDict['atom']))
|
||||
@@ -855,6 +860,12 @@ def installPackages(packages = [], atomsdata = [], deps = True, emptydeps = Fals
|
||||
del metaopts
|
||||
del Package
|
||||
|
||||
if Equo.UGC != None:
|
||||
for myrepo in mykeys:
|
||||
mypkgkeys = list(mykeys[myrepo])
|
||||
Equo.UGC.add_downloads(myrepo, mypkgkeys)
|
||||
del mykeys
|
||||
|
||||
if onlyfetch:
|
||||
print_info(red(" @@ ")+blue("%s." % (_("Download completed"),) ))
|
||||
return 0,0
|
||||
|
||||
+54
-13
@@ -3317,7 +3317,7 @@ class EquoInterface(TextInterface):
|
||||
else:
|
||||
return item
|
||||
|
||||
def fetch_file_on_mirrors(self, repository, branch, filename, digest = False, verified = False, fetch_abort_function = None, package_name = None):
|
||||
def fetch_file_on_mirrors(self, repository, branch, filename, digest = False, verified = False, fetch_abort_function = None):
|
||||
|
||||
uris = etpRepositories[repository]['packages'][::-1]
|
||||
remaining = set(uris[:])
|
||||
@@ -3396,8 +3396,8 @@ class EquoInterface(TextInterface):
|
||||
type = "info",
|
||||
header = red(" ## ")
|
||||
)
|
||||
'''
|
||||
if (self.UGC != None) and (package_name != None):
|
||||
|
||||
def register_download(repository, package_name):
|
||||
try:
|
||||
self.UGC.add_download(repository, package_name)
|
||||
@@ -3407,6 +3407,7 @@ class EquoInterface(TextInterface):
|
||||
task = self.entropyTools.parallelTask(register_download, repository, package_name)
|
||||
task.parallel_wait()
|
||||
task.start()
|
||||
'''
|
||||
|
||||
return 0
|
||||
elif resumed:
|
||||
@@ -4184,16 +4185,12 @@ class PackageInterface:
|
||||
header = red(" ## "),
|
||||
back = True
|
||||
)
|
||||
pkgkey = None
|
||||
if self.infoDict.has_key('atom'):
|
||||
pkgkey = self.Entropy.entropyTools.dep_getkey(self.infoDict['atom'])
|
||||
fetch = self.Entropy.fetch_file_on_mirrors(
|
||||
self.infoDict['repository'],
|
||||
self.Entropy.get_branch_from_download_relative_uri(self.infoDict['download']),
|
||||
self.infoDict['download'],
|
||||
self.infoDict['checksum'],
|
||||
fetch_abort_function = self.fetch_abort_function,
|
||||
package_name = pkgkey
|
||||
fetch_abort_function = self.fetch_abort_function
|
||||
)
|
||||
if fetch != 0:
|
||||
self.Entropy.updateProgress(
|
||||
@@ -5241,9 +5238,6 @@ class PackageInterface:
|
||||
type = "info",
|
||||
header = red(" ## ")
|
||||
)
|
||||
pkgkey = None
|
||||
if self.infoDict.has_key('atom'):
|
||||
pkgkey = self.Entropy.entropyTools.dep_getkey(self.infoDict['atom'])
|
||||
|
||||
rc = self.Entropy.fetch_file_on_mirrors(
|
||||
self.infoDict['repository'],
|
||||
@@ -5251,8 +5245,7 @@ class PackageInterface:
|
||||
self.infoDict['download'],
|
||||
self.infoDict['checksum'],
|
||||
self.infoDict['verified'],
|
||||
fetch_abort_function = self.fetch_abort_function,
|
||||
package_name = pkgkey
|
||||
fetch_abort_function = self.fetch_abort_function
|
||||
)
|
||||
if rc != 0:
|
||||
mytxt = "%s. %s: %s" % (
|
||||
@@ -15121,7 +15114,7 @@ class SocketHostInterface:
|
||||
self.SessionsLock.acquire()
|
||||
try:
|
||||
if session in self.sessions:
|
||||
return self.sessions[session]['rc']
|
||||
return self.sessions[session].get('rc')
|
||||
finally:
|
||||
self.SessionsLock.release()
|
||||
|
||||
@@ -18459,6 +18452,20 @@ class DistributionUGCInterface(RemoteDbSkelInterface):
|
||||
self.store_download_data(iddownload, ip_addr)
|
||||
return True
|
||||
|
||||
def do_downloads(self, pkgkeys, ip_addr = None, do_commit = False):
|
||||
self.check_connection()
|
||||
mydate = self.get_date()
|
||||
for pkgkey in pkgkeys:
|
||||
iddownload = self.get_iddownload(pkgkey, mydate)
|
||||
if iddownload == -1:
|
||||
iddownload = self.insert_download(pkgkey, mydate, count = 1)
|
||||
else:
|
||||
self.update_download(iddownload, pkgkey, mydate, 1)
|
||||
if (iddownload > 0) and isinstance(ip_addr,basestring):
|
||||
self.store_download_data(iddownload, ip_addr)
|
||||
if do_commit: self.commit()
|
||||
return True
|
||||
|
||||
def insert_document(self, pkgkey, userid, username, text, title, description, keywords, doc_type = None, do_commit = False):
|
||||
self.check_connection()
|
||||
idkey = self.handle_pkgkey(pkgkey)
|
||||
@@ -18892,6 +18899,16 @@ class DistributionUGCCommands(SocketCommandsSkel):
|
||||
'syntax': "<SESSION_ID> ugc:do_download app-foo/foo",
|
||||
'from': unicode(self), # from what class
|
||||
},
|
||||
'ugc:do_downloads': {
|
||||
'auth': False,
|
||||
'built_in': False,
|
||||
'cb': self.docmd_do_downloads,
|
||||
'args': ["authenticator","myargs"],
|
||||
'as_user': False,
|
||||
'desc': "inform the system of downloaded applications",
|
||||
'syntax': "<SESSION_ID> ugc:do_downloads app-foo/foo1 app-foo/foo2 <...>",
|
||||
'from': unicode(self), # from what class
|
||||
},
|
||||
'ugc:add_comment': {
|
||||
'auth': True,
|
||||
'built_in': False,
|
||||
@@ -19299,6 +19316,18 @@ class DistributionUGCCommands(SocketCommandsSkel):
|
||||
return done,'download not stored'
|
||||
return done,'ok'
|
||||
|
||||
def docmd_do_downloads(self, authenticator, myargs):
|
||||
|
||||
if not myargs:
|
||||
return None,'wrong arguments'
|
||||
|
||||
ip_addr = self._get_session_ip_address(authenticator)
|
||||
ugc = self._load_ugc_interface()
|
||||
done = ugc.do_downloads(myargs, ip_addr = ip_addr)
|
||||
if not done:
|
||||
return done,'download not stored'
|
||||
return done,'ok'
|
||||
|
||||
def _get_generic_doctypes(self, pkgkey, doctypes):
|
||||
ugc = self._load_ugc_interface()
|
||||
metadata = ugc.get_ugc_metadata_doctypes(pkgkey, doctypes)
|
||||
@@ -21096,6 +21125,15 @@ class RepositorySocketClientCommands(EntropySocketClientCommands):
|
||||
)
|
||||
return self.do_generic_handler(cmd, session_id)
|
||||
|
||||
def ugc_do_downloads(self, session_id, pkgkeys):
|
||||
|
||||
cmd = "%s %s %s" % (
|
||||
session_id,
|
||||
'ugc:do_downloads',
|
||||
' '.join(pkgkeys),
|
||||
)
|
||||
return self.do_generic_handler(cmd, session_id)
|
||||
|
||||
def ugc_get_downloads(self, session_id, pkgkey):
|
||||
|
||||
cmd = "%s %s %s" % (
|
||||
@@ -26711,6 +26749,9 @@ class UGCClientInterface:
|
||||
def add_download(self, repository, pkgkey):
|
||||
return self.do_cmd(repository, False, "ugc_do_download", [pkgkey], {})
|
||||
|
||||
def add_downloads(self, repository, pkgkeys):
|
||||
return self.do_cmd(repository, False, "ugc_do_downloads", [pkgkeys], {})
|
||||
|
||||
def get_downloads(self, repository, pkgkey):
|
||||
data = self.do_cmd(repository, False, "ugc_get_downloads", [pkgkey], {})
|
||||
if isinstance(data,tuple): downloads, err_msg = data
|
||||
|
||||
@@ -93,6 +93,7 @@ class QueueExecutor:
|
||||
self.Spritz.ui.abortQueue.show()
|
||||
# first fetch all
|
||||
fetchqueue = 0
|
||||
mykeys = {}
|
||||
for packageInfo in runQueue:
|
||||
|
||||
self.Spritz.queue_bombing()
|
||||
@@ -102,6 +103,12 @@ class QueueExecutor:
|
||||
metaopts = {}
|
||||
metaopts['fetch_abort_function'] = self.Spritz.mirror_bombing
|
||||
Package.prepare(packageInfo,"fetch",metaopts)
|
||||
|
||||
myrepo = Package.infoDict['repository']
|
||||
if not mykeys.has_key(myrepo):
|
||||
mykeys[myrepo] = set()
|
||||
mykeys[myrepo].add(self.Entropy.entropyTools.dep_getkey(Package.infoDict['atom']))
|
||||
|
||||
self.Entropy.updateProgress(
|
||||
"Fetching: "+Package.infoDict['atom'],
|
||||
importance = 2,
|
||||
@@ -114,6 +121,12 @@ class QueueExecutor:
|
||||
del Package
|
||||
self.Entropy.cycleDone()
|
||||
|
||||
if self.Entropy.UGC != None:
|
||||
for myrepo in mykeys:
|
||||
mypkgkeys = list(mykeys[myrepo])
|
||||
self.Entropy.UGC.add_downloads(myrepo, mypkgkeys)
|
||||
del mykeys
|
||||
|
||||
self.Spritz.ui.skipMirror.hide()
|
||||
|
||||
# then removalQueue
|
||||
|
||||
Reference in New Issue
Block a user