Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Ensure to correctly detect directories to delete if prefix ends with '/'
Baptiste Daroussin committed 11 years ago
commit ab55ec68fc7d8c0f465522e25632eda8a14efc01
parent 309a8d2
2 files changed +60 -0
modified libpkg/pkg_delete.c
@@ -273,6 +273,8 @@ pkg_delete_file(struct pkg *pkg, struct pkg_file *file, unsigned force)
	prefix_rel = pkg->prefix;
	prefix_rel++;
	len = strlen(prefix_rel);
+
	while (prefix_rel[len - 1] == '/')
+
		len--;

	/* Regular files and links */
	/* check sha256 */
@@ -376,6 +378,8 @@ pkg_delete_dir(struct pkg *pkg, struct pkg_dir *dir)
	prefix_rel = pkg->prefix;
	prefix_rel++;
	len = strlen(prefix_rel);
+
	while (prefix_rel[len - 1] == '/')
+
		len--;

	if ((strncmp(prefix_rel, path, len) == 0) && path[len] == '/') {
		pkg_add_dir_to_del(pkg, NULL, path);
modified tests/frontend/delete.shin
@@ -50,8 +50,64 @@ EOF
	test -d ${tmpdir} || atf_fail "Prefix have been removed"
}

+
atf_test_case simple_delete_prefix_ending_with_slash
+
simple_delete_prefix_ending_with_slash_head() {
+
	atf_set "descr" "Testing pkg delete when prefix end with /"
+
}
+

+
simple_delete_prefix_ending_with_slash_body() {
+
	export INSTALL_AS_USER=yes
+
	export PKG_DBDIR=.
+

+
	tmpdir=`pwd`
+
	touch file1
+
	mkdir dir
+
	touch dir/file2
+

+
	cat << EOF >> test.ucl
+
name: test
+
origin: test
+
version: 1
+
maintainer: test
+
categories: [test]
+
comment: a test
+
www: http://test
+
prefix: ${tmpdir}/
+
desc: <<EOD
+
Yet another test
+
EOD
+
files: {
+
    ${tmpdir}/file1: "",
+
    ${tmpdir}/dir/file2: "",
+
}
+
EOF
+

+
	atf_check \
+
		-o match:".*Installing.*\.\.\.$" \
+
		-e empty \
+
		-s exit:0 \
+
		pkg register -M test.ucl
+

+
	atf_check \
+
		-o match:".*Deinstalling.*" \
+
		-e empty \
+
		-s exit:0 \
+
		pkg delete -y test
+

+
	test -f file1 && atf_fail "'file1' still present"
+
	test -f dir/file2 && atf_fail "'dir/file2' still present"
+
	test -d dir && atf_fail "'dir' still present"
+
	test -d ${tmpdir} || atf_fail "Prefix have been removed"
+
}
+

+
atf_init_test_cases() {
+
        . $(atf_get_srcdir)/test_environment.sh
+

+
	atf_add_test_case simple_delete
+
}
atf_init_test_cases() {
        . $(atf_get_srcdir)/test_environment.sh

	atf_add_test_case simple_delete
+
	atf_add_test_case simple_delete_prefix_ending_with_slash
}