xbps-query: add repo and pkgdb mode to --cat
This commit is contained in:
		
							
								
								
									
										2
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								NEWS
									
									
									
									
									
								
							| @@ -45,6 +45,8 @@ xbps-X.XX.X (2020-XX-XX): | |||||||
|  |  | ||||||
|  * xbps-remove(1): fix dry run cache cleaning inconsistencies. [duncaen] |  * xbps-remove(1): fix dry run cache cleaning inconsistencies. [duncaen] | ||||||
|  |  | ||||||
|  |  * xbps-query(1): --cat now works in either repo or pkgdb mode. [duncaen] | ||||||
|  |  | ||||||
|  * xbps.d(5): describe ignorepkg more precisely. [chocimier] |  * xbps.d(5): describe ignorepkg more precisely. [chocimier] | ||||||
|  |  | ||||||
| xbps-0.59.1 (2020-04-01): | xbps-0.59.1 (2020-04-01): | ||||||
|   | |||||||
| @@ -42,6 +42,7 @@ int	show_pkg_info_from_metadir(struct xbps_handle *, const char *, | |||||||
| int	show_pkg_files(xbps_dictionary_t); | int	show_pkg_files(xbps_dictionary_t); | ||||||
| int	show_pkg_files_from_metadir(struct xbps_handle *, const char *); | int	show_pkg_files_from_metadir(struct xbps_handle *, const char *); | ||||||
| int	repo_show_pkg_files(struct xbps_handle *, const char *); | int	repo_show_pkg_files(struct xbps_handle *, const char *); | ||||||
|  | int	cat_file(struct xbps_handle *, const char *, const char *); | ||||||
| int	repo_cat_file(struct xbps_handle *, const char *, const char *); | int	repo_cat_file(struct xbps_handle *, const char *, const char *); | ||||||
| int	repo_show_pkg_info(struct xbps_handle *, const char *, const char *); | int	repo_show_pkg_info(struct xbps_handle *, const char *, const char *); | ||||||
| int 	repo_show_pkg_namedesc(struct xbps_handle *, xbps_object_t, void *, | int 	repo_show_pkg_namedesc(struct xbps_handle *, xbps_object_t, void *, | ||||||
|   | |||||||
| @@ -288,8 +288,10 @@ main(int argc, char **argv) | |||||||
|  |  | ||||||
| 	} else if (catfile) { | 	} else if (catfile) { | ||||||
| 		/* repo cat file mode */ | 		/* repo cat file mode */ | ||||||
|  | 		if (repo_mode) | ||||||
| 			rv =  repo_cat_file(&xh, pkg, catfile); | 			rv =  repo_cat_file(&xh, pkg, catfile); | ||||||
|  | 		else | ||||||
|  | 			rv =  cat_file(&xh, pkg, catfile); | ||||||
| 	} else if (show || show_prop) { | 	} else if (show || show_prop) { | ||||||
| 		/* show mode */ | 		/* show mode */ | ||||||
| 		if (repo_mode) | 		if (repo_mode) | ||||||
|   | |||||||
| @@ -281,6 +281,27 @@ repo_show_pkg_info(struct xbps_handle *xhp, | |||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | int | ||||||
|  | cat_file(struct xbps_handle *xhp, const char *pkg, const char *file) | ||||||
|  | { | ||||||
|  | 	xbps_dictionary_t pkgd; | ||||||
|  | 	char *url; | ||||||
|  | 	int rv; | ||||||
|  |  | ||||||
|  | 	pkgd = xbps_pkgdb_get_pkg(xhp, pkg); | ||||||
|  | 	if (pkgd == NULL) | ||||||
|  | 		return errno; | ||||||
|  |  | ||||||
|  | 	url = xbps_repository_pkg_path(xhp, pkgd); | ||||||
|  | 	if (url == NULL) | ||||||
|  | 		return EINVAL; | ||||||
|  |  | ||||||
|  | 	xbps_dbg_printf(xhp, "matched pkg at %s\n", url); | ||||||
|  | 	rv = xbps_archive_fetch_file_into_fd(url, file, STDOUT_FILENO); | ||||||
|  | 	free(url); | ||||||
|  | 	return rv; | ||||||
|  | } | ||||||
|  |  | ||||||
| int | int | ||||||
| repo_cat_file(struct xbps_handle *xhp, const char *pkg, const char *file) | repo_cat_file(struct xbps_handle *xhp, const char *pkg, const char *file) | ||||||
| { | { | ||||||
|   | |||||||
| @@ -3,3 +3,4 @@ syntax("kyuafile", 1) | |||||||
| test_suite("xbps-query") | test_suite("xbps-query") | ||||||
| atf_test_program{name="ignore_repos_test"} | atf_test_program{name="ignore_repos_test"} | ||||||
| atf_test_program{name="remote_test"} | atf_test_program{name="remote_test"} | ||||||
|  | atf_test_program{name="query_test"} | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| TOPDIR = ../../.. | TOPDIR = ../../.. | ||||||
| -include $(TOPDIR)/config.mk | -include $(TOPDIR)/config.mk | ||||||
|  |  | ||||||
| TESTSHELL = ignore_repos_test remote_test | TESTSHELL = ignore_repos_test remote_test query_test | ||||||
| TESTSSUBDIR = xbps/xbps-query | TESTSSUBDIR = xbps/xbps-query | ||||||
| EXTRA_FILES = Kyuafile | EXTRA_FILES = Kyuafile | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										45
									
								
								tests/xbps/xbps-query/query_test.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								tests/xbps/xbps-query/query_test.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,45 @@ | |||||||
|  | #! /usr/bin/env atf-sh | ||||||
|  |  | ||||||
|  | cat_file_head() { | ||||||
|  | 	atf_set "descr" "xbps-query(1) --cat: cat pkgdb file" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | cat_file_body() { | ||||||
|  | 	mkdir -p repo pkg_A/bin | ||||||
|  | 	echo "hello world!" > pkg_A/bin/file | ||||||
|  | 	cd repo | ||||||
|  | 	xbps-create -A noarch -n foo-1.0_1 -s "foo pkg" ../pkg_A | ||||||
|  | 	atf_check_equal $? 0 | ||||||
|  | 	xbps-rindex -d -a *.xbps | ||||||
|  | 	atf_check_equal $? 0 | ||||||
|  | 	cd .. | ||||||
|  | 	mkdir root | ||||||
|  | 	xbps-install -r root --repository=repo -dvy foo | ||||||
|  | 	atf_check_equal $? 0 | ||||||
|  | 	res=$(xbps-query -r root -dv -C empty.conf --cat /bin/file foo) | ||||||
|  | 	atf_check_equal $? 0 | ||||||
|  | 	atf_check_equal "$res" "hello world!" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | repo_cat_file_head() { | ||||||
|  | 	atf_set "descr" "xbps-query(1) -R --cat: cat repo file" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | repo_cat_file_body() { | ||||||
|  | 	mkdir -p repo pkg_A/bin | ||||||
|  | 	echo "hello world!" > pkg_A/bin/file | ||||||
|  | 	cd repo | ||||||
|  | 	xbps-create -A noarch -n foo-1.0_1 -s "foo pkg" ../pkg_A | ||||||
|  | 	atf_check_equal $? 0 | ||||||
|  | 	xbps-rindex -d -a *.xbps | ||||||
|  | 	atf_check_equal $? 0 | ||||||
|  | 	cd .. | ||||||
|  | 	res=$(xbps-query -r root -dv --repository=repo -C empty.conf --cat /bin/file foo) | ||||||
|  | 	atf_check_equal $? 0 | ||||||
|  | 	atf_check_equal "$res" "hello world!" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | atf_init_test_cases() { | ||||||
|  | 	atf_add_test_case cat_file | ||||||
|  | 	atf_add_test_case repo_cat_file | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user