339 for d in os.listdir(os.path.join(thedir, v)) |
340 for d in os.listdir(os.path.join(thedir, v)) |
340 ] |
341 ] |
341 |
342 |
342 return dependents |
343 return dependents |
343 |
344 |
|
345 def retrieve_catalogs(self): |
|
346 for auth in self.gen_authorities(): |
|
347 # XXX Mirror selection and retrieval policy? |
|
348 |
|
349 # Ignore http_proxy for localhost case, by overriding |
|
350 # default proxy behaviour of urlopen(). |
|
351 proxy_uri = None |
|
352 netloc = urlparse.urlparse(auth["origin"])[1] |
|
353 if urllib.splitport(netloc)[0] == "localhost": |
|
354 proxy_uri = {} |
|
355 |
|
356 uri = urlparse.urljoin(auth["origin"], "catalog") |
|
357 |
|
358 c = urllib.urlopen(uri, proxies=proxy_uri) |
|
359 |
|
360 # compare headers |
|
361 data = c.read() |
|
362 |
|
363 # Filename should be reduced to host\:port |
|
364 cfile = file("%s/catalog/%s" % (self.imgdir, |
|
365 auth["prefix"]), "w") |
|
366 print >>cfile, data |
|
367 |
344 def reload_catalogs(self): |
368 def reload_catalogs(self): |
345 cdir = "%s/%s" % (self.imgdir, "catalog") |
369 cdir = "%s/%s" % (self.imgdir, "catalog") |
346 for cf in os.listdir(cdir): |
370 for auth in self.gen_authorities(): |
347 c = catalog.Catalog() |
371 c = catalog.Catalog() |
348 c.load("%s/%s" % (cdir, cf)) |
372 c.load("%s/%s" % (cdir, auth["prefix"])) |
349 |
373 |
350 self.catalogs[cf] = c |
374 self.catalogs[auth["prefix"]] = c |
351 |
|
352 # XXX XXX |
|
353 # build up authorities |
|
354 |
375 |
355 def gen_known_packages(self): |
376 def gen_known_packages(self): |
356 for c in self.catalogs.values(): |
377 for c in self.catalogs.values(): |
357 for pf in c.gen_package_versions(): |
378 for pf in c.gen_package_versions(): |
358 yield pf |
379 yield pf |
377 if opt == "-u": |
398 if opt == "-u": |
378 upgradable_only = True |
399 upgradable_only = True |
379 if opt == "-v": |
400 if opt == "-v": |
380 verbose = True |
401 verbose = True |
381 |
402 |
382 |
|
383 if verbose: |
403 if verbose: |
384 fmt_str = "%-64s %-10s %c%c%c%c" |
404 fmt_str = "%-64s %-10s %c%c%c%c" |
385 else: |
405 else: |
386 fmt_str = "%-50s %-10s %c%c%c%c" |
406 fmt_str = "%-50s %-10s %c%c%c%c" |
387 |
407 |
388 proot = "%s/pkg" % self.imgdir |
408 proot = "%s/pkg" % self.imgdir |
389 |
409 |
390 # XXX if len(pargs) > 0, then pkgs_known is pargs and all_known |
410 if len(pargs): |
391 # is unused |
411 pkgs_known = [ m[1] |
392 |
412 for p in pargs |
393 if all_known: |
413 for m in self.get_regex_matching_fmris(p) ] |
394 # XXX Iterate through catalogs, building up list of |
414 |
395 # packages. |
415 elif all_known: |
396 pkgs_known = [ str(pf) for pf in self.gen_known_packages() ] |
416 pkgs_known = [ pf for pf in |
|
417 self.gen_known_packages() ] |
397 |
418 |
398 else: |
419 else: |
399 pkgs_known = [ urllib.unquote("%s@%s" % (pd, vd)) |
420 pkgs_known = [ fmri.PkgFmri(urllib.unquote("%s@%s" % |
|
421 (pd, vd)), None) |
400 for pd in sorted(os.listdir(proot)) |
422 for pd in sorted(os.listdir(proot)) |
401 for vd in sorted(os.listdir("%s/%s" % (proot, pd))) |
423 for vd in sorted(os.listdir("%s/%s" % (proot, pd))) |
402 if os.path.exists("%s/%s/%s/installed" % |
424 if os.path.exists("%s/%s/%s/installed" % |
403 (proot, pd, vd)) ] |
425 (proot, pd, vd)) ] |
404 |
426 |
405 if len(pkgs_known) == 0: |
427 if len(pkgs_known) == 0: |
406 print "pkg: no packages installed" |
428 if len(pargs): |
|
429 print "pkg: no matching packages installed" |
|
430 else: |
|
431 print "pkg: no packages installed" |
407 return |
432 return |
408 |
433 |
409 print fmt_str % ("FMRI", "STATE", "U", "F", "I", "X") |
434 print fmt_str % ("FMRI", "STATE", "U", "F", "I", "X") |
410 |
435 |
411 for p in pkgs_known: |
436 for p in pkgs_known: |
412 f = fmri.PkgFmri(p, None) |
|
413 |
|
414 upgradable = "-" |
437 upgradable = "-" |
415 frozen = "-" |
438 frozen = "-" |
416 incorporated = "-" |
439 incorporated = "-" |
417 excludes = "-" |
440 excludes = "-" |
418 |
441 |
419 if len(self.get_matching_pkgs(f)) > 1: |
442 if len(self.get_matching_pkgs(p)) > 1: |
420 upgradable = "u" |
443 upgradable = "u" |
421 elif upgradable_only: |
444 elif upgradable_only: |
422 continue |
445 continue |
423 |
446 |
424 if not verbose: |
447 if not verbose: |
425 pf = f.get_short_fmri() |
448 pf = p.get_short_fmri() |
426 else: |
449 else: |
427 pf = f.get_fmri(self.get_default_authority()) |
450 pf = p.get_fmri(self.get_default_authority()) |
428 |
451 |
429 print fmt_str % (pf, self.get_pkg_state_by_fmri(f), |
452 print fmt_str % (pf, self.get_pkg_state_by_fmri(p), |
430 upgradable, frozen, incorporated, excludes) |
453 upgradable, frozen, incorporated, excludes) |
431 |
454 |
432 |
455 |
433 if __name__ == "__main__": |
456 if __name__ == "__main__": |
434 # XXX Need to construct a trivial image and catalog. |
457 # XXX Need to construct a trivial image and catalog. |