|
@@ -0,0 +1,62 @@
|
|
|
+using Invercargill;
|
|
|
+
|
|
|
+private int install_main(string[] args) {
|
|
|
+
|
|
|
+ if(args.length < 3) {
|
|
|
+ return install_usage();
|
|
|
+ }
|
|
|
+
|
|
|
+ var state = new Usm.SystemState(paths);
|
|
|
+
|
|
|
+ printerr("Refreshing repositories...\n");
|
|
|
+ var resolver = new Usm.Resolver();
|
|
|
+ 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 target = resolver.find_package(args[2]);
|
|
|
+ var client = target.repository.get_client();
|
|
|
+
|
|
|
+ printerr("3\n");
|
|
|
+ var path = state.generate_cache_path(target.manifest);
|
|
|
+ File.new_for_path(path).make_directory();
|
|
|
+ var package_path = Path.build_filename(path, "package.usmc");
|
|
|
+ var extract_path = Path.build_filename(path, "package");
|
|
|
+ File.new_for_path(extract_path).make_directory();
|
|
|
+ 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"));
|
|
|
+ var cached_package = new Usm.CachedPackage(path);
|
|
|
+
|
|
|
+ var proc = new Subprocess.newv(new string[] { "tar", "-xf", package_path, "-C", extract_path }, SubprocessFlags.INHERIT_FDS);
|
|
|
+ if(!proc.wait_check()) {
|
|
|
+ printerr("Failed to extract package\n");
|
|
|
+ return 20;
|
|
|
+ }
|
|
|
+
|
|
|
+ Environment.set_current_dir(extract_path);
|
|
|
+ manifest = new Usm.Manifest.from_file("MANIFEST.usm");
|
|
|
+ build_path = cached_package.create_build_directory();
|
|
|
+
|
|
|
+ var result = install();
|
|
|
+ if(result != 0) {
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ state.mark_installed(cached_package);
|
|
|
+ cached_package.get_build_archive();
|
|
|
+
|
|
|
+ // todo cleanup
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+private int install_usage() {
|
|
|
+ printerr("USAGE:\n\tusm install <packages>\n");
|
|
|
+ return 255;
|
|
|
+}
|