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(); 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(), 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 \n"); return 255; }