From a1210d3252696b33a0694ced77e0e15bbb8a786e Mon Sep 17 00:00:00 2001 From: Michele Tameni Date: Fri, 30 Oct 2009 09:51:02 +0100 Subject: [PATCH] [client] Implemented "equo fetch". Some clenup needed, also we can remove some code duplication. --- client/equo.py | 8 +++- client/text_ui.py | 108 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 115 insertions(+), 1 deletion(-) diff --git a/client/equo.py b/client/equo.py index e8c6d403f..1f3f08521 100644 --- a/client/equo.py +++ b/client/equo.py @@ -135,6 +135,12 @@ myopts = [ (2, '--pretend', 1, _('just show what would be done')), (2, '--savehere', 1, _('save sources in current working directory')), None, + (1, 'fetch', 2, _('just download packages without doing the install')), + (2, '--ask', 2, _('ask before making any changes')), + (2, '--pretend', 1, _('just show what would be done')), + (2, '--multifetch', 1, _('download multiple packages in parallel (default 3)')), + (2, '--multifetch=N', 1, _('download N packages in parallel (max 10)')), + None, (1, 'remove', 2, _('remove one or more packages')), (2, '--ask', 2, _('ask before making any changes')), (2, '--pretend', 1, _('just show what would be done')), @@ -501,7 +507,7 @@ def main(): do_moo() elif options[0] in ("install", "remove", "config", "world", "upgrade", - "deptest", "unusedpackages", "libtest", "source", "hop"): + "deptest", "unusedpackages", "libtest", "source", "fetch", "hop"): import text_ui rc = text_ui.package(options) diff --git a/client/text_ui.py b/client/text_ui.py index bfe90a11e..1be9fc998 100644 --- a/client/text_ui.py +++ b/client/text_ui.py @@ -123,6 +123,17 @@ def package(options): print_error(red(" %s." % (_("Nothing to do"),) )) rc = 127 + elif (options[0] == "fetch"): + + if myopts or mytbz2paths: + status, rc = downloadPackages(myopts, deps = equoRequestDeps, + deepdeps = equoRequestDeep, tbz2 = mytbz2paths, + multifetch = equoRequestMultifetch, + dochecksum = equoRequestChecksum) + else: + print_error(red(" %s." % (_("Nothing to do"),) )) + rc = 127 + elif (options[0] == "install"): if (myopts) or (mytbz2paths) or (equoRequestResume): status, rc = installPackages(myopts, deps = equoRequestDeps, @@ -705,6 +716,103 @@ def downloadSources(packages = None, deps = True, deepdeps = False, tbz2 = None, return 0, 0 +def downloadPackages(packages = None, deps = True, deepdeps = False, tbz2 = None, + multifetch = 1, dochecksum = True): + + if packages is None: + packages = [] + if tbz2 is None: + tbz2 = [] + + # check if I am root + if (not Equo.entropyTools.is_root()): + mytxt = "%s %s %s" % (_("Running with"), bold("--pretend"), red("..."),) + print_warning(mytxt) + etpUi['pretend'] = True + + + foundAtoms = _scanPackages(packages, tbz2) + + # are there packages in foundAtoms? + if not foundAtoms: + print_error( red("%s." % (_("No packages found"),) )) + return 127, -1 + + abort, myrc = _showPackageInfo(foundAtoms, deps) + if abort: return myrc + + abort, runQueue, removalQueue = _generateRunQueue(foundAtoms, deps, + False, deepdeps) + if abort: return runQueue + + if etpUi['pretend']: + return 0, 0 + + totalqueue = str(len(runQueue)) + fetchqueue = 0 + metaopts = {} + + mykeys = {} + mymultifetch = multifetch + + if multifetch > 1: + myqueue = [] + mystart = 0 + while True: + mylist = runQueue[mystart:mymultifetch] + if not mylist: break + myqueue.append(mylist) + mystart += multifetch + mymultifetch += multifetch + mytotalqueue = str(len(myqueue)) + + for matches in myqueue: + fetchqueue += 1 + + metaopts = {} + metaopts['dochecksum'] = dochecksum + Package = Equo.Package() + Package.prepare(matches, "multi_fetch", metaopts) + myrepo_data = Package.pkgmeta['repository_atoms'] + for myrepo in myrepo_data: + if myrepo not in mykeys: + mykeys[myrepo] = set() + for myatom in myrepo_data[myrepo]: + mykeys[myrepo].add(Equo.entropyTools.dep_getkey(myatom)) + + xterm_header = "Equo ("+_("fetch")+") :: "+str(fetchqueue)+" of "+mytotalqueue+" ::" + print_info(red(" :: ")+bold("(")+blue(str(fetchqueue))+"/"+ \ + red(mytotalqueue)+bold(") ")+">>> "+darkgreen(str(len(matches)))+" "+_("packages")) + + rc = Package.run(xterm_header = xterm_header) + if rc != 0: + #dirscleanup() #FIXME is this needed? + return -1, rc + Package.kill() + + del metaopts + del Package + else: + + for match in runQueue: + fetchqueue += 1 + + Package = Equo.Package() + + Package.prepare(match, "fetch", metaopts) + + xterm_header = "Equo ("+_("sources fetch")+") :: "+str(fetchqueue)+" of "+totalqueue+" ::" + print_info(red(" :: ")+bold("(")+blue(str(fetchqueue))+"/"+red(totalqueue)+bold(") ")+">>> "+darkgreen(Package.pkgmeta['atom'])) + + rc = Package.run(xterm_header = xterm_header) + if rc != 0: + return -1, rc + Package.kill() + + del Package + + return 0, 0 + def installPackages(packages = None, atomsdata = None, deps = True, emptydeps = False, onlyfetch = False, deepdeps = False, config_files = False, tbz2 = None, resume = False, skipfirst = False,