Install.vala 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using Invercargill;
  2. using Invercargill.DataStructures;
  3. private int install_main(string[] args) {
  4. if(args.length < 3) {
  5. return install_usage();
  6. }
  7. var state = new Usm.SystemState(paths);
  8. printerr("Refreshing repositories...\n");
  9. var local_finder = new Usm.ResourceFinder();
  10. var resolver = new Usm.Resolver(local_finder);
  11. var repos = state.get_repositories();
  12. foreach (var repo in repos) {
  13. state.refresh_list(repo, (f, c, t) => printerr(@"Refreshing list for $(repo.name): downloading $f $c/$t bytes\r"));
  14. var listing = state.get_latest_list(repo);
  15. if(listing != null) {
  16. resolver.load_listing(repo, listing);
  17. }
  18. printerr("\n");
  19. }
  20. var cached_packages = new HashSet<Usm.CachedPackage>();
  21. for(int i = 2; i < args.length; i++) {
  22. var target = resolver.find_package(args[i]);
  23. var client = target.repository.get_client();
  24. var path = state.generate_cache_path(target.manifest);
  25. File.new_for_path(path).make_directory();
  26. var package_path = Path.build_filename(path, "package.usmc");
  27. client.download_package(package_path, target.repository_entry, (f, c, t) => printerr(@"Downloading $f $c/$t bytes\r"));
  28. client.verify_package(package_path, target.repository_entry, (f, c, t) => printerr(@"Verifying $f $c/$t bytes\r"));
  29. cached_packages.add(new Usm.CachedPackage(path));
  30. printerr("\n");
  31. }
  32. var transaction = new Usm.Transaction() {
  33. paths = paths,
  34. resource_finder = new Usm.ResourceFinder(paths),
  35. to_remove = new HashSet<Usm.CachedPackage>(),
  36. to_install = cached_packages,
  37. state = state
  38. };
  39. printerr("\nRunning transaction...\n");
  40. transaction.progress_updated.connect(transaction.print_progress);
  41. transaction.run();
  42. // todo cleanup
  43. return 0;
  44. }
  45. private int install_usage() {
  46. printerr("USAGE:\n\tusm install <packages>\n");
  47. return 255;
  48. }