xbps-bin: new dry-run mode (-n) for (auto)update, (auto)remove and install targets.
This commit is contained in:
		
							
								
								
									
										11
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								NEWS
									
									
									
									
									
								
							| @@ -1,5 +1,16 @@ | ||||
| xbps-0.12.0 (???): | ||||
|  | ||||
|  * xbps-bin: new dry-run mode (-n) to show the actions that would | ||||
|    be executed in a transaction. This mode takes effect in the | ||||
|    autoremove, autoupdate, install, remove and update targets. Example: | ||||
|  | ||||
| 	$ xbps-bin -n install kernel-snapshot | ||||
| 	kernel-snapshot install 3.3.0rc2 /mnt/xbps_builder/host/binpkgs/x86_64 | ||||
| 	$ | ||||
|  | ||||
|    The format is "%s %s %s[ %s]\n" for `pkgname', `action', `version' | ||||
|    and `repository' (optional). | ||||
|  | ||||
|  * xbps-bin: the install target will now install the best package | ||||
|    version available in repository pool if just package name has | ||||
|    been specified, otherwise the first repository matching the | ||||
|   | ||||
| @@ -48,9 +48,9 @@ struct list_pkgver_cb { | ||||
| int	install_new_pkg(const char *, bool); | ||||
| int	update_pkg(const char *); | ||||
| int	remove_pkg(const char *, bool); | ||||
| int	autoupdate_pkgs(bool, bool); | ||||
| int	autoremove_pkgs(bool); | ||||
| int	exec_transaction(bool, bool); | ||||
| int	autoupdate_pkgs(bool, bool, bool); | ||||
| int	autoremove_pkgs(bool, bool); | ||||
| int	exec_transaction(bool, bool, bool); | ||||
|  | ||||
| /* from remove.c */ | ||||
| int	remove_installed_pkgs(int, char **, bool, bool, bool, bool); | ||||
|   | ||||
| @@ -65,14 +65,14 @@ main(int argc, char **argv) | ||||
| 	const char *rootdir, *cachedir, *conffile, *option; | ||||
| 	int i, c, flags, rv; | ||||
| 	bool yes, reqby_force, force_rm_with_deps, recursive_rm; | ||||
| 	bool reinstall, show_download_pkglist_url; | ||||
| 	bool reinstall, show_download_pkglist_url, dry_run; | ||||
|  | ||||
| 	rootdir = cachedir = conffile = option = NULL; | ||||
| 	flags = rv = 0; | ||||
| 	reqby_force = yes = force_rm_with_deps = false; | ||||
| 	reqby_force = yes = dry_run = force_rm_with_deps = false; | ||||
| 	recursive_rm = reinstall = show_download_pkglist_url = false; | ||||
|  | ||||
| 	while ((c = getopt(argc, argv, "AC:c:dDFfMo:Rr:Vvy")) != -1) { | ||||
| 	while ((c = getopt(argc, argv, "AC:c:dDFfMno:Rr:Vvy")) != -1) { | ||||
| 		switch (c) { | ||||
| 		case 'A': | ||||
| 			flags |= XBPS_FLAG_INSTALL_AUTO; | ||||
| @@ -100,6 +100,9 @@ main(int argc, char **argv) | ||||
| 		case 'M': | ||||
| 			flags |= XBPS_FLAG_INSTALL_MANUAL; | ||||
| 			break; | ||||
| 		case 'n': | ||||
| 			dry_run = true; | ||||
| 			break; | ||||
| 		case 'o': | ||||
| 			option = optarg; | ||||
| 			break; | ||||
| @@ -214,7 +217,7 @@ main(int argc, char **argv) | ||||
| 			if ((rv = install_new_pkg(argv[i], reinstall)) != 0) | ||||
| 				goto out; | ||||
|  | ||||
| 		rv = exec_transaction(yes, show_download_pkglist_url); | ||||
| 		rv = exec_transaction(yes, dry_run, show_download_pkglist_url); | ||||
|  | ||||
| 	} else if (strcasecmp(argv[0], "update") == 0) { | ||||
| 		/* Update an installed package. */ | ||||
| @@ -225,7 +228,7 @@ main(int argc, char **argv) | ||||
| 			if ((rv = update_pkg(argv[i])) != 0) | ||||
| 				goto out; | ||||
|  | ||||
| 		rv = exec_transaction(yes, show_download_pkglist_url); | ||||
| 		rv = exec_transaction(yes, dry_run, show_download_pkglist_url); | ||||
|  | ||||
| 	} else if (strcasecmp(argv[0], "remove") == 0) { | ||||
| 		/* Removes a package. */ | ||||
| @@ -245,7 +248,7 @@ main(int argc, char **argv) | ||||
| 			rv = EINVAL; | ||||
| 			goto out; | ||||
| 		} | ||||
| 		rv = exec_transaction(yes, false); | ||||
| 		rv = exec_transaction(yes, dry_run, false); | ||||
|  | ||||
| 	} else if (strcasecmp(argv[0], "show") == 0) { | ||||
| 		/* Shows info about an installed binary package. */ | ||||
| @@ -286,7 +289,7 @@ main(int argc, char **argv) | ||||
| 		if (argc != 1) | ||||
| 			usage(); | ||||
|  | ||||
| 		rv = autoupdate_pkgs(yes, show_download_pkglist_url); | ||||
| 		rv = autoupdate_pkgs(yes, dry_run, show_download_pkglist_url); | ||||
|  | ||||
| 	} else if (strcasecmp(argv[0], "show-orphans") == 0) { | ||||
| 		/* | ||||
| @@ -307,7 +310,7 @@ main(int argc, char **argv) | ||||
| 		if (argc != 1) | ||||
| 			usage(); | ||||
|  | ||||
| 		rv = autoremove_pkgs(yes); | ||||
| 		rv = autoremove_pkgs(yes, dry_run); | ||||
|  | ||||
| 	} else if (strcasecmp(argv[0], "reconfigure") == 0) { | ||||
| 		/* | ||||
|   | ||||
| @@ -63,6 +63,24 @@ show_missing_deps(prop_array_t a) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| static void | ||||
| show_actions(prop_object_iterator_t iter) | ||||
| { | ||||
| 	prop_object_t obj; | ||||
| 	const char *repoloc, *trans, *pkgname, *version; | ||||
|  | ||||
| 	while ((obj = prop_object_iterator_next(iter)) != NULL) { | ||||
| 		prop_dictionary_get_cstring_nocopy(obj, "transaction", &trans); | ||||
| 		prop_dictionary_get_cstring_nocopy(obj, "pkgname", &pkgname); | ||||
| 		prop_dictionary_get_cstring_nocopy(obj, "version", &version); | ||||
| 		printf("%s %s %s", pkgname, trans, version); | ||||
| 		if (prop_dictionary_get_cstring_nocopy(obj, | ||||
| 		    "repository", &repoloc)) | ||||
| 			printf(" %s", repoloc); | ||||
| 		printf("\n"); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| static int | ||||
| show_binpkgs_url(prop_object_iterator_t iter) | ||||
| { | ||||
| @@ -193,7 +211,7 @@ show_transaction_sizes(struct transaction *trans) | ||||
| } | ||||
|  | ||||
| int | ||||
| autoupdate_pkgs(bool yes, bool show_download_pkglist_url) | ||||
| autoupdate_pkgs(bool yes, bool dry_run, bool show_download_pkglist_url) | ||||
| { | ||||
| 	int rv = 0; | ||||
|  | ||||
| @@ -218,11 +236,11 @@ autoupdate_pkgs(bool yes, bool show_download_pkglist_url) | ||||
| 			return -1; | ||||
| 		} | ||||
| 	} | ||||
| 	return exec_transaction(yes, show_download_pkglist_url); | ||||
| 	return exec_transaction(yes, dry_run, show_download_pkglist_url); | ||||
| } | ||||
|  | ||||
| int | ||||
| autoremove_pkgs(bool yes) | ||||
| autoremove_pkgs(bool yes, bool dry_run) | ||||
| { | ||||
| 	int rv; | ||||
|  | ||||
| @@ -236,7 +254,7 @@ autoremove_pkgs(bool yes) | ||||
| 			return rv; | ||||
| 		} | ||||
| 	} | ||||
| 	return exec_transaction(yes, false); | ||||
| 	return exec_transaction(yes, dry_run, false); | ||||
| } | ||||
|  | ||||
| int | ||||
| @@ -325,7 +343,7 @@ remove_pkg(const char *pkgname, bool recursive) | ||||
| } | ||||
|  | ||||
| int | ||||
| exec_transaction(bool yes, bool show_download_urls) | ||||
| exec_transaction(bool yes, bool dry_run, bool show_download_urls) | ||||
| { | ||||
| 	prop_array_t mdeps; | ||||
| 	struct transaction *trans; | ||||
| @@ -359,6 +377,13 @@ exec_transaction(bool yes, bool show_download_urls) | ||||
| 		    strerror(errno)); | ||||
| 		goto out; | ||||
| 	} | ||||
| 	/* | ||||
| 	 * dry-run mode, show what would be done but don't run anything. | ||||
| 	 */ | ||||
| 	if (dry_run) { | ||||
| 		show_actions(trans->iter); | ||||
| 		goto out; | ||||
| 	} | ||||
| 	/* | ||||
| 	 * Only show URLs to download binary packages. | ||||
| 	 */ | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| .Dd January 19, 2012 | ||||
| .Dd February 3, 2012 | ||||
| .Os Void GNU/Linux | ||||
| .Dt xbps-bin 8 | ||||
| .Sh NAME | ||||
| @@ -86,6 +86,17 @@ and | ||||
| .Em update | ||||
| targets | ||||
| and target packages and its required dependencies will be matched. | ||||
| .It Fl n | ||||
| Enables dry-run mode. | ||||
| To show the actions that would be executed in a transaction. | ||||
| This mode takes effect in the | ||||
| .Em autoremove , | ||||
| .Em autoupdate , | ||||
| .Em install , | ||||
| .Rm remove | ||||
| and | ||||
| .Em update | ||||
| targets. | ||||
| .It Fl o Ar key Op key2,... | ||||
| Used currently in the | ||||
| .Em show | ||||
|   | ||||
		Reference in New Issue
	
	Block a user