| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- using Invercargill;
- using Invercargill.DataStructures;
- private int install_main(string[] args) {
- if(args.length < 3) {
- return install_usage();
- }
- var state = new Usm.SystemState(paths);
-
- printerr("Refreshing repositories...\n");
- var local_finder = new Usm.ResourceFinder();
- var resolver = new Usm.Resolver(local_finder);
- var repos = state.get_repositories();
- foreach (var repo in repos) {
- state.refresh_list(repo, (f, c, t) => printerr(@"Refreshing list for $(repo.name): downloading $f $c/$t bytes\r"));
- var listing = state.get_latest_list(repo);
- if(listing != null) {
- resolver.load_listing(repo, listing);
- }
- printerr("\n");
- }
- var cached_packages = new HashSet<Usm.CachedPackage>();
- for(int i = 2; i < args.length; i++) {
- var target = resolver.find_package(args[i]);
- var client = target.repository.get_client();
- var path = state.generate_cache_path(target.manifest);
- File.new_for_path(path).make_directory();
- var package_path = Path.build_filename(path, "package.usmc");
- client.download_package(package_path, target.repository_entry, (f, c, t) => printerr(@"Downloading $f $c/$t bytes\r"));
- client.verify_package(package_path, target.repository_entry, (f, c, t) => printerr(@"Verifying $f $c/$t bytes\r"));
- cached_packages.add(new Usm.CachedPackage(path));
- printerr("\n");
- }
- var transaction = new Usm.Transaction() {
- paths = paths,
- resource_finder = new Usm.ResourceFinder(paths),
- to_remove = new HashSet<Usm.CachedPackage>(),
- to_install = cached_packages,
- state = state
- };
- printerr("\nRunning transaction...\n");
- transaction.progress_updated.connect(transaction.print_progress);
- transaction.run();
- // todo cleanup
- return 0;
- }
- private int install_usage() {
- printerr("USAGE:\n\tusm install <packages>\n");
- return 255;
- }
|