Skip to content

Commit

Permalink
mtree: Fix -f -f not considering type changes.
Browse files Browse the repository at this point in the history
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
  • Loading branch information
bdrewery committed Sep 12, 2019
1 parent cfd4747 commit 4f4b548
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 2 deletions.
2 changes: 1 addition & 1 deletion contrib/mtree/specspec.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down
36 changes: 36 additions & 0 deletions contrib/netbsd-tests/usr.sbin/mtree/t_mtree.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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()
{
Expand All @@ -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
Expand Down
2 changes: 1 addition & 1 deletion usr.sbin/fmtree/specspec.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down

0 comments on commit 4f4b548

Please sign in to comment.