mtree: Fix -f -f not considering type changes.

This only lists the changed type and not other attributes so that it
matches the behavior of -C as done in r66747 for fmtree. The NetBSD
-ff implementation was copied from fmtree.

Reviewed by:	imp
MFC after:	2 weeks
Relnotes:	yes
Differential Revision:	https://reviews.freebsd.org/D21623
This commit is contained in:
bdrewery 2019-09-12 18:44:48 +00:00
parent db7b855f0a
commit d1a8b3b114
3 changed files with 38 additions and 2 deletions

View File

@ -145,7 +145,7 @@ compare_nodes(NODE *n1, NODE *n2, char const *path)
return (1);
}
if (n1->type != n2->type) {
differs = 0;
differs = F_TYPE;
mismatch(n1, n2, differs, path);
return (1);
}

View File

@ -411,6 +411,41 @@ netbsd6_nonemptydir_body()
FLAVOR=netbsd6 nonemptydir_body
}
atf_test_case mtree_specspec_type
mtree_specspec_type_head()
{
atf_set "descr" "Test that spec comparisons detect type changes"
}
mtree_specspec_type_body()
{
mkdir testdir
touch testdir/bar
mtree -c -p testdir > mtree1.spec
if [ ! -f mtree1.spec ]; then
atf_fail "mtree failed"
fi
rm -f testdir/bar
ln -s foo testdir/bar
# uid change is expected to be ignored as done in -C
chown -h operator testdir/bar
mtree -c -p testdir > mtree2.spec
if [ ! -f mtree2.spec ]; then
atf_fail "mtree failed"
fi
atf_check -s ignore -o save:output \
-x "mtree -f mtree1.spec -f mtree2.spec"
if ! cut -f 3 output | egrep -q "bar file" || \
! cut -f 3 output | egrep -q "bar link"; then
atf_fail "mtree did not detect type change"
fi
}
atf_init_test_cases()
{
@ -423,6 +458,7 @@ atf_init_test_cases()
atf_add_test_case mtree_ignore
atf_add_test_case mtree_merge
atf_add_test_case mtree_nonemptydir
atf_add_test_case mtree_specspec_type
atf_add_test_case netbsd6_create
atf_add_test_case netbsd6_check

View File

@ -132,7 +132,7 @@ compare_nodes(NODE *n1, NODE *n2, char const *path)
return (1);
}
if (n1->type != n2->type) {
differs = 0;
differs = F_TYPE;
mismatch(n1, n2, differs, path);
return (1);
}