[Bug 228069] tar(1) fails to append newer files only (-u, --update), but always appends all files (like -r).

bugzilla-noreply at freebsd.org bugzilla-noreply at freebsd.org
Tue May 8 14:04:19 UTC 2018


https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=228069

            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 at FreeBSD.org
          Reporter: bugzilla.freebsd at omnilan.de

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

I guess this simple script is the shortest description (identically attached 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=tobetestarchived
testpath=${TEMP:-/tmp}
testtarfile=test.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 found"
>\
        "${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. 
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.

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


More information about the freebsd-bugs mailing list