Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 08 May 2018 14:04:16 +0000
From:      bugzilla-noreply@freebsd.org
To:        bugs@FreeBSD.org
Subject:   [Bug 228069] tar(1) fails to append newer files only (-u, --update),  but always appends all files (like -r).
Message-ID:  <bug-228069-227@https.bugs.freebsd.org/bugzilla/>

next in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D228069

            Bug ID: 228069
           Summary: tar(1) fails to append newer files only (-u,
                    --update), but always appends all files (like -r).
           Product: Base System
           Version: 11.1-STABLE
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Some People
          Priority: ---
         Component: bin
          Assignee: bugs@FreeBSD.org
          Reporter: bugzilla.freebsd@omnilan.de

Created attachment 193180
  --> https://bugs.freebsd.org/bugzilla/attachment.cgi?id=3D193180&action=
=3Dedit
Simple shell test demo which shows tar(1) failing to append only newer files

I guess this simple script is the shortest description (identically attache=
d as
file, respects TEMP environment variable):

#!/bin/sh

#
# Simple test demo which shows tar(1) failing to append only newer
# files to an existing archive.
#

testdir=3Dtobetestarchived
testpath=3D${TEMP:-/tmp}
testtarfile=3Dtest.tar

[ -e "${testpath}"/"${testdir}" ] && rm -R "${testpath}"/"${testdir}"
mkdir "${testpath}"/"${testdir}" ||
        { echo "Can't write into ${testpath} (\$testpath), exiting."; exit =
1; }

cp /COPYRIGHT "${testpath}"/"${testdir}" || echo "No COPYRIGHT in root foun=
d"
>\
        "${testpath}"/"${testdir}"/COPYRIGHT
date >  "${testpath}"/"${testdir}"/date.txt

echo
echo "Prepared two files for testing tar(1)'s --update feature"
echo "(in ${testpath}/${testdir})."
echo "One is named COPYRIGHT and"
echo -n "    "
stat -f "modification timestamp of COPYRIGHT is %Fm" \
        "${testpath}"/"${testdir}"/COPYRIGHT
#sha1 "${testpath}"/"${testdir}"/COPYRIGHT

tar cPf "${testpath}"/"${testtarfile}" "${testpath}"/"${testdir}" || exit 1
echo
echo "Successfully created a test archive, showing the following content:"
tar tf "${testpath}"/"${testtarfile}"
echo -n "    "
stat -f "Size of the archive: %z Bytes" "${testpath}"/"${testtarfile}"

echo
echo "Now we --update the archive, so only files which have a"
echo "modification time newer than the files in the archive"
echo "should be appended to the archive (none in our case)."
# ?halluzination?
#echo
#echo "Bu surprisingly, COPYRIGHT reports beeing modified,"
#echo "so the --update feature seems to be broken, but in fact,"
#echo "something else is broken:"
#stat -f "modification timestamp of COPYRIGHT is %Fm" \
#       "${testpath}"/"${testdir}"/COPYRIGHT
#sha1 "${testpath}"/"${testdir}"/COPYRIGHT

tar uPf "${testpath}"/"${testtarfile}" "${testpath}"/"${testdir}"  || exit 1
echo "Done."
echo "But all files were appended:"
tar tf "${testpath}"/"${testtarfile}"
echo -n "    "
stat -f "Size of the archive: %z Bytes" "${testpath}"/"${testtarfile}"

echo
echo "No idea why the files were appended, since"
echo -n "    "
stat -f "modification timestamp of COPYRIGHT is %Fm" \
        "${testpath}"/"${testdir}"/COPYRIGHT
echo "    (identical)"
echo

# I was sure I saw the first tar creation run modifing st_mtime,
# which would explain the observed misbehaviour, but I cannot reproduce.=20
Either
# I had a typo in this very basic script or I'm losing my mind...
#
# If I knew how to, I'd attach some dtrace/gdb or the like to tar in order =
to
# watch which functions/syscalls are happening...  But I must hope somebody
# else takes over.

--=20
You are receiving this mail because:
You are the assignee for the bug.=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-228069-227>