[client] Implemented "equo fetch".

Some clenup needed, also we can remove some code duplication.
This commit is contained in:
Michele Tameni
2009-10-30 09:51:02 +01:00
parent 5cc02211e0
commit a1210d3252
2 changed files with 115 additions and 1 deletions
+7 -1
View File
@@ -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)
+108
View File
@@ -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,